From 043fd5f7aaa58483c3cfd10721fa225e32a72c48 Mon Sep 17 00:00:00 2001 From: Jean-Marc Collin Date: Sat, 21 Oct 2023 08:28:19 +0200 Subject: [PATCH] Feature 128 activity preset (#132) * Issue #128 - add motion_off_delay * Fix movement detection --------- Co-authored-by: Jean-Marc Collin --- README-fr.md | 19 +- README.md | 18 +- .../versatile_thermostat/climate.py | 90 ++++--- .../versatile_thermostat/config_flow.py | 2 + .../versatile_thermostat/const.py | 1 + .../versatile_thermostat/strings.json | 20 +- .../versatile_thermostat/tests/const.py | 2 + .../tests/test_config_flow.py | 32 --- .../tests/test_movement.py | 221 ++++++++++++++++-- .../versatile_thermostat/translations/en.json | 20 +- .../versatile_thermostat/translations/fr.json | 20 +- .../versatile_thermostat/translations/it.json | 2 + images/config-motion.png | Bin 48968 -> 47105 bytes 13 files changed, 353 insertions(+), 94 deletions(-) diff --git a/README-fr.md b/README-fr.md index e054f31..b463d19 100644 --- a/README-fr.md +++ b/README-fr.md @@ -55,6 +55,7 @@ Ce composant personnalisé pour Home Assistant est une mise à niveau et est une > ![Nouveau](https://github.com/jmcollin78/versatile_thermostat/blob/main/images/new-icon.png?raw=true) _*Nouveautés*_ +> * **Release 3.6**: Ajout du paramètre `motion_off_delay` pour la gestion de l'activité. > * **Release 3.5**: Plusieurs thermostats sont possibles en "thermostat over climate" mode [#113](https://github.com/jmcollin78/versatile_thermostat/issues/113) > * **Release 3.4**: bug fix et exposition des preset temperatures pour le mode AC [#103](https://github.com/jmcollin78/versatile_thermostat/issues/103) > * **Release 3.3**: ajout du mode Air Conditionné (AC). Cette fonction vous permet d'utiliser le mode AC de votre thermostat sous-jacent. Pour l'utiliser, vous devez cocher l'option "Uitliser le mode AC" et définir les valeurs de température pour les presets et pour les presets en cas d'absence @@ -242,17 +243,20 @@ Si vous avez choisi la fonctionnalité ```Avec détection de mouvement```, cliqu Nous allons maintenant voir comment configurer le nouveau mode Activité. Ce dont nous avons besoin: - un **capteur de mouvement**. ID d'entité d'un capteur de mouvement. Les états du capteur de mouvement doivent être « on » (mouvement détecté) ou « off » (aucun mouvement détecté) -- une durée de **délai de mouvement** (en secondes) définissant combien de temps nous attendons la confirmation du mouvement avant de considérer le mouvement +- une durée de **délai de mouvement** (en secondes) définissant combien de temps nous attendons la confirmation du mouvement avant de considérer le mouvement. Ce paramètre peut être supérieur à la temporision de votre détecteur de mouvement, sinon la détection se fera à chaque mouvement signalé par le détecteur, +- une durée de fin **délai de mouvement** (en secondes) définissant combien de temps nous attendons la confirmation d'une fin de mouvement avant de ne plus considérer le mouvement. - un **préréglage de "mouvement" **. Nous utiliserons la température de ce préréglage lorsqu'une activité sera détectée. - un **préréglage "pas de mouvement"**. Nous utiliserons la température de ce deuxième préréglage lorsqu'aucune activité n'est détectée. Alors imaginons que nous voulions avoir le comportement suivant : -- nous avons une pièce avec un thermostat réglé en mode activité, le mode "mouvement" choisi est confort (21.5C), le mode "pas de mouvement" choisi est Eco (18.5C) et la temporisation du mouvement est de 5 min. -- la pièce est vide depuis un moment (aucune activité détectée), la température de cette pièce est de 18,5 C -- quelqu'un entre dans la pièce, une activité est détectée la température est fixée à 21,5 C -- la personne quitte la chambre, au bout de 5 min la température est ramenée à 18,5 C +- nous avons une pièce avec un thermostat réglé en mode activité, le mode "mouvement" choisi est confort (21,5°C), le mode "pas de mouvement" choisi est Eco (18.5°C) et la temporisation du mouvement est de 30 sec lors de la détection et de 5 minutes sur fin de détection. +- la pièce est vide depuis un moment (aucune activité détectée), la température de cette pièce est de 18,5° +- quelqu'un entre dans la pièce, une activité est détectée si le mouvement est présent pendant au moins 30 sec. La température passe alors à 21,5° +- si le mouvement est présent pendant moins de 30 sec (passage rapide), la température reste sur 18,5°, +- imaginons que la température soit passée sur 21,5°, lorsque la personne quitte la pièce, au bout de 5 min la température est ramenée à 18,5°. +- si la personne revient avant les 5 minutes, la température reste sur 21,5° -Pour que cela fonctionne, le thermostat climatique doit être en mode préréglé « Activité ». +Pour que cela fonctionne, le thermostat doit être en mode préréglé « Activité ». > ![Astuce](https://github.com/jmcollin78/versatile_thermostat/blob/main/images/tips.png?raw=true) _*Notes*_ 1. Sachez que comme pour les autres modes prédéfinis, ``Activity`` ne sera proposé que s'il est correctement configuré. En d'autres termes, les 4 clés de configuration doivent être définies si vous souhaitez voir l'activité dans l'interface de l'assistant domestique @@ -354,7 +358,8 @@ Voir [exemple de réglages](#examples-tuning) pour avoir des exemples de réglag | ``window_auto_close_threshold`` | Seuil bas de chute de température pour la fin de détection automatique (en °/min) | X | X | | ``window_auto_max_duration`` | Durée maximum d'une extinction automatique (en min) | X | X | | ``motion_sensor_entity_id`` | Détecteur de mouvement entity id | X | X | -| ``motion_delay`` | Délai avant changement (seconds) | X | X | +| ``motion_delay`` | Délai avant prise en compte du mouvement (seconds) | X | X | +| ``motion_off_delay`` | Délai avant prise en compte de la fin de mouvement (seconds) | X | X | | ``motion_preset`` | Preset à utiliser si mouvement détecté | X | X | | ``no_motion_preset`` | Preset à utiliser si pas de mouvement détecté | X | X | | ``power_sensor_entity_id`` | Capteur de puissance totale (entity id) | X | X | diff --git a/README.md b/README.md index f3129e8..535def3 100644 --- a/README.md +++ b/README.md @@ -54,6 +54,7 @@ This custom component for Home Assistant is an upgrade and is a complete rewrite of the component "Awesome thermostat" (see [Github](https://github.com/dadge/awesome_thermostat)) with addition of features. >![New](https://github.com/jmcollin78/versatile_thermostat/blob/main/images/new-icon.png?raw=true) _*News*_ +> * **Release 3.6**: Add a `motion_off_delay` parameter for activity management, > * **Release 3.5**: Multiple thermostats when using "thermostat over another thermostat" mode [#113](https://github.com/jmcollin78/versatile_thermostat/issues/113) > * **Release 3.4**: bug fixes and expose preset temperatures for AC mode [#103](https://github.com/jmcollin78/versatile_thermostat/issues/103) > * **Release 3.3**: add the Air Conditionned mode (AC). This feature allow to use the eventual AC mode of your underlying climate entity. You have to check the "Use AC mode" checkbox in configuration and give preset temperature value for AC mode and AC mode when absent if absence is configured @@ -228,15 +229,17 @@ We will now see how to configure the new Activity mode. What we need: - a **motion sensor**. The entity id of a motion sensor. Motion sensor states should be 'on' (motion detected) or 'off' (no motion detected) - a **motion delay** (in seconds) duration defining how long we wait for motion confirmation before considering the motion +- a **end of motion delay** (in seconds) duration defining how long we wait for end of motion confirmation before considering the end of motion - a **target "motion" preset**. We will used the temperature of this preset when an activity is detected. - a **target "no motion" preset**. We will used the temperature of this second preset when no activity is detected. -So imagine we want to have the following behavior : -- we have room with a thermostat set in activity mode, the "motion" mode chosen is comfort (21.5C), the "no motion" mode chosen is Eco (18.5 C) and the motion delay is 5 min. -- the room is empty for a while (no activity detected), the temperature of this room is 18.5 C -- somebody enters into the room, an activity is detected the temperature is set to 21.5 C -- the person leaves the room, after 5 min the temperature is set back to 18.5 C - +- we have a room with a thermostat set to activity mode, the "movement" mode chosen is comfort (21.5°C), the "no movement" mode chosen is Eco (18.5°C) and the movement delay is 30 sec during detection and 5 minutes at the end of detection. +- the room has been empty for a while (no activity detected), the temperature of this room is 18.5° +- someone enters the room, activity is detected if movement is present for at least 30 seconds. The temperature then rises to 21.5° +- if the movement is present for less than 30 seconds (rapid passage), the temperature remains at 18.5°, +- imagine that the temperature has risen to 21.5°, when the person leaves the room, after 5 minutes the temperature is reduced to 18.5°. +- if the person returns before 5 minutes, the temperature remains at 21.5° + For this to work, the climate thermostat should be in ``Activity`` preset mode. > ![Tip](https://github.com/jmcollin78/versatile_thermostat/blob/main/images/tips.png?raw=true) _*Notes*_ @@ -339,7 +342,8 @@ See [example tuning](#examples-tuning) for common tuning examples | ``window_auto_close_threshold`` | Temperature increase threshold for end of automatic detection (in °/min) | X | X | | ``window_auto_max_duration`` | Maximum duration of automatic window open detection (in min) | X | X | | ``motion_sensor_entity_id`` | Motion sensor entity id | X | X | -| ``motion_delay`` | Motion delay (seconds) | X | X | +| ``motion_delay`` | Delay before considering the motion (seconds) | X | X | +| ``motion_off_delay`` | Delay before considering the end of motion (seconds) | X | X | | ``motion_preset`` | Preset to use when motion is detected | X | X | | ``no_motion_preset`` | Preset to use when no motion is detected | X | X | | ``power_sensor_entity_id`` | Power sensor entity id | X | X | diff --git a/custom_components/versatile_thermostat/climate.py b/custom_components/versatile_thermostat/climate.py index a2c3ded..602e7bb 100644 --- a/custom_components/versatile_thermostat/climate.py +++ b/custom_components/versatile_thermostat/climate.py @@ -95,6 +95,7 @@ from .const import ( CONF_WINDOW_AUTO_MAX_DURATION, CONF_MOTION_SENSOR, CONF_MOTION_DELAY, + CONF_MOTION_OFF_DELAY, CONF_MOTION_PRESET, CONF_NO_MOTION_PRESET, CONF_DEVICE_POWER, @@ -399,6 +400,10 @@ class VersatileThermostat(ClimateEntity, RestoreEntity): self._motion_sensor_entity_id = entry_infos.get(CONF_MOTION_SENSOR) self._motion_delay_sec = entry_infos.get(CONF_MOTION_DELAY) + self._motion_off_delay_sec = entry_infos.get(CONF_MOTION_OFF_DELAY) + if not self._motion_off_delay_sec: + self._motion_off_delay_sec = self._motion_delay_sec + self._motion_preset = entry_infos.get(CONF_MOTION_PRESET) self._no_motion_preset = entry_infos.get(CONF_NO_MOTION_PRESET) self._motion_on = ( @@ -1528,11 +1533,12 @@ class VersatileThermostat(ClimateEntity, RestoreEntity): # Check delay condition async def try_motion_condition(_): try: + delay = self._motion_delay_sec if new_state.state == STATE_ON else self._motion_off_delay_sec long_enough = condition.state( self.hass, self._motion_sensor_entity_id, new_state.state, - timedelta(seconds=self._motion_delay_sec), + timedelta(seconds=delay), ) except ConditionError: long_enough = False @@ -1541,38 +1547,66 @@ class VersatileThermostat(ClimateEntity, RestoreEntity): _LOGGER.debug( "Motion delay condition is not satisfied. Ignore motion event" ) - return + else: + _LOGGER.debug("%s - Motion delay condition is satisfied", self) + self._motion_state = new_state.state + if self._attr_preset_mode == PRESET_ACTIVITY: + new_preset = ( + self._motion_preset + if self._motion_state == STATE_ON + else self._no_motion_preset + ) + _LOGGER.info( + "%s - Motion condition have changes. New preset temp will be %s", + self, + new_preset, + ) + # We do not change the preset which is kept to ACTIVITY but only the target_temperature + # We take the presence into account + await self._async_internal_set_temperature( + self.find_preset_temp(new_preset) + ) + self.recalculate() + await self._async_control_heating(force=True) + self._motion_call_cancel = None - _LOGGER.debug("%s - Motion delay condition is satisfied", self) - self._motion_state = new_state.state - if self._attr_preset_mode == PRESET_ACTIVITY: - new_preset = ( - self._motion_preset - if self._motion_state == STATE_ON - else self._no_motion_preset - ) - _LOGGER.info( - "%s - Motion condition have changes. New preset temp will be %s", - self, - new_preset, - ) - # We do not change the preset which is kept to ACTIVITY but only the target_temperature - # We take the presence into account - await self._async_internal_set_temperature( - self.find_preset_temp(new_preset) - ) - self.recalculate() - await self._async_control_heating(force=True) + im_on = (self._motion_state == STATE_ON) + delay_running = (self._motion_call_cancel is not None) + event_on = (new_state.state == STATE_ON) - if self._motion_call_cancel: + def arm(): + """ Arm the timer""" + delay = self._motion_delay_sec if new_state.state == STATE_ON else self._motion_off_delay_sec + self._motion_call_cancel = async_call_later( + self.hass, timedelta(seconds=delay), try_motion_condition + ) + + def desarm(): + # restart the timer self._motion_call_cancel() self._motion_call_cancel = None - self._motion_call_cancel = async_call_later( - self.hass, timedelta(seconds=self._motion_delay_sec), try_motion_condition - ) - # For testing purpose we need to access the inner function - return try_motion_condition + # if I'm off + if not im_on: + if event_on and not delay_running: + _LOGGER.debug("%s - Arm delay cause i'm off and event is on and no delay is running", self) + arm() + return try_motion_condition + # Ignore the event + _LOGGER.debug("%s - Event ignored cause i'm already off", self) + return None + else: # I'm On + if not event_on and not delay_running: + _LOGGER.info("%s - Arm delay cause i'm on and event is off", self) + arm() + return try_motion_condition + if event_on and delay_running: + _LOGGER.debug("%s - Desarm off delay cause i'm on and event is on and a delay is running", self) + desarm() + return None + # Ignore the event + _LOGGER.debug("%s - Event ignored cause i'm already on", self) + return None @callback async def _check_switch_initial_state(self): diff --git a/custom_components/versatile_thermostat/config_flow.py b/custom_components/versatile_thermostat/config_flow.py index 845bb56..1c60c45 100644 --- a/custom_components/versatile_thermostat/config_flow.py +++ b/custom_components/versatile_thermostat/config_flow.py @@ -55,6 +55,7 @@ from .const import ( CONF_WINDOW_AUTO_OPEN_THRESHOLD, CONF_MOTION_SENSOR, CONF_MOTION_DELAY, + CONF_MOTION_OFF_DELAY, CONF_MOTION_PRESET, CONF_NO_MOTION_PRESET, CONF_DEVICE_POWER, @@ -292,6 +293,7 @@ class VersatileThermostatBaseConfigFlow(FlowHandler): ), ), vol.Optional(CONF_MOTION_DELAY, default=30): cv.positive_int, + vol.Optional(CONF_MOTION_OFF_DELAY, default=300): cv.positive_int, vol.Optional(CONF_MOTION_PRESET, default="comfort"): vol.In( CONF_PRESETS_SELECTIONABLE ), diff --git a/custom_components/versatile_thermostat/const.py b/custom_components/versatile_thermostat/const.py index 1b7ddf9..4ef34e2 100644 --- a/custom_components/versatile_thermostat/const.py +++ b/custom_components/versatile_thermostat/const.py @@ -49,6 +49,7 @@ CONF_CYCLE_MIN = "cycle_min" CONF_PROP_FUNCTION = "proportional_function" CONF_WINDOW_DELAY = "window_delay" CONF_MOTION_DELAY = "motion_delay" +CONF_MOTION_OFF_DELAY = "motion_off_delay" CONF_MOTION_PRESET = "motion_preset" CONF_NO_MOTION_PRESET = "no_motion_preset" CONF_TPI_COEF_INT = "tpi_coef_int" diff --git a/custom_components/versatile_thermostat/strings.json b/custom_components/versatile_thermostat/strings.json index c9c2f1e..263e00c 100644 --- a/custom_components/versatile_thermostat/strings.json +++ b/custom_components/versatile_thermostat/strings.json @@ -92,7 +92,15 @@ "description": "Motion sensor management. Preset can switch automatically depending of a motion detection\nLeave corresponding entity_id empty if not used.\nmotion_preset and no_motion_preset should be set to the corresponding preset name", "data": { "motion_sensor_entity_id": "Motion sensor entity id", - "motion_delay": "Motion delay (seconds)", + "motion_delay": "Activation delay", + "motion_off_delay": "Deactivation delay", + "motion_preset": "Motion preset", + "no_motion_preset": "No motion preset" + }, + "data_description": { + "motion_sensor_entity_id": "The entity id of the motion sensor", + "motion_delay": "Motion activation activation delay (seconds)", + "motion_off_delay": "Motion deactivation delay (seconds)", "motion_preset": "Preset to use when motion is detected", "no_motion_preset": "Preset to use when no motion is detected" } @@ -237,7 +245,15 @@ "description": "Motion sensor management. Preset can switch automatically depending of a motion detection\nLeave corresponding entity_id empty if not used.\nmotion_preset and no_motion_preset should be set to the corresponding preset name", "data": { "motion_sensor_entity_id": "Motion sensor entity id", - "motion_delay": "Motion delay (seconds)", + "motion_delay": "Activation delay", + "motion_off_delay": "Deactivation delay", + "motion_preset": "Motion preset", + "no_motion_preset": "No motion preset" + }, + "data_description": { + "motion_sensor_entity_id": "The entity id of the motion sensor", + "motion_delay": "Motion activation activation delay (seconds)", + "motion_off_delay": "Motion deactivation delay (seconds)", "motion_preset": "Preset to use when motion is detected", "no_motion_preset": "Preset to use when no motion is detected" } diff --git a/custom_components/versatile_thermostat/tests/const.py b/custom_components/versatile_thermostat/tests/const.py index 1c46540..3127e67 100644 --- a/custom_components/versatile_thermostat/tests/const.py +++ b/custom_components/versatile_thermostat/tests/const.py @@ -40,6 +40,7 @@ from custom_components.versatile_thermostat.const import ( CONF_WINDOW_AUTO_MAX_DURATION, CONF_MOTION_SENSOR, CONF_MOTION_DELAY, + CONF_MOTION_OFF_DELAY, CONF_MOTION_PRESET, CONF_NO_MOTION_PRESET, CONF_POWER_SENSOR, @@ -136,6 +137,7 @@ MOCK_WINDOW_AUTO_CONFIG = { MOCK_MOTION_CONFIG = { CONF_MOTION_SENSOR: "input_boolean.motion_sensor", CONF_MOTION_DELAY: 10, + CONF_MOTION_OFF_DELAY: 30, CONF_MOTION_PRESET: PRESET_COMFORT, CONF_NO_MOTION_PRESET: PRESET_ECO, } diff --git a/custom_components/versatile_thermostat/tests/test_config_flow.py b/custom_components/versatile_thermostat/tests/test_config_flow.py index eba58e3..d734f4b 100644 --- a/custom_components/versatile_thermostat/tests/test_config_flow.py +++ b/custom_components/versatile_thermostat/tests/test_config_flow.py @@ -157,38 +157,6 @@ async def test_user_config_flow_over_climate(hass: HomeAssistant, skip_hass_stat result["flow_id"], user_input=MOCK_PRESETS_CONFIG ) - # assert result["type"] == data_entry_flow.RESULT_TYPE_FORM - # assert result["step_id"] == "window" - # assert result["errors"] == {} - - # result = await hass.config_entries.flow.async_configure( - # result["flow_id"], user_input=MOCK_WINDOW_CONFIG - # ) - - # assert result["type"] == data_entry_flow.RESULT_TYPE_FORM - # assert result["step_id"] == "motion" - # assert result["errors"] == {} - - # result = await hass.config_entries.flow.async_configure( - # result["flow_id"], user_input=MOCK_MOTION_CONFIG - # ) - - # assert result["type"] == data_entry_flow.RESULT_TYPE_FORM - # assert result["step_id"] == "power" - # assert result["errors"] == {} - - # result = await hass.config_entries.flow.async_configure( - # result["flow_id"], user_input=MOCK_POWER_CONFIG - # ) - - # assert result["type"] == data_entry_flow.RESULT_TYPE_FORM - # assert result["step_id"] == "presence" - # assert result["errors"] == {} - - # result = await hass.config_entries.flow.async_configure( - # result["flow_id"], user_input=MOCK_PRESENCE_CONFIG - # ) - assert result["type"] == data_entry_flow.RESULT_TYPE_FORM assert result["step_id"] == "advanced" assert result["errors"] == {} diff --git a/custom_components/versatile_thermostat/tests/test_movement.py b/custom_components/versatile_thermostat/tests/test_movement.py index 0e67553..ab1d31c 100644 --- a/custom_components/versatile_thermostat/tests/test_movement.py +++ b/custom_components/versatile_thermostat/tests/test_movement.py @@ -43,10 +43,11 @@ async def test_movement_management_time_not_enough( CONF_TPI_COEF_INT: 0.3, CONF_TPI_COEF_EXT: 0.01, CONF_MINIMAL_ACTIVATION_DELAY: 30, - CONF_SECURITY_DELAY_MIN: 5, + CONF_SECURITY_DELAY_MIN: 10, CONF_SECURITY_MIN_ON_PERCENT: 0.3, CONF_MOTION_SENSOR: "binary_sensor.mock_motion_sensor", - CONF_MOTION_DELAY: 0, # important to not been obliged to wait + CONF_MOTION_DELAY: 10, # important to not been obliged to wait + CONF_MOTION_OFF_DELAY: 30, CONF_MOTION_PRESET: "boost", CONF_NO_MOTION_PRESET: "comfort", CONF_PRESENCE_SENSOR: "binary_sensor.mock_presence_sensor", @@ -61,7 +62,7 @@ async def test_movement_management_time_not_enough( tz = get_tz(hass) # pylint: disable=invalid-name now: datetime = datetime.now(tz=tz) - # start heating, in boost mode. We block the control_heating to avoid running a cycle + # start heating, in boost mode, when someone is present. We block the control_heating to avoid running a cycle with patch( "custom_components.versatile_thermostat.climate.VersatileThermostat._async_control_heating" ): @@ -75,14 +76,14 @@ async def test_movement_management_time_not_enough( assert entity.motion_state is None assert entity.presence_state is None - event_timestamp = now - timedelta(minutes=4) + event_timestamp = now - timedelta(minutes=5) await send_temperature_change_event(entity, 18, event_timestamp) await send_ext_temperature_change_event(entity, 10, event_timestamp) await send_presence_change_event(entity, True, False, event_timestamp) assert entity.presence_state is "on" - # starts detecting motion + # starts detecting motion with time not enough with patch( "custom_components.versatile_thermostat.climate.VersatileThermostat.send_event" ) as mock_send_event, patch( @@ -91,17 +92,21 @@ async def test_movement_management_time_not_enough( "custom_components.versatile_thermostat.underlyings.UnderlyingSwitch.turn_off" ) as mock_heater_off, patch( "custom_components.versatile_thermostat.underlyings.UnderlyingSwitch.is_device_active", - return_value=True, + return_value=False, ), patch( "homeassistant.helpers.condition.state", return_value=False - ): - event_timestamp = now - timedelta(minutes=3) - await send_motion_change_event(entity, True, False, event_timestamp) + ) as mock_condition: + event_timestamp = now - timedelta(minutes=4) + try_condition = await send_motion_change_event(entity, True, False, event_timestamp) + + # Will return False -> we will stay on movement False + await try_condition(None) assert entity.hvac_mode is HVACMode.HEAT assert entity.preset_mode is PRESET_ACTIVITY # because no motion is detected yet assert entity.target_temperature == 18 + # state is not changed if time is not enough assert entity.motion_state is None assert entity.presence_state is "on" @@ -111,7 +116,65 @@ async def test_movement_management_time_not_enough( assert mock_heater_off.call_count == 0 assert mock_send_event.call_count == 0 - # stop detecting motion with confirmation of stop + # starts detecting motion with time enough this time + with patch( + "custom_components.versatile_thermostat.climate.VersatileThermostat.send_event" + ) as mock_send_event, patch( + "custom_components.versatile_thermostat.underlyings.UnderlyingSwitch.turn_on" + ) as mock_heater_on, patch( + "custom_components.versatile_thermostat.underlyings.UnderlyingSwitch.turn_off" + ) as mock_heater_off, patch( + "custom_components.versatile_thermostat.underlyings.UnderlyingSwitch.is_device_active", + return_value=False, + ), patch( + "homeassistant.helpers.condition.state", return_value=True + ) as mock_condition: + event_timestamp = now - timedelta(minutes=3) + try_condition = await send_motion_change_event(entity, True, False, event_timestamp) + + # Will return True -> we will switch to movement On + await try_condition(None) + + assert entity.hvac_mode is HVACMode.HEAT + assert entity.preset_mode is PRESET_ACTIVITY + # because motion is detected yet + assert entity.target_temperature == 19 + assert entity.motion_state is "on" + assert entity.presence_state is "on" + + # stop detecting motion with off delay too low + with patch( + "custom_components.versatile_thermostat.climate.VersatileThermostat.send_event" + ) as mock_send_event, patch( + "custom_components.versatile_thermostat.underlyings.UnderlyingSwitch.turn_on" + ) as mock_heater_on, patch( + "custom_components.versatile_thermostat.underlyings.UnderlyingSwitch.turn_off" + ) as mock_heater_off, patch( + "custom_components.versatile_thermostat.underlyings.UnderlyingSwitch.is_device_active", + return_value=True, + ) as mock_device_active, patch( + "homeassistant.helpers.condition.state", return_value=False + ) as mock_condition: + event_timestamp = now - timedelta(minutes=2) + try_condition = await send_motion_change_event(entity, False, True, event_timestamp) + + # Will return False -> we will stay to movement On + await try_condition(None) + + assert entity.hvac_mode is HVACMode.HEAT + assert entity.preset_mode is PRESET_ACTIVITY + # because no motion is detected yet + assert entity.target_temperature == 19 + assert entity.motion_state is "on" + assert entity.presence_state is "on" + + assert mock_send_event.call_count == 0 + # The heater must heat now + assert mock_heater_on.call_count == 1 + assert mock_heater_off.call_count == 0 + assert mock_send_event.call_count == 0 + + # stop detecting motion with off delay enough long with patch( "custom_components.versatile_thermostat.climate.VersatileThermostat.send_event" ) as mock_send_event, patch( @@ -124,8 +187,11 @@ async def test_movement_management_time_not_enough( ) as mock_device_active, patch( "homeassistant.helpers.condition.state", return_value=True ) as mock_condition: - event_timestamp = now - timedelta(minutes=2) - await send_motion_change_event(entity, False, True, event_timestamp) + event_timestamp = now - timedelta(minutes=1) + try_condition = await send_motion_change_event(entity, False, True, event_timestamp) + + # Will return True -> we will switch to movement Off + await try_condition(None) assert entity.hvac_mode is HVACMode.HEAT assert entity.preset_mode is PRESET_ACTIVITY @@ -135,9 +201,8 @@ async def test_movement_management_time_not_enough( assert entity.presence_state is "on" assert mock_send_event.call_count == 0 - # Change is not confirmed + # The heater must stop heating now assert mock_heater_on.call_count == 0 - # Because device is active assert mock_heater_off.call_count == 1 assert mock_send_event.call_count == 0 @@ -405,3 +470,131 @@ async def test_movement_management_time_enoughand_not_presence( assert entity.proportional_algorithm.on_percent == 0.11 assert mock_heater_off.call_count == 0 assert mock_send_event.call_count == 0 + + +@pytest.mark.parametrize("expected_lingering_tasks", [True]) +@pytest.mark.parametrize("expected_lingering_timers", [True]) +async def test_movement_management_with_stop_during_condition( + hass: HomeAssistant, skip_hass_states_is_state +): + """Test the Presence management when the movement sensor switch to off and then to on during the test condition""" + + entry = 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_EXTERNAL_TEMP_SENSOR: "sensor.mock_ext_temp_sensor", + CONF_CYCLE_MIN: 5, + CONF_TEMP_MIN: 15, + CONF_TEMP_MAX: 30, + "eco_temp": 17, + "comfort_temp": 18, + "boost_temp": 19, + "eco_away_temp": 17, + "comfort_away_temp": 18, + "boost_away_temp": 19, + CONF_USE_WINDOW_FEATURE: False, + CONF_USE_MOTION_FEATURE: True, + CONF_USE_POWER_FEATURE: False, + CONF_USE_PRESENCE_FEATURE: True, + CONF_HEATER: "switch.mock_switch", + 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.3, + CONF_MOTION_SENSOR: "binary_sensor.mock_motion_sensor", + CONF_MOTION_DELAY: 10, + CONF_MOTION_OFF_DELAY: 30, + CONF_MOTION_PRESET: "boost", + CONF_NO_MOTION_PRESET: "comfort", + CONF_PRESENCE_SENSOR: "binary_sensor.mock_presence_sensor", + }, + ) + + entity: VersatileThermostat = await create_thermostat( + hass, entry, "climate.theoverswitchmockname" + ) + assert entity + + tz = get_tz(hass) # pylint: disable=invalid-name + now: datetime = datetime.now(tz=tz) + + # start heating, in boost mode. We block the control_heating to avoid running a cycle + with patch( + "custom_components.versatile_thermostat.climate.VersatileThermostat._async_control_heating" + ): + await entity.async_set_hvac_mode(HVACMode.HEAT) + await entity.async_set_preset_mode(PRESET_ACTIVITY) + + assert entity.hvac_mode is HVACMode.HEAT + assert entity.preset_mode is PRESET_ACTIVITY + # because no motion is detected yet + assert entity.target_temperature == 18 + assert entity.motion_state is None + assert entity.presence_state is None + + event_timestamp = now - timedelta(minutes=6) + await send_temperature_change_event(entity, 18, event_timestamp) + await send_ext_temperature_change_event(entity, 10, event_timestamp) + + await send_presence_change_event(entity, False, True, event_timestamp) + assert entity.presence_state is "off" + + # starts detecting motion + with patch( + "custom_components.versatile_thermostat.climate.VersatileThermostat.send_event" + ) as mock_send_event, patch( + "custom_components.versatile_thermostat.underlyings.UnderlyingSwitch.turn_on" + ) as mock_heater_on, patch( + "custom_components.versatile_thermostat.underlyings.UnderlyingSwitch.turn_off" + ) as mock_heater_off, patch( + "custom_components.versatile_thermostat.underlyings.UnderlyingSwitch.is_device_active", + return_value=True, + ), patch("homeassistant.helpers.condition.state", return_value=True): # Not needed for this test + event_timestamp = now - timedelta(minutes=5) + try_condition1 = await send_motion_change_event(entity, True, False, event_timestamp) + + assert try_condition1 is not None + + assert entity.hvac_mode is HVACMode.HEAT + assert entity.preset_mode is PRESET_ACTIVITY + # because motion is detected yet -> switch to Boost mode + assert entity.target_temperature == 18 + assert entity.motion_state is None + assert entity.presence_state is "off" + + # Send a stop detection + event_timestamp = now - timedelta(minutes=4) + try_condition = await send_motion_change_event(entity, False, True, event_timestamp) + assert try_condition is None # The timer should not have been stopped + + assert entity.hvac_mode is HVACMode.HEAT + assert entity.preset_mode is PRESET_ACTIVITY + assert entity.target_temperature == 18 + assert entity.motion_state is None + assert entity.presence_state is "off" + + # Resend a start detection + event_timestamp = now - timedelta(minutes=3) + try_condition = await send_motion_change_event(entity, True, False, event_timestamp) + assert try_condition is None # The timer should not have been restarted (we keep the first one) + + assert entity.hvac_mode is HVACMode.HEAT + assert entity.preset_mode is PRESET_ACTIVITY + # still no motion detected + assert entity.target_temperature == 18 + assert entity.motion_state is None + assert entity.presence_state is "off" + + await try_condition1(None) + # We should have switch this time + assert entity.target_temperature == 19 # Boost + assert entity.motion_state is "on" # switch to movement on + assert entity.presence_state is "off" # Non change + diff --git a/custom_components/versatile_thermostat/translations/en.json b/custom_components/versatile_thermostat/translations/en.json index c9c2f1e..263e00c 100644 --- a/custom_components/versatile_thermostat/translations/en.json +++ b/custom_components/versatile_thermostat/translations/en.json @@ -92,7 +92,15 @@ "description": "Motion sensor management. Preset can switch automatically depending of a motion detection\nLeave corresponding entity_id empty if not used.\nmotion_preset and no_motion_preset should be set to the corresponding preset name", "data": { "motion_sensor_entity_id": "Motion sensor entity id", - "motion_delay": "Motion delay (seconds)", + "motion_delay": "Activation delay", + "motion_off_delay": "Deactivation delay", + "motion_preset": "Motion preset", + "no_motion_preset": "No motion preset" + }, + "data_description": { + "motion_sensor_entity_id": "The entity id of the motion sensor", + "motion_delay": "Motion activation activation delay (seconds)", + "motion_off_delay": "Motion deactivation delay (seconds)", "motion_preset": "Preset to use when motion is detected", "no_motion_preset": "Preset to use when no motion is detected" } @@ -237,7 +245,15 @@ "description": "Motion sensor management. Preset can switch automatically depending of a motion detection\nLeave corresponding entity_id empty if not used.\nmotion_preset and no_motion_preset should be set to the corresponding preset name", "data": { "motion_sensor_entity_id": "Motion sensor entity id", - "motion_delay": "Motion delay (seconds)", + "motion_delay": "Activation delay", + "motion_off_delay": "Deactivation delay", + "motion_preset": "Motion preset", + "no_motion_preset": "No motion preset" + }, + "data_description": { + "motion_sensor_entity_id": "The entity id of the motion sensor", + "motion_delay": "Motion activation activation delay (seconds)", + "motion_off_delay": "Motion deactivation delay (seconds)", "motion_preset": "Preset to use when motion is detected", "no_motion_preset": "Preset to use when no motion is detected" } diff --git a/custom_components/versatile_thermostat/translations/fr.json b/custom_components/versatile_thermostat/translations/fr.json index 9512001..2334f2d 100644 --- a/custom_components/versatile_thermostat/translations/fr.json +++ b/custom_components/versatile_thermostat/translations/fr.json @@ -91,8 +91,16 @@ "title": "Gestion de la détection de mouvement", "description": "Le preset s'ajuste automatiquement si un mouvement est détecté\nLaissez l'entity id vide si non utilisé.\n'Preset mouvement' et 'Preset sans mouvement' doivent être choisis avec les preset à utiliser.", "data": { + "motion_sensor_entity_id": "Détecteur de mouvement", + "motion_delay": "Délai d'activation", + "motion_off_delay": "Délai de désactivation", + "motion_preset": "Preset si mouvement", + "no_motion_preset": "Preset si pas de mouvement" + }, + "data_description": { "motion_sensor_entity_id": "Détecteur de mouvement entity id", - "motion_delay": "Délai avant changement (seconds)", + "motion_delay": "Délai avant activation lorsqu'un mouvement est détecté (secondss)", + "motion_off_delai": "Délai avant désactivation lorsqu'aucun mouvement n'est détecté (secondes)", "motion_preset": "Preset à utiliser si mouvement détecté", "no_motion_preset": "Preset à utiliser si pas de mouvement détecté" } @@ -237,8 +245,16 @@ "title": "Gestion de la détection de mouvement", "description": "Le preset s'ajuste automatiquement si un mouvement est détecté\nLaissez l'entity id vide si non utilisé.\n'Preset mouvement' et 'Preset sans mouvement' doivent être choisis avec les preset à utiliser.", "data": { + "motion_sensor_entity_id": "Détecteur de mouvement", + "motion_delay": "Délai d'activation", + "motion_off_delay": "Délai de désactivation", + "motion_preset": "Preset si mouvement", + "no_motion_preset": "Preset si pas de mouvement" + }, + "data_description": { "motion_sensor_entity_id": "Détecteur de mouvement entity id", - "motion_delay": "Délai avant changement (seconds)", + "motion_delay": "Délai avant activation lorsqu'un mouvement est détecté (secondss)", + "motion_off_delai": "Délai avant désactivation lorsqu'aucun mouvement n'est détecté (secondes)", "motion_preset": "Preset à utiliser si mouvement détecté", "no_motion_preset": "Preset à utiliser si pas de mouvement détecté" } diff --git a/custom_components/versatile_thermostat/translations/it.json b/custom_components/versatile_thermostat/translations/it.json index 9fb4091..f8a19de 100644 --- a/custom_components/versatile_thermostat/translations/it.json +++ b/custom_components/versatile_thermostat/translations/it.json @@ -93,6 +93,7 @@ "data": { "motion_sensor_entity_id": "Entity id sensore di movimento", "motion_delay": "Ritardo in secondi prima che il rilevamento del sensore sia preso in considerazione", + "motion_off_delay": "Ritardo in secondi di disattivazione prima che del sensore sia preso in considerazione", "motion_preset": "Preset da utilizzare quando viene rilevato il movimento", "no_motion_preset": "Preset da utilizzare quando non viene rilevato il movimento" } @@ -238,6 +239,7 @@ "data": { "motion_sensor_entity_id": "Entity id sensore di movimento", "motion_delay": "Ritardo in secondi prima che il rilevamento del sensore sia preso in considerazione", + "motion_off_delay": "Ritardo in secondi di disattivazione prima che del sensore sia preso in considerazione", "motion_preset": "Preset da utilizzare quando viene rilevato il movimento", "no_motion_preset": "Preset da utilizzare quando non viene rilevato il movimento" } diff --git a/images/config-motion.png b/images/config-motion.png index 6e4a827ad8b614bd6aab29cb3011bb1e4b9e9f4e..5f9bb999e37f5805978256257b529f8bf2ed0d27 100644 GIT binary patch literal 47105 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 Hd)$8kZgZuY literal 48968 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/pidK@T^-wPCrlb7B$ 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