(function() {
var knx_vdev_obj = {
title: "KNX Group Addresses",
cells: {
"0-0-1": {
type: "switch",
value: false
},
"0-0-4": {
type: "switch",
value: false
},
"1-0-11": {
type: "switch",
value: false
},
"1-0-12": {
type: "switch",
value: false
},
"1-0-13": {
type: "switch",
value: false
},
"1-0-21": {
type: "switch",
value: false
},
"1-0-22": {
type: "switch",
value: false
},
"1-0-31": {
type: "switch",
value: false
},
"1-0-32": {
type: "switch",
value: false
},
"1-0-33": {
type: "switch",
value: false
},
"1-0-34": {
type: "switch",
value: false
},
"1-0-35": {
type: "switch",
value: false
},
"1-0-41": {
type: "switch",
value: false
},
"1-0-42": {
type: "switch",
value: false
},
"1-0-51": {
type: "switch",
value: false
},
"1-0-52": {
type: "switch",
value: false
},
"1-0-61": {
type: "switch",
value: false
},
"1-0-61": {
type: "switch",
value: false
},
"1-0-71": {
type: "switch",
value: false
},
// "1-1-33": {
// type: "value",
// value: "0"
// },
// "1-1-53": {
// type: "value",
// value: "0"
// },
"2-0-11": {
type: "switch",
value: false
},
"2-0-12": {
type: "switch",
value: false
},
"2-0-13": {
type: "switch",
value: false
},
"2-0-21": {
type: "switch",
value: false
},
"2-0-22": {
type: "switch",
value: false
},
"2-0-31": {
type: "switch",
value: false
},
"2-0-32": {
type: "switch",
value: false
},
"2-0-33": {
type: "switch",
value: false
},
"2-0-34": {
type: "switch",
value: false
},
"2-0-35": {
type: "switch",
value: false
},
"2-0-41": {
type: "switch",
value: false
},
"2-0-42": {
type: "switch",
value: false
},
"2-0-51": {
type: "switch",
value: false
},
"2-0-52": {
type: "switch",
value: false
},
"2-0-61": {
type: "switch",
value: false
},
"2-0-71": {
type: "switch",
value: false
},
// "2-1-33": {
// type: "value",
// value: "0"
// },
// "2-1-53": {
// type: "value",
// value: "0"
// },
"3-2-0": {
type: "switch",
value: false
}
}
};
// в
// в
var vdev_when_changed = [];
var vdev_devid = "knx_group_addrs";
for (var control_id in knx_vdev_obj.cells) {
if (knx_vdev_obj.cells.hasOwnProperty(control_id)) {
vdev_when_changed.push("knx_group_addrs/" + control_id);
}
}
defineVirtualDevice(vdev_devid, knx_vdev_obj);
defineRule("knx_vdev_feedback", {
whenChanged: vdev_when_changed,
then: function(newValue, devName, cellName) {
var group_address = cellName.split("-").join("/");
var value = +newValue;
var write_str = "";
log.info("knx_vdev_feedback: ", devName, cellName, newValue);
if (knx_vdev_obj.cells[cellName].knx_type == "wide") {
while (value > 0) {
var rem = value % 256;
value = Math.floor(value / 256);
write_str = rem + " " + write_str;
}
write_str = "0 " + write_str;
} else {
write_str = "" + value;
}
if (write_str) {
log.info("knx_vdev_feedback. write_str", group_address, write_str);
dev["knx/data"] = "g:{} GroupValueWrite {}".format(group_address, write_str);
}
}
});
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 arr1 = newValue.split(/GroupValueWrite/);
var value = arr1[1];
if ((sourceAddr[1] == "0/0/0") || (sourceAddr[1] == "1/1/255")) { // skip local echo
return;
}
log.info("knx incoming:", devName, cellName, newValue);
dev[vdev_devid][groupAddr[1].split("/").join("-")] = !!parseInt(value, 16);
}
});
})()
function knxConvertToFloat16(value) {
var sign = 0;
var exp = 0;
if (value < 0) {
sign = 1;
}
var mant = Math.floor(value * 100);
while ((mant < -2048) || (mant > 2047)) {
mant = mant >> 1;
exp += 1
}
var data = (sign << 15) | (exp << 11) | (mant & 0x07ff);
return data;
};