Управление светом по расписанию

Хочу включать и отключать уличный свет по расписанию. Но правило не рсабатывает. Не пойму что делаю не так.

В логах получаю ошибку:
2023-06-17 17:14:13 defineRule: StreetLightAuto

2023-06-17 17:14:13 skipping rule due to incomplete cell StreetLightAuto: IncompleteCellCaught: incomplete cell encountered: street_lighting


global.__proto__.Schedules = {};
(function() { // замыкание
  
  Schedules.registerSchedule({
    "name" : "street_lighting",
    "autoUpdate" : "1m",
    "intervals" : [
      [ [12, 00], [23, 00] ],  // всё ещё UTC MSK
    ]
  });
});

// Управление светом на улице автоматическое
defineRule("StreetLightAuto", {
  when: function() {
      return dev._schedules.street_lighting || true;
    },
  then: function (newValue, devName, cellName) {
        log("evening lamp ON 12:00 AM");
       dev["wb-mdm3_153"]["K3"] = ! dev._schedules.street_lighting; 
  }
});

Добрый день.
А что должно инициировать выполнение функции? Я бы использовал просто ежеминутный cron, готовую реализацию можно глянуть в Помогите пожалуйста с подбором и настройкой оборудования для теплиц

В идеале я хочу чтобы вечером (начиная с 21 мск ) свет на улице зажигался. А утром (начиная с 6 утра) он выключался. И если вдруг оборудование не работало в 21.00, а заработало в 22.00, чтобы свет включился. И такая же ситуация с выключением. Код я брал с примеров реализаций.

defineRule("street_light", {
  when: cron("@every 2s"),
  then: function () {
    var currentdate = new Date()
    if (currentdate.getHours()>=6 && currentdate.getHours()<=21) 
    {
    	dev[имя топика управления светом]=false;
    } else {
    	dev[имя топика управления светом]=true;
    }
  }
});

Нужно только уточнить на месте вопрос с часовым поясом, возможно нужно поправить границы которые указаны в условии.

Нет, в докмментации перечислены источники просмотра правил. Так как использовали when с аргументом function() - то то функция должна вернуть новое значение, а для этого должна быть выполнена.

Да, с cron верно, но период я бы поставил все ж минута, чаще для света не надо просто.

Спасибо, попробую.

Такое срабатывание каждую минуту не будет нагружать оборудование?

Я правильно понимаю, что для периодичных задач нужно использовать cron?

Проверять простое условие раз в 2 секунды для компьютера не большая нагрузка.
Да, cron как раз для них и предназначен. Он позволяет выполнять какие-нибудь операции с указанной периодичностью. В данном примере регулярно проверяется сколько сейчас времени и выполняется необходимая операция.

1 лайк

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