Steve's Stuff Rotating Header Image

Home Automation: Reverse engineering a Worcester-Bosch DT10RF wireless thermostat.

Way back in 2007 I had a new boiler and central heating system installed. I chose the Worcester-Bosch Greenstar 30CDi combi-boiler as the heart of the system since the manufacturer has a very good reputation for reliability and efficiency.

Worcester-Bosch Greenstar 30CDi

This boiler has various control systems that can be used to operate the heating and direct hot water. I selected the DT10RF Optimising Digistat since, although it was quite expensive, it was the best Worcester-Bosch offer and promised further cost-savings through the use of its “optimising” feature.

Worcester-Bosch DT10RF Mk I

The DT10RF controls both the operation of the central heating, and also the timing of the hot-water pre-heat function which allows the boiler to deliver hot water more quickly. When running the heating, the optimiser function calculates the time the boiler needs to start in order to reach the correct temperature at the programmed times.

You can set up to four different time periods for each day of the week for heating. You can set the room temperature for each of these four periods. The timing for hot water can be different for each day of the week. The wall-mounted room thermostat is wireless and uses the standard 433MHz band. This controls the temperature for the heating, and the boiler mounted receiver controls the timings of the hot-water pre-heat.

Right from the beginning I’ve never been very satisfied with this control system. Firstly, the “optimising” feature only works to delay the on-time of the heating, and does nothing to optimise the time the heating turns off which it could do by learning the time it takes the house to cool down. Not only that, but it only optimises the first time-slot of the day so only the morning start-up is optimised. The time at which the temperature set-point changes from day-time to evening is not optimised. Also, the optimisation will only delay the heating coming on in the morning for up to one hour. Since it takes my heating at least one hour to warm the house up, the optimiser basically never did anything at all.

While it is true that you can set four different time periods each day for the heating, you can’t change the temperature set point. The set point for each of the four time slots is set once, and then applies every day. So you can’t have complete flexibility in how the heating is configured.

Even the wireless side of the thermostat has never been very reliable, with the signal constantly dropping out and requiring the transmitter to be temporarily moved closer to the boiler and the set point manually turned up and down to give the system a kick and get the communication going again. It’s certainly not fun waking up on a cold winter morning to find the heating hasn’t come on because, yet again, the wireless communication has failed over night. This is with a house of normal construction, and not a huge distance between the transmitter and receiver. I did have the control system replaced under warranty, but the new one was no better. There are lots of posts on the internet where people are experiencing the same problems with the DT10RF. Worcester-Bosch blame anything from too-thick walls to interference from WiFi access points. That is simply not acceptable, and the design of the wireless system is frankly not fit for purpose.

Since purchasing this thermostat Worcester-Bosch have released a new version, the DT10RF Digistat optimiser (MK II). From what I can tell, aside from having six time slots rather than four, it is simply a cosmetic change. I don’t expect this version to be any more reliable, and from forum posts it looks like the same problems still exist.

The last straw was when, during the previous winter, the thermostat simply refused to work when it was any further than about two metres away from the boiler. This was with a fresh set of batteries, and the whole thing reset and reprogrammed from scratch. Hardly any point in it even being wireless.

Time to start looking for a new heating control system.

Ideally I would like something that connects to my local network, either WiFi or Ethernet. This would make it easy to programme, and also remotely adjustable over the internet. This would mean that when I’m out somewhere and I’m going to be back home later than expected, I can easily change the timing of the heating so that it comes on later and does not burn gas unnecessarily.

I would also like something that is far more intelligent than the current heating control systems. I want it to learn how long it takes the house to warm up and cool down, and decide for itself when the heating needs to be on. Rather than saying “I want the set point to change from 12C to 20C at 4pm”, I want to be able to say “I want the house to be 20C at 5pm” and have the system work out itself when to fire the boiler, based on the outside temperature and its own knowledge of how quickly the house warms up. Likewise, I want to say “I’m happy for the temperature to have dropped to no less than 18C by 11pm” and have the system work out itself when it can stop heating, based on its knowledge of how quickly the house cools.

I want to have multiple temperature sensors around the house, to get an overall view of the system, rather than just the temperature state in one room. It could decide which sensor gets to control the heating based on the time of day. For example, in the mornings I only care about the temperature of the bedrooms. I’m not worried about the temperature of the downstairs open-plan area that typically takes a lot longer to warm up, since I’ll very shortly be leaving to go to work. So the master bedroom could control the system in the morning, while the lounge controls the system in the evening.

It could also do other nifty things, like if the current temperature is below the set point at 8am, but the local weather forecast pulled from the internet predicts that it is going to be a lovely day and warm up by 10am, then it could decide to not turn on the heating at all. I don’t want it to burn gas for two hours just because the morning is a little chilly, and then end up having to open a window once the sun comes out.

