UNPKG

@lucacan/domoticz-nodered

Version:

Some usefull functions to use with Node ed and Domoticz

116 lines (102 loc) 2.82 kB
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; */ }