From a161540f103919d0f70d041902269b5a0ed4c8c1 Mon Sep 17 00:00:00 2001 From: Jean-Marc Collin Date: Sat, 18 Feb 2023 11:49:20 +0100 Subject: [PATCH] Testus +1 --- .../versatile_thermostat/climate.py | 26 ++++++++++++--- .../versatile_thermostat/tests/commons.py | 32 +++++++++++++++++++ .../versatile_thermostat/tests/test_tpi.py | 2 +- 3 files changed, 55 insertions(+), 5 deletions(-) diff --git a/custom_components/versatile_thermostat/climate.py b/custom_components/versatile_thermostat/climate.py index 0ee94ea..f0c38cc 100644 --- a/custom_components/versatile_thermostat/climate.py +++ b/custom_components/versatile_thermostat/climate.py @@ -204,6 +204,11 @@ class VersatileThermostat(ClimateEntity, RestoreEntity): _last_temperature_mesure: datetime _last_ext_temperature_mesure: datetime _total_energy: float + _overpowering_state: bool + _window_state: bool + _motion_state: bool + _presence_state: bool + _security_state: bool def __init__(self, hass: HomeAssistant, unique_id, name, entry_infos) -> None: """Initialize the thermostat.""" @@ -366,8 +371,6 @@ class VersatileThermostat(ClimateEntity, RestoreEntity): and self._device_power ): self._pmax_on = True - self._current_power = 0 - self._current_power_max = 0 else: _LOGGER.info("%s - Power management is not fully configured", self) @@ -997,7 +1000,7 @@ class VersatileThermostat(ClimateEntity, RestoreEntity): if self._is_over_climate: return None elif self._device_power: - return self._device_power * self._prop_algorithm.on_percent + return float(self._device_power * self._prop_algorithm.on_percent) else: return None @@ -1006,6 +1009,11 @@ class VersatileThermostat(ClimateEntity, RestoreEntity): """Returns the total energy calculated for this thermostast""" return self._total_energy + @property + def overpowering_state(self) -> bool | None: + """Get the overpowering_state""" + return self._overpowering_state + def turn_aux_heat_on(self) -> None: """Turn auxiliary heater on.""" if self._is_over_climate and self._underlying_climate: @@ -1696,7 +1704,16 @@ class VersatileThermostat(ClimateEntity, RestoreEntity): """ if not self._pmax_on: - return + _LOGGER.debug("%s - power not configured. check_overpowering not available") + return False + + if ( + self._current_power is None + or self._device_power is None + or self._current_power_max is None + ): + _LOGGER.warning("%s - power not valued. check_overpowering not available") + return False _LOGGER.debug( "%s - overpowering check: power=%.3f, max_power=%.3f heater power=%.3f", @@ -1705,6 +1722,7 @@ class VersatileThermostat(ClimateEntity, RestoreEntity): self._current_power_max, self._device_power, ) + ret = self._current_power + self._device_power >= self._current_power_max if not self._overpowering_state and ret and not self._hvac_mode == HVACMode.OFF: _LOGGER.warning( diff --git a/custom_components/versatile_thermostat/tests/commons.py b/custom_components/versatile_thermostat/tests/commons.py index a98270e..f331930 100644 --- a/custom_components/versatile_thermostat/tests/commons.py +++ b/custom_components/versatile_thermostat/tests/commons.py @@ -114,3 +114,35 @@ async def send_temperature_change_event(entity: VersatileThermostat, new_temp, d }, ) await entity._async_temperature_changed(temp_event) + + +async def send_power_change_event(entity: VersatileThermostat, new_power, date): + """Sending a new power event simulating a change on power sensor""" + power_event = Event( + EVENT_STATE_CHANGED, + { + "new_state": State( + entity_id=entity.entity_id, + state=new_power, + last_changed=date, + last_updated=date, + ) + }, + ) + await entity._async_power_changed(power_event) + + +async def send_max_power_change_event(entity: VersatileThermostat, new_power_max, date): + """Sending a new power event simulating a change on power max sensor""" + power_event = Event( + EVENT_STATE_CHANGED, + { + "new_state": State( + entity_id=entity.entity_id, + state=new_power_max, + last_changed=date, + last_updated=date, + ) + }, + ) + await entity._async_max_power_changed(power_event) diff --git a/custom_components/versatile_thermostat/tests/test_tpi.py b/custom_components/versatile_thermostat/tests/test_tpi.py index 9b4d6f6..54c9730 100644 --- a/custom_components/versatile_thermostat/tests/test_tpi.py +++ b/custom_components/versatile_thermostat/tests/test_tpi.py @@ -46,7 +46,7 @@ async def test_tpi_calculation(hass: HomeAssistant, skip_hass_states_is_state): assert tpi_algo.calculated_on_percent == 1 assert tpi_algo.on_time_sec == 300 assert tpi_algo.off_time_sec == 0 - assert entity.mean_cycle_power is None + assert entity.mean_cycle_power is None # no device power configured tpi_algo.calculate(15, 14, 5) assert tpi_algo.on_percent == 0.4