Ошибка в скрипте

У меня циклично повторялась вот такая ошибка:

anon /usr/share/wb-rules-system/scripts/lib.js:119 preventsyield
2018-02-25 09:36:22ECMAScript error: TypeError: call target not an object
duk_js_executor.c:2761
anon /usr/share/wb-rules-system/scripts/lib.js:119 preventsyield
2018-02-25 09:36:22ECMAScript error: TypeError: call target not an object
duk_js_executor.c:2761

Подскажите, где из двух примеров ниже искать ошибку?

defineRule(“TAMBOUR_VENTILATION_Time_Control”, {
when: cron("* 10,20,30 23 * * *"), //событие повторяется трижды по 5мин
then: function () {
dev[“wb-mio-gpio_185:3”][“K14”] = 1;
}
});

или

defineRule(“TAMBOUR_HEATING_Time_Control”, {
when: cron("* * 23 * * *") && dev[“wb-ms-thls-v2_33”][“Temperature”] < 0, // подогрев выполняется раз в сутки при отрицательной температуре
then: function () {
dev[“wb-mio-gpio_185:3”][“K14”] = 1;
}
});

Ошибка во втором правиле — в when должна быть указана ровно одна функция, а не что-либо другое.
BTW, у вас первое правило выполняется не “трижды по 5 минут”, а 180 раз в 23 часа каждого дня (в каждую секунду 23:10, 23:20 и 23:30), а второе правило — выполняется (точнее должно выполняться, в соответствии с cron-правилом) 3600 раз в 23 часа. Будьте аккуратнее с указанием первой звезды в cron(), лучше ставьте туда 0.

1 лайк

А сейчас корректно будет работать cron ?

//Включение подогрева теплого пола в тамбуре каждый день
defineRule(“TAMBOUR_HEATING_Time_Control”, {
when: cron(“0 0 23 * * *”), // подогрев выполняется раз в сутки в 23:00 при отрицательной температуре
then: function () {
if (dev[“wb-ms-thls-v2_33”][“Temperature”] < 0) {dev[“wb-mio-gpio_185:3”][“K14”] = 1;}
}
});

//Включение вентиляции в тамбуре трижды в день с интервалом 10мин
defineRule(“TAMBOUR_VENTILATION_Time_Control”, {
when: cron(“0 10,20,30 23 * * *”), //событие повторяется трижды через 10мин (23:10, 23:20, 23:30)
then: function () {
dev[“wb-mio-gpio_185:3”][“K14”] = 1;
}
});

Да, так должно работать корректно.

1 лайк

Спасибо. )

Добрый день! М1 переключается только на “1” и на “0”. На “2” и “3” никак не реагирует. Подскажите, пожалуйста, где ошибка?

defineRule(“M1set”, {
whenChanged: [“create_nasos/M1”],
then: function(newValue, devName, cellName) {
if (dev[“create_nasos/M1”] == 1) {
dev[“wb-gpio”][“EXT2_R3A1”] = newValue;
dev[“wb-gpio”][“EXT2_R3A4”] = newValue;
}
else if(dev[“create_nasos/M1”] == 2){
dev[“wb-gpio”][“EXT2_R3A2”] = newValue;
dev[“wb-gpio”][“EXT2_R3A4”] = newValue;
}
else if(dev[“create_nasos/M1”] == 3){
dev[“wb-gpio”][“EXT2_R3A3”] = newValue;
dev[“wb-gpio”][“EXT2_R3A4”] = newValue;
}
else if(dev[“create_nasos/M1”] == 0){
dev[“wb-gpio”][“EXT2_R3A1”] = 0;
dev[“wb-gpio”][“EXT2_R3A2”] = 0;
dev[“wb-gpio”][“EXT2_R3A3”] = 0;
dev[“wb-gpio”][“EXT2_R3A4”] = 0;

А так если написать:

if (dev[“create_nasos”][“M1”] == 1) {…}

Или ещё лучше:

if (newValue == 1) {…}

Здравствуйте. Не подскажите, в чем ошибка? :

ERROR: [rule error] ECMAScript error: TypeError: call target not an object duk_js_executor.c:2761 anon /etc/wb-rules/thermostat.js:69 preventsyield call native strict preventsyield anon /usr/share/wb-rules-system/s

строка 69: dev[“vdThermostat”][“temperatureMonitor”] = dev[“vdThermostat”][“temperatureActual”].toFixed(1);

Думаю, что связано с датчиком. У меня когда они перестают отвечать - такая же ошибка выскакивает. Перегружаюсь и все восстанавливается.

У меня temperatureActual адекватно показывает температуру, а temperatureMonitor завис на 23.1 и всё. Т.е. датчик-то сам показывает, а переменная temperatureMonitor не хочет. И вообще, у меня на “авто режим” система не реагирует, но в ручном режиме всё щелкается. Переключение на авто режим и temperatureMonitor и temperatureActual лежат в одном правиле. Как-то связано может то, что ошибка выскакивает, и то, что на авто режим никак не реагирует?