Не работает скрипт

Всем Добрый День! Помогите исправить скрипт. Скрипт сделан WB AI robot. Нужно чтобы в 7 утра лента включалась на 10 процентов и каждую минуту добавляла яркость плюс 10. Испробовал многие варианты и уже нет идей. Спасибо большое!

defineRule(“led”, {
when: cron(“00 07 * * *”),
then: function() {
var brightness = 10; // Начальное значение яркости
var maxBrightness = 100; // Максимальное значение яркости
var increment = 10; // Увеличение яркости
var interval = 60000; // Интервал в миллисекундах

function adjustBrightness() {
  if (brightness <= maxBrightness) {
    // Включаем ленту
    publish("/devices/wb-led_1/controls/Channel 1", "true");
    // Устанавливаем яркость
    publish("/devices/wb-led_1/controls/Channel 1 Brightness", brightness.toString());
    
    brightness += increment;
    setTimeout(adjustBrightness, interval);
  }
}

adjustBrightness();

}
});

Добрый день.

В целом логика сценария у вас верная, проблема не в идее, а в способе реализации таймера в движке wb-rules.

Обратите внимание, что wb-rules — это не браузерный JavaScript.
Механизмы setTimeout / рекурсивных вызовов функций внутри then не рекомендуются для периодических действий по времени, так как такие таймеры плохо контролируются и могут некорректно работать.

В документации для подобных задач (изменение яркости во времени, удержание кнопки, пошаговое управление) используется другой подход:

  • запуск периодического таймера через startTicker();
  • отдельное правило, которое реагирует на timers["имя"].firing и выполняет шаг изменения;
  • остановка таймера через stop() при достижении нужного значения.

defineRule(“gradual_led_control”, {
when: cron(“0 24 14 * * *”),
then: function() {
var brightness = 10; // Начальное значение яркости
var maxBrightness = 60; // Максимальное значение яркости
var increment = 10; // Увеличение яркости

startTicker("brightnessTicker", 6000); // Запуск тикера с интервалом 6000 мс

defineRule("adjustBrightness", {
  when: function() { 
    return timers.brightnessTicker.firing; 
  },
  then: function() {
    if (brightness <= maxBrightness) {
      dev["wb-led_1/CCT2"] = true;
      publish("/devices/wb-led_1/controls/CCT2 Brightness/on", String(brightness));
      brightness += increment;
    } else {
      timers.brightnessTicker.stop(); // Остановим тикер, когда будет достигнута maxBrightness
    }
  }
});

}
});

Спасибо! Работает!

Рад что все получилось!