We first started looking at this project back in 2011 but, we now finally think we have found suitable technology to enable our view of what a smart home networked thermometer / thermostat should look like. Our previous Z-Wave projects had shown us that there is a place in the market for a low cost, low power networked thermometer and we would really like to use a product like this around our next home. With this in mind we set out to see if we can get our design developed into a commercial product, either through a partnership or by commissioning its development. Our plan is to work with an existing manufacturer if possible.
Our thinking is based on splitting the problem of heating and cooling control into distinct functions:
Traditional UK homes have a single 'thermostat' located in one location which is used to control heating within the house. This model provides very little control and is not very efficient. Typically the single thermostat is placed in the wrong location to get a good view of the temperature in your house. You can add things like thermostatic radiator valves and a 'smart' thermostat and this will improve things but a lot of obvious limitations remain.
What is really needed is at least one well positioned temperature sensor in every room/zone, to get an accurate view of temperature throughout your home. It is then possible to make much more informed decisions about where and when heating is needed and this enables much greater flexibility and control. For rooms with under-floor heating and high ceilings it is often useful to know about temperature gradients from floor to ceiling too and this requires several temperature sensors mounted at the different heights.
Even in our current home where we have a single heating zone and thermostatic radiator valves, a large number of temperature sensors will enable us to better understand what is going on in our home and how well (efficiently) it is being heated.
To provide intelligent and accurate control the sensing needs to be both accurate and timely.
2. Analysis & Intelligence
Generally speaking, the more data a central heating controller has to work with, the better job it can do of ensuring the temperature in each room matches what is required. To do this job properly though a smart home needs to combine this data with all the other data available, so that it is considering the 'whole house' context. This can include things like occupancy and presence, open doors between rooms, house status, etc. Put simply, it really does not make sense to put the intelligence inside a physical 'thermostat' regardless of whether it is smart or not.
For each room/zone a target temperature can then be set based upon a schedule, prediction of the required target based on tracking people (estimating time of arrival), explicit user feedback, personal preferences (based in presence of known individuals), etc. When the smart home gets to this level of intelligence the need to 'play' with a thermostat disappears and it really does become a fit/configure and forget service (and is not really just a device any more) that works seamlessly in the background. This is why we implementing a very simple user interface.
The key other advanatage of implementing the 'intelligence' part of the thermostat in software is that many instances of it can be 'installed' at no additional cost, enabling very cost-effective multi-zone control.
3. Action & Control
Having gathered all the required data and contextual information, our smart home is then in the best position to take appropriate action and control to ensure the heating and cooling system just works quietly in the background. The algorithms and mechanics of how this is achieved are going to covered in a separate project soon.
Our approach is designed to be a retro-fit solution into any home but the focus is obviously on the system we are designing for our next home. It will be tested in our current home which is a simple, single-zone heating system.
This project enables a really simple and intuitive user experience that works for all family members. Because it works so well we do not need to expose the underlying complexity and intelligence.
The target temperature for each room/zone primarily determined using a simple schedule. This sets the target for each possible house status based on the time and the day of the week. This is simply a baseline or starting point for the target temperature though. This works really well because our smart home uses occupancy and presence to automatically determine house status (i.e. whether we are in, out or away on holiday).
If we did nothing else, this (adaptive) schedule would provide an efficient and convenient level of heating control for each zone and the whole house but, all of the other intelligence and predictive learning sits on top of this baseline schedule to make our heating and cooling control very much smarter.
Once created we don't need to expose this schedule to the family members (users) of our smart home. If we had to create or modify it regularly we would create a nice graphical tool to generate the required JSON configuration file. Our experiences to date though show that once set, we very rarely ever need to change it and so for now we simply edit the text file by hand.
To provide a very simple and intuitive user interface and experience we simply present two buttons on each device to enable user input. The first button is used to tell our Home Control System (HCS) you are 'too cool' and the second button that you are 'too warm'. These are implemented as capacitive switches to keep the front of the device smooth and clean in appearance.
In normal operation these are not lit but they will light up when pressed for 180 seconds to provide visible user feedback. On pressing the 'too cool' button, it will light up blue and the 'too warm' button will light up red. For the 180 second period that either indicator is lit, no further user input is possible.
This provides very simple but useful feedback (much as I get from my family verbally) and our Home Control System (HCS) can then use this feedback to intelligently determine the best target temperature. This prevents the interface becoming a gadget or toy and ensures that the feedback is specific to the zone (location) in which it resides.
The 180 second 'lock out' discourages visitors and guests from messing about with the device. If the HCS does see many button presses in a short period of time it will ignore them for a longer period of time.
On the front of the device is a 2-digit display that presents the current room temperature as an integer value in °C. This is purely for information only. We do not display any other collected data, e.g. humidity.
Our smart home artificial intelligence (AI) engine can also be used by trusted users to tell our smart home that they are too cold or too hot. This supports numerous interfaces including SMS, XMMP, and voice control.
As discussed previously, our 'device' will be very simple and want it to have a very low profile so as to be as non-intrusive as possible. We trying to not create another gadget in our smart home. HVAC is infrastructure purely to enable and efficient and comfortable home.
As such it will be a simple sensing module with no embedded intelligence and this will enable it to be cheap to produce a very high quality device. Although we are designing the best solution regardless of cost, this is desirable as we expect one to be installed in every room in our home. We are working on the assumption that as a retail product it could be priced at less than £30 each.
The product will have the following basic characteristics:
- Wall mounted, stylish, very low profile and available in a range of colour options.
- The design will fit into a standard pattress box (at least 35mm deep) and will protrude no more than 6mm from the wall.
- Both wired (Ethernet) and wireless (Wi-Fi) networking will be supported.
- It will use a wired 230Vac supply or a 12V dc power supply. An optional module will convert the 230V ac supply to a 12V dc power feed. On-board dc voltage regulation will enable support of a wider range of input voltages. Power over Ethernet (PoE) will also be an option.
- The device will display of current temperature (Centigrade or Fahrenheit) as a 2-digit integer value. There may also be a variant without this capability.
- A high quality product that won't look out of place in any home.
- The device will sense both temperature and (optionally) humidity with a high degree of accuracy and will report significant changes (configurable but typically changes greater than 0.3°C).
- We plan some very clever smart home features and capabilities that are not currently available with existing commercial products. These are innovative 'opportunities' that we have encountered in undertaking this project as part of the wider smart home and are not traditionally associated with a 'thermostat'.
Our thinking is that at least one of these devices will be placed in every room in a house. This is the only way to really perform efficient and accurate temperature control. This does assume you have a heating system that can control the heat to these individual zones though.
We have deliberately avoided battery powered sensors as they require batteries requiring regular replacement. We don't plan to put thermostat functionality (switched contacts) in this device and it will be a simple sensor only.
Ambient Light Level
We use one of the analogue inputs and a light-dependent resistor (LDR) to measure and report ambient light level.
This device supports measurement and reporting of the supply voltage. This is useful for diagnostics and testing as quite large voltage drops can occur over long lengths of wire. To prevent this being an issue we use high quality automotive wiring for low voltage power cables.
This device requires a permanent low-voltage power feed and avoids the use of batteries as these need replacing. It will be powered via a protected power supply, via our 12V UPS to ensure it continues to work through mains power outages.
It is possible to power the device via an existing mains cable and local, compact dc power module.
This device will display the current temperature as an integer. This is purely for information only as people generally like visible confirmation of the current temperature. As currently implemented the display supports a temperature range of -9°C to 99°C. The display is also an optional feature.
Presence & Occupancy
We already have dedicated sensors around our home installed and configured for optimal presence and occupancy detection. As such, we don't need this capability within this device as well and temperature sensors are rarely located in a good position for an integral PIR to also be used to detect occupancy.
The input buttons are ideal for this purpose though and when pressed result in an occupancy event being sent to our Home Control System (HCS). This is a small part of the much larger data set used to enable accurate and timely occupancy and presence detection in our smart home.
IR Remote Control Activity
In some instances, we have added a low-cost sensor to pickup the signals from infra-red remote controls. We are not decoding the signals, but simply detecting their presence and using this to indicate occupancy. This can be done with a very cheap IC and a single digital input on the Arduino UNO. Since the output pulses are very short we use a simple circuit (based around the 555 timer IC) to extend the pulses and give the Arduino more time to 'see' them.
The Arduino UNO is being used with an Ethernet shield. This provides the best reliability of all the networking technologies and is our preferred networking technology in the smart home.
The Arduino UNO can easily support wireless networking via Wi-Fi and this is currently under development.
Multiple Temperature Sensors
The use of 1-Wire technology means it is very easy to add additional temperature sensors. These could be connected to enable temperature measurement at floor and ceiling heights in addition to temperature measurement at the thermometer location. It would also be possible to wire through the wall on which it is mounted to enable temperature measurement in the room behind using just one device.
Inherently Supported Features
Our design presents a simple device that fits into a standard pattress box supplied with Ethernet and power (just power if wireless networking is used). This makes it very easy to upgrade or replace in the future with no additional installation or decoration work required. This is important ands we envisage the technology advancing quickly in terms of performance, cost and size.
Remote Control & Access
These concepts are not in scope for this device. This functionality is already provided by our Home Control System (HCS), which has full awareness of which zones are occupied and in use. It also knows about the house mode, which impacts far more than just the heating and cooling system. Our Home Control System (HCS) also knows which doors are open and will make decisions based on the 'whole house' context.
Our artificial intelligence (AI) engine provides a complete interface using the English language that works locally and remotely.
Our whole Home Control System (HCS) supports voice control and setting and querying temperatures is just one small part of this capability.
Our whole Home Control System (HCS) supports voice announcements and temperature announcements and alerts just one small part of this capability.
The device generate regular 'heartbeat' events. If these are not seen by our Home Control System (HCS) watchdog service after a short period of time, then it will notify us of a problem. This has worked brilliantly so far and the device has been 100% reliable so far. We get an SMS message if it goes missing from the network.
Like all temperature sensors in our smart home, these devices are highly sensitive and responsive and can be used for early detection of fires, by monitoring rate of temperature change.
Our smart home also monitors the location of family members and can make predictions as to when they will be home to infer estimated time of arrival (ETA).
Features Under Consideration
Wireless Mesh Networking
Our modular design doesn't rule out the use of very low power wireless mesh networking technologies in the future and this is something we will be looking at.
This device is going to feature ambient light level sensing (and optional reporting). This could be used to automatically adjust the display brightness to match the ambient lighting.
Features Not Currently Supported
We don't plan for this device to replace a traditional switched thermostat and provide a wired and switched signal back to a boiler (230V ac). This functionality can easily be implemented in other ways that are better suited to this type of installation.
This would use the feature ambient light level sensing to automatically adjust the display brightness to match the ambient lighting. Whilst we think this could be implemented it just isn't a priority for us at the moment.
Ambient Noise Level
We are currently testing this capability to see how useful it is.
Physical Designs & Variants
We envisage two basic design shapes:
- A square design to fit a standard pattress box (84mm × 84mm)
- A round design (80mm in diameter).
We also envisage variants without the feedback buttons and associated indicators. These will be used for simply monitoring temperature and to provide a visible indication of the current temperature. Removing the feedback sensors and indicators will also greatly reduce the cost.
This is our simple square design for our smart home thermostat. This one shows the feedback 'buttons'.
We are looking at two material options:
- The first is a semi-transparent (glass/plastic) 'plate' through which the display and capacitive buttons work. This will be available in a range of colours.
- The second is a metal 'plate' (in various finishes) with the display exposed through a cut-out and physical buttons mounted on the surface.
A prototype has been built using a standard 1-gang white blank switch plate (these cost less than £1). The LED display shines through this white plate. This fits a standard single pattress box and is 84mm × 84mm in size.
We are using a 2-digit LED display for the temperature. Initially we used a 74xx47 display driver IC connected to the I/O pins on the Arduino. This can be driven using just 8 digital outputs on the Arduino (7 if you limit the temperature display to 79°C maximum).
This is our prototype 2-digit LED display. We decided to use yellow displays for a warmer colour. The display is programmed to update every 10 seconds, to avoid it changing too frequently. The actual values reported back to our Home Control System (HCS) are updated instantly though.
When mounted behind a tinted front panel, we get the simple, clean look we are after. This one is black but we also plan to use white ones.
We have migrated to a design using a MCP23017 IC for the display driver now though. Primarily because this uses an I2C interface, thus freeing up more I/O pins for other clever features we would like to add. This allows us to drive each segment individually, so we could display anything we want on the 2-digit display now.
This video shows the display being driven to show temperatures from -9 to 99ºC.
This approach uses just 4 pins to connect to the Arduino UNO (A4, A5, GND and +5V). Multiple MCP23017 devices could be connected if required (e.g. for a 4-digit display) and the software to control them is really easy to write.
Our device is currently making a temperature measurement approximately every 2 seconds. Our testing shows that this could be less than 1/10th of a second if we really needed it to be. This enables it to be extremely responsive to temperature changes. Only significant changes are reported back to our Home Control System (HCS) as an event and currently this means any change over 0.3°C. This is also set on a per device basis.
Our testing so far shows that each device typically generates around 30 events over each 24-hour period. When scaled up to a large house with one or more devices per room, this number is easily handled by our Home Control System (HCS).
These are the Lounge Temperature events over a typical 24-hour period:
- 00:19:35 Lounge Temperature = 22.0 : 15m0s : -0.000
- 01:04:37 Lounge Temperature = 21.8 : 15m0s : -0.000
- 02:04:39 Lounge Temperature = 21.5 : 15m0s : -0.000
- 02:34:39 Lounge Temperature = 21.3 : 15m0s : -0.000
- 03:04:40 Lounge Temperature = 21.0 : 15m0s : -0.000
- 04:19:43 Lounge Temperature = 20.8 : 15m0s : -0.000
- 05:04:44 Lounge Temperature = 20.5 : 15m0s : -0.000
- 05:49:45 Lounge Temperature = 20.3 : 15m0s : -0.000
- 06:34:47 Lounge Temperature = 20.0 : 15m0s : -0.000
- 06:49:47 Lounge Temperature = 20.3 : 15m0s : 0.000
- 07:19:48 Lounge Temperature = 20.5 : 15m0s : 0.000
- 07:49:49 Lounge Temperature = 20.8 : 15m0s : 0.000
- 09:04:52 Lounge Temperature = 20.5 : 15m0s : -0.000
- 09:34:53 Lounge Temperature = 20.3 : 15m0s : -0.000
- 11:34:56 Lounge Temperature = 20.0 : 15m0s : -0.000
- 12:46:00 Lounge Temperature = 19.5 : 11m1s : -0.001
- 12:47:07 Lounge Temperature = 20.0 : 1m6s : 0.007
- 12:57:17 Lounge Temperature = 19.5 : 10m10s : -0.001
- 13:04:16 Lounge Temperature = 20.0 : 6m59s : 0.001
- 13:07:17 Lounge Temperature = 19.5 : 3m0s : -0.003
- 13:22:17 Lounge Temperature = 19.8 : 15m0s : 0.000
- 13:52:18 Lounge Temperature = 19.5 : 15m0s : -0.000
- 14:52:20 Lounge Temperature = 19.3 : 15m0s : -0.000
- 15:37:21 Lounge Temperature = 19.0 : 15m0s : -0.000
- 15:52:22 Lounge Temperature = 19.3 : 15m0s : 0.000
- 16:22:23 Lounge Temperature = 19.0 : 15m0s : -0.000
- 16:37:23 Lounge Temperature = 19.3 : 15m0s : 0.000
- 17:04:17 Lounge Temperature = 19.8 : 11m52s : 0.001
- 17:34:18 Lounge Temperature = 20.0 : 15m0s : 0.000
- 18:04:19 Lounge Temperature = 20.3 : 15m0s : 0.000
- 18:34:19 Lounge Temperature = 20.5 : 15m0s : 0.000
- 18:49:20 Lounge Temperature = 20.8 : 15m0s : 0.000
- 19:11:34 Lounge Temperature = 21.3 : 7m13s : 0.001
- 19:22:57 Lounge Temperature = 21.8 : 11m23s : 0.001
- 19:37:58 Lounge Temperature = 22.0 : 15m0s : 0.000
- 19:51:34 Lounge Temperature = 22.5 : 13m36s : 0.001
- 20:06:34 Lounge Temperature = 22.8 : 15m0s : 0.000
- 20:21:35 Lounge Temperature = 23.0 : 15m0s : 0.000
- 20:36:35 Lounge Temperature = 23.3 : 15m0s : 0.000
- 20:51:36 Lounge Temperature = 23.5 : 15m0s : 0.000
- 21:21:37 Lounge Temperature = 23.3 : 15m0s : -0.000
- 22:06:38 Lounge Temperature = 23.0 : 15m0s : -0.000
- 22:36:39 Lounge Temperature = 22.8 : 15m0s : -0.000
- 22:51:40 Lounge Temperature = 22.5 : 15m0s : -0.000
- 23:36:41 Lounge Temperature = 22.3 : 15m0s : -0.000
- 23:51:42 Lounge Temperature = 22.0 : 15m0s : -0.000
You can see in the above data log, that we record the current temperature reported. As you can clearly see from our HCS log, we are also forcing the device to report the current temperature every 15 minutes regardless of value or changes. It is captured to a resolution of 0.1°C here but the resolution used will vary depending of the specific device and location. We also report the time between temperature readings. This is so our Home Control System (HCS) can decide if a temperature sensor has stopped working.
The last number is the rate of temperature change in °C per second. We use this to detect fires and other abnormal events.
We have created a modular device in terms of the hardware components:
The first part is a dc-dc converter that takes a nomial 12V dc power supply and provides a regulated and accurate 5V dc power supply to the rest of the electronics. We have taken this approach to ensure our device can handle any voltage drops in the wiring. The input voltage can actually be anything from 36V to about 7V and our 'thermostat' will see a stable +5.0V dc power supply, which is also used as a reference for some sensors. The supply voltage and is also monitored using an analogue input on the Arduino and changes reported back to our Home Control System (HCS). If it crosses minimum and maximum limits set, we will be notified.
A fully populated device has the following sensors that report events back to our Home Control System (HCS):
- Light level
- Supply voltage
- IR remote activity
- User input 'too cool'
- User input 'too warm'
The latter three events will update occupancy for the room/zone. Later versions of this device may have even more sensors as we have spare digital and analogue inputs.
The LED display and associated components will be mounted on a bespoke PCB. There are just 4 wires to the processor.
We have designed and 3D printed a shallow housing which sits between the faceplate and the wall. This enables the device to appear to float just off the wall.
It provides insulated mounting points for the temperature and humidity sensors and places them in isolated 'ducts', to ensure good air flow around them. It has integrated mounts the display module and capacitive input switches.
We have created an initial test 3D printed housing, to check component positioning and measurements.
The round faceplate is laser cut from 2mm white translucent perspex. This enables the display to show through and the light level sensors and IR remote receiver to operate from behind it. It provides a very subtle and simple design.
This design provides a subtle, stylish and powerful solution for a room thermometer/thermostat. It is relatively low-cost, provides very good accuracy and is highly responsive.
We are currently optimising the design for final production. We will have a single PCB designed and professionally manufactured, which will will connect to the Arduino (through the Ethernet shield). We are also testing some clever new features that have wider application in the smart home, to maximise the potential of this hardware.