When I last moved, energy prices were roughly half of what they are now. Heating and hot water make a large part of such increase, as during the energy crisis the government somehow forgot about the “economy tariff” for energy from remote heating plants.
In our apartment building, we have equithermal regulation and thermostatic heads with manual settings on the radiators. For a long time, we operated our apartment in 24/7 mode with the same temperature settings all time long. That means radiator closed permanently in the bedroom, and open to an acceptable temperature in the other rooms. Since the children started sleeping in their room, it was inevitable to find a slightly smarter solution.
Solution
The simplest solution in the form of a programmable thermostatic head costs around 300 CZK. This includes a manually programmable thermostatic head with a weekly schedule or Bluetooth connectivity, e.g. from Lidl. In theory, this would be sufficient – your child goes to sleep in the evening in a room that is no longer heated, and in the morning the heating turns on automatically. But the problem is variable weekends, or when you forget to turn everything off when you leave on vacation.
At the opposite end of the price spectrum there is the Netatmo system, which will be the first choice for most people interested in smart heating. But I like to play with things and I don’t like foreign “clouds”. So I chose a DIY solution that wasn’t much cheaper, and additionally it was way more complex.
In recent years, the range of smart home devices has expanded dramatically. If we ignore the completely impractical Bluetooth, we are left with devices with Wi-Fi or Zigbee connectivity (and now Thread+Matter). I went with Zigbee because such devices can run on battery power for a year, which cannot be said for Wi-Fi connectivity, and Matter was not spread much at that time.
I recently purchased an Odroid M1 single-board computer with 8GB of RAM for my home “cloud”, so the solution was obvious – Home Assistant. Home Assistant Core requires approximately 500MB of RAM in a Docker container, so it can easily coexist with everything else. I chose the Home Assistant SkyConnect USB adapter (now available under the name Home Assistant Connect ZBT-1) as a dongle, as I expected it to cause the least friction during installation and offer long-term support. In addition, it promised dual Zigbee+Matter support, but in the end, it turned out that only one or the other protocol could be used.
Thermostatic head selection
While there are many temperature sensors, buttons, lamps, light bulbs, and smart sockets available for the Zigbee network, thermostatic heads are harder to find. I have sensors from Sonoff, but I haven’t heard much praise for their thermostatic head. Critics claim that their regulation is binary, i.e. the valve either opens fully or closes fully. This did not seem ideal to me.
In the end, I took a chance on two heads from Aqara, priced at 1,000 CZK each, and this year I will be starting my second heating season with them. This head can do something like partial opening, so while the radiator is still warm, the room maintains a constant temperature. The variable component of our heating expenses is calculated based on room temperature sensors, not on radiators, so I’m more interested in the target room temperature rather than the heating time of the radiator.

The head itself looks really nice, the display only lights up when it needs to (manual control), and it can be locked to keep children from playing with it. After inserting the batteries, it calibrates to the valve it’s connected to, so it should be able to correctly estimate the position for partial opening. But it seems to me that it forgets this after a while, so over time, it makes some strange noises when fully opened or closed (perhaps it’s just some clutch at the end of the range).
While dumb thermostatic heads have numbers from 1 to 6, for example, which represent a specific “unspecified” temperature (let’s say that 4 corresponds to 23 degrees), digital ones necessarily use degrees of Celsius/Fahrenheit. And here’s the problem. The thermostatic head naturally has a temperature sensor on its body, so when the valve is open, it naturally shows the temperature affected by the heat radiated from the radiator. In the case of Aqara, this can be compensated with an external sensor, but this seems to only be possible within the Aqara solution itself (hub and their application). However, this does not seem to be a problem so far. I have empirically found that, for example, to achieve 23 degrees in the room, it is sufficient to have the desired temperature of 24.5 degrees in the living room in our case.
I connected to the thermostatic heads from Home Assistant via the Zigbee Home Automation (ZHA) plugin and I was immediately able to set the target temperature in manual mode or switch to “away” mode. It is also possible to control, for example, the child safety lock or shut down the heating completely (close the valve permanently). The thermostat also has an automatic mode (schedule), but this also only seems to work with the Aqara ecosystem. I found some mention of scheduling in the Zigbee quirks source code, but I haven’t been able to figure anything out yet.

Since I have Home Assistant and I can program everything there, it’s not difficult to change the target temperature as needed at any given time. From the thermostat’s point of view, it looks like manual mode, except that Home Assistant “turns the wheel” directly via Zigbee. As a start of my journey, I chose a heating model with two target temperatures, as I was used to from the old central heating thermostat at home.
For each room, I created a schedule-type assistant, whose on status indicates the daily target temperature for the rest of the system, while the off status indicates nighttime and therefore a lower target temperature (I set it to 16 degrees, but in reality it never drops that low).

I also included a master switch, which I use to disable this automation and set a low temperature permanently. This is useful when I am away on weekends or during holidays.
I can change the temperature at any time using the wheel on the thermostat. It will return to the previous setting with the next change of the schedule (or after pressing the dedicated reset button).

Lessons learned
The apartment building has really great thermal inertia, so the temperature doesn’t drop much overnight. However, a freezing weekend with the heating turned off makes a difference. Over two days of the weekend, it can make a difference of up to 2 degrees Celsius, which will hopefully be reflected in our final bill. Of course, it depends on the outside temperature. But the computing method of the variable part of our billing also takes the outside temperature into account, so when it’s cold outside, the difference should be definitely (right?) noticeable after a year.
Note that this is all theory as in our climate, every season is different so I do not have enough data to get the outcome of this.
Last fall, I put new alkaline batteries in the head, and the head lasted the entire heating season.
What is quite annoying is the occasional communication failure with the the thermostat. Even though Home Assistant appears to have sent the command to change the temperature, the thermostat does not respond to the change. It turns out that this mainly happens when there has been no communication with the thermostats for a long time (more than 24 hours). So far (fingers crossed), I have successfully solved this by communicating with the thermostat more frequently, even when the heating has been “off” for a long time. I simply send the same target temperature every day, and when I switch it on, the thermostat responds more reliably.
Unfortunately, it looks like it will be difficult to update the thermostats, because the ZHA integration of the firmware update function for devices outside a specific list of manufacturers has disappeared overnight. And it probably won’t be back anytime soon.
Nevertheless, I am still satisfied with the thermostat and, apart from the above-mentioned (and hopefully resolved) problems, it works reliably.
Comments