@lucacan/domoticz-nodered
Version:
Some usefull functions to use with Node ed and Domoticz
116 lines (102 loc) • 2.82 kB
JavaScript
module.exports = {
battery: function(number) {
var battery=0;
switch(typeof number) {
case 'undefined':
case null:
battery = 255;
break;
case 'string' :
battery = Math.round(parseInt(number));
break;
case 'number' :
battery = Math.round(number)
break;
default : //boolean, symbol, object, function
battery = 255;
//throw new TypeError("Battery wants a number or a string!");
break;
}
return battery;
},
//module.exports =
rssi: function(number) {
var rssi=12;
var numtemp=0;
switch(typeof number) {
case 'undefined':
case null:
rssi = 12;
break;
case 'string' :
case 'number' :
numtemp = Math.round(parseInt(number));
if (numtemp <30) { rssi=0; }
if ((numtemp >=30) && (numtemp<=150)) {
rssi = Math.round( ((numtemp-30) / 120) * 11 ) ;
}
if (numtemp >150) { rssi=11; }
break;
default : //boolean, symbol, object, function
rssi = 12;
//throw new TypeError("Battery wants a number or a string!");
break;
}
//that link quality from zigbee2mqtt is max about 170 in real. 255 is unreal maximum. And values less than 30 is unusable. Better mapping wil be something like 0-30->0; 31-170->1-11; 170-255->11
return rssi;
// if (typeof string !== "string") throw new TypeError("Battery wants a string!");
},
colorTempIkea: function(number) {
var colorTempMin=250;
var colorTempMax=454;
var colorTempIkea=Math.round(parseInt(colorTempMin + (number/255)*(colorTempMax-colorTempMin)));
return colorTempIkea;
}
/*
//"colorTempPhysicalMin":250,"colorTempPhysicalMax":454}
var temp = msg.payload.temperature;
var humi = msg.payload.humidity;
var pres = msg.payload.pressure;
var batt = msg.payload.battery;
var rssi = msg.payload.linkquality;
msg.payload = {}
// Humidity Status
if (humi < 31) {
humistat = "2";
} else if (humi > 69) {
humistat = "3";
} else if (humi > 34 && humi < 66 && temp > 21 && temp < 27) {
humistat = "1";
} else {
humistat = "0";
}
// Pressure Status
if (pres < 966) {
forecast = "4";
} else if (pres < 993) {
forecast = "3";
} else if (pres < 1007) {
forecast = "2";
} else if (pres < 1013) {
forecast = "3";
} else if (pres < 1033) {
forecast = "0";
} else {
forecast = "1";
}
msg.payload.idx = 1221
msg.payload.nvalue = 0
msg.payload.svalue = temp.toString()+";"+humi.toString()+";"+humistat+";"+pres.toString()+";"+forecast;
if (typeof batt !== 'undefined' && batt !== null){
msg.payload.Battery = Math.round(batt);
}
if (typeof rssi !== 'undefined' && rssi !== null){
rssi = Math.round(rssi / 12);
if (rssi > 12) {
rssi = 12;
}
msg.payload.RSSI = rssi;
}
return msg;
*/
}