Skip to content

Instantly share code, notes, and snippets.

@Linax2015
Created October 17, 2022 02:26
Show Gist options
  • Save Linax2015/440b5242d3140c87732f3c04da5aef4f to your computer and use it in GitHub Desktop.
Save Linax2015/440b5242d3140c87732f3c04da5aef4f to your computer and use it in GitHub Desktop.
[{"id":"60c1df79e6b825ec","type":"tab","label":"HDL - MQTT v3","disabled":false,"info":"","env":[]},{"id":"5299d3da5022ecbd","type":"function","z":"60c1df79e6b825ec","name":"Dimmer or Relay Answer","func":"if (msg.payload.success == true) \n {\n msg.topic = \"hdl/sc/\" + msg.sender + \"/\" + msg.payload.channel;\n return msg;\n}\n\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":570,"y":100,"wires":[["b7bed297b837c6d5"]]},{"id":"72ca0929f5d98714","type":"function","z":"60c1df79e6b825ec","name":"Dimmer or Relay Read","func":"var outputMsgs = [];\nif (msg.code == 52) {\n for (i = 0; i < msg.payload.channels.length; i++) {\n outputMsgs.push({\n topic:\"hdl/sc/\" + msg.sender + \"/\" + msg.payload.channels[i].number,\n payload:{\n level:msg.payload.channels[i].level\n \n }\n });\n }\n return [ outputMsgs ];\n}\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":560,"y":140,"wires":[["b7bed297b837c6d5"]]},{"id":"dd3ee5a814ce2e45","type":"mqtt out","z":"60c1df79e6b825ec","name":"Status updates to MQTT","topic":"","qos":"0","retain":"true","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"","x":1130,"y":480,"wires":[]},{"id":"b7bed297b837c6d5","type":"range","z":"60c1df79e6b825ec","minin":"0","maxin":"100","minout":"0","maxout":"255","action":"scale","round":true,"property":"payload.level","name":"","x":770,"y":100,"wires":[["dd3ee5a814ce2e45"]]},{"id":"3b3576b9b6d8a49d","type":"function","z":"60c1df79e6b825ec","name":"Sensor Status Broadcasts","func":"var outputMsgs = [];\nif (msg.code == 5703) \n{\n {\n outputMsgs.push\n ({\n topic:\"hdl/temp/\" + msg.sender + \"/1\",\n payload : msg.payload.temperature\n });\n\n outputMsgs.push\n ({\n topic:\"hdl/lux/\" + msg.sender + \"/lux\",\n payload : msg.payload.brightness\n });\n }\n return [ outputMsgs ];\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":570,"y":380,"wires":[["dd3ee5a814ce2e45"]]},{"id":"f6411da065440bd3","type":"hdl-raw-in","z":"60c1df79e6b825ec","controller":"","name":"From HDL","x":140,"y":480,"wires":[["9be5df01c47ddb16"]]},{"id":"8c071c4df8735f90","type":"comment","z":"60c1df79e6b825ec","name":"Feedback from HDL to MQTT","info":"","x":200,"y":40,"wires":[]},{"id":"067a248ad71247a7","type":"comment","z":"60c1df79e6b825ec","name":"Single Channel Status","info":"","x":540,"y":60,"wires":[]},{"id":"5e288bba83d9ab82","type":"comment","z":"60c1df79e6b825ec","name":"Sensor Status Broadcasts Lux and Temp","info":"","x":600,"y":340,"wires":[]},{"id":"e9973ba5f9541dab","type":"mqtt in","z":"60c1df79e6b825ec","name":"From MQTT","topic":"hdl/+/+/+/set","qos":"0","datatype":"auto","broker":"","nl":false,"rap":false,"inputs":0,"x":150,"y":2080,"wires":[["06dc0a6883e14fd9"]]},{"id":"2dabced49e115fb1","type":"json","z":"60c1df79e6b825ec","name":"","property":"payload","action":"obj","pretty":true,"x":470,"y":1740,"wires":[["7b5b8a831009eb31"]]},{"id":"7b5b8a831009eb31","type":"range","z":"60c1df79e6b825ec","minin":"0","maxin":"255","minout":"0","maxout":"100","action":"scale","round":true,"property":"payload.level","name":"","x":630,"y":1740,"wires":[["35667ece7055654d"]]},{"id":"35667ece7055654d","type":"function","z":"60c1df79e6b825ec","name":"Light or Relay","func":"msg.code = 49;\n\nmsg.target = msg.topic.split(\"/\")[2];\nvar time = msg.payload.time;\nvar level = Math.min(Math.max(parseInt(msg.payload.level), 0), 100);\n\nmsg.payload = {\n channel: msg.topic.split(\"/\")[3],\n time: time,\n level: level,\n};\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":800,"y":1740,"wires":[["0c9a30851b68e48e"]]},{"id":"18633a950129bc44","type":"comment","z":"60c1df79e6b825ec","name":"Commands from MQTT to HDL","info":"","x":210,"y":1520,"wires":[]},{"id":"06dc0a6883e14fd9","type":"switch","z":"60c1df79e6b825ec","name":"","property":"topic","propertyType":"msg","rules":[{"t":"cont","v":"hdl/sc/","vt":"str"},{"t":"cont","v":"hdl/us/","vt":"str"},{"t":"cont","v":"hdl/fh/","vt":"str"},{"t":"cont","v":"hdl/hm/","vt":"str"},{"t":"cont","v":"hdl/ac/","vt":"str"},{"t":"cont","v":"hdl/cc/","vt":"str"}],"checkall":"false","repair":false,"outputs":6,"x":290,"y":2080,"wires":[["47c03ea98c4ea0a7"],["1738e87a44f7be51"],["f523a710a0151376"],["3ddda249c437df15"],["0ac3781492a1b776"],["e4050bba35c5dc7b"]]},{"id":"be35b2072c417c2b","type":"function","z":"60c1df79e6b825ec","name":"Universal Switch Answer","func":"msg.topic = \"hdl/us/\" + msg.sender + \"/\" + msg.payload.switch;\nvar status = msg.payload.status\nif (status === true) \n {\n msg.payload = \"ON\";\n } \n else \n {\n msg.payload = \"OFF\";\n }\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":570,"y":240,"wires":[["dd3ee5a814ce2e45"]]},{"id":"d014686b1561df6b","type":"comment","z":"60c1df79e6b825ec","name":"Universal Switch","info":"","x":520,"y":200,"wires":[]},{"id":"1738e87a44f7be51","type":"function","z":"60c1df79e6b825ec","name":"Universal Switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .","func":"var usswitch = msg.topic.split(\"/\")[3];\nvar command = msg.payload;\nif (command === \"ON\") \n {\n hdlcommand = true;\n } \n else \n {\n hdlcommand = false;\n }\nmsg.code = 57372;\nmsg.target = msg.topic.split(\"/\")[2];\nmsg.payload = {\n switch: usswitch,\n status: hdlcommand,\n};\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":630,"y":1840,"wires":[["0c9a30851b68e48e"]],"info":"msg.topic = \"hdl/us/\" + msg.sender + \"/\" + msg.payload.switch;\nvar status = msg.payload.status\nif (status === true) \n {\n msg.payload = \"ON\";\n } \n else \n {\n msg.payload = \"OFF\";\n }\nreturn msg;"},{"id":"9be5df01c47ddb16","type":"switch","z":"60c1df79e6b825ec","name":"","property":"code","propertyType":"msg","rules":[{"t":"eq","v":"50","vt":"str"},{"t":"eq","v":"52","vt":"str"},{"t":"eq","v":"57373","vt":"str"},{"t":"eq","v":"57369","vt":"str"},{"t":"eq","v":"5703","vt":"str"},{"t":"eq","v":"5637","vt":"str"},{"t":"eq","v":"58341","vt":"str"},{"t":"eq","v":"6471","vt":"str"},{"t":"eq","v":"6469","vt":"str"},{"t":"eq","v":"7263","vt":"str"},{"t":"eq","v":"7261","vt":"str"},{"t":"eq","v":"6457","vt":"str"},{"t":"eq","v":"6459","vt":"str"},{"t":"eq","v":"58337","vt":"str"},{"t":"eq","v":"6627","vt":"str"},{"t":"eq","v":"6624","vt":"str"}],"checkall":"false","repair":false,"outputs":16,"x":270,"y":480,"wires":[["5299d3da5022ecbd"],["72ca0929f5d98714"],["be35b2072c417c2b"],["7d7836a4536d1c53"],["3b3576b9b6d8a49d"],["1ee70ec7fd2dc505"],["6fefb029ae5f44df"],["aa71e43c96741c01","e7f700efa5b7531e"],["e7f700efa5b7531e","aa71e43c96741c01"],["b748e5b77df3abb1","31b712586b0b2df9"],["31b712586b0b2df9","b748e5b77df3abb1"],["aaed699515623510","867d46317a0b7e9f"],["867d46317a0b7e9f","aaed699515623510"],["c4179b9ac48375b0"],["a84f707bb5c736cb"],["bd21058991027109"]]},{"id":"fab8bbdbc0dd6da8","type":"comment","z":"60c1df79e6b825ec","name":"Temprature Sensors","info":"","x":530,"y":540,"wires":[]},{"id":"6fefb029ae5f44df","type":"function","z":"60c1df79e6b825ec","name":"Temprature Broadcasts","func":"msg.topic = \"hdl/temp/\" + msg.sender + \"/\" + msg.payload.channel;\nvar temp = msg.payload.temperature\nmsg.payload = temp\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":570,"y":580,"wires":[["dd3ee5a814ce2e45"]]},{"id":"7d7836a4536d1c53","type":"function","z":"60c1df79e6b825ec","name":"Universal Switch Read","func":"msg.topic = \"hdl/us/\" + msg.sender + \"/\" + msg.payload.switch;\nvar status = msg.payload.status\nif (status === true) \n {\n msg.payload = \"ON\";\n } \n else \n {\n msg.payload = \"OFF\";\n }\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":560,"y":280,"wires":[["dd3ee5a814ce2e45"]]},{"id":"1c466ea13e0909dc","type":"comment","z":"60c1df79e6b825ec","name":"AC / Heatpump","info":"","x":520,"y":920,"wires":[]},{"id":"820bd3e67b3006d6","type":"comment","z":"60c1df79e6b825ec","name":"Floorheat Thermostat DLP","info":"","x":550,"y":640,"wires":[]},{"id":"aaed699515623510","type":"function","z":"60c1df79e6b825ec","name":"Air condition Unit Read/CMD Responce ","func":"//Insert MQTT Topic\nmsg.topic = \"hdl/ac/\" + msg.sender + \"/0\" + msg.payload.acno;\n\n//Mode - Change nr to Mode and set current set temprature\nvar amode= msg.payload.setupmode \nif (amode === 0){var Mode = \"cool\"; var Thismodetempset = msg.payload.temperature.cooling}\nif (amode === 1){var Mode = \"heat\"; var Thismodetempset = msg.payload.temperature.heating}\nif (amode === 2){var Mode = \"fan_only\"}\nif (amode === 3){var Mode = \"auto\"; var Thismodetempset = msg.payload.temperature.auto}\nif (amode === 4){var Mode = \"dry\"; var Thismodetempset = msg.payload.temperature.dry}\nmsg.payload.currentmode = Thismodetempset\n\n//Power - Change true to ON and mode to off if off\nvar power = msg.payload.acstatus;\nif (power === false){var newpower = \"OFF\"; var Mode = \"off\"}\nmsg.payload.setupmode= Mode\n\n//Change nr to fanspeed\nvar aspeed= msg.payload.setupspeed \nif (aspeed === 0){var Speed = \"auto\"}\nif (aspeed === 1){var Speed = \"high\"}\nif (aspeed === 2){var Speed = \"medium\"}\nif (aspeed === 3){var Speed = \"low\"}\nmsg.payload.setupspeed= Speed\n\n//Change nr to sweep state\nvar sweep = msg.payload.sweep;\nif (sweep === 0){var newsweep = \"OFF\"}\nif (sweep === 1){var newsweep = \"ON\"}\nmsg.payload.sweep = newsweep\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":620,"y":1000,"wires":[["dd3ee5a814ce2e45"]]},{"id":"e6a75884c0247bb1","type":"switch","z":"60c1df79e6b825ec","name":"","property":"topic","propertyType":"msg","rules":[{"t":"cont","v":"/mode/set","vt":"str"},{"t":"cont","v":"/temperature/set","vt":"str"},{"t":"cont","v":"/fan/set","vt":"str"}],"checkall":"true","repair":false,"outputs":3,"x":610,"y":2340,"wires":[["fc3dea6beb0b7784"],["1befebcd5ca4f6e7"],["7b3c989ef9e75a8d"]]},{"id":"aa71e43c96741c01","type":"function","z":"60c1df79e6b825ec","name":"Floorheat Update/Answer from DLP","func":"//Insert MQTT Topic\nmsg.topic = \"hdl/fh/\" + msg.sender + \"/01\";\n\n//Power Change true/false to ON/OFF\nvar power = msg.payload.status;\nif (power === true){var newpower = \"heat\"}\nif (power === false){var newpower = \"off\"}\nmsg.payload.status = newpower\n\n//Mode Change from nr to mode 1:Normal 2:Day 3:Night 4:Away 5:Timer. And add current temprature\nvar fhmode= msg.payload.mode \nif (fhmode === 1){var textmode = \"Normal\"; var tempnow = msg.payload.temperature.normal}\nif (fhmode === 2){var textmode = \"Day\"; var tempnow = msg.payload.temperature.day}\nif (fhmode === 3){var textmode = \"Night\"; var tempnow = msg.payload.temperature.night}\nif (fhmode === 4){var textmode = \"Away\"; var tempnow = msg.payload.temperature.away}\nif (fhmode === 5){var textmode = \"Timer\"}\nmsg.payload.textmode= textmode\nmsg.payload.temperature.now = tempnow\n\n//Awaymode\n//if (textmode ==\"Away\"){msg.payload.awaymode = \"On\"}\n// else{msg.payload.awaymode = \"Off\"}\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":600,"y":720,"wires":[["dd3ee5a814ce2e45"]]},{"id":"553477bec561134c","type":"switch","z":"60c1df79e6b825ec","name":"","property":"topic","propertyType":"msg","rules":[{"t":"cont","v":"/mode/set","vt":"str"},{"t":"cont","v":"/textmode/set","vt":"str"},{"t":"cont","v":"/temperature/set","vt":"str"}],"checkall":"false","repair":false,"outputs":3,"x":610,"y":1980,"wires":[["e133fdb7cbd1fdee"],["2bfd7f6f87f9e26b"],["b6304db26b6348b8"]]},{"id":"e7f700efa5b7531e","type":"function","z":"60c1df79e6b825ec","name":"Save msg to flow variable","func":"//Save to flow variable for later use\nflow.set(\"hdl/fh/\" + msg.sender + \"/hdlstate\", msg.payload);\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":570,"y":680,"wires":[[]]},{"id":"f523a710a0151376","type":"function","z":"60c1df79e6b825ec","name":"Flow get","func":"//Get Old status from flow variable for complete message\nmsg.oldhdlstate =flow.get(\"hdl/fh/\" + msg.topic.split(\"/\")[2] + \"/hdlstate\");\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":480,"y":1980,"wires":[["553477bec561134c"]]},{"id":"ad10b9300043315a","type":"comment","z":"60c1df79e6b825ec","name":"Single Channel Status","info":"","x":600,"y":1700,"wires":[]},{"id":"0951dde128da087c","type":"comment","z":"60c1df79e6b825ec","name":"Universal Switch","info":"","x":580,"y":1800,"wires":[]},{"id":"908625c2583d2099","type":"comment","z":"60c1df79e6b825ec","name":"Floorheat Thermostat DLP","info":"","x":610,"y":1900,"wires":[]},{"id":"2bfd7f6f87f9e26b","type":"function","z":"60c1df79e6b825ec","name":"New Preset Mode","func":"// Change from MQTT textmode to HDL nrmode \nvar fhmode = msg.payload\nif (fhmode === \"Normal\"){msg.oldhdlstate.mode = 1}\nif (fhmode === \"Day\"){msg.oldhdlstate.mode = 2}\nif (fhmode === \"Night\"){msg.oldhdlstate.mode = 3}\nif (fhmode === \"Away\"){msg.oldhdlstate.mode = 4}\nif (fhmode === \"Timer\"){msg.oldhdlstate.mode = 5}\n\n//Build new HDL message\nmsg.target = msg.topic.split(\"/\")[2]\nmsg.code = 6470\nmsg.payload = msg.oldhdlstate\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":790,"y":1980,"wires":[["0c9a30851b68e48e"]]},{"id":"e133fdb7cbd1fdee","type":"function","z":"60c1df79e6b825ec","name":"New Mode","func":"// Change from Off or heat to true/false\nif (msg.payload === \"off\") {msg.oldhdlstate.status = false}\nif (msg.payload === \"heat\") {msg.oldhdlstate.status = true}\n//Build new HDL message\nmsg.target = msg.topic.split(\"/\")[2]\nmsg.code = 6470\nmsg.payload = msg.oldhdlstate\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":770,"y":1940,"wires":[["0c9a30851b68e48e"]]},{"id":"b6304db26b6348b8","type":"function","z":"60c1df79e6b825ec","name":"New Temp","func":"// Check witch mode active and save new temperature to that mode\nnormal = msg.oldhdlstate.temperature.normal \nday = msg.oldhdlstate.temperature.day\nnight = msg.oldhdlstate.temperature.night\naway = msg.oldhdlstate.temperature.away\n\nif (msg.oldhdlstate.mode === 1){normal = msg.payload}\nif (msg.oldhdlstate.mode === 2){day = msg.payload}\nif (msg.oldhdlstate.mode === 3){night = msg.payload}\nif (msg.oldhdlstate.mode === 4){away = msg.payload}\n\nmsg.oldhdlstate.temperature.normal = Number(normal)\nmsg.oldhdlstate.temperature.day = Number(day)\nmsg.oldhdlstate.temperature.night = Number(night)\nmsg.oldhdlstate.temperature.away = Number(away)\n\n//Build new HDL message\nmsg.target = msg.topic.split(\"/\")[2]\nmsg.code = 6470\nmsg.payload = msg.oldhdlstate\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":770,"y":2020,"wires":[["0c9a30851b68e48e"]]},{"id":"ce0b41f4978bfcf8","type":"comment","z":"60c1df79e6b825ec","name":"Air condition","info":"","x":570,"y":2260,"wires":[]},{"id":"867d46317a0b7e9f","type":"function","z":"60c1df79e6b825ec","name":"Save msg to flow variable","func":"//Save to flow variable for later use\nflow.set(\"hdl/ac/\" + msg.sender + \"/hdlstate\", msg.payload);\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":570,"y":960,"wires":[[]]},{"id":"0ac3781492a1b776","type":"function","z":"60c1df79e6b825ec","name":"Flow get","func":"//Get Old status from flow variable for complete message\nmsg.oldhdlstate =flow.get(\"hdl/ac/\" + msg.topic.split(\"/\")[2] + \"/hdlstate\");\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":480,"y":2340,"wires":[["e6a75884c0247bb1"]]},{"id":"fc3dea6beb0b7784","type":"function","z":"60c1df79e6b825ec","name":"New Mode","func":"//Set current temperature from oldstate and change mode to nr and not text\nvar acmode = msg.payload\nif (acmode === \"cool\"){var acstatus = true; var accurrenttemp = msg.oldhdlstate.temperature.cooling; var newacmode = 0}\nif (acmode === \"heat\"){var acstatus = true; var accurrenttemp = msg.oldhdlstate.temperature.heating; var newacmode = 1}\nif (acmode === \"fan_only\"){var acstatus = true; var accurrenttemp = 0; var newacmode = 2}\nif (acmode === \"auto\"){var acstatus = true; var accurrenttemp = msg.oldhdlstate.temperature.auto; var newacmode = 3}\nif (acmode === \"dry\"){var acstatus = true; var accurrenttemp = msg.oldhdlstate.temperature.dry; var newacmode = 4}\n\n//If off change acstatus and old mode\nif (acmode === \"off\")\n{\n var acstatus = false; \n if (msg.oldhdlstate.setupmode === 0){var accurrenttemp = msg.oldhdlstate.temperature.cooling; var newacmode = 0}\n if (msg.oldhdlstate.setupmode === 1){var accurrenttemp = msg.oldhdlstate.temperature.heating; var newacmode = 1}\n if (msg.oldhdlstate.setupmode === 2){var accurrenttemp = 0; var newacmode = 2}\n if (msg.oldhdlstate.setupmode === 3){var accurrenttemp = msg.oldhdlstate.temperature.auto; var newacmode = 3}\n if (msg.oldhdlstate.setupmode === 4){var accurrenttemp = msg.oldhdlstate.temperature.dry; var newacmode = 4}\n}\n\n// - Insert to msg object\nmsg.oldhdlstate.currentmode = accurrenttemp\nmsg.oldhdlstate.setupmode = newacmode\nmsg.oldhdlstate.acstatus = acstatus\n\n//Build new HDL message\nmsg.target = msg.topic.split(\"/\")[2]\nmsg.code = 6458\nmsg.payload = msg.oldhdlstate\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":770,"y":2300,"wires":[["0c9a30851b68e48e"]],"info":"msg.topic = \"hdl/us/\" + msg.sender + \"/\" + msg.payload.switch;\nvar status = msg.payload.status\nif (status === true) \n {\n msg.payload = \"ON\";\n } \n else \n {\n msg.payload = \"OFF\";\n }\nreturn msg;"},{"id":"54fb66d76261059a","type":"function","z":"60c1df79e6b825ec","name":"Temp","func":"//Set new temperature to HDL message\nvar acurrtemp = msg.payload\nif (msg.oldhdlstate.setupmode === 0){msg.oldhdlstate.temperature.cooling = acurrtemp}\nif (msg.oldhdlstate.setupmode === 1){msg.oldhdlstate.temperature.heating = acurrtemp}\n//if (msg.oldhdlstate.setupmode === 2){var accurrtemp = 0}\nif (msg.oldhdlstate.setupmode === 3){msg.oldhdlstate.temperature.auto = acurrtemp}\nif (msg.oldhdlstate.setupmode === 4){msg.oldhdlstate.temperature.dry = acurrtemp}\n\n// Build AC broadcast\nmsg.target = msg.topic.split(\"/\")[2]\nmsg.code = 6458,\nmsg.payload = msg.oldhdlstate\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":850,"y":2340,"wires":[["0c9a30851b68e48e"]],"info":"msg.topic = \"hdl/us/\" + msg.sender + \"/\" + msg.payload.switch;\nvar status = msg.payload.status\nif (status === true) \n {\n msg.payload = \"ON\";\n } \n else \n {\n msg.payload = \"OFF\";\n }\nreturn msg;"},{"id":"1befebcd5ca4f6e7","type":"range","z":"60c1df79e6b825ec","minin":"0","maxin":"100","minout":"0","maxout":"100","action":"scale","round":true,"property":"payload","name":"Round","x":730,"y":2340,"wires":[["54fb66d76261059a"]]},{"id":"7b3c989ef9e75a8d","type":"function","z":"60c1df79e6b825ec","name":"New Fan Mode","func":"//AC fan speed text to speed\nvar acspeed = msg.payload\nif (acspeed === \"auto\"){msg.oldhdlstate.setupspeed = 0}\nif (acspeed === \"high\"){msg.oldhdlstate.setupspeed = 1}\nif (acspeed === \"medium\"){msg.oldhdlstate.setupspeed = 2}\nif (acspeed === \"low\"){msg.oldhdlstate.setupspeed = 3}\n\n// Build AC broadcast\nmsg.target = msg.topic.split(\"/\")[2]\nmsg.code = 6458,\nmsg.payload = msg.oldhdlstate\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":780,"y":2380,"wires":[["0c9a30851b68e48e"]],"info":"msg.topic = \"hdl/us/\" + msg.sender + \"/\" + msg.payload.switch;\nvar status = msg.payload.status\nif (status === true) \n {\n msg.payload = \"ON\";\n } \n else \n {\n msg.payload = \"OFF\";\n }\nreturn msg;"},{"id":"0c9a30851b68e48e","type":"hdl-raw-out","z":"60c1df79e6b825ec","controller":"","name":"","x":1290,"y":2140,"wires":[]},{"id":"88b2d22ab60f7649","type":"switch","z":"60c1df79e6b825ec","name":"","property":"topic","propertyType":"msg","rules":[{"t":"cont","v":"/mode/set","vt":"str"},{"t":"cont","v":"/textmode/set","vt":"str"},{"t":"cont","v":"/temperature/set","vt":"str"}],"checkall":"false","repair":false,"outputs":3,"x":610,"y":2160,"wires":[["60fc4d28894d74ac"],["96eff36d06e508d2"],["65f80bafd46a3513"]]},{"id":"3ddda249c437df15","type":"function","z":"60c1df79e6b825ec","name":"Flow get","func":"//Get Old status from flow variable for complete message\naddressandchannel = msg.topic.split(\"/\")[2]\nmsg.channel = addressandchannel.split(\".\")[2]\nmsg.target = addressandchannel.split(\".\")[0] + \".\" + addressandchannel.split(\".\")[1]\nmsg.oldhdlstate =flow.get(\"hdl/hm/\" + msg.target + \"/\" + msg.channel + \"/hdlstate\");\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":480,"y":2160,"wires":[["88b2d22ab60f7649"]]},{"id":"c0c29895cf05b340","type":"comment","z":"60c1df79e6b825ec","name":"Floorheat Thermostat Heatmodule MFH06","info":"","x":660,"y":2080,"wires":[]},{"id":"96eff36d06e508d2","type":"function","z":"60c1df79e6b825ec","name":"New Preset Mode","func":"// Change from MQTT textmode to HDL nrmode \nvar fhmode = msg.payload\nif (fhmode === \"Normal\"){msg.oldhdlstate.mode = 1}\nif (fhmode === \"Day\"){msg.oldhdlstate.mode = 2}\nif (fhmode === \"Night\"){msg.oldhdlstate.mode = 3}\nif (fhmode === \"Away\"){msg.oldhdlstate.mode = 4}\nif (fhmode === \"Timer\"){msg.oldhdlstate.mode = 5}\n\n//Build new HDL message\nmsg.code = 7260\nmsg.payload = msg.oldhdlstate\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":790,"y":2160,"wires":[["0c9a30851b68e48e"]]},{"id":"60fc4d28894d74ac","type":"function","z":"60c1df79e6b825ec","name":"New Mode","func":"// Change from Off or heat to true/false\nif (msg.payload === \"off\") {msg.oldhdlstate.work.status = false}\nif (msg.payload === \"heat\") {msg.oldhdlstate.work.status = true}\n//Build new HDL message\nmsg.code = 7260\nmsg.payload = msg.oldhdlstate\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":770,"y":2120,"wires":[["0c9a30851b68e48e"]]},{"id":"65f80bafd46a3513","type":"function","z":"60c1df79e6b825ec","name":"New Temp","func":"// Check witch mode active and save new temperature to that mode\nnormal = msg.oldhdlstate.temperature.normal \nday = msg.oldhdlstate.temperature.day\nnight = msg.oldhdlstate.temperature.night\naway = msg.oldhdlstate.temperature.away\n\nif (msg.oldhdlstate.mode === 1){normal = msg.payload}\nif (msg.oldhdlstate.mode === 2){day = msg.payload}\nif (msg.oldhdlstate.mode === 3){night = msg.payload}\nif (msg.oldhdlstate.mode === 4){away = msg.payload}\n\nmsg.oldhdlstate.temperature.normal = Number(normal)\nmsg.oldhdlstate.temperature.day = Number(day)\nmsg.oldhdlstate.temperature.night = Number(night)\nmsg.oldhdlstate.temperature.away = Number(away)\n\n//Build new HDL message\nmsg.code = 7260\nmsg.payload = msg.oldhdlstate\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":770,"y":2200,"wires":[["0c9a30851b68e48e"]]},{"id":"080198a82efb4600","type":"comment","z":"60c1df79e6b825ec","name":"Floorheat Thermostat Heatmodule MFH06","info":"","x":600,"y":780,"wires":[]},{"id":"31b712586b0b2df9","type":"function","z":"60c1df79e6b825ec","name":"Floorheat Update/Answer from Heatmodule","func":"//Insert MQTT Topic\nmsg.topic = \"hdl/hm/\" + msg.sender + \".\" + msg.payload.channel;\n\n//Power Change true/false to ON/OFF\nvar power = msg.payload.work.status;\nif (power === true){var newpower = \"heat\"}\nif (power === false){var newpower = \"off\"}\nmsg.payload.status = newpower\n\n//Mode Change from nr to mode 1:Normal 2:Day 3:Night 4:Away 5:Timer. And add current temprature\nvar fhmode= msg.payload.mode \nif (fhmode === 1){var textmode = \"Normal\"; var tempnow = msg.payload.temperature.normal}\nif (fhmode === 2){var textmode = \"Day\"; var tempnow = msg.payload.temperature.day}\nif (fhmode === 3){var textmode = \"Night\"; var tempnow = msg.payload.temperature.night}\nif (fhmode === 4){var textmode = \"Away\"; var tempnow = msg.payload.temperature.away}\nif (fhmode === 5){var textmode = \"Timer\"}\nmsg.payload.textmode= textmode\nmsg.payload.temperature.now = tempnow\n\n//Awaymode\n//if (textmode ==\"Away\"){msg.payload.awaymode = \"On\"}\n// else{msg.payload.awaymode = \"Off\"}\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":630,"y":860,"wires":[["dd3ee5a814ce2e45"]]},{"id":"b748e5b77df3abb1","type":"function","z":"60c1df79e6b825ec","name":"Save msg to flow variable","func":"//Save to flow variable for later use\nflow.set(\"hdl/hm/\" + msg.sender + \"/\" + msg.payload.channel +\"/hdlstate\", msg.payload);\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":570,"y":820,"wires":[[]]},{"id":"cbe407f04103cf13","type":"comment","z":"60c1df79e6b825ec","name":"New Sensor Status Broadcasts Lux,Temp and Humid","info":"","x":630,"y":440,"wires":[]},{"id":"1ee70ec7fd2dc505","type":"function","z":"60c1df79e6b825ec","name":"Sensor Status Broadcasts","func":"var outputMsgs = [];\nif (msg.code == 5637) \n{\n {\n outputMsgs.push\n ({\n topic:\"hdl/temp/\" + msg.sender + \"/1\",\n payload : msg.payload.temperature\n });\n\n outputMsgs.push\n ({\n topic:\"hdl/lux/\" + msg.sender + \"/Lux\",\n payload : msg.payload.brightness\n });\n \n outputMsgs.push\n ({\n topic:\"hdl/Humidity/\" + msg.sender + \"/Humidity\",\n payload : msg.payload.humidity\n });\n \n }\n return [ outputMsgs ];\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":570,"y":480,"wires":[["dd3ee5a814ce2e45"]]},{"id":"270f0550b0222735","type":"comment","z":"60c1df79e6b825ec","name":"Motorized Curtain Control Module","info":"","x":630,"y":2440,"wires":[]},{"id":"8d3d7ed40973fcb5","type":"function","z":"60c1df79e6b825ec","name":"Curtain Control Close","func":"//Build new close message\nmsg.code = 58336;\nmsg.target = msg.topic.split(\"/\")[2];\nmsg.payload = {\n curtain: Number(msg.topic.split(\"/\")[3]),\n status: 2,\n};\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":760,"y":2480,"wires":[["0c9a30851b68e48e"]],"info":"msg.topic = \"hdl/us/\" + msg.sender + \"/\" + msg.payload.switch;\nvar status = msg.payload.status\nif (status === true) \n {\n msg.payload = \"ON\";\n } \n else \n {\n msg.payload = \"OFF\";\n }\nreturn msg;"},{"id":"e4050bba35c5dc7b","type":"switch","z":"60c1df79e6b825ec","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"CLOSE","vt":"str"},{"t":"eq","v":"OPEN","vt":"str"},{"t":"eq","v":"STOP","vt":"str"}],"checkall":"false","repair":false,"outputs":3,"x":470,"y":2520,"wires":[["8d3d7ed40973fcb5"],["edf7f6fa658ae2ab"],["c3d476dd900e3c59"]]},{"id":"edf7f6fa658ae2ab","type":"function","z":"60c1df79e6b825ec","name":"Curtain Control Open","func":"//Build new open message\nmsg.code = 58336;\nmsg.target = msg.topic.split(\"/\")[2];\nmsg.payload = {\n curtain: Number(msg.topic.split(\"/\")[3]),\n status: 1,\n};\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":760,"y":2520,"wires":[["0c9a30851b68e48e"]],"info":"msg.topic = \"hdl/us/\" + msg.sender + \"/\" + msg.payload.switch;\nvar status = msg.payload.status\nif (status === true) \n {\n msg.payload = \"ON\";\n } \n else \n {\n msg.payload = \"OFF\";\n }\nreturn msg;"},{"id":"c3d476dd900e3c59","type":"function","z":"60c1df79e6b825ec","name":"Curtain Control Stop","func":"//Build new stop message\nmsg.code = 58336;\nmsg.target = msg.topic.split(\"/\")[2];\nmsg.payload = {\n curtain: Number(msg.topic.split(\"/\")[3]),\n status: 0,\n};\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":760,"y":2560,"wires":[["0c9a30851b68e48e"]],"info":"msg.topic = \"hdl/us/\" + msg.sender + \"/\" + msg.payload.switch;\nvar status = msg.payload.status\nif (status === true) \n {\n msg.payload = \"ON\";\n } \n else \n {\n msg.payload = \"OFF\";\n }\nreturn msg;"},{"id":"5f220b2a6cee4bea","type":"comment","z":"60c1df79e6b825ec","name":"Motorized Curtain Control Module","info":"","x":570,"y":1060,"wires":[]},{"id":"fd82970da9ecefea","type":"function","z":"60c1df79e6b825ec","name":"Curtain Answer Opening","func":"msg.topic = \"hdl/cc/\" + msg.sender + \"/\" + msg.payload.curtain + \"/state\";\nmsg.payload = \"opening\";\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":690,"y":1100,"wires":[["dd3ee5a814ce2e45","d6d0f7059ad76562"]]},{"id":"c4179b9ac48375b0","type":"switch","z":"60c1df79e6b825ec","name":"","property":"payload.status","propertyType":"msg","rules":[{"t":"eq","v":"1","vt":"num"},{"t":"eq","v":"2","vt":"num"}],"checkall":"false","repair":false,"outputs":2,"x":510,"y":1120,"wires":[["fd82970da9ecefea"],["48854f8b82650145"]]},{"id":"48854f8b82650145","type":"function","z":"60c1df79e6b825ec","name":"Curtain Answer Closing","func":"msg.topic = \"hdl/cc/\" + msg.sender + \"/\" + msg.payload.curtain + \"/state\";\nmsg.payload = \"closing\";\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":690,"y":1140,"wires":[["dd3ee5a814ce2e45","d6d0f7059ad76562"]]},{"id":"d8222594049d9e9c","type":"function","z":"60c1df79e6b825ec","name":"Open / Closed","func":"var status = msg.payload\nif (status === \"closing\") \n {\n msg.payload = \"closed\";\n } \n else \n {\n msg.payload = \"open\";\n }\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":920,"y":1260,"wires":[["dd3ee5a814ce2e45"]]},{"id":"5980ccda6ca75715","type":"comment","z":"60c1df79e6b825ec","name":"Manual Delay before completed","info":"","x":680,"y":1180,"wires":[]},{"id":"d6d0f7059ad76562","type":"delay","z":"60c1df79e6b825ec","name":"","pauseType":"delay","timeout":"10","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":760,"y":1260,"wires":[["d8222594049d9e9c"]]},{"id":"47c03ea98c4ea0a7","type":"switch","z":"60c1df79e6b825ec","name":"","property":"payload","propertyType":"msg","rules":[{"t":"cont","v":"colortemp","vt":"str"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":350,"y":1720,"wires":[["6d51726c729f73fb"],["2dabced49e115fb1"]]},{"id":"6d51726c729f73fb","type":"json","z":"60c1df79e6b825ec","name":"","property":"payload","action":"obj","pretty":true,"x":610,"y":1640,"wires":[["a08f3c1a0375a596"]]},{"id":"a08f3c1a0375a596","type":"function","z":"60c1df79e6b825ec","name":"Colortemp","func":"msg.code = 6626;\n\nmsg.target = msg.topic.split(\"/\")[2];\nmsg.payload = {\n channel: msg.topic.split(\"/\")[3],\n colortemp: msg.payload.colortemp,\n};\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":770,"y":1640,"wires":[["0c9a30851b68e48e"]]},{"id":"3a03ccb2a1fd4841","type":"comment","z":"60c1df79e6b825ec","name":"Color temp","info":"","x":560,"y":1600,"wires":[]},{"id":"a84f707bb5c736cb","type":"function","z":"60c1df79e6b825ec","name":"Color Temp Answer","func":"msg.topic = \"hdl/sc/\" + msg.sender + \"/\" + msg.payload.channel;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":530,"y":1360,"wires":[["dd3ee5a814ce2e45"]]},{"id":"bd21058991027109","type":"function","z":"60c1df79e6b825ec","name":"Color Temp Read","func":"msg.topic = \"hdl/sc/\" + msg.sender + \"/\" + msg.payload.channel;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":530,"y":1400,"wires":[["dd3ee5a814ce2e45"]]},{"id":"70f1df65b202c502","type":"comment","z":"60c1df79e6b825ec","name":"Color Temp Status","info":"","x":510,"y":1320,"wires":[]}]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment