Bosch Nefit Easy & Home Assistant

As there was no proper or working integration of my Nefit Easy thermostat available for Home Assistant, I built it in Node Red. It relies on node-red-contrib-nefit-easy2 for communication with the Bosch Nefit Easy as well as node-red-contrib-home-assistant-websocket for communication with Home Assistant (installed using HACS).

You need to add the nefit-easy2 integration in the configuration of your Node-Red (HA Supervisor).

The mode of the thermostat is forced to 'user' so that the clock program is disabled. It's still possible to control the temperature on the thermostat touchscreen, for this the 'Manual Override' is set. To disable the override, set this value to Off.

[{"id":"3d3db46e.d4368c","type":"tab","label":"Nefit Easy","disabled":false,"info":""},{"id":"e335c7d6.277118","type":"nefit-easy","z":"3d3db46e.d4368c","easyconfig":"9b3fffd6.0004f","name":"Set Temperature","topic":"nefit-easy","command":"set-temperature","value":"","x":1020,"y":340,"wires":[["7f78faae.d4f354","4e10b05b.5cee9"]]},{"id":"4e10b05b.5cee9","type":"nefit-easy","z":"3d3db46e.d4368c","easyconfig":"9b3fffd6.0004f","name":"Get Status","topic":"nefit-easy","command":"status","value":"","x":390,"y":420,"wires":[["66041a3f.9452e4","8af96578.1f9e68","62eeb560.9e2d8c","4cb7bf1c.f2686","bdb47f58.2defd","7fa3d682.a2eba8","18b09c2f.2e5494"]]},{"id":"7f78faae.d4f354","type":"debug","z":"3d3db46e.d4368c","name":"Debug (set)","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1330,"y":340,"wires":[]},{"id":"66041a3f.9452e4","type":"ha-entity","z":"3d3db46e.d4368c","name":"HA Room Temperature","server":"3de7e8fb.415cd8","version":1,"debugenabled":false,"outputs":1,"entityType":"sensor","config":[{"property":"name","value":"Nefit Easy Room Temperature"},{"property":"device_class","value":"temperature"},{"property":"icon","value":""},{"property":"unit_of_measurement","value":"°"}],"state":"payload[\"in house temp\"]","stateType":"msg","attributes":[],"resend":true,"outputLocation":"","outputLocationType":"none","inputOverride":"allow","outputOnStateChange":false,"outputPayload":"$entity().state ? \"on\": \"off\"","outputPayloadType":"jsonata","x":720,"y":420,"wires":[["4e48c480.68ec9c"]]},{"id":"8af96578.1f9e68","type":"ha-entity","z":"3d3db46e.d4368c","name":"HA Actual Setpoint","server":"3de7e8fb.415cd8","version":1,"debugenabled":false,"outputs":1,"entityType":"sensor","config":[{"property":"name","value":"Nefit Easy Setpoint"},{"property":"device_class","value":"temperature"},{"property":"icon","value":""},{"property":"unit_of_measurement","value":"°"}],"state":"payload[\"temp setpoint\"]","stateType":"msg","attributes":[],"resend":true,"outputLocation":"","outputLocationType":"none","inputOverride":"allow","outputOnStateChange":false,"outputPayload":"$entity().state ? \"on\": \"off\"","outputPayloadType":"jsonata","x":710,"y":600,"wires":[["36b0ec0e.7c9e04"]]},{"id":"62eeb560.9e2d8c","type":"ha-entity","z":"3d3db46e.d4368c","name":"HA Manual Setpoint","server":"3de7e8fb.415cd8","version":1,"debugenabled":false,"outputs":1,"entityType":"sensor","config":[{"property":"name","value":"Nefit Easy Manual Setpoint"},{"property":"device_class","value":"temperature"},{"property":"icon","value":""},{"property":"unit_of_measurement","value":"°"}],"state":"payload[\"temp manual setpoint\"]","stateType":"msg","attributes":[],"resend":true,"outputLocation":"","outputLocationType":"none","inputOverride":"allow","outputOnStateChange":false,"outputPayload":"$entity().state ? \"on\": \"off\"","outputPayloadType":"jsonata","x":720,"y":660,"wires":[["1361706c.ff546"]]},{"id":"6bdab24.ed9b54c","type":"ha-entity","z":"3d3db46e.d4368c","name":"Enabled","server":"3de7e8fb.415cd8","version":1,"debugenabled":false,"outputs":1,"entityType":"binary_sensor","config":[{"property":"name","value":"Nefit Easy Enabled"},{"property":"device_class","value":"power"},{"property":"icon","value":""},{"property":"unit_of_measurement","value":""}],"state":"payload","stateType":"msg","attributes":[],"resend":true,"outputLocation":"","outputLocationType":"none","inputOverride":"allow","outputOnStateChange":false,"outputPayload":"$entity().state ? \"on\": \"off\"","outputPayloadType":"jsonata","x":1000,"y":180,"wires":[["58df0f0.a9197f"]]},{"id":"95b94e36.028b1","type":"poll-state","z":"3d3db46e.d4368c","name":"Poll Thermostat","server":"3de7e8fb.415cd8","version":1,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"updateinterval":"10","updateIntervalUnits":"seconds","outputinitially":true,"outputonchanged":true,"entity_id":"climate.thermostat_living_room","state_type":"str","halt_if":"","halt_if_type":"str","halt_if_compare":"is","outputs":1,"x":140,"y":260,"wires":[["44485051.873a1"]]},{"id":"beca37ce.993f88","type":"inject","z":"3d3db46e.d4368c","name":"Cyclic Trigger","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"60","crontab":"","once":true,"onceDelay":"10","topic":"","payload":"","payloadType":"date","x":140,"y":420,"wires":[["4e10b05b.5cee9"]]},{"id":"44485051.873a1","type":"switch","z":"3d3db46e.d4368c","name":"Commanded State","property":"data.state","propertyType":"msg","rules":[{"t":"eq","v":"heat","vt":"str"},{"t":"eq","v":"off","vt":"str"},{"t":"eq","v":"idle","vt":"str"},{"t":"else"}],"checkall":"true","repair":false,"outputs":4,"x":410,"y":260,"wires":[["41725228.10262c","55908a8a.06bb94"],["5d50cc02.a5af94","8916e9f5.b40ec8"],["5d50cc02.a5af94","8916e9f5.b40ec8"],["5d50cc02.a5af94","8916e9f5.b40ec8"]]},{"id":"5d50cc02.a5af94","type":"change","z":"3d3db46e.d4368c","name":"Minimal Temperature","rules":[{"t":"set","p":"payload","pt":"msg","to":"data.attributes.min_temp","tot":"msg"},{"t":"delete","p":"data","pt":"msg"},{"t":"delete","p":"topic","pt":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":720,"y":280,"wires":[["46fa0c97.652e34"]]},{"id":"41725228.10262c","type":"change","z":"3d3db46e.d4368c","name":"Heating Temperature","rules":[{"t":"set","p":"payload","pt":"msg","to":"data.attributes.temperature","tot":"msg"},{"t":"delete","p":"data","pt":"msg"},{"t":"delete","p":"topic","pt":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":720,"y":240,"wires":[["46fa0c97.652e34"]]},{"id":"4e48c480.68ec9c","type":"debug","z":"3d3db46e.d4368c","name":"Debug (status)","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1340,"y":420,"wires":[]},{"id":"e7f70de0.6b6fc","type":"switch","z":"3d3db46e.d4368c","name":"Compare Auto/Actual Setpoint","property":"payload","propertyType":"msg","rules":[{"t":"neq","v":"heating_setpoint_act","vt":"flow"}],"checkall":"true","repair":false,"outputs":1,"x":750,"y":340,"wires":[["e335c7d6.277118"]]},{"id":"36b0ec0e.7c9e04","type":"change","z":"3d3db46e.d4368c","name":"Save Actual Setpoint","rules":[{"t":"set","p":"heating_setpoint_act","pt":"flow","to":"payload[\"temp setpoint\"]","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":1040,"y":600,"wires":[[]]},{"id":"1361706c.ff546","type":"change","z":"3d3db46e.d4368c","name":"Save Manual Setpoint","rules":[{"t":"set","p":"heating_setpoint_manual","pt":"flow","to":"payload[\"temp manual setpoint\"]","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":1040,"y":660,"wires":[[]]},{"id":"46fa0c97.652e34","type":"change","z":"3d3db46e.d4368c","name":"Save Auto Setpoint","rules":[{"t":"set","p":"heating_setpoint_set","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":1030,"y":260,"wires":[["572fa063.731db","d6cc0aa0.7edab8"]]},{"id":"4cb7bf1c.f2686","type":"nefit-easy","z":"3d3db46e.d4368c","easyconfig":"9b3fffd6.0004f","name":"Get Pressure","topic":"nefit-easy","command":"pressure","value":"","x":390,"y":780,"wires":[["1ef6222.ad92fde","55bc6b92.33c414"]]},{"id":"55bc6b92.33c414","type":"ha-entity","z":"3d3db46e.d4368c","name":"HA Pressure","server":"3de7e8fb.415cd8","version":1,"debugenabled":false,"outputs":1,"entityType":"sensor","config":[{"property":"name","value":"Nefit Easy Pressure"},{"property":"device_class","value":"pressure"},{"property":"icon","value":""},{"property":"unit_of_measurement","value":"bar"}],"state":"payload[\"pressure\"]","stateType":"msg","attributes":[],"resend":true,"outputLocation":"","outputLocationType":"none","inputOverride":"allow","outputOnStateChange":false,"outputPayload":"$entity().state ? \"on\": \"off\"","outputPayloadType":"jsonata","x":690,"y":780,"wires":[["95f360bd.a6c2f"]]},{"id":"95f360bd.a6c2f","type":"debug","z":"3d3db46e.d4368c","name":"Debug (pressure)","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1350,"y":780,"wires":[]},{"id":"1ef6222.ad92fde","type":"nefit-easy","z":"3d3db46e.d4368c","easyconfig":"9b3fffd6.0004f","name":"Get Flow","topic":"nefit-easy","command":"flow-temperature","value":"","x":380,"y":840,"wires":[["e8d61a09.115b38","b179387a.dc6df8"]]},{"id":"862eccbd.32fb8","type":"debug","z":"3d3db46e.d4368c","name":"Debug (flow)","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1330,"y":840,"wires":[]},{"id":"e8d61a09.115b38","type":"ha-entity","z":"3d3db46e.d4368c","name":"HA Flow Temperature","server":"3de7e8fb.415cd8","version":1,"debugenabled":false,"outputs":1,"entityType":"sensor","config":[{"property":"name","value":"Nefit Easy Flow Temperature"},{"property":"device_class","value":"temperature"},{"property":"icon","value":""},{"property":"unit_of_measurement","value":" °"}],"state":"payload[\"temperature\"]","stateType":"msg","attributes":[],"resend":true,"outputLocation":"","outputLocationType":"none","inputOverride":"allow","outputOnStateChange":false,"outputPayload":"$entity().state ? \"on\": \"off\"","outputPayloadType":"jsonata","x":720,"y":840,"wires":[["862eccbd.32fb8"]]},{"id":"961be3cf.ab94d","type":"ha-entity","z":"3d3db46e.d4368c","name":"HA Manual Override","server":"3de7e8fb.415cd8","version":1,"debugenabled":false,"outputs":2,"entityType":"switch","config":[{"property":"name","value":"Nefit Easy Manual Override"},{"property":"device_class","value":"none"},{"property":"icon","value":""},{"property":"unit_of_measurement","value":""}],"state":"payload","stateType":"msg","attributes":[],"resend":true,"outputLocation":"","outputLocationType":"none","inputOverride":"allow","outputOnStateChange":false,"outputPayload":"$entity().state ? \"on\": \"off\"","outputPayloadType":"jsonata","x":1040,"y":1100,"wires":[["a72f8a7a.3ec0b8"],[]]},{"id":"da821291.2ebcc","type":"switch","z":"3d3db46e.d4368c","name":"Compare Auto/Manual Setpoint","property":"heating_setpoint_manual","propertyType":"flow","rules":[{"t":"neq","v":"heating_setpoint_set","vt":"flow"},{"t":"eq","v":"heating_setpoint_set","vt":"flow"}],"checkall":"true","repair":false,"outputs":2,"x":450,"y":1100,"wires":[["22747987.2a97b6"],["a3532864.663b68"]]},{"id":"22747987.2a97b6","type":"change","z":"3d3db46e.d4368c","name":"Save Manual Override ON","rules":[{"t":"set","p":"payload","pt":"msg","to":"1","tot":"str"},{"t":"set","p":"heating_manual","pt":"flow","to":"on","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":740,"y":1080,"wires":[["961be3cf.ab94d"]]},{"id":"a3532864.663b68","type":"change","z":"3d3db46e.d4368c","name":"Save Manual Override OFF","rules":[{"t":"set","p":"payload","pt":"msg","to":"0","tot":"str"},{"t":"set","p":"heating_manual","pt":"flow","to":"off","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":740,"y":1120,"wires":[["961be3cf.ab94d"]]},{"id":"572fa063.731db","type":"switch","z":"3d3db46e.d4368c","name":"No Manual Override","property":"heating_manual","propertyType":"flow","rules":[{"t":"eq","v":"off","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":420,"y":340,"wires":[["e7f70de0.6b6fc"]]},{"id":"591297a.8b54568","type":"poll-state","z":"3d3db46e.d4368c","name":"Poll Manual Override","server":"3de7e8fb.415cd8","version":1,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"updateinterval":"10","updateIntervalUnits":"seconds","outputinitially":true,"outputonchanged":true,"entity_id":"switch.nefit_easy_manual_override","state_type":"str","halt_if":"","halt_if_type":"str","halt_if_compare":"is","outputs":1,"x":120,"y":40,"wires":[["18b167a2.416d48"]]},{"id":"7a272059.7d9ad","type":"debug","z":"3d3db46e.d4368c","name":"Debug (manual)","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1340,"y":40,"wires":[]},{"id":"b2e7e85d.1e7fd8","type":"change","z":"3d3db46e.d4368c","name":"Load Auto Setpoint","rules":[{"t":"set","p":"payload","pt":"msg","to":"heating_setpoint_set","tot":"flow"}],"action":"","property":"","from":"","to":"","reg":false,"x":710,"y":40,"wires":[["e335c7d6.277118"]]},{"id":"18b167a2.416d48","type":"switch","z":"3d3db46e.d4368c","name":"Compare Manual Override","property":"payload","propertyType":"msg","rules":[{"t":"neq","v":"heating_manual","vt":"flow"}],"checkall":"true","repair":false,"outputs":1,"x":440,"y":40,"wires":[["7a272059.7d9ad","b2e7e85d.1e7fd8"]]},{"id":"a72f8a7a.3ec0b8","type":"debug","z":"3d3db46e.d4368c","name":"Debug (override)","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1350,"y":1100,"wires":[]},{"id":"bdb47f58.2defd","type":"ha-entity","z":"3d3db46e.d4368c","name":"HA Boiler Indicator","server":"3de7e8fb.415cd8","version":1,"debugenabled":false,"outputs":1,"entityType":"sensor","config":[{"property":"name","value":"Nefit Easy Boiler Indicator"},{"property":"device_class","value":""},{"property":"icon","value":""},{"property":"unit_of_measurement","value":""}],"state":"payload[\"boiler indicator\"]","stateType":"msg","attributes":[],"resend":true,"outputLocation":"","outputLocationType":"none","inputOverride":"allow","outputOnStateChange":false,"outputPayload":"$entity().state ? \"on\": \"off\"","outputPayloadType":"jsonata","x":710,"y":480,"wires":[[]]},{"id":"7fa3d682.a2eba8","type":"ha-entity","z":"3d3db46e.d4368c","name":"HA Outdoor Temperature","server":"3de7e8fb.415cd8","version":1,"debugenabled":false,"outputs":1,"entityType":"sensor","config":[{"property":"name","value":"Nefit Easy Outdoor Temperature"},{"property":"device_class","value":"temperature"},{"property":"icon","value":""},{"property":"unit_of_measurement","value":"°"}],"state":"payload[\"outdoor temp\"]","stateType":"msg","attributes":[],"resend":true,"outputLocation":"","outputLocationType":"none","inputOverride":"allow","outputOnStateChange":false,"outputPayload":"$entity().state ? \"on\": \"off\"","outputPayloadType":"jsonata","x":730,"y":540,"wires":[[]]},{"id":"18b09c2f.2e5494","type":"switch","z":"3d3db46e.d4368c","name":"Check User Mode","property":"payload[\"user mode\"]","propertyType":"msg","rules":[{"t":"neq","v":"manual","vt":"flow"}],"checkall":"true","repair":false,"outputs":1,"x":710,"y":720,"wires":[["a81b96e5.758f88"]]},{"id":"a81b96e5.758f88","type":"nefit-easy","z":"3d3db46e.d4368c","easyconfig":"9b3fffd6.0004f","name":"Set User Mode (Manual)","topic":"nefit-easy","command":"set-usermode","value":"manual","x":1050,"y":720,"wires":[["6f07bf1f.be914"]]},{"id":"6f07bf1f.be914","type":"debug","z":"3d3db46e.d4368c","name":"Debug (user mode)","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1350,"y":720,"wires":[]},{"id":"d6cc0aa0.7edab8","type":"debug","z":"3d3db46e.d4368c","name":"Debug (setpoint)","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1350,"y":260,"wires":[]},{"id":"b179387a.dc6df8","type":"nefit-easy","z":"3d3db46e.d4368c","easyconfig":"9b3fffd6.0004f","name":"Get Statuscode","topic":"nefit-easy","command":"display-code","value":"","x":400,"y":900,"wires":[["da821291.2ebcc","56074fd7.31a6c","81202d19.3364a","660fe9aa.3713c8"]]},{"id":"97c5cbb6.199d98","type":"debug","z":"3d3db46e.d4368c","name":"Debug (statuscode)","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1350,"y":900,"wires":[]},{"id":"660fe9aa.3713c8","type":"ha-entity","z":"3d3db46e.d4368c","name":"HA Status Description","server":"3de7e8fb.415cd8","version":1,"debugenabled":false,"outputs":1,"entityType":"sensor","config":[{"property":"name","value":"Nefit Easy Status Description"},{"property":"device_class","value":""},{"property":"icon","value":""},{"property":"unit_of_measurement","value":""}],"state":"payload[\"description\"]","stateType":"msg","attributes":[],"resend":true,"outputLocation":"","outputLocationType":"none","inputOverride":"allow","outputOnStateChange":false,"outputPayload":"$entity().state ? \"on\": \"off\"","outputPayloadType":"jsonata","x":720,"y":1020,"wires":[[]]},{"id":"56074fd7.31a6c","type":"ha-entity","z":"3d3db46e.d4368c","name":"HA Status Code","server":"3de7e8fb.415cd8","version":1,"debugenabled":false,"outputs":1,"entityType":"sensor","config":[{"property":"name","value":"Nefit Easy Status Code"},{"property":"device_class","value":""},{"property":"icon","value":""},{"property":"unit_of_measurement","value":""}],"state":"payload[\"code\"]","stateType":"msg","attributes":[],"resend":true,"outputLocation":"","outputLocationType":"none","inputOverride":"allow","outputOnStateChange":false,"outputPayload":"$entity().state ? \"on\": \"off\"","outputPayloadType":"jsonata","x":700,"y":900,"wires":[["97c5cbb6.199d98"]]},{"id":"81202d19.3364a","type":"ha-entity","z":"3d3db46e.d4368c","name":"HA Status Cause","server":"3de7e8fb.415cd8","version":1,"debugenabled":false,"outputs":1,"entityType":"sensor","config":[{"property":"name","value":"Nefit Easy Status Cause"},{"property":"device_class","value":""},{"property":"icon","value":""},{"property":"unit_of_measurement","value":""}],"state":"payload[\"cause\"]","stateType":"msg","attributes":[],"resend":true,"outputLocation":"","outputLocationType":"none","inputOverride":"allow","outputOnStateChange":false,"outputPayload":"$entity().state ? \"on\": \"off\"","outputPayloadType":"jsonata","x":710,"y":960,"wires":[[]]},{"id":"58df0f0.a9197f","type":"debug","z":"3d3db46e.d4368c","name":"Debug (enabled)","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1350,"y":180,"wires":[]},{"id":"55908a8a.06bb94","type":"change","z":"3d3db46e.d4368c","name":"Set On","rules":[{"t":"set","p":"payload","pt":"msg","to":"1","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":680,"y":160,"wires":[["6bdab24.ed9b54c"]]},{"id":"8916e9f5.b40ec8","type":"change","z":"3d3db46e.d4368c","name":"Set Off","rules":[{"t":"set","p":"payload","pt":"msg","to":"0","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":670,"y":200,"wires":[["6bdab24.ed9b54c"]]},{"id":"9b3fffd6.0004f","type":"nefit-easy-config","serialNumber":"","accessKey":"","password":"","timeout":"30","filterInfoMessages":false},{"id":"3de7e8fb.415cd8","type":"server","name":"Home Assistant","legacy":false,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true}]

Flow Info

Created 4 years, 6 months ago
Rating: not yet rated

Owner

Actions

Rate:

Node Types

Core
  • change (x10)
  • debug (x10)
  • inject (x1)
  • switch (x6)
Other
  • ha-entity (x12)
  • nefit-easy (x6)
  • nefit-easy-config (x1)
  • poll-state (x2)
  • server (x1)
  • tab (x1)

Tags

  • nefiteasy
  • bosch
  • homeassistant
  • easy
  • thermostat
Copy this flow JSON to your clipboard and then import into Node-RED using the Import From > Clipboard (Ctrl-I) menu option