Test flow of HDL curtain controller module

Test flow of HDL curtain controller module

[{"id":"aa6144897b5af25e","type":"tab","label":"My MQTT - HDL test","disabled":false,"info":"","env":[]},{"id":"54adb29c07a3b482","type":"function","z":"aa6144897b5af25e","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":530,"y":100,"wires":[["273a8fb16ea78011"]]},{"id":"9d5481af28e2c8d7","type":"function","z":"aa6144897b5af25e","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":520,"y":140,"wires":[["273a8fb16ea78011"]]},{"id":"a059982f4c5c1c6f","type":"mqtt out","z":"aa6144897b5af25e","name":"Status updates to MQTT","topic":"","qos":"0","retain":"true","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"","x":1090,"y":480,"wires":[]},{"id":"273a8fb16ea78011","type":"range","z":"aa6144897b5af25e","minin":"0","maxin":"100","minout":"0","maxout":"255","action":"scale","round":true,"property":"payload.level","name":"","x":730,"y":100,"wires":[["a059982f4c5c1c6f"]]},{"id":"8c496ada530d3c59","type":"function","z":"aa6144897b5af25e","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":530,"y":380,"wires":[["a059982f4c5c1c6f"]]},{"id":"8ec2c89011f7774f","type":"hdl-raw-in","z":"aa6144897b5af25e","controller":"","name":"From HDL","x":100,"y":480,"wires":[["ee516d0903ded462"]]},{"id":"22eb26a63f0a04df","type":"comment","z":"aa6144897b5af25e","name":"Feedback from HDL to MQTT","info":"","x":160,"y":40,"wires":[]},{"id":"497cdbfaae74999a","type":"comment","z":"aa6144897b5af25e","name":"Single Channel Status","info":"","x":500,"y":60,"wires":[]},{"id":"7a1af27698f6492c","type":"comment","z":"aa6144897b5af25e","name":"Sensor Status Broadcasts Lux and Temp","info":"","x":560,"y":340,"wires":[]},{"id":"9887534edbb286e5","type":"mqtt in","z":"aa6144897b5af25e","name":"From MQTT","topic":"hdl/+/+/+/set","qos":"0","datatype":"auto","broker":"","nl":false,"rap":false,"inputs":0,"x":110,"y":1800,"wires":[["c72bff13e0aa10ea"]]},{"id":"1c6fb9761f35c703","type":"json","z":"aa6144897b5af25e","name":"","property":"payload","action":"obj","pretty":true,"x":430,"y":1460,"wires":[["e527e139091eb645"]]},{"id":"e527e139091eb645","type":"range","z":"aa6144897b5af25e","minin":"0","maxin":"255","minout":"0","maxout":"100","action":"scale","round":true,"property":"payload.level","name":"","x":590,"y":1460,"wires":[["de13d3ebdeb41bc1"]]},{"id":"de13d3ebdeb41bc1","type":"function","z":"aa6144897b5af25e","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":760,"y":1460,"wires":[["97b3e185c006de71"]]},{"id":"aea67542ffcd7d32","type":"comment","z":"aa6144897b5af25e","name":"Commands from MQTT to HDL","info":"","x":170,"y":1380,"wires":[]},{"id":"c72bff13e0aa10ea","type":"switch","z":"aa6144897b5af25e","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":250,"y":1800,"wires":[["1c6fb9761f35c703"],["0383f916df300711"],["71ce37f916e8b11b"],["1e5c198b030b4b2c"],["cd73217902a62853"],["3163432fb39b3a46"]]},{"id":"39ed09e714dff3f7","type":"function","z":"aa6144897b5af25e","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":530,"y":240,"wires":[["a059982f4c5c1c6f"]]},{"id":"793bd875bd3b5d65","type":"comment","z":"aa6144897b5af25e","name":"Universal Switch","info":"","x":480,"y":200,"wires":[]},{"id":"0383f916df300711","type":"function","z":"aa6144897b5af25e","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":590,"y":1560,"wires":[["97b3e185c006de71"]],"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":"ee516d0903ded462","type":"switch","z":"aa6144897b5af25e","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":"58340","vt":"str"}],"checkall":"false","repair":false,"outputs":15,"x":230,"y":480,"wires":[["54adb29c07a3b482"],["9d5481af28e2c8d7"],["39ed09e714dff3f7"],["92c5f94299551b90"],["8c496ada530d3c59"],["2f9a57f470760bef"],["bbb29b0453da5e4e"],["df9d773c48c52185","36f8033699600e86"],["36f8033699600e86","df9d773c48c52185"],["fd4e9fded3f79591","9b4c5a6c8f7aa379"],["9b4c5a6c8f7aa379","fd4e9fded3f79591"],["b4f143f339f4541f","47671ef0c95a41d6"],["47671ef0c95a41d6","b4f143f339f4541f"],["d89d17a86c4bdeae"],["ebf8bf7555c64d01"]]},{"id":"cbd712f64efd6ff4","type":"comment","z":"aa6144897b5af25e","name":"Temprature Sensors","info":"","x":490,"y":540,"wires":[]},{"id":"bbb29b0453da5e4e","type":"function","z":"aa6144897b5af25e","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":530,"y":580,"wires":[["a059982f4c5c1c6f"]]},{"id":"92c5f94299551b90","type":"function","z":"aa6144897b5af25e","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":520,"y":280,"wires":[["a059982f4c5c1c6f"]]},{"id":"c2b3422524675b34","type":"comment","z":"aa6144897b5af25e","name":"AC / Heatpump","info":"","x":480,"y":920,"wires":[]},{"id":"8bc4bddeddc9808c","type":"comment","z":"aa6144897b5af25e","name":"Floorheat Thermostat DLP","info":"","x":510,"y":640,"wires":[]},{"id":"b4f143f339f4541f","type":"function","z":"aa6144897b5af25e","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){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){newsweep = \"OFF\"}\nif (sweep === 1){newsweep = \"ON\"}\nmsg.payload.sweep = newsweep\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":580,"y":1000,"wires":[["a059982f4c5c1c6f"]]},{"id":"d269e2713f6489c6","type":"switch","z":"aa6144897b5af25e","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":570,"y":2060,"wires":[["fe6184dc52912e45"],["4ea268a5a497fa44"],["c227b5f917e8fdde"]]},{"id":"df9d773c48c52185","type":"function","z":"aa6144897b5af25e","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){newpower = \"heat\"}\nif (power === false){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":560,"y":720,"wires":[["a059982f4c5c1c6f"]]},{"id":"5ecc59730cd28589","type":"switch","z":"aa6144897b5af25e","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":570,"y":1700,"wires":[["ad958eb20dec81f5"],["70efb64ddc4ed042"],["5a2d21ae18f53748"]]},{"id":"36f8033699600e86","type":"function","z":"aa6144897b5af25e","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":530,"y":680,"wires":[[]]},{"id":"71ce37f916e8b11b","type":"function","z":"aa6144897b5af25e","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":440,"y":1700,"wires":[["5ecc59730cd28589"]]},{"id":"f98478d30dc88492","type":"comment","z":"aa6144897b5af25e","name":"Single Channel Status","info":"","x":560,"y":1420,"wires":[]},{"id":"a3d995d308ab6051","type":"comment","z":"aa6144897b5af25e","name":"Universal Switch","info":"","x":540,"y":1520,"wires":[]},{"id":"ce3fe02178867c68","type":"comment","z":"aa6144897b5af25e","name":"Floorheat Thermostat DLP","info":"","x":570,"y":1620,"wires":[]},{"id":"70efb64ddc4ed042","type":"function","z":"aa6144897b5af25e","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":750,"y":1700,"wires":[["97b3e185c006de71"]]},{"id":"ad958eb20dec81f5","type":"function","z":"aa6144897b5af25e","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":730,"y":1660,"wires":[["97b3e185c006de71"]]},{"id":"5a2d21ae18f53748","type":"function","z":"aa6144897b5af25e","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":730,"y":1740,"wires":[["97b3e185c006de71"]]},{"id":"77c14345d8fe1711","type":"comment","z":"aa6144897b5af25e","name":"Air condition","info":"","x":530,"y":1980,"wires":[]},{"id":"47671ef0c95a41d6","type":"function","z":"aa6144897b5af25e","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":530,"y":960,"wires":[[]]},{"id":"cd73217902a62853","type":"function","z":"aa6144897b5af25e","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":440,"y":2060,"wires":[["d269e2713f6489c6"]]},{"id":"fe6184dc52912e45","type":"function","z":"aa6144897b5af25e","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":730,"y":2020,"wires":[["97b3e185c006de71"]],"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":"e57b9dad72ae2661","type":"function","z":"aa6144897b5af25e","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":810,"y":2060,"wires":[["97b3e185c006de71"]],"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":"4ea268a5a497fa44","type":"range","z":"aa6144897b5af25e","minin":"0","maxin":"100","minout":"0","maxout":"100","action":"scale","round":true,"property":"payload","name":"Round","x":690,"y":2060,"wires":[["e57b9dad72ae2661"]]},{"id":"c227b5f917e8fdde","type":"function","z":"aa6144897b5af25e","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":740,"y":2100,"wires":[["97b3e185c006de71"]],"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":"97b3e185c006de71","type":"hdl-raw-out","z":"aa6144897b5af25e","controller":"","name":"","x":1250,"y":1860,"wires":[]},{"id":"530c196e3d1ef465","type":"switch","z":"aa6144897b5af25e","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":570,"y":1880,"wires":[["af4cf1be30748d66"],["8168c37b0b52a75b"],["8a23ac44445865aa"]]},{"id":"1e5c198b030b4b2c","type":"function","z":"aa6144897b5af25e","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":440,"y":1880,"wires":[["530c196e3d1ef465"]]},{"id":"880b4da02f65bfd7","type":"comment","z":"aa6144897b5af25e","name":"Floorheat Thermostat Heatmodule MFH06","info":"","x":620,"y":1800,"wires":[]},{"id":"8168c37b0b52a75b","type":"function","z":"aa6144897b5af25e","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":750,"y":1880,"wires":[["97b3e185c006de71"]]},{"id":"af4cf1be30748d66","type":"function","z":"aa6144897b5af25e","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":730,"y":1840,"wires":[["97b3e185c006de71"]]},{"id":"8a23ac44445865aa","type":"function","z":"aa6144897b5af25e","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":730,"y":1920,"wires":[["97b3e185c006de71"]]},{"id":"fe01f25b354cf0bb","type":"comment","z":"aa6144897b5af25e","name":"Floorheat Thermostat Heatmodule MFH06","info":"","x":560,"y":780,"wires":[]},{"id":"9b4c5a6c8f7aa379","type":"function","z":"aa6144897b5af25e","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){newpower = \"heat\"}\nif (power === false){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":590,"y":860,"wires":[["a059982f4c5c1c6f"]]},{"id":"fd4e9fded3f79591","type":"function","z":"aa6144897b5af25e","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":530,"y":820,"wires":[[]]},{"id":"48e8425b7b6bbde5","type":"comment","z":"aa6144897b5af25e","name":"New Sensor Status Broadcasts Lux,Temp and Humid","info":"","x":590,"y":440,"wires":[]},{"id":"2f9a57f470760bef","type":"function","z":"aa6144897b5af25e","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":530,"y":480,"wires":[["a059982f4c5c1c6f"]]},{"id":"bde346ed7f3926b2","type":"comment","z":"aa6144897b5af25e","name":"Motorized Curtain Control Module","info":"","x":590,"y":2160,"wires":[]},{"id":"dee99c7aae9dae77","type":"function","z":"aa6144897b5af25e","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":720,"y":2200,"wires":[["97b3e185c006de71"]],"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":"3163432fb39b3a46","type":"switch","z":"aa6144897b5af25e","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":430,"y":2240,"wires":[["dee99c7aae9dae77"],["46df1a88b188bea3"],["bc39ce6e9e5929c8"]]},{"id":"46df1a88b188bea3","type":"function","z":"aa6144897b5af25e","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":720,"y":2240,"wires":[["97b3e185c006de71"]],"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":"bc39ce6e9e5929c8","type":"function","z":"aa6144897b5af25e","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":720,"y":2280,"wires":[["97b3e185c006de71"]],"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":"467799ade7b44b38","type":"comment","z":"aa6144897b5af25e","name":"Motorized Curtain Control Module","info":"","x":530,"y":1060,"wires":[]},{"id":"63212921380baf24","type":"function","z":"aa6144897b5af25e","name":"Curtain Answer Opening","func":"//Save to flow variable for later use\nflow.set(\"hdl/cc/\" + msg.sender + \"/\" + msg.payload.curtain +\"/hdlstate\", msg.payload.status);\n//Update MQTT server\nmsg.topic = \"hdl/cc/\" + msg.sender + \"/\" + msg.payload.curtain + \"/state\";\nmsg.payload = \"opening\";\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":650,"y":1100,"wires":[["a059982f4c5c1c6f"]]},{"id":"d89d17a86c4bdeae","type":"switch","z":"aa6144897b5af25e","name":"status","property":"payload.status","propertyType":"msg","rules":[{"t":"eq","v":"1","vt":"num"},{"t":"eq","v":"2","vt":"num"},{"t":"eq","v":"0","vt":"num"}],"checkall":"false","repair":false,"outputs":3,"x":470,"y":1140,"wires":[["63212921380baf24"],["99d081de6909c99c"],["d924999b28e9a3a7"]]},{"id":"99d081de6909c99c","type":"function","z":"aa6144897b5af25e","name":"Curtain Answer Closing","func":"//Save to flow variable for later use\nflow.set(\"hdl/cc/\" + msg.sender + \"/\" + msg.payload.curtain +\"/hdlstate\", msg.payload.status);\n//Update MQTT server\nmsg.topic = \"hdl/cc/\" + msg.sender + \"/\" + msg.payload.curtain + \"/state\";\nmsg.payload = \"closing\";\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":650,"y":1140,"wires":[["a059982f4c5c1c6f"]]},{"id":"d924999b28e9a3a7","type":"function","z":"aa6144897b5af25e","name":"Curtain Answer Stopped","func":"//Save to flow variable for later use\nflow.set(\"hdl/cc/\" + msg.sender + \"/\" + msg.payload.curtain +\"/hdlstate\", msg.payload.status);\n//Save CH for % use\nmsg.curtainnr = msg.payload.curtain\n//Update MQTT server\nmsg.topic = \"hdl/cc/\" + msg.sender + \"/\" + msg.payload.curtain + \"/state\";\nmsg.payload = \"stopped\";\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":650,"y":1180,"wires":[["a059982f4c5c1c6f","c524cf9b2ec2c697"]]},{"id":"bd9296e79da95536","type":"change","z":"aa6144897b5af25e","name":"CH 1","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.curtains.0","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":610,"y":1260,"wires":[["e9752abc84bbf523"]]},{"id":"e9752abc84bbf523","type":"function","z":"aa6144897b5af25e","name":"Curtain Stopped","func":"//Save CH for % use\nmsg.curtainnr = msg.payload.number\n//Get Old status from flow variables\nmsg.oldhdlstate =flow.get(\"hdl/cc/\" + msg.sender + \"/\" + msg.payload.number +\"/hdlstate\");\n//Msg topic\nmsg.topic = \"hdl/cc/\" + msg.sender + \"/\" + msg.payload.number + \"/state\";\n//Check old status and update if changed\nif (msg.oldhdlstate == 1) \n    {\n    msg.payload = \"open\";\n    return msg;\n    } \nif (msg.oldhdlstate == 2) \n    {\n    msg.payload = \"closed\";\n    return msg;\n    }\nif (msg.oldhdlstate == 0) \n    {\n    msg.payload = \"stopped\";\n    }","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":760,"y":1260,"wires":[["a059982f4c5c1c6f","c524cf9b2ec2c697"]]},{"id":"415ac546dee3905c","type":"comment","z":"aa6144897b5af25e","name":"Broadcast msg","info":"","x":520,"y":1220,"wires":[]},{"id":"c524cf9b2ec2c697","type":"function","z":"aa6144897b5af25e","name":"Position","func":"//Change Topic\nmsg.topic = \"hdl/cc/\" + msg.sender + \"/\" + msg.curtainnr + \"/position\";\n//Update % Level\nif (msg.payload === \"open\") \n    {\n    msg.payload = 100;\n    return msg;\n    } \nif (msg.payload === \"closed\") \n    {\n    msg.payload = 0;\n    return msg;\n    }\nif (msg.payload === \"stopped\") \n    {\n    msg.payload = 50;\n    }\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":980,"y":1180,"wires":[["a059982f4c5c1c6f"]]},{"id":"400b2d4096bef56b","type":"function","z":"aa6144897b5af25e","name":"Curtain Stopped","func":"//Save CH for % use\nmsg.curtainnr = msg.payload.number\n//Get Old status from flow variables\nmsg.oldhdlstate =flow.get(\"hdl/cc/\" + msg.sender + \"/\" + msg.payload.number +\"/hdlstate\");\n//Msg topic\nmsg.topic = \"hdl/cc/\" + msg.sender + \"/\" + msg.payload.number + \"/state\";\n//Check old status and update if changed\nif (msg.oldhdlstate == 1) \n    {\n    msg.payload = \"open\";\n    return msg;\n    } \nif (msg.oldhdlstate == 2) \n    {\n    msg.payload = \"closed\";\n    return msg;\n    }\nif (msg.oldhdlstate == 0) \n    {\n    msg.payload = \"stopped\";\n    }","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":760,"y":1300,"wires":[["a059982f4c5c1c6f","c524cf9b2ec2c697"]]},{"id":"8b642280aee2d12f","type":"change","z":"aa6144897b5af25e","name":"CH 2","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.curtains.1","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":610,"y":1300,"wires":[["400b2d4096bef56b"]]},{"id":"ebf8bf7555c64d01","type":"switch","z":"aa6144897b5af25e","name":"status","property":"payload.status","propertyType":"msg","rules":[{"t":"eq","v":"0","vt":"num"}],"checkall":"false","repair":false,"outputs":1,"x":490,"y":1280,"wires":[["bd9296e79da95536","8b642280aee2d12f"]]}]

Flow Info

Created 2 years, 2 months ago
Rating: not yet rated

Owner

Actions

Rate:

Node Types

Core
  • change (x2)
  • comment (x18)
  • function (x36)
  • json (x1)
  • mqtt in (x1)
  • mqtt out (x1)
  • range (x3)
  • switch (x8)
Other
  • hdl-raw-in (x1)
  • hdl-raw-out (x1)
  • tab (x1)

Tags

Copy this flow JSON to your clipboard and then import into Node-RED using the Import From > Clipboard (Ctrl-I) menu option