Добрый день, подскажите пожалуйста как в правилах прописать код чтоб отображалась температура с KNX устройства Z35.
Длина сообщения 2 byte. KNX Group Addresses - 1/1/5
Меня тоже очень интересует данный вопрос.
Сделал так:
function convertKnxTemperature(value) {
var byte1 = value[3]+value[4];
var byte2 = value[8]+value[9];
var data = parseInt(byte1, 16) * 256 + parseInt(byte2, 16);
var sign = data >> 15;
var exponent = (data >> 11) & 0x0f;
var mantisse = data & 0x7ff;
if (sign == 1) {
mantisse = -2048 + mantisse;
}
value = (mantisse * (Math.pow(2, exponent)) / 100);
return value;
};
function convertfromKnx(value) {
var byte1 = “0x” + value[3] + value[4];
var byte2 = “0x” + value[8] + value[9];
var data = parseInt(byte1, 16) * 256 + parseInt(byte2, 16);
var sign = data >> 15;
var exponent = (data >> 11) & 0x0f;
var mantisse = data & 0x7ff;
if (sign) {
mantisse = -2048 + mantisse;
}
output = (mantisse * (Math.pow(2, exponent)) / 100);
return output;
};
Редактируем ‘Вспомогательное правило для KNX’ часть меняем на эту
https://wirenboard.com/wiki/KNX_demo-stand
defineRule("knx_vdev_incoming", {
whenChanged: "knx/data",
then: function(newValue, devName, cellName) {
var arr = newValue.split(/\s/);
var sourceAddr = arr[0].split(/i\:|\,/);
var groupAddr = arr[1].split(/g\:|\,/);
var value = newValue.split(/GroupValueWrite/)[1];
if ((sourceAddr[1] == "0/0/0") || (sourceAddr[1] == "1/1/255")) { // skip local echo
return;
}
if(value.length >= 8){
dev[vdev_devid][groupAddr[1].split("/").join("-")] = convertfromKnx(value);
}else{
dev[vdev_devid][groupAddr[1].split("/").join("-")] = parseInt(value, 16);
}
}
});
Никита, добрый вечер. Код не работает при ручном считывании данных с группового адреса в ETS, когда устройство само присылает данные температуры, код работает. В чем может быть причина такой неправильной работы?
Вот код ошибки:
2021-07-02 17:33:16ECMAScript error: ReferenceError: identifier ‘convertfromKnx’ undefined
duk_js_var.c:1232
anon /etc/wb-rules/test.js:513 preventsyield
call native strict preventsyield
anon /usr/share/wb-rules-system/scripts/lib.js:233 preventsyield
Где стр. 533 это dev[vdev_devid][groupAddr[1].split("/").join("-")] = convertfromKnx(value);
Нету правила для Read
Есть правило для входящих сообщений от устройств (слушать шину),
Есть правило для исходящих сообщений в устройства (write), но
Нет правила которое отправит запрос (read) в KNX для получения значения ответа
Как то так , когда я разбирался насколько я понял (решил данную проблему тем , что установил Openhab3 и там полная поддержка KNX)