If that works you can test to disable the current MQTT - HDL flow in Nodered and import this one to test:
[{"id":"d409d0a29f7f44cf","type":"tab","label":"hdl-mfh06 test","disabled":false,"info":"","env":[]},{"id":"f7688362d4a6624e","type":"function","z":"d409d0a29f7f44cf","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":[["c60be061e5ba0eac"]]},{"id":"90916b69f59f3b88","type":"function","z":"d409d0a29f7f44cf","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":[["c60be061e5ba0eac"]]},{"id":"e6e91e6c6531d2e7","type":"mqtt out","z":"d409d0a29f7f44cf","name":"Status updates to MQTT","topic":"","qos":"0","retain":"true","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"d110fe62.0ec2","x":990,"y":380,"wires":[]},{"id":"c60be061e5ba0eac","type":"range","z":"d409d0a29f7f44cf","minin":"0","maxin":"100","minout":"0","maxout":"255","action":"scale","round":true,"property":"payload.level","name":"","x":730,"y":100,"wires":[["e6e91e6c6531d2e7"]]},{"id":"7aed38565deb1c0c","type":"function","z":"d409d0a29f7f44cf","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":[["e6e91e6c6531d2e7"]]},{"id":"bc29607c9c88a3a2","type":"hdl-raw-in","z":"d409d0a29f7f44cf","controller":"6e986e87.b7a2a","name":"From HDL","x":100,"y":480,"wires":[["cf22a85c315dec13"]]},{"id":"f4b85abf981827f6","type":"comment","z":"d409d0a29f7f44cf","name":"Feedback from HDL to MQTT","info":"","x":160,"y":40,"wires":[]},{"id":"102349dc9bae18da","type":"comment","z":"d409d0a29f7f44cf","name":"Single Channel Status","info":"","x":500,"y":60,"wires":[]},{"id":"34ac95eea1ee0cae","type":"comment","z":"d409d0a29f7f44cf","name":"Sensor Status Broadcasts Lux and Temp","info":"","x":560,"y":340,"wires":[]},{"id":"49f79449d95f025a","type":"mqtt in","z":"d409d0a29f7f44cf","name":"From MQTT","topic":"hdl/+/+/+/set","qos":"0","datatype":"auto","broker":"d110fe62.0ec2","nl":false,"rap":false,"inputs":0,"x":110,"y":1280,"wires":[["9b2e5f67d92eb556"]]},{"id":"565bad86310d0418","type":"json","z":"d409d0a29f7f44cf","name":"","property":"payload","action":"obj","pretty":true,"x":470,"y":1100,"wires":[["54c54c0e99f07499"]]},{"id":"54c54c0e99f07499","type":"range","z":"d409d0a29f7f44cf","minin":"0","maxin":"255","minout":"0","maxout":"100","action":"scale","round":true,"property":"payload.level","name":"","x":590,"y":1100,"wires":[["12f503b35aeff61c"]]},{"id":"12f503b35aeff61c","type":"function","z":"d409d0a29f7f44cf","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":1100,"wires":[["fef4ca11f287479d"]]},{"id":"48b0310ebeba4ba1","type":"comment","z":"d409d0a29f7f44cf","name":"Commands from MQTT to HDL","info":"","x":170,"y":1020,"wires":[]},{"id":"9b2e5f67d92eb556","type":"switch","z":"d409d0a29f7f44cf","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"}],"checkall":"true","repair":false,"outputs":5,"x":250,"y":1280,"wires":[["565bad86310d0418"],["b1b2f5578daf9921"],["b989c322da784388"],["5221b9e27190eefb"],["0277c060ae28fde2"]]},{"id":"94828825b61a85a1","type":"function","z":"d409d0a29f7f44cf","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":[["e6e91e6c6531d2e7"]]},{"id":"a472cec6ba103b35","type":"comment","z":"d409d0a29f7f44cf","name":"Universal Switch","info":"","x":480,"y":200,"wires":[]},{"id":"b1b2f5578daf9921","type":"function","z":"d409d0a29f7f44cf","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":740,"y":1200,"wires":[["fef4ca11f287479d"]],"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":"cf22a85c315dec13","type":"switch","z":"d409d0a29f7f44cf","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":"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"}],"checkall":"false","repair":false,"outputs":12,"x":230,"y":480,"wires":[["f7688362d4a6624e"],["90916b69f59f3b88"],["94828825b61a85a1"],["73fc642b8eb78a77"],["7aed38565deb1c0c"],["367301f3fb7d3dae"],["ca3dc95602747d75","723cad02ff85aa77"],["723cad02ff85aa77","ca3dc95602747d75"],["d4c7e2802d3aab8a","945e3545774a5281"],["945e3545774a5281","d4c7e2802d3aab8a"],["05c09355d256695e","0ba22a37d6db866e"],["0ba22a37d6db866e","05c09355d256695e"]]},{"id":"b4977c49ff365c0e","type":"comment","z":"d409d0a29f7f44cf","name":"Temprature Sensors","info":"","x":490,"y":440,"wires":[]},{"id":"367301f3fb7d3dae","type":"function","z":"d409d0a29f7f44cf","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":480,"wires":[["e6e91e6c6531d2e7"]]},{"id":"73fc642b8eb78a77","type":"function","z":"d409d0a29f7f44cf","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":[["e6e91e6c6531d2e7"]]},{"id":"c20fcfd152705dca","type":"comment","z":"d409d0a29f7f44cf","name":"AC / Heatpump","info":"","x":480,"y":820,"wires":[]},{"id":"c27be99c4d110263","type":"comment","z":"d409d0a29f7f44cf","name":"Floorheat Thermostat DLP","info":"","x":510,"y":540,"wires":[]},{"id":"05c09355d256695e","type":"function","z":"d409d0a29f7f44cf","name":"Air condition Unit Command from DLP ","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":570,"y":900,"wires":[["e6e91e6c6531d2e7"]]},{"id":"3f50d0f2fdbe5db9","type":"switch","z":"d409d0a29f7f44cf","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":530,"y":1740,"wires":[["aebb0c75dd969fca"],["f464921b1f442181"],["6b93b8e98eac4a13"]]},{"id":"4bcc7a8ae1787db5","type":"hdl-virtual-hvac-out","z":"d409d0a29f7f44cf","controller":"6e986e87.b7a2a","name":"TO HDL DLP","address":"1.99","x":970,"y":1740,"wires":[]},{"id":"ca3dc95602747d75","type":"function","z":"d409d0a29f7f44cf","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":620,"wires":[["e6e91e6c6531d2e7"]]},{"id":"13cfc0ee1b828507","type":"switch","z":"d409d0a29f7f44cf","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":1340,"wires":[["234f971b363daf21"],["5d0d05ffb3b48f8f"],["1b3bfb4f62154808"]]},{"id":"723cad02ff85aa77","type":"function","z":"d409d0a29f7f44cf","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":580,"wires":[[]]},{"id":"b989c322da784388","type":"function","z":"d409d0a29f7f44cf","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":1340,"wires":[["13cfc0ee1b828507"]]},{"id":"fef7564cd271bf53","type":"comment","z":"d409d0a29f7f44cf","name":"Single Channel Status","info":"","x":560,"y":1060,"wires":[]},{"id":"06bae3f5d47d7691","type":"comment","z":"d409d0a29f7f44cf","name":"Universal Switch","info":"","x":540,"y":1160,"wires":[]},{"id":"24e411f3922a9ed1","type":"comment","z":"d409d0a29f7f44cf","name":"Floorheat Thermostat DLP","info":"","x":570,"y":1260,"wires":[]},{"id":"5d0d05ffb3b48f8f","type":"function","z":"d409d0a29f7f44cf","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":1340,"wires":[["fef4ca11f287479d"]]},{"id":"234f971b363daf21","type":"function","z":"d409d0a29f7f44cf","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":1300,"wires":[["fef4ca11f287479d"]]},{"id":"1b3bfb4f62154808","type":"function","z":"d409d0a29f7f44cf","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":1380,"wires":[["fef4ca11f287479d"]]},{"id":"e892611df0c139cb","type":"comment","z":"d409d0a29f7f44cf","name":"Air condition","info":"","x":530,"y":1640,"wires":[]},{"id":"0ba22a37d6db866e","type":"function","z":"d409d0a29f7f44cf","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":860,"wires":[[]]},{"id":"0277c060ae28fde2","type":"function","z":"d409d0a29f7f44cf","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":400,"y":1740,"wires":[["3f50d0f2fdbe5db9"]]},{"id":"aebb0c75dd969fca","type":"function","z":"d409d0a29f7f44cf","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":690,"y":1680,"wires":[["4bcc7a8ae1787db5"]],"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":"c4d3bf2fd3532ed5","type":"function","z":"d409d0a29f7f44cf","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":770,"y":1740,"wires":[["4bcc7a8ae1787db5"]],"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":"f464921b1f442181","type":"range","z":"d409d0a29f7f44cf","minin":"0","maxin":"100","minout":"0","maxout":"100","action":"scale","round":true,"property":"payload","name":"Round","x":650,"y":1740,"wires":[["c4d3bf2fd3532ed5"]]},{"id":"6b93b8e98eac4a13","type":"function","z":"d409d0a29f7f44cf","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":700,"y":1800,"wires":[["4bcc7a8ae1787db5"]],"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":"fef4ca11f287479d","type":"hdl-raw-out","z":"d409d0a29f7f44cf","controller":"6e986e87.b7a2a","name":"","x":1250,"y":1340,"wires":[]},{"id":"924768afbce95647","type":"switch","z":"d409d0a29f7f44cf","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":1520,"wires":[["0f6e549052100ef1"],["45955344839086c8"],["f9abce9ded39bdf3"]]},{"id":"5221b9e27190eefb","type":"function","z":"d409d0a29f7f44cf","name":"Flow get","func":"//Get Old status from flow variable for complete message\nmsg.oldhdlstate =flow.get(\"hdl/hm/\" + msg.topic.split(\"/\")[2] + msg.topic.split(\"/\")[3] + \"/hdlstate\");\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":440,"y":1520,"wires":[["924768afbce95647"]]},{"id":"b80b0e2e0e978d7a","type":"comment","z":"d409d0a29f7f44cf","name":"Floorheat Thermostat Heatmodule MFH06","info":"","x":620,"y":1440,"wires":[]},{"id":"45955344839086c8","type":"function","z":"d409d0a29f7f44cf","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 = 7260\nmsg.payload = msg.oldhdlstate\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":750,"y":1520,"wires":[["fef4ca11f287479d"]]},{"id":"0f6e549052100ef1","type":"function","z":"d409d0a29f7f44cf","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 = 7260\nmsg.payload = msg.oldhdlstate\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":730,"y":1480,"wires":[["fef4ca11f287479d"]]},{"id":"f9abce9ded39bdf3","type":"function","z":"d409d0a29f7f44cf","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 = 7260\nmsg.payload = msg.oldhdlstate\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":730,"y":1560,"wires":[["fef4ca11f287479d"]]},{"id":"6e360050af29aab2","type":"comment","z":"d409d0a29f7f44cf","name":"Floorheat Thermostat Heatmodule MFH06","info":"","x":560,"y":680,"wires":[]},{"id":"945e3545774a5281","type":"function","z":"d409d0a29f7f44cf","name":"Floorheat Update/Answer from Heatmodule","func":"//Insert MQTT Topic\nmsg.topic = \"hdl/hm/\" + msg.sender + msg.payload.channel + \"/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":590,"y":760,"wires":[["e6e91e6c6531d2e7"]]},{"id":"d4c7e2802d3aab8a","type":"function","z":"d409d0a29f7f44cf","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":720,"wires":[[]]},{"id":"d03ac02854ba9d67","type":"inject","z":"d409d0a29f7f44cf","name":"","props":[{"p":"payload","v":"Started!","vt":"str"},{"p":"topic","v":"","vt":"string"}],"repeat":"","crontab":"","once":true,"onceDelay":"","topic":"","payload":"Started!","payloadType":"str","x":160,"y":1960,"wires":[["cd29b4313cda695c","f414f764eb323b50","3ecb82b5a770398c","321efe21918907d0","6cee1e5be4a2c287"]]},{"id":"1b9f13eadcccb7a1","type":"comment","z":"d409d0a29f7f44cf","name":"Floorheat","info":"","x":340,"y":1920,"wires":[]},{"id":"5d08bfc77dd3ace3","type":"comment","z":"d409d0a29f7f44cf","name":"Read startup Status","info":"","x":130,"y":1900,"wires":[]},{"id":"aad0501e62a0a971","type":"function","z":"d409d0a29f7f44cf","name":"Read status Floorheat ch2","func":"msg.target = \"1.20\"\nmsg.code = 7262;\nmsg.payload = {\n channel: 2,\n};\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":920,"y":2020,"wires":[["fef4ca11f287479d"]]},{"id":"6cee1e5be4a2c287","type":"function","z":"d409d0a29f7f44cf","name":"Read status Floorheat ch1","func":"msg.target = \"1.20\"\nmsg.code = 7262;\nmsg.payload = {\n channel: 1,\n};\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":920,"y":1960,"wires":[["fef4ca11f287479d"]]},{"id":"4badbe0f81533427","type":"function","z":"d409d0a29f7f44cf","name":"Read status Floorheat ch4","func":"msg.target = \"1.20\"\nmsg.code = 7262;\nmsg.payload = {\n channel: 4,\n};\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":920,"y":2140,"wires":[["fef4ca11f287479d"]]},{"id":"2c18bb88eb859db0","type":"function","z":"d409d0a29f7f44cf","name":"Read status Floorheat ch3","func":"msg.target = \"1.20\"\nmsg.code = 7262;\nmsg.payload = {\n channel: 3,\n};\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":920,"y":2080,"wires":[["fef4ca11f287479d"]]},{"id":"6469fe9aa28db2bc","type":"function","z":"d409d0a29f7f44cf","name":"Read status Floorheat ch5","func":"msg.target = \"1.20\"\nmsg.code = 7262;\nmsg.payload = {\n channel: 5,\n};\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":920,"y":2200,"wires":[["fef4ca11f287479d"]]},{"id":"f414f764eb323b50","type":"delay","z":"d409d0a29f7f44cf","name":"","pauseType":"delay","timeout":"4","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"outputs":1,"x":360,"y":2080,"wires":[["2c18bb88eb859db0"]]},{"id":"cd29b4313cda695c","type":"delay","z":"d409d0a29f7f44cf","name":"","pauseType":"delay","timeout":"2","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"outputs":1,"x":360,"y":2020,"wires":[["aad0501e62a0a971"]]},{"id":"3ecb82b5a770398c","type":"delay","z":"d409d0a29f7f44cf","name":"","pauseType":"delay","timeout":"6","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"outputs":1,"x":360,"y":2140,"wires":[["4badbe0f81533427"]]},{"id":"321efe21918907d0","type":"delay","z":"d409d0a29f7f44cf","name":"","pauseType":"delay","timeout":"8","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"outputs":1,"x":360,"y":2200,"wires":[["6469fe9aa28db2bc"]]},{"id":"d110fe62.0ec2","type":"mqtt-broker","name":"hassio.local","broker":"localhost","port":"1883","clientid":"","usetls":false,"protocolVersion":"4","keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"sessionExpiry":""},{"id":"6e986e87.b7a2a","type":"hdl-controller","host":"192.168.10.250","port":"6000","subnetid":"1","deviceid":"98","broadcast":false,"daliId":"92"}]
What you need to add to the configuration.yaml file is almost same as the Floorheat / Thermostat example on my first post exept topic needs to be “hdl/hm” instead of “hdl/fh”:
climate:
- platform: mqtt
name: "Floorheat channel 2"
send_if_off: true
modes:
- "off"
- "heat"
mode_state_topic: "hdl/hm/1.20/02"
mode_state_template: "{{value_json.status}}"
mode_command_topic: "hdl/hm/1.20/02/mode/set"
#current_temperature_topic: "hdl/hm/1.20/02"
#current_temperature_template: "{{value_json.temperature.current}}"
current_temperature_topic: "hdl/temp/1.20/2"
temperature_state_topic: "hdl/hm/1.20/02"
temperature_state_template: "{{value_json.temperature.now}}"
temperature_command_topic: "hdl/hm/1.20/02/temperature/set"
hold_modes:
- "Normal"
- "Day"
- "Night"
- "Away"
- "Timer"
hold_state_topic: "hdl/hm/1.20/02"
hold_state_template: "{{value_json.textmode}}"
hold_command_topic: "hdl/hm/1.20/02/textmode/set"
min_temp: 5
max_temp: 35
precision: 0.1
You might have to change the “current_temperature_topic” to the sensor that u want to be displayed as the now temperature.
I put this together quick and have not done any testing so expect there to be some bugs and make sure you dont destroy your floors with to much heat or something. Might want to test on a tiled floor and not on a wooden floor.
I have not done any changes to the valve and watering time as i dont understand what it is for. Might have to force this to false and 0. Do you know what this is for? (On your picture the watering time is changing from the cmd to the responce and the valve is changing from the CMD to the responce on the read status 3 sec later)
If everything works you should get updated data on the MQTT server under hdl.hm?
Also should get the data in the node-red context data under flow after you press the update button.
Under hdl/hm/1 it should be something like this except hdl.hm/1:?
Let me know how this works for you and what we need to change.