Cron

Если в кратце.
Если так

defineRule("name", {
    when: cron("крон выражение"),
    then: function() {    }
});

и так

var cron_time="крон выражение"
defineRule("name", {
    when: cron(cron_time),
    then: function() {    }
});

работает.
но почему, когда

var ps = new PersistentStorage("global_var", {global: true});
ps["cron_time"] = "00 00 18 * *";

defineRule("name", {
    whenChanged: ,
    then: ps["cron_time"]= "новое значение крон"

});

defineRule("name", {
    when: cron(ps["cron_time"]),
    then: function() {    }
});

То так уже cron не запускается.
То есть, если явно задать
var a=" * 8 8 8 **"
cron(a)
работать будет, если если что то с ней делать, то нет

Добрый день.
Потому что объект cron будучи однажды созданным уже не меняется. У него нет методов для остановки/удаления объекта и изменения его параметров.

Нейросеть говорит " действительно отсутствуют функции removeRule и clearRule"

Так как же обновлять cron правила?

Нейросеть предлагает

   when: cron("@every 1m"), // Проверка каждую минуту
    then: function() {
        // Получаем текущие часы и минуты
        var now = new Date();
        var currentHours = now.getHours();
        var currentMinutes = now.getMinutes();
        
        // Парсим запланированное время
        var scheduleParts = currentSchedule.split(" ");
        var scheduledMinutes = parseInt(scheduleParts[0]);
        var scheduledHours = parseInt(scheduleParts[1]);
        
        // Проверяем совпадение времени
        if (currentHours === scheduledHours && currentMinutes === scheduledMinutes) {

но это костыль.

Еще раз внимательнее прочитал ваше сообщение. Значить никак. Печаль

О, узнаю код. Да, именно с cron - это оптимальный вариант.
Надеюсь в wb-rules 3.x будет лучше.

Зимой настроил уменьшение и увеличение яркости ламп. Было комфортно. Пришла весна - стало ясно что время срабатывания надо корректировать.
Теперь стало ясно что сразу на год данные не забить.

И когда же появиться 3-я версия? Инсайды, слухи, ожидания, надежды.?

Если речь идет об инициализации события при, условно, “наступлении утра”, то cron выглядит не лучшим решением.

Ведь утро наступает каждый день в разное время.

На мой взгляд, тут более уместен однократный таймер (пере-)устанавливаемый где-то в ночи или с перезапуском службы правил.
Вот это “в ночи” - как раз cron

Соответственно, ничто не мешает скопом установить все подобные таймеры.

Ну а время уставки однократного таймера черпать из астромодуля - он тут многократно мелькал. Дает время восхода, заката, начала и конца сумерек и пр. можно подправить под себя.

Если ж очень хочется именно cron - можно поискать в интернете способы управления crontab
Подобные вопросы наверняка “украдены до нас”

Ну, гораздо проще утром, часа в 4 по крону запустить расчет времени рассвета-заката и уже в другом, “ежеминутном” - их проверять.

Оно уже было сделано, но пока отложено, там архитектурный вопрос - в какую сторону двигаться.

Сомнительное счастье каждую минуту проводить напрасные математические вычисления.
Вместо этого как раз однократный таймер(-ы)

я имел в виду такую схему:

по cron в одно и то же время ночи, скажем в 4 утра, (или по рестарту движка правил) запускается расчет времени восхода, заката, второго завтрака и пр. Это одна операция.

по результатам расчета “взводятся” однократные таймеры в нужном количестве.
вот тут функция cron заканчивается

По срабатыванию однократных таймеров производятся какие-то действия. таймер запустит действие без математических упражнений

На этом все.
Никаких ежеминутных вычислений “а не пришло ли время”

Да, я так и имел в виду.

Да нет, раз в минуту сравнить несколько datetime - ну, вообще не нагрузка.