Добрый день, стоит задача создания правила управления реле для включения уличного освещения по годичному расписанию. Включение и отключение для каждого дня задается уникально. Кроме того, в некоторых случаях требуется отключить реле, например с 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 лайк
Спасибо, Михаил. Правило сохранилось, но реле по графику не отработали, в чем может быть еще ошибка?
Создайте правило, как указано в документации.
- Создайте правило (модуль) расписания lib_schedules.js;
- Создайте правило своего расписания, например так:
(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 лайка
Эта тема была автоматически закрыта через 7 дней после последнего ответа. В ней больше нельзя отвечать.