Occupancy Detection for Heating Control

Since I’ve been tinkering with control systems in general I have been thinking about new ways of interconnecting them to get additional functionality out. One of my main interests in the heating control project is trying to reduce the amount of gas the system is consuming and thus the overall cost of the heating. I’m also trying to improve the overall efficiency of the system by trying to match the heating supply to the demand.

I’ve wondered for a long time about the time the house is unoccupied, and what the best thing is to do with heating. In the past I have tried using the time clock to turn the heating off during times of absence, but this doesn’t really work because it isn’t that easy to accurately time periods when the house is empty. So if you are in when you are meant to be out the house is cold, and vice versa.

However once I installed the Texecom panel  I realised that of course one can easily derive simply occupancy data from whether the alarm is set or not. We always set the alarm when we go out, so if I could read the status of the alarm and use this to adjust the heating control it would give me a 100% reliable trigger and so the risk of sitting in a cold house or heating an empty one would be reduced.

There are numerous means of getting an output from the panel. and Fhem (which controls the heating) is pretty good at monitoring events and doing something as a result. However it wasn’t immediately obvious how best to do it.

I settled in the end on using an Arduino with the Firmata  fimware. I’d never heard of this before, but it is directly supported by Fhem and allows direct access to the various inputs and outputs on the Arduino into Fhem. I bought a very cheap Arduino Nano clone from ebay for about £3:ArduinoNanoFront_3_sm

Then I loaded the Firmata firmware on to it using the usual Arduino software. I won’t go into the detail of this as it’s extensively covered elsewhere but will answer any questions about this.

The next thing to do was to get a signal from the panel into the Nano. This is quite simple, as the panel has a number of programmable outputs. These are highly configurable via Wintex and the output can be set high (or pulled low) in a whole range of different conditions. All I need is for it to change an output when the panel is set.

The Arduino has loads of inputs and outputs, and for this you need a digital input – either on or off to represent armed or disarmed. I was initially unsure about how this would work, especially as it runs at 5V and the alarm panel is based on 12V. I am using the ‘panel outputs’ of which there are two on the Premier Elite 48 (and more on the bigger panels) – labelled ’12’ below:


The fact that they are labelled with a ‘-‘ sign is significant, and indicates that they are so-called ‘open collector‘ inputs. This means that rather than switching 12V on to the line, instead it allows ‘sinking’ a voltage from the board. So you can connect the output to one of the digital output lines on the Arduino, and the voltage differential doesn’t matter because it is not putting 12V into it.

So what I have done is to connect one of the digital inputs (so I have used D1) to OP1- on the panel above. I’ve not got a great picture of it, but it just a single wire linking soldered to the D1 point on the Arduino to the OP- screw terminal. I’ve fixed the Nano inside the alarm box along with the other bits.I do now have quite a few USB cables coming out of the alarm box… it might be good to have a USB hub in there but I’m running out of space!

That’s the hardware side done – next post I’ll address the software side using Wintex and FHEM.