I have a water-based floor heating system in my house.
The valves for each floor heating ring are controlled by a ZigBee on/off switch that is registered with Home Assistant. I also have a ZigBee thermometers for each ring.
I have created Generic thermostats for each ZigBee switch + thermometer pair in my config.yaml. This works fine and I can control the temperature of my home with that setup.
However, this has some limitations. For instance - once the thermometer reaches the target temperature - the ZigBee switch accurately turns the heating valve off. However, since this is a water-based floor heating system - once the floor has been heated it continues to radiate heat for some hours after the temperature has been reached. This basically means that once the switch is off - the temperature continues to rise for some time.
This is why I had to add some automations around the generic thermostat - turn it off for 15m after heating continuously for 40m to compensate for the overheating.
Is there a way to improve this setup? Are there maybe some smarter thermostats which can automatically detect and calculate when to turn off the switch before actually reaching the target temp?
Your setup is unique and so are every other setup of that type.
The uniqueness is in the length of the hoses/pipes, the diameter of the hoses/pipes, the water pressure, the heat absorption in the floor and the disappation from same floor.
Yeah, thermal inertia is a real challenge with floor heating, and it sounds like you’ve already done a good job working around it with your automations. One option to explore is building a template thermostat or using a custom PID-based controller that can factor in how fast the temperature is rising and start cutting heat a bit earlier to avoid overshooting. You could even track average temperature deltas over time to better predict when to shut off. It’s not a one-size-fits-all since, like Wally said, every system’s thermal behavior is a bit different, but some smarter logic can go a long way in getting closer to that target temp.
I lower the setpoint (essentially switching off the heating) if the current temperature is within 1deg of target and the rate of climb is over 0.5deg/hr.
The numbers would be different for you, but it should work.
It sounds like a pretty decent setup then.
You can learn a bit about how fast or slow the floor heat up and cool down, so you can adjust your timing, but other than that you would probably have to go into a lot of data collecting to get data to form a more precise algorithm.