New smart wifi radiator valves from Shelly

BTW: I added support for the TRV two weeks ago if anyone is interested:

3 Likes

Hi @windkh - does that mean we can control the TRV using (via its endpoints) without disabling the cloud capabilities (like we do with other shelly devices and node-red-contrib-shelly) ?

@Steve-Mcl I think so, yes.

I am using Eurotronic z-wave TVRs and node-red. No cloud!

Hi @juntiedt,
Yes indeed I have seen somwhere else feedback from users that use there z-wave trv's enterely local, without any hacks. That was why I found it so weird that they don't support the same for their wifi trv's...

I am using the same, they work very well with ok/good battery life, but I would prefer to replace them with zigbee ones (want to zigbee everything), but all the zigbee based TRVs do not look well in the reviews, also the eurotronic zigbee ones do look not great. Mostly the batteries that die rather quickly.

2 Likes

Schneider Electric WV704R0A0902 control via MQTT | Zigbee2MQTT

The silly idiot who made that second video never made a follow-up, and so it wasnā€™t much use!

(That silly idiot was meā€¦)

3 Likes

Just had an email arrive showing the Easter Offers in the Shelly Shop.

TRV shows a 10% discount. (Must be popular!) Others are up to 25%

2 Likes

Received TRV's today. I have a deadline for decorating, so that has to take priority, but will try and squeeze a little playtime in when I can!

1 Like

UPDATED - 6th May

