Работа по сложному расписанию

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

Здравствуйте.
Есть пример на сайте по созданию сложных правил с расписанием. Я бы рекомендовал по этому пути пойти.

Попробовал запустить этот код

global.__proto__.Schedules = {};

(function() { // замыкание
  Schedules.registerSchedule({
    "name" : "signboard", // вывеска
    "autoUpdate" : "1m",
    "intervals" : [
      [ [12, 30], [20, 30] ],  // в UTC, 15:30 - 23:30 MSK
      [ [3, 30], [5, 20] ],  // в UTC, 6:30 - 8:20 MSK
    ]
  });
  Schedules.initSchedules();

  // Вывеска и фасадное освещение
  defineRule("signboardOnOff", {
    when: function() {
      return dev._schedules.signboard || true;
    },
    then: function (newValue, devName, cellName) {
      log("signboardOnOff  newValue={}, devName={}, cellName={}", newValue, devName, cellName);
      var on = dev._schedules.signboard; //
      
      dev["wb-gpio/EXT1_R3A1"] = !on;
      dev["wb-gpio/EXT1_R3A2"] = !on;
      dev["wb-gpio/EXT1_R3A3"] = !on;
    }
  });
})() 

Получил ошибку:

 TypeError: call target not an object duk_js_executor.c:2761 anon /etc/wb-rules/test_shedule.js:11 F /etc/wb-rules/test_shedule.js:29 preventsyield

Что я сделал не так?

Ругается на синтаксическую ошибку. Как минимум удалите последние две скобки и поставьте точку с запятой.

1 Like

Спасибо, Михаил. Правило сохранилось, но реле по графику не отработали, в чем может быть еще ошибка?

Создайте правило, как указано в документации.

  1. Создайте правило (модуль) расписания lib_schedules.js;
  2. Создайте правило своего расписания, например так:
(function() { // замыкание
  Schedules.registerSchedule({
    "name" : "signboard", // вывеска
    "autoUpdate" : "1m",
    "intervals" : [
      [ [12, 30], [20, 30] ],  // в UTC, 15:30 - 23:30 MSK
      [ [3, 30], [5, 20] ],  // в UTC, 6:30 - 8:20 MSK
    ]
  });
  Schedules.initSchedules();

  // Вывеска и фасадное освещение
  defineRule("signboardOnOff", {
    when: function() {
      return dev._schedules.signboard || true;
    },
    then: function (newValue, devName, cellName) {
      log("signboardOnOff  newValue={}, devName={}, cellName={}", newValue, devName, cellName);
      var on = dev._schedules.signboard; //
      
      dev["wb-gpio/EXT1_R3A1"] = !on;
      dev["wb-gpio/EXT1_R3A2"] = !on;
      dev["wb-gpio/EXT1_R3A3"] = !on;
    }
  });
})() 
2 Likes

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