I will be improving my home heating system as it is currently as basic as it gets: on/off boiler with manually operated radiators. I have been looking for a solution that integrates well with Home Assistant but was having some trouble finding one that ticked all my requirements. Therefore, I am posting here my list of requirements and the results of my research to start a discussion and hopefully converge to a proper solution.
Requirements shortlist
- A functional zone heating system with temperature control per room
- Preheat rooms such that they are heated when someone enters, this requires the following subrequirements:
a. Predict home arrival time
b. Predict room occupancy
c. Calculate the heatup time of rooms - Predict changes in the target temperature per room (during a day or seasonally)
- Lower target temperatures when no one is home or when no occupancy is expected in a room
- Save energy by optimizing the heating behavior by taking the following into consideration:
a. The forecast for the weather (temp, humidity, wind)
b. The variation of electricity/gas tarifs
c. The prediction of solar cell power - Save energy by controlling passive heating by:
a. Opening/closing window covers
b. …?
1: A functional zone heating system with temperature control per room
My house heating system consist of a central boiler with floor heating in the living room and radiators in other rooms. I envision the following setup:
Smart TRV’s make sure that the target temperature in a room is reached by controlling its valve opening based on the current temperature measured by an external sensor in the room. The valve opening should be controlled using PID, this can be done on the TRV itself (you send the target temperature to the TRV) or in home assistant (you send the valve opening % to the TRV). The PID controller should be able to cope with water temperature changes as the temperature of the water only determines how fast the room reaches the target temperature because a larger difference in temperature between the radiators and the room results in more heat dissipation.
The central boiler should supply the radiators with hot water. To increase temperatures quickly, very hot (e.g. 60 °C) water is needed, to keep rooms at consistent temperature, warm (e.g. 40 °C) water is required. The outlet temperature is defined by a PID controller that uses the largest temperature offset of all rooms as its input (rooms with floor heating can be excluded as lower water temperatures are generally sufficient for these systems). To control the boiler outlet temperature, the boiler should support opentherm. An ESP based OpenTherm gateway communicates the required outlet temperature to the boiler.
Hardware/software:
- Bosch radiator thermostat II, supports an external temperature sensor and valve control (Bosch BTH-RA control via MQTT | Zigbee2MQTT).
- External temperature sensors
- ESP opentherm gateway
- PID controller
- https://www.reddit.com/r/homeassistant/comments/17j948u/thermostat_integration_pid/
- How to get sub-degree accuracy in home temperature, using a dumb A/C and ESPHome — Rudd-O.com
- GitHub - ScratMan/HASmartThermostat: Smart Thermostat with PID controller for HomeAssistant
- GitHub - soloam/ha-pid-controller: PID Controller to Home Assistant
- Convert old boiler to opentherm:
2: Preheat rooms such that they are heated when someone enters
Preheat rooms based on the predicted arrival time or room occupancy time such that the target temperature is reached when you are home/enter a room. For this the time it takes to heat up a room to the target temperature needs to be known (the time constants of the rooms). When occupancy is expected to be shorter than e.g. 1 hour, no preheating will be done.
2a: Predict home arrival time
Predict arrival time using current phone gps data (location, velocity vector, time of day etc.) and a model that uses historic device gps data. This can be done in Home Assistant: Import historic data in python, create machine learning model, predict arrival time based on current input.
2b: Predict room occupancy
Similar to the prediction of arrival time, but for rooms the input data of the model is the historic occupancy data of the rooms: Import historic data in python, create machine learning model, predict room occupancy based on time of day, weekday etc. For hardware this requires occupancy sensors (probably mmWave sensors).
2c: Calculate the heatup time of rooms
The time constants of the rooms can be estimated from historical data by measuring the time it takes for the room’s temperature to reach 63.2% of the way from the initial temperature to the setpoint temperature. This can also be done in Home Assistant using python.
3: Predict changes in the target temperature per room (during a day or seasonally)
The target temperature can be predicted based on historic data to account for different temperature requirements during a day or between seasons.
4: Lower target temperatures when no one is home or when no occupancy is expected in a room
When everyone has left the house, the target temperature will lower (heating set to off when the system can also cool). The time constants and proximity of people can be used to define the target temperature when away such that there will be enough time for the rooms to heat up when returning home. The target temperature in rooms where no occupancy is expected for a long period (e.g. during the night) will also be lowered. There should be a minimum temperature, these automations can be done using Home Assistant.
5: Save energy by optimizing the heating behavior
When the outside temperature will rise quickly, less preheating might be required. Also, when the energy tariff will increase in the coming hours, starting the preheating process earlier is beneficial. For solar cell power, adapting the power usage such that it corresponds with solar production is beneficial.
6: Save energy by controlling passive heating
When heating is required and the sun is shining, opening window covers will help heat a room. To keep heat out, window covers can be closed.
Why a custom system over off-the-shelf systems?
Instead of going through all the effort of combining TRV’s with an opentherm gateway as listed for requirement 1, I can also buy an off the shelf system that has a central unit connected to the central boiler and smart TRV’s, take Tado as an example. I would then be missing the room occupancy prediction and a tight integration with solar panels, the occupancy prediction can be added using Home Assistant but letting Tado know when solar production is high will be difficult. Alternatively, smart functionality of the Tado system can be switched off such that it is a simple zone heating system, all requirements except for the first and the energy optimization can then be implemented using Home Assistant, giving similar results (less effort but more expensive).
Conclusion
Concluding, I feel like going the pure Home Assistant route is still a bit hacky and I don’t know which problems I will still encounter. On the other hand buying an off the shelf system like Tado feels like it’s not a full solution, which is emphasized by the following reasons:
- Systems like Tado can do smart things, but will never have the amount of sensor data that is possible with home assistant and the level of integration.
- Systems like Tado need to keep their users happy. As the average user probably uses their thermostat similar to a “dumb” one (manual control and scheduling), agressieve optimization and prediction using models that might not always be 100% correct can lead to complaints. My expectation is that systems like Tado do use these models, but very subtle.
- Systems like Tado are not local. (Local is better, but I don’t care too much about this)