Still experimenting with settings using MQTT (doesn't seem hopeful ATM, but early days yet!)

MQTT published every minute or when http call makes a 'valid' change to the settings Otherwise no calls seem to work

Temperature can be changed AND Position can be changed (Automatic Temp Control en/dis) (MQTT/HTTTP) (Not yet sure what actual interaction is with TRV, assume stays in set mode (Auto Temp Control) )

Only 2 MQTT messages come back

EDIT & UPDATE - 6th May

Major Observation: Summer is not the time to set about configuring a TRV on a radiator in Node-RED or indeed any other Control System. No heat is required!! :rofl:

Played around with everything and ended up with this as the final flow to control the valve. Still need to get the MQTT alive/announce messages monitored. But the TRV is not that easy to switch on and off - needs resetting all the time.

Updated flow using @Colin node-red-contrib-pid. Unfortunately due to my 'Major Observation', I can't set the system up without wasting a lot of heat and sweating my eyeballs out!!

[{"id":"b4973237.46ab6","type":"subflow","name":"Process Simulation","info":"","in":[{"x":37,"y":103,"wires":[{"id":"ec719d4d.0d54f8"}]}],"out":[{"x":728.5,"y":294,"wires":[{"id":"ae1a6e5.d4c0d9","port":0}]}]},{"id":"7fe4b5c3.32e58c","type":"function","z":"b4973237.46ab6","name":"30 sec RC + 20","func":"// Applies a simple RC low pass filter to incoming payload values\nvar tc = 30*1000;       // time constant in milliseconds\n\nvar lastValue = context.get('lastValue');\nif (typeof lastValue == \"undefined\") lastValue = msg.payload;\nvar lastTime = context.get('lastTime') || null;\nvar now = new Date();\nvar currentValue = msg.payload;\nif (lastTime === null) {\n    // first time through\n    newValue = currentValue;\n} else {\n    var dt = now - lastTime;\n    var newValue;\n    \n    if (dt > 0) {\n        var dtotc = dt / tc;\n        newValue = lastValue * (1 - dtotc) + currentValue * dtotc;\n    } else {\n        // no time has elapsed leave output the same as last time\n        newValue = lastValue;\n    }\n}\ncontext.set('lastValue', newValue);\ncontext.set('lastTime', now);\n\nmsg.payload = newValue + 20;\nreturn msg;","outputs":1,"noerr":0,"x":626.5,"y":207,"wires":[["ae1a6e5.d4c0d9"]]},{"id":"1bacd004.9753c","type":"inject","z":"b4973237.46ab6","name":"Inject -0.2 at start","props":[{"p":"payload","v":"-0.2","vt":"num"},{"p":"topic","v":"","vt":"str"}],"repeat":"","crontab":"","once":true,"topic":"","payload":"-0.2","payloadType":"num","x":134.5,"y":30,"wires":[["ec719d4d.0d54f8"]]},{"id":"999a52c2.f465f","type":"function","z":"b4973237.46ab6","name":"10 sec RC","func":"// Applies a simple RC low pass filter to incoming payload values\nvar tc = 10*1000;       // time constant in milliseconds\n\nvar lastValue = context.get('lastValue');\nif (typeof lastValue == \"undefined\") lastValue = msg.payload;\nvar lastTime = context.get('lastTime') || null;\nvar now = new Date();\nvar currentValue = msg.payload;\nif (lastTime === null) {\n    // first time through\n    newValue = currentValue;\n} else {\n    var dt = now - lastTime;\n    var newValue;\n    \n    if (dt > 0) {\n        var dtotc = dt / tc;\n        newValue = lastValue * (1 - dtotc) + currentValue * dtotc;\n    } else {\n        // no time has elapsed leave output the same as last time\n        newValue = lastValue;\n    }\n}\ncontext.set('lastValue', newValue);\ncontext.set('lastTime', now);\n\nmsg.payload = newValue;\nreturn msg;","outputs":1,"noerr":0,"x":451,"y":207,"wires":[["7fe4b5c3.32e58c"]]},{"id":"ec719d4d.0d54f8","type":"delay","z":"b4973237.46ab6","name":"","pauseType":"delay","timeout":"10","timeoutUnits":"seconds","rate":"1","nbRateUnits":"","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":268,"y":104,"wires":[["ede39236.1961f8"]]},{"id":"a823c9cf.2a6178","type":"function","z":"b4973237.46ab6","name":"2 msg transport delay","func":"// stores messages in a fifo until the specified number have been received, \n// then releases them as new messages are received.\n// during the filling phase the earliest message is passed on each time \n// a message is received, but it is also left in the fifo\nvar fifoMaxLength = 2;\nvar fifo = context.get('fifo') || [];\n// push the new message onto the top of the array, messages are shifted down and\n// drop off the front\nvar length = fifo.push(msg);  // returns new length\nif (length > fifoMaxLength) {\n    newMsg = fifo.shift();\n} else {\n    // not full yet, make a copy of the msg and pass it on\n    var newMsg = JSON.parse(JSON.stringify(fifo[0]));\n}\ncontext.set('fifo', fifo);\nreturn newMsg;","outputs":1,"noerr":0,"x":258,"y":208,"wires":[["999a52c2.f465f"]]},{"id":"ae1a6e5.d4c0d9","type":"function","z":"b4973237.46ab6","name":"Clear all except payload","func":"msg2 = {payload: msg.payload};\nreturn msg2;","outputs":1,"noerr":0,"x":545,"y":293,"wires":[[]]},{"id":"ede39236.1961f8","type":"range","z":"b4973237.46ab6","minin":"0","maxin":"1","minout":"0","maxout":"100","action":"scale","round":false,"property":"payload","name":"","x":87,"y":208,"wires":[["a823c9cf.2a6178"]]},{"id":"d02432332410fee7","type":"tab","label":"TRV (experimental)","disabled":false,"info":"","env":[]},{"id":"560e1bddf38cc31f","type":"http request","z":"d02432332410fee7","name":"TRV Basic","method":"GET","ret":"txt","paytoqs":"ignore","url":"http://172.27.123.250/{{{topic}}}","tls":"","persist":false,"proxy":"","authType":"","senderr":false,"x":710,"y":220,"wires":[["0668e8a3091344bd"]]},{"id":"bc0fd61e8b0e9da0","type":"debug","z":"d02432332410fee7","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1030,"y":220,"wires":[]},{"id":"3a0aa17655d036f2","type":"inject","z":"d02432332410fee7","d":true,"name":"LR Temp","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"30","crontab":"","once":true,"onceDelay":"37","topic":"ext_t?temp","payload":"incomingTemperature","payloadType":"global","x":330,"y":220,"wires":[["86e75ef344fa6d7f","632778447a5b0a6c"]]},{"id":"632778447a5b0a6c","type":"function","z":"d02432332410fee7","name":"","func":"msg.topic = msg.topic + \"=\" + msg.payload;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":520,"y":220,"wires":[["560e1bddf38cc31f"]]},{"id":"01321ae30cbd3c04","type":"comment","z":"d02432332410fee7","name":"LRoom temp from ESP set TRV and load PID","info":"","x":210,"y":140,"wires":[]},{"id":"c3cfa5de699d9335","type":"rbe","z":"d02432332410fee7","name":"","func":"rbe","gap":"","start":"","inout":"out","septopics":false,"property":"setpoint","topi":"topic","x":430,"y":300,"wires":[["c210bd83a3d901af","86e75ef344fa6d7f"]]},{"id":"c210bd83a3d901af","type":"debug","z":"d02432332410fee7","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":630,"y":300,"wires":[]},{"id":"e36ca8663ce106be","type":"comment","z":"d02432332410fee7","name":"msg.setpoint from Opto","info":"","x":360,"y":260,"wires":[]},{"id":"86e75ef344fa6d7f","type":"PID","z":"d02432332410fee7","name":"","setpoint":"","pb":"0","ti":"1080","td":"0","integral_default":"0","smooth_factor":"0","max_interval":600,"enable":"1","disabled_op":"0","x":490,"y":440,"wires":[["07743f5b26a95c03","b2d9acaae01c6021","9bb80bbba7590d7d","f548234b8e0e62e5","e063d72d64ad0f63","819c26e31b6b382a"]]},{"id":"81924ea443ec8e39","type":"change","z":"d02432332410fee7","name":"plot op","rules":[{"t":"set","p":"topic","pt":"msg","to":"op","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":570,"y":600,"wires":[["0dfe07175542b3fa"]]},{"id":"16aa0f2c2bc09abe","type":"inject","z":"d02432332410fee7","name":"enable","repeat":"","crontab":"","once":false,"topic":"enable","payload":"true","payloadType":"bool","x":290,"y":420,"wires":[["86e75ef344fa6d7f"]]},{"id":"0519eed112476ddb","type":"inject","z":"d02432332410fee7","name":"disable","repeat":"","crontab":"","once":false,"topic":"enable","payload":"false","payloadType":"bool","x":290,"y":460,"wires":[["86e75ef344fa6d7f"]]},{"id":"07743f5b26a95c03","type":"subflow:b4973237.46ab6","z":"d02432332410fee7","d":true,"name":"","x":210,"y":520,"wires":[["e063d72d64ad0f63","86e75ef344fa6d7f"]]},{"id":"e063d72d64ad0f63","type":"change","z":"d02432332410fee7","name":"plot pv","rules":[{"t":"set","p":"topic","pt":"msg","to":"pv","tot":"str"},{"t":"set","p":"payload","pt":"msg","to":"pv","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":570,"y":520,"wires":[["0dfe07175542b3fa"]]},{"id":"b2d9acaae01c6021","type":"range","z":"d02432332410fee7","minin":"0","maxin":"1","minout":"0","maxout":"100","action":"scale","round":false,"property":"payload","name":"Scale power","x":650,"y":440,"wires":[["7ac010c03d4e4881"]]},{"id":"0dfe07175542b3fa","type":"ui_chart","z":"d02432332410fee7","name":"","group":"c45a83a3.d00908","order":1,"width":20,"height":"10","label":"chart","chartType":"line","legend":"false","xformat":"HH:mm:ss","interpolate":"linear","nodata":"","dot":false,"ymin":"0","ymax":"30","removeOlder":"6","removeOlderPoints":"","removeOlderUnit":"3600","cutout":0,"useOneColor":false,"useUTC":false,"colors":["#1f77b4","#cf0005","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"outputs":1,"useDifferentColor":false,"className":"","x":910,"y":500,"wires":[[]]},{"id":"c99a2afa44718110","type":"inject","z":"d02432332410fee7","name":"Clear chart on deploy","repeat":"","crontab":"","once":true,"topic":"","payload":"{\"data\":[]}","payloadType":"json","x":220,"y":660,"wires":[["40fa26f84a7e0cfa"]]},{"id":"40fa26f84a7e0cfa","type":"change","z":"d02432332410fee7","name":"","rules":[{"t":"move","p":"payload.data","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":470,"y":660,"wires":[["0dfe07175542b3fa"]]},{"id":"9bb80bbba7590d7d","type":"debug","z":"d02432332410fee7","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":770,"y":340,"wires":[]},{"id":"f548234b8e0e62e5","type":"change","z":"d02432332410fee7","name":"plot sp","rules":[{"t":"set","p":"payload","pt":"msg","to":"setpoint","tot":"msg"},{"t":"set","p":"topic","pt":"msg","to":"sp","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":570,"y":560,"wires":[["0dfe07175542b3fa"]]},{"id":"24479212f574dad9","type":"debug","z":"d02432332410fee7","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":770,"y":380,"wires":[]},{"id":"919778142ca4fb49","type":"inject","z":"d02432332410fee7","d":true,"name":"","props":[{"p":"setpoint","v":"CHDesired","vt":"global"},{"p":"topic","vt":"str"}],"repeat":"60","crontab":"","once":true,"onceDelay":"36","topic":"","x":270,"y":300,"wires":[["c3cfa5de699d9335"]]},{"id":"eefd39435a608ebf","type":"comment","z":"d02432332410fee7","name":"msg.payload to PID (Actual temp)","info":"","x":610,"y":260,"wires":[]},{"id":"7ac010c03d4e4881","type":"function","z":"d02432332410fee7","name":"Pos control","func":"msg.payload = msg.payload\nmsg.topic = \"pos\"\nmsg.payload1 = \"0\";\nmsg.topic1 = \"target_t_enabled\"\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":830,"y":440,"wires":[["b6b184198d84aa47","24479212f574dad9"]]},{"id":"b6b184198d84aa47","type":"http request","z":"d02432332410fee7","name":"/thermostat/0","method":"GET","ret":"txt","paytoqs":"ignore","url":"http://172.27.123.250/thermostat/0/?{{{topic1}}}={{{payload1}}}&{{{topic}}}={{{payload}}}","tls":"","persist":false,"proxy":"","authType":"","senderr":false,"x":1010,"y":440,"wires":[["716b2b6c91de1882"]]},{"id":"716b2b6c91de1882","type":"function","z":"d02432332410fee7","name":"Get 'status'","func":"msg.topic = \"status\";\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1090,"y":480,"wires":[["8163b3e32192f2d9"]]},{"id":"3d054e3d45f82631","type":"mqtt in","z":"d02432332410fee7","name":"ALL TRV MQTT","topic":"shellies/shellytrv-14B4571946F0/#","qos":"2","datatype":"utf8","broker":"0549f612016b7da9","nl":false,"rap":true,"rh":0,"inputs":0,"x":240,"y":840,"wires":[["9f3d35490b3d76f7"]]},{"id":"741168a7b9d865c9","type":"switch","z":"d02432332410fee7","name":"","property":"topic","propertyType":"msg","rules":[{"t":"eq","v":"shellies/shellytrv-14B4571946F0/info","vt":"str"},{"t":"eq","v":"shellies/shellytrv-14B4571946F0/settings","vt":"str"},{"t":"eq","v":"status","vt":"str"},{"t":"eq","v":"settings","vt":"str"},{"t":"eq","v":"boost_minutes","vt":"str"},{"t":"else"}],"checkall":"true","repair":false,"outputs":6,"x":550,"y":840,"wires":[["9abee14ebcf82de5"],["7e74adf60be50ec9"],["15e20e91bd2cb834"],["593036628a5eeb0b"],["3d98d1fa52e8307c"],["06cb50c8bf39a59d"]]},{"id":"be286980df423f96","type":"catch","z":"d02432332410fee7","name":"","scope":["9f3d35490b3d76f7"],"uncaught":false,"x":550,"y":940,"wires":[["a4d6bbfda6d4390e"]]},{"id":"06cb50c8bf39a59d","type":"debug","z":"d02432332410fee7","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":690,"y":900,"wires":[]},{"id":"9abee14ebcf82de5","type":"function","z":"d02432332410fee7","name":"","func":"let position = msg.payload.thermostats[0].pos || 0;\nlet target_temp = msg.payload.thermostats[0].target_t.value || 0;\nlet actual_temp = msg.payload.thermostats[0].tmp.value || 0;\nlet battery = msg.payload.bat.value || 0;\nlet voltage = msg.payload.bat.voltage || 0;\nlet tempPos = msg.payload.thermostats[0].target_t.enabled || 0;\n\nreturn {position:position, target_temp:target_temp, actual_temp:actual_temp, battery:battery, voltage:voltage}","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":700,"y":740,"wires":[["8cb18138b7e1d975"]]},{"id":"8cb18138b7e1d975","type":"rbe","z":"d02432332410fee7","name":"","func":"rbe","gap":"","start":"","inout":"out","septopics":true,"property":"payload","topi":"topic","x":850,"y":740,"wires":[["a499318a6364361e"]]},{"id":"a499318a6364361e","type":"debug","z":"d02432332410fee7","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":990,"y":740,"wires":[]},{"id":"7e74adf60be50ec9","type":"debug","z":"d02432332410fee7","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":990,"y":780,"wires":[]},{"id":"15e20e91bd2cb834","type":"debug","z":"d02432332410fee7","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":990,"y":820,"wires":[]},{"id":"593036628a5eeb0b","type":"debug","z":"d02432332410fee7","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":990,"y":860,"wires":[]},{"id":"3d98d1fa52e8307c","type":"debug","z":"d02432332410fee7","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":990,"y":900,"wires":[]},{"id":"a4d6bbfda6d4390e","type":"debug","z":"d02432332410fee7","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":990,"y":940,"wires":[]},{"id":"8163b3e32192f2d9","type":"http request","z":"d02432332410fee7","name":"TRV Basic","method":"GET","ret":"txt","paytoqs":"ignore","url":"http://172.27.123.250/{{{topic}}}","tls":"","persist":false,"proxy":"","authType":"","senderr":false,"x":1270,"y":480,"wires":[[]]},{"id":"335ce69c5d3bd2ab","type":"comment","z":"d02432332410fee7","name":"ALL TRV MQTT Messages","info":"","x":210,"y":800,"wires":[]},{"id":"819c26e31b6b382a","type":"range","z":"d02432332410fee7","minin":"0","maxin":"1","minout":"0","maxout":"25","action":"scale","round":false,"property":"payload","name":"Scale power","x":430,"y":600,"wires":[["81924ea443ec8e39"]]},{"id":"1a068d9678ce1855","type":"inject","z":"d02432332410fee7","name":"","props":[{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"status","x":110,"y":60,"wires":[["560e1bddf38cc31f","f0fb12b53f97e3d4"]]},{"id":"3c0adb0a635b3200","type":"inject","z":"d02432332410fee7","name":"","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"settings","payloadType":"str","x":120,"y":100,"wires":[["560e1bddf38cc31f","f0fb12b53f97e3d4"]]},{"id":"9f3d35490b3d76f7","type":"json","z":"d02432332410fee7","name":"json 1","property":"payload","action":"obj","pretty":false,"x":410,"y":840,"wires":[["741168a7b9d865c9","5add9b9caa86824c"]]},{"id":"5add9b9caa86824c","type":"debug","z":"d02432332410fee7","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":410,"y":900,"wires":[]},{"id":"f0fb12b53f97e3d4","type":"debug","z":"d02432332410fee7","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":290,"y":60,"wires":[]},{"id":"0668e8a3091344bd","type":"json","z":"d02432332410fee7","name":"","property":"payload","action":"","pretty":false,"x":870,"y":220,"wires":[["bc0fd61e8b0e9da0"]]},{"id":"c1fb5cae138c486c","type":"change","z":"d02432332410fee7","name":"","rules":[{"t":"set","p":"setpoint","pt":"msg","to":"CHDesired","tot":"global"}],"action":"","property":"","from":"","to":"","reg":false,"x":320,"y":180,"wires":[["c3cfa5de699d9335","981c92e7df97a04b"]]},{"id":"981c92e7df97a04b","type":"change","z":"d02432332410fee7","name":"LR Temp.","rules":[{"t":"set","p":"payload","pt":"msg","to":"incomingTemperature","tot":"global"},{"t":"set","p":"topic","pt":"msg","to":"ext_t?temp","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":520,"y":180,"wires":[["86e75ef344fa6d7f","632778447a5b0a6c"]]},{"id":"122cbde94b33b529","type":"inject","z":"d02432332410fee7","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"30","crontab":"","once":true,"onceDelay":".75","topic":"","payload":"","payloadType":"date","x":130,"y":180,"wires":[["c1fb5cae138c486c"]]},{"id":"c45a83a3.d00908","type":"ui_group","name":"PID","tab":"80cd4062.93a5","order":1,"disp":true,"width":20,"collapse":false,"className":""},{"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":{},"sessionExpiry":""},{"id":"80cd4062.93a5","type":"ui_tab","name":"TRV Chart","icon":"dashboard","disabled":false,"hidden":false}]
2 Likes

LOL My own observation - Summer is exactly the time to be configuring an automated TRV system. You can always force your TRVs to demand heat by setting the target temperature to something slightly higher than ambient temperature. I test things in my own study (individual room control being the whole point of a TRV system) without bothering the rest of the house. The big problem with testing stuff out when you actually need your heating system to work is if you break something, and it's going to take some time to fix, then your house is going to get very cold while you do it!

If I want to maintain a high WAF then I am testing this stuff out in the height of summer so that it works perfectly by the time the heating needs to come on!

I agree, but I am beyond that.

I want to tune the PID and so need a working system with a genuine heat demand to give proper heat losses with no assistance from the environment. Also, considering the price of energy and the time of year, I don't think SWMBO would like me heating the Living Room up that much 'just to play' :lol

Ooh you are well beyond that then. I look forward to reading how you get on with your PID. I have decided not to try to do that and I rely on my TRVs maintaining set temperatures . I keep my circulating tempeature high because the main benefit I gain from my system is to be able to turn off / down rooms I am not using on schedules. That does mean though that when they come on again, they need to respond quickly.

Having said that I am noticing that, in places, a set temperature that feels comfortable in the winter, feels too warm in the summer so I am looking at perhaps adjusting the set temperature based on outside temperatures. I'll look forward to seeing what you come up with.

I have been varying the flow temperature of the circulating water depending upon what it is required for (water or heating) and also a smaller variation for outdoor temperatures.

New Condensing Boiler to be installed at the end of the month, I will need to re-educate myself on how it will affect the system and also consider how to use OpenTherm (it is equipped for that!) once I have some experience. Trouble is, I might/will be fighting a 'Smart Controller'.

Yes, there are many factors that change the apparent comfort at the same temperature. In the summer an indoor temperature of 18Ā°C is comfortable but in the winter it feels cool. Age, health, activity and humidity also change things of course as do drafts.

One of the issues I have with the Drayton Wiser smart heating system is that its app only has 1 set of schedules rather than swappable ones - one of the reasons for my custom node of course :slight_smile:

I seem to remember that it is not efficient to keep modern combi's at a high circulating temperature - though I might be wrong. Certainly the recent guidance I've seen suggests that you should reduce the temperature to a minimum that still works for you - 50-60Ā°? is that right, I think it is. If I remember correctly, you want the return temperature to be as low as possible compared to the output temp. Of course, my memory is notorious so maybe I got that wrong.

You will certainly want that, it gives you far greater saving on energy since it means that you don't just have to turn on or off the heating jets but can vary them.

I have given a lot of consideration to OpenTherm and have decided that for my use case it is actually a backward step (although I am persuadable that I am wrong). The question boils down to do I control my radiators by adjusting the temperature of the water flowing through them or by adjusting the flow rate. Either can achieve the same effect - lower temperature higher flow rate or higher temperature lower flow rate for the same units of heat per minute.

What I don't want to do is try to control both - too many degrees of freedom in the system.

With individually controllable radiators I can have some radiators off, some at 5% and some at 90% depending on the setpoint, the current temperature and the heat losses from the room. I have 17 radiators.

BUT if I drop the circulating temperature then a) the valves might get confused about their own PID but mostly b) if say the living room comes on in the evening (because it's not used until then) and the other bits of the house being used are already up to temperature so the water temperature has dropped, then the last room will take ages to heat up instead of heating up quickly with a higher water temperature. OR I have to have some very complex logic that notices I have one room that's way below its new setpoint and cranks up the water temperature but then the valves in the other rooms are now all wrong for the new amount of power they will suddenly receive. Too many variables - nightmare.

OpenTherm is fine for systems where you heat the whole house all of the time and many houses operate like this so in those cases it's a step forward. I can see advantages between say spring and summer too, but for day-to-day control, if you need rooms to respond quickly because you have an effective zoning system and individual scheduling, I'm not convinced it's any help.

Indeed. That's why I went for my EQ-3 system several years ago. I now run it through homegear, which provides an RPC protocol over MQTT over which I can shove new schedules using Node-Red at will. If / when one of my valves breaks I am pretty sure I will gradually move over to EQ-3's Homematic-IP which basically uses the same protocols. By the way I am currently having a high old time upgrading the user interface using your brilliant uibuilder, vue.js and vuetify (vuetify is working perfectly and I think I prefer it to Bootstrap) to give an overview of every room, modes, setpoints, valve states etc and to be able to push new profiles to selected rooms (or the whole house) quickly. I went on holiday recently and turned down the radiators as I was waiting for my flight and turned a select few back on on my way home.

I use OpenHab as we have discussed elsewhere for most of my interfacing with automation hardware and Node-Red for the brains. I have eschewed OpenHab 3's fancy new user interface and Node-Red's dashboard because Uibuilder really has made it so simple but with maximum flexibility to be able to do exactly what I want so thank-you. I hope to be able to share something with the rest of the class soon.

Yes, it is suggested that to increase the efficiency of a Condensing Boiler efficiency by the last ~10% you need to operate in the Condensing region of the boiler, which appears to be specced at 50deg out/30 return, some even showing 40 out/30 return for efficiency calculations reaching 98%.

From Viessmann...

What is the best temperature for a condensing boiler?

A condensing boiler is one of the most efficient types of boiler. This is because it is able to recover virtually all the heat from the flue gases and use this to heat your home. For the boiler to work at its most efficient, the heat exchanger needs to be equal to or below the dew point temperature. The dew point temperature is a measurement that determines the humidity of air and is the temperature at which water droplets form in the heat exchanger. For gas boilers, the dew point is around 55 Ā°C. This means that the water needs to be 55 Ā°C or lower for your boiler to maintain its efficiency.

(The Vitodens has a variable speed pump, so as demand goes down, it slows and Temp difference will increase (I think/hope!).)

As I have a collection of large and small radiators (for room size), I will have to change some of these to take advantage of this operating region.

Currently looking at an OpenTherm Gateway based on the Schelte Bron unit. Price looks excellent and the firmware support seems solid in Europe.

Back to the Shelly Radiator Valves, a couple of 'main' valves will control more important radiators while others will be adjusted with manual valves that can be adjusted to suit 'the next few days because we have visitors' or 'extremely cold weather' scenarios.

We shall see, the beauty is that with Node-RED in play, it can be tweaked to suit. ...and I had better get the Gateway ordered!!

My Wiser node lets you do this with the Drayton Wiser system - although it could do with some improvements in the scheduling area. :wink:

Well, it will be an interesting experiment if nothing else. :grinning: You may want to do some reading on other home automation forums about OpenTherm if you haven't already. I certainly don't know enough about the detail and my boiler is too old to have it. But I do know that the Wiser system supports and recommends it along-side the per-room TRV's and optional multi-zoning.

Phew, I didn't just make that up then! I'm impressed :smile_cat:

Ouch, just looked at one and it was half the cost of a Wiser smart heating starter kit. That's a lot.

Yes, with both open and non-open systems! :grinning: