ESPHome PID Climate configuration for warm floor

Hi all,

I’ve been using EspHome with a simple Climate component for my warm floor control for some time and found that a simple thermostat cannot maintain a constant temperature of the surface due to a huge inertia of the massive concrete floor. My system consists of a gas boiler (on-off) and NC electric thermal actuators (on-off), controlled by relays, connected to ESP8266 GPIO. Temperature sensors DS18B20 installed inside the concrete floor somewhere in-between of the pipes with hot water to receive the actual temperature of the floor.

Currently it behaves the following way:
Day temperature of the floor is set to 26°C with the hysteresis of 0,1°C.
Water temperature from the boiler is always 45°C.
EspHome thermostat turns ON the relay which opens electric actuators (takes up to 5 mins until fully open). Hot water starts heating the pipes inside the floor. Once the temperature on DS18B20 reaches 26,1°C, Thermostat closes the actuators. But the temperature on the sensor still goes up since the hot water is still in the pipe and still heating the concrete. And it usually raises up to 27,5-28°C that is too warm.
After some time temperature goes down and Thermostat starts heating again once it drops below 26,0°C. But since the water inside the massive concrete floor is still cold, and actuators are too slow, the temperature on the sensor drops even after the actuators are ON again, and usually goes down to 25,5°C before starts to grow again. And it’s too cold. As a fact I’ve got 3°C of real floor temperature hysteresis against 0,1°C “theoretical” hysteresis, configured in the yaml.

As far as I understood PID algorithm can help to maintain constant floor temperature in my case. I found EspHome PID Climate component and it looks good, but the only thing in the manual is confusing:
“Please note the output must be controllable with continuous value (not only ON/OFF, but any state in between for example 50% heating power).”
My NC electric actuators have ON-OFF option only and the only way to simulate continuous value is to add a kind of PWM logic in-between PID Climate and Switch components (Relay). But I’m not sure how to do it and eventually how to learn the whole system to work properly.

Will appreciate any ideas how to configure EspHome PID Climate component for my hardware.

1 Like

Try to use Sigma-Delta Output between PID Climate and binary output. May be it is good enough.

1 Like

Thank you, it works.
Currently testing with different PID Control parameters.

Greetings. I have similar problems with an incubator that has a very inert heater, which causes a lot of hysteresis. I would like to try using sigma-delta, but I don’t understand how to use this in conjunction with the climate component (I have been using a bang-bang thermostat component, but that’s not crucial). Could you show your code for esp, maybe the interaction of the components will become clearer for me. Thanks.

Sigma-Delta is a kind of converter from float output by PID climate to binary on/off output.
No idea how to use it with bang-bang climate.

On my floor heating was “solved” overheating issue by moving heat_overrun under target temperature, setting up it negative. f.e. target is 25.0, heat_deadband 0.5 (so 24.5) & heat_overrun -0.3 (so 24.7). Thus leading to heater switching off before target temperature is reached, the rest achieving by inertia.

I don’t necessarily have to use bang-bang, I can switch to any other component. That’s why I asked for a code sample to understand how it should work properly.