Category Archives: Hive

Hive Thermostat flow

Currently the flow for Node Red is ReadOnly – I use it to interrogate the status for Alexa and other things. It will be quite easy to modify to update settings.

Note that you will need to add the node-red-contrib-json node to the palette. With NR now supporting JSONata, we may be able to tune this a little!.

You will need to set your Username and Password as well as your MQTT topics. Rough code but works reliably!


[{"id":"643b2abe.1e50ec","type":"inject","z":"49ec9dd5.c83ccc","name":"","topic":"","payload":"","payloadType":"date","repeat":"60","crontab":"","once":false,"x":220.5,"y":83.75,"wires":[["19b17aca.6a05ad"]]},{"id":"208e46fe.e89bea","type":"http request","z":"49ec9dd5.c83ccc","name":"","method":"POST","ret":"txt","url":"","tls":"","x":595.5,"y":84.75,"wires":[["76b6ab17.670644"]]},{"id":"19b17aca.6a05ad","type":"function","z":"49ec9dd5.c83ccc","name":"Build Hive Login","func":"//msg.url = \"https://api.prod.bgchprod.info:443/omnia/auth/sessions\";\nmsg.url = \"https://api-prod.bgchprod.info/omnia/auth/sessions\";\nmsg.headers = {\"Content-Type\": \"application/vnd.alertme.zoo-6.1+json\", \"Accept\":\"application/vnd.alertme.zoo-6.1+json\",\"X-Omnia-Client\":\"Hive Web Dashboard\"};\nmsg.payload = {\"sessions\": [{\"username\": \"[email protected]\",\"password\": \"password\",\"caller\":\"WEB\"}]};\nreturn msg;","outputs":1,"noerr":0,"x":402.5,"y":83.75,"wires":[["208e46fe.e89bea"]]},{"id":"76b6ab17.670644","type":"json","z":"49ec9dd5.c83ccc","name":"","x":751.5,"y":84.75,"wires":[["3cd7fbe0.459b8c"]]},{"id":"43e03b7.f0a7844","type":"function","z":"49ec9dd5.c83ccc","name":"Build Nodes request","func":"//sessionid = msg.payload.sessions[0].id;\n//msg.url = \"https://api.prod.bgchprod.info:443/omnia/nodes\";\nmsg.url = \"https://api-prod.bgchprod.info/omnia/nodes\";\nmsg.headers = {\"Content-Type\": \"application/vnd.alertme.zoo-6.1+json\", \"Accept\":\"application/vnd.alertme.zoo-6.1+json\",\"X-Omnia-Client\":\"Hive Web Dashboard\", \"X-Omnia-Access-Token\":global.get(\"hivesessionid\")};\nreturn msg;","outputs":1,"noerr":0,"x":408.24993896484375,"y":164,"wires":[["f9ac83a3.ffcaa8"]]},{"id":"f9ac83a3.ffcaa8","type":"http request","z":"49ec9dd5.c83ccc","name":"","method":"GET","ret":"txt","url":"","tls":"","x":608.2499389648438,"y":166.25,"wires":[["19a14632.8d09ba","a31f8007.ebaa68"]]},{"id":"19a14632.8d09ba","type":"json","z":"49ec9dd5.c83ccc","name":"","x":157.5,"y":319.2500305175781,"wires":[["439db97.234c248","34c5db4d.1fc25c","6faf9e8f.ff645","1056f9eb.f58fee","b17dc096.112d68","7d797a80.740444"]]},{"id":"bc60a6cc.b97d","type":"json","z":"49ec9dd5.c83ccc","name":"","x":626.25,"y":314.2500305175781,"wires":[["4cf41c36.04afc4"]]},{"id":"439db97.234c248","type":"contrib-json","z":"49ec9dd5.c83ccc","engine":"JSONPath","command":"jq","expr":"$...attributes.stateHeatingRelay.reportedValue","complete":"property","prop":"payload","name":"Heating Relay","x":424.75,"y":403.91668701171875,"wires":[["edaf4660.36566"]]},{"id":"edaf4660.36566","type":"json","z":"49ec9dd5.c83ccc","name":"","x":636.333251953125,"y":406.2500305175781,"wires":[["a585d597.5cac6"]]},{"id":"34c5db4d.1fc25c","type":"contrib-json","z":"49ec9dd5.c83ccc","engine":"JSONPath","command":"jq","expr":"$...attributes.activeHeatCoolMode.reportedValue","complete":"property","prop":"payload","name":"Heating Mode","x":449.5,"y":552.6666870117188,"wires":[["7642a894.1bf51"]]},{"id":"7642a894.1bf51","type":"json","z":"49ec9dd5.c83ccc","name":"","x":672.3331909179688,"y":602.75,"wires":[["52dae72f.0aa0f8"]]},{"id":"6faf9e8f.ff645","type":"contrib-json","z":"49ec9dd5.c83ccc","engine":"JSONPath","command":"jq","expr":"$...attributes.stateHotWaterRelay.reportedValue","complete":"property","prop":"payload","name":"HotWater Relay","x":432.75,"y":446.91668701171875,"wires":[["d122a54f.c59c7"]]},{"id":"d122a54f.c59c7","type":"json","z":"49ec9dd5.c83ccc","name":"","x":641.333251953125,"y":449.2500305175781,"wires":[["2c57f758.a707a8"]]},{"id":"b7ec3fdf.c49938","type":"debug","z":"49ec9dd5.c83ccc","name":"serverConnectionState","active":false,"console":"false","complete":"payload","x":1053.8336181640625,"y":538.25,"wires":[]},{"id":"1056f9eb.f58fee","type":"contrib-json","z":"49ec9dd5.c83ccc","engine":"JSONPath","command":"jq","expr":"$...attributes.serverConnectionState.reportedValue","complete":"property","prop":"payload","name":"serverConnectionState","x":464.75,"y":500.91668701171875,"wires":[["894fb7ac.cfa1d"]]},{"id":"894fb7ac.cfa1d","type":"json","z":"49ec9dd5.c83ccc","name":"","x":651.333251953125,"y":503.2500305175781,"wires":[["5f5991d1.00008"]]},{"id":"b17dc096.112d68","type":"contrib-json","z":"49ec9dd5.c83ccc","engine":"JSONPath","command":"jq","expr":"$...attributes.targetHeatTemperature.reportedValue","complete":"property","prop":"payload","name":"Get target temperature","x":440.75,"y":356.91668701171875,"wires":[["70a8237c.8363ec"]]},{"id":"70a8237c.8363ec","type":"json","z":"49ec9dd5.c83ccc","name":"","x":637.333251953125,"y":358.2500305175781,"wires":[["25f2ae4e.9c5a5a"]]},{"id":"13de7ae0.7c8d1d","type":"split","z":"49ec9dd5.c83ccc","name":"","splt":"\",\"","x":1001.25,"y":618.7500610351562,"wires":[["fc978ec0.2df78"]]},{"id":"e421221f.c966d8","type":"debug","z":"49ec9dd5.c83ccc","name":"Water Mode","active":false,"console":"false","complete":"payload","x":998,"y":673.75,"wires":[]},{"id":"5f5991d1.00008","type":"change","z":"49ec9dd5.c83ccc","name":"normalise","rules":[{"t":"change","p":"payload","pt":"msg","from":"[","fromt":"str","to":"","tot":"str"},{"t":"change","p":"payload","pt":"msg","from":"]","fromt":"str","to":"","tot":"str"},{"t":"change","p":"payload","pt":"msg","from":"\"","fromt":"str","to":"","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":813.25,"y":509.2500305175781,"wires":[["b7ec3fdf.c49938"]]},{"id":"2c57f758.a707a8","type":"change","z":"49ec9dd5.c83ccc","name":"normalise","rules":[{"t":"change","p":"payload","pt":"msg","from":"[","fromt":"str","to":"","tot":"str"},{"t":"change","p":"payload","pt":"msg","from":"]","fromt":"str","to":"","tot":"str"},{"t":"change","p":"payload","pt":"msg","from":"\"","fromt":"str","to":"","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":814.5,"y":456.7500305175781,"wires":[["8ce96ab4.aea148","b0c156b1.ee8dd"]]},{"id":"a585d597.5cac6","type":"change","z":"49ec9dd5.c83ccc","name":"normalise","rules":[{"t":"change","p":"payload","pt":"msg","from":"[","fromt":"str","to":"","tot":"str"},{"t":"change","p":"payload","pt":"msg","from":"]","fromt":"str","to":"","tot":"str"},{"t":"change","p":"payload","pt":"msg","from":"\"","fromt":"str","to":"","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":813.75,"y":406.2500305175781,"wires":[["4057512f.4dea3"]]},{"id":"25f2ae4e.9c5a5a","type":"change","z":"49ec9dd5.c83ccc","name":"normalise","rules":[{"t":"change","p":"payload","pt":"msg","from":"[","fromt":"str","to":"","tot":"str"},{"t":"change","p":"payload","pt":"msg","from":"]","fromt":"str","to":"","tot":"str"},{"t":"change","p":"payload","pt":"msg","from":"\"","fromt":"str","to":"","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":803.75,"y":358.2500305175781,"wires":[["7b8abb6b.1f7cdc"]]},{"id":"4cf41c36.04afc4","type":"change","z":"49ec9dd5.c83ccc","name":"normalise","rules":[{"t":"change","p":"payload","pt":"msg","from":"[","fromt":"str","to":"","tot":"str"},{"t":"change","p":"payload","pt":"msg","from":"]","fromt":"str","to":"","tot":"str"},{"t":"change","p":"payload","pt":"msg","from":"\"","fromt":"str","to":"","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":796.75,"y":312.2500305175781,"wires":[["f3372eb1.b86198","a43ff107.11564"]]},{"id":"fc978ec0.2df78","type":"switch","z":"49ec9dd5.c83ccc","name":"Split Water and Heating","property":"payload","propertyType":"msg","rules":[{"t":"cont","v":"[\"","vt":"str"},{"t":"else"}],"checkall":"true","outputs":2,"x":548.75,"y":689.75,"wires":[["9742b21d.50a868"],["f94862f4.182f48"]]},{"id":"9742b21d.50a868","type":"change","z":"49ec9dd5.c83ccc","name":"normalise","rules":[{"t":"change","p":"payload","pt":"msg","from":"[","fromt":"str","to":"","tot":"str"},{"t":"change","p":"payload","pt":"msg","from":"]","fromt":"str","to":"","tot":"str"},{"t":"change","p":"payload","pt":"msg","from":"\"","fromt":"str","to":"","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":787,"y":691.25,"wires":[["e421221f.c966d8","fc06b2e3.f48de8"]]},{"id":"f94862f4.182f48","type":"change","z":"49ec9dd5.c83ccc","name":"normalise","rules":[{"t":"change","p":"payload","pt":"msg","from":"[","fromt":"str","to":"","tot":"str"},{"t":"change","p":"payload","pt":"msg","from":"]","fromt":"str","to":"","tot":"str"},{"t":"change","p":"payload","pt":"msg","from":"\"","fromt":"str","to":"","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":781,"y":748.25,"wires":[["c3a97850.7968f8","755c2a0a.bb6614"]]},{"id":"52dae72f.0aa0f8","type":"change","z":"49ec9dd5.c83ccc","name":"Change","rules":[{"t":"change","p":"payload","pt":"msg","from":"HEAT","fromt":"str","to":"SCHEDULED","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":837.375,"y":617.25,"wires":[["13de7ae0.7c8d1d"]]},{"id":"c3a97850.7968f8","type":"debug","z":"49ec9dd5.c83ccc","name":"Heating Mode","active":false,"console":"false","complete":"payload","x":969.875,"y":833,"wires":[]},{"id":"3cd7fbe0.459b8c","type":"function","z":"49ec9dd5.c83ccc","name":"set hivesessionid","func":"global.set(\"hivesessionid\",msg.payload.sessions[0].id);\nreturn msg;","outputs":1,"noerr":0,"x":933.125,"y":85,"wires":[["43e03b7.f0a7844"]]},{"id":"f058b4fb.4a2ef8","type":"http request","z":"49ec9dd5.c83ccc","name":"","method":"DELETE","ret":"txt","url":"","tls":"","x":1034.375,"y":170,"wires":[[]]},{"id":"a31f8007.ebaa68","type":"function","z":"49ec9dd5.c83ccc","name":"Close Session","func":"\nmsg.url = \"https://api-prod.bgchprod.info/omnia/auth/sessions/\"+global.get(\"hivesessionid\");\nmsg.headers = {\"Content-Type\": \"application/vnd.alertme.zoo-6.1+json\", \"Accept\":\"application/vnd.alertme.zoo-6.1+json\",\"X-Omnia-Client\":\"Hive Web Dashboard\", \"X-Omnia-Access-Token\":global.get(\"hivesessionid\")};\nreturn msg;","outputs":1,"noerr":0,"x":847.5,"y":168.75,"wires":[["f058b4fb.4a2ef8"]]},{"id":"f3372eb1.b86198","type":"mqtt out","z":"49ec9dd5.c83ccc","name":"","topic":"House/Hive/heating/temperature","qos":"","retain":"","broker":"34fe01cb.7a1b06","x":1111.875,"y":270.9375,"wires":[]},{"id":"7b8abb6b.1f7cdc","type":"mqtt out","z":"49ec9dd5.c83ccc","name":"","topic":"House/Hive/heating/target","qos":"","retain":"","broker":"34fe01cb.7a1b06","x":1093.75,"y":328.75,"wires":[]},{"id":"4057512f.4dea3","type":"mqtt out","z":"49ec9dd5.c83ccc","name":"","topic":"House/Hive/heating/relay","qos":"","retain":"","broker":"34fe01cb.7a1b06","x":1080,"y":373.75,"wires":[]},{"id":"8ce96ab4.aea148","type":"mqtt out","z":"49ec9dd5.c83ccc","name":"","topic":"House/Hive/water/relay","qos":"","retain":"","broker":"34fe01cb.7a1b06","x":1080,"y":423.75,"wires":[]},{"id":"fc06b2e3.f48de8","type":"mqtt out","z":"49ec9dd5.c83ccc","name":"","topic":"House/Hive/water/control","qos":"","retain":"","broker":"34fe01cb.7a1b06","x":1060.5,"y":725,"wires":[]},{"id":"b0c156b1.ee8dd","type":"debug","z":"49ec9dd5.c83ccc","name":"","active":false,"console":"false","complete":"false","x":1028.5,"y":481.75,"wires":[]},{"id":"755c2a0a.bb6614","type":"mqtt out","z":"49ec9dd5.c83ccc","name":"","topic":"House/Hive/heating/control","qos":"","retain":"","broker":"34fe01cb.7a1b06","x":1062,"y":788,"wires":[]},{"id":"15a3ca8b.7e044d","type":"comment","z":"49ec9dd5.c83ccc","name":"WARNING!!!","info":"this bit is clunky - \nI should find a better way to make sure \nwhich is water and which is heating\nrather than taking the order into account.\n\n\n","x":470,"y":643.75,"wires":[]},{"id":"c35a4515.4944f8","type":"comment","z":"49ec9dd5.c83ccc","name":"PASSWORD!","info":"","x":404,"y":49,"wires":[]},{"id":"7d797a80.740444","type":"contrib-json","z":"49ec9dd5.c83ccc","engine":"JSONPath","command":"jq","expr":"$...attributes.temperature.reportedValue","complete":"property","prop":"payload","name":"Get temperature","x":420,"y":300,"wires":[["bc60a6cc.b97d"]]},{"id":"a43ff107.11564","type":"debug","z":"49ec9dd5.c83ccc","name":"","active":false,"console":"false","complete":"false","x":1026,"y":224.5,"wires":[]},{"id":"34fe01cb.7a1b06","type":"mqtt-broker","z":"","broker":"192.168.1.22","port":"1883","clientid":"","usetls":false,"verifyservercert":true,"compatmode":true,"keepalive":"15","cleansession":true,"willTopic":"","willQos":"0","willRetain":null,"willPayload":"","birthTopic":"","birthQos":"0","birthRetain":null,"birthPayload":""}]

 
(updated 19th Oct 2017)
 

 

Hive Active – Thermostat readings into MQTT

I have switched from my Tado system to the new British Gas Hive system  (https://www.hivehome.com) as the control unit is much more wife friendly. Screen Shot 2015-10-30 at 19.09.31

The Tado system (at the time) did not have an official API so I had to build an integration into NodeRed to link it with my Home Automation system. The Tado system was very good at determining whether we were home or not, and switching the heating off when not needed.

The Hive system only sends a message when leaving or approaching home (at present) and without an API you cannot interact with it.

I found some great information on a forum which enabled me to build a Python application to pull key information from the Hive system and publish it to MQTT. This is based on a hive2emoncms application and updated to use the new API calls.

The current version will read values from Hive – the next will allow the control of Hive Active via MQTT!.

The application supports Hive v1, Hive Active 2, Single Channel and Dual channel controllers.

The code can be downloaded here: Github