Добрый день, подскажите пожалуйста, можно ли создать правило, которое будет выполняться 1 раз после загрузки контроллера?
WB6
Добрый день, подскажите пожалуйста, можно ли создать правило, которое будет выполняться 1 раз после загрузки контроллера?
WB6
Добрый день. Да, конечно. Использовать Cron для этого не нужно, все скрипты выполняются после загрузки (или перезапуска wb-rules), для того чтобы определить - была ли перезагрузка можно проверить uptime контроллера.
Если не затруднит можно пример, мне при включение нужно подать на реле управляющий сигнал, в описание движка написано что dev[] не стоит использовать вне функции, Но функцию без when я не могу создать, т.к. в When мне не чего писать и нечего отслеживать. Спасибо!
И не нашел пример как вызывается Uptime из wb-rules
Например так:
//06_15_test_04.js
defineVirtualDevice("StartRule", {
title: "StartRule",
cells: {
executed : {
type : "switch",
value : false,
readonly: true,
forceDefault: true,
},
}
});
function onstart(){
if (!dev["StartRule/executed"]){
dev["StartRule/executed"] = true
//выполняется что-то
}
}
setTimeout(function() {onstart()}, 2000) //задержка старта выполнения
его надо через выполнение внешних процессов запускать-парсить.
А можно еще ткнуть меня носом, как получить ответ от запуска runShellCommand, нашел только как запускать, хочется спарсить ответ от внешней команды.
Вот так, например:
Эта задержка обусловлена какими-то особенностями запуска скриптов или показан пример запуска с отсрочкой?
Просто пример.
На самом деле - не очень хорошая практика, обычно лучше учитывать более релевантные признаки. Например, для реле - включить и проверять в правиле его uptime. То есть если uptime модуля реле меньше X (например 5), секунд - то не реагировать правилом.
Реальный кейс: Плохой контакт питания, реле перезапускается. При этом счетчики нажатий сбрасываются. И правило их отрабатывает. А при проверке uptime - не отработает.
Единственный минус - не будет работать x секунд раз в 2^32 секунд, когда счетчик переполнится.
Если говорить про контроль состояния за реле - не лучше ли мониторить связь? Пропажа питания = пропажа связи.
И да - если это реальный кейс, то можно условно бесплатно дать пользователям больше диагностики, генерируя скажем на 1с пульс “я перезагрузился” или что-то подобное.
Аптайм как-то слишком “сложно”.
На самом деле мой вопрос был больше про то, как “правильнее” организовывать скрипт, который выполняется 1 раз при загрузке. Типа скрипта инициализации
зачем если есть топик meta/error?
Но тут надо делить и обрабатывать все возможные комбинации.
То есть перебой питания всегда (если настроен опрос хоть одного “классического” регистра) вызывает установку meta/error. Точно так же сбой связи вызывает установку ошибок. Разница - в том что в первом случае сбрасываются значения счетчиков нажатий.
А во втором - нет. Но вот что делать с изменившимися счетчиками когда связи не было уже решает разработчик - инструменты все есть.
причина | счетчики нажатий | error |
---|---|---|
перебой с питанием | сбрасываются | “”->“r”->“” |
перебой связи | остаются | “”->“r”->“” |
Хм. Думаю что надо ориентироваться на то (статус), с чем будет работать скрипт…