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 = \"\";\nmsg.url = \"\";\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 = \"\";\nmsg.url = \"\";\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 = \"\"+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":"","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)


IoTBox and the Internet of Things Foundation

The IoTBox was born out of the realisation that we needed a physical “tool” to show how we can interact with other systems – such as IBM Maximo. We have always talked about how easy it is to integrate – but how could we prove it?.

The IoTBox started with the ability to use REST calls to update mqttsystems with temperature readings. This was useful, but hardly IoT!. Next, MQTT support was added – the temperature can be sent, along with Button presses to an MQTT broker and the RGB LED and screen can be changed with MQTT messages. This, combined with Node Red, allows us to manipulate messages,  create alerts and provide ‘intelligence’ to the small processor in the IoTBox.

However, although we can talk to our servers and pcs across the Internet – this is not really cloud based.

iotThumbWith this in mind, I decided to also add the ability for the IoTBox to talk with IBM’s Internet of Things Foundation. This cloud offering is free to use for development and includes services such as Node Red, Real Time Analytics, Time Series databases and of course – Watson!.

The IoTF Real Time Analytics Team have made some great enhancements recently: The ability to create alerts from sensor values – this includes E-mail, Node Red calls and now IFTTT integration!.

The IoTBox will use both modes of IoTF – Quickstart (no registration required) and Registered (allows the full use of IoTF).

Screen Shot 2015-11-30 at 17.04.53The new IoTF Registered mode allows the LED and OLED screen to be controlled by the IoTF cloud.

For example, a cloud based Maximo offering can create a  work order based on a temperature reading from the IoTBox. The LED on the IoTBox could turn blue and a message on the screen will alert the user to the new work order number.

This is now very easy to do!. In the following post, I will detail the full steps required to connect to IBM’s IoTF cloud service.


Hive Active – Thermostat readings into MQTT

I have switched from my Tado system to the new British Gas Hive system  ( 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

IoTBox: Instructions for use

When power is applied to the IoTBox, it will try to connect to the stored WiFi access point and will show the IP address on the screen if successful. The screen will show an error message if it cannot connect.

The IoTBox uses two WiFi modes simultaneously:

  1. Client Mode = It will connect to an Access Point.
  2. Access Point Mode = It will behave as an Access Point.

To configure the IoTBox, look for an open network with the same ID as shown on the OLED display, it will be similar to “iotbox00fcf9ab”.

IoTBox MenuWhen connected, your PC/Mac or Phone will have an address of and the IoTBox menu will be found at

The first thing to do is to upgrade to the latest version of the WiFi SettingsIoTBox firmware. For this, you will need to be connected to an external Access Point chosen on the WiFi settings page and then select OTA Upgrade. The IoTBox will download the updated firmware and then reboot into the new version.

The ESP8266 on the IoTBox is configured as two slots. The OTA firmware is downloaded and stored in the other slot. If it has downloaded correctly, it will reboot into the other slot. You may switch back to the old version by using the Switch ROM menu option.

If you have configured something that is causing an issue with the IoTBox, you can reset it using the button (wired to GPIO0). The button on the IoTBox has three functions:

  1. If the button is held down while powering on, you can update the firmware on the chip with a programmer. This is only required when putting the initial firmware on the chip.
  2. If the button is pressed for more than 0.5 seconds and less than 10 seconds (2 seconds is ideal), a message is sent to the button MQTT topic.
  3. If the button is pressed for more than 10 seconds, the settings are cleared to the default values. You will need to set the WiFi and MQTT parameters again.


MQTT Topics

IoTBox has an MQTT v3.1 client built into the firmware and is the main way of communicating to other systems. When MQTT is enabled, it will try to connect every 10 seconds and when successful, it will post “online’ to the LWT topic.MQTT Menu

The following topics are supported:

Note: MQTT can use wildcards, such as ‘+’. This means that a subscription to ‘+/out/led/1’ will pick up data for ‘iotbox00112233/out/led/1’ and ‘iotbox56229922/out/led/1’. This is useful when sending  the same information to many devices.

LED: For the example shown above, the IoTBox is listening on:

  • +/out/led/1
  • +/out/led/2
  • +/out/led/3

A payload of ‘0’ or ‘1’  to these topics switches the LED colour (red, green or blue) off or on. This will likely change in the future to support PWM and a single Topic.

DISPLAY: For the example shown above, the IoTBox is listening on:

  • +/out/display/0
  • +/out/display/1
  • +/out/display/2
  • +/out/display/3
  • +/out/display/4

A payload of upto 20 characters will be displayed on lines 3-8 on the OLED screen. Useful for notifications and information.

BUTTON: A button press creates a payload of ‘1’ on the Topic.

TEMPERATURE: Readings from the sensor (DS18B20 or DHT22) are sent every 10 seconds to this topic.

HUMIDITY: Readings from a DHT22 (if connected) are sent every 10 seconds).

