===========================
Building a smart thermostat
===========================
:CreationDate: 2018-03-25 12:47:54
:Id: HW/thermostat
:tags: - hardware
- software
I'd like to have a computer-controller thermostat, that behaves the
way I want to, doesn't need to talk to external servers, can measure
temperature in multiple rooms.
I'll need:
* multiple cheap temperature sensors that can report their readings
wirelessly
* a way to start / stop the boiler
* some clever software to decide when to turn the boiler on/off based
on the temperature readings
* a computer to run that software
The sensors
===========
The current candidate is a ESP32_ running off (probably alkaline)
batteries, using a DHT11_ sensor.
.. figure:: thermometer-diagram.png
:align: center
Connections:
=============== ======
microcontroller sensor
=============== ======
+5V VCC
GND GND
pin 13 DATA
=============== ======
`The code for the thermometer`_ uses the DHTesp_ library to read the
sensor, and the `esp8266-oled-ssd1306`_ library to drive the
display. The final sensor will most probably not have a display.
.. _ESP32: https://en.wikipedia.org/wiki/ESP32
.. _DHT11: https://www.adafruit.com/product/386
.. _DHTesp: https://github.com/beegee-tokyo/DHTesp
.. _`esp8266-oled-ssd1306`:
https://github.com/ThingPulse/esp8266-oled-ssd1306/
Talking to the boiler
=====================
Using the process described by `Steven Hale`_, `Dave Hope`_, `Ross
Harper`_ and probably others, I connected a 433MHz receiver to my
soundcard:
.. figure:: rf-receiver-diagram.png
:align: center
Connections:
============= =======
From To
============= =======
Power + receiver VCC
Power - receiver GND
Power - microphone cable shielding via 22kΩ resistor
receiver data microphone cable channel via 47kΩ resistor
============= =======
By turning the knob the thermostat that was installed with the boiler,
I generated the on and off signals. I recorded them with Audacity_,
and spent a few hours puzzling them out (I'll write more details about
this part at some future time).
Then I built a transmitter:
.. figure:: rf-trasmitter-diagram.png
:align: center
Connections:
=============== ===========
microcontroller transmitter
=============== ===========
+3.3V VCC
GND GND
pin 7 DATA
=============== ===========
and wrote `code to send the correct pulse train`_. The receiver wired
to the boiler recognises the signals and turns on and off.
.. _`Steven Hale`:
http://www.stevenhale.co.uk/main/2013/08/home-automation-reverse-engineering-a-worcester-bosch-dt10rf-wireless-thermostat/
.. _`Dave Hope`:
https://damn.technology/controlling-british-gas-wr1-receiver-arduino
.. _`Ross Harper`:
http://rossharper.net/2015/11/decoding-a-siemens-rcr10433-thermostat-signal-to-control-a-boiler-from-a-raspberry-pi/
.. _Audacity: https://www.audacityteam.org/
.. _`code to send the correct pulse train`:
https://www.thenautilus.net/cgit/thermostat/tree/trasmitter/sender.ino