HDL Smartbus via NodeRed and MQTT

with this command I can turn on one channel

msg={
target: “1.3”,
code: 7260,
payload:{“channel”:1,
“work”:{“type”:0,“status”:true},
“temperature”:{“type”:0,“normal”:23,“day”:20,“night”:20,“away”:20},
“mode”:1,“valve”:false,“watering”:{“time”:20}
}
};
return msg

Hi Lexus2020.

It is controlled from home assistant using mqtt and from mqtt to hdl in nodered. I dont have any experience using homekit. So not sure if that can integrate with mqtt or if you would need to use a homekit pallet instead.

Would recomend posting in the nodered forum instead as this forum is related to home assistant. That forum is also more suited for sharing flows etc. If you let me know when you have posted there i might be able to do some assisting.

Also keep in mind that there is a indexing fault on the decoding of the messages from that module. I have made a fix for that and plan to do a pull request on git when i get some time. Might be able to upload a copy to the nodered forum.

thanks for the answer i want not to use MQTT i want to do it via subflow on nodered
I need your help with the HDL commands for the MFH06 module And with Homekit I will figure it out myself

For the message you sendt there is more than on, description on your message in ():

msg={
target: “1.3”, (Subnet and channel of Floorheat module)
code: 7260, (Command for controling the Floor heating module)
payload:{“channel”:1, (Channel on the heatmodule you want to control)
“work”:{“type”:0,“status”:true}, (Type= 0:Heating, 1:Cooling, 2: Heating power output, 3: Cooling power output. Status= True: ON, False: OFF)
“temperature”:{“type”:0,“normal”:23,“day”:20,“night”:20,“away”:20}, (Type= 0: Celsius, 1: Fahrenheit. Normal = temperature for normal mode. ++++)
“mode”:1,“valve”:false,“watering”:{“time”:20} (Mode= 1: Normal, 2: Day, 3: Night, 4: Away, 5 Timer.)

Have made an attempt on a gateway from HDL to Homekit but do not have a Iphone or Ipad nor the HDL heatmodule so have not done any testing but should give you a starting point.

I used the palette “node-red-contrib-homekit-bridged” in nodered.

[{"id":"4ef634328f92511d","type":"tab","label":"Homekit HDL Termostat","disabled":false,"info":"","env":[]},{"id":"c268eb03f88f11c3","type":"homekit-service","z":"4ef634328f92511d","isParent":true,"hostType":"0","bridge":"cf42cb6346cc105a","accessoryId":"","parentService":"","name":"Subnet1 Address3 CH1","serviceName":"Thermostat","topic":"","filter":false,"manufacturer":"NRCHKB","model":"1.4.3","serialNo":"Default Serial Number","firmwareRev":"1.4.3","hardwareRev":"1.4.3","softwareRev":"1.4.3","cameraConfigVideoProcessor":"ffmpeg","cameraConfigSource":"","cameraConfigStillImageSource":"","cameraConfigMaxStreams":2,"cameraConfigMaxWidth":1280,"cameraConfigMaxHeight":720,"cameraConfigMaxFPS":10,"cameraConfigMaxBitrate":300,"cameraConfigVideoCodec":"libx264","cameraConfigAudioCodec":"libfdk_aac","cameraConfigAudio":false,"cameraConfigPacketSize":1316,"cameraConfigVerticalFlip":false,"cameraConfigHorizontalFlip":false,"cameraConfigMapVideo":"0:0","cameraConfigMapAudio":"0:1","cameraConfigVideoFilter":"scale=1280:720","cameraConfigAdditionalCommandLine":"-tune zerolatency","cameraConfigDebug":false,"cameraConfigSnapshotOutput":"disabled","cameraConfigInterfaceName":"","characteristicProperties":"{\"TargetHeatingCoolingState\":{\"validValues\":[0,1]},\"CurrentHeatingCoolingState\":{\"validValues\":[0,1]},\"TargetTemperature\":{\"Minimum Value\":11,\"Maximum Value\":32,\"Minimum Step\":1}}","waitForSetupMsg":false,"outputs":2,"x":950,"y":780,"wires":[["7d9d0e7b8d4a6c25"],[]]},{"id":"bf10fe348a05d561","type":"inject","z":"4ef634328f92511d","name":"","props":[{"p":"payload","v":"Started!","vt":"str"},{"p":"topic","v":"","vt":"string"}],"repeat":"","crontab":"","once":true,"onceDelay":"","topic":"","payload":"Started!","payloadType":"str","x":120,"y":100,"wires":[["9fb39de4a03cd158","9a6341e1ad1c824f","2cc316caad6c61e1","bf0848e636884c16","3e15f5f684b3206b","2ce81424078c0737"]]},{"id":"cbe3e7320429c062","type":"comment","z":"4ef634328f92511d","name":"Read startup Status","info":"","x":110,"y":40,"wires":[]},{"id":"05afe1694f0c3e62","type":"function","z":"4ef634328f92511d","name":"Read status Floorheat ch2","func":"msg.target = \"1.3\"\nmsg.code = 7262;\nmsg.payload = {\n    channel: 2,\n};\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":580,"y":160,"wires":[["fbb36ff4507cfeb0"]]},{"id":"3e15f5f684b3206b","type":"function","z":"4ef634328f92511d","name":"Read status Floorheat ch1","func":"msg.target = \"1.3\"\nmsg.code = 7262;\nmsg.payload = {\n    channel: 1,\n};\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":580,"y":100,"wires":[["fbb36ff4507cfeb0"]]},{"id":"3044215bd55ab948","type":"function","z":"4ef634328f92511d","name":"Read status Floorheat ch4","func":"msg.target = \"1.3\"\nmsg.code = 7262;\nmsg.payload = {\n    channel: 4,\n};\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":580,"y":280,"wires":[["fbb36ff4507cfeb0"]]},{"id":"f24953c6b7073ef1","type":"function","z":"4ef634328f92511d","name":"Read status Floorheat ch3","func":"msg.target = \"1.14\"\nmsg.code = 7262;\nmsg.payload = {\n    channel: 3,\n};\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":580,"y":220,"wires":[["fbb36ff4507cfeb0"]]},{"id":"19a0de1904d2785a","type":"function","z":"4ef634328f92511d","name":"Read status Floorheat ch5","func":"msg.target = \"1.3\"\nmsg.code = 7262;\nmsg.payload = {\n    channel: 5,\n};\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":580,"y":340,"wires":[["fbb36ff4507cfeb0"]]},{"id":"9a6341e1ad1c824f","type":"delay","z":"4ef634328f92511d","name":"","pauseType":"delay","timeout":"4","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"outputs":1,"x":340,"y":220,"wires":[["f24953c6b7073ef1"]]},{"id":"9fb39de4a03cd158","type":"delay","z":"4ef634328f92511d","name":"","pauseType":"delay","timeout":"2","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"outputs":1,"x":340,"y":160,"wires":[["05afe1694f0c3e62"]]},{"id":"2cc316caad6c61e1","type":"delay","z":"4ef634328f92511d","name":"","pauseType":"delay","timeout":"6","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"outputs":1,"x":340,"y":280,"wires":[["3044215bd55ab948"]]},{"id":"bf0848e636884c16","type":"delay","z":"4ef634328f92511d","name":"","pauseType":"delay","timeout":"8","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"outputs":1,"x":340,"y":340,"wires":[["19a0de1904d2785a"]]},{"id":"ed5dd45d147e906e","type":"function","z":"4ef634328f92511d","name":"Read status Floorheat ch6","func":"msg.target = \"1.3\"\nmsg.code = 7262;\nmsg.payload = {\n    channel: 6,\n};\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":580,"y":400,"wires":[["fbb36ff4507cfeb0"]]},{"id":"2ce81424078c0737","type":"delay","z":"4ef634328f92511d","name":"","pauseType":"delay","timeout":"8","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"outputs":1,"x":340,"y":400,"wires":[["ed5dd45d147e906e"]]},{"id":"2ca0a25bfda4b0c0","type":"comment","z":"4ef634328f92511d","name":"HDL feedback to Homekit","info":"","x":130,"y":480,"wires":[]},{"id":"6d9045e042eb2f19","type":"hdl-raw-in","z":"4ef634328f92511d","controller":"","name":"From HDL","x":80,"y":560,"wires":[["574b813084033448"]]},{"id":"574b813084033448","type":"switch","z":"4ef634328f92511d","name":"Code","property":"code","propertyType":"msg","rules":[{"t":"eq","v":"7263","vt":"str"},{"t":"eq","v":"7261","vt":"str"}],"checkall":"false","repair":false,"outputs":2,"x":210,"y":560,"wires":[["1a1c9867a0dc6915","8a92000e68f47b35"],["8a92000e68f47b35","1a1c9867a0dc6915"]]},{"id":"1a1c9867a0dc6915","type":"function","z":"4ef634328f92511d","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":410,"y":540,"wires":[[]]},{"id":"8a92000e68f47b35","type":"function","z":"4ef634328f92511d","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":470,"y":580,"wires":[["fd8179d24076cfa0"]]},{"id":"47c9bd4694a5e6fa","type":"switch","z":"4ef634328f92511d","name":"Channel","property":"payload.channel","propertyType":"msg","rules":[{"t":"eq","v":"1","vt":"num"},{"t":"eq","v":"2","vt":"num"}],"checkall":"true","repair":false,"outputs":2,"x":100,"y":640,"wires":[["d1b2be92addc53fd"],["7037212fd03b8bec"]]},{"id":"4a2d130433ed3902","type":"switch","z":"4ef634328f92511d","name":"Mode","property":"payload.TargetHeatingCoolingState","propertyType":"msg","rules":[{"t":"nnull"}],"checkall":"true","repair":false,"outputs":1,"x":1270,"y":760,"wires":[["1e367a58fcbc4c8f"]]},{"id":"d6e53f2b46e552ca","type":"switch","z":"4ef634328f92511d","name":"Temp","property":"payload.TargetTemperature","propertyType":"msg","rules":[{"t":"nnull"}],"checkall":"true","repair":false,"outputs":1,"x":1270,"y":800,"wires":[["edf1c4b83457df93"]]},{"id":"fd8179d24076cfa0","type":"switch","z":"4ef634328f92511d","name":"Sender","property":"sender","propertyType":"msg","rules":[{"t":"eq","v":"1.3","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":720,"y":580,"wires":[["47c9bd4694a5e6fa"]]},{"id":"25816f1c9d276a48","type":"switch","z":"4ef634328f92511d","name":"ON OFF","property":"payload.work.status","propertyType":"msg","rules":[{"t":"true"},{"t":"false"}],"checkall":"true","repair":false,"outputs":2,"x":420,"y":680,"wires":[["66b396789b3deed0"],["e36ec3e906984131"]]},{"id":"d1b2be92addc53fd","type":"switch","z":"4ef634328f92511d","name":"Heat / Cool","property":"payload.work.type","propertyType":"msg","rules":[{"t":"eq","v":"0","vt":"num"},{"t":"eq","v":"1","vt":"num"}],"checkall":"true","repair":false,"outputs":2,"x":290,"y":740,"wires":[["25816f1c9d276a48","a7d7d41e39d3681a","01538d95eec834be"],[]]},{"id":"328826d0e4d80f00","type":"comment","z":"4ef634328f92511d","name":"CH 1","info":"","x":270,"y":640,"wires":[]},{"id":"66b396789b3deed0","type":"change","z":"4ef634328f92511d","name":"Feedback to ON","rules":[{"t":"set","p":"payload","pt":"msg","to":"{\"TargetHeatingCoolingState\":1}","tot":"json"}],"action":"","property":"","from":"","to":"","reg":false,"x":580,"y":660,"wires":[["fcd84f5cd960a882"]]},{"id":"e36ec3e906984131","type":"change","z":"4ef634328f92511d","name":"Feedback to OFF","rules":[{"t":"set","p":"payload","pt":"msg","to":"{\"TargetHeatingCoolingState\":0}","tot":"json"}],"action":"","property":"","from":"","to":"","reg":false,"x":590,"y":700,"wires":[["1dfc696c6b898b3c"]]},{"id":"7d9d0e7b8d4a6c25","type":"function","z":"4ef634328f92511d","name":"Flow get","func":"//Get Old status from flow variable for complete message\nmsg.oldhdlstate =flow.get(\"hdl/hm/\" + \"1.3\" + \"/\" + 1 + \"/hdlstate\");\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1140,"y":780,"wires":[["4a2d130433ed3902","d6e53f2b46e552ca"]]},{"id":"1e367a58fcbc4c8f","type":"function","z":"4ef634328f92511d","name":"New Mode","func":"// Change from Off or heat to true/false\nif (msg.payload == 0) {msg.oldhdlstate.work.status = false}\nif (msg.payload == 1) {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":1410,"y":760,"wires":[["fbb36ff4507cfeb0"]]},{"id":"fbb36ff4507cfeb0","type":"hdl-raw-out","z":"4ef634328f92511d","controller":"","name":"To HDL","x":1640,"y":480,"wires":[]},{"id":"fcd84f5cd960a882","type":"rbe","z":"4ef634328f92511d","name":"","func":"rbe","gap":"","start":"","inout":"out","septopics":false,"property":"payload","topi":"topic","x":750,"y":660,"wires":[["c268eb03f88f11c3"]]},{"id":"1dfc696c6b898b3c","type":"rbe","z":"4ef634328f92511d","name":"","func":"rbe","gap":"","start":"","inout":"out","septopics":false,"property":"payload","topi":"topic","x":750,"y":700,"wires":[["c268eb03f88f11c3"]]},{"id":"4e8e3f77aba16cca","type":"rbe","z":"4ef634328f92511d","name":"","func":"rbe","gap":"","start":"","inout":"out","septopics":false,"property":"payload","topi":"topic","x":750,"y":760,"wires":[["c268eb03f88f11c3"]]},{"id":"a7d7d41e39d3681a","type":"function","z":"4ef634328f92511d","name":"Update Current Temperature","func":"var currenttemp = msg.payload.temperature.current\nmsg.payload = {\"CurrentTemperature\": currenttemp}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":560,"y":760,"wires":[["4e8e3f77aba16cca"]]},{"id":"62af807636879be4","type":"rbe","z":"4ef634328f92511d","name":"","func":"rbe","gap":"","start":"","inout":"out","septopics":false,"property":"payload","topi":"topic","x":750,"y":820,"wires":[["c268eb03f88f11c3"]]},{"id":"01538d95eec834be","type":"function","z":"4ef634328f92511d","name":"Update Setpoint Temperature","func":"var settemp = msg.payload.temperature.normal\nmsg.payload = {\"TargetTemperature\": settemp}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":560,"y":820,"wires":[["62af807636879be4"]]},{"id":"f4e2b570dd126f38","type":"function","z":"4ef634328f92511d","name":"Update Setpoint Temperature","func":"//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\"}\n\nmsg.payload = {\"TargetTemperature\": tempnow}\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":560,"y":880,"wires":[["a883de037fff9d6c"]]},{"id":"a883de037fff9d6c","type":"rbe","z":"4ef634328f92511d","name":"","func":"rbe","gap":"","start":"","inout":"out","septopics":false,"property":"payload","topi":"topic","x":750,"y":880,"wires":[["c268eb03f88f11c3"]]},{"id":"edf1c4b83457df93","type":"function","z":"4ef634328f92511d","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":1410,"y":800,"wires":[["fbb36ff4507cfeb0"]]},{"id":"980e8da61728d19c","type":"homekit-service","z":"4ef634328f92511d","isParent":true,"hostType":"0","bridge":"cf42cb6346cc105a","accessoryId":"","parentService":"","name":"Subnet1 Address3 CH1","serviceName":"Thermostat","topic":"","filter":false,"manufacturer":"NRCHKB","model":"1.4.3","serialNo":"Default Serial Number","firmwareRev":"1.4.3","hardwareRev":"1.4.3","softwareRev":"1.4.3","cameraConfigVideoProcessor":"ffmpeg","cameraConfigSource":"","cameraConfigStillImageSource":"","cameraConfigMaxStreams":2,"cameraConfigMaxWidth":1280,"cameraConfigMaxHeight":720,"cameraConfigMaxFPS":10,"cameraConfigMaxBitrate":300,"cameraConfigVideoCodec":"libx264","cameraConfigAudioCodec":"libfdk_aac","cameraConfigAudio":false,"cameraConfigPacketSize":1316,"cameraConfigVerticalFlip":false,"cameraConfigHorizontalFlip":false,"cameraConfigMapVideo":"0:0","cameraConfigMapAudio":"0:1","cameraConfigVideoFilter":"scale=1280:720","cameraConfigAdditionalCommandLine":"-tune zerolatency","cameraConfigDebug":false,"cameraConfigSnapshotOutput":"disabled","cameraConfigInterfaceName":"","characteristicProperties":"{\"TargetHeatingCoolingState\":{\"validValues\":[0,1]},\"CurrentHeatingCoolingState\":{\"validValues\":[0,1]},\"TargetTemperature\":{\"Minimum Value\":11,\"Maximum Value\":32,\"Minimum Step\":1}}","waitForSetupMsg":false,"outputs":2,"x":950,"y":1080,"wires":[["1705fe2048b6fb1b"],[]]},{"id":"029dbe4f1010b4c6","type":"switch","z":"4ef634328f92511d","name":"Mode","property":"payload.TargetHeatingCoolingState","propertyType":"msg","rules":[{"t":"nnull"}],"checkall":"true","repair":false,"outputs":1,"x":1270,"y":1060,"wires":[["abf834d94c659dab"]]},{"id":"c81abd53631448e0","type":"switch","z":"4ef634328f92511d","name":"Temp","property":"payload.TargetTemperature","propertyType":"msg","rules":[{"t":"nnull"}],"checkall":"true","repair":false,"outputs":1,"x":1270,"y":1100,"wires":[["29b2849db145b6ca"]]},{"id":"132410ca6ec3a556","type":"switch","z":"4ef634328f92511d","name":"ON OFF","property":"payload.work.status","propertyType":"msg","rules":[{"t":"true"},{"t":"false"}],"checkall":"true","repair":false,"outputs":2,"x":420,"y":980,"wires":[["9bb1e2bed344ef7c"],["c64e343b01341329"]]},{"id":"7037212fd03b8bec","type":"switch","z":"4ef634328f92511d","name":"Heat / Cool","property":"payload.work.type","propertyType":"msg","rules":[{"t":"eq","v":"0","vt":"num"},{"t":"eq","v":"1","vt":"num"}],"checkall":"true","repair":false,"outputs":2,"x":290,"y":1040,"wires":[["132410ca6ec3a556","497d458698d49b5a","8b260894a9086eef"],[]]},{"id":"dc86934b17616e6a","type":"comment","z":"4ef634328f92511d","name":"CH 2","info":"","x":270,"y":940,"wires":[]},{"id":"9bb1e2bed344ef7c","type":"change","z":"4ef634328f92511d","name":"Feedback to ON","rules":[{"t":"set","p":"payload","pt":"msg","to":"{\"TargetHeatingCoolingState\":1}","tot":"json"}],"action":"","property":"","from":"","to":"","reg":false,"x":580,"y":960,"wires":[["116feee5a4ace1bd"]]},{"id":"c64e343b01341329","type":"change","z":"4ef634328f92511d","name":"Feedback to OFF","rules":[{"t":"set","p":"payload","pt":"msg","to":"{\"TargetHeatingCoolingState\":0}","tot":"json"}],"action":"","property":"","from":"","to":"","reg":false,"x":590,"y":1000,"wires":[["0165bb6f24660509"]]},{"id":"1705fe2048b6fb1b","type":"function","z":"4ef634328f92511d","name":"Flow get","func":"//Get Old status from flow variable for complete message\nmsg.oldhdlstate =flow.get(\"hdl/hm/\" + \"1.3\" + \"/\" + 2 + \"/hdlstate\");\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1140,"y":1080,"wires":[["029dbe4f1010b4c6","c81abd53631448e0"]]},{"id":"abf834d94c659dab","type":"function","z":"4ef634328f92511d","name":"New Mode","func":"// Change from Off or heat to true/false\nif (msg.payload == 0) {msg.oldhdlstate.work.status = false}\nif (msg.payload == 1) {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":1410,"y":1060,"wires":[["fbb36ff4507cfeb0"]]},{"id":"116feee5a4ace1bd","type":"rbe","z":"4ef634328f92511d","name":"","func":"rbe","gap":"","start":"","inout":"out","septopics":false,"property":"payload","topi":"topic","x":750,"y":960,"wires":[["980e8da61728d19c"]]},{"id":"0165bb6f24660509","type":"rbe","z":"4ef634328f92511d","name":"","func":"rbe","gap":"","start":"","inout":"out","septopics":false,"property":"payload","topi":"topic","x":750,"y":1000,"wires":[["980e8da61728d19c"]]},{"id":"664cbdd402af508f","type":"rbe","z":"4ef634328f92511d","name":"","func":"rbe","gap":"","start":"","inout":"out","septopics":false,"property":"payload","topi":"topic","x":750,"y":1060,"wires":[["980e8da61728d19c"]]},{"id":"497d458698d49b5a","type":"function","z":"4ef634328f92511d","name":"Update Current Temperature","func":"var currenttemp = msg.payload.temperature.current\nmsg.payload = {\"CurrentTemperature\": currenttemp}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":560,"y":1060,"wires":[["664cbdd402af508f"]]},{"id":"881ebea675c16e22","type":"rbe","z":"4ef634328f92511d","name":"","func":"rbe","gap":"","start":"","inout":"out","septopics":false,"property":"payload","topi":"topic","x":750,"y":1120,"wires":[["980e8da61728d19c"]]},{"id":"8b260894a9086eef","type":"function","z":"4ef634328f92511d","name":"Update Setpoint Temperature","func":"var settemp = msg.payload.temperature.normal\nmsg.payload = {\"TargetTemperature\": settemp}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":560,"y":1120,"wires":[["881ebea675c16e22"]]},{"id":"3ddef043713eca8c","type":"function","z":"4ef634328f92511d","name":"Update Setpoint Temperature","func":"//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\"}\n\nmsg.payload = {\"TargetTemperature\": tempnow}\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":560,"y":1180,"wires":[["8c152cd0e13797c9"]]},{"id":"8c152cd0e13797c9","type":"rbe","z":"4ef634328f92511d","name":"","func":"rbe","gap":"","start":"","inout":"out","septopics":false,"property":"payload","topi":"topic","x":750,"y":1180,"wires":[["980e8da61728d19c"]]},{"id":"29b2849db145b6ca","type":"function","z":"4ef634328f92511d","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":1410,"y":1100,"wires":[["fbb36ff4507cfeb0"]]},{"id":"cf42cb6346cc105a","type":"homekit-bridge","bridgeName":"Nodered Virtual Bridge","pinCode":"283-81-078","port":"","advertiser":"bonjour-hap","allowInsecureRequest":false,"manufacturer":"NRCHKB","model":"1.4.3","serialNo":"Default Serial Number","firmwareRev":"1.4.3","hardwareRev":"1.4.3","softwareRev":"1.4.3","customMdnsConfig":false,"mdnsMulticast":true,"mdnsInterface":"","mdnsPort":"","mdnsIp":"","mdnsTtl":"","mdnsLoopback":true,"mdnsReuseAddr":true,"allowMessagePassthrough":true}]

Thank you very much, I will test, I will write the result

Have updated my first post to include latest NodeRed Flow. The new version supports the new sensors mentioned by @AKRANO above.

Also supported is the Heating module MFH06. For this to work correctly on the heating module you need to change the file commands.js due to an indexing fault new file can be found here.

Steps to install the new file:

  1. First you need to find your commands.js file. (For me it is in \IP.adress\config\node-red\node_modules\smart-bus-mrgadget\lib)
  2. Replace the file with the new file
  3. In HA go to Configuration → Add-ons, backups & Supervisor → Node-RED and press RESTART
  4. When nodered is restarted it should be decoding the heatmodule messages correct.

Special thanks to @Tarvo for helping making the new commands.js file.

@Lexsus2020 You will also have to change the file for the flow to work.

2 Likes

Great job to all involved in bringing HDL BusPro integration to Home Assistant👍

Have anyone tried this method for controlling DALI lighting through the HDL gateway (HDL-MC64-DALI.431)?

Maybe there is a solution for the 2ch curtain controllers as well? (HDL-MW02.431)

Thanks :smiley:

Welcome to the forum @Cregeland.

I dont have a DALI module but should already work as described in the first post under lights as the hdl messages are the same for dimmers, DMX and DALI. Did you try this?

Not implemented atm. as i use normal relay module for my blinds but should not be to hard to implement as the codes are already supported in nodered.

Can put it together for you if you send me nodered debug screenshots of the codes: 58336, 58337, 58338 and 58339. Would also be interesting to get 58340 but not required. (If you do not know how to get the screenshots send me the subnet and device id for the curtain controller and i can make a flow for you)

Thank you @Linax!

I´ll try controlling DALI once I get my DALI gateway up and running.

I´m quite new to NodeRed so I would really appreciate the flow if it´s not too much of an inconvenience. Subnet 1 device 5.

Regarding control of the AC and Floorheating Module. I get an error saying some of the options are deprecated. See attached screenshot. I have replaced the lines in commands.js with the new version as mentioned in your post on March 10. Still I get the error - and I am not able to read the status or command the AC/Floorheating module. Any idea what could be causing this?

Onge again thank you for your help, time and effort :smiley:

No problem. Import this flow and add your HDL gateway to the HDL in and out node. You should get the messages to and from the curtain controler in the debug window when it is triggered from other items like a DLP or even the buspro programing software.

[{"id":"3a3d48083fb04932","type":"tab","label":"Cregeland curtain debug","disabled":false,"info":"","env":[]},{"id":"c885a1ed834c58fe","type":"hdl-raw-in","z":"3a3d48083fb04932","controller":"","name":"","x":90,"y":160,"wires":[["b00ce7a280aae8b7","ded39737b0165cc1"]]},{"id":"b00ce7a280aae8b7","type":"switch","z":"3a3d48083fb04932","name":"sender","property":"sender","propertyType":"msg","rules":[{"t":"eq","v":"1.5","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":350,"y":260,"wires":[["8a7a1b9ec676db0b"]]},{"id":"77175d9bb6c8da23","type":"switch","z":"3a3d48083fb04932","name":"code","property":"code","propertyType":"msg","rules":[{"t":"eq","v":"58336","vt":"str"},{"t":"eq","v":"58338","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":470,"y":100,"wires":[["ac2b8e08472a1fe3"],["e3ec9cf255dc670d"]]},{"id":"ac2b8e08472a1fe3","type":"debug","z":"3a3d48083fb04932","name":"58336 Curtain Switch Control","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":680,"y":80,"wires":[]},{"id":"65074da8a605c63d","type":"debug","z":"3a3d48083fb04932","name":"58337 Response Curtain Switch Control","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":720,"y":220,"wires":[]},{"id":"8a7a1b9ec676db0b","type":"switch","z":"3a3d48083fb04932","name":"code","property":"code","propertyType":"msg","rules":[{"t":"eq","v":"58337","vt":"str"},{"t":"eq","v":"58339","vt":"str"},{"t":"eq","v":"58340","vt":"str"}],"checkall":"true","repair":false,"outputs":3,"x":470,"y":260,"wires":[["65074da8a605c63d"],["29213d5322990792"],["7b5d4d97185b40e8"]]},{"id":"ded39737b0165cc1","type":"switch","z":"3a3d48083fb04932","name":"target","property":"target","propertyType":"msg","rules":[{"t":"eq","v":"1.5","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":350,"y":100,"wires":[["77175d9bb6c8da23"]]},{"id":"e9c6fc35735d03bf","type":"comment","z":"3a3d48083fb04932","name":"Command to curtain module","info":"","x":380,"y":60,"wires":[]},{"id":"9dcb0699ae35bf80","type":"comment","z":"3a3d48083fb04932","name":"Answers from Curtain module","info":"","x":380,"y":220,"wires":[]},{"id":"e3ec9cf255dc670d","type":"debug","z":"3a3d48083fb04932","name":"58338 Read Status of Curtain Switch","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":710,"y":120,"wires":[]},{"id":"29213d5322990792","type":"debug","z":"3a3d48083fb04932","name":" 58339 Response Read Status of Curtain Switch","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":740,"y":260,"wires":[]},{"id":"7b5d4d97185b40e8","type":"debug","z":"3a3d48083fb04932","name":"58340 Broadcast Status of Status of Curtain Switches","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":760,"y":300,"wires":[]},{"id":"3765e77989f3ca13","type":"comment","z":"3a3d48083fb04932","name":"Test commands","info":"","x":100,"y":400,"wires":[]},{"id":"6461461c9b88d084","type":"inject","z":"3a3d48083fb04932","name":"Read status curtain 1","props":[{"p":"code","v":"58338","vt":"str"},{"p":"target","v":"1.5","vt":"str"},{"p":"curtain","v":"1","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":180,"y":460,"wires":[["7baef38eb9b12065"]]},{"id":"7baef38eb9b12065","type":"hdl-raw-out","z":"3a3d48083fb04932","controller":"","name":"","x":470,"y":660,"wires":[]},{"id":"a8a0ea807540fff7","type":"inject","z":"3a3d48083fb04932","name":"Read status curtain 2","props":[{"p":"code","v":"58338","vt":"str"},{"p":"target","v":"1.5","vt":"str"},{"p":"payload.curtain","v":"2","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":180,"y":720,"wires":[["7baef38eb9b12065"]]},{"id":"d0db9cf3c0af3c1d","type":"inject","z":"3a3d48083fb04932","name":"Close curtain 1","props":[{"p":"code","v":"58338","vt":"str"},{"p":"target","v":"1.5","vt":"str"},{"p":"curtain","v":"1","vt":"str"},{"p":"status","v":"2","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":160,"y":520,"wires":[["7baef38eb9b12065"]]},{"id":"3085b69f73a2e0f6","type":"inject","z":"3a3d48083fb04932","name":"Open curtain 1","props":[{"p":"code","v":"58338","vt":"str"},{"p":"target","v":"1.5","vt":"str"},{"p":"curtain","v":"1","vt":"str"},{"p":"status","v":"1","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":160,"y":580,"wires":[["7baef38eb9b12065"]]},{"id":"5483fd27d8442050","type":"inject","z":"3a3d48083fb04932","name":"Open curtain 1","props":[{"p":"code","v":"58338","vt":"str"},{"p":"target","v":"1.5","vt":"str"},{"p":"curtain","v":"1","vt":"str"},{"p":"status","v":"0","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":160,"y":640,"wires":[["7baef38eb9b12065"]]},{"id":"de1ad50c1a599ddb","type":"inject","z":"3a3d48083fb04932","name":"Close curtain 2","props":[{"p":"code","v":"58338","vt":"str"},{"p":"target","v":"1.5","vt":"str"},{"p":"payload.curtain","v":"2","vt":"str"},{"p":"payload.status","v":"2","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":160,"y":780,"wires":[["7baef38eb9b12065"]]},{"id":"7a99b3ba002e342a","type":"inject","z":"3a3d48083fb04932","name":"Open curtain 2","props":[{"p":"code","v":"58338","vt":"str"},{"p":"target","v":"1.5","vt":"str"},{"p":"payload.curtain","v":"2","vt":"str"},{"p":"payload.status","v":"1","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":160,"y":840,"wires":[["7baef38eb9b12065"]]},{"id":"be412e235c4ffe3c","type":"inject","z":"3a3d48083fb04932","name":"Open curtain 2","props":[{"p":"code","v":"58338","vt":"str"},{"p":"target","v":"1.5","vt":"str"},{"p":"payload.curtain","v":"2","vt":"str"},{"p":"payload.status","v":"0","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":160,"y":900,"wires":[["7baef38eb9b12065"]]},{"id":"8c657ab601401d4d","type":"comment","z":"3a3d48083fb04932","name":"Debug","info":"","x":70,"y":20,"wires":[]}]

Copy or take screenshots of the results and i will implement it.

Also if you get the code 58340 what is the time interval on that message?

Does any of the test commands work either for curtain 1 or 2?

I was running on 2021.12.5 version of HA with everything working. Have updated to latest version now and get the same error as you.

Apears there have been some breaking changes in recent updates, hate when this happens but must be for a good reason. Atleast the old “hold” commands never made any sense to me.

This will recuire a change in the HA config file. Appears to be working with the following changes:

“send_if_off: true” should be removed, same with “send_if_off: false” on AC.
“hold_modes” needs to be changed with “preset_modes”
“hold” needs to be changed with “preset_mode”.

If you have a lot of zones in the config file already i recomend the “ctrl + h” Find and replace tool in the editor

To clarify new example config should be like this:

# Floorheat Thermostat
climate:
  - platform: mqtt
    name: Floorheat
    modes:
      - "off"
      - "heat"
    mode_state_topic: "hdl/fh/1.106/01"
    mode_state_template: "{{value_json.status}}"
    mode_command_topic: "hdl/fh/1.106/mode/set"
    #current_temperature_topic: "hdl/fh/1.106/01"
    #current_temperature_template: "{{value_json.temperature.current}}"
    current_temperature_topic: "hdl/temp/1.106/1"
    temperature_state_topic: "hdl/fh/1.106/01"
    temperature_state_template: "{{value_json.temperature.now}}"
    temperature_command_topic: "hdl/fh/1.106/temperature/set"
    preset_modes:
      - "Normal"
      - "Day"
      - "Night"
      - "Away"
      - "Timer"
    preset_mode_state_topic: "hdl/fh/1.106/01"
    preset_mode_value_template: "{{value_json.textmode}}"
    preset_mode_command_topic: "hdl/fh/1.106/textmode/set"
    min_temp: 5
    max_temp: 35
    precision: 0.1

Let me know if this fixes the issues with the floorheat and AC and i will update my first post.

Thanks again @Linax :smiley:

When updating the configuration.yaml file according to your new code there seem to be some issues with a couple of lines. Here´s a screenshot:

I got errors in the editor also, this is i expect due to the code changes are new and the editor has not yet been updated to reflect the new changes.

I can se on your screenshot that the “preset_mode_modes:” should be “preset_modes:”, this is my error and i fixed it on the post above now.

If you save and go to “server controls” and press “Check configuration” you should get valid config.

If it is valid press the “Manually Configured MQTT Entities” button on the same page and it should be OK.

PS: The “#current_temperature_topic:” and “#current_temperature_template:” is not needed to edit as it is ignored due to the “#”

Now you are pointing to a (temp)temperature message, i am not 100% sure this works on the FH module. I have it working like that on DLP`s and SB-MTS04.20 there i get temp updates every 60s.

If you want to use the temperature from the FH module multi broadcast message instead you can remove the 2x “#” and put one on the active topic.

Thank you once again for quick reply.

Unfortunately I get an error on the config. Looks like the error is related to «preset_mode_state_template». That variable does not seem to be listed on the MQTT climate page (MQTT HVAC - Home Assistant) - but maybe I´m looking at the wrong list.

Here´s a screenshot of the debug window. The 58340 shows up 10 seconds after pressing the forward or back button for curtain 1. This is probably a result of the duration for open/close set in HDL BusPro Setup Tool (screenshot below). To verify I set the duration for curtain 2 to 15 sec. Code 58338 and 58339 was not observed. I don´t think the 2ch curtain module reports curtain position - maybe only available on the HDL-MWM65B.20 where you can command the curtains to a predermined position (0-100%).

Unfortunately none of test commands worked.

Curtain/channel 1:

Curtain/channel 2:

BusPro Setup Tool:

Sorry forgot that it was also changed. “preset_mode_state_template:” should be “preset_mode_value_template”. Updated example again, hopefully for the last time now.

You found the correct list :smiley:

Wish i had all the device myself as it would be quicker to implement.

Updated the flow with complete debug messages (old was only payload) and new commands with curtains and status formated as number and not string. Can you do new test with the updated flow and let me know witch commands work.

[{"id":"3a3d48083fb04932","type":"tab","label":"Cregeland curtain debug","disabled":false,"info":"","env":[]},{"id":"c885a1ed834c58fe","type":"hdl-raw-in","z":"3a3d48083fb04932","controller":"","name":"","x":90,"y":160,"wires":[["b00ce7a280aae8b7","ded39737b0165cc1"]]},{"id":"b00ce7a280aae8b7","type":"switch","z":"3a3d48083fb04932","name":"sender","property":"sender","propertyType":"msg","rules":[{"t":"eq","v":"1.5","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":350,"y":260,"wires":[["8a7a1b9ec676db0b"]]},{"id":"77175d9bb6c8da23","type":"switch","z":"3a3d48083fb04932","name":"code","property":"code","propertyType":"msg","rules":[{"t":"eq","v":"58336","vt":"str"},{"t":"eq","v":"58338","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":470,"y":100,"wires":[["ac2b8e08472a1fe3"],["e3ec9cf255dc670d"]]},{"id":"ac2b8e08472a1fe3","type":"debug","z":"3a3d48083fb04932","name":"58336 Curtain Switch Control","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":680,"y":80,"wires":[]},{"id":"65074da8a605c63d","type":"debug","z":"3a3d48083fb04932","name":"58337 Response Curtain Switch Control","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":720,"y":220,"wires":[]},{"id":"8a7a1b9ec676db0b","type":"switch","z":"3a3d48083fb04932","name":"code","property":"code","propertyType":"msg","rules":[{"t":"eq","v":"58337","vt":"str"},{"t":"eq","v":"58339","vt":"str"},{"t":"eq","v":"58340","vt":"str"}],"checkall":"true","repair":false,"outputs":3,"x":470,"y":260,"wires":[["65074da8a605c63d"],["29213d5322990792"],["7b5d4d97185b40e8"]]},{"id":"ded39737b0165cc1","type":"switch","z":"3a3d48083fb04932","name":"target","property":"target","propertyType":"msg","rules":[{"t":"eq","v":"1.5","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":350,"y":100,"wires":[["77175d9bb6c8da23"]]},{"id":"e9c6fc35735d03bf","type":"comment","z":"3a3d48083fb04932","name":"Command to curtain module","info":"","x":380,"y":60,"wires":[]},{"id":"9dcb0699ae35bf80","type":"comment","z":"3a3d48083fb04932","name":"Answers from Curtain module","info":"","x":380,"y":220,"wires":[]},{"id":"e3ec9cf255dc670d","type":"debug","z":"3a3d48083fb04932","name":"58338 Read Status of Curtain Switch","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":710,"y":120,"wires":[]},{"id":"29213d5322990792","type":"debug","z":"3a3d48083fb04932","name":" 58339 Response Read Status of Curtain Switch","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":740,"y":260,"wires":[]},{"id":"7b5d4d97185b40e8","type":"debug","z":"3a3d48083fb04932","name":"58340 Broadcast Status of Status of Curtain Switches","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":760,"y":300,"wires":[]},{"id":"3765e77989f3ca13","type":"comment","z":"3a3d48083fb04932","name":"Test commands","info":"","x":100,"y":400,"wires":[]},{"id":"6461461c9b88d084","type":"inject","z":"3a3d48083fb04932","name":"Read status curtain 1","props":[{"p":"code","v":"58338","vt":"str"},{"p":"target","v":"1.5","vt":"str"},{"p":"payload.curtain","v":"1","vt":"num"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":180,"y":460,"wires":[["7baef38eb9b12065"]]},{"id":"7baef38eb9b12065","type":"hdl-raw-out","z":"3a3d48083fb04932","controller":"","name":"","x":470,"y":660,"wires":[]},{"id":"a8a0ea807540fff7","type":"inject","z":"3a3d48083fb04932","name":"Read status curtain 2","props":[{"p":"code","v":"58338","vt":"str"},{"p":"target","v":"1.5","vt":"str"},{"p":"curtain","v":"2","vt":"num"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":180,"y":720,"wires":[["7baef38eb9b12065"]]},{"id":"d0db9cf3c0af3c1d","type":"inject","z":"3a3d48083fb04932","name":"Close curtain 1","props":[{"p":"code","v":"58338","vt":"str"},{"p":"target","v":"1.5","vt":"str"},{"p":"payload.curtain","v":"1","vt":"num"},{"p":"payload.status","v":"2","vt":"num"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":160,"y":520,"wires":[["7baef38eb9b12065"]]},{"id":"3085b69f73a2e0f6","type":"inject","z":"3a3d48083fb04932","name":"Open curtain 1","props":[{"p":"code","v":"58338","vt":"str"},{"p":"target","v":"1.5","vt":"str"},{"p":"payload.curtain","v":"1","vt":"num"},{"p":"payload.status","v":"1","vt":"num"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":160,"y":580,"wires":[["7baef38eb9b12065"]]},{"id":"5483fd27d8442050","type":"inject","z":"3a3d48083fb04932","name":"Open curtain 1","props":[{"p":"code","v":"58338","vt":"str"},{"p":"target","v":"1.5","vt":"str"},{"p":"payload.curtain","v":"1","vt":"num"},{"p":"payload.status","v":"0","vt":"num"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":160,"y":640,"wires":[["7baef38eb9b12065"]]},{"id":"de1ad50c1a599ddb","type":"inject","z":"3a3d48083fb04932","name":"Close curtain 2","props":[{"p":"code","v":"58338","vt":"num"},{"p":"target","v":"1.5","vt":"str"},{"p":"payload.curtain","v":"2","vt":"num"},{"p":"payload.status","v":"2","vt":"num"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":160,"y":780,"wires":[["7baef38eb9b12065"]]},{"id":"7a99b3ba002e342a","type":"inject","z":"3a3d48083fb04932","name":"Open curtain 2","props":[{"p":"code","v":"58338","vt":"str"},{"p":"target","v":"1.5","vt":"str"},{"p":"payload.curtain","v":"2","vt":"num"},{"p":"payload.status","v":"1","vt":"num"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":160,"y":840,"wires":[["7baef38eb9b12065"]]},{"id":"be412e235c4ffe3c","type":"inject","z":"3a3d48083fb04932","name":"Open curtain 2","props":[{"p":"code","v":"58338","vt":"str"},{"p":"target","v":"1.5","vt":"str"},{"p":"payload.curtain","v":"2","vt":"num"},{"p":"payload.status","v":"0","vt":"num"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":160,"y":900,"wires":[["7baef38eb9b12065"]]},{"id":"8c657ab601401d4d","type":"comment","z":"3a3d48083fb04932","name":"Debug","info":"","x":70,"y":20,"wires":[]}]

That could be. This should make it easyer to interface against HA.

If you expand the 58340 message array i expect the first one to show initial status and the one 10s behind should show new status. either in 1(Open) or 2(Closed) or in %

Do you mind doing it again and also press the arrow to show the complete messages. Only need 1 of each message and not one per channel. If either of the read status test commands work i do not need the code 58338
arrow

Thank you for your continued effort😃

Here´s the debug for channel 1 (forward and back). None of the test commands seem to work in the new flow.




Unfortunately the Floorheating card is still blank. I have updated with the new commands.js as per your post earlier. I was able to validate the config without issues after updating to preset_mode_value_template - but for some reason the Floorheating card is unresponsive/blank:

Thanks, got what i need now,(Think there is a smal bug in the broadcast decoding but will get it working as is) will try to get it working in a few days when i have some free time. (Hopfully working on first try now :crossed_fingers:)

Have modified the commands to match your debug commands now that i have the complete debugs. On this new flow the test commands should work. Can you confirm they are ok and report witch of the 2x read status commands work? (And also send a screenshot of responce code 58339)

Disable or delete the 2x old flows and import this new one:

[{"id":"3a3d48083fb04932","type":"tab","label":"Cregeland curtain debug","disabled":false,"info":"","env":[]},{"id":"c885a1ed834c58fe","type":"hdl-raw-in","z":"3a3d48083fb04932","controller":"","name":"","x":90,"y":160,"wires":[["b00ce7a280aae8b7","ded39737b0165cc1"]]},{"id":"b00ce7a280aae8b7","type":"switch","z":"3a3d48083fb04932","name":"sender","property":"sender","propertyType":"msg","rules":[{"t":"eq","v":"1.5","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":350,"y":260,"wires":[["8a7a1b9ec676db0b"]]},{"id":"77175d9bb6c8da23","type":"switch","z":"3a3d48083fb04932","name":"code","property":"code","propertyType":"msg","rules":[{"t":"eq","v":"58336","vt":"str"},{"t":"eq","v":"58338","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":470,"y":100,"wires":[["ac2b8e08472a1fe3"],["e3ec9cf255dc670d"]]},{"id":"ac2b8e08472a1fe3","type":"debug","z":"3a3d48083fb04932","name":"58336 Curtain Switch Control","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":680,"y":80,"wires":[]},{"id":"65074da8a605c63d","type":"debug","z":"3a3d48083fb04932","name":"58337 Response Curtain Switch Control","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":720,"y":220,"wires":[]},{"id":"8a7a1b9ec676db0b","type":"switch","z":"3a3d48083fb04932","name":"code","property":"code","propertyType":"msg","rules":[{"t":"eq","v":"58337","vt":"str"},{"t":"eq","v":"58339","vt":"str"},{"t":"eq","v":"58340","vt":"str"}],"checkall":"true","repair":false,"outputs":3,"x":470,"y":260,"wires":[["65074da8a605c63d"],["29213d5322990792"],["7b5d4d97185b40e8"]]},{"id":"ded39737b0165cc1","type":"switch","z":"3a3d48083fb04932","name":"target","property":"target","propertyType":"msg","rules":[{"t":"eq","v":"1.5","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":350,"y":100,"wires":[["77175d9bb6c8da23"]]},{"id":"e9c6fc35735d03bf","type":"comment","z":"3a3d48083fb04932","name":"Command to curtain module","info":"","x":380,"y":60,"wires":[]},{"id":"9dcb0699ae35bf80","type":"comment","z":"3a3d48083fb04932","name":"Answers from Curtain module","info":"","x":380,"y":220,"wires":[]},{"id":"e3ec9cf255dc670d","type":"debug","z":"3a3d48083fb04932","name":"58338 Read Status of Curtain Switch","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":710,"y":120,"wires":[]},{"id":"29213d5322990792","type":"debug","z":"3a3d48083fb04932","name":" 58339 Response Read Status of Curtain Switch","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":740,"y":260,"wires":[]},{"id":"7b5d4d97185b40e8","type":"debug","z":"3a3d48083fb04932","name":"58340 Broadcast Status of Status of Curtain Switches","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":760,"y":300,"wires":[]},{"id":"3765e77989f3ca13","type":"comment","z":"3a3d48083fb04932","name":"Test commands","info":"","x":100,"y":400,"wires":[]},{"id":"6461461c9b88d084","type":"inject","z":"3a3d48083fb04932","name":"Read status curtain 1","props":[{"p":"code","v":"58338","vt":"num"},{"p":"target","v":"1.5","vt":"str"},{"p":"payload.curtain","v":"1","vt":"num"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":180,"y":460,"wires":[["7baef38eb9b12065","1804f4a612932c84"]]},{"id":"7baef38eb9b12065","type":"hdl-raw-out","z":"3a3d48083fb04932","controller":"","name":"","x":610,"y":660,"wires":[]},{"id":"a8a0ea807540fff7","type":"inject","z":"3a3d48083fb04932","name":"Read status curtain 2","props":[{"p":"code","v":"58338","vt":"num"},{"p":"target","v":"1.5","vt":"str"},{"p":"payload.curtain","v":"2","vt":"num"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":180,"y":780,"wires":[["7baef38eb9b12065","1804f4a612932c84"]]},{"id":"d0db9cf3c0af3c1d","type":"inject","z":"3a3d48083fb04932","name":"Close curtain 1","props":[{"p":"code","v":"58338","vt":"num"},{"p":"target","v":"1.5","vt":"str"},{"p":"payload.curtain","v":"1","vt":"num"},{"p":"payload.status","v":"2","vt":"num"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":160,"y":580,"wires":[["7baef38eb9b12065","1804f4a612932c84"]]},{"id":"3085b69f73a2e0f6","type":"inject","z":"3a3d48083fb04932","name":"Open curtain 1","props":[{"p":"code","v":"58338","vt":"num"},{"p":"target","v":"1.5","vt":"str"},{"p":"payload.curtain","v":"1","vt":"num"},{"p":"payload.status","v":"1","vt":"num"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":160,"y":640,"wires":[["7baef38eb9b12065","1804f4a612932c84"]]},{"id":"5483fd27d8442050","type":"inject","z":"3a3d48083fb04932","name":"Open curtain 1","props":[{"p":"code","v":"58338","vt":"num"},{"p":"target","v":"1.5","vt":"str"},{"p":"payload.curtain","v":"1","vt":"num"},{"p":"payload.status","v":"0","vt":"num"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":160,"y":700,"wires":[["7baef38eb9b12065","1804f4a612932c84"]]},{"id":"de1ad50c1a599ddb","type":"inject","z":"3a3d48083fb04932","name":"Close curtain 2","props":[{"p":"code","v":"58338","vt":"num"},{"p":"target","v":"1.5","vt":"str"},{"p":"payload.curtain","v":"2","vt":"num"},{"p":"payload.status","v":"2","vt":"num"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":160,"y":900,"wires":[["7baef38eb9b12065","1804f4a612932c84"]]},{"id":"7a99b3ba002e342a","type":"inject","z":"3a3d48083fb04932","name":"Open curtain 2","props":[{"p":"code","v":"58338","vt":"num"},{"p":"target","v":"1.5","vt":"str"},{"p":"payload.curtain","v":"2","vt":"num"},{"p":"payload.status","v":"1","vt":"num"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":160,"y":960,"wires":[["7baef38eb9b12065","1804f4a612932c84"]]},{"id":"be412e235c4ffe3c","type":"inject","z":"3a3d48083fb04932","name":"Open curtain 2","props":[{"p":"code","v":"58338","vt":"num"},{"p":"target","v":"1.5","vt":"str"},{"p":"payload.curtain","v":"2","vt":"num"},{"p":"payload.status","v":"0","vt":"num"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":160,"y":1020,"wires":[["7baef38eb9b12065","1804f4a612932c84"]]},{"id":"8c657ab601401d4d","type":"comment","z":"3a3d48083fb04932","name":"Debug","info":"","x":70,"y":20,"wires":[]},{"id":"1804f4a612932c84","type":"debug","z":"3a3d48083fb04932","name":"CMD to module","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":640,"y":720,"wires":[]},{"id":"d53dffebe07f93ad","type":"inject","z":"3a3d48083fb04932","name":"Read status curtain 1 v2","props":[{"p":"code","v":"58338","vt":"num"},{"p":"target","v":"1.5","vt":"str"},{"p":"curtain","v":"1","vt":"num"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":190,"y":520,"wires":[["7baef38eb9b12065","1804f4a612932c84"]]},{"id":"e834224f7b345554","type":"inject","z":"3a3d48083fb04932","name":"Read status curtain 1 v2","props":[{"p":"code","v":"58338","vt":"num"},{"p":"target","v":"1.5","vt":"str"},{"p":"curtain","v":"1","vt":"num"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":190,"y":840,"wires":[["1804f4a612932c84","7baef38eb9b12065"]]}]

Strange. Can you confirm that you have selected a unique device id in the “hdl-controller-node”? It can not be the same as the ip module. See image:

It can also be a problem with nodered not writing to MQTT server or HA not reading from MQTT server. Do you have lights or any other sensors etc. working so we know the interfacing is working. If not i would recomend downloading MQTT explorer and check what data goes to the server from the FH module.

The test commands did not work - but they do work if I change to 58336 instead of 58338. Also the read status v1 triggers an event in the debug - but not v2.

This is the result for 58339:

This is the modified flow where the test commands seem to work.


[{"id":"3a3d48083fb04932","type":"tab","label":"Cregeland curtain debug","disabled":false,"info":"","env":[]},{"id":"c885a1ed834c58fe","type":"hdl-raw-in","z":"3a3d48083fb04932","controller":"746c208aec158bed","name":"","x":90,"y":180,"wires":[["b00ce7a280aae8b7","ded39737b0165cc1"]]},{"id":"b00ce7a280aae8b7","type":"switch","z":"3a3d48083fb04932","name":"sender","property":"sender","propertyType":"msg","rules":[{"t":"eq","v":"1.5","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":350,"y":260,"wires":[["8a7a1b9ec676db0b"]]},{"id":"77175d9bb6c8da23","type":"switch","z":"3a3d48083fb04932","name":"code","property":"code","propertyType":"msg","rules":[{"t":"eq","v":"58336","vt":"str"},{"t":"eq","v":"58338","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":470,"y":100,"wires":[["ac2b8e08472a1fe3"],["e3ec9cf255dc670d"]]},{"id":"ac2b8e08472a1fe3","type":"debug","z":"3a3d48083fb04932","name":"58336 Curtain Switch Control","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":680,"y":80,"wires":[]},{"id":"65074da8a605c63d","type":"debug","z":"3a3d48083fb04932","name":"58337 Response Curtain Switch Control","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":720,"y":220,"wires":[]},{"id":"8a7a1b9ec676db0b","type":"switch","z":"3a3d48083fb04932","name":"code","property":"code","propertyType":"msg","rules":[{"t":"eq","v":"58337","vt":"str"},{"t":"eq","v":"58339","vt":"str"},{"t":"eq","v":"58340","vt":"str"}],"checkall":"true","repair":false,"outputs":3,"x":470,"y":260,"wires":[["65074da8a605c63d"],["29213d5322990792"],["7b5d4d97185b40e8"]]},{"id":"ded39737b0165cc1","type":"switch","z":"3a3d48083fb04932","name":"target","property":"target","propertyType":"msg","rules":[{"t":"eq","v":"1.5","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":350,"y":100,"wires":[["77175d9bb6c8da23"]]},{"id":"e9c6fc35735d03bf","type":"comment","z":"3a3d48083fb04932","name":"Command to curtain module","info":"","x":380,"y":60,"wires":[]},{"id":"9dcb0699ae35bf80","type":"comment","z":"3a3d48083fb04932","name":"Answers from Curtain module","info":"","x":380,"y":220,"wires":[]},{"id":"e3ec9cf255dc670d","type":"debug","z":"3a3d48083fb04932","name":"58338 Read Status of Curtain Switch","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":710,"y":120,"wires":[]},{"id":"29213d5322990792","type":"debug","z":"3a3d48083fb04932","name":" 58339 Response Read Status of Curtain Switch","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":740,"y":260,"wires":[]},{"id":"7b5d4d97185b40e8","type":"debug","z":"3a3d48083fb04932","name":"58340 Broadcast Status of Status of Curtain Switches","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":760,"y":300,"wires":[]},{"id":"3765e77989f3ca13","type":"comment","z":"3a3d48083fb04932","name":"Test commands","info":"","x":100,"y":400,"wires":[]},{"id":"6461461c9b88d084","type":"inject","z":"3a3d48083fb04932","name":"Read status curtain 1","props":[{"p":"code","v":"58338","vt":"num"},{"p":"target","v":"1.5","vt":"str"},{"p":"payload.curtain","v":"1","vt":"num"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":180,"y":460,"wires":[["7baef38eb9b12065","1804f4a612932c84"]]},{"id":"7baef38eb9b12065","type":"hdl-raw-out","z":"3a3d48083fb04932","controller":"746c208aec158bed","name":"","x":610,"y":660,"wires":[]},{"id":"a8a0ea807540fff7","type":"inject","z":"3a3d48083fb04932","name":"Read status curtain 2","props":[{"p":"code","v":"58338","vt":"num"},{"p":"target","v":"1.5","vt":"str"},{"p":"payload.curtain","v":"2","vt":"num"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":180,"y":780,"wires":[["7baef38eb9b12065","1804f4a612932c84"]]},{"id":"d0db9cf3c0af3c1d","type":"inject","z":"3a3d48083fb04932","name":"Close curtain 1","props":[{"p":"code","v":"58336","vt":"num"},{"p":"target","v":"1.5","vt":"str"},{"p":"payload.curtain","v":"1","vt":"num"},{"p":"payload.status","v":"2","vt":"num"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":160,"y":580,"wires":[["7baef38eb9b12065","1804f4a612932c84"]]},{"id":"3085b69f73a2e0f6","type":"inject","z":"3a3d48083fb04932","name":"Open curtain 1","props":[{"p":"code","v":"58336","vt":"num"},{"p":"target","v":"1.5","vt":"str"},{"p":"payload.curtain","v":"1","vt":"num"},{"p":"payload.status","v":"1","vt":"num"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":160,"y":640,"wires":[["7baef38eb9b12065","1804f4a612932c84"]]},{"id":"5483fd27d8442050","type":"inject","z":"3a3d48083fb04932","name":"Open curtain 1","props":[{"p":"code","v":"58338","vt":"num"},{"p":"target","v":"1.5","vt":"str"},{"p":"payload.curtain","v":"1","vt":"num"},{"p":"payload.status","v":"0","vt":"num"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":160,"y":700,"wires":[["7baef38eb9b12065","1804f4a612932c84"]]},{"id":"de1ad50c1a599ddb","type":"inject","z":"3a3d48083fb04932","name":"Close curtain 2","props":[{"p":"code","v":"58336","vt":"num"},{"p":"target","v":"1.5","vt":"str"},{"p":"payload.curtain","v":"2","vt":"num"},{"p":"payload.status","v":"2","vt":"num"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":160,"y":900,"wires":[["7baef38eb9b12065","1804f4a612932c84"]]},{"id":"7a99b3ba002e342a","type":"inject","z":"3a3d48083fb04932","name":"Open curtain 2","props":[{"p":"code","v":"58336","vt":"num"},{"p":"target","v":"1.5","vt":"str"},{"p":"payload.curtain","v":"2","vt":"num"},{"p":"payload.status","v":"1","vt":"num"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":160,"y":960,"wires":[["7baef38eb9b12065","1804f4a612932c84"]]},{"id":"be412e235c4ffe3c","type":"inject","z":"3a3d48083fb04932","name":"Open curtain 2","props":[{"p":"code","v":"58338","vt":"num"},{"p":"target","v":"1.5","vt":"str"},{"p":"payload.curtain","v":"2","vt":"num"},{"p":"payload.status","v":"0","vt":"num"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":160,"y":1020,"wires":[["7baef38eb9b12065","1804f4a612932c84"]]},{"id":"8c657ab601401d4d","type":"comment","z":"3a3d48083fb04932","name":"Debug","info":"","x":70,"y":20,"wires":[]},{"id":"1804f4a612932c84","type":"debug","z":"3a3d48083fb04932","name":"CMD to module","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":640,"y":720,"wires":[]},{"id":"d53dffebe07f93ad","type":"inject","z":"3a3d48083fb04932","name":"Read status curtain 1 v2","props":[{"p":"code","v":"58338","vt":"num"},{"p":"target","v":"1.5","vt":"str"},{"p":"curtain","v":"1","vt":"num"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":190,"y":520,"wires":[["7baef38eb9b12065","1804f4a612932c84"]]},{"id":"e834224f7b345554","type":"inject","z":"3a3d48083fb04932","name":"Read status curtain 1 v2","props":[{"p":"code","v":"58338","vt":"num"},{"p":"target","v":"1.5","vt":"str"},{"p":"curtain","v":"1","vt":"num"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":190,"y":840,"wires":[["1804f4a612932c84","7baef38eb9b12065"]]},{"id":"746c208aec158bed","type":"hdl-controller","host":"192.168.1.250","port":"6000","subnetid":"1","deviceid":"199","broadcast":false,"daliId":"0"}]

As for the Floorheating - I now have the HDL controller on a dedicated device ID. The lighting and relay control works - and also the flow for testing curtains - so the HDL controller communication should be ok.

Once again thank you for your help :slight_smile:

Did that fix the issue so that you now can control FH and AC?

Nice catch, to mutch copy paste from my side there.

New config for HA:
Add this line to the configuration.yaml file:

cover: !include cover.yaml

Add a new file in the config folder named cover.yaml and add something like this to it:

# Bedroom blinds
- platform: mqtt
  name: "Blind Bedroom"
  device_class: shade
  command_topic: "hdl/cc/1.5/1/set"
  state_topic: "hdl/cc/1.5/1/state"
#
# Living Room blinds
- platform: mqtt
  name: "Blind Living Room"
  device_class: shade
  command_topic: "hdl/cc/1.5/2/set"
  state_topic: "hdl/cc/1.5/2/state"

Device_class should match what ever you physically have on this page, this is for icons etc.

Example card for ch 1 closed and ch 2 open:
Blinds

Here is a new flow, try disabling your current MQTT - HDL flow and import this instead(Select import to new flow :smiley: ). Update the HDL in and out nodes and the MQTT in and out nodes to match your settings.

The feedbacks are a bit stupid in that it reports only status and not level even though according to the HDL documentation it should report level also. Therefore you will not be able to ask the module for current status on deployment or restart.

This could be issue in the firmware on the module or bug in the commands.js file. To find out and possible fix it one would have to check the byte messages on the bus and decode it from HEX +++. This is quite some work especially as i dont have a module myself, so instead i used the command answerback message and added a manual 10s timer. Now when you click close or it is closed from a sensor, switch etc. it will report status closing for 10s before changing to closed etc. This will be the same time for each blind even if they have different running time. One other option would be to change it straight to closed and ignore the closing and opening status.

Please let me know how it works for you as i have not been able to run a full test.

Fantastic work @Linax ! The relays are now triggered from the card👍 There seem to be some issue with the status reporting though.

As you can see from the screenshot one of the blinds are not reporting state «open». The relay ran for 10 seconds - so the blind is open - but seems to be stuck in «opening» state. This happens to both channels in what seems to be random order - both when opening and closing. The state in the entity card is indicating the same state as shown in MQTT explorer. The question is what is causing the state to not update. It seems to happen every time I run both the channels at the same time - but also when running them one at a time (but less frequent).


Unfortunately - No. I still have a blank card on the FH/AC. The FH is also visible in the MQTT explorer as 1.91.

Think the issue is that i used timer instead of delay, a timer will restart on every message in so if you send two messages only last will be retained. Have changed the flow to use a delay node instead, this will delay every message.

For the floorheat i think the problem is you have “hdl/fh”(fh is short for floorheat this is the DLP thermostats witch is what i have) in your HA config instead of “hdl/hm” (hm is short for heatmodule) Sorry i did not spot this earlier.

For the AC i can see that you dont have any data on the MQTT server so this could be an error from HDL to MQTT, and since you need the raw message in nodered “context data” to send a new message this will not work. There is two ways to get the initial state:

  1. Run a Read AC Status (6456) on startup. And you should get responce(6457) with current status. Try adding this command to your flow.

  2. Update the AC module from a DLP or something like this and you should get the Response Control AC Status (6459).

I do not have a AC module myself but but run a virtual AC in Node-RED(and forward the command to IR via an arduino) to be able to control my Heatpump from the DLP`s and Home Assistant, so have not done any testing on the actual module myself.

Can see that there have not been added parcer/decoder for the read and responce codes in the commands.js file. Would you be willing to try and get me the debugs of the codes 6456 and 6457? Should be able to use this flow. If there is a refresh button on the ac module in HDL buspro tool i think this should trigger the read command.

[{"id":"c8e5a62fcb5fb706","type":"hdl-raw-in","z":"641980b9a6a75af9","controller":"","name":"","x":90,"y":1040,"wires":[["2f56a10e55062696","ed1e957e136a4d4b"]]},{"id":"2f56a10e55062696","type":"switch","z":"641980b9a6a75af9","name":"code","property":"code","propertyType":"msg","rules":[{"t":"eq","v":"6456","vt":"str"},{"t":"eq","v":"6458","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":350,"y":960,"wires":[["dbf0a12520abf499"],["475dbfb3485b2009"]]},{"id":"dbf0a12520abf499","type":"debug","z":"641980b9a6a75af9","name":"6456 Read Status","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":650,"y":940,"wires":[]},{"id":"ad37da2b41b29aff","type":"debug","z":"641980b9a6a75af9","name":"6457 Read responce","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":660,"y":1080,"wires":[]},{"id":"ed1e957e136a4d4b","type":"switch","z":"641980b9a6a75af9","name":"code","property":"code","propertyType":"msg","rules":[{"t":"eq","v":"6457","vt":"str"},{"t":"eq","v":"6459","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":350,"y":1100,"wires":[["ad37da2b41b29aff"],["3a0134c59eb4da18"]]},{"id":"f776c1b50fea68bc","type":"comment","z":"641980b9a6a75af9","name":"Command to AC module","info":"","x":370,"y":920,"wires":[]},{"id":"29c18d6e22f0c391","type":"comment","z":"641980b9a6a75af9","name":"Answers from AC module","info":"","x":370,"y":1040,"wires":[]},{"id":"475dbfb3485b2009","type":"debug","z":"641980b9a6a75af9","name":"6458 Control AC","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":640,"y":980,"wires":[]},{"id":"3a0134c59eb4da18","type":"debug","z":"641980b9a6a75af9","name":"6459 Control Responce","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":670,"y":1120,"wires":[]}]