Looking around the central heating market, I see several manufactures are now producing WiFi enabled thermostats, such as the Heatmiser PRTHW-TS WiFi. However, not only are they very expensive and get some poor reviews, they also don’t appear to do what I want. They allow only programming over WiFi, they don’t do anything clever regarding heating control. If you’ve managed to find one that does – please do tell me about it in the comments section below!

I decided what I really want to be able to do is control the boiler from my PC. If I could send a command to turn the heating on or off, I could then write my own code to control it and have it do whatever I want.

I know that the DT10RF uses the 433MHz band to transmit the on/off signal. If only I could capture the signal it sends, I could then reproduce it and take control. I decided to purchase a 433MHz transmitter and receiver pair from eBay. At a price of just £2.80 it was worth a gamble as to whether I would be able to receive anything from the thermostat.

433MHz Wireless Receiver

One slightly annoying thing about these cheap 433MHz receivers is that when there is no signal present, their Automatic Gain Control circuit gets ramped up and all you get is receiver noise on the data pin. This makes it rather difficult to actually pick out any data from the noise. Luckily, you get about 100mS of “radio silence” after a signal has been received before the AGC winds back up again. So it is possible to look for this silence, and then look for the data immediately before it in order to “sniff” the signal.

I hooked up the data pin of the receiver to an oscilloscope, and sure enough when I turned the thermostat up I could see a signal go through. Likewise when I turned it back down, another signal was visible. It was impossible to capture the signal to analyse it since it was far too fast. Since I didn’t have access to a storage-oscilloscope, I decided to make use of a “soundcard logic analyser” that I had made previously.

Signal Capture

By feeding the signal from the receiver into the soundcard on my computer, I could capture the data continuously and then look at the signals at my leisure. I connected it all up, and turned up the thermostat until it started calling for heat. It visibly sent an “on” signal three times. I then turned it back down again, and it sent an “off” signal three times. You can see the data in the screenshot below. The 100mS periods of “radio silence” make the data stand out easily from the receiver noise. In the data below there are three on-pulses separated by approximately 1.9 seconds, followed by three off-pulses separated by 1.9 seconds.

DT10RF Transmission

Zooming in on one of the “on” transmissions we can see the following pulse train.

DT10RF Boiler ON

Zooming in on one of the “off” transmissions we can see the following pulse train.

DT10RF Boiler OFF

As you might expect, the signals are nearly identical except for the last few pulses. I haven’t made any attempt to work out what it is actually sending, except to recognise that there appears to be a “preamble” that is used to give the receiver time to adjust its AGC, followed by a series of pulses that represent the boiler/thermostat ID, followed by either the “on” or “off” message.

By simply writing down the lengths of the high and low pulses it is possible to reproduce them using a microcontroller and 433MHz transmitter. I’ve been using Atmel AVR ATMega328P microcontrollers in a lot of projects lately, so I decided to use one here as well. This one is mounted on an Arduino Uno board. It’s simple to connect up the transmitter, just power and ground, and the data pin connected to pin 2 of the Arduino (PORTD, PD2, pin 4 of the IC).

433MHz Wireless Transmitter

It works! I can turn the central heating on and off again using my PC. Now that I have full control of the system I can work on writing some algorithms that optimise comfort and, most importantly, minimise gas usage. Helpfully it also seems to have much better range than the transmitter in the commercial thermostat – I can easily activate the heating using my laptop over on the other side of the house from the boiler. If I find that I need even more range, the transmitter can be operated from up to 12V with increased transmission power. At the moment I am powering it with the normal 5V logic supply to the microcontroller.

The following code-snippet shows how I control the 433MHz transmitter. It’s only intended to be an example, you probably wont be able to just cut and paste it into your own Arduino sketch since I don’t use the Arduino framework. But it is simple enough to follow and can easily be made to work in your own application.

  rf.cpp (3.2 KiB, 1,101 hits)

If you want to try to control your own Worcester-Bosch boiler and have a DT10RF thermostat, you should be able to use the same RF messages as me provided you put your boiler into “learn” mode and then transmit the “on” signal so that the boiler knows what messages to expect. If, like me, you want to be able to switch seamlessly between computer control and the thermostat whilst you develop your heating control application then you’ll need to follow the procedure I have detailed and capture the code your own thermostat is sending.

In the next tutorial, I’ll detail how to build your own inexpensive wireless temperature sensors for distributing all over your house. After all, what use is having control of the heating system if we don’t know what the temperature is?

