nielsfaber / zoned-heating

Integration for multi-zone climate control
35 stars 9 forks source link

Question - dynamic adjustment of setpoint? #19

Open lievendf opened 9 months ago

lievendf commented 9 months ago

Hi,

I'm wondering if the integration applies a fixed calculated setpoint or recalculates the temperature difference between the zones and the controller periodically to change to an optimal setpoint. When the temperature difference between setpoint and actual temperature is low a modulating thermostat will heat the water to a lower temperature then when the temperature difference is high. This makes a big difference in power consumption compared to a simple on/off thermostat which usually heats the water to a fixed (high) temperature. This also causes less fluctuation between temperature and setpoint when trying to keep the temperature steady.

In my case the living room temperature, where the controller is located, might be close to the setpoint of the controller and the requested temperature of room x, while the current temperature of room x might be very low to start with. To heat room x to the requested temperature would cause a high setpoint, which would waste a lot of energy if this setpoint was kept until the room reaches the requested temperature.

If dynamic adjustment is currently not happening I would like to make a feature request for this option.

Thanks, Lieven

lievendf commented 9 months ago

I don't really know Python but had a quick look in the code. I think an extra check in switch.py async_zone_state_changed() can be added to detect if old_state[ATTR_CURRENT_TEMPERATURE] != new_state[ATTR_CURRENT_TEMPERATURE], and in that case also do await self.async_calculate_override().

nielsfaber commented 9 months ago

What this integration does is:

  1. If you turn on the heat in a zone (TRD), the integration calculates the difference between current temperature and desired temperature
  2. A setpoint is calculated for the controller (central thermostat): setpoint = current temperature measured by controller + difference
  3. The controller will be set to heat with the calculated new setpoint. When the zone reaches the desired value, the controller will be reset to the previous setting

So to answer your question:

I'm wondering if the integration applies a fixed calculated setpoint or recalculates the temperature difference between the zones and the controller periodically to change to an optimal setpoint.

There is no fixed setpoint, it is calculated based on what the user sets. Recalculation is only performed when the user applies a different setting to the zone TRV.

If dynamic adjustment is currently not happening I would like to make a feature request for this option.

I think dynamic adjustment could improve the behaviour, especially if you have a large difference in temperature between the rooms in your house. If a zone is set to warm up by +4C, the thermostat will also be set to +4C. While the zone is warming up and only +2C is left, it could be improved to update the thermostat to +2C as well.

However, it should be prevented that in every step of temperature change this updating occurs. Most TRVs have 0.1C resolution, so recalculating on every step would cause a lot of commands being sent to the thermostat. In addition, this integration can support multiple zones, so any temperature change in any zone could trigger recalculation.

Another improvement I can think of is applying scaling factors. As said, currently if a zone is set to warm up by +4C, the thermostat will also be set to +4C. If that zone is a small room compared to the living room, it could be sufficient to set the thermostat to warm up by +2C instead. I guess this is very user (and room) dependent, so scaling factors should be configurable.

lievendf commented 9 months ago

Hi Niels,

However, it should be prevented that in every step of temperature change this updating occurs. Most TRVs have 0.1C resolution, so recalculating on every step would cause a lot of commands being sent to the thermostat. In addition, this integration can support multiple zones, so any temperature change in any zone could trigger recalculation.

I've noticed the external temperature sensor I'm using indeed has a 0.1C resolution while the TRV seems to have a 0.5C resolution for setpoint. The controller climate entity seems to have a 0.5C resolution. I'm not sure where the rounding occurs but a change in zone temperature only had an effect on controller setpoint when the delta was at least 0.5C. So small increments might not always cause lots of commands... And even if this would be the case (e.g when a controller supports 0.1C resolution for setpoint), why do you think this could be a problem?

Another improvement I can think of is applying scaling factors. As said, currently if a zone is set to warm up by +4C, the thermostat will also be set to +4C. If that zone is a small room compared to the living room, it could be sufficient to set the thermostat to warm up by +2C instead. I guess this is very user (and room) dependent, so scaling factors should be configurable.

Scaling + number of active zones could indeed help. I know some thermostats also use this info, as mine has a setting for "Building type" (small/medium/large).