My Automated Home: Raspberry Pi + Node-Red + MQTT & Amazon Echo

Share on FacebookTweet about this on TwitterShare on RedditEmail this to someoneShare on Google+Share on LinkedIn


In our latest My Automated Home feature, Dave McLaughlin takes us through his journey developing his own smart home system. With some DIY upgrades to existing home automation hardware and some clever software integration he’s built a fascinating system…

In the Beginning

Having used Homeseer and a number of wired and wireless devices whilst in the UK, I switched to wireless when I moved overseas to Indonesia in 2005. As I was living in a rented apartment I need a solution that would not require any cables other than maybe Ethernet in the same room.

I decide on a Z-Wave system, later adding Wemo Lamp Modules too. For Z-Wave side of things I chose the HomePro Appliance Modules for sockets and Everspring Lamp Modules for the lighting. Neither of these 2 modules were cheap.

I ran with this setup until the middle of 2016, but the following issues prompted a change. Firstly Z-Wave was temperamental with 2 units at the far end of ou apartment, even though I had an Appliance Module half way between it just never worked reliably. I would have continually press OFF on the Homeseer Touch based tablet to get my bed light to go off. Later I would have 2 units that controlled lamps blow up and fail. One of the IC’s that was part of the power supply had split wide open.

The next headache was the Wemo lamp modules. The only way to get these to work was with IFTTT through their Homeseer and Wemo channels. As long as my internet connection was good this worked ok, albeit a bit slow at times. Not exactly a 10 on the WAF scale.

ESP8266 Based MicrocontrollerIn early 2016 I came across a website run by Peter Scargill who used to run an electronics design company many years ago from Tyneside. At that time I used his AppCON wired controllers for home automation based on the little 8 bit PIC microcontrollers. I had hundreds of meters of 4 core alarm cable run all over my apartment. The system was reliable but trying to hide all that cable didn’t go down well with my partner at the time.

Fast forward to 2016 and Peter was back doing home automation with the little ESP8266 based controllers.

These are based on a Cortex M4 core with built in 802.11 WiFi and come with an SDK that allows development with Eclipse as well as an Arduino IDE option.

dmcl-homecontrolmqtt-2As my HomePro units were troublesome I decided to re-engineer the internals and keep the mechanical parts. So I took out the old PCB and did all the measurements so I could make my own 2 stack PCB assembly in much the same as the old one. The lower PCB is the POWER SUPPLY and SOLID STATE RELAY.

I chose the solid state relays as they switch on the zero crossing and avoid any issues with pulling down the AC and causing the power supply to dip. This works faultlessly and I can switch up to 8 AMPS with this arrangement. More than enough for the intended use of these modules.

Homecontrol Socket - Original LayoutThese images show the new board stack and the old boards within the module and finally the new boards installed into the HomePro enclosure.

There is an LED on the board to show status and I drilled a small hole to allow this to be seen from the outside. It flashes rapidly until it gets a WiFi and MQTT connection. Using the button on the front you can press and hold this for around 3-5 seconds just after power up and this will activate an APN and Webpage that you can use to configure the device. Easier than trying to do this over the serial connection. Peter and Aiden have considered everything with this.

HomepromqttNow the lighting needed to be sorted. The Everspring units that I had purchased from the UK a couple of years ago used to show an annoying fault. They would on occasion started to switch off and then back on again. It was completely random. I replaced one unit with a new one and the same thing happened. Then one day I spotted that the on/off fault was occurring when the voltage in the apartment was dropping below 209Vac – Indonesia is not very good when it comes to stability of the mains supply. I opened one of the units and found that they used a very cheap power supply design based on a capacitor/resistor dropper type. These are good when you have a stable power supply but they really don’t like it when the voltage input is too low.

Everspring Light SocketSo armed with the HomePro unit design, I set about creating a new PCB to fit the existing enclosures. The ESP12 was located on one side and the AC-DC power on the other. The solid state relay was also on the same side as the power supply. A prog and on/off button were also fitted so I could install the software initially. The web interface would be used to configure it later. You can see the ESP side of the PCB below. The slot in the PCB is to increase the separation of the AC power from the low voltage DC side. The large pads are the AC in and AC out to the lamp.

Everspring MQTTSo now I had a number of upgraded appliance modules and lighting controllers but how was I going to control all of this? It was time to retire my old Homeseer 2 system. The PC was no end of trouble and being Windows 10 it would decide it would update itself without my permission. Time to make the move to Linux.

So, based on the blog from Peter I decided to get out my Raspberry Pi3 with its 7″ LCD and fire up Node-Red. Node-Red for those who have no seen this is a very nice and stable drag and drop control software. At first it was daunting to setup but after about a week of playing I started to find that it was very easy to get to grips with. If you have any programming skills, then you will feel at home with the scripting. All the modules are provided as Java Script source and there is a huge and ever increasing library for it on the Node-Red website.

Next I needed an MQTT broker as the software from Peter communicates using this protocol. Once you have setup and used MQTT, you quickly realise how efficient it is on your network. There is no need to poll devices or even to know the devices IP address. The broker takes care of this. Those familiar with xAP will understand this.

Using Node-Red I setup various timers (thanks to Peter again for his BigTimer) and switch on the lights at night. Using a Wemo plugin I now also had control of the Wemo Lamps albeit only on and off. The developer of the Node-Red plugin has promised dimming control at some point in time.

enOcean 3D Printed Switch Enclosure

Ok, so I had Node-Red and MQTT setup but now I needed a way to control the lights and switches by both voice and some form of mechanical or touch interface. I ran across some wireless switches from Enocean on the Element14 website so I ordered a couple of them along with the Raspberry Pi Enocean module which plug into the GPIO pins on the Pi and uses the UART to communicate with Node-Red and a plugin.

Raspberry Pi and enOcean Board

The switches have a bonus in that there is no battery to install or take care of. They use Energy harvesting through a coil and magnet that is activated as you press the button. They sadly don’t come with any wall fixtures so you have to design your own. They do provide a toggle button STL file that you can get 3D printed so I used this and created my own mounting for them. This serves 2 purposes, one to cover the old switch on the wall ensuring it remains in the ON position so that the lamp modules are always on and secondly to locate the controls in a familiar location.

Master Bedroom Switch

Using the Node-Red Enocean plug in I get a message payload with the button states. By parsing this in a Node-Red Switch I can send the appropriate command to the light or switch etc. This is an example of the payload sent by the Enocean switch. It’s encoded in JSON format so easy to parse. The ID and V are what we are interested in.

{ "payload": { "id": "002d0932", "v": "A0 down", "unit": "", "rssi": -76, "type": "state", "EEP": "f6-02-03", "man": "ENOCEAN_GMBH", "Desc": "Rocker switch", "rV": "30", "rawByte": "55000707017af630002d09323001ffffffff4c000d" }, "_msgid": "3e6d4c8f.c192b4" }

Node-Red Bedroom

The following image shows the Switch which has 4 outputs based on the msg.payload.v value in the telegram from the Enocean switch. These are then directed to the appropriate device. I use the toggle feature within the MQTT firmware to switch the device on and off from the same switch. This means I have up to 4 switch states from each Enocean module.

Now the fun part begins because I have an Amazon Echo and I have always wanted to control my home with voice commands. You can blame SciFi for this 🙂

HA BridgeThere is no direct Echo support, at least not without having an HTTPS connection to your Node-Red and that sadly is impossible with my ISP so I needed an alternative. Using this Amazon Echo HABridge from running on the same Raspberry Pi3 I could not setup voice activate lights etc. The HABridge emulates a Philips Hue API so the Echo sees the devices you setup. Here is an example of a device which is called Front Room Fan.

Echo ParseBy uttering the following at the Echo, the fan can be turned on. “Alexa, turn on front room fan” or off by saying “Alexa, turn off front room fan”

The HABridge sends the commands to Node-Red via an HTTP request and I then parse the URL for the values. This is a simple script as shown below.

How to do this with Low Cost Modules

Having designed my own PCB’s to replace the modules I needed a way to add additional switch modules and light controllers.

My own home made units cost around US$15 to make with all the PCB’s and the parts together. So still low cost.

To get this even lower I came across the Itead Studio Slampher and the S20 Smart Switches. These are around US$12 each for the S20 modules and $8.50 for the light controllers so considerable less than any of the Z-Wave modules on the market. They come with Itead’s own firmware that is controlled from a iOS or Android app but I wanted to be able to use Peter’s code. Peter had been doing some research into this and found that with minor changes to his code, it would programme into the Itead units and work. You need a USB to UART with 3.3V output to do this but this is simple enough if you can wield a soldering iron. The only downside is that the Itead modules come with a 512KB FLASH and to allow Peter’s code to do OTA updates, we need to change this out to 8MB. The memory IC’s are around $3 for 5 on eBay. Armed with a hot air rework station (borrow a friends if you don’t have one) the job is quick and doesn’t risk damage to the boards. The following image shows the SOIC IC top left after removing the old one and the new one fitted.

itead Modified

You also need to solder on a header to the single row of 4 holes on the PCB. This applies power to the board and allows you to programme it with the custom MQTT firmware. I have a detailed blog on how to do this.

The S20 modules look very smart and modern. The power switch allows you to switch it on and off locally. The ones shown here are Euro sockets but Itead will be offer both US and UK options very soon.

itead Smart Switch

The Slampher modules are ES27 based lamp controllers so not ideal for the UK at present but they work very well.

SlampherConsidering they are offering the switch modules as UK I would expect that a bayonet version may come along soon. I actually prefer the screw type now for easier installation.

These are easy to open and modify as before with one additional step other than the replacement of the FLASH IC and that is to move a single zero ohm link from R21 to R20 so that the switch is connected to GPIO0 on the ESP8266 so that you can put the device into BOOT mode for programming using the onboard switch. This also allows you to enable the APN and webpage for programming.

DIY Power

With the Raspberry Pi3 and the Enocean Pi module you have a powerful controller for under US$100 that is far less wattage than any PC based system and still has more than enough grunt to do the work. The Enocean switches are not cheap but the advantage of no battery makes them worth all the effort for me.

Since running Node-Red the system now has a very high WAF, especially when I have to travel. My last trip of 10 days went without any support calls from the Mrs (I can easily remote access into the system and make changes if required).

As the system is MQTT based, you can control them from a phone or tablet using one of the many MQTT applications you can find on iOS or Android.

MQTT App on Tablet

The Future

Now that I have a reliable system based on the ESP12 I have been working on some ideas to add additional sensors and control. Next on the list is an Infra-Red controller so I can issue ON/OFF commands to the Air Conditioning in the bedrooms or control the TV or other devices that use IR. Without getting off my seat I can ask Alexa to switch on the bedroom aircon after first checking if the door is closed.

Juno Open Source RobotThe ESP12 modules are so inexpensive and easy to programme that they offer endless possibilities for expansion. Another design I am working on is a Smart Home Robot type device. If you have seen The Jibo (not available yet and certainly not out of the USA for the time being) I have decided to build my own and it’s in progress just now.

Using the RPi3 it will have a display and a camera and be able to rotate and tilt and this will allow it to detect who is in the room and through OpenCV allow me to interact with them. I will document the design and make it open source. For now the start is here. I have a number of the parts and working on the controller PCB’s and should start building it this coming December. After having won a competition with Seeed Studio and backing their ReSpeaker project, my Juno Robot will have full void interaction. With opening up the design I’m looking forward to getting others involved – if you think you can help, then join me on the link below. Thanks.  :  More “My Automated Home” features

Want More? – Follow us on Twitter, Like us on Facebook, or subscribe to our RSS feed. You can even get these news stories delivered via email, straight to your inbox every day.

Share on FacebookTweet about this on TwitterShare on RedditEmail this to someoneShare on Google+Share on LinkedIn

No comments yet... Be the first to leave a reply!