Добрый день!
Пытаюсь научиться изменять время срабатвания правила по cron, но почему-то у меня виснет движок wb-rules, по крайне мере очень на это похоже. Не буду сейчас приводить свой код, который я пытаюсь написать, потому что у меня не работает даже пример с портала из этой темы https://support.wirenboard.com/t/neobhodim-razrabotchik-dlya-realizaczii-proekta-na-wiren-board/6411/19:
var cronRuleNum = null;
//Создадим виртуальное устройство для датавремени:
defineVirtualDevice("timer_control", {
title: "TimerControl", //
cells: {
CronString : { //Просто текстовое поле
type : "text",
value : "5 * * * *",
readonly: false,
},
}
});
//И правило, срабатывающее на изменения поля CronString
defineRule("CronStrngChanged", {
whenChanged: "timer_control/CronString",
then: function (newValue, devName, cellName) {
log.info("CronStrngChanged", newValue)
if (cronRuleNum) {//Если правило уже есть - отключим
log.info("MakeCron disable", cronRuleNum)
disableRule(cronRuleNum)
}
MakeCron(newValue)
}
});
//Однократно запустим функцию для начального создания правила.
log.info(dev["timer_control"]["CronString"])
MakeCron(dev["timer_control"]["CronString"])
function MakeCron (CronString){
log.info("MakeCron enter", CronString)
//Правило с кроном - создадим, присвоим идентификатор правила переменной.
cronRuleNum = defineRule("CronRule", {
when: cron(CronString),
then: function (newValue, devName, cellName) {
log.info("CronRule executed")//Тут и вызывается то, что хотим запустить с помощью cron
}
});
log.info("MakeCron after", cronRuleNum)
}
В логах вижу следующее:
Сразу после рестарта wb-rules:
2023-01-12 00:16:07 5 * * * *
2023-01-12 00:16:07 MakeCron enter 5 * * * *
2023-01-12 00:16:07 MakeCron after 14
То есть функция MakeCron отработала и все в порядке, можно даже дождаться срабатывания:
2023-01-12 00:17:04 CronRule executed
Теперь, пытаюсь изменить строку на “7 * * * *”, в логах вижу:
2023-01-12 00:18:53 CronStrngChanged 7 * * * *
2023-01-12 00:18:53 MakeCron disable 14
2023-01-12 00:18:53 MakeCron enter 7 * * * *
и все. То есть, мы зашли в функцию MakeCron, но уже из нее не вышли, нет уведомления log.info(“MakeCron after”, cronRuleNum). И после этого, как бы я не менял строку CronString в логах уже ничего не появится до следующего systemctl restart wb-rules.
Прошу помочь с решением проблемы.