From 663a13809c655418c350e2e5941f440c6ce30c3e Mon Sep 17 00:00:00 2001 From: Jean-Marc Collin Date: Tue, 31 Oct 2023 22:17:33 +0000 Subject: [PATCH] Do no reset the accumulated error after temp change. Lower the coefs --- custom_components/versatile_thermostat/const.py | 15 +++++++++++++-- .../versatile_thermostat/pi_algorithm.py | 3 ++- tests/const.py | 6 +++--- tests/test_auto_regulation.py | 4 ++-- 4 files changed, 20 insertions(+), 8 deletions(-) diff --git a/custom_components/versatile_thermostat/const.py b/custom_components/versatile_thermostat/const.py index 8ffb3cd..51390e1 100644 --- a/custom_components/versatile_thermostat/const.py +++ b/custom_components/versatile_thermostat/const.py @@ -227,13 +227,23 @@ class RegulationParamLight: """ Light parameters for regulation""" kp:float = 0.2 ki:float = 0.05 + k_ext:float = 0.05 + offset_max:float = 1.5 + stabilization_threshold:float = 0.1 + accumulated_error_threshold:float = 10 + + +class RegulationParamMedium: + """ Light parameters for regulation""" + kp:float = 0.3 + ki:float = 0.05 k_ext:float = 0.1 offset_max:float = 2 stabilization_threshold:float = 0.1 accumulated_error_threshold:float = 20 -class RegulationParamMedium: +class RegulationParamStrong: """ Medium parameters for regulation""" kp:float = 0.4 ki:float = 0.08 @@ -242,7 +252,8 @@ class RegulationParamMedium: stabilization_threshold:float = 0.1 accumulated_error_threshold:float = 25 -class RegulationParamStrong: +# Not used now +class RegulationParamVeryStrong: """ Strong parameters for regulation""" kp:float = 0.6 ki:float = 0.1 diff --git a/custom_components/versatile_thermostat/pi_algorithm.py b/custom_components/versatile_thermostat/pi_algorithm.py index 0f2505f..79d7d4a 100644 --- a/custom_components/versatile_thermostat/pi_algorithm.py +++ b/custom_components/versatile_thermostat/pi_algorithm.py @@ -29,7 +29,8 @@ class PITemperatureRegulator: def set_target_temp(self, target_temp): """ Set the new target_temp""" self.target_temp = target_temp - self.accumulated_error = 0 + # Do not reset the accumulated error + # self.accumulated_error = 0 def calculate_regulated_temperature(self, internal_temp: float, external_temp:float): # pylint: disable=unused-argument """ Calculate a new target_temp given some temperature""" diff --git a/tests/const.py b/tests/const.py index ea40d73..e73bbfa 100644 --- a/tests/const.py +++ b/tests/const.py @@ -51,7 +51,7 @@ from custom_components.versatile_thermostat.const import ( PRESET_AWAY_SUFFIX, CONF_CLIMATE, CONF_AUTO_REGULATION_MODE, - CONF_AUTO_REGULATION_MEDIUM, + CONF_AUTO_REGULATION_STRONG, CONF_AUTO_REGULATION_NONE, CONF_AUTO_REGULATION_DTEMP, CONF_AUTO_REGULATION_PERIOD_MIN @@ -127,7 +127,7 @@ MOCK_TH_OVER_SWITCH_TPI_CONFIG = { MOCK_TH_OVER_CLIMATE_TYPE_CONFIG = { CONF_CLIMATE: "climate.mock_climate", CONF_AC_MODE: False, - CONF_AUTO_REGULATION_MODE: CONF_AUTO_REGULATION_MEDIUM, + CONF_AUTO_REGULATION_MODE: CONF_AUTO_REGULATION_STRONG, CONF_AUTO_REGULATION_DTEMP: 0.5, CONF_AUTO_REGULATION_PERIOD_MIN: 2 } @@ -141,7 +141,7 @@ MOCK_TH_OVER_CLIMATE_TYPE_NOT_REGULATED_CONFIG = { MOCK_TH_OVER_CLIMATE_TYPE_AC_CONFIG = { CONF_CLIMATE: "climate.mock_climate", CONF_AC_MODE: True, - CONF_AUTO_REGULATION_MODE: CONF_AUTO_REGULATION_MEDIUM, + CONF_AUTO_REGULATION_MODE: CONF_AUTO_REGULATION_STRONG, CONF_AUTO_REGULATION_DTEMP: 0.5, CONF_AUTO_REGULATION_PERIOD_MIN: 1 } diff --git a/tests/test_auto_regulation.py b/tests/test_auto_regulation.py index 51c3f12..2d74532 100644 --- a/tests/test_auto_regulation.py +++ b/tests/test_auto_regulation.py @@ -306,7 +306,7 @@ async def test_over_climate_regulation_limitations(hass: HomeAssistant, skip_has ): await entity.async_set_temperature(temperature=17) assert entity.regulated_target_temp > entity.target_temperature - assert entity.regulated_target_temp == 18+0.5 # In medium we could go up to +3 degre. 0.7 without round_to_nearest + assert entity.regulated_target_temp == 18+1 # In strong we could go up to +3 degre. 0.7 without round_to_nearest old_regulated_temp = entity.regulated_target_temp # change temperature so that dtemp < 0.5 and time is > period_min (+ 3min) @@ -331,4 +331,4 @@ async def test_over_climate_regulation_limitations(hass: HomeAssistant, skip_has # the regulated should have been done assert entity.regulated_target_temp != old_regulated_temp assert entity.regulated_target_temp > entity.target_temperature - assert entity.regulated_target_temp == 17 + 0.5 # 0.7 without round_to_nearest \ No newline at end of file + assert entity.regulated_target_temp == 17 + 1 # 0.7 without round_to_nearest \ No newline at end of file