Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Question - dynamic adjustment of setpoint? #19

Open
lievendf opened this issue Jan 11, 2024 · 3 comments
Open

Question - dynamic adjustment of setpoint? #19

lievendf opened this issue Jan 11, 2024 · 3 comments

Comments

@lievendf
Copy link

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
Copy link
Author

lievendf commented Jan 16, 2024

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
Copy link
Owner

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
Copy link
Author

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).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants