Передача температуры на WB с KNX Z35

Добрый день, подскажите пожалуйста как в правилах прописать код чтоб отображалась температура с KNX устройства Z35.
Длина сообщения 2 byte. KNX Group Addresses - 1/1/5

1 лайк

Меня тоже очень интересует данный вопрос.

Сделал так:

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);
        }
    }
});
1 лайк

Никита, добрый вечер. Код не работает при ручном считывании данных с группового адреса в 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)