Работа с KNX

Нужна помощь, разобраться в скрипте…
Имеем KNX-Dali шлюз, в нем необходимо установить правильные дату и время, сделать на нем это можно только через KNX. Прописал данное устройство в настройках wb-mqtt-knx.conf, добавил там два контрола с групповыми адресами, Data point type JSON 10.001 и 11.001 соответственно.
Далее сделал рулес:
defineRule(“crontest_hourly”, {
when: cron(“00 59 09 * *”),
then: function () {
now = new Date();
dev[“1.1.12”][“12TimeSet”] = {“Day”:now.getDay(),“Hour”:now.getHour(),“Minutes”:now.getMinutes(),“Seconds”:now.getSeconds()};
dev[“1.1.12”][“12DateSet”] = {“Day”:now.getData(),“Month”:now.getMonth(),“Year”:now.getYear()};
}
});
Не работает, телеграммы не ходят.
При запуске в журнале увидел:
ERROR: [rule error] ECMAScript error: TypeError: call target not an object
duk_js_executor.c:2761
anon /etc/wb-rules/DateTimeSet.js:5 preventsyield
call native strict preventsyield
anon /usr/share/wb-rules-system/scripts/lib.js:243 preventsyield

1 Like

Добрый день.
Вижу что пытаетесь записать несериализованный объект в MQTT. Зачем так?
Что вы записываете (вручную) в поля 12TimeSet и 12DateSet? То есть - как выглядит строка?

Я пытаюсь туда записать дату и время, с примера что нашел по времени строка выглядеть должна вот так:
{“Day”:0,“Hour”:22,“Minutes”:1,“Seconds”:2}
ну соответственно вместо чисел в примере я подставляю актуальную информацию

Да, именно, строка. Вы строку не заключаете в кавычки. Но можно и так: Подключение устройств Zigbee к контроллеру Wiren Board — Wiren Board

Нечто подобное сделать?
JSON.stringify({Day:now.getData(), Month:now.getMonth(), Year:now.getYear()})

Да. Ну и предварительно вывести записываемое в топик в лог (ну либо подписаться на топик).

ERROR: [rule error] ECMAScript error: TypeError: call target not an object
duk_js_executor.c:2761
anon /etc/wb-rules/DateTimeSet.js:7 preventsyield
call native strict preventsyield
anon /usr/share/wb-rules-system/scripts/lib.js:243 preventsyield

это 7 строка рулеса:
dev[“1.1.12”][“12TimeSet”] = JSON.stringify({Day:now.getDay(), Hour:now.getHour(), Minutes:now.getMinutes(), Seconds:now.getSeconds()});

Ну в общем решил я руками заполнить дату и время, вроде прошло, единственно - год в рулесах стоит 2022, а устройство говорит что 2102

Ну достаточно, по-моему ошибки исправить ведь:

//05_09_test_01.js
//many errors string^
//log.info( JSON.stringify({Day:now.getDay(), Hour:now.getHour(), Minutes:now.getMinutes(), Seconds:now.getSeconds()}))

log.info("#########")
now = new Date();

var testString = {}
testString.Day = now.getDay();
testString.Hour = now.getHours();
testString.Minutes = now.getMinutes();
testString.Seconds = now.getSeconds();

jsonString = JSON.stringify(testString)
log.info("jsonString:", jsonString);

log.info("kva")

Вывод:

2022-09-05 18:40:48#########
2022-09-05 18:40:48jsonString: {"Day":1,"Hour":15,"Minutes":40,"Seconds":57}

А точно в устройство день недели передается?

В устройстве есть шедулер, где в том числе можно выбрать день недели, ну и в ЕТС это идет тип именно 10.001

Ну в общем все заработало, спасибо за помощь

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