Why Are Thermostats Still on the Wall?

A couple of weeks ago I noticed the heat was staying on in my office pretty much all day. I have a boiler heating system with 4 zones and the thermostat that controls the front of my house is right there in the office. I wasn’t cold in there, but the thermostat wasn’t reporting that the temperature ever reached what I had set.

I pulled the Nest off of its mounting bracket, put my hand near the hole in the wall, and I could feel cold air. So I grabbed an instant read meat thermometer and stuck it through the hole. The reading inside the wall was 10° lower than a foot away from the wall.

For a simple fix, I stuffed a bunch of insulation through the hole and covered it with foil tape.

In order to monitor the effectiveness of the fix, I put together a quick temperature sensor instead of having to turn the meat thermometer on and off.

It worked!

Two or three years ago I had the opposite problem with this heating zone; it was always cold in the office. By feeling the wall I came to the conclusion that the thermostat had been installed right next to one of the pipes sending hot water to the upstairs registers. Brilliant! The fix that time was moving the thermostat over between the next set of studs.

After these two issues with the placement of a thermostat, I starting thinking. Why are we still basing our heating on measurements taken from a set position on the wall? With the Internet of Things we can do this much smarter.

Imagine each zone in the house having one or more mobile temperature sensors. Like the simple circuit pictured above, but in a small case. These could be battery-powered or plug-in. Windows, wind, and location of the sun can all affect the heating of different areas of a house. Being able to move the temperature sensor with you as you make dinner in the kitchen or watch a movie from your recliner would be awesome.

These temperature sensors would wirelessly report the temperature back to the home automation system. I use Home Assistant, which would make it easy to set the heating schedules for each zone. If a zone needed to go on or off based on the sensor’s reported temperature and the schedule’s target temperature, it would wirelessly trigger a relay module at the furnace or boiler. The relay would wire in to the furnace/boiler system in place of the wires that come from each thermostat and it would never know the difference. None of these pieces are hard to build and the parts are cheap.

This is all just something that ran through my mind as I was fixing my heating issue. I don’t have plans to build such a system, but if I did I could ditch my 4 Nest thermostats. For someone who works at home, often at random times of the day, I think Nest thermostats are overrated anyway because the learning and auto scheduling system doesn’t do much for me.

Garage Monitor Updates

I made some updates to the Garage Temperature Sensor & Monitor. I didn’t like how the desired temperature was set via the app’s configuration file, so I moved it to a slider control in Home Assistant and updated the LCD to always show the value. Only being able to enable/disable monitoring via the device’s button also wasn’t great. I converted the binary sensor I was using to flag monitor mode in HA to a switch control and moved the actual monitoring logic from the Python app to HA automation. Everyhing is updated on GitHub.

updated-garage-monitor-ha.png
Info and controls in Home Assistant
img_8761
Custom temperature and humidity monitor

Garage Temperature Sensor & Monitor

I’ve been working on this project here and there for a few weeks, with most of the early work being experimentation. Everything is now up and running and it’s “deployed to production” so to speak. This was my prototyping setup…

After wiring everything together and repurposing a cardboard box, here is a short video to show the final product.

A few notes on how it works:

  • The button toggles monitor mode. The LED inside the button indicates if Monitor mode is on/off.
  • When monitor mode is on and the desired temperature is reached, I get a notification.
  • I should have shown the knob, but all it does is adjust the LCD’s contrast.
  • The thing on the top left of the box is the sensor chip for reading temperature and humidity. Originally it was inside the box behind a little window there but it was picking up too much heat from the Pi and LCD in there.
  • The backlight color of the LCD is based on the measured temperature and updates each time new temperature is read. Anything 32° Farenheit and below is blue, 80° and above is red, and everything in between is based on where it falls within that 32-80 range. As you can see in the example, 48° is a lighter blue. A few degrees warmer and I think it would have started to look more green.
  • Outside temperature/humidity is pulled in from the Dark Sky data in my Home Assistant setup (which I’ll post about soon).
  • Data is sent to Home Assistant via MQTT.

home-assistant-garage.png

Really happy with how things turned out. The Pi  I wrote this in Python and it’s all available as home-assistant-temperature-monitor on GitHub if you want to make your own or use some of the code for your own project. There is also a list of all the components used.

Here are some pictures I took while assembling the enclosure/box.

Making sure the Pi and attached Hat fit right after drilling the holes. Seemed like there was so much room at this point.
img_8663
Everything soldered to the HAT. Amazingly I didn’t make any mistakes and everything worked on the first try. A good prototyping setup, having pictures of my final prototype, and keeping a list of where everything connected was invaluable.
The Raspberry Pi, Hat, LCD, USB cables to power and WiFi, and all of the other wiring jammed in! Reaching inside to get things screwed through the box wasn’t easy.
There is a lot more room in the other part of the box where the sensor, button, and knob are. Nice for the WiFi adapter and cable to come across and have some room.

Update: Adafruit released a new Learn guide that does some similar stuff to this project.