50 Comments

  1. Graham Jones says:

    Great write up, thank you! I have been meaning to do something similar for ages, but have never got around to it. The other thing I fany doing is controlling individual radiators, but that needs some actuated valves, so it gets even more complicated.

  2. Steve says:

    Thanks :) Yes, controlling individual radiators using motorised values would be good. I’m not sure how much use it would be in my system since the house is mostly open plan. I do have TRVs of course, and I’m not convinced of the benefit of those either.

    What I would really like to do is take control of the flow temperature in order to directly control the temperature of the radiators. Then, rather than simply turning the system off when it gets up to temperature, it would be possible to start backing down the radiator temperature and hopefully reach a steady-state for the boiler to run continuously – the thermal input balanced against the losses from the house. I’ve sure that’s got to be more efficient than constantly turning it on/off and getting large fluctuations in temperature around the set point.

    This would probably be quite easily done – there is a temperature control on the front of the boiler. Worst case I could stick a servo on the potentiometer! Or better still, disconnect the pot and use a DAC to control the voltage that the pot would have been applying.

    But all of these require physical modifications to the system. If it were just me in the house I’d most likely go for it, but if I break something and the missus ends up cold I’ll never hear the end of it! :)

  3. That is an impressive grep of the pulses there with the sound card.

    You may have been able to fix all your problems by adding a better antenna to the receiver downstairs.

    The boiler is an on/off device and not really suited to control the temp of the water except by that means. Having lots of short ON durations is going to stress it over the long haul. You’re not modulating the flame. (even an electric boiler) Is it a zoned system? How many temperature sensors are you going to deploy? Powerline comms like X-10 might be easiest and reliable.

    good read!

  4. Steve says:

    Thanks for your comments.

    A better antenna might have worked, yes. But I didn’t want to mess about inside the boiler. I did take the thermostat apart, and there wasn’t any easy way of improving the transmitting antenna.

    This is a modulating boiler. It does modulate the flame. It varies the burn intensity depending on the temperature of the return water so that it can maintain the flow temperature without having to cycle. The dial on the front allows you to set the flow temperature. However, you are correct that the thermostat only has on/off control. As I said in the post above, at some point I would like to automate control of the flow temperature, which could be done using the dial on the front of the boiler.

    There are some thermostats that are so-called “weather compensating” where the flow temperature is set based on the current external temperature. If it’s cold outside, the radiators are run hotter, if it is mild, the run cooler. But that still doesn’t reduce the radiator temperature as the house approaches the set point, which it what I would like to do.

    No, the system is no zoned. Aside from the TRV on each radiator.

    I’m going to deploy two temperature sensors at first, one on the lounge and another in the master bedroom. Then potentially add more later. I am planning on handling the sensor communication using these,

    http://www.ebay.co.uk/itm/140939401129

    given they cost practically nothing and have more than enough range.

  5. […] interesting walk through his reverse engineering process, and if you happen to have a similar thermostat he has provided the source […]

  6. Mr Hash says:

    This is very interesting. I have just got one of these systems (with DT10RF mk II) and the temperature sensor on it responds to ambient temperature changes far far too slowly to be useful. It took two hours in a fridge at 5C to get the reading from 23C down to 13C. Have you noticed this behaviour on your unit? Haven’t had any issues with the wireless connectivity yet but then it’s not been put to much use yet.

  7. Steve says:

    Yes, I noticed that behaviour when I was testing. I wanted to find out if the message the thermostat sent varied depending on the temperature – it could be telling the boiler not only to switch on but how hard to burn depending on how far away the room is from the set point (I was being optimistic – I didn’t really think it would be that clever).

    Like you, I put it in the fridge for a while to change the temperature. After half an hour in the fridge, it had gone down from 26C to 24C.

    I think in general it is a good idea to strongly filter the temperature – you don’t want the boiler coming on every time the temperature fluctuates for a couple of minutes just because someone has opened a door. Despite having numerous problems with this thermostat, I’ve never had one related to the rate of change of the measurement. It seems slow, realistic, changes are detected and accepted, but large fluctuations are filtered out.

    In real life usage it’s not going to have to detect a rapid change from 23C to 5C and have to update quickly. So, in this instance, I think the thermostat is doing the right thing. On the other hand, two hours in the fridge is a long time for it to still not have have got down to the correct temperature. I guess there is some strong averaging going on.

    My own temperature sensors are going to just report the current temperature, rapid fluctuations and all. The computer can decide how to average the readings and what decisions to take.

    Thanks for visiting my little blog :)

  8. Scott says:

    What a star, this is exactly what I’m looking for to connect to my Homeseer setup. Any chance you could expand on the Arduino sketch – I’m having a little difficulty following it in order to create one for my setup?

    Would appreciate it

    Cheers
    Scott

  9. Steve says:

    Hi Scott,

    It’s simple really, all you need to do is make the data pin go up and down on the 433MHz transmitter module, using the appropriate delays to set the on and off pulses.

    You can just use a for loop over however many pulses you need, and inside the loop toggle the data pin and then use delayMicroseconds() to wait for the appropriate amount of time.

    The hardest part is capturing the code from the thermostat so that you know what pulses to send. If you’ve already done that, you’re 90% of the way there.

    Steve.

  10. Scott says:

    Cheers Steve. I give it a go and see how I get on. Maybe need to give you a shout if I have a problem if that’s OK?

    Cheers
    Scott

  11. Steve says:

    Sure Scott, no problem. Just drop me an email, address on the contact page at the top. It would be good to get two of these working :)

    I’ve just finished building my 433MHz boiler controller, and the first 2.4GHz wireless temperature sensor that will go in my living room. I’ll post up some photos and details soon.

    Steve.

  12. Scott says:

    Hi Steve
    I Managed to get it working but…. not reverse engineering the RF but ‘replaying’ it. I record the ON and OFF transmissions, save them as snippets then play them back through the sound card to the RF Tx and it works! saves me trying to decode the RF!

    Cheers
    Scott

  13. Ciarán says:

    Thanks for the write-up. I’ve just got a similar boiler and wireless unit. I was hoping to implement a similar system to what you have described.

    I particularly like your idea of using weather forcasting to judge the heating requirements, very efficient.

    Please keep us updated about your progress and improvements.

  14. Steven Hale says:

    Hi Ciarán,

    Thanks for your comments. I’m just starting to test out my custom heating controller at the moment. It’s taken a little longer than expected, what with various life and work things getting in the way! Hopefully in the next week or two I should be able to post up a progress report. I’m pleased to say initial testing is looking good!

    Steve.

  15. Richard Coney says:

    Thanks for taking the time to share this Steve this is exactly what I was looking for. I’m using a Vokera boiler and danfoss thermostat, I may have a go at this myself.

  16. James Richins says:

    Hi Steve,
    Have you made any progress with the rest?
    I wondered if you had any ideas on sound analysis on windows etc.
    I don’t wish to control my system wirelessly from my pc but really know how often the boiler is heating when it the system is on.
    I guess I’d have to collate data, and analyse it myself from the figures.

    Thanks for the brilliant piece anyway. It’s excellent.

  17. Steven Hale says:

    Hi James,

    Yes, I’ve got a control system running quite well that is doing all the fancy heating and cooling calibration stuff. I just haven’t got around to writing anything up yet. Maybe I will get chance over the holiday.

    On Windows I’m sure there are many different free audio editing tools you could use to capture the signal from your thermostat, in the same way I have done here. You would just need to be able to monitor the on/off signals and simply log the time each one is received. Shouldn’t be too difficult. Alternatively you might be able to hook up to a logic line inside the boiler that goes high/low when it is heating. Depends if you’re willing to take the cover off.

    Thanks for your comments!

  18. James Richins says:

    Thanks,
    Audacity might actually work. I’m only looking to energy monitor so to speak. So I might be able to manage with the information so far.

  19. James Richins says:

    I’m just thinking about the idea.
    What would be ideal would be to take temperature readings to cross match the actual gas usage. I don’t know if an arduino could come into play here.
    If an arduino could read the audio signal… Or you put a clock on both systems. Hmm.

  20. Steven Hale says:

    You can certainly get Audacity for Windows. But I doubt that is going to help you. I used Audacity to manually read off the pulse-train that the thermostat sent for “on” and “off”. I’m not that familiar with the program, but I very much doubt you would be able to automate it in any way to work out for itself whether it received an “on” or an “off” and do something about it. It’s simply not designed for that sort of task.

    You will still need something like an Arduino to receive the signal, work out what is was, and log it either to an SD card or by sending a message over RS232 to a connected computer. You could certainly also log temperatures using the same micro-controller.

    I think you are making this way too complicated, not to mention that your considered method will be unlikely to tell you anything useful. You would be logging when the thermostat was calling for heat. But the boiler will not necessarily be burning for the whole time the call for heat signal is present – a modern boiler modulates the flame to control the flow temperature. So you wont know anything about how hard the boiler is burning or how much gas it is using.

    The only way to really know how much energy your boiler is using is to keep reading the meter at the same time each day/week/month.

  21. David says:

    I have started a trying to the same but can’t get a link to my boiler :( I think (using a scanner on AM ) that my boiler isn’t quite at 433.92 any one else with a similar problem ?
    I would quite like to hook it up to the ninja block platform

  22. Steven Hale says:

    Hi David,

    On my 433MHz RX (and on all the ones I’ve seen) it has a little pot that I assume allows you to tune it somewhat. You could try adjusting that to see if it helps. Usually it has some sealant on there to “fix” it in place – you’ll have to break that to be able to adjust it.

    There is always a risk that you adjust it and then it doesn’t work at all ever again even with the TX it comes with. I suppose they are cheap enough for that not to matter too much – and if it means you get it to work with the boiler then it’s worth a try.

    Steve.

  23. Gareth Loader says:

    Hi Steve, what arduino sketch code and library are you using to sniff the signal

  24. Steven Hale says:

    Hi Gareth,

    I’m not, I used a soundcard to capture the signal as detailed extensively in the article.

    Thanks,

    Steve.

  25. Dave Shaw says:

    Hi,

    I got very excited by this as my DT20RF is always dropping the connection. So I bought me an RX/TX transmitter and built the soundcard bits all as you describe one day over Christmas. I managed to get the pulse trains exactly as you have above (different points obviously), but no matter how hard I tried I couldn’t get the boiler to switch on or off (I’m using a Rpi for mine).

    I tried starting low, starting high, added millisecond delays, but I couldn’t get it to work.

    A couple of questions:

    Where in the pulse train did you start measuring from? I was trying to find a common start for all the ‘ons’ but couldn’t separate out the noise from the commands.

    Did you send each ‘on’ pulse three times? My on pulses all were slightly different, so not sure whether there is too much interference in the capture.

    Many Thanks

    Dave.

  26. Steven Hale says:

    Hi Dave,

    The three “on” or “off” messages that the thermostat sends should all be identical. The first thing I did was make sure I had received several messages that all looked exactly the same. If the ones you are receiving are all slightly different, then there’s something wrong and you need to figure that out first.

    I started measuring the pulses from the first full off/on/off pulse I could see. As you already know it’s tricky to find the exact start due to the noise while the receiver automatic gain control is still adjusting itself. However, luckily for us it shouldn’t matter too much since the first few pulses are generally a “preamble” specifically designed to get the TX and RX in sync and so it shouldn’t matter if you miss the first pulse or it’s not quite exact.

    I only have to send the “on” message once for the boiler to fire. And then once for the “off” message to turn it off again. There isn’t a requirement for the boiler to see three “on” messages before it fires. The thermostat just does that for reliability. In my more recent code I too have started sending the on and off messages three times with a slight delay in between, because it definitely does improve reliability. But if you are standing right next to the boiler with your transmitter, it shouldn’t be necessary when testing.

    The only other thing I would say is that I’m not confident a Raspberry Pi will be able to do this. The pulses are only microseconds in length. Since Linux is not a real-time operating system there’s no guarantee that your pulses will be the exact length you are coding them to be. If the pin changes are just a few microseconds too late then the message will end up scrambled.

    You could get around this by trying what Scott above did. He connected the TX to the soundcard output and “played” his recording into the transmitter. Apparently it worked! You could try doing that from the sound output of the Raspberry Pi. That would have the advantage of getting around any timing problems, and you wouldn’t even need to try to interpret the pulse-train.

    The voltage output from the soundcard is only 1-2V. Those 433MHz transmitters ideally need at least 5V, or anything up to 12V if you need increased range. If the soundcard output works but you have range issues, you could put a small transistor on the output and use it to switch a higher voltage to the TX. Worth a try!

    Good luck!

    Steve.

  27. Richard Guest says:

    Thanks for the great article, I found this while looking for a way to drive my Greenstar boiler from a Nest Thermostat. Currently I have it hardwired with a 24V transformer to power the Nest and a relay to control the boiler’s switched live. I was considering getting an MT10RF cheaply on ebay and dismantling the thermostat to hack it to send a signal when the Nest requests heat. Looking at your approach I don’t need to dismantle the thermostat and can remove all the fixed controls at the boiler with the neat boiler plug in unit that comes with the MT10RF. I can then position the Nest better in the house. This would have the advantage of being able to fall back to the manual thermostat should I have a problem or move house and want to take the expensive Nest with me.
    Going to attempt the soundcard option. Thanks again for the great write up.

  28. Steven Hale says:

    Thanks for your comments, Richard. Good luck with your project!

  29. […] six months ago I posted an article on reverse engineering the communication protocol of a Worcester-Bosch DT10RF wireless thermostat using a soundcard as a logic analyser. The aim of the project was to be able to take control of my […]

  30. Neil Duffy says:

    Hi Steve,

    Was doing a search on worcester boiler and control and came across your site.

    Thought you might be interested in what i’ve done?

    http://bmslink.co.uk:8180 [guest:guest]

    I have a 3 way RF relay wired in parallel with the programmer inputs for DHW and CH (so it appears stock to the layman).

    My system uses RF sensors placed in each room to provide temperature feedback. Each room has a virtual thermostat (soon to have a physical one too) with dynamic setpoint (by time) with provision for contact sensor to inhibit that room.

    The upshot is, if any room calls for heat, i start the boiler… and i run the boiler on a duty cycle (typically 20 mins on/30 mins off). This saves a lot of energy and the heating often satisfies during the off cycle.

    I’m also using pegler i30 TRV which i can control by RF…so if a room is not calling, its effectively isolated from the system. Thus, only radiators needed are targetted, saving more energy.

    At the moment, i’m just using my system to schedule the hot water permission, but in the future, i’m looking to get the thermalstore tank temperature into my system and then i’ll decide when the tank is to be warmed :)

    Please take a look. Would be grateful of your feedback, as a fellow automater :)

    Thanks

  31. Maciek says:

    Hi there,

    I have a similar thermostat Digistat RF2 and looks exactly the same.

    I bought this http://www.ebay.co.uk/itm/140958983913
    Do you think I can use your code to control my Worcester-Bosch boiler?

    Thanks

  32. Steven Hale says:

    Hi Neil,

    That’s a pretty neat looking interface.

    I have yet to add any web-interface stuff to my system. It’s all running from command-line scripts while I set everything up and program the heating algorithms.

    > I have a 3 way RF relay wired in parallel with the
    > programmer inputs for DHW and CH (so it appears stock to
    > the layman).

    That’s a good way to do it. I didn’t want to mess about inside my boiler, and I always wanted to be able to switch seamlessly between the normal thermostat and my system whilst I was testing things. That’s why I went for the technique of “sniffing” the signals the thermostat sends to control the boiler.

    > My system uses RF sensors placed in each room to provide
    > temperature feedback. Each room has a virtual thermostat
    > (soon to have a physical one too) with dynamic setpoint
    > (by time) with provision for contact sensor to inhibit
    > that room.

    That’s how I intend to build up my system. So far I’ve only got temperature sensors in my “office” room where the control PC and RF “base” is located, and a sensor “node” in my living room. I intend to add “nodes” to every room so that the controller can see the temperature of the entire house.

    It’s great that you’ve got controllable TRV on your radiators too. As you say you can shut them all off and only heat the room that is calling-for-heat. I don’t intend to do that with my current system. But in the future when I move to a new, bigger, house I’ll definitely be adding something like that when uprating the heating systems.

    > The upshot is, if any room calls for heat, i start the
    > boiler… and i run the boiler on a duty cycle (typically
    > 20 mins on/30 mins off). This saves a lot of energy and
    > the heating often satisfies during the off cycle.

    Once the controlling “node” is up to temperature and the system is just maintaining the level, I’ve been using a combination of a fixed duty cycle and a temperature hysteresis.

    My current settings are that once the node drops to 0.25C below the set-point, it fires the system and runs for 15 minutes. As you say it then usually satisfies the set point a few minutes after it shuts off and without overshooting too much.

    When programming the system I found it quite tricky dealing with all the delays, but I think I’ve got it tuned pretty well now. If there isn’t too much human movement and doors opening/closing etc the system can hold a room temperate within +-0.25C which I think is pretty impressive.

    I’m pleased to see someone else is actually adding automation into their home automation system. I find so many people claiming to be “doing home automation” are actually just building systems that allow them to turn a light on and off from with a web interface or phone app. That’s not home automation. That’s just a different kind of manual light switch!

    The big thing for me in doing the heating system wasn’t just being able to programme the heating schedule from a phone app which it seems is all things like Hive can do. I wanted it to actually be more intelligent. The house modelling code that I’m using to estimate how quickly the house will heat or cool is working really well. I just set it to have the house up to temperature at say 6pm when I get in from work and it decides for itself when to fire the heating.

    Maybe when I’ve won the lottery I’ll be able to start a project suitable for Grand Designs :)

    Steve.

  33. Steven Hale says:

    Hi Maciek,

    Sorry for the late reply, I didn’t notice the comment notification.

    Yes, that’s the same 433MHz pair that I bought, even from the same supplier. So yes, it should work fine. Of course, you’ll have to grab the message your own thermostat is transmitting. You could re-program your boiler to recognise the message my code sends, but then you wouldn’t be able to easily switch between your custom system and the original thermostat which is useful while you are debugging your custom system.

    Steve.

  34. Roger Garner says:

    Last Friday the plumbers left having installed my new Greenstar Heatslave II… complete with the DT10RF (the MkII newer one – your logic does indeed hold true for the newer model) on the wall. I then started to program the times in and found that its a 7 day programmer (no optimiser feature either)… so you can’t set different times for the weekend without adjusting it all the time!

    Googling to see what the ‘next model up’ was so I could get the plumbers to swap it for a more suitable controller I came across this page.

    You sir, deserve a medal. ;-)

    I’m a developer with an engineering background that once I’d read the mere title of this page made me instantly forget the notion of replacing the controller… instead I’ll build one using your write up. Far more fun…

    Ordered an arduino, transmitter/receiver pair online on the Sunday, logic analyser was built and preamble/boilerId/on/off signals ‘recorded’ on Monday, Arduino build and some tx/rx testing on the Tuesday and today, Wednesday, I’ve been turning the boiler on/off to my hearts content ;)

    Still very much at the ‘sitting on a breadboard with me tapping a 1 or 0 into a serial console to turn the boiler on/off’ stage but I’ll have a temperature sensor and some rudimentary brains to control it added in no time ;)

    Something this boiler does (and didn’t see it mentioned anywhere), is that it turns off after around 10 minutes of receiving the ‘on’ signal. The DT10RF is off and I’m not transmitting an off command, I have to repeat the ‘on’ signal in order to keep the boiler running. I’m assuming this is some sort of boiler failsafe in case the thermostat batteries run out (or unit fails etc) and the boiler keeps running and running because it never gets an off signal.

    Once I

  35. Steven Hale says:

    Hi Roger,

    Great to hear you’ve got it working!

    Yes, you’re right, the thermostat has to keep sending either an “on” or “off” signal otherwise the boiler panics and thinks that it’s lost contact with the thermostat.

    I haven’t tested how often the DT10RF sends anything, but on mine I have a background thread running to constantly send a signal once every minute, and all I do is change a flag to tell it whether it’s supposed to be sending “on” or “off”.

    Let me know how you get on with the rest of your project!

    Steve.

  36. Roger Garner says:

    Hi Steve,

    I hit send on the reply above a little too soon…

    ‘Once I’ … get around to it I’ll write it all up. Which I’ve since managed!

    At this stage all I’ve done is what you’ve described in this post so its really just my take on the same subject and doing the exact same thing. I’ll do more on its setup over the coming weeks as I get time. Intending on using a Pi for control, it can run a nice interface in a browser for any authenticated device to connect to for setup and signal the Arduino to make required transmissions.

    Rogers Home Automation Ramblings.

    As for the DT10RF transmission frequency, I’ve since realised the boiler side of the thermostat has an LED on it that flashes as it gets a signal from the thermostat. The manual states this will flash every 5 minutes to indicate the thermostat is working – I guess that’s actually the thermostat re-transmitting its required state.

    Roger

  37. Steven Hale says:

    Hi Roger,

    Looking good! That’s a nice write up, and thanks for linking back to my article. I’ll look forward to seeing what you come up with for the control side of things. I’m just using some command-line Python scripts. I do intend to getting around to developing a nice web interface at some point, but you know how things go – once you have a project mostly working the draw of the next project becomes too great!

    I don’t think my boiler-receiver has an LED to indication reception. It just has a little antenna-symbol on the LCD that flashes eventually when it thinks it has lost contact. I haven’t bothered to time how long it take that to come on. But sending the on/off code once a minute seems to keep it happy.

    I was considering using a Pi for the controller, but I already have a home server PC running 24/7 for media streaming (to a Pi actually), and hosting my SVN repositories, so I just use that to run the boiler process. There doesn’t seem much benefit in setting up another Pi just to handle the boiler.

    Steve.

  38. Carlo says:

    Hello,

    I am planning on doing something similar to this. I’ll first start logging data from different places around the house and garage until I find a way of measuring outside temperature (finding a place to put the sensor is the problem so far) and then use the data to calculate how long it would take to heat up the house depending on the temperature outside.

    What I’d like to ask is if you tried the Virtual Wire library to pick up the signal from your thermostat. From what I read online about other boyler controls, it seems that this could easily work.

    https://groups.google.com/forum/#!topic/homecamp/kEiAfm4yhdI

  39. Steven Hale says:

    Hi Carlo,

    No, I never tried the Virtual Wire library. I only ever manually captured and generated the signal from the thermostat.

    Steve.

  40. Anthony Thomas says:

    Just thought I’d say great read – though unfortunately I won’t be able to make use!

    About to move into a new house with a new boiler but unfortunately it doesn’t have an RF thermostat, just a manual/mechanical 7 day timer. Current idea is to put DS18B20 temperature sensors in the important rooms and replace the mechanical timer with a relay attached to a Raspberry Pi to control the on/off of the heating.

    I’ll be doing similar with the bedroom taking priority in the morning and living areas in the evening up until bedtime.

    Currently doing some 433 MHz controlling with LightwaveRF light switches. Maybe I’ll buy an RF timer to avoid breaking the boiler.

    Anyway, great read.

  41. Steven Hale says:

    Hi Anthony,

    Thanks for your comments. Yes, hooking up a relay to the boiler on/off circuit and controlling it with a Pi should be relatively simple and reliable. Good luck with your project!

    Steve.

  42. Caroline Stevenson says:

    Hi, can I ask a really stupid question. I have the DT10RF Digistat, can someone tell me if I can turn my heating off completely from the programmer or do I need to turn my boiler off. I’ve been getting astronomical gas bills since I installed the Worcester boiler.

    Cheers very much. Any help would be great.
    Caroline

  43. Steven Hale says:

    Hi Caroline,

    To turn the heating “off” permanently, I used to manually change the thermostat to “night” mode (press select until the moon symbol is showing on both sides). The heating will only ever come on if the temperature falls below your “night” setting. If you have this low enough, say 5C, then the heating will never come on.

    You shouldn’t turn the boiler off completely, because it does various maintenance things during the day even if the heating is not used. For example, it will run the pump for a couple of minutes each day to ensure it doesn’t get stuck as they can do when not run for weeks or months over the summer.

    You should probably also check the “hot water pre-heat” setting to ensure it isn’t set to keep the boiler hot all the time. That could be wasting gas if you’re keeping the boiler hot all night, and all day when you’re at work, for example.

    Steve.

  44. Caroline says:

    Hi Steve

    Excellent, thanks very much. Will look at my instructions to set timer to off but just turned the Eco button off on boiler which has been on for 6years!!!!

    Cheers

  45. Steven Hale says:

    Hi Caroline,

    If you’ve turned the “eco” button “off” (as in the button is now no longer illuminated) then that means the boiler is NOT in “eco” mode.

    You want the “eco” button to be lit up to say the boiler is in “eco” mode, which it sounds like it has been.

    As far as I know, the only difference between “eco” and “non-eco” mode is whether the boiler pre-heat is active or not, which controls whether it keeps the heat-exchanger up to temperature all the while to enable it to supply hot water more quickly.

    Steve.

  46. Caroline says:

    Oh I thought the post read that I should have this turned off as it was using gas. I read that it was expensive, I’ll give it a try & see what happens. Can’t be any worse! Cheers

  47. Steven Hale says:

    I think I’m confusing you.

    The boiler has a function called hot-water pre-heat that, when enabled, keeps the boiler hot. This means that it can supply hot water more quickly since you don’t have to first wait for the boiler to heat up before the water starts running hot.

    This does use a small amount of gas. If you don’t want to “waste” this gas then you can turn the pre-heat off and put the boiler in “eco” mode. However, now when you open a hot tap it will take longer for the water to run hot. If you’re on a water meter then you might waste more money running off extra water than you would waste in the cost of gas keeping the boiler hot.

    When the boiler is in “eco” mode the “eco” light is ON. If you’re saying the eco button has been “on for the last six years” then you have already been running in eco mode.

    Steve.

  48. Caroline says:

    Ha! Ok, Steve, I’ve got it… Will turn the Eco button back on. Back to the drawing board why I have such large gas bills. Cheers for help.

    Caroline

  49. David Shaw says:

    So now I’ve bookmarked your site and am following intently. Since Christmas I’ve got my Adruino up and running and switching my Worcester Bosch on and off.

    I was looking at a Nest controller (because they were doing a staff discount at work) but then I read your latest installment of an intelligent heating schedule… I’ve just been looking at writing my own version. I already have a Raspberry PI in every room collecting temperature, motion detection, light intensity etc, I just need to be able to collect that info into a central server which can use that to decide when the boiler should be switched on and off, so I’d be really interested in understanding how you wrote your logic and if there is anything you can share that could give me a head start especially around the pre-heating and cooling curves?

    My next step would be to get some electronic radiator valves in each room which could be turned on and off by the same central programme depending upon learned occupancy patterns, temperature and the outside temperature (which is what Nest can do).

  50. This is ingenious! I’ve been wanting to use multiple temperature sensors to control my heating for a while now, but the thought of having to get someone in to wire up a thermostat has put me off – I’d never thought of sniffing the output from my DT20, nor using my soundcard to read the signal.

    Long story short – thank you – signal sniffed, I decoded the output to 0’s and 1’s and then used the following code to send it using my Raspberry Pi – http://www.raspberrypi.org/forums/viewtopic.php?p=499538#p499538

    All I need to do now is start logging the temperature to a database and calculate the heating and cooling coefficients. I’m not quite as proficient with electronics so I’m looking at “slice of pi” and xrf thermistors in a few places.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>