Изменение времени срабатывания правила CRON

Добрый день!
Пытаюсь научиться изменять время срабатвания правила по 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.

Прошу помочь с решением проблемы.

Добрый день. Не вижу в логах отключения существующего правила.
Какой id у правила после создания? Пред созданием нового?

Я попробовал так:

var cronRuleNum = null; 

cronRuleNum = defineRule({
  	  when: cron("5 * * * *"),
        then: function (newValue, devName, cellName) {
          log.info("Cron!");
        }
})

defineRule({
          whenChanged: 'wb-mr6cv3_111/Input 0',
          then: function (newValue, devName, cellName) {
            if (newValue) {
   			 log.info("Cron disable", cronRuleNum);
    		 disableRule(cronRuleNum);
  			} else {
   			 log.info("Cron enable", cronRuleNum);
    		 enableRule(cronRuleNum);
            }
          }
});

правило не отключается, как работало, так и работает

image

Код Романа у меня ведет себя так же, как у него. После изменения значения виртуального устройства с wb-rules что-то происходит, он начинает тормозить, рестарт сервиса занимает больше минуты.

1 Like

Вот лог отключения правила:

2023-01-12 00:18:53 MakeCron disable 14

то есть id 14, и да, дальнейшим перезапуск wb-rules по ощущениям очень долгий, более минуты

@BrainRoot , стоит ли ждать ответа от вас?

Воспроизводится, да, cron правила не управляются. Опишу багом. Но вот как скоро будет исправлено - пока не скажу.

Какие есть костыльные варианты обхода, чтобы можно было управлять временем срабатывания?
В прямую напрашивается вариант, где кроном условно каждую минуту сравнивается текущее время с заданным и если совпадает выполняем тело. Или это будет высокая нагрузка?

Я конечно могу реализовать это через HA, но хотелось бы с правилами оставаться в одном место

Невысокая, так и делается.
Вот тут, например: Помогите пожалуйста с подбором и настройкой оборудования для теплиц - #347 от пользователя BrainRoot

1 Like

Эта тема была автоматически закрыта через 7 дней после последнего ответа. В ней больше нельзя отвечать.