LAST WILL & TESTAMENT: When the IoTBox is connected to MQTT, a payload of ‘online’ is sent to this Topic. The MQTT server will send ‘offline’ if it does not receive a heartbeat from IoTBox.

The best way of exploring how IoTBox uses these Topics is to use the MQTT-SPY application found at MQTT-SPY Homepage.

IoTBox Pinouts and Firmware loading

Here are the pinouts that are defined in the firmware for the IoTBox based on the ESP12 adapter board shown below. It is possible to solder directly to the ESP chip if space is tight but you will need to take into account the various pull ups (eg CH_PD) if you do so.

espadapterIn order to do the initial programming and testing of the module, install the VCC, GND, GPIO0 cables and pins for TX and RX. If you are using a larger box, you may use jumper pins for all of the connections.

Pin NodeMCU IoTBox use Future Use
tx tx on programmer  Additional I/O
rx rx on programmer  Additional I/O
gpio4 D2 to I2C – SCL screen (GPIO4 is sometimes mislabelled labelled as GPIO5 on breakout board!!!)
gpio5 D1 n/c PIR, Vibration
gnd 0 volts
gpio15 D8 resistor 150 ohm to led = RED
gpio2 D4 data pin for 1-wire ds18b20 (or dht22 with 10k resistor to vcc)
gpio0 D3 push to make switch (optional:held high via 10k resistor?). Other side of switch is at GND
gpio14 D5 to I2C – SDA screen
gpio12 D6 resistor 150 ohm to led = BLUE
gpio13 D7 resistor 150 ohm to led = GREEN
vcc 3.3 volts (NOT 5v!)
gpio16 D0 n/c Wake
ch_pd n/c (held high on the breakout board)
adc A0 n/c Potentiometer / Light detection
reset n/c

(Corrected Pins for the colours Blue and Green)

You will need to do an initial flash of the IoTBox chip which will then allow you to do the upgrades from the built in menu. Connect a 3.3v USB FTDI programmer to TX/RX and GND. Connect GPIO0 to GND and then power up the module from a source that supports around 300ma (do not power from the FTDI module).
Here is the commandline to flash the esp8266, (please remember that the esp8266 is 3.3v only – the 5v usb interfaces will kill it!)

(All on one line, may need python2.7 installed for esptool.exe. My USB programmer is using COM2)

esptool.exe -p com2 -b 115200 write_flash -fs 32m 0x00000 rboot.bin 0x02000 iotbox.bin 0x80000 iotbox.espfs.bin

The required files are here.

However, the esptool.exe requires Python to be installed on yourWindows PC – this can cause issues. An alternative ESP8266 flasher is here:

Screen Shot 2015-10-02 at 22.46.07

IoTBox Videos

I have uploaded a couple of videos to describe the function of the IoTBox (while I am waiting for components from China to do the build videos!)

A run though of the web interface menu system:

The IoTBox in operation: 

IoTBox Hardware

Here is the final parts list for the IoTBox. Each item links to the version that I used. They may link to multipacks (I built 30-35 IoTBoxes) but you only need 1 unless noted.

2015-06-28 14.38.24
The final IoTBox

During the beta testing I have tried and killed many boxes and components to get this far. Hopefully it will save you some time and expense. Note that many items came via China to reduce the unit price.

Parts List Continue reading IoTBox Hardware

IoTBox. First steps…

“I want one! – actually can I have 30?”

I took my idea to a few people – the inventors of NodeRed and a couple of members of the team and they thought that the idea was sound – produce a simple IoTBox that we can use in demonstrations to show how connected devices can make use of our products. I was then asked “Can we have 30 ready in a few weeks?”. I had better work fast!.

Continue reading IoTBox. First steps…

IoTBox – an Internet of Things, thingy.

The final version of the IoTBox

2015-06-28 14.38.19
The final version

The IoTBox is a small 5x5cm device with an OLED screen that displays MQTT messages, an RGB LED to show MQTT messages as a status colour, a button that triggers an MQTT message and a waterproof temperature sensor that sends MQTT messages and/or a REST call. It can be updated “OTA” and is powered by the USB connector.

These articles will show you how to build one.

Background to IoTBox

Back in December 2014, I started to look at a new Wifi chip that had just been released as a means of Internet enabling various Arduino projects that I had been thinking about. I soon realised that this processor (the ESP8266) was actual more powerful than the Arduino and much much cheaper.

Continue reading IoTBox – an Internet of Things, thingy.

Node Red, MQTT and Tado

I use Node Red and MQTT around the house for a simple home automation system. After getting Tado installed, I wondered how easy it would be to link it in. Actually, it is very easy:


This flow pulls info from the Tado site every minute and creates MQTT messages for my other flows to pick up. As I have other wireless temperature nodes around the house, I could spot that the heating is on and a window is open by looking at temperature differences around the house.

Continue reading Node Red, MQTT and Tado

aka: Technical stuff by Tony Neal