Opentherm Gateway - 'starting flow'

For those that were looking at the Shelly TRV thread, I have managed to get the new boiler and the OpenTherm Gateway operating together, along with controlling the Shelly TRVs

I had to make a modification to the Heating System as the Plumbers decided that I really didn't want a system with Weather Compensation or Opentherm - I would end up begging them to come and rip it out and have it put back to standard!! I think it was more to do with running two pipes from the boiler instead of one (HW and CH) and them not understanding how these systems were able to be used to control the boiler and so save money!! They used the Honeywell Smart Thermostat to control the Diverter Valve and just switch the boiler on and off.

I let them get on with it and when they finished they set the boiler temperature to 65deg - the best temperature for a heating system, but as we know, way out of condensing mode.

After making up a 'Changeover box (a 3PDT switch and a couple of Sonoffs), the Smart Thermostat is now basically disconnected, although I can see the messages it sends, and two Sonoff Basics to control the Diverter Valve with Node-RED running the Boiler system through the Gateway. I can use the switch to change back to the Honeywell and then make a modification to the settings in the boiler to bring it back to 'standard'.

There are a lot of things to continue to play with such as Boiler Temperature, Modulation, and Weather Compensation (which I used to approximate through Node-RED). This will make the time of the longer dark evenings pass quicker!! :lol

Anyway, first version of the flow which controls the Sonoffs and the parameters of the boiler and also displays information from the Opentherm Gateway. I am using the one made and sold by Nodo Shop along with an Wemos Mini D1 which solders direct into the PCB along with firmware from rvdreemen (OTGW-firmware) so that I can use MQTT. I did start with LAN connection, but it didn't give me enough flexibility. The USB connection wasn't really a practical option.

Tried posting the 'starting point' flow, but it is too big. If you want a copy, please message me and I will arrange to make it available.

Colin J

1 Like

Cut out a lot of the 'chaff' (reading MQTT values) and just posting the main control bit.

If you can see where it might be improved, please let me know.

[{"id":"bc981fa9ede7efd8","type":"mqtt out","z":"db9c45ab1920b2aa","name":"V100-W send","topic":"","qos":"0","retain":"false","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"0549f612016b7da9","x":1400,"y":280,"wires":[]},{"id":"7948976871eec50d","type":"function","z":"db9c45ab1920b2aa","name":"otgw set","func":"msg.topic = \"OTGW/set/otgw-500291FE3A1F/\" + msg.topic;\nmsg.payload = msg.payload;\ndelete msg.action;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1180,"y":660,"wires":[["6cb1f4976f19acd0","a650a549cee2b75c"]]},{"id":"6cb1f4976f19acd0","type":"debug","z":"db9c45ab1920b2aa","name":"debug 40","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1180,"y":700,"wires":[]},{"id":"13cc42ea9fe075d2","type":"comment","z":"db9c45ab1920b2aa","name":"Div valve States  *Notes","info":"Central Heating enable\nSet Temperature CS\nDiverter Valve BOTH on\n\nModulation should be automatic\n\nCentrol Heating enable\nSet Temperature CS\nDiverter Valve BOTH off\n\nOutside Temperature for Weather Compensation\n\nPS1 will fetch Status WORD\n\nPS=state\n    Print Summary โ€” The opentherm gateway normally prints every opentherm message\n    it receives, as well as the modified messages it transmits. In some applications\n    it may be more useful to only get a report of the latest values received for the\n    most interesting parameters on demand. Issuing a \"PS=1\" command will stop the\n    reports for each message and print one line with the following values:\n\n        Status (MsgID=0) โ€” Printed as two 8-bit bitfields\n        Control setpoint (MsgID=1) โ€” Printed as a floating point value\n        Remote parameter flags (MsgID=6) โ€” Printed as two 8-bit bitfields\n        Cooling control signal (MsgID=7) โ€” Printed as a floating point value\n        Control setpoint 2 (MsgID=8) โ€” Printed as a floating point value\n        Maximum relative modulation level (MsgID=14) โ€” Printed as a floating point value\n        Boiler capacity and modulation limits (MsgID=15) โ€” Printed as two bytes\n        Room setpoint (MsgID=16) โ€” Printed as a floating point value\n        Relative modulation level (MsgID=17) โ€” Printed as a floating point value\n        CH water pressure (MsgID=18) โ€” Printed as a floating point value\n        DHW flow rate (MsgID=19) โ€” Printed as floating point value\n        CH2 room setpoint (MsgID=23) โ€” Printed as a floating point value\n        Room temperature (MsgID=24) โ€” Printed as a floating point value\n        Boiler water temperature (MsgID=25) โ€” Printed as a floating point value\n        DHW temperature (MsgID=26) โ€” Printed as a floating point value\n        Outside temperature (MsgID=27) โ€” Printed as a floating point value\n        Return water temperature (MsgID=28) โ€” Printed as a floating point value\n        CH2 flow temperature (MsgID=31) โ€” Printed as a floating point value\n        Boiler exhaust temperature (MsgID=33) โ€” Printed as a signed decimal value\n        DHW setpoint boundaries (MsgID=48) โ€” Printed as two bytes\n        Max CH setpoint boundaries (MsgID=49) โ€” Printed as two bytes\n        DHW setpoint (MsgID=56) โ€” Printed as a floating point value\n        Max CH water setpoint (MsgID=57) โ€” Printed as a floating point value\n        V/H master status (MsgID=70) โ€” Printed as two 8-bit bitfields\n        V/H control setpoint (MsgID=71) โ€” Printed as a byte\n        Relative ventilation (MsgID=77) โ€” Printed as a byte\n        Burner starts (MsgID=116) โ€” Printed as a decimal value\n        CH pump starts (MsgID=117) โ€” Printed as a decimal value\n        DHW pump/valve starts (MsgID=118) โ€” Printed as a decimal value\n        DHW burner starts (MsgID=119) โ€” Printed as a decimal value\n        Burner operation hours (MsgID=120) โ€” Printed as a decimal value\n        CH pump operation hours (MsgID=121) โ€” Printed as a decimal value\n        DHW pump/valve operation hours (MsgID=122) โ€” Printed as a decimal value\n        DHW burner operation hours (MsgID=123) โ€” Printed as a decimal value \n\n    A new report can be requested by repeating the \"PS=1\" command.\n    Examples: PS=1, PS=0 ","x":140,"y":380,"wires":[]},{"id":"6d4f4277db295de3","type":"function","z":"db9c45ab1920b2aa","name":"Boiler enable","func":"msg.boilerPriority = global.get(\"boilerPriority\"); \nlet boilerHW = global.get('boilerHW');\nlet boilerCH = global.get('boilerCH')\n\nif (global.get('boilerHW') === 1 || global.get('boilerCH') === 1) {\n    msg.boilerEnable = 1;\n    return msg\n}\nelse if (global.get('boilerHW') === 0 && global.get('boilerCH') === 0) {\n    msg.boilerEnable = 0;\n    return msg;\n}\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":630,"y":400,"wires":[["c87f82178d782242"]]},{"id":"5fec53b602647ea6","type":"function","z":"db9c45ab1920b2aa","name":"Boiler temp","func":"msg.topic = \"ctrlsetpt\"\nmsg.payload = msg.boilerTemp;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":790,"y":580,"wires":[["353b0beab954830b","48035ed1e8f3a9d0"]]},{"id":"767fe991e487fa71","type":"function","z":"db9c45ab1920b2aa","name":"CH enable","func":"msg.topic = \"chenable\";\nmsg.payload = msg.boilerEnable;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":710,"y":620,"wires":[["353b0beab954830b","37390b0d07666bdf"]]},{"id":"9e48c404cc25999f","type":"function","z":"db9c45ab1920b2aa","name":"Desired deg","func":"msg.topic = \"constant\";\nmsg.payload = msg.boilerDesired;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":630,"y":720,"wires":[["073404090856389c","353b0beab954830b"]]},{"id":"b04134ee6035f01b","type":"function","z":"db9c45ab1920b2aa","name":"Modulation","func":"msg.topic = \"maxmodulation\";\nmsg.payload = msg.boilerModulation;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":790,"y":680,"wires":[["353b0beab954830b","9e48c404cc25999f"]]},{"id":"073404090856389c","type":"function","z":"db9c45ab1920b2aa","name":"Outside temp","func":"msg.topic = \"outside\";\nmsg.payload = msg.boilerOutside;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":790,"y":740,"wires":[["353b0beab954830b"]]},{"id":"37390b0d07666bdf","type":"function","z":"db9c45ab1920b2aa","name":"Command","func":"msg.topic = \"command\";\nmsg.payload = msg.boilerCommand;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":630,"y":660,"wires":[["353b0beab954830b","b04134ee6035f01b"]]},{"id":"cd31a44d6b2d8d30","type":"function","z":"db9c45ab1920b2aa","name":"Filter msg","func":"if (msg.payload !== undefined){\n    return { payload: msg.payload, topic: msg.topic};\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1020,"y":660,"wires":[["7948976871eec50d"]]},{"id":"48035ed1e8f3a9d0","type":"debug","z":"db9c45ab1920b2aa","name":"debug 55","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":980,"y":580,"wires":[]},{"id":"f689b258624c5635","type":"function","z":"db9c45ab1920b2aa","name":"Boiler temp","func":"let boilerTemp;\nlet boilerOutside = global.get('OutsideTemperature');\n\nif (msg.boilerEnable == 1){\n    //Calculate Temperatures here to vary\n    if (boilerOutside <= 10){\n        boilerTemp = 56;\n    }\n    else if (boilerOutside < 20) {\n        boilerTemp = 54;\n    }\n    else if (boilerOutside < 30) {\n        boilerTemp = 48;\n    }\n    else\n    {\n        boilerTemp = 54;\n    }\n    msg.boilerTemp = boilerTemp;\n}\nmsg.boilerModulation = 100;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":630,"y":580,"wires":[["5fec53b602647ea6"]]},{"id":"c87f82178d782242","type":"function","z":"db9c45ab1920b2aa","name":"Priority drivers","func":"let boilerCH = global.get(\"boilerCH\");\nlet chDesired = global.get(\"CHDesired\");\nlet lrTemp = global.get(\"incomingTemperature\");\nlet boilerHW = global.get(\"boilerHW\");\nlet hwDesired = global.get(\"HWDesired\");\nlet hotWater = global.get(\"HotWater\").toFixed(1);\nlet hwDemand = hotWater < hwDesired;\nlet chDemand = lrTemp < chDesired;\n/*\n        No Power - B - 0\n        White - AB - 1\n        White & Grey - A - 2\n        Grey - Hold - 3\n*/\nif (msg.boilerEnable === 1){\n    if (msg.boilerPriority === 0){\n        if ((boilerHW == 1) && (hotWater < hwDesired)){\n            msg.demandHW = \"<\"\n            msg.demandCH = \"-\"\n            msg.boilerDivV = 0; \n            msg.boilerOn = 1;\n            msg.boilerEnable = 1;\n            }\n        else if ((boilerCH === 1) && (lrTemp < chDesired)) {\n            msg.demandHW = \">\"\n            msg.demandCH = \"<\"\n            msg.boilerDivV = 2;\n            msg.boilerOn = 1;\n            msg.boilerEnable = 1;\n            }\n        else\n        {\n            msg.demandHW = \">\"\n            msg.demandCH = \">\"\n            msg.boilerDivV = 0;\n            msg.boilerOn = 2;\n            msg.boilerEnable = 0;\n        }\n    }\n    else if (msg.boilerPriority === 1) {\n        if ((boilerCH == 1) && (lrTemp < chDesired)) {\n            msg.demandHW = \"-\"\n            msg.demandCH = \"<\"\n            msg.boilerDivV = 2;\n            msg.boilerOn = 1;\n            msg.boilerEnable = 1;\n        }\n        else if ((boilerHW === 1) && (hotWater < hwDesired)) {\n            msg.demandHW = \"<\"\n            msg.demandCH = \"-\"\n            msg.boilerDivV = 0;\n            msg.boilerOn = 1;\n            msg.boilerEnable = 1;\n        }\n        else\n        {\n            msg.demandHW = \">\"\n            msg.demandCH = \">\"\n            msg.boilerDivV = 0;\n            msg.boilerOn = 2;\n            msg.boilerEnable = 0;\n        }\n    }\n}\n\nelse {\n    msg.demandHW = \"-\"\n    msg.demandCH = \"-\"\n    msg.boilerDivV = 0;\n    msg.boilerTemp = 10;\n    msg.boilerOn = 2;\n    msg.boilerEnable = 0;\n}\n\nmsg.boilerDesired = chDesired;\nglobal.set(\"boilerDivV\", msg.boilerDivV);\n//msg.test = boilerCH + \" | \" + lrTemp + \" | \" + chDesired + \" | \" + boilerHW + \" | \" + hotWater + \" | \" + hwDesired;\nnode.status({ text: msg.boilerPriority + \" | \" + msg.boilerDivV + \" | \" + boilerCH + \" | \" + lrTemp + \" | \" + chDesired + \" | \" + msg.demandCH + \" | \" + boilerHW + \" | \" + hotWater + \" | \" + hwDesired + \" | \" + msg.demandHW});\nreturn msg","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":800,"y":400,"wires":[["5358f4718995195f","ed445c56b3f2e121","f689b258624c5635","767fe991e487fa71"]]},{"id":"498bf511e8cf4f87","type":"function","z":"db9c45ab1920b2aa","name":"Diverter v/v","func":"let boilerDivV = msg.boilerDivV\nlet Sonoff1 = \"cmnd/DivV/CH_on/POWER\";\nlet Sonoff2 = \"cmnd/DivV/HW_OK/POWER\";\n\n/*\n        No Power - B - 0\n        White - AB - 1\n        White & Grey - A - 2\n        Grey - Hold - 3\n*/\nlet msg1;\nlet msg2;\nlet msg3;\n\nif (msg.boilerOn === 2){\n    boilerDivV = 4\n}\n\nswitch (boilerDivV) {\n    case 1:     //CH ON (AB)\n        msg1 = {topic: Sonoff1, payload: \"on\"} //White\n        msg2 = {topic: Sonoff2, payload: \"off\"} //Grey\n        msg3 = { topic: \"boilerOn\", payload: 1 } //Grey\n        return [msg1, msg2, msg3]\n        break;\n    case 2:     //HW OK (A)\n        msg1 = { topic: Sonoff1, payload: \"on\" } //White\n        msg2 = { topic: Sonoff2, payload: \"on\" } //Grey\n        msg3 = { topic: \"boilerOn\", payload: 1 } //Grey\n        return [msg1, msg2, msg3]\n        break;\n    case 3:     //HOLD (~~)\n        msg1 = { topic: Sonoff1, payload: \"off\" } //White\n        msg2 = { topic: Sonoff2, payload: \"on\" } //Grey\n        msg3 = { topic: \"boilerOn\", payload: 1 } //Grey\n        return [msg1, msg2, msg3]\n        break;  \n    case 4:     //Boiler OFF (B)\n        msg1 = { topic: Sonoff1, payload: \"off\" } //White\n        msg2 = { topic: Sonoff2, payload: \"off\" } //Grey\n        msg3 = { topic: \"boilerOn\", payload: 0 } //Grey\n        return [msg1, msg2, msg3]\n        break;\n\n    default:     //OFF (B)\n        msg1 = { topic: Sonoff1, payload: \"off\" } //White\n        msg2 = { topic: Sonoff2, payload: \"off\" } //Grey\n        msg3 = { topic: \"boilerOn\", payload: 1 } //Grey\n        return [msg1, msg2, msg3]\n        break;\n}","outputs":3,"noerr":0,"initialize":"","finalize":"","libs":[],"x":730,"y":520,"wires":[["b76bd807a25169b6"],["b76bd807a25169b6"],["b76bd807a25169b6"]]},{"id":"e42e62205a291806","type":"switch","z":"db9c45ab1920b2aa","name":"Div power","property":"boilerDivV","propertyType":"msg","rules":[{"t":"eq","v":"1","vt":"num"},{"t":"eq","v":"2","vt":"num"},{"t":"else"}],"checkall":"true","repair":false,"outputs":3,"x":700,"y":460,"wires":[["bc22217d67ad48f7"],["bc22217d67ad48f7"],[]]},{"id":"5358f4718995195f","type":"rbe","z":"db9c45ab1920b2aa","name":"","func":"rbe","gap":"","start":"","inout":"out","septopics":false,"property":"boilerDivV","topi":"topic","x":1050,"y":400,"wires":[["5dec299c933e27b4","bdd575c33e8736b1"]]},{"id":"bc22217d67ad48f7","type":"delay","z":"db9c45ab1920b2aa","name":"","pauseType":"delay","timeout":"1","timeoutUnits":"minutes","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":860,"y":460,"wires":[["8a63ca69a7920126"]]},{"id":"8a63ca69a7920126","type":"change","z":"db9c45ab1920b2aa","name":"","rules":[{"t":"set","p":"boilerDivV","pt":"msg","to":"3","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":1050,"y":460,"wires":[["5dec299c933e27b4"]]},{"id":"989e86c49e75c878","type":"inject","z":"db9c45ab1920b2aa","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"20","crontab":"","once":true,"onceDelay":"11","topic":"","payload":"","payloadType":"date","x":330,"y":400,"wires":[["6d4f4277db295de3"]]},{"id":"ed445c56b3f2e121","type":"rbe","z":"db9c45ab1920b2aa","name":"","func":"rbe","gap":"","start":"","inout":"out","septopics":false,"property":"boilerEnable","topi":"topic","x":1050,"y":360,"wires":[["bdd575c33e8736b1"]]},{"id":"c4fb6f4f461a93fc","type":"mqtt in","z":"db9c45ab1920b2aa","name":"Div V/Vs","topic":"stat/DivV/#","qos":"2","datatype":"utf8","broker":"0549f612016b7da9","nl":false,"rap":true,"rh":0,"inputs":0,"x":100,"y":180,"wires":[["c40abd86e2fe1535"]]},{"id":"c40abd86e2fe1535","type":"switch","z":"db9c45ab1920b2aa","name":"Which valve?","property":"topic","propertyType":"msg","rules":[{"t":"eq","v":"stat/DivV/CH_on/RESULT","vt":"str"},{"t":"eq","v":"stat/DivV/HW_OK/RESULT","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":250,"y":180,"wires":[["190a96f9685c1757"],["01252fb24bdfc757"]]},{"id":"ac2cbd0f09972683","type":"switch","z":"db9c45ab1920b2aa","name":"ON/OFF state","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"{\"POWER\":\"ON\"}","vt":"str"},{"t":"eq","v":"{\"POWER\":\"OFF\"}","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":540,"y":160,"wires":[["5a62482d69faa083"],["fcfe6a03bcdf61bc"]]},{"id":"5a62482d69faa083","type":"function","z":"db9c45ab1920b2aa","name":"if is on","func":"msg.color = \"black\";\nmsg.background = \"#33ff55\";\nmsg.text = \"CH DivV ON\";\nflow.set(\"boilerSonCH\", \"ON\");\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":690,"y":120,"wires":[["211ddcc7e1b152c8"]]},{"id":"fcfe6a03bcdf61bc","type":"function","z":"db9c45ab1920b2aa","name":"if its off","func":"msg.color = \"black\";\nmsg.background = \"#FF3333\";\nmsg.text = \"CH DivV OFF\";\nflow.set(\"boilerSonCH\", \"OFF\");\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":700,"y":160,"wires":[["211ddcc7e1b152c8"]]},{"id":"211ddcc7e1b152c8","type":"ui_button","z":"db9c45ab1920b2aa","name":"DivV CH","group":"92f16c3dd8988295","order":1,"width":3,"height":1,"passthru":false,"label":"{{msg.text}}","tooltip":"","color":"{{msg.color}}","bgcolor":"{{msg.background}}","className":"","icon":"fa-fire fa-2x","payload":"none","payloadType":"str","topic":"button","topicType":"str","x":840,"y":120,"wires":[["4f429f38af46cd31"]]},{"id":"2756486acd26cbce","type":"switch","z":"db9c45ab1920b2aa","name":"ON/OFF state","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"{\"POWER\":\"ON\"}","vt":"str"},{"t":"eq","v":"{\"POWER\":\"OFF\"}","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":540,"y":200,"wires":[["618acec790331512"],["d59fe3ec0708251a"]]},{"id":"618acec790331512","type":"function","z":"db9c45ab1920b2aa","name":"if is on","func":"msg.color = \"black\";\nmsg.background = \"#33ff55\";\nmsg.text = \"HW DivV OK\";\nglobal.set(\"boilerSonHW\", \"ON\");\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":690,"y":200,"wires":[["f70c79b05ca981a3"]]},{"id":"d59fe3ec0708251a","type":"function","z":"db9c45ab1920b2aa","name":"if its off","func":"msg.color = \"black\";\nmsg.background = \"#FF3333\";\nmsg.text = \"HW DivV OFF\";\nglobal.set(\"boilerSonHW\", \"OFF\");\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":700,"y":240,"wires":[["f70c79b05ca981a3"]]},{"id":"f70c79b05ca981a3","type":"ui_button","z":"db9c45ab1920b2aa","name":"DivV HW","group":"92f16c3dd8988295","order":2,"width":3,"height":1,"passthru":false,"label":"{{msg.text}}","tooltip":"","color":"{{msg.color}}","bgcolor":"{{msg.background}}","className":"","icon":"fa-fire fa-2x","payload":"none","payloadType":"str","topic":"topic","topicType":"msg","x":840,"y":200,"wires":[["b66ffe50f92de9a5"]]},{"id":"4f429f38af46cd31","type":"switch","z":"db9c45ab1920b2aa","name":"","property":"topic","propertyType":"msg","rules":[{"t":"eq","v":"button","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":970,"y":120,"wires":[["51fe7a3a52521326"]]},{"id":"190a96f9685c1757","type":"change","z":"db9c45ab1920b2aa","name":"State1","rules":[{"t":"set","p":"state1","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":390,"y":160,"wires":[["ac2cbd0f09972683"]]},{"id":"01252fb24bdfc757","type":"change","z":"db9c45ab1920b2aa","name":"State2","rules":[{"t":"set","p":"state2","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":390,"y":200,"wires":[["2756486acd26cbce"]]},{"id":"51fe7a3a52521326","type":"function","z":"db9c45ab1920b2aa","name":"CH on change","func":"let state;\nstate = flow.get(\"boilerSonCH\");\nif (state == \"ON\") state = \"OFF\"; else state = \"ON\";\nmsg.topic = \"cmnd/DivV/CH_on/POWER\"\nmsg.payload = state\nnode.status({text:state});\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1120,"y":120,"wires":[["b6b8da7f20c6df7f","d36ea3c46c2f1b51"]]},{"id":"b6b8da7f20c6df7f","type":"debug","z":"db9c45ab1920b2aa","name":"debug 68","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1120,"y":160,"wires":[]},{"id":"b66ffe50f92de9a5","type":"switch","z":"db9c45ab1920b2aa","name":"","property":"topic","propertyType":"msg","rules":[{"t":"eq","v":"button","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":970,"y":200,"wires":[["4dc4732fa2bb8571"]]},{"id":"4dc4732fa2bb8571","type":"function","z":"db9c45ab1920b2aa","name":"HW OK change","func":"let state;\nstate = flow.get(\"boilerSonHW\");\nif (state == \"ON\") state = \"OFF\"; else state = \"ON\";\nmsg.topic = \"cmnd/DivV/HW_OK/POWER\"\nmsg.payload = state;\nnode.status({text:state})\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1120,"y":200,"wires":[["d36ea3c46c2f1b51"]]},{"id":"062e0d03e16351dc","type":"comment","z":"db9c45ab1920b2aa","name":"Diverter valve Sonoffs","info":"","x":140,"y":120,"wires":[]},{"id":"a2c193c78c27832f","type":"debug","z":"db9c45ab1920b2aa","name":"debug 56","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1160,"y":520,"wires":[]},{"id":"aa42c27fd8a5ce22","type":"join","z":"db9c45ab1920b2aa","name":"","mode":"custom","build":"array","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":false,"timeout":"","count":"3","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"num","reduceFixup":"","x":1010,"y":520,"wires":[["a2c193c78c27832f"]]},{"id":"353b0beab954830b","type":"junction","z":"db9c45ab1920b2aa","x":940,"y":660,"wires":[["cd31a44d6b2d8d30"]]},{"id":"5dec299c933e27b4","type":"junction","z":"db9c45ab1920b2aa","x":1180,"y":460,"wires":[["498bf511e8cf4f87"]]},{"id":"e16f092f7d26bc70","type":"junction","z":"db9c45ab1920b2aa","x":600,"y":460,"wires":[["e42e62205a291806"]]},{"id":"b76bd807a25169b6","type":"junction","z":"db9c45ab1920b2aa","x":840,"y":520,"wires":[["a650a549cee2b75c","aa42c27fd8a5ce22"]]},{"id":"bdd575c33e8736b1","type":"junction","z":"db9c45ab1920b2aa","x":1180,"y":400,"wires":[["e16f092f7d26bc70"]]},{"id":"d36ea3c46c2f1b51","type":"junction","z":"db9c45ab1920b2aa","x":1240,"y":160,"wires":[["bc981fa9ede7efd8"]]},{"id":"a650a549cee2b75c","type":"junction","z":"db9c45ab1920b2aa","x":1260,"y":620,"wires":[["bc981fa9ede7efd8"]]},{"id":"36dcc97ebbdef592","type":"group","z":"db9c45ab1920b2aa","name":"Manual","style":{"label":true},"nodes":["9b0499692461daa6","ef51a3701dcb2b29","3240c5e62d59e6aa","bfc932b6e2cfb045","e549857b4937c957","39f8b9f4208b1735","1e9735136aeda406","7604938df3bc1366","f7bfe5923da81f41","8fc11d5f12a82a4d","b58d9b1207780297","1f37c36534974e84","1b4587e49bdd53fa","d38ae8bcd36656a7","413e9a43b62fdfcc","9a55e78f2d9dd72c","0317ea6e74e85738","a8ce935cb27bc39a","03c62283a84b25a3","e4cac3d19f375bee","95eb01687306e587"],"x":34,"y":459,"w":472,"h":422},{"id":"9b0499692461daa6","type":"change","z":"db9c45ab1920b2aa","g":"36dcc97ebbdef592","name":"All On","rules":[{"t":"set","p":"boilerCH","pt":"global","to":"1","tot":"num"},{"t":"set","p":"boilerHW","pt":"global","to":"1","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":350,"y":760,"wires":[["e4cac3d19f375bee"]]},{"id":"ef51a3701dcb2b29","type":"inject","z":"db9c45ab1920b2aa","d":true,"g":"36dcc97ebbdef592","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":200,"y":760,"wires":[["9b0499692461daa6"]]},{"id":"3240c5e62d59e6aa","type":"change","z":"db9c45ab1920b2aa","g":"36dcc97ebbdef592","name":"CH Only","rules":[{"t":"set","p":"boilerCH","pt":"global","to":"1","tot":"num"},{"t":"set","p":"boilerHW","pt":"global","to":"0","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":360,"y":800,"wires":[["e4cac3d19f375bee"]]},{"id":"bfc932b6e2cfb045","type":"inject","z":"db9c45ab1920b2aa","d":true,"g":"36dcc97ebbdef592","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":200,"y":800,"wires":[["3240c5e62d59e6aa"]]},{"id":"e549857b4937c957","type":"change","z":"db9c45ab1920b2aa","g":"36dcc97ebbdef592","name":"HW Only","rules":[{"t":"set","p":"boilerCH","pt":"global","to":"0","tot":"num"},{"t":"set","p":"boilerHW","pt":"global","to":"1","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":360,"y":840,"wires":[["e4cac3d19f375bee"]]},{"id":"39f8b9f4208b1735","type":"inject","z":"db9c45ab1920b2aa","d":true,"g":"36dcc97ebbdef592","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":200,"y":840,"wires":[["e549857b4937c957"]]},{"id":"1e9735136aeda406","type":"change","z":"db9c45ab1920b2aa","g":"36dcc97ebbdef592","name":"All Off","rules":[{"t":"set","p":"boilerCH","pt":"global","to":"0","tot":"num"},{"t":"set","p":"boilerHW","pt":"global","to":"0","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":350,"y":700,"wires":[["e4cac3d19f375bee"]]},{"id":"7604938df3bc1366","type":"inject","z":"db9c45ab1920b2aa","d":true,"g":"36dcc97ebbdef592","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":200,"y":700,"wires":[["1e9735136aeda406"]]},{"id":"f7bfe5923da81f41","type":"change","z":"db9c45ab1920b2aa","g":"36dcc97ebbdef592","name":"Temps","rules":[{"t":"set","p":"OutsideTemperature","pt":"global","to":"15","tot":"num"},{"t":"set","p":"CHDesired","pt":"global","to":"21.5","tot":"num"},{"t":"set","p":"HWDesired","pt":"global","to":"42.9","tot":"num"},{"t":"set","p":"LivingRoomTemp","pt":"global","to":"19","tot":"num"},{"t":"set","p":"HotWater","pt":"global","to":"40","tot":"num"},{"t":"set","p":"boilerDivV","pt":"global","to":"0","tot":"num"},{"t":"set","p":"boilerCHONstatus","pt":"global","to":"0","tot":"num"},{"t":"set","p":"boilerHWOKstatus","pt":"global","to":"0","tot":"num"},{"t":"set","p":"boilerDivVstatus","pt":"global","to":"0","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":290,"y":500,"wires":[[]]},{"id":"8fc11d5f12a82a4d","type":"inject","z":"db9c45ab1920b2aa","d":true,"g":"36dcc97ebbdef592","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":140,"y":500,"wires":[["f7bfe5923da81f41"]]},{"id":"b58d9b1207780297","type":"function","z":"db9c45ab1920b2aa","g":"36dcc97ebbdef592","name":"LR Tmp","func":"global.set(\"LivingRoomTemp\", msg.payload);\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":400,"y":600,"wires":[["95eb01687306e587"]]},{"id":"1f37c36534974e84","type":"inject","z":"db9c45ab1920b2aa","d":true,"g":"36dcc97ebbdef592","name":"15","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"15","payloadType":"num","x":130,"y":600,"wires":[["b58d9b1207780297"]]},{"id":"1b4587e49bdd53fa","type":"inject","z":"db9c45ab1920b2aa","d":true,"g":"36dcc97ebbdef592","name":"22","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"22","payloadType":"num","x":270,"y":600,"wires":[["b58d9b1207780297"]]},{"id":"d38ae8bcd36656a7","type":"function","z":"db9c45ab1920b2aa","g":"36dcc97ebbdef592","name":"HW Tmp","func":"global.set(\"HotWater\", msg.payload);\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":400,"y":640,"wires":[["95eb01687306e587"]]},{"id":"413e9a43b62fdfcc","type":"inject","z":"db9c45ab1920b2aa","d":true,"g":"36dcc97ebbdef592","name":"32","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"32","payloadType":"num","x":130,"y":640,"wires":[["d38ae8bcd36656a7"]]},{"id":"9a55e78f2d9dd72c","type":"inject","z":"db9c45ab1920b2aa","d":true,"g":"36dcc97ebbdef592","name":"45","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"45","payloadType":"num","x":270,"y":640,"wires":[["d38ae8bcd36656a7"]]},{"id":"0317ea6e74e85738","type":"function","z":"db9c45ab1920b2aa","g":"36dcc97ebbdef592","name":"Priority","func":"global.set(\"boilerPriority\", msg.payload);\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":400,"y":540,"wires":[["6d4f4277db295de3"]]},{"id":"a8ce935cb27bc39a","type":"inject","z":"db9c45ab1920b2aa","d":true,"g":"36dcc97ebbdef592","name":"0","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"0","payloadType":"num","x":130,"y":540,"wires":[["0317ea6e74e85738"]]},{"id":"03c62283a84b25a3","type":"inject","z":"db9c45ab1920b2aa","d":true,"g":"36dcc97ebbdef592","name":"1","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"1","payloadType":"num","x":270,"y":540,"wires":[["0317ea6e74e85738"]]},{"id":"e4cac3d19f375bee","type":"junction","z":"db9c45ab1920b2aa","g":"36dcc97ebbdef592","x":480,"y":700,"wires":[["6d4f4277db295de3"]]},{"id":"95eb01687306e587","type":"junction","z":"db9c45ab1920b2aa","g":"36dcc97ebbdef592","x":480,"y":600,"wires":[["6d4f4277db295de3"]]},{"id":"0549f612016b7da9","type":"mqtt-broker","name":"NodeRED MQTT","broker":"172.27.123.58","port":"1883","clientid":"","autoConnect":true,"usetls":false,"protocolVersion":"4","keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""},{"id":"92f16c3dd8988295","type":"ui_group","name":"DivV CH","tab":"df773904c22c0105","order":1,"disp":true,"width":"6","collapse":false,"className":""},{"id":"df773904c22c0105","type":"ui_tab","name":"OTGW","icon":"dashboard","order":18,"disabled":false,"hidden":false}]

This topic was automatically closed 60 days after the last reply. New replies are no longer allowed.