Raspberry Pi Heating Controller – Part 2 – Software Architecture

One of the early design decisions for the Raspberry Pi powered heating controller was to have the Pi secured behind a firewall without direct access to it from the Internet. What I decided to do was have a set of simple PHP web pages on a remote web host that you can access from anywhere, and the Pi control server talks to that web host to send/receive data.

What I didn’t want was for the Pi to run a web server that ends up getting compromised & having the run of my home network.

The Pi server and remote webspace need to be paired with an access key. Anyone accessing the remote site needs the correct access key to be able to control the system.. and the level of control is limited by the API we’ll put in place.. i.e. remote clients won’t have direct access to your internal network via an open port on your home router.

Of course, you could actually host the ‘remote’ part of this set up on your Pi and use port forwarding; the architecture allows for both types of access. The access key is still needed to control the system, but you’ll be more vulnerable to attacks on your Apache/PHP installation & need to keep up-to-date with software patches to help ensure your system is secure.


Home Automation Project – Raspberry Pi Heating Controller – Part 1

pi-controlI’m going to build a home automation project which connects a Raspberry Pi to control my central heating. I wasn’t particularly happy ripping out all the existing controls, and wanted to piggyback onto them.. which helps if the Pi ever fails (I’ve still got the old controls to fall back on).

I also didn’t want to mess with the existing heating control board, so bought a duplicate unit (British Gas UP2) from eBay for about £12.. I can perfect the project on that, and install it when I’m ready.

This set of videos goes through each step of the project.. starting off with opening the control board, an overview of what I want to do, and testing out the changes.

Opening up the Control Panel

This was a bit tricky.. it wasn’t quite obvious which plastic clips needed pushing in to pull the board out.. if you were doing this on your actual panel (not an eBay-bought duplicate) then this video should help work out what you need to do to get into it without damaging anything.


Project Overview

Next up, I’ll quickly go over what I intend to do to piggyback onto the control board. There’s a project here which did exactly what I wanted to do. He’s not using a PiFace 2 like I intend to use, and he wants to be able to control the hot water as well, but everything else is the same.


Safety First – Masking off the High Voltage Area

In this second video, I’ll show how I’m masking off the high voltage area of the board to make it a bit safer when I’m testing things out. Obviously most of the time the board is off, but this helps keep things safer when it is on without the cover.


Identifying Solder Points

Luckily this blog gave me a good starting point, but it wasn’t clear where to get the status of the central heating.. I used a multimeter to find a spot which changed voltage when the system was on, and this diagram shows you what I found;



Since I only needed 4 wires for this project (2 for the switch, and 2 for the system state), I took an old USB cable, cut the ends off, stripped the wires and soldered it to the board without much trouble.


Soldering Complete!

This shows the control board after the soldering has been completed.. it’s pretty simple soldering; the only tricky part was finding the points to connect to for the system state (on/off). I’ve stuck down some of the wires so that they don’t catch or get stuck underneath the control boards buttons.


Testing the Wiring

Now that I’ve done the soldering, I’m testing out the wiring.. seeing whether connecting the two wires for the switch turns the central heating on, and when it is on, whether we get voltage on the other two wires to indicate the system state.


Controlling from Software

I’ve now hooked it up to the Pi Face 2 board, which can be controlled with a few lines of Python to simulate a button press, and detect the state of the system.

With these basics in place, the rest of the control software can be written to do scheduling, bring in temperature readings, and allow the system to be controlled remotely.

Speed Camera Alerts with Google Maps

After looking a Waze (which has speed camera alerts) I still wanted to carry on using Google Maps, but wanted to get speed/safety camera alerts. I’d also been looking at TomTom Go for Android, which looks like a good app for road warriors, but also does 50 miles for free each month & has offline maps.. handy for getting out of a tight spot when there’s no 3G signal!

There’s actually another app from TomTom specifically for Speed Camera alerts.. it has an ‘overlay’ mode that puts a floating ‘widget’ over the top of *anything* .. so that might just be your homescreen, but can also be Google Maps.. neat!

Google Play Store link



‘Take Me Home’ shortcut for Google Maps

In the older version of Android I used to have a shortcut on my home sceen which would start up Google Maps in navigation mode & take me home. In the newer versions of Android, the ‘Shortcut’ feature seemed to disappear. I’ve tracked down this feature and this is where to find it;

  • Long-press on a free space on your home screen.. this allows you to add Apps | Widgets | Wallpapers
  • Choose ‘Widgets’
  • Scroll along and find ‘Directions’, then fill out the route information.. and that’s it!

Find the ‘Directions’ widget:


Enter the route info:




My Android App Essentials

After recently moving from an old Samsung Galaxy S3 to LG G3 (which I thought was a bargain at £189), I reviewed the list of apps I had previously installed & made sure they were still relevant to my new phone. I thought it’d be useful to list out the best ones so here’s what I installed (beyond the usual apps like Twitter, iPlayer);

  • ASTRO – For managing files
  • Avast Mobile Security – I use this on all my PCs so adding it to the phone makes sense
  • Barcode Scanner – Primarily for scanning QR Codes
  • BT SmartTalk – Make VoIP calls using my landline pricing structure
  • BT Wi-fi – Connect free to any BT wifi access points
  • Chrome – Better than the stock browser
  • Evernote – We have this on our family phones for keeping notes.. often taking pictures of letters before binning them
  • FreeOTP – An alternative to Google Authenticator
  • MightyText – Receive and send texts from my desktop PC
  • MX Player – Plays any media you can think of
  • National Rail – Train info
  • Network Scanner – Handy for tracking down the IP of devices on my home network
  • Nights Keeper – Set sound profiles based on day/time.. basically turns the sound off at night UPDATE: Replaced by Timerific
  • Photos – Google photos.. enabling easy backup to the cloud
  • Pixlr – Quick and easy image editing on the move
  • Podkicker – Download and listen to podcasts
  • Rewards – Take short surveys to get small amounts of cash to spend in the Google Play Store
  • SwiftKey Keyboard – Better than most stock keyboards
  • System Tuner – Handy for debugging apps
  • Timeriffic – When I was having variable success with Wifi Timer on my LG G3, I found this worked perfectly and could also replace Nights Keeper
  • tinyCam Monitor – Connect to various IP cameras
  • Twilight – Adjust the blue light emissions on the phone’s screen after it’s dark outside
  • Unified Remote – Helps control my HTPC if I need to use a mouse/keyboard
  • Wifi Analyser – Looks at what wifi access points are in range
  • Wifi Timer – Switch of wifi based on time of day.. i.e. switch it off at night + when I’m at work UPDATE: Replaced by Timerific due to problems getting it to work all the time on the LG G3
  • World Clock – Handy when I’m travelling; has a widget to put on my homescreen

Controlling Power Sockets using a Raspberry Pi

The subwoofer we had in our home cinema setup died a few weeks ago, so I did my research and found a nice replacement. The only thing I didn’t spot was the fact it never goes into standby if there’s no signal (unlike the old one). I tried using some eco plugs which turn off peripherals when the TV was turned off.. but it learns the TV remote signals, and completely turns the TV off as well.. meaning that you have to hit the power button twice to turn the TV back on; that doesn’t work well with the Harmony all-in-one remote we use.

What I decided to do was buy an Energenie socket, which can be switched on/off wirelessly from a Raspberry Pi. The kit comes with 2 sockets and a transmitter to attach to the GPIO headers on the Pi, and costs about £20.

In my subwoofer scenario I basically want it switched on when the TV is on, and off when the TV is off. The TV has a Chromecast plugged into it which is visible on my local network. If you’ve got a Smart TV on your network, maybe that’ll be visible in the same way. So when the TV/Chromecast appear on the network, we know to switch on the power socket.


Here’s the small Energenie transmitter attached to the GPIO headers on my B+.. it’s pretty tiny and the case I’ve got still fits over the top. Notice the small hole where you can attach an aerial.. if you want extra range, then you’ll need to solder one on.. I added a 135mm wire, since the range I got out of it just wasn’t enough to get from the dining room cupboard to the living room.



To put this together, we can use the Raspberry Pi Network Spy code I wrote in my previous blog posts on element14;

Raspberry Pi Network Spy – Part 1 – Initial Setup + d/b Schema
Raspberry Pi Network Spy – Part 2 – D/b Setup + PHP for the scanner

All we need is a new PHP page that’ll call one of the functions we’ve already written.. we need a list of the MAC addresses that are currently visible on the network, then check whether the Chromecast is there. Once we know whether the TV/Chromecast is on or off, we then call a Python script that will turn the Energenie socket on/off.

Here’s the PHP;


The Python script could follow the Energenie example script, but there’s actually an even more simple Python package which I’ve used in this project. To install it I did the following;

sudo apt-get install python-pip
sudo pip install energenie

Then I wrote this helper Python script (which we’ll call from PHP) that accepts a couple of parameters, like this callenergenie.py [on|off] [switch_number];


from energenie import switch_on, switch_off
import sys

if len(sys.argv)==1:
print ‘Please specify arguments like this callenergenie.py [on|off] [switch_number]’
print ‘eg. callenergenie.py on 1’
print ‘eg. callenergenie.py off 2′
on_or_off = sys.argv[1]
which_switch = int(sys.argv[2])

if (on_or_off==’on’):
print ‘Switching on ‘, which_switch

if (on_or_off==’off’):
print ‘Switching off ‘, which_switch

Now that we’ve written the PHP & Python, all we need to do is run the PHP every minute to scan the network and do the switching. We’ll do this using another cron job;

crontab -e

*/1 * * * * sudo /usr/bin/php /var/www/arp-chromecast.php

Increasing battery life on a Galaxy S3 with Android 4.3

The latest software update to the Samsung Galaxy S3 upped it to use Android 4.3, but included a whole bunch of Samsung bloatware. From a full charge, it was only taking 20 hours to run down flat, with it feeling slightly warm all the time. There was also a really annoying app that was requesting I sign into Facebook after each restart.

From what I can see, there are a bunch of things that you can disable to improve the battery life & get things back to normal. Here’s what I did;

Go to.. Settings > More > Application Manager > All

Open & disable each of these.. (obviously if you use a particular service, like Dropbox, leave it alone);

Amazon MP3
Face Unlock
Game Hub
Music (the official Top 40 app)
Music Hub
O2 Space
S Suggest
S Voice
Samsung Account
Samsung Apps
Samsung Backup Provider
Samsung Browser SyncAdapter
Samsung Calendar SyncAdapter
Samsung Cloud Data Relay
Samsung Cloud Quota
Samsung Contact SyncAdapter
Samsung Link
Samsung Push Service
Samsung SMemo SyncAdapter
Samsung Syncadapters
Video Hub