HDL Smartbus via NodeRed and MQTT

Plan was to retire the i3 server. I have a both wireless and wired bus, rigth now only two wired 8in1 sensors. I don`t have the hdl logic module, so programming in hdl will be difficult.
There is a small logic module in each sensor also, can it be used?
I can see that there is a lot of data on the bus now. Is it the i3 asking for updates?

I have three wireless dpl also.They are broadcasting temperature and now I also got the floorheating to work. Is there way to register button-press on the hdls in HA?

Ok. It is also possible to send the requests from nodered.

Yes that is the way i do it. When ever there is movement i use it to turn on us 215 on the sensor and when there have been 30sec without movement it turns it off again. This is easy to see in nodered and it can then be used for logical programing etc from nodered.

To check what data you get from the bus i find it easiest to add a debug node straight after the hdl raw in node in nodered. Change the output on the debug from msg.payload to complete msg. Then you will se all the data in readable text on the debug tab to the right.

If you only want to se the data from a single sensor add a switch node in between and filter on msg.sender.

Could be. I would recomend checking what the message target and sender is on the messages like above.

Not realy unless that button is programed to do something. You can send a message to the dlp and ask for current status from nodered and it will respond easy. Light and Termostat should update in HA when triggered from a dlp already so dont se why you would need to get single button presses?

I would like to program the button to start a playlist from spotify on my livingrooms chromecast?

Ok, i think the best way is to have the dlp turn on and of a US. This will be visible from nodered and also be transfered to the mqtt server running on HA with your current setup. How to make a rule triggering the playlist in HA i am not sure about, but expect there is plenty of people on the forum with that knowhow.

For me it would be easiest to do it all in nodered because it is what I have used the most, and i already use it for most of my automation logic.

I am very new to this, so excuse my silly questions, is all your automations done in node-red?
Then you have multiple flows, or just one flow?
What is the common way to set it up?
Can you make me a small example how to do it?

I have asked many of them myself over the years, so ask away.

I use it for all my new ones. Still have a lot in my old logic module but would make it all in nodered if i had to start over.

I have multiple flows. 1 for MQTT to HDL. 1 for all my alexa stuff. 1 for my garage door, etc.

I am sure there is no common way to set it up, but would recomend lots of comment nodes for yourself if you have to change somethings later.

Example for lights on and of at certain times in code box. Just import and you might have to change the hdl gateway to the one with your IP and then press deploy.

[{"id":"b53a6bc4.75a058","type":"tab","label":"Timer example","disabled":false,"info":""},{"id":"b166b55f.9b6b58","type":"inject","z":"b53a6bc4.75a058","name":"08:00 mon - friday","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"00 08 * * 1,2,3,4,5","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":210,"y":240,"wires":[["73944832.280e98","2690ee71.eac352","9468cfb0.1be92"]]},{"id":"2690ee71.eac352","type":"function","z":"b53a6bc4.75a058","name":"","func":"msg.target = \"200.33\"\nmsg.code = 49,\nmsg.payload =  {\n    channel: 1,\n    level: 100\n} \n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":440,"y":260,"wires":[["68e6c88f.98b978"]]},{"id":"9353090.38348f8","type":"inject","z":"b53a6bc4.75a058","name":"08:00 mon - sunday","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"00 22 * * *","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":220,"y":480,"wires":[["1b3ee5e0.4db12a","aa66495a.ef3228"]]},{"id":"73944832.280e98","type":"function","z":"b53a6bc4.75a058","name":"Sofa Spots","func":"msg.target = \"200.25\"\nmsg.code = 49,\nmsg.payload =  {\n    channel: 1,\n    level: 100\n} \n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":450,"y":200,"wires":[["82ec31f4.4c241","68e6c88f.98b978"]]},{"id":"9468cfb0.1be92","type":"debug","z":"b53a6bc4.75a058","name":"1","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":440,"y":320,"wires":[]},{"id":"82ec31f4.4c241","type":"debug","z":"b53a6bc4.75a058","name":"2","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":670,"y":200,"wires":[]},{"id":"68e6c88f.98b978","type":"hdl-raw-out","z":"b53a6bc4.75a058","controller":"6e986e87.b7a2a","name":"","x":750,"y":320,"wires":[]},{"id":"aa66495a.ef3228","type":"function","z":"b53a6bc4.75a058","name":"","func":"msg.target = \"200.33\"\nmsg.code = 49,\nmsg.payload =  {\n    channel: 1,\n    level: 0\n} \n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":440,"y":500,"wires":[["68e6c88f.98b978"]]},{"id":"1b3ee5e0.4db12a","type":"function","z":"b53a6bc4.75a058","name":"Sofa Spots","func":"msg.target = \"200.25\"\nmsg.code = 49,\nmsg.payload =  {\n    channel: 1,\n    level: 0\n} \n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":450,"y":440,"wires":[["68e6c88f.98b978"]]},{"id":"31d015cf.c403ba","type":"comment","z":"b53a6bc4.75a058","name":"Lights on","info":"","x":110,"y":120,"wires":[]},{"id":"624f2728.e8c6e8","type":"comment","z":"b53a6bc4.75a058","name":"Lights off","info":"","x":100,"y":400,"wires":[]},{"id":"8a04ffc2.1e4d","type":"hdl-raw-in","z":"b53a6bc4.75a058","controller":"6e986e87.b7a2a","name":"","x":180,"y":640,"wires":[["3669cbab.ad7ca4","6f2669ea.3a9bd8"]]},{"id":"3669cbab.ad7ca4","type":"switch","z":"b53a6bc4.75a058","name":"sender","property":"sender","propertyType":"msg","rules":[{"t":"eq","v":"200.25","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":330,"y":640,"wires":[["f5ae15fb.bbc0d8"]]},{"id":"59731b95.356064","type":"comment","z":"b53a6bc4.75a058","name":"Example on how to read message from certain device id","info":"","x":250,"y":600,"wires":[]},{"id":"6f2669ea.3a9bd8","type":"debug","z":"b53a6bc4.75a058","name":"All messages on HDL bus","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":390,"y":720,"wires":[]},{"id":"f5ae15fb.bbc0d8","type":"debug","z":"b53a6bc4.75a058","name":"this will show all messages from 200.25","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":640,"y":640,"wires":[]},{"id":"6e986e87.b7a2a","type":"hdl-controller","host":"192.168.10.250","port":"6000","subnetid":"1","deviceid":"98","broadcast":false,"daliId":"92"}]

The blue node is a inject node that will trigger every weekday at 08:00. (You can click the button on it to test it)

The green one is a debug node to check what is actually going on and is not needed for the function. To see the data from the node open the debug tab on the right. Debug nodes can be activated and deactivated with the button.

The function nodes is where you can set the address for the lights and also light level.

HDL raw out is the one that sends it to your HDL bus.

Also at the bottom is a HDL raw in where all the data from your bus is comming. The switch node filters so that only messages from 200.25 will show. Should see the answer back message here everytime the light changes.

Thank you very much for helping with the code! Now I have a lot to work with. As I understand it, I can lay all my hdl automations on one flow. My main problem with the wireless HDL - dimmers are that they doesnt always receive the command. When I dim a light i HA now, I may need to do it twice for the dimmer to receive the signal. I have an automation in i3 which turns on lights in the morning, it turns on multiple lights in a certain time. Sometimes it is not turning on all lights, so I feel I cant trust it. My question is: When a signal is sent from HA to the dimmer, is there a way to check that the signal is received or if not, repeat the signal? I believe the DLP is sending the signal multiple times until it receives the confirmation. Signal from my switches always reach the dimmer.

Does the feedback in nodered change also? The feedback in HA should only change once the answerback message is recived. This sound a bit strange as i find the wired bus to be 99,999% reliable and the commands are always recived. Have you tried to disconect the I3 server it could be that it is taking up the wireless “bandwith” with all the messages it tends to send?

The best way would probarly be to create it as a new feture request under issues on the github page for the nodered addon: https://github.com/mrgadget/node-red-contrib-hdlbus

I am not sure if it is possible to do it from HA as i am new to HA myself.

But it would be possible to do it from nodered with something like this.

[{"id":"b53a6bc4.75a058","type":"tab","label":"Timer example","disabled":false,"info":""},{"id":"b166b55f.9b6b58","type":"inject","z":"b53a6bc4.75a058","name":"08:00 mon - friday","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"00 08 * * 1,2,3,4,5","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":210,"y":240,"wires":[["73944832.280e98","2690ee71.eac352","9468cfb0.1be92"]]},{"id":"2690ee71.eac352","type":"function","z":"b53a6bc4.75a058","name":"","func":"msg.target = \"200.33\"\nmsg.code = 49,\nmsg.payload =  {\n    channel: 1,\n    level: 100\n} \n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":440,"y":260,"wires":[["68e6c88f.98b978","6e461968.a41468"]]},{"id":"9353090.38348f8","type":"inject","z":"b53a6bc4.75a058","name":"08:00 mon - sunday","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"00 22 * * *","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":220,"y":480,"wires":[["1b3ee5e0.4db12a","aa66495a.ef3228"]]},{"id":"73944832.280e98","type":"function","z":"b53a6bc4.75a058","name":"Sofa Spots","func":"msg.target = \"200.25\"\nmsg.code = 49,\nmsg.payload =  {\n    channel: 1,\n    level: 100\n} \n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":450,"y":200,"wires":[["82ec31f4.4c241","68e6c88f.98b978","6e461968.a41468"]]},{"id":"9468cfb0.1be92","type":"debug","z":"b53a6bc4.75a058","name":"1","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":440,"y":320,"wires":[]},{"id":"82ec31f4.4c241","type":"debug","z":"b53a6bc4.75a058","name":"2","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":550,"y":120,"wires":[]},{"id":"68e6c88f.98b978","type":"hdl-raw-out","z":"b53a6bc4.75a058","controller":"6e986e87.b7a2a","name":"","x":1430,"y":320,"wires":[]},{"id":"aa66495a.ef3228","type":"function","z":"b53a6bc4.75a058","name":"","func":"msg.target = \"200.33\"\nmsg.code = 49,\nmsg.payload =  {\n    channel: 1,\n    level: 0\n} \n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":440,"y":500,"wires":[["68e6c88f.98b978","6e461968.a41468"]]},{"id":"1b3ee5e0.4db12a","type":"function","z":"b53a6bc4.75a058","name":"Sofa Spots","func":"msg.target = \"200.25\"\nmsg.code = 49,\nmsg.payload =  {\n    channel: 1,\n    level: 0\n} \n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":450,"y":440,"wires":[["68e6c88f.98b978","6e461968.a41468"]]},{"id":"31d015cf.c403ba","type":"comment","z":"b53a6bc4.75a058","name":"Lights on","info":"","x":110,"y":120,"wires":[]},{"id":"624f2728.e8c6e8","type":"comment","z":"b53a6bc4.75a058","name":"Lights off","info":"","x":100,"y":400,"wires":[]},{"id":"8a04ffc2.1e4d","type":"hdl-raw-in","z":"b53a6bc4.75a058","controller":"6e986e87.b7a2a","name":"","x":180,"y":640,"wires":[["3669cbab.ad7ca4","6f2669ea.3a9bd8"]]},{"id":"3669cbab.ad7ca4","type":"switch","z":"b53a6bc4.75a058","name":"sender","property":"sender","propertyType":"msg","rules":[{"t":"eq","v":"200.25","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":330,"y":640,"wires":[["f5ae15fb.bbc0d8"]]},{"id":"59731b95.356064","type":"comment","z":"b53a6bc4.75a058","name":"Example on how to read message from certain device id","info":"","x":250,"y":600,"wires":[]},{"id":"6f2669ea.3a9bd8","type":"debug","z":"b53a6bc4.75a058","name":"All messages on HDL bus","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":390,"y":720,"wires":[]},{"id":"f5ae15fb.bbc0d8","type":"debug","z":"b53a6bc4.75a058","name":"this will show all messages from 200.25","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":640,"y":640,"wires":[]},{"id":"2c432a68.8cc4d6","type":"hdl-channel-get","z":"b53a6bc4.75a058","controller":"6e986e87.b7a2a","address":"99.99","channel":"99","name":"","x":1040,"y":120,"wires":[["5e4f5251.dc090c","40f158dd.b8dfb8"]]},{"id":"6e461968.a41468","type":"delay","z":"b53a6bc4.75a058","name":"","pauseType":"delay","timeout":"2","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":760,"y":120,"wires":[["3033b297.ef901e"]]},{"id":"5e4f5251.dc090c","type":"debug","z":"b53a6bc4.75a058","name":"4","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1190,"y":60,"wires":[]},{"id":"3033b297.ef901e","type":"function","z":"b53a6bc4.75a058","name":"check","func":"// Save target value to msg.targetlevel as \n// msg.payload.level will be changed in the \"hdl ch get node\".\nmsg.targetlevel = msg.payload.level\n\n//Change the adress so that the \"hdl ch get node\" \n//knows what adress to check\nmsg.payload.address = msg.target \n\n//Return\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":890,"y":120,"wires":[["2c432a68.8cc4d6","cd658334.c87fe"]]},{"id":"7aa6e7c0.f199f8","type":"comment","z":"b53a6bc4.75a058","name":"Check if answerback recived or resend command","info":"","x":760,"y":60,"wires":[]},{"id":"cd658334.c87fe","type":"debug","z":"b53a6bc4.75a058","name":"3","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1030,"y":60,"wires":[]},{"id":"40f158dd.b8dfb8","type":"switch","z":"b53a6bc4.75a058","name":"Done?","property":"payload.level","propertyType":"msg","rules":[{"t":"neq","v":"targetlevel","vt":"msg"}],"checkall":"false","repair":false,"outputs":1,"x":1190,"y":120,"wires":[["13e48ffe.83e78","d222e262.efbf3"]]},{"id":"13e48ffe.83e78","type":"debug","z":"b53a6bc4.75a058","name":"6 Resend","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1360,"y":60,"wires":[]},{"id":"d222e262.efbf3","type":"function","z":"b53a6bc4.75a058","name":"rebuild","func":"//Change the new level target for new attempt \n//if the values did not match\nmsg.payload.level = msg.targetlevel\n//Return\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1330,"y":120,"wires":[["615c7c29.1d3074","68e6c88f.98b978","429746dc.796418"]]},{"id":"615c7c29.1d3074","type":"debug","z":"b53a6bc4.75a058","name":"7","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1550,"y":80,"wires":[]},{"id":"ecf48117.a6818","type":"hdl-channel-get","z":"b53a6bc4.75a058","controller":"6e986e87.b7a2a","address":"99.99","channel":"99","name":"","x":1040,"y":180,"wires":[["2b54fc5b.e8a354"]]},{"id":"429746dc.796418","type":"delay","z":"b53a6bc4.75a058","name":"","pauseType":"delay","timeout":"2","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":760,"y":180,"wires":[["444a45d5.0f602c"]]},{"id":"444a45d5.0f602c","type":"function","z":"b53a6bc4.75a058","name":"check","func":"// Save target value to msg.targetlevel as \n// msg.payload.level will be changed in the \"hdl ch get node\".\nmsg.targetlevel = msg.payload.level\n\n//Change the adress so that the \"hdl ch get node\" \n//knows what adress to check\nmsg.payload.address = msg.target \n\n//Return\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":890,"y":180,"wires":[["ecf48117.a6818"]]},{"id":"2b54fc5b.e8a354","type":"switch","z":"b53a6bc4.75a058","name":"Done?","property":"payload.level","propertyType":"msg","rules":[{"t":"neq","v":"targetlevel","vt":"msg"}],"checkall":"false","repair":false,"outputs":1,"x":1190,"y":180,"wires":[["7cb47a27.d933d4"]]},{"id":"7cb47a27.d933d4","type":"function","z":"b53a6bc4.75a058","name":"rebuild","func":"//Change the new level target for new attempt \n//if the values did not match\nmsg.payload.level = msg.targetlevel\n//Return\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1330,"y":180,"wires":[["68e6c88f.98b978","615c7c29.1d3074"]]},{"id":"6e986e87.b7a2a","type":"hdl-controller","host":"192.168.10.250","port":"6000","subnetid":"1","deviceid":"98","broadcast":false,"daliId":"92"}]


This is the same timer example as above but after 2 seconds it will check if the dimmer has reported a change and if not it will resend the original command. This will be repeted one more time if it fails again.
Added a 2 sec delay here but it might need changing as i dont know how long the wireless dimmer needs to respond. You can check the time between the command and answer and change acording.

I dont know how the wireless work but i know that a wired DLP,sensor etc. will atempt to send the signal 3 times if it does not recive the answerback.

Thank you!

I have used my holiday to work with this, and as far as I can see it works without fails.
Awesome!

Thats a problem in the hdl mesh system. i have the same problem with 1 wireless dimmer. I have made diffrent scenes in HA for light. and in node-red i just run that scene then give it 3sec delay and run it again then all light normaly do what i want them to do.

I did it the easy way on my 4 button wireless touch buttons. just programet it like normal in hdl with single on off and single channel control, subnet and device id the same as the button, and use channel 2-4 on button 2-4. channel 1 is used direct in hdl to the back plate dimmer. add them to HA as switch.

Any one know how to control hdl-mfh06.432 floor heating modul?

I dont have that module so have not done any testing myself but it looks like it is intregrated in Node Red under 11.2 (nr refers to chapters in the: Operation Code of HDL Buspro v1.111.pdf) so should be possible to get it working fairly easy.

I can try to add an example if you are willing to do some testing etc.

Asume you are using it floorheating zones?

What is the adress of the module and a channel that is easy to test on?

Are you also able to control it from a DLP or something so that i can se the command and responce from the module?

Hi. im using all 6 channels to control different heating cables around the house.
Have no DLP only 4 butten touch panels.
so atm i need to use buspro to control the heating. dont control it mutch sins it almost always on time controll.
The floor heating modul have adress 1.20.
Have used debug node in nodered to read the device and found ut that it uses code 7261 so have added that to the node switch. Rest i have problem with :slight_smile:
So if you could make an example, I really appreciated it.

Codes we need to use is as following:
7260: Control heating status
7261: Responce control heating status
7262: Read Floor heating status
7263: Responce read status

I see that the HDL codes document have been removed from github so if you are interested i can email it to you if you PM me with your email.

It needs to be controlled more or less same as the normal floor heat but from the document it also have to include valve status and watering time. To make sure we do not break anything i think the best is to check what it it set to now and how the messages are now instead of trial and error.

[{"id":"fb3fa92c24701619","type":"tab","label":"Test HDL Heatmodule","disabled":false,"info":"","env":[]},{"id":"1bc71355d5989d8a","type":"function","z":"fb3fa92c24701619","name":"Read status Floorheat","func":"msg.target = \"1.175\"\nmsg.code = 7262;\nchannel = 2\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":540,"y":440,"wires":[["5811a856d856f3a6"]]},{"id":"53dac511afafebdb","type":"hdl-raw-in","z":"fb3fa92c24701619","controller":"6e986e87.b7a2a","name":"","x":110,"y":120,"wires":[["fd276ddd2cfa1206","b0f340c418a2ae3f","8fcc988cfd44ce80"]]},{"id":"fd276ddd2cfa1206","type":"switch","z":"fb3fa92c24701619","name":"target 20","property":"target","propertyType":"msg","rules":[{"t":"eq","v":"1.20","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":300,"y":120,"wires":[["02e8588757ac4e8d","8fda4e4e0b28614d"]]},{"id":"d0e466e566e7a58f","type":"debug","z":"fb3fa92c24701619","name":"Command to heatmodule","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":820,"y":120,"wires":[]},{"id":"1523b7defc5c798b","type":"debug","z":"fb3fa92c24701619","name":"CMD Responce from heatmodule","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":830,"y":240,"wires":[]},{"id":"b0f340c418a2ae3f","type":"switch","z":"fb3fa92c24701619","name":"sender 20","property":"sender","propertyType":"msg","rules":[{"t":"eq","v":"1.20","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":290,"y":240,"wires":[["33d187fd5bf4bc8f"]]},{"id":"02e8588757ac4e8d","type":"switch","z":"fb3fa92c24701619","name":"code CMD","property":"code","propertyType":"msg","rules":[{"t":"eq","v":"7260","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":480,"y":120,"wires":[["d0e466e566e7a58f"]]},{"id":"33d187fd5bf4bc8f","type":"switch","z":"fb3fa92c24701619","name":"code cmd responce ","property":"code","propertyType":"msg","rules":[{"t":"eq","v":"7261","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":480,"y":240,"wires":[["1523b7defc5c798b"]]},{"id":"9f0bdacfdbb8b06d","type":"function","z":"fb3fa92c24701619","name":"Read status Floorheat","func":"msg.target = \"1.175\"\nmsg.code = 7262;\nchannel = \"2\"\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":540,"y":520,"wires":[["5811a856d856f3a6"]]},{"id":"5811a856d856f3a6","type":"hdl-raw-out","z":"fb3fa92c24701619","controller":"6e986e87.b7a2a","name":"","x":810,"y":560,"wires":[]},{"id":"681ab199302c2efe","type":"function","z":"fb3fa92c24701619","name":"Read status Floorheat","func":"msg.target = \"1.175\"\nmsg.code = \"7262\";\nchannel = \"2\"\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":540,"y":600,"wires":[["5811a856d856f3a6"]]},{"id":"5cc89ac13ba6d9f4","type":"function","z":"fb3fa92c24701619","name":"Read status Floorheat","func":"msg.target = \"1.175\"\nmsg.code = \"7262\";\nchannel = 2\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":540,"y":680,"wires":[["5811a856d856f3a6"]]},{"id":"d934dafff7cdf8e0","type":"inject","z":"fb3fa92c24701619","name":"Test alt 1","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payloadType":"date","x":340,"y":440,"wires":[["1bc71355d5989d8a"]]},{"id":"c325b14170f1ac00","type":"inject","z":"fb3fa92c24701619","name":"Test alt 2","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payloadType":"date","x":340,"y":520,"wires":[["9f0bdacfdbb8b06d"]]},{"id":"5174806f2841907a","type":"inject","z":"fb3fa92c24701619","name":"Test alt 3","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payloadType":"date","x":340,"y":600,"wires":[["681ab199302c2efe"]]},{"id":"63e5e367f30280ed","type":"inject","z":"fb3fa92c24701619","name":"Test alt 4","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payloadType":"date","x":340,"y":680,"wires":[["5cc89ac13ba6d9f4"]]},{"id":"93c681d0e9ed7514","type":"comment","z":"fb3fa92c24701619","name":"Read status channel 2 test","info":"","x":330,"y":380,"wires":[]},{"id":"c9a589213849b5a5","type":"switch","z":"fb3fa92c24701619","name":"Code","property":"code","propertyType":"msg","rules":[{"t":"eq","v":"7263","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":470,"y":780,"wires":[["96f826f661cf24ea"]]},{"id":"96f826f661cf24ea","type":"debug","z":"fb3fa92c24701619","name":"Responce read status","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":660,"y":780,"wires":[]},{"id":"8fcc988cfd44ce80","type":"switch","z":"fb3fa92c24701619","name":"Sender","property":"sender","propertyType":"msg","rules":[{"t":"eq","v":"1.20","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":280,"y":780,"wires":[["c9a589213849b5a5"]]},{"id":"8fda4e4e0b28614d","type":"switch","z":"fb3fa92c24701619","name":"code read","property":"code","propertyType":"msg","rules":[{"t":"eq","v":"7262","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":470,"y":180,"wires":[["d548ff026e6bb5a9"]]},{"id":"d548ff026e6bb5a9","type":"debug","z":"fb3fa92c24701619","name":"Read status msg to module","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":810,"y":180,"wires":[]},{"id":"0f020396d0ae7f73","type":"comment","z":"fb3fa92c24701619","name":"HDL message debug","info":"","x":140,"y":60,"wires":[]},{"id":"6e986e87.b7a2a","type":"hdl-controller","host":"192.168.10.250","port":"6000","subnetid":"1","deviceid":"98","broadcast":false,"daliId":"92"}]

If you import this flow in nodered and change to your HDL gateway on the raw in and out node. Then take some screenshots of the debug when changing the command from buspro or a timer etc.

Also included on the bottom 4x inject nodes to try to read the current status. If you also could test those and report witch works and the responce on that command.

To clarify i would like debugs of code:7260, 7261 and 7263. This should help when formating the command and feedback programing a lot.

sendt you a pm.

Sorry for the late responce, did not recive email notification on the PM.

Have emailed the file, the command-codes there are displayed as hex so need to convert to normal desimals or click on the nr in the debug to se the hex value.

I made some rookie mistakes on the inject nodes. Try this instead. Should get the responce with this message?

[{"id":"6c5e93d6c6bd515e","type":"tab","label":"Test HDL Heatmodule","disabled":false,"info":"","env":[]},{"id":"1c0a08ffaa249edc","type":"function","z":"6c5e93d6c6bd515e","name":"Read status Floorheat","func":"msg.target = \"1.20\"\nmsg.code = 7262;\nmsg.payload = {\n    channel: 2,\n};\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":540,"y":440,"wires":[["e1c6d820f45e3ad1","ef3cfab3020c7486"]]},{"id":"f238a7a126df0f8b","type":"hdl-raw-in","z":"6c5e93d6c6bd515e","controller":"6e986e87.b7a2a","name":"","x":110,"y":120,"wires":[["51e1020ee832152c","18aec17b05ee1157","d9e253994cce3d89"]]},{"id":"51e1020ee832152c","type":"switch","z":"6c5e93d6c6bd515e","name":"target 20","property":"target","propertyType":"msg","rules":[{"t":"eq","v":"1.20","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":300,"y":120,"wires":[["8a6c10637153b438","6f8209942104b90e"]]},{"id":"f4de17de195ca081","type":"debug","z":"6c5e93d6c6bd515e","name":"Command to heatmodule","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":820,"y":120,"wires":[]},{"id":"b09bcb1c1556cfeb","type":"debug","z":"6c5e93d6c6bd515e","name":"CMD Responce from heatmodule","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":830,"y":240,"wires":[]},{"id":"18aec17b05ee1157","type":"switch","z":"6c5e93d6c6bd515e","name":"sender 20","property":"sender","propertyType":"msg","rules":[{"t":"eq","v":"1.20","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":290,"y":240,"wires":[["21071e80446962e5"]]},{"id":"8a6c10637153b438","type":"switch","z":"6c5e93d6c6bd515e","name":"code CMD","property":"code","propertyType":"msg","rules":[{"t":"eq","v":"7260","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":480,"y":120,"wires":[["f4de17de195ca081"]]},{"id":"21071e80446962e5","type":"switch","z":"6c5e93d6c6bd515e","name":"code cmd responce ","property":"code","propertyType":"msg","rules":[{"t":"eq","v":"7261","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":480,"y":240,"wires":[["b09bcb1c1556cfeb"]]},{"id":"e1c6d820f45e3ad1","type":"hdl-raw-out","z":"6c5e93d6c6bd515e","controller":"6e986e87.b7a2a","name":"","x":810,"y":500,"wires":[]},{"id":"e6af5cbbbbbe16a4","type":"inject","z":"6c5e93d6c6bd515e","name":"Test alt 1","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payloadType":"date","x":340,"y":440,"wires":[["1c0a08ffaa249edc"]]},{"id":"094898883da89d71","type":"comment","z":"6c5e93d6c6bd515e","name":"Read status channel 2 test","info":"","x":330,"y":380,"wires":[]},{"id":"b10b7f648a774985","type":"switch","z":"6c5e93d6c6bd515e","name":"Code","property":"code","propertyType":"msg","rules":[{"t":"eq","v":"7263","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":510,"y":600,"wires":[["818cd2f6f18a05c3"]]},{"id":"818cd2f6f18a05c3","type":"debug","z":"6c5e93d6c6bd515e","name":"Responce read status","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":700,"y":600,"wires":[]},{"id":"d9e253994cce3d89","type":"switch","z":"6c5e93d6c6bd515e","name":"Sender","property":"sender","propertyType":"msg","rules":[{"t":"eq","v":"1.20","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":320,"y":600,"wires":[["b10b7f648a774985"]]},{"id":"6f8209942104b90e","type":"switch","z":"6c5e93d6c6bd515e","name":"code read","property":"code","propertyType":"msg","rules":[{"t":"eq","v":"7262","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":470,"y":180,"wires":[["8216c6bf19fbaeb6"]]},{"id":"8216c6bf19fbaeb6","type":"debug","z":"6c5e93d6c6bd515e","name":"Read status msg to module","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":810,"y":180,"wires":[]},{"id":"fe982eafd8833500","type":"comment","z":"6c5e93d6c6bd515e","name":"HDL message debug","info":"","x":140,"y":60,"wires":[]},{"id":"ef3cfab3020c7486","type":"debug","z":"6c5e93d6c6bd515e","name":"Test command alt 1","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":850,"y":440,"wires":[]},{"id":"6e986e87.b7a2a","type":"hdl-controller","host":"192.168.10.250","port":"6000","subnetid":"1","deviceid":"98","broadcast":false,"daliId":"92"}]

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.

Hi thx for all the help :slight_smile:
Tryde the new flow and got this error: ReferenceError: newpower is not defined (line 8, col 22)
Think its because msg.payload.status needs to be msg.payload.work.status
This heat modul you can use on waterheating so think valve and watering is for that.
Have tryde to find out what it is. get diffrent read on 7261 and 7263. on 7261 valve is always false and on 7263 always true. On 7261 the watering time is the current temp that the heat modul is reading from sensor set in hdl, on 7263 i dont know.
PWD on 7263 is if it heating or not.

What node is the error on? If you click on the topic off the error it should show witch node it is for.

Can you also take a screenshot of the flow variables for a channel, under context data?

This could be a bug in the hdl to javascript code, would expect it to be the same.

Could be correct, i did copy paste most of the code from DLP floorheating and dont have the code infront of me now. Will try and look at it later tonight.