I did not like the thermostats out there, because they all run on batterie and wireless. I want to save the wireless spectrum for our mobile devices. It is also not very efficient to do temperature adjustments with those thermostats. If the heating system is configured correctly, it will take care of any temperature changes and compensate for them, but it is important for example, to turn the thermostat off, if a window is opened.
The thermostat should only be used to adjust the comfort, if you’re feeling cold or warm.
So, I went to develop my own thermostat.
I tried Arduino Megas, but that didn’t go well. For details see my post Stay away from Arduino, go for ESP32.
I now use an ESP32-PoE-ISO with MQTT.
I attached a DS18B20 as temperature sensor and a L298N motor driver. I use servos that I took from some cheap wireless thermostats from amazon (10€ each) including their valve thread and put them into some body lotion casing (1€ each) from the drug store. Here two pictures:
On the software side, I use the pubsub client library for MQTT.
EDIT: I tried ESPHome for this unsuccessfully, see here GPIO Pin drops to 0V when sensors publishes.
The logic is to just translated the angular presets from a manual thermostat to specific positions. I track the thermostat positions via the drive time of the servos. To compensate for inaccuracy the thermostats are calibrated once a week. First I tried to build a PID controller with fuzzy logic decision making. Total over engineering.
Since the thermo dynamics in a house with an open lobby are very chaotic, I use the temperature sensors to detect whether there is a high temperature gradient. If this is detected and a window somewhere in the house is opened, I turn down this thermostat.
It took me 2 years to develop and finally deploy all 13 devices.
Now it is working very well. With the exception that I still wait for this What the heck it is not possible to use area in automations feature to be available eventually to have the link between window contact and thermostat in the same room.