From 1f13eb4f37e139e78943ee9d3d2f4698e7432269 Mon Sep 17 00:00:00 2001 From: Paulo Ferreira de Castro Date: Tue, 30 Jan 2024 06:47:17 +0000 Subject: [PATCH] Implement a keep-alive feature for directly controlled heater switches (#345) * Add keep_alive feature for directly controlled switches * Add test cases for the switch keep-alive feature * Add documentation (readme) and translations for the keep-alive feature --- .devcontainer/devcontainer.json | 2 +- README-fr.md | 4 + README.md | 12 +- .../versatile_thermostat/config_schema.py | 1 + .../versatile_thermostat/const.py | 2 + .../versatile_thermostat/keep_alive.py | 53 ++++ .../versatile_thermostat/strings.json | 4 + .../versatile_thermostat/thermostat_switch.py | 3 + .../versatile_thermostat/translations/en.json | 4 + .../versatile_thermostat/translations/fr.json | 4 + .../versatile_thermostat/translations/it.json | 4 + .../versatile_thermostat/underlyings.py | 37 ++- images/config-linked-entity.png | Bin 31139 -> 51682 bytes images/en/config-linked-entity.png | Bin 0 -> 51084 bytes tests/const.py | 2 + tests/test_config_flow.py | 1 + tests/test_multiple_switch.py | 2 + tests/test_start.py | 1 + tests/test_switch_keep_alive.py | 256 ++++++++++++++++++ 19 files changed, 375 insertions(+), 17 deletions(-) create mode 100644 custom_components/versatile_thermostat/keep_alive.py create mode 100644 images/en/config-linked-entity.png create mode 100644 tests/test_switch_keep_alive.py diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index f7884d7..ccc2160 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -10,7 +10,7 @@ "postCreateCommand": "./container dev-setup", "mounts": [ - "source=/Users/jmcollin/.ssh,target=/home/vscode/.ssh,type=bind,consistency=cached", + "source=${localEnv:HOME}/.ssh,target=/home/vscode/.ssh,type=bind,consistency=cached", // uncomment this to get the versatile-thermostat-ui-card "source=${localEnv:HOME}/SugarSync/Projets/home-assistant/versatile-thermostat-ui-card/dist,target=/workspaces/versatile_thermostat/config/www/community/versatile-thermostat-ui-card,type=bind,consistency=cached" ], diff --git a/README-fr.md b/README-fr.md index 98e4e80..2dfb5c3 100644 --- a/README-fr.md +++ b/README-fr.md @@ -245,6 +245,9 @@ En fonction de votre choix sur le type de thermostat, vous devrez choisir une ou ### Pour un thermostat de type ```thermostat_over_switch``` ![image](images/config-linked-entity.png) + +Certains équipements nécessitent d'être périodiquement sollicités pour empêcher un arrêt de sécurité. Connu sous le nom de "keep-alive" cette fonction est activable en entrant un nombre de secondes non nul dans le champ d'intervalle keep-alive du thermostat. Pour désactiver la fonction ou en cas de doute, laissez-le vide ou entrez zéro (valeur par défaut). + L'algorithme à utiliser est aujourd'hui limité à TPI est disponible. Voir [algorithme](#algorithme). Si plusieurs entités de type sont configurées, la thermostat décale les activations afin de minimiser le nombre de switch actif à un instant t. Ca permet une meilleure répartition de la puissance puisque chaque radiateur va s'allumer à son tour. Exemple de déclenchement synchronisé : @@ -689,6 +692,7 @@ context: | ``heater_entity2_id`` | 2ème radiateur | X | - | - | - | | ``heater_entity3_id`` | 3ème radiateur | X | - | - | - | | ``heater_entity4_id`` | 4ème radiateur | X | - | - | - | +| ``heater_keep_alive`` | Intervalle de rafraichissement du switch | X | - | - | - | | ``proportional_function`` | Algorithme | X | - | - | - | | ``climate_entity1_id`` | Thermostat sous-jacent | - | X | - | - | | ``climate_entity2_id`` | 2ème thermostat sous-jacent | - | X | - | - | diff --git a/README.md b/README.md index da36659..75105d1 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,7 @@ - [How to find the right service?](#how-to-find-the-right-service) - [The events](#the-events) - [Warning](#warning) - - [Parameters synthesis](#parameters-synthesis) + - [Parameter summary](#parameter-summary) - [Examples tuning](#examples-tuning) - [Electrical heater](#electrical-heater) - [Central heating (gaz or fuel heating system)](#central-heating-gaz-or-fuel-heating-system) @@ -244,7 +244,10 @@ Depending on your choice of thermostat type, you will need to choose one or more It is possible to choose an over switch thermostat which controls air conditioning by checking the "AC Mode" box. In this case, only the cooling mode will be visible. ### For a ```thermostat_over_switch``` type thermostat -![image](images/config-linked-entity.png) +![image](images/en/config-linked-entity.png) + +Some heater switches require regular "keep-alive messages" to prevent them from triggering a failsafe switch off. This feature can be enabled through the switch keep-alive interval configuration field. + The algorithm to use is currently limited to TPI is available. See [algorithm](#algorithm). If several type entities are configured, the thermostat shifts the activations in order to minimize the number of switches active at a time t. This allows for better power distribution since each radiator will turn on in turn. Example of synchronized triggering: @@ -654,9 +657,9 @@ context: > ![Tip](images/tips.png) _*Notes*_ > Controlling a central boiler using software or hardware such as home automation can pose risks to its proper functioning. Before using these functions, make sure that your boiler has safety functions and that they are working. Turning on a boiler if all the taps are closed can generate excess pressure, for example. -## Parameters synthesis +## Parameter summary -| Paramètre | Libellé | "over switch" | "over climate" | "over valve" | "central configuration" | +| Parameter | Description | "over switch" | "over climate" | "over valve" | "central configuration" | | ----------------------------------------- | ----------------------------------------------------------------------------- | ------------- | ------------------- | ------------ | ----------------------- | | ``name`` | Name | X | X | X | - | | ``thermostat_type`` | Thermostat type | X | X | X | - | @@ -675,6 +678,7 @@ context: | ``heater_entity2_id`` | 2nd heater switch | X | - | - | - | | ``heater_entity3_id`` | 3rd heater switch | X | - | - | - | | ``heater_entity4_id`` | 4th heater switch | X | - | - | - | +| ``heater_keep_alive`` | Switch keep-alive interval | X | - | - | - | | ``proportional_function`` | Algorithm | X | - | X | - | | ``climate_entity1_id`` | 1rst underlying climate | - | X | - | - | | ``climate_entity2_id`` | 2nd underlying climate | - | X | - | - | diff --git a/custom_components/versatile_thermostat/config_schema.py b/custom_components/versatile_thermostat/config_schema.py index 9108aed..70b15ae 100644 --- a/custom_components/versatile_thermostat/config_schema.py +++ b/custom_components/versatile_thermostat/config_schema.py @@ -98,6 +98,7 @@ STEP_THERMOSTAT_SWITCH = vol.Schema( # pylint: disable=invalid-name vol.Optional(CONF_HEATER_4): selector.EntitySelector( selector.EntitySelectorConfig(domain=[SWITCH_DOMAIN, INPUT_BOOLEAN_DOMAIN]), ), + vol.Optional(CONF_HEATER_KEEP_ALIVE): cv.positive_int, vol.Required(CONF_PROP_FUNCTION, default=PROPORTIONAL_FUNCTION_TPI): vol.In( [ PROPORTIONAL_FUNCTION_TPI, diff --git a/custom_components/versatile_thermostat/const.py b/custom_components/versatile_thermostat/const.py index 3f3dc84..eb656c2 100644 --- a/custom_components/versatile_thermostat/const.py +++ b/custom_components/versatile_thermostat/const.py @@ -51,6 +51,7 @@ CONF_HEATER = "heater_entity_id" CONF_HEATER_2 = "heater_entity2_id" CONF_HEATER_3 = "heater_entity3_id" CONF_HEATER_4 = "heater_entity4_id" +CONF_HEATER_KEEP_ALIVE = "heater_keep_alive" CONF_TEMP_SENSOR = "temperature_sensor_entity_id" CONF_EXTERNAL_TEMP_SENSOR = "external_temperature_sensor_entity_id" CONF_POWER_SENSOR = "power_sensor_entity_id" @@ -211,6 +212,7 @@ ALL_CONF = ( CONF_HEATER_2, CONF_HEATER_3, CONF_HEATER_4, + CONF_HEATER_KEEP_ALIVE, CONF_TEMP_SENSOR, CONF_EXTERNAL_TEMP_SENSOR, CONF_POWER_SENSOR, diff --git a/custom_components/versatile_thermostat/keep_alive.py b/custom_components/versatile_thermostat/keep_alive.py new file mode 100644 index 0000000..b2f13d2 --- /dev/null +++ b/custom_components/versatile_thermostat/keep_alive.py @@ -0,0 +1,53 @@ +"""Building blocks for the heater switch keep-alive feature. + +The heater switch keep-alive feature consists of regularly refreshing the state +of directly controlled switches at a configurable interval (regularly turning the +switch 'on' or 'off' again even if it is already turned 'on' or 'off'), just like +the keep_alive setting of Home Assistant's Generic Thermostat integration: + https://www.home-assistant.io/integrations/generic_thermostat/ +""" + +import logging +from collections.abc import Awaitable, Callable +from datetime import timedelta, datetime + +from homeassistant.core import HomeAssistant, CALLBACK_TYPE +from homeassistant.helpers.event import async_track_time_interval + + +_LOGGER = logging.getLogger(__name__) + + +class IntervalCaller: + """Repeatedly call a given async action function at a given regular interval. + + Convenience wrapper around Home Assistant's `async_track_time_interval` function. + """ + + def __init__(self, hass: HomeAssistant, interval_sec: int) -> None: + self._hass = hass + self._interval_sec = interval_sec + self._remove_handle: CALLBACK_TYPE | None = None + + def cancel(self): + """Cancel the regular calls to the action function.""" + if self._remove_handle: + self._remove_handle() + self._remove_handle = None + + def set_async_action(self, action: Callable[[], Awaitable[None]]): + """Set the async action function to be called at regular intervals.""" + if not self._interval_sec: + return + self.cancel() + + async def callback(_time: datetime): + try: + await action() + except Exception as e: # pylint: disable=broad-exception-caught + _LOGGER.error(e) + self.cancel() + + self._remove_handle = async_track_time_interval( + self._hass, callback, timedelta(seconds=self._interval_sec) + ) diff --git a/custom_components/versatile_thermostat/strings.json b/custom_components/versatile_thermostat/strings.json index f578231..04698c0 100644 --- a/custom_components/versatile_thermostat/strings.json +++ b/custom_components/versatile_thermostat/strings.json @@ -46,6 +46,7 @@ "heater_entity2_id": "2nd heater switch", "heater_entity3_id": "3rd heater switch", "heater_entity4_id": "4th heater switch", + "heater_keep_alive": "Switch keep-alive interval in seconds", "proportional_function": "Algorithm", "climate_entity_id": "1st underlying climate", "climate_entity2_id": "2nd underlying climate", @@ -67,6 +68,7 @@ "heater_entity2_id": "Optional 2nd Heater entity id. Leave empty if not used", "heater_entity3_id": "Optional 3rd Heater entity id. Leave empty if not used", "heater_entity4_id": "Optional 4th Heater entity id. Leave empty if not used", + "heater_keep_alive": "Optional heater switch state refresh interval. Leave empty if not required.", "proportional_function": "Algorithm to use (TPI is the only one for now)", "climate_entity_id": "Underlying climate entity id", "climate_entity2_id": "2nd underlying climate entity id", @@ -281,6 +283,7 @@ "heater_entity2_id": "2nd heater switch", "heater_entity3_id": "3rd heater switch", "heater_entity4_id": "4th heater switch", + "heater_keep_alive": "Switch keep-alive interval in seconds", "proportional_function": "Algorithm", "climate_entity_id": "1st underlying climate", "climate_entity2_id": "2nd underlying climate", @@ -302,6 +305,7 @@ "heater_entity2_id": "Optional 2nd Heater entity id. Leave empty if not used", "heater_entity3_id": "Optional 3rd Heater entity id. Leave empty if not used", "heater_entity4_id": "Optional 4th Heater entity id. Leave empty if not used", + "heater_keep_alive": "Optional heater switch state refresh interval. Leave empty if not required.", "proportional_function": "Algorithm to use (TPI is the only one for now)", "climate_entity_id": "Underlying climate entity id", "climate_entity2_id": "2nd underlying climate entity id", diff --git a/custom_components/versatile_thermostat/thermostat_switch.py b/custom_components/versatile_thermostat/thermostat_switch.py index 99c69ee..f711c0b 100644 --- a/custom_components/versatile_thermostat/thermostat_switch.py +++ b/custom_components/versatile_thermostat/thermostat_switch.py @@ -15,6 +15,7 @@ from .const import ( CONF_HEATER_2, CONF_HEATER_3, CONF_HEATER_4, + CONF_HEATER_KEEP_ALIVE, CONF_INVERSE_SWITCH, overrides, ) @@ -105,6 +106,7 @@ class ThermostatOverSwitch(BaseThermostat): thermostat=self, switch_entity_id=switch, initial_delay_sec=idx * delta_cycle, + keep_alive_sec=config_entry.get(CONF_HEATER_KEEP_ALIVE, 0), ) ) @@ -125,6 +127,7 @@ class ThermostatOverSwitch(BaseThermostat): self.hass, [switch.entity_id], self._async_switch_changed ) ) + switch.startup() self.hass.create_task(self.async_control_heating()) diff --git a/custom_components/versatile_thermostat/translations/en.json b/custom_components/versatile_thermostat/translations/en.json index f578231..04698c0 100644 --- a/custom_components/versatile_thermostat/translations/en.json +++ b/custom_components/versatile_thermostat/translations/en.json @@ -46,6 +46,7 @@ "heater_entity2_id": "2nd heater switch", "heater_entity3_id": "3rd heater switch", "heater_entity4_id": "4th heater switch", + "heater_keep_alive": "Switch keep-alive interval in seconds", "proportional_function": "Algorithm", "climate_entity_id": "1st underlying climate", "climate_entity2_id": "2nd underlying climate", @@ -67,6 +68,7 @@ "heater_entity2_id": "Optional 2nd Heater entity id. Leave empty if not used", "heater_entity3_id": "Optional 3rd Heater entity id. Leave empty if not used", "heater_entity4_id": "Optional 4th Heater entity id. Leave empty if not used", + "heater_keep_alive": "Optional heater switch state refresh interval. Leave empty if not required.", "proportional_function": "Algorithm to use (TPI is the only one for now)", "climate_entity_id": "Underlying climate entity id", "climate_entity2_id": "2nd underlying climate entity id", @@ -281,6 +283,7 @@ "heater_entity2_id": "2nd heater switch", "heater_entity3_id": "3rd heater switch", "heater_entity4_id": "4th heater switch", + "heater_keep_alive": "Switch keep-alive interval in seconds", "proportional_function": "Algorithm", "climate_entity_id": "1st underlying climate", "climate_entity2_id": "2nd underlying climate", @@ -302,6 +305,7 @@ "heater_entity2_id": "Optional 2nd Heater entity id. Leave empty if not used", "heater_entity3_id": "Optional 3rd Heater entity id. Leave empty if not used", "heater_entity4_id": "Optional 4th Heater entity id. Leave empty if not used", + "heater_keep_alive": "Optional heater switch state refresh interval. Leave empty if not required.", "proportional_function": "Algorithm to use (TPI is the only one for now)", "climate_entity_id": "Underlying climate entity id", "climate_entity2_id": "2nd underlying climate entity id", diff --git a/custom_components/versatile_thermostat/translations/fr.json b/custom_components/versatile_thermostat/translations/fr.json index 45432bb..16d1861 100644 --- a/custom_components/versatile_thermostat/translations/fr.json +++ b/custom_components/versatile_thermostat/translations/fr.json @@ -46,6 +46,7 @@ "heater_entity2_id": "2ème radiateur", "heater_entity3_id": "3ème radiateur", "heater_entity4_id": "4ème radiateur", + "heater_keep_alive": "Intervalle keep-alive du switch en secondes", "proportional_function": "Algorithme", "climate_entity_id": "Thermostat sous-jacent", "climate_entity2_id": "2ème thermostat sous-jacent", @@ -67,6 +68,7 @@ "heater_entity2_id": "Optionnel entity id du 2ème radiateur", "heater_entity3_id": "Optionnel entity id du 3ème radiateur", "heater_entity4_id": "Optionnel entity id du 4ème radiateur", + "heater_keep_alive": "Intervalle de rafraichissement du switch en secondes. Laisser vide pour désactiver. À n'utiliser que pour les switchs qui le nécessite.", "proportional_function": "Algorithme à utiliser (Seul TPI est disponible pour l'instant)", "climate_entity_id": "Entity id du thermostat sous-jacent", "climate_entity2_id": "Entity id du 2ème thermostat sous-jacent", @@ -293,6 +295,7 @@ "heater_entity2_id": "2ème radiateur", "heater_entity3_id": "3ème radiateur", "heater_entity4_id": "4ème radiateur", + "heater_keep_alive": "Intervalle keep-alive du switch en secondes", "proportional_function": "Algorithme", "climate_entity_id": "Thermostat sous-jacent", "climate_entity2_id": "2ème thermostat sous-jacent", @@ -314,6 +317,7 @@ "heater_entity2_id": "Optionnel entity id du 2ème radiateur", "heater_entity3_id": "Optionnel entity id du 3ème radiateur", "heater_entity4_id": "Optionnel entity id du 4ème radiateur", + "heater_keep_alive": "Intervalle de rafraichissement du switch en secondes. Laisser vide pour désactiver. À n'utiliser que pour les switchs qui le nécessite.", "proportional_function": "Algorithme à utiliser (Seul TPI est disponible pour l'instant)", "climate_entity_id": "Entity id du thermostat sous-jacent", "climate_entity2_id": "Entity id du 2ème thermostat sous-jacent", diff --git a/custom_components/versatile_thermostat/translations/it.json b/custom_components/versatile_thermostat/translations/it.json index b209433..f93147b 100644 --- a/custom_components/versatile_thermostat/translations/it.json +++ b/custom_components/versatile_thermostat/translations/it.json @@ -29,6 +29,7 @@ "heater_entity2_id": "Secondo riscaldatore", "heater_entity3_id": "Terzo riscaldatore", "heater_entity4_id": "Quarto riscaldatore", + "heater_keep_alive": "Intervallo keep-alive dell'interruttore in secondi", "proportional_function": "Algoritmo", "climate_entity_id": "Primo termostato", "climate_entity2_id": "Secondo termostato", @@ -48,6 +49,7 @@ "heater_entity2_id": "Entity id del secondo riscaldatore facoltativo. Lasciare vuoto se non utilizzato", "heater_entity3_id": "Entity id del terzo riscaldatore facoltativo. Lasciare vuoto se non utilizzato", "heater_entity4_id": "Entity id del quarto riscaldatore facoltativo. Lasciare vuoto se non utilizzato", + "heater_keep_alive": "Frequenza di aggiornamento dell'interruttore (facoltativo). Lasciare vuoto se non richiesto.", "proportional_function": "Algoritmo da utilizzare (il TPI per adesso è l'unico)", "climate_entity_id": "Entity id del primo termostato", "climate_entity2_id": "Entity id del secondo termostato", @@ -191,6 +193,7 @@ "heater_entity2_id": "Secondo riscaldatore", "heater_entity3_id": "Terzo riscaldatore", "heater_entity4_id": "Quarto riscaldatore", + "heater_keep_alive": "Intervallo keep-alive dell'interruttore in secondi", "proportional_function": "Algoritmo", "climate_entity_id": "Primo termostato", "climate_entity2_id": "Secondo termostato", @@ -210,6 +213,7 @@ "heater_entity2_id": "Entity id del secondo riscaldatore facoltativo. Lasciare vuoto se non utilizzato", "heater_entity3_id": "Entity id del terzo riscaldatore facoltativo. Lasciare vuoto se non utilizzato", "heater_entity4_id": "Entity id del quarto riscaldatore facoltativo. Lasciare vuoto se non utilizzato", + "heater_keep_alive": "Frequenza di aggiornamento dell'interruttore (facoltativo). Lasciare vuoto se non richiesto.", "proportional_function": "Algoritmo da utilizzare (il TPI per adesso è l'unico)", "climate_entity_id": "Entity id del primo termostato", "climate_entity2_id": "Entity id del secondo termostato", diff --git a/custom_components/versatile_thermostat/underlyings.py b/custom_components/versatile_thermostat/underlyings.py index 307b0bd..14ee73d 100644 --- a/custom_components/versatile_thermostat/underlyings.py +++ b/custom_components/versatile_thermostat/underlyings.py @@ -32,6 +32,7 @@ from homeassistant.helpers.entity_component import EntityComponent from homeassistant.helpers.event import async_call_later from .const import UnknownEntity, overrides +from .keep_alive import IntervalCaller _LOGGER = logging.getLogger(__name__) @@ -187,6 +188,7 @@ class UnderlyingSwitch(UnderlyingEntity): thermostat: Any, switch_entity_id: str, initial_delay_sec: int, + keep_alive_sec: int, ) -> None: """Initialize the underlying switch""" @@ -202,6 +204,7 @@ class UnderlyingSwitch(UnderlyingEntity): self._on_time_sec = 0 self._off_time_sec = 0 self._hvac_mode = None + self._keep_alive = IntervalCaller(hass, keep_alive_sec) @property def initial_delay_sec(self): @@ -214,6 +217,13 @@ class UnderlyingSwitch(UnderlyingEntity): """Tells if the switch command should be inversed""" return self._thermostat.is_inversed + @overrides + def startup(self): + super().startup() + self._keep_alive.set_async_action( + self.turn_on if self.is_device_active else self.turn_off + ) + # @overrides this breaks some unit tests TypeError: object MagicMock can't be used in 'await' expression async def set_hvac_mode(self, hvac_mode: HVACMode) -> bool: """Set the HVACmode. Returns true if something have change""" @@ -245,12 +255,13 @@ class UnderlyingSwitch(UnderlyingEntity): domain = self._entity_id.split(".")[0] # This may fails if called after shutdown try: - data = {ATTR_ENTITY_ID: self._entity_id} - await self._hass.services.async_call( - domain, - command, - data, - ) + try: + data = {ATTR_ENTITY_ID: self._entity_id} + await self._hass.services.async_call(domain, command, data) + self._keep_alive.set_async_action(self.turn_off) + except Exception: + self._keep_alive.cancel() + raise except ServiceNotFound as err: _LOGGER.error(err) @@ -260,12 +271,13 @@ class UnderlyingSwitch(UnderlyingEntity): command = SERVICE_TURN_ON if not self.is_inversed else SERVICE_TURN_OFF domain = self._entity_id.split(".")[0] try: - data = {ATTR_ENTITY_ID: self._entity_id} - await self._hass.services.async_call( - domain, - command, - data, - ) + try: + data = {ATTR_ENTITY_ID: self._entity_id} + await self._hass.services.async_call(domain, command, data) + self._keep_alive.set_async_action(self.turn_on) + except Exception: + self._keep_alive.cancel() + raise except ServiceNotFound as err: _LOGGER.error(err) @@ -422,6 +434,7 @@ class UnderlyingSwitch(UnderlyingEntity): def remove_entity(self): """Remove the entity after stopping its cycle""" self._cancel_cycle() + self._keep_alive.cancel() class UnderlyingClimate(UnderlyingEntity): diff --git a/images/config-linked-entity.png b/images/config-linked-entity.png index f8e08760ec9cdd0cb15be2c7124dc9d74945a993..be9aed1970149bb92dc18d623865a506ab186791 100644 GIT binary patch literal 51682 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 E0%pTXc>n+a literal 31139 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%0AC? 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 literal 0 HcmV?d00001 diff --git a/tests/const.py b/tests/const.py index 71699fd..0c3e324 100644 --- a/tests/const.py +++ b/tests/const.py @@ -74,6 +74,7 @@ MOCK_TH_OVER_SWITCH_CENTRAL_MAIN_CONFIG = { MOCK_TH_OVER_SWITCH_TYPE_CONFIG = { CONF_HEATER: "switch.mock_switch", + CONF_HEATER_KEEP_ALIVE: 0, CONF_PROP_FUNCTION: PROPORTIONAL_FUNCTION_TPI, CONF_AC_MODE: False, CONF_INVERSE_SWITCH: False, @@ -91,6 +92,7 @@ MOCK_TH_OVER_4SWITCH_TYPE_CONFIG = { CONF_HEATER_2: "switch.mock_4switch1", CONF_HEATER_3: "switch.mock_4switch2", CONF_HEATER_4: "switch.mock_4switch3", + CONF_HEATER_KEEP_ALIVE: 0, CONF_PROP_FUNCTION: PROPORTIONAL_FUNCTION_TPI, CONF_AC_MODE: False, CONF_INVERSE_SWITCH: False, diff --git a/tests/test_config_flow.py b/tests/test_config_flow.py index b27c088..74a0d7b 100644 --- a/tests/test_config_flow.py +++ b/tests/test_config_flow.py @@ -525,6 +525,7 @@ async def test_user_config_flow_over_4_switches( CONF_HEATER_2: "switch.mock_switch2", CONF_HEATER_3: "switch.mock_switch3", CONF_HEATER_4: "switch.mock_switch4", + CONF_HEATER_KEEP_ALIVE: 0, CONF_PROP_FUNCTION: PROPORTIONAL_FUNCTION_TPI, CONF_AC_MODE: False, CONF_INVERSE_SWITCH: False, diff --git a/tests/test_multiple_switch.py b/tests/test_multiple_switch.py index e8d9963..3ead63d 100644 --- a/tests/test_multiple_switch.py +++ b/tests/test_multiple_switch.py @@ -260,6 +260,7 @@ async def test_multiple_switchs( CONF_HEATER_2: "switch.mock_switch2", CONF_HEATER_3: "switch.mock_switch3", CONF_HEATER_4: "switch.mock_switch4", + CONF_HEATER_KEEP_ALIVE: 0, CONF_MINIMAL_ACTIVATION_DELAY: 30, CONF_SECURITY_DELAY_MIN: 5, CONF_SECURITY_MIN_ON_PERCENT: 0.3, @@ -746,6 +747,7 @@ async def test_multiple_switch_power_management( CONF_HEATER_2: "switch.mock_switch2", CONF_HEATER_3: "switch.mock_switch3", CONF_HEATER_4: "switch.mock_switch4", + CONF_HEATER_KEEP_ALIVE: 0, CONF_MINIMAL_ACTIVATION_DELAY: 30, CONF_SECURITY_DELAY_MIN: 5, CONF_SECURITY_MIN_ON_PERCENT: 0.3, diff --git a/tests/test_start.py b/tests/test_start.py index 70ad3b3..8b08acf 100644 --- a/tests/test_start.py +++ b/tests/test_start.py @@ -264,6 +264,7 @@ async def test_over_switch_deactivate_preset( CONF_HEATER_2: None, CONF_HEATER_3: None, CONF_HEATER_4: None, + CONF_HEATER_KEEP_ALIVE: 0, CONF_SECURITY_DELAY_MIN: 10, CONF_MINIMAL_ACTIVATION_DELAY: 10, }, diff --git a/tests/test_switch_keep_alive.py b/tests/test_switch_keep_alive.py new file mode 100644 index 0000000..b714841 --- /dev/null +++ b/tests/test_switch_keep_alive.py @@ -0,0 +1,256 @@ +"""Test the switch keep-alive feature.""" +import logging +from collections.abc import AsyncGenerator, Callable, Awaitable +from dataclasses import dataclass +from unittest.mock import ANY, _Call, call, patch +from datetime import datetime, timedelta +from typing import cast + +from custom_components.versatile_thermostat.thermostat_switch import ( + ThermostatOverSwitch, +) +from .commons import * # pylint: disable=wildcard-import, unused-wildcard-import + +logging.getLogger().setLevel(logging.DEBUG) + + +@pytest.fixture +def config_entry() -> MockConfigEntry: + """Return common test data""" + return MockConfigEntry( + domain=DOMAIN, + title="TheOverSwitchMockName", + unique_id="uniqueId", + data={ + CONF_NAME: "TheOverSwitchMockName", + CONF_THERMOSTAT_TYPE: CONF_THERMOSTAT_SWITCH, + CONF_TEMP_SENSOR: "sensor.mock_temp_sensor", + CONF_CYCLE_MIN: 5, + CONF_TEMP_MIN: 15, + CONF_TEMP_MAX: 30, + CONF_USE_WINDOW_FEATURE: False, + CONF_USE_MOTION_FEATURE: False, + CONF_USE_POWER_FEATURE: False, + CONF_USE_PRESENCE_FEATURE: False, + CONF_HEATER: "switch.mock_switch", + CONF_HEATER_KEEP_ALIVE: 1, + CONF_PROP_FUNCTION: PROPORTIONAL_FUNCTION_TPI, + CONF_TPI_COEF_INT: 0.3, + CONF_TPI_COEF_EXT: 0.01, + CONF_MINIMAL_ACTIVATION_DELAY: 30, + CONF_SECURITY_DELAY_MIN: 5, + CONF_SECURITY_MIN_ON_PERCENT: 0.1, + }, + ) + + +@dataclass +class CommonMocks: + """Common mocked objects used by most test cases""" + + config_entry: MockConfigEntry + hass: HomeAssistant + thermostat: ThermostatOverSwitch + mock_is_state: MagicMock + mock_service_call: MagicMock + mock_async_track_time_interval: MagicMock + mock_send_event: MagicMock + + +# pylint: disable=redefined-outer-name, line-too-long, protected-access +@pytest.fixture +async def common_mocks( + config_entry: MockConfigEntry, + hass: HomeAssistant, +) -> AsyncGenerator[CommonMocks, None]: + """Create and destroy a ThermostatOverSwitch as a test fixture""" + # fmt: off + with patch("homeassistant.core.ServiceRegistry.async_call") as mock_service_call, \ + patch("homeassistant.core.StateMachine.is_state", return_value=False) as mock_is_state, \ + patch("custom_components.versatile_thermostat.base_thermostat.BaseThermostat.send_event") as mock_send_event, \ + patch("custom_components.versatile_thermostat.keep_alive.async_track_time_interval") as mock_async_track_time_interval: + # fmt: on + thermostat = cast(ThermostatOverSwitch, await create_thermostat( + hass, config_entry, "climate.theoverswitchmockname" + )) + yield CommonMocks( + config_entry=config_entry, + hass=hass, + thermostat=thermostat, + mock_is_state=mock_is_state, + mock_service_call=mock_service_call, + mock_async_track_time_interval=mock_async_track_time_interval, + mock_send_event=mock_send_event, + ) + # Clean the entity + thermostat.remove_thermostat() + + +class TestKeepAlive: + """Tests for the switch keep-alive feature""" + + # pylint: disable=attribute-defined-outside-init + def setup_method(self): + """Initialise test case data before the execution of each test case method.""" + self._prev_service_calls: list[_Call] = [] + self._prev_atti_call_count = 0 # atti: async_time_track_interval + self._prev_atti_callback: Callable[[datetime], Awaitable[None]] | None = None + + def _assert_service_call( + self, cm: CommonMocks, expected_additional_calls: list[_Call] + ): + """Assert that hass.services.async_call() was called with the expected arguments, + cumulatively over the course of long test cases.""" + self._prev_service_calls.extend(expected_additional_calls) + cm.mock_service_call.assert_has_calls(self._prev_service_calls) + + def _assert_async_mock_track_time_interval( + self, cm: CommonMocks, expected_additional_calls: int + ): + """Assert that async_track_time_interval() was called the expected number of times + with the expected arguments, cumulatively over the course of long test cases.""" + self._prev_atti_call_count += expected_additional_calls + assert ( + cm.mock_async_track_time_interval.call_count == self._prev_atti_call_count + ) + interval = timedelta(seconds=cm.config_entry.data[CONF_HEATER_KEEP_ALIVE]) + cm.mock_async_track_time_interval.assert_called_with(cm.hass, ANY, interval) + keep_alive_callback = cm.mock_async_track_time_interval.call_args.args[1] + assert callable(keep_alive_callback) + self._prev_atti_callback = keep_alive_callback + + async def _assert_multipe_keep_alive_callback_calls( + self, cm: CommonMocks, n_calls: int + ): + """Call the keep-alive callback a few times as if `async_track_time_interval()` had + done it, and assert that this triggers further calls to `async_track_time_interval()`. + """ + old_callback = self._prev_atti_callback + assert ( + old_callback + ), "The keep-alive callback should have been called before, but it wasn't." + interval = timedelta(seconds=cm.config_entry.data[CONF_HEATER_KEEP_ALIVE]) + for _ in range(n_calls): + await old_callback(datetime.fromtimestamp(0)) + self._prev_atti_call_count += 1 + assert ( + cm.mock_async_track_time_interval.call_count + == self._prev_atti_call_count + ) + cm.mock_async_track_time_interval.assert_called_with(cm.hass, ANY, interval) + new_callback = cm.mock_async_track_time_interval.call_args.args[1] + assert new_callback is not old_callback + assert new_callback.__qualname__ == old_callback.__qualname__ + old_callback = new_callback + + self._prev_atti_callback = old_callback + + @pytest.mark.parametrize("expected_lingering_tasks", [True]) + @pytest.mark.parametrize("expected_lingering_timers", [True]) + async def test_switch_keep_alive_startup(self, common_mocks: CommonMocks): + """Test that switch keep-alive service calls are made at startup time.""" + + thermostat = common_mocks.thermostat + await thermostat.async_set_hvac_mode(HVACMode.HEAT) + assert thermostat.hvac_mode is HVACMode.HEAT + assert thermostat.target_temperature == 15 + assert thermostat.is_device_active is False + + # When the keep-alive feature is enabled, regular calls to the switch + # turn_on / turn_off methods are _scheduled_ at start up. + self._assert_async_mock_track_time_interval(common_mocks, 1) + + # Those keep-alive calls are scheduled but until the callback is called, + # no service calls are made to the SERVICE_TURN_OFF home assistant service. + self._assert_service_call(common_mocks, []) + + # Call the keep-alive callback a few times (as if `async_track_time_interval` + # had done it) and assert that the callback function is replaced each time. + await self._assert_multipe_keep_alive_callback_calls(common_mocks, 2) + + # Every time the keep-alive callback is called, the home assistant switch + # turn on/off service should be called too. + self._assert_service_call( + common_mocks, + [ + call("switch", SERVICE_TURN_OFF, {"entity_id": "switch.mock_switch"}), + call("switch", SERVICE_TURN_OFF, {"entity_id": "switch.mock_switch"}), + ], + ) + + @pytest.mark.parametrize("expected_lingering_tasks", [True]) + @pytest.mark.parametrize("expected_lingering_timers", [True]) + async def test_switch_keep_alive(self, common_mocks: CommonMocks): + """Test that switch keep-alive service calls are made during thermostat operation.""" + + hass = common_mocks.hass + thermostat = common_mocks.thermostat + + await thermostat.async_set_hvac_mode(HVACMode.HEAT) + assert thermostat.hvac_mode is HVACMode.HEAT + assert thermostat.target_temperature == 15 + assert thermostat.is_device_active is False + + tz = get_tz(hass) # pylint: disable=invalid-name + now = datetime.now(tz) + event_timestamp = now - timedelta(minutes=4) + + # 1. Decrease the temperature to activate the heater switch + + await send_temperature_change_event(thermostat, 14, event_timestamp) + + # async_track_time_interval() should have been called twice: once at startup + # while the switch was turned off, and once when the switch was turned on. + self._assert_async_mock_track_time_interval(common_mocks, 2) + + # The keep-alive callback hasn't been called yet, so the only service + # call so far is to SERVICE_TURN_ON as a result of the switch turn_on() + # method being called when the target temperature increased. + self._assert_service_call( + common_mocks, + [call("switch", SERVICE_TURN_ON, {"entity_id": "switch.mock_switch"})], + ) + + # Call the keep-alive callback a few times (as if `async_track_time_interval` + # had done it) and assert that the callback function is replaced each time. + await self._assert_multipe_keep_alive_callback_calls(common_mocks, 2) + + # Every time the keep-alive callback is called, the home assistant switch + # turn on/off service should be called too. + self._assert_service_call( + common_mocks, + [ + call("switch", SERVICE_TURN_ON, {"entity_id": "switch.mock_switch"}), + call("switch", SERVICE_TURN_ON, {"entity_id": "switch.mock_switch"}), + ], + ) + + # 2. Increase the temperature to deactivate the heater switch + + await send_temperature_change_event(thermostat, 20, event_timestamp) + + # Simulate the end of the TPI heating cycle + await thermostat._underlyings[0].turn_off() # pylint: disable=protected-access + + # turn_off() should have triggered a call to `async_track_time_interval()` + self._assert_async_mock_track_time_interval(common_mocks, 1) + + # turn_off() should have triggered a call to the SERVICE_TURN_OFF service. + self._assert_service_call( + common_mocks, + [call("switch", SERVICE_TURN_OFF, {"entity_id": "switch.mock_switch"})], + ) + + # Call the keep-alive callback a few times (as if `async_track_time_interval` + # had done it) and assert that the callback function is replaced each time. + await self._assert_multipe_keep_alive_callback_calls(common_mocks, 2) + + # Every time the keep-alive callback is called, the home assistant switch + # turn on/off service should be called too. + self._assert_service_call( + common_mocks, + [ + call("switch", SERVICE_TURN_OFF, {"entity_id": "switch.mock_switch"}), + call("switch", SERVICE_TURN_OFF, {"entity_id": "switch.mock_switch"}), + ], + )