From cd7e72b38d3e877c694135922e0becc89a8183aa Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Wed, 30 Mar 2022 21:34:03 +0200 Subject: [PATCH 001/238] Bumped version to 2022.4.0b0 --- homeassistant/const.py | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/const.py b/homeassistant/const.py index fabdac85736..da56eb9b024 100644 --- a/homeassistant/const.py +++ b/homeassistant/const.py @@ -7,7 +7,7 @@ from .backports.enum import StrEnum MAJOR_VERSION: Final = 2022 MINOR_VERSION: Final = 4 -PATCH_VERSION: Final = "0.dev0" +PATCH_VERSION: Final = "0b0" __short_version__: Final = f"{MAJOR_VERSION}.{MINOR_VERSION}" __version__: Final = f"{__short_version__}.{PATCH_VERSION}" REQUIRED_PYTHON_VER: Final[tuple[int, int, int]] = (3, 9, 0) diff --git a/setup.cfg b/setup.cfg index 9bc8bd45748..2ffe01ec5cc 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = homeassistant -version = 2022.4.0.dev0 +version = 2022.4.0b0 author = The Home Assistant Authors author_email = hello@home-assistant.io license = Apache-2.0 From 78d8bc66d1e3655327a7d811dc9be10ec78aef65 Mon Sep 17 00:00:00 2001 From: rianadon Date: Wed, 30 Mar 2022 13:49:28 -0700 Subject: [PATCH 002/238] Calculate temperature precision based on user units (#59560) * Calculate temperature precision based on user units * Fix a few more failing tests * Fix failing test Co-authored-by: Erik --- homeassistant/components/weather/__init__.py | 2 +- tests/components/climacell/test_weather.py | 62 ++++++++++---------- tests/components/demo/test_weather.py | 2 +- tests/components/nws/const.py | 4 +- tests/components/tomorrowio/test_weather.py | 58 +++++++++--------- 5 files changed, 65 insertions(+), 63 deletions(-) diff --git a/homeassistant/components/weather/__init__.py b/homeassistant/components/weather/__init__.py index 15250059fec..2e0f8912867 100644 --- a/homeassistant/components/weather/__init__.py +++ b/homeassistant/components/weather/__init__.py @@ -198,7 +198,7 @@ class WeatherEntity(Entity): return self._attr_precision return ( PRECISION_TENTHS - if self.temperature_unit == TEMP_CELSIUS + if self.hass.config.units.temperature_unit == TEMP_CELSIUS else PRECISION_WHOLE ) diff --git a/tests/components/climacell/test_weather.py b/tests/components/climacell/test_weather.py index d5385b6cfd5..3c02f6b9b1f 100644 --- a/tests/components/climacell/test_weather.py +++ b/tests/components/climacell/test_weather.py @@ -94,127 +94,127 @@ async def test_v3_weather( ATTR_FORECAST_TIME: "2021-03-07T00:00:00-08:00", ATTR_FORECAST_PRECIPITATION: 0, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 0, - ATTR_FORECAST_TEMP: 7, - ATTR_FORECAST_TEMP_LOW: -5, + ATTR_FORECAST_TEMP: 7.2, + ATTR_FORECAST_TEMP_LOW: -4.7, }, { ATTR_FORECAST_CONDITION: ATTR_CONDITION_CLOUDY, ATTR_FORECAST_TIME: "2021-03-08T00:00:00-08:00", ATTR_FORECAST_PRECIPITATION: 0, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 0, - ATTR_FORECAST_TEMP: 10, - ATTR_FORECAST_TEMP_LOW: -4, + ATTR_FORECAST_TEMP: 9.7, + ATTR_FORECAST_TEMP_LOW: -4.0, }, { ATTR_FORECAST_CONDITION: ATTR_CONDITION_CLOUDY, ATTR_FORECAST_TIME: "2021-03-09T00:00:00-08:00", ATTR_FORECAST_PRECIPITATION: 0, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 0, - ATTR_FORECAST_TEMP: 19, - ATTR_FORECAST_TEMP_LOW: 0, + ATTR_FORECAST_TEMP: 19.4, + ATTR_FORECAST_TEMP_LOW: -0.3, }, { ATTR_FORECAST_CONDITION: ATTR_CONDITION_CLOUDY, ATTR_FORECAST_TIME: "2021-03-10T00:00:00-08:00", ATTR_FORECAST_PRECIPITATION: 0, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 0, - ATTR_FORECAST_TEMP: 18, - ATTR_FORECAST_TEMP_LOW: 3, + ATTR_FORECAST_TEMP: 18.5, + ATTR_FORECAST_TEMP_LOW: 3.0, }, { ATTR_FORECAST_CONDITION: ATTR_CONDITION_CLOUDY, ATTR_FORECAST_TIME: "2021-03-11T00:00:00-08:00", ATTR_FORECAST_PRECIPITATION: 0, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 5, - ATTR_FORECAST_TEMP: 20, - ATTR_FORECAST_TEMP_LOW: 9, + ATTR_FORECAST_TEMP: 19.7, + ATTR_FORECAST_TEMP_LOW: 9.3, }, { ATTR_FORECAST_CONDITION: ATTR_CONDITION_CLOUDY, ATTR_FORECAST_TIME: "2021-03-12T00:00:00-08:00", ATTR_FORECAST_PRECIPITATION: 0.0457, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 25, - ATTR_FORECAST_TEMP: 20, - ATTR_FORECAST_TEMP_LOW: 12, + ATTR_FORECAST_TEMP: 19.9, + ATTR_FORECAST_TEMP_LOW: 12.1, }, { ATTR_FORECAST_CONDITION: ATTR_CONDITION_CLOUDY, ATTR_FORECAST_TIME: "2021-03-13T00:00:00-08:00", ATTR_FORECAST_PRECIPITATION: 0, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 25, - ATTR_FORECAST_TEMP: 16, - ATTR_FORECAST_TEMP_LOW: 7, + ATTR_FORECAST_TEMP: 15.8, + ATTR_FORECAST_TEMP_LOW: 7.5, }, { ATTR_FORECAST_CONDITION: ATTR_CONDITION_RAINY, ATTR_FORECAST_TIME: "2021-03-14T00:00:00-08:00", ATTR_FORECAST_PRECIPITATION: 1.0744, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 75, - ATTR_FORECAST_TEMP: 6, - ATTR_FORECAST_TEMP_LOW: 3, + ATTR_FORECAST_TEMP: 6.4, + ATTR_FORECAST_TEMP_LOW: 3.2, }, { ATTR_FORECAST_CONDITION: ATTR_CONDITION_SNOWY, ATTR_FORECAST_TIME: "2021-03-15T00:00:00-07:00", # DST starts ATTR_FORECAST_PRECIPITATION: 7.3050, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 95, - ATTR_FORECAST_TEMP: 1, - ATTR_FORECAST_TEMP_LOW: 0, + ATTR_FORECAST_TEMP: 1.2, + ATTR_FORECAST_TEMP_LOW: 0.2, }, { ATTR_FORECAST_CONDITION: ATTR_CONDITION_CLOUDY, ATTR_FORECAST_TIME: "2021-03-16T00:00:00-07:00", ATTR_FORECAST_PRECIPITATION: 0.0051, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 5, - ATTR_FORECAST_TEMP: 6, - ATTR_FORECAST_TEMP_LOW: -2, + ATTR_FORECAST_TEMP: 6.1, + ATTR_FORECAST_TEMP_LOW: -1.6, }, { ATTR_FORECAST_CONDITION: ATTR_CONDITION_CLOUDY, ATTR_FORECAST_TIME: "2021-03-17T00:00:00-07:00", ATTR_FORECAST_PRECIPITATION: 0, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 0, - ATTR_FORECAST_TEMP: 11, - ATTR_FORECAST_TEMP_LOW: 1, + ATTR_FORECAST_TEMP: 11.3, + ATTR_FORECAST_TEMP_LOW: 1.3, }, { ATTR_FORECAST_CONDITION: ATTR_CONDITION_CLOUDY, ATTR_FORECAST_TIME: "2021-03-18T00:00:00-07:00", ATTR_FORECAST_PRECIPITATION: 0, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 5, - ATTR_FORECAST_TEMP: 12, - ATTR_FORECAST_TEMP_LOW: 6, + ATTR_FORECAST_TEMP: 12.3, + ATTR_FORECAST_TEMP_LOW: 5.6, }, { ATTR_FORECAST_CONDITION: ATTR_CONDITION_CLOUDY, ATTR_FORECAST_TIME: "2021-03-19T00:00:00-07:00", ATTR_FORECAST_PRECIPITATION: 0.1778, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 45, - ATTR_FORECAST_TEMP: 9, - ATTR_FORECAST_TEMP_LOW: 5, + ATTR_FORECAST_TEMP: 9.4, + ATTR_FORECAST_TEMP_LOW: 4.7, }, { ATTR_FORECAST_CONDITION: ATTR_CONDITION_RAINY, ATTR_FORECAST_TIME: "2021-03-20T00:00:00-07:00", ATTR_FORECAST_PRECIPITATION: 1.2319, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 55, - ATTR_FORECAST_TEMP: 5, - ATTR_FORECAST_TEMP_LOW: 3, + ATTR_FORECAST_TEMP: 5.0, + ATTR_FORECAST_TEMP_LOW: 3.1, }, { ATTR_FORECAST_CONDITION: ATTR_CONDITION_CLOUDY, ATTR_FORECAST_TIME: "2021-03-21T00:00:00-07:00", ATTR_FORECAST_PRECIPITATION: 0.0432, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 20, - ATTR_FORECAST_TEMP: 7, - ATTR_FORECAST_TEMP_LOW: 1, + ATTR_FORECAST_TEMP: 6.8, + ATTR_FORECAST_TEMP_LOW: 0.9, }, ] assert weather_state.attributes[ATTR_FRIENDLY_NAME] == "ClimaCell - Daily" assert weather_state.attributes[ATTR_WEATHER_HUMIDITY] == 24 assert weather_state.attributes[ATTR_WEATHER_OZONE] == 52.625 assert weather_state.attributes[ATTR_WEATHER_PRESSURE] == 1028.1246 - assert weather_state.attributes[ATTR_WEATHER_TEMPERATURE] == 7 + assert weather_state.attributes[ATTR_WEATHER_TEMPERATURE] == 6.6 assert weather_state.attributes[ATTR_WEATHER_VISIBILITY] == 9.9940 assert weather_state.attributes[ATTR_WEATHER_WIND_BEARING] == 320.31 assert weather_state.attributes[ATTR_WEATHER_WIND_SPEED] == 14.6289 diff --git a/tests/components/demo/test_weather.py b/tests/components/demo/test_weather.py index c4ae8fcd79c..db3f3441df1 100644 --- a/tests/components/demo/test_weather.py +++ b/tests/components/demo/test_weather.py @@ -69,4 +69,4 @@ async def test_temperature_convert(hass): assert state.state == "rainy" data = state.attributes - assert data.get(ATTR_WEATHER_TEMPERATURE) == -24 + assert data.get(ATTR_WEATHER_TEMPERATURE) == -24.4 diff --git a/tests/components/nws/const.py b/tests/components/nws/const.py index c7387d4bf8c..dcf591b83ae 100644 --- a/tests/components/nws/const.py +++ b/tests/components/nws/const.py @@ -157,7 +157,9 @@ EXPECTED_FORECAST_IMPERIAL = { EXPECTED_FORECAST_METRIC = { ATTR_FORECAST_CONDITION: ATTR_CONDITION_LIGHTNING_RAINY, ATTR_FORECAST_TIME: "2019-08-12T20:00:00-04:00", - ATTR_FORECAST_TEMP: round(convert_temperature(10, TEMP_FAHRENHEIT, TEMP_CELSIUS)), + ATTR_FORECAST_TEMP: round( + convert_temperature(10, TEMP_FAHRENHEIT, TEMP_CELSIUS), 1 + ), ATTR_FORECAST_WIND_SPEED: round( convert_speed(10, SPEED_MILES_PER_HOUR, SPEED_KILOMETERS_PER_HOUR) ), diff --git a/tests/components/tomorrowio/test_weather.py b/tests/components/tomorrowio/test_weather.py index f47e8ed22d8..3e5eb81edec 100644 --- a/tests/components/tomorrowio/test_weather.py +++ b/tests/components/tomorrowio/test_weather.py @@ -99,8 +99,8 @@ async def test_v4_weather(hass: HomeAssistant) -> None: ATTR_FORECAST_TIME: "2021-03-07T11:00:00+00:00", ATTR_FORECAST_PRECIPITATION: 0, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 0, - ATTR_FORECAST_TEMP: 8, - ATTR_FORECAST_TEMP_LOW: -3, + ATTR_FORECAST_TEMP: 7.7, + ATTR_FORECAST_TEMP_LOW: -3.3, ATTR_FORECAST_WIND_BEARING: 239.6, ATTR_FORECAST_WIND_SPEED: 4.24, }, @@ -109,8 +109,8 @@ async def test_v4_weather(hass: HomeAssistant) -> None: ATTR_FORECAST_TIME: "2021-03-08T11:00:00+00:00", ATTR_FORECAST_PRECIPITATION: 0, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 0, - ATTR_FORECAST_TEMP: 10, - ATTR_FORECAST_TEMP_LOW: -3, + ATTR_FORECAST_TEMP: 9.7, + ATTR_FORECAST_TEMP_LOW: -3.2, ATTR_FORECAST_WIND_BEARING: 262.82, ATTR_FORECAST_WIND_SPEED: 3.24, }, @@ -119,8 +119,8 @@ async def test_v4_weather(hass: HomeAssistant) -> None: ATTR_FORECAST_TIME: "2021-03-09T11:00:00+00:00", ATTR_FORECAST_PRECIPITATION: 0, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 0, - ATTR_FORECAST_TEMP: 19, - ATTR_FORECAST_TEMP_LOW: 0, + ATTR_FORECAST_TEMP: 19.4, + ATTR_FORECAST_TEMP_LOW: -0.3, ATTR_FORECAST_WIND_BEARING: 229.3, ATTR_FORECAST_WIND_SPEED: 3.15, }, @@ -129,8 +129,8 @@ async def test_v4_weather(hass: HomeAssistant) -> None: ATTR_FORECAST_TIME: "2021-03-10T11:00:00+00:00", ATTR_FORECAST_PRECIPITATION: 0, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 0, - ATTR_FORECAST_TEMP: 18, - ATTR_FORECAST_TEMP_LOW: 3, + ATTR_FORECAST_TEMP: 18.5, + ATTR_FORECAST_TEMP_LOW: 3.0, ATTR_FORECAST_WIND_BEARING: 149.91, ATTR_FORECAST_WIND_SPEED: 4.76, }, @@ -139,8 +139,8 @@ async def test_v4_weather(hass: HomeAssistant) -> None: ATTR_FORECAST_TIME: "2021-03-11T11:00:00+00:00", ATTR_FORECAST_PRECIPITATION: 0, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 0, - ATTR_FORECAST_TEMP: 19, - ATTR_FORECAST_TEMP_LOW: 9, + ATTR_FORECAST_TEMP: 19.0, + ATTR_FORECAST_TEMP_LOW: 9.0, ATTR_FORECAST_WIND_BEARING: 210.45, ATTR_FORECAST_WIND_SPEED: 7.01, }, @@ -149,8 +149,8 @@ async def test_v4_weather(hass: HomeAssistant) -> None: ATTR_FORECAST_TIME: "2021-03-12T11:00:00+00:00", ATTR_FORECAST_PRECIPITATION: 0.12, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 25, - ATTR_FORECAST_TEMP: 20, - ATTR_FORECAST_TEMP_LOW: 12, + ATTR_FORECAST_TEMP: 19.9, + ATTR_FORECAST_TEMP_LOW: 12.1, ATTR_FORECAST_WIND_BEARING: 217.98, ATTR_FORECAST_WIND_SPEED: 5.5, }, @@ -159,8 +159,8 @@ async def test_v4_weather(hass: HomeAssistant) -> None: ATTR_FORECAST_TIME: "2021-03-13T11:00:00+00:00", ATTR_FORECAST_PRECIPITATION: 0, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 25, - ATTR_FORECAST_TEMP: 12, - ATTR_FORECAST_TEMP_LOW: 6, + ATTR_FORECAST_TEMP: 12.5, + ATTR_FORECAST_TEMP_LOW: 6.1, ATTR_FORECAST_WIND_BEARING: 58.79, ATTR_FORECAST_WIND_SPEED: 4.35, }, @@ -169,8 +169,8 @@ async def test_v4_weather(hass: HomeAssistant) -> None: ATTR_FORECAST_TIME: "2021-03-14T10:00:00+00:00", ATTR_FORECAST_PRECIPITATION: 23.96, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 95, - ATTR_FORECAST_TEMP: 6, - ATTR_FORECAST_TEMP_LOW: 1, + ATTR_FORECAST_TEMP: 6.1, + ATTR_FORECAST_TEMP_LOW: 0.8, ATTR_FORECAST_WIND_BEARING: 70.25, ATTR_FORECAST_WIND_SPEED: 7.26, }, @@ -179,8 +179,8 @@ async def test_v4_weather(hass: HomeAssistant) -> None: ATTR_FORECAST_TIME: "2021-03-15T10:00:00+00:00", ATTR_FORECAST_PRECIPITATION: 1.46, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 55, - ATTR_FORECAST_TEMP: 6, - ATTR_FORECAST_TEMP_LOW: -1, + ATTR_FORECAST_TEMP: 6.5, + ATTR_FORECAST_TEMP_LOW: -1.5, ATTR_FORECAST_WIND_BEARING: 84.47, ATTR_FORECAST_WIND_SPEED: 7.1, }, @@ -189,8 +189,8 @@ async def test_v4_weather(hass: HomeAssistant) -> None: ATTR_FORECAST_TIME: "2021-03-16T10:00:00+00:00", ATTR_FORECAST_PRECIPITATION: 0, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 0, - ATTR_FORECAST_TEMP: 6, - ATTR_FORECAST_TEMP_LOW: -2, + ATTR_FORECAST_TEMP: 6.1, + ATTR_FORECAST_TEMP_LOW: -1.6, ATTR_FORECAST_WIND_BEARING: 103.85, ATTR_FORECAST_WIND_SPEED: 3.0, }, @@ -199,8 +199,8 @@ async def test_v4_weather(hass: HomeAssistant) -> None: ATTR_FORECAST_TIME: "2021-03-17T10:00:00+00:00", ATTR_FORECAST_PRECIPITATION: 0, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 0, - ATTR_FORECAST_TEMP: 11, - ATTR_FORECAST_TEMP_LOW: 1, + ATTR_FORECAST_TEMP: 11.3, + ATTR_FORECAST_TEMP_LOW: 1.3, ATTR_FORECAST_WIND_BEARING: 145.41, ATTR_FORECAST_WIND_SPEED: 3.25, }, @@ -209,8 +209,8 @@ async def test_v4_weather(hass: HomeAssistant) -> None: ATTR_FORECAST_TIME: "2021-03-18T10:00:00+00:00", ATTR_FORECAST_PRECIPITATION: 0, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 10, - ATTR_FORECAST_TEMP: 12, - ATTR_FORECAST_TEMP_LOW: 5, + ATTR_FORECAST_TEMP: 12.3, + ATTR_FORECAST_TEMP_LOW: 5.2, ATTR_FORECAST_WIND_BEARING: 62.99, ATTR_FORECAST_WIND_SPEED: 2.94, }, @@ -219,8 +219,8 @@ async def test_v4_weather(hass: HomeAssistant) -> None: ATTR_FORECAST_TIME: "2021-03-19T10:00:00+00:00", ATTR_FORECAST_PRECIPITATION: 2.93, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 55, - ATTR_FORECAST_TEMP: 9, - ATTR_FORECAST_TEMP_LOW: 4, + ATTR_FORECAST_TEMP: 9.4, + ATTR_FORECAST_TEMP_LOW: 4.1, ATTR_FORECAST_WIND_BEARING: 68.54, ATTR_FORECAST_WIND_SPEED: 6.22, }, @@ -229,8 +229,8 @@ async def test_v4_weather(hass: HomeAssistant) -> None: ATTR_FORECAST_TIME: "2021-03-20T10:00:00+00:00", ATTR_FORECAST_PRECIPITATION: 1.22, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 33.3, - ATTR_FORECAST_TEMP: 5, - ATTR_FORECAST_TEMP_LOW: 2, + ATTR_FORECAST_TEMP: 4.5, + ATTR_FORECAST_TEMP_LOW: 1.7, ATTR_FORECAST_WIND_BEARING: 56.98, ATTR_FORECAST_WIND_SPEED: 7.76, }, @@ -239,7 +239,7 @@ async def test_v4_weather(hass: HomeAssistant) -> None: assert weather_state.attributes[ATTR_WEATHER_HUMIDITY] == 23 assert weather_state.attributes[ATTR_WEATHER_OZONE] == 46.53 assert weather_state.attributes[ATTR_WEATHER_PRESSURE] == 102776.91 - assert weather_state.attributes[ATTR_WEATHER_TEMPERATURE] == 7 + assert weather_state.attributes[ATTR_WEATHER_TEMPERATURE] == 6.7 assert weather_state.attributes[ATTR_WEATHER_VISIBILITY] == 13.12 assert weather_state.attributes[ATTR_WEATHER_WIND_BEARING] == 315.14 assert weather_state.attributes[ATTR_WEATHER_WIND_SPEED] == 4.17 From a8ad3292c82c646dd627e66a546b0a3722c691a7 Mon Sep 17 00:00:00 2001 From: puddly <32534428+puddly@users.noreply.github.com> Date: Thu, 31 Mar 2022 11:26:27 -0400 Subject: [PATCH 003/238] Bump zigpy to 0.44.1 and zha-quirks to 0.0.69 (#68921) * Make unit tests pass * Flip response type check to not rely on it being a list https://github.com/zigpy/zigpy/pull/716#issuecomment-1025236190 * Bump zigpy and quirks versions to ZCLR8 releases * Fix renamed zigpy cluster attributes * Handle the default response for ZLL `get_group_identifiers` * Add more error context to `stage failed` errors * Fix unit test returning lists as ZCL request responses * Always load quirks when testing ZHA * Bump zha-quirks to 0.0.69 --- homeassistant/components/zha/api.py | 6 +-- homeassistant/components/zha/climate.py | 6 +-- .../components/zha/core/channels/__init__.py | 4 +- .../components/zha/core/channels/base.py | 34 +++++++----- .../components/zha/core/channels/closures.py | 7 +-- .../components/zha/core/channels/general.py | 14 +++-- .../components/zha/core/channels/hvac.py | 18 +++---- .../components/zha/core/channels/lightlink.py | 8 ++- .../components/zha/core/channels/security.py | 6 +-- .../zha/core/channels/smartenergy.py | 4 +- homeassistant/components/zha/core/device.py | 4 +- homeassistant/components/zha/core/group.py | 8 +-- homeassistant/components/zha/core/helpers.py | 10 ++-- homeassistant/components/zha/cover.py | 16 +++--- homeassistant/components/zha/entity.py | 4 +- homeassistant/components/zha/light.py | 10 ++-- homeassistant/components/zha/lock.py | 4 +- homeassistant/components/zha/manifest.json | 4 +- homeassistant/components/zha/switch.py | 4 +- requirements_all.txt | 4 +- requirements_test_all.txt | 4 +- tests/components/zha/common.py | 53 +++++++++++++------ tests/components/zha/conftest.py | 14 +++++ tests/components/zha/test_api.py | 2 +- tests/components/zha/test_channels.py | 26 +++++++-- tests/components/zha/test_climate.py | 11 ++-- tests/components/zha/test_cover.py | 8 +-- tests/components/zha/test_discover.py | 2 +- tests/components/zha/test_light.py | 39 +++++++++++--- tests/components/zha/test_sensor.py | 4 +- tests/components/zha/test_switch.py | 32 +++++++++-- 31 files changed, 248 insertions(+), 122 deletions(-) diff --git a/homeassistant/components/zha/api.py b/homeassistant/components/zha/api.py index 552be260e8b..c42384682da 100644 --- a/homeassistant/components/zha/api.py +++ b/homeassistant/components/zha/api.py @@ -650,7 +650,7 @@ async def websocket_device_cluster_attributes( ) if attributes is not None: for attr_id, attr in attributes.items(): - cluster_attributes.append({ID: attr_id, ATTR_NAME: attr[0]}) + cluster_attributes.append({ID: attr_id, ATTR_NAME: attr.name}) _LOGGER.debug( "Requested attributes for: %s: %s, %s: '%s', %s: %s, %s: %s", ATTR_CLUSTER_ID, @@ -700,7 +700,7 @@ async def websocket_device_cluster_commands( { TYPE: CLIENT, ID: cmd_id, - ATTR_NAME: cmd[0], + ATTR_NAME: cmd.name, } ) for cmd_id, cmd in commands[CLUSTER_COMMANDS_SERVER].items(): @@ -708,7 +708,7 @@ async def websocket_device_cluster_commands( { TYPE: CLUSTER_COMMAND_SERVER, ID: cmd_id, - ATTR_NAME: cmd[0], + ATTR_NAME: cmd.name, } ) _LOGGER.debug( diff --git a/homeassistant/components/zha/climate.py b/homeassistant/components/zha/climate.py index 8544c46e92e..06b1e8a47d8 100644 --- a/homeassistant/components/zha/climate.py +++ b/homeassistant/components/zha/climate.py @@ -161,9 +161,9 @@ class Thermostat(ZhaEntity, ClimateEntity): @property def current_temperature(self): """Return the current temperature.""" - if self._thrm.local_temp is None: + if self._thrm.local_temperature is None: return None - return self._thrm.local_temp / ZCL_TEMP + return self._thrm.local_temperature / ZCL_TEMP @property def extra_state_attributes(self): @@ -272,7 +272,7 @@ class Thermostat(ZhaEntity, ClimateEntity): @property def hvac_modes(self) -> tuple[str, ...]: """Return the list of available HVAC operation modes.""" - return SEQ_OF_OPERATION.get(self._thrm.ctrl_seqe_of_oper, (HVAC_MODE_OFF,)) + return SEQ_OF_OPERATION.get(self._thrm.ctrl_sequence_of_oper, (HVAC_MODE_OFF,)) @property def precision(self): diff --git a/homeassistant/components/zha/core/channels/__init__.py b/homeassistant/components/zha/core/channels/__init__.py index b63c20e14eb..2011f92a63b 100644 --- a/homeassistant/components/zha/core/channels/__init__.py +++ b/homeassistant/components/zha/core/channels/__init__.py @@ -346,7 +346,9 @@ class ChannelPool: results = await asyncio.gather(*tasks, return_exceptions=True) for channel, outcome in zip(channels, results): if isinstance(outcome, Exception): - channel.warning("'%s' stage failed: %s", func_name, str(outcome)) + channel.warning( + "'%s' stage failed: %s", func_name, str(outcome), exc_info=outcome + ) continue channel.debug("'%s' stage succeeded", func_name) diff --git a/homeassistant/components/zha/core/channels/base.py b/homeassistant/components/zha/core/channels/base.py index f79000d0646..0dd6169373b 100644 --- a/homeassistant/components/zha/core/channels/base.py +++ b/homeassistant/components/zha/core/channels/base.py @@ -8,7 +8,7 @@ import logging from typing import Any import zigpy.exceptions -from zigpy.zcl.foundation import Status +from zigpy.zcl.foundation import ConfigureReportingResponseRecord, Status from homeassistant.const import ATTR_COMMAND from homeassistant.core import callback @@ -111,7 +111,7 @@ class ZigbeeChannel(LogMixin): if not hasattr(self, "_value_attribute") and self.REPORT_CONFIG: attr = self.REPORT_CONFIG[0].get("attr") if isinstance(attr, str): - self.value_attribute = self.cluster.attridx.get(attr) + self.value_attribute = self.cluster.attributes_by_name.get(attr) else: self.value_attribute = attr self._status = ChannelStatus.CREATED @@ -260,7 +260,7 @@ class ZigbeeChannel(LogMixin): self, attrs: dict[int | str, tuple], res: list | tuple ) -> None: """Parse configure reporting result.""" - if not isinstance(res, list): + if isinstance(res, (Exception, ConfigureReportingResponseRecord)): # assume default response self.debug( "attr reporting for '%s' on '%s': %s", @@ -345,7 +345,7 @@ class ZigbeeChannel(LogMixin): self.async_send_signal( f"{self.unique_id}_{SIGNAL_ATTR_UPDATED}", attrid, - self.cluster.attributes.get(attrid, [attrid])[0], + self._get_attribute_name(attrid), value, ) @@ -368,6 +368,12 @@ class ZigbeeChannel(LogMixin): async def async_update(self): """Retrieve latest state from cluster.""" + def _get_attribute_name(self, attrid: int) -> str | int: + if attrid not in self.cluster.attributes: + return attrid + + return self.cluster.attributes[attrid].name + async def get_attribute_value(self, attribute, from_cache=True): """Get the value for an attribute.""" manufacturer = None @@ -421,11 +427,11 @@ class ZigbeeChannel(LogMixin): get_attributes = partialmethod(_get_attributes, False) - def log(self, level, msg, *args): + def log(self, level, msg, *args, **kwargs): """Log a message.""" msg = f"[%s:%s]: {msg}" args = (self._ch_pool.nwk, self._id) + args - _LOGGER.log(level, msg, *args) + _LOGGER.log(level, msg, *args, **kwargs) def __getattr__(self, name): """Get attribute or a decorated cluster command.""" @@ -479,11 +485,11 @@ class ZDOChannel(LogMixin): """Configure channel.""" self._status = ChannelStatus.CONFIGURED - def log(self, level, msg, *args): + def log(self, level, msg, *args, **kwargs): """Log a message.""" msg = f"[%s:ZDO](%s): {msg}" args = (self._zha_device.nwk, self._zha_device.model) + args - _LOGGER.log(level, msg, *args) + _LOGGER.log(level, msg, *args, **kwargs) class ClientChannel(ZigbeeChannel): @@ -492,13 +498,17 @@ class ClientChannel(ZigbeeChannel): @callback def attribute_updated(self, attrid, value): """Handle an attribute updated on this cluster.""" + + try: + attr_name = self._cluster.attributes[attrid].name + except KeyError: + attr_name = "Unknown" + self.zha_send_event( SIGNAL_ATTR_UPDATED, { ATTR_ATTRIBUTE_ID: attrid, - ATTR_ATTRIBUTE_NAME: self._cluster.attributes.get(attrid, ["Unknown"])[ - 0 - ], + ATTR_ATTRIBUTE_NAME: attr_name, ATTR_VALUE: value, }, ) @@ -510,4 +520,4 @@ class ClientChannel(ZigbeeChannel): self._cluster.server_commands is not None and self._cluster.server_commands.get(command_id) is not None ): - self.zha_send_event(self._cluster.server_commands.get(command_id)[0], args) + self.zha_send_event(self._cluster.server_commands[command_id].name, args) diff --git a/homeassistant/components/zha/core/channels/closures.py b/homeassistant/components/zha/core/channels/closures.py index c63d069767d..bf50c8fc4ba 100644 --- a/homeassistant/components/zha/core/channels/closures.py +++ b/homeassistant/components/zha/core/channels/closures.py @@ -33,7 +33,8 @@ class DoorLockChannel(ZigbeeChannel): ): return - command_name = self._cluster.client_commands.get(command_id, [command_id])[0] + command_name = self._cluster.client_commands[command_id].name + if command_name == "operation_event_notification": self.zha_send_event( command_name, @@ -47,7 +48,7 @@ class DoorLockChannel(ZigbeeChannel): @callback def attribute_updated(self, attrid, value): """Handle attribute update from lock cluster.""" - attr_name = self.cluster.attributes.get(attrid, [attrid])[0] + attr_name = self._get_attribute_name(attrid) self.debug( "Attribute report '%s'[%s] = %s", self.cluster.name, attr_name, value ) @@ -140,7 +141,7 @@ class WindowCovering(ZigbeeChannel): @callback def attribute_updated(self, attrid, value): """Handle attribute update from window_covering cluster.""" - attr_name = self.cluster.attributes.get(attrid, [attrid])[0] + attr_name = self._get_attribute_name(attrid) self.debug( "Attribute report '%s'[%s] = %s", self.cluster.name, attr_name, value ) diff --git a/homeassistant/components/zha/core/channels/general.py b/homeassistant/components/zha/core/channels/general.py index 89d750465b8..09a1fd80f17 100644 --- a/homeassistant/components/zha/core/channels/general.py +++ b/homeassistant/components/zha/core/channels/general.py @@ -103,7 +103,7 @@ class AnalogOutput(ZigbeeChannel): except zigpy.exceptions.ZigbeeException as ex: self.error("Could not set value: %s", ex) return False - if isinstance(res, list) and all( + if not isinstance(res, Exception) and all( record.status == Status.SUCCESS for record in res[0] ): return True @@ -380,7 +380,11 @@ class Ota(ZigbeeChannel): self, tsn: int, command_id: int, args: list[Any] | None ) -> None: """Handle OTA commands.""" - cmd_name = self.cluster.server_commands.get(command_id, [command_id])[0] + if command_id in self.cluster.server_commands: + cmd_name = self.cluster.server_commands[command_id].name + else: + cmd_name = command_id + signal_id = self._ch_pool.unique_id.split("-")[0] if cmd_name == "query_next_image": self.async_send_signal(SIGNAL_UPDATE_DEVICE.format(signal_id), args[3]) @@ -418,7 +422,11 @@ class PollControl(ZigbeeChannel): self, tsn: int, command_id: int, args: list[Any] | None ) -> None: """Handle commands received to this cluster.""" - cmd_name = self.cluster.client_commands.get(command_id, [command_id])[0] + if command_id in self.cluster.client_commands: + cmd_name = self.cluster.client_commands[command_id].name + else: + cmd_name = command_id + self.debug("Received %s tsn command '%s': %s", tsn, cmd_name, args) self.zha_send_event(cmd_name, args) if cmd_name == "checkin": diff --git a/homeassistant/components/zha/core/channels/hvac.py b/homeassistant/components/zha/core/channels/hvac.py index 726d9f15376..5b102d062cb 100644 --- a/homeassistant/components/zha/core/channels/hvac.py +++ b/homeassistant/components/zha/core/channels/hvac.py @@ -70,7 +70,7 @@ class FanChannel(ZigbeeChannel): @callback def attribute_updated(self, attrid: int, value: Any) -> None: """Handle attribute update from fan cluster.""" - attr_name = self.cluster.attributes.get(attrid, [attrid])[0] + attr_name = self._get_attribute_name(attrid) self.debug( "Attribute report '%s'[%s] = %s", self.cluster.name, attr_name, value ) @@ -90,7 +90,7 @@ class ThermostatChannel(ZigbeeChannel): """Thermostat channel.""" REPORT_CONFIG = ( - {"attr": "local_temp", "config": REPORT_CONFIG_CLIMATE}, + {"attr": "local_temperature", "config": REPORT_CONFIG_CLIMATE}, {"attr": "occupied_cooling_setpoint", "config": REPORT_CONFIG_CLIMATE}, {"attr": "occupied_heating_setpoint", "config": REPORT_CONFIG_CLIMATE}, {"attr": "unoccupied_cooling_setpoint", "config": REPORT_CONFIG_CLIMATE}, @@ -107,7 +107,7 @@ class ThermostatChannel(ZigbeeChannel): "abs_max_heat_setpoint_limit": True, "abs_min_cool_setpoint_limit": True, "abs_max_cool_setpoint_limit": True, - "ctrl_seqe_of_oper": False, + "ctrl_sequence_of_oper": False, "max_cool_setpoint_limit": True, "max_heat_setpoint_limit": True, "min_cool_setpoint_limit": True, @@ -135,9 +135,9 @@ class ThermostatChannel(ZigbeeChannel): return self.cluster.get("abs_min_heat_setpoint_limit", 700) @property - def ctrl_seqe_of_oper(self) -> int: + def ctrl_sequence_of_oper(self) -> int: """Control Sequence of operations attribute.""" - return self.cluster.get("ctrl_seqe_of_oper", 0xFF) + return self.cluster.get("ctrl_sequence_of_oper", 0xFF) @property def max_cool_setpoint_limit(self) -> int: @@ -172,9 +172,9 @@ class ThermostatChannel(ZigbeeChannel): return sp_limit @property - def local_temp(self) -> int | None: + def local_temperature(self) -> int | None: """Thermostat temperature.""" - return self.cluster.get("local_temp") + return self.cluster.get("local_temperature") @property def occupancy(self) -> int | None: @@ -229,7 +229,7 @@ class ThermostatChannel(ZigbeeChannel): @callback def attribute_updated(self, attrid, value): """Handle attribute update cluster.""" - attr_name = self.cluster.attributes.get(attrid, [attrid])[0] + attr_name = self._get_attribute_name(attrid) self.debug( "Attribute report '%s'[%s] = %s", self.cluster.name, attr_name, value ) @@ -300,7 +300,7 @@ class ThermostatChannel(ZigbeeChannel): @staticmethod def check_result(res: list) -> bool: """Normalize the result.""" - if not isinstance(res, list): + if isinstance(res, Exception): return False return all(record.status == Status.SUCCESS for record in res[0]) diff --git a/homeassistant/components/zha/core/channels/lightlink.py b/homeassistant/components/zha/core/channels/lightlink.py index 46c40fdaff0..a29d9020a75 100644 --- a/homeassistant/components/zha/core/channels/lightlink.py +++ b/homeassistant/components/zha/core/channels/lightlink.py @@ -3,6 +3,7 @@ import asyncio import zigpy.exceptions from zigpy.zcl.clusters import lightlink +from zigpy.zcl.foundation import GENERAL_COMMANDS, GeneralCommand from .. import registries from .base import ChannelStatus, ZigbeeChannel @@ -30,11 +31,16 @@ class LightLink(ZigbeeChannel): return try: - _, _, groups = await self.cluster.get_group_identifiers(0) + rsp = await self.cluster.get_group_identifiers(0) except (zigpy.exceptions.ZigbeeException, asyncio.TimeoutError) as exc: self.warning("Couldn't get list of groups: %s", str(exc)) return + if isinstance(rsp, GENERAL_COMMANDS[GeneralCommand.Default_Response].schema): + groups = [] + else: + groups = rsp.group_info_records + if groups: for group in groups: self.debug("Adding coordinator to 0x%04x group id", group.group_id) diff --git a/homeassistant/components/zha/core/channels/security.py b/homeassistant/components/zha/core/channels/security.py index 8aa5c620656..19be861178f 100644 --- a/homeassistant/components/zha/core/channels/security.py +++ b/homeassistant/components/zha/core/channels/security.py @@ -85,7 +85,7 @@ class IasAce(ZigbeeChannel): def cluster_command(self, tsn, command_id, args) -> None: """Handle commands received to this cluster.""" self.warning( - "received command %s", self._cluster.server_commands.get(command_id)[NAME] + "received command %s", self._cluster.server_commands[command_id].name ) self.command_map[command_id](*args) @@ -94,7 +94,7 @@ class IasAce(ZigbeeChannel): mode = AceCluster.ArmMode(arm_mode) self.zha_send_event( - self._cluster.server_commands.get(IAS_ACE_ARM)[NAME], + self._cluster.server_commands[IAS_ACE_ARM].name, { "arm_mode": mode.value, "arm_mode_description": mode.name, @@ -190,7 +190,7 @@ class IasAce(ZigbeeChannel): def _bypass(self, zone_list, code) -> None: """Handle the IAS ACE bypass command.""" self.zha_send_event( - self._cluster.server_commands.get(IAS_ACE_BYPASS)[NAME], + self._cluster.server_commands[IAS_ACE_BYPASS].name, {"zone_list": zone_list, "code": code}, ) diff --git a/homeassistant/components/zha/core/channels/smartenergy.py b/homeassistant/components/zha/core/channels/smartenergy.py index 5877dad14fa..b153372a322 100644 --- a/homeassistant/components/zha/core/channels/smartenergy.py +++ b/homeassistant/components/zha/core/channels/smartenergy.py @@ -65,7 +65,7 @@ class Metering(ZigbeeChannel): "divisor": True, "metering_device_type": True, "multiplier": True, - "summa_formatting": True, + "summation_formatting": True, "unit_of_measure": True, } @@ -159,7 +159,7 @@ class Metering(ZigbeeChannel): self._format_spec = self.get_formatting(fmting) fmting = self.cluster.get( - "summa_formatting", 0xF9 + "summation_formatting", 0xF9 ) # 1 digit to the right, 15 digits to the left self._summa_format = self.get_formatting(fmting) diff --git a/homeassistant/components/zha/core/device.py b/homeassistant/components/zha/core/device.py index 79cc54c4829..e80a0725cc1 100644 --- a/homeassistant/components/zha/core/device.py +++ b/homeassistant/components/zha/core/device.py @@ -783,8 +783,8 @@ class ZHADevice(LogMixin): fmt = f"{log_msg[1]} completed: %s" zdo.debug(fmt, *(log_msg[2] + (outcome,))) - def log(self, level: int, msg: str, *args: Any) -> None: + def log(self, level: int, msg: str, *args: Any, **kwargs: dict) -> None: """Log a message.""" msg = f"[%s](%s): {msg}" args = (self.nwk, self.model) + args - _LOGGER.log(level, msg, *args) + _LOGGER.log(level, msg, *args, **kwargs) diff --git a/homeassistant/components/zha/core/group.py b/homeassistant/components/zha/core/group.py index 93e96c7565b..af17f28e622 100644 --- a/homeassistant/components/zha/core/group.py +++ b/homeassistant/components/zha/core/group.py @@ -108,11 +108,11 @@ class ZHAGroupMember(LogMixin): str(ex), ) - def log(self, level: int, msg: str, *args: Any) -> None: + def log(self, level: int, msg: str, *args: Any, **kwargs) -> None: """Log a message.""" msg = f"[%s](%s): {msg}" args = (f"0x{self._zha_group.group_id:04x}", self.endpoint_id) + args - _LOGGER.log(level, msg, *args) + _LOGGER.log(level, msg, *args, **kwargs) class ZHAGroup(LogMixin): @@ -224,8 +224,8 @@ class ZHAGroup(LogMixin): group_info["members"] = [member.member_info for member in self.members] return group_info - def log(self, level: int, msg: str, *args: Any) -> None: + def log(self, level: int, msg: str, *args: Any, **kwargs) -> None: """Log a message.""" msg = f"[%s](%s): {msg}" args = (self.name, self.group_id) + args - _LOGGER.log(level, msg, *args) + _LOGGER.log(level, msg, *args, **kwargs) diff --git a/homeassistant/components/zha/core/helpers.py b/homeassistant/components/zha/core/helpers.py index 5e98799e387..fcd29c1619f 100644 --- a/homeassistant/components/zha/core/helpers.py +++ b/homeassistant/components/zha/core/helpers.py @@ -210,23 +210,23 @@ def reduce_attribute( class LogMixin: """Log helper.""" - def log(self, level, msg, *args): + def log(self, level, msg, *args, **kwargs): """Log with level.""" raise NotImplementedError - def debug(self, msg, *args): + def debug(self, msg, *args, **kwargs): """Debug level log.""" return self.log(logging.DEBUG, msg, *args) - def info(self, msg, *args): + def info(self, msg, *args, **kwargs): """Info level log.""" return self.log(logging.INFO, msg, *args) - def warning(self, msg, *args): + def warning(self, msg, *args, **kwargs): """Warning method log.""" return self.log(logging.WARNING, msg, *args) - def error(self, msg, *args): + def error(self, msg, *args, **kwargs): """Error level log.""" return self.log(logging.ERROR, msg, *args) diff --git a/homeassistant/components/zha/cover.py b/homeassistant/components/zha/cover.py index 9f62d4b9c02..0fdb4daeaa5 100644 --- a/homeassistant/components/zha/cover.py +++ b/homeassistant/components/zha/cover.py @@ -133,20 +133,20 @@ class ZhaCover(ZhaEntity, CoverEntity): async def async_open_cover(self, **kwargs): """Open the window cover.""" res = await self._cover_channel.up_open() - if isinstance(res, list) and res[1] is Status.SUCCESS: + if not isinstance(res, Exception) and res[1] is Status.SUCCESS: self.async_update_state(STATE_OPENING) async def async_close_cover(self, **kwargs): """Close the window cover.""" res = await self._cover_channel.down_close() - if isinstance(res, list) and res[1] is Status.SUCCESS: + if not isinstance(res, Exception) and res[1] is Status.SUCCESS: self.async_update_state(STATE_CLOSING) async def async_set_cover_position(self, **kwargs): """Move the roller shutter to a specific position.""" new_pos = kwargs[ATTR_POSITION] res = await self._cover_channel.go_to_lift_percentage(100 - new_pos) - if isinstance(res, list) and res[1] is Status.SUCCESS: + if not isinstance(res, Exception) and res[1] is Status.SUCCESS: self.async_update_state( STATE_CLOSING if new_pos < self._current_position else STATE_OPENING ) @@ -154,7 +154,7 @@ class ZhaCover(ZhaEntity, CoverEntity): async def async_stop_cover(self, **kwargs): """Stop the window cover.""" res = await self._cover_channel.stop() - if isinstance(res, list) and res[1] is Status.SUCCESS: + if not isinstance(res, Exception) and res[1] is Status.SUCCESS: self._state = STATE_OPEN if self._current_position > 0 else STATE_CLOSED self.async_write_ha_state() @@ -250,7 +250,7 @@ class Shade(ZhaEntity, CoverEntity): async def async_open_cover(self, **kwargs): """Open the window cover.""" res = await self._on_off_channel.on() - if not isinstance(res, list) or res[1] != Status.SUCCESS: + if isinstance(res, Exception) or res[1] != Status.SUCCESS: self.debug("couldn't open cover: %s", res) return @@ -260,7 +260,7 @@ class Shade(ZhaEntity, CoverEntity): async def async_close_cover(self, **kwargs): """Close the window cover.""" res = await self._on_off_channel.off() - if not isinstance(res, list) or res[1] != Status.SUCCESS: + if isinstance(res, Exception) or res[1] != Status.SUCCESS: self.debug("couldn't open cover: %s", res) return @@ -274,7 +274,7 @@ class Shade(ZhaEntity, CoverEntity): new_pos * 255 / 100, 1 ) - if not isinstance(res, list) or res[1] != Status.SUCCESS: + if isinstance(res, Exception) or res[1] != Status.SUCCESS: self.debug("couldn't set cover's position: %s", res) return @@ -284,7 +284,7 @@ class Shade(ZhaEntity, CoverEntity): async def async_stop_cover(self, **kwargs) -> None: """Stop the cover.""" res = await self._level_channel.stop() - if not isinstance(res, list) or res[1] != Status.SUCCESS: + if isinstance(res, Exception) or res[1] != Status.SUCCESS: self.debug("couldn't stop cover: %s", res) return diff --git a/homeassistant/components/zha/entity.py b/homeassistant/components/zha/entity.py index 4a9b0f7577c..13e43aa9ff0 100644 --- a/homeassistant/components/zha/entity.py +++ b/homeassistant/components/zha/entity.py @@ -139,11 +139,11 @@ class BaseZhaEntity(LogMixin, entity.Entity): ) self._unsubs.append(unsub) - def log(self, level: int, msg: str, *args): + def log(self, level: int, msg: str, *args, **kwargs): """Log a message.""" msg = f"%s: {msg}" args = (self.entity_id,) + args - _LOGGER.log(level, msg, *args) + _LOGGER.log(level, msg, *args, **kwargs) class ZhaEntity(BaseZhaEntity, RestoreEntity): diff --git a/homeassistant/components/zha/light.py b/homeassistant/components/zha/light.py index 6855db22572..b6d344a57e7 100644 --- a/homeassistant/components/zha/light.py +++ b/homeassistant/components/zha/light.py @@ -243,7 +243,7 @@ class BaseLight(LogMixin, light.LightEntity): level, duration ) t_log["move_to_level_with_on_off"] = result - if not isinstance(result, list) or result[1] is not Status.SUCCESS: + if isinstance(result, Exception) or result[1] is not Status.SUCCESS: self.debug("turned on: %s", t_log) return self._state = bool(level) @@ -255,7 +255,7 @@ class BaseLight(LogMixin, light.LightEntity): # we should call the on command on the on_off cluster if brightness is not 0. result = await self._on_off_channel.on() t_log["on_off"] = result - if not isinstance(result, list) or result[1] is not Status.SUCCESS: + if isinstance(result, Exception) or result[1] is not Status.SUCCESS: self.debug("turned on: %s", t_log) return self._state = True @@ -266,7 +266,7 @@ class BaseLight(LogMixin, light.LightEntity): temperature = kwargs[light.ATTR_COLOR_TEMP] result = await self._color_channel.move_to_color_temp(temperature, duration) t_log["move_to_color_temp"] = result - if not isinstance(result, list) or result[1] is not Status.SUCCESS: + if isinstance(result, Exception) or result[1] is not Status.SUCCESS: self.debug("turned on: %s", t_log) return self._color_temp = temperature @@ -282,7 +282,7 @@ class BaseLight(LogMixin, light.LightEntity): int(xy_color[0] * 65535), int(xy_color[1] * 65535), duration ) t_log["move_to_color"] = result - if not isinstance(result, list) or result[1] is not Status.SUCCESS: + if isinstance(result, Exception) or result[1] is not Status.SUCCESS: self.debug("turned on: %s", t_log) return self._hs_color = hs_color @@ -340,7 +340,7 @@ class BaseLight(LogMixin, light.LightEntity): else: result = await self._on_off_channel.off() self.debug("turned off: %s", result) - if not isinstance(result, list) or result[1] is not Status.SUCCESS: + if isinstance(result, Exception) or result[1] is not Status.SUCCESS: return self._state = False diff --git a/homeassistant/components/zha/lock.py b/homeassistant/components/zha/lock.py index 341cfcebf68..1ebb10cacb6 100644 --- a/homeassistant/components/zha/lock.py +++ b/homeassistant/components/zha/lock.py @@ -122,7 +122,7 @@ class ZhaDoorLock(ZhaEntity, LockEntity): async def async_lock(self, **kwargs): """Lock the lock.""" result = await self._doorlock_channel.lock_door() - if not isinstance(result, list) or result[0] is not Status.SUCCESS: + if isinstance(result, Exception) or result[0] is not Status.SUCCESS: self.error("Error with lock_door: %s", result) return self.async_write_ha_state() @@ -130,7 +130,7 @@ class ZhaDoorLock(ZhaEntity, LockEntity): async def async_unlock(self, **kwargs): """Unlock the lock.""" result = await self._doorlock_channel.unlock_door() - if not isinstance(result, list) or result[0] is not Status.SUCCESS: + if isinstance(result, Exception) or result[0] is not Status.SUCCESS: self.error("Error with unlock_door: %s", result) return self.async_write_ha_state() diff --git a/homeassistant/components/zha/manifest.json b/homeassistant/components/zha/manifest.json index e542c77516e..6d47535b765 100644 --- a/homeassistant/components/zha/manifest.json +++ b/homeassistant/components/zha/manifest.json @@ -7,9 +7,9 @@ "bellows==0.29.0", "pyserial==3.5", "pyserial-asyncio==0.6", - "zha-quirks==0.0.67", + "zha-quirks==0.0.69", "zigpy-deconz==0.14.0", - "zigpy==0.43.0", + "zigpy==0.44.1", "zigpy-xbee==0.14.0", "zigpy-zigate==0.8.0", "zigpy-znp==0.7.0" diff --git a/homeassistant/components/zha/switch.py b/homeassistant/components/zha/switch.py index 29fb08b9bc0..87d2407c2dc 100644 --- a/homeassistant/components/zha/switch.py +++ b/homeassistant/components/zha/switch.py @@ -65,7 +65,7 @@ class BaseSwitch(SwitchEntity): async def async_turn_on(self, **kwargs) -> None: """Turn the entity on.""" result = await self._on_off_channel.on() - if not isinstance(result, list) or result[1] is not Status.SUCCESS: + if isinstance(result, Exception) or result[1] is not Status.SUCCESS: return self._state = True self.async_write_ha_state() @@ -73,7 +73,7 @@ class BaseSwitch(SwitchEntity): async def async_turn_off(self, **kwargs) -> None: """Turn the entity off.""" result = await self._on_off_channel.off() - if not isinstance(result, list) or result[1] is not Status.SUCCESS: + if isinstance(result, Exception) or result[1] is not Status.SUCCESS: return self._state = False self.async_write_ha_state() diff --git a/requirements_all.txt b/requirements_all.txt index 285db2b5452..38f7a282e8d 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -2469,7 +2469,7 @@ zengge==0.2 zeroconf==0.38.4 # homeassistant.components.zha -zha-quirks==0.0.67 +zha-quirks==0.0.69 # homeassistant.components.zhong_hong zhong_hong_hvac==1.0.9 @@ -2490,7 +2490,7 @@ zigpy-zigate==0.8.0 zigpy-znp==0.7.0 # homeassistant.components.zha -zigpy==0.43.0 +zigpy==0.44.1 # homeassistant.components.zoneminder zm-py==0.5.2 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 63308aa044d..d9126758eec 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -1595,7 +1595,7 @@ youless-api==0.16 zeroconf==0.38.4 # homeassistant.components.zha -zha-quirks==0.0.67 +zha-quirks==0.0.69 # homeassistant.components.zha zigpy-deconz==0.14.0 @@ -1610,7 +1610,7 @@ zigpy-zigate==0.8.0 zigpy-znp==0.7.0 # homeassistant.components.zha -zigpy==0.43.0 +zigpy==0.44.1 # homeassistant.components.zwave_js zwave-js-server-python==0.35.2 diff --git a/tests/components/zha/common.py b/tests/components/zha/common.py index 48772d31fb6..757587071fd 100644 --- a/tests/components/zha/common.py +++ b/tests/components/zha/common.py @@ -20,8 +20,10 @@ def patch_cluster(cluster): value = cluster.PLUGGED_ATTR_READS.get(attr_id) if value is None: # try converting attr_id to attr_name and lookup the plugs again - attr_name = cluster.attributes.get(attr_id) - value = attr_name and cluster.PLUGGED_ATTR_READS.get(attr_name[0]) + attr = cluster.attributes.get(attr_id) + + if attr is not None: + value = cluster.PLUGGED_ATTR_READS.get(attr.name) if value is not None: result.append( zcl_f.ReadAttributeRecord( @@ -58,14 +60,23 @@ def patch_cluster(cluster): def update_attribute_cache(cluster): """Update attribute cache based on plugged attributes.""" - if cluster.PLUGGED_ATTR_READS: - attrs = [ - make_attribute(cluster.attridx.get(attr, attr), value) - for attr, value in cluster.PLUGGED_ATTR_READS.items() - ] - hdr = make_zcl_header(zcl_f.Command.Report_Attributes) - hdr.frame_control.disable_default_response = True - cluster.handle_message(hdr, [attrs]) + if not cluster.PLUGGED_ATTR_READS: + return + + attrs = [] + for attrid, value in cluster.PLUGGED_ATTR_READS.items(): + if isinstance(attrid, str): + attrid = cluster.attributes_by_name[attrid].id + else: + attrid = zigpy.types.uint16_t(attrid) + attrs.append(make_attribute(attrid, value)) + + hdr = make_zcl_header(zcl_f.Command.Report_Attributes) + hdr.frame_control.disable_default_response = True + msg = zcl_f.GENERAL_COMMANDS[zcl_f.GeneralCommand.Report_Attributes].schema( + attribute_reports=attrs + ) + cluster.handle_message(hdr, msg) def get_zha_gateway(hass): @@ -96,13 +107,23 @@ async def send_attributes_report(hass, cluster: zigpy.zcl.Cluster, attributes: d This is to simulate the normal device communication that happens when a device is paired to the zigbee network. """ - attrs = [ - make_attribute(cluster.attridx.get(attr, attr), value) - for attr, value in attributes.items() - ] - hdr = make_zcl_header(zcl_f.Command.Report_Attributes) + attrs = [] + + for attrid, value in attributes.items(): + if isinstance(attrid, str): + attrid = cluster.attributes_by_name[attrid].id + else: + attrid = zigpy.types.uint16_t(attrid) + + attrs.append(make_attribute(attrid, value)) + + msg = zcl_f.GENERAL_COMMANDS[zcl_f.GeneralCommand.Report_Attributes].schema( + attribute_reports=attrs + ) + + hdr = make_zcl_header(zcl_f.GeneralCommand.Report_Attributes) hdr.frame_control.disable_default_response = True - cluster.handle_message(hdr, [attrs]) + cluster.handle_message(hdr, msg) await hass.async_block_till_done() diff --git a/tests/components/zha/conftest.py b/tests/components/zha/conftest.py index fd138567367..0e969b1b0f3 100644 --- a/tests/components/zha/conftest.py +++ b/tests/components/zha/conftest.py @@ -27,6 +27,20 @@ FIXTURE_GRP_ID = 0x1001 FIXTURE_GRP_NAME = "fixture group" +@pytest.fixture(scope="session", autouse=True) +def globally_load_quirks(): + """Load quirks automatically so that ZHA tests run deterministically in isolation. + + If portions of the ZHA test suite that do not happen to load quirks are run + independently, bugs can emerge that will show up only when more of the test suite is + run. + """ + + import zhaquirks + + zhaquirks.setup() + + @pytest.fixture def zigpy_app_controller(): """Zigpy ApplicationController fixture.""" diff --git a/tests/components/zha/test_api.py b/tests/components/zha/test_api.py index 4e97f35bf1d..dac9855148a 100644 --- a/tests/components/zha/test_api.py +++ b/tests/components/zha/test_api.py @@ -145,7 +145,7 @@ async def test_device_cluster_attributes(zha_client): msg = await zha_client.receive_json() attributes = msg["result"] - assert len(attributes) == 5 + assert len(attributes) == 7 for attribute in attributes: assert attribute[ID] is not None diff --git a/tests/components/zha/test_channels.py b/tests/components/zha/test_channels.py index 8eafdc451cc..79b8dbc6a71 100644 --- a/tests/components/zha/test_channels.py +++ b/tests/components/zha/test_channels.py @@ -130,7 +130,7 @@ async def poll_control_device(zha_device_restored, zigpy_device_mock): 0x0201, 1, { - "local_temp", + "local_temperature", "occupied_cooling_setpoint", "occupied_heating_setpoint", "unoccupied_cooling_setpoint", @@ -586,13 +586,23 @@ async def test_zll_device_groups( cluster = zigpy_zll_device.endpoints[1].lightlink channel = zha_channels.lightlink.LightLink(cluster, channel_pool) + get_group_identifiers_rsp = zigpy.zcl.clusters.lightlink.LightLink.commands_by_name[ + "get_group_identifiers_rsp" + ].schema + with patch.object( - cluster, "command", AsyncMock(return_value=[1, 0, []]) + cluster, + "command", + AsyncMock( + return_value=get_group_identifiers_rsp( + total=0, start_index=0, group_info_records=[] + ) + ), ) as cmd_mock: await channel.async_configure() assert cmd_mock.await_count == 1 assert ( - cluster.server_commands[cmd_mock.await_args[0][0]][0] + cluster.server_commands[cmd_mock.await_args[0][0]].name == "get_group_identifiers" ) assert cluster.bind.call_count == 0 @@ -603,12 +613,18 @@ async def test_zll_device_groups( group_1 = zigpy.zcl.clusters.lightlink.GroupInfoRecord(0xABCD, 0x00) group_2 = zigpy.zcl.clusters.lightlink.GroupInfoRecord(0xAABB, 0x00) with patch.object( - cluster, "command", AsyncMock(return_value=[1, 0, [group_1, group_2]]) + cluster, + "command", + AsyncMock( + return_value=get_group_identifiers_rsp( + total=2, start_index=0, group_info_records=[group_1, group_2] + ) + ), ) as cmd_mock: await channel.async_configure() assert cmd_mock.await_count == 1 assert ( - cluster.server_commands[cmd_mock.await_args[0][0]][0] + cluster.server_commands[cmd_mock.await_args[0][0]].name == "get_group_identifiers" ) assert cluster.bind.call_count == 0 diff --git a/tests/components/zha/test_climate.py b/tests/components/zha/test_climate.py index 9f856ca1df6..fbf18ff9004 100644 --- a/tests/components/zha/test_climate.py +++ b/tests/components/zha/test_climate.py @@ -6,6 +6,7 @@ import pytest import zhaquirks.sinope.thermostat import zhaquirks.tuya.ts0601_trv import zigpy.profiles +import zigpy.types import zigpy.zcl.clusters from zigpy.zcl.clusters.hvac import Thermostat import zigpy.zcl.foundation as zcl_f @@ -162,8 +163,8 @@ ZCL_ATTR_PLUG = { "abs_max_heat_setpoint_limit": 3000, "abs_min_cool_setpoint_limit": 2000, "abs_max_cool_setpoint_limit": 4000, - "ctrl_seqe_of_oper": Thermostat.ControlSequenceOfOperation.Cooling_and_Heating, - "local_temp": None, + "ctrl_sequence_of_oper": Thermostat.ControlSequenceOfOperation.Cooling_and_Heating, + "local_temperature": None, "max_cool_setpoint_limit": 3900, "max_heat_setpoint_limit": 2900, "min_cool_setpoint_limit": 2100, @@ -268,7 +269,7 @@ def test_sequence_mappings(): assert Thermostat.SystemMode(HVAC_MODE_2_SYSTEM[hvac_mode]) is not None -async def test_climate_local_temp(hass, device_climate): +async def test_climate_local_temperature(hass, device_climate): """Test local temperature.""" thrm_cluster = device_climate.device.endpoints[1].thermostat @@ -517,7 +518,7 @@ async def test_hvac_modes(hass, device_climate_mock, seq_of_op, modes): """Test HVAC modes from sequence of operations.""" device_climate = await device_climate_mock( - CLIMATE, {"ctrl_seqe_of_oper": seq_of_op} + CLIMATE, {"ctrl_sequence_of_oper": seq_of_op} ) entity_id = await find_entity_id(Platform.CLIMATE, device_climate, hass) state = hass.states.get(entity_id) @@ -1119,7 +1120,7 @@ async def test_occupancy_reset(hass, device_climate_sinope): assert state.attributes[ATTR_PRESET_MODE] == PRESET_AWAY await send_attributes_report( - hass, thrm_cluster, {"occupied_heating_setpoint": 1950} + hass, thrm_cluster, {"occupied_heating_setpoint": zigpy.types.uint16_t(1950)} ) state = hass.states.get(entity_id) assert state.attributes[ATTR_PRESET_MODE] == PRESET_NONE diff --git a/tests/components/zha/test_cover.py b/tests/components/zha/test_cover.py index 73ab38c27ac..60a4fab25be 100644 --- a/tests/components/zha/test_cover.py +++ b/tests/components/zha/test_cover.py @@ -146,7 +146,7 @@ async def test_cover(m1, hass, zha_device_joined_restored, zigpy_cover_device): assert cluster.request.call_count == 1 assert cluster.request.call_args[0][0] is False assert cluster.request.call_args[0][1] == 0x01 - assert cluster.request.call_args[0][2] == () + assert cluster.request.call_args[0][2].command.name == "down_close" assert cluster.request.call_args[1]["expect_reply"] is True # open from UI @@ -159,7 +159,7 @@ async def test_cover(m1, hass, zha_device_joined_restored, zigpy_cover_device): assert cluster.request.call_count == 1 assert cluster.request.call_args[0][0] is False assert cluster.request.call_args[0][1] == 0x00 - assert cluster.request.call_args[0][2] == () + assert cluster.request.call_args[0][2].command.name == "up_open" assert cluster.request.call_args[1]["expect_reply"] is True # set position UI @@ -175,7 +175,7 @@ async def test_cover(m1, hass, zha_device_joined_restored, zigpy_cover_device): assert cluster.request.call_count == 1 assert cluster.request.call_args[0][0] is False assert cluster.request.call_args[0][1] == 0x05 - assert cluster.request.call_args[0][2] == (zigpy.types.uint8_t,) + assert cluster.request.call_args[0][2].command.name == "go_to_lift_percentage" assert cluster.request.call_args[0][3] == 53 assert cluster.request.call_args[1]["expect_reply"] is True @@ -189,7 +189,7 @@ async def test_cover(m1, hass, zha_device_joined_restored, zigpy_cover_device): assert cluster.request.call_count == 1 assert cluster.request.call_args[0][0] is False assert cluster.request.call_args[0][1] == 0x02 - assert cluster.request.call_args[0][2] == () + assert cluster.request.call_args[0][2].command.name == "stop" assert cluster.request.call_args[1]["expect_reply"] is True # test rejoin diff --git a/tests/components/zha/test_discover.py b/tests/components/zha/test_discover.py index 9953b6e9d15..93a50c77c90 100644 --- a/tests/components/zha/test_discover.py +++ b/tests/components/zha/test_discover.py @@ -120,7 +120,7 @@ async def test_devices( assert cluster_identify.request.call_args == mock.call( False, 64, - (zigpy.types.uint8_t, zigpy.types.uint8_t), + cluster_identify.commands_by_name["trigger_effect"].schema, 2, 0, expect_reply=True, diff --git a/tests/components/zha/test_light.py b/tests/components/zha/test_light.py index 9c35215c889..4ac777f5d8e 100644 --- a/tests/components/zha/test_light.py +++ b/tests/components/zha/test_light.py @@ -4,7 +4,6 @@ from unittest.mock import AsyncMock, call, patch, sentinel import pytest import zigpy.profiles.zha as zha -import zigpy.types import zigpy.zcl.clusters.general as general import zigpy.zcl.clusters.lighting as lighting import zigpy.zcl.foundation as zcl_f @@ -336,7 +335,13 @@ async def async_test_on_off_from_hass(hass, cluster, entity_id): assert cluster.request.call_count == 1 assert cluster.request.await_count == 1 assert cluster.request.call_args == call( - False, ON, (), expect_reply=True, manufacturer=None, tries=1, tsn=None + False, + ON, + cluster.commands_by_name["on"].schema, + expect_reply=True, + manufacturer=None, + tries=1, + tsn=None, ) await async_test_off_from_hass(hass, cluster, entity_id) @@ -353,7 +358,13 @@ async def async_test_off_from_hass(hass, cluster, entity_id): assert cluster.request.call_count == 1 assert cluster.request.await_count == 1 assert cluster.request.call_args == call( - False, OFF, (), expect_reply=True, manufacturer=None, tries=1, tsn=None + False, + OFF, + cluster.commands_by_name["off"].schema, + expect_reply=True, + manufacturer=None, + tries=1, + tsn=None, ) @@ -373,7 +384,13 @@ async def async_test_level_on_off_from_hass( assert level_cluster.request.call_count == 0 assert level_cluster.request.await_count == 0 assert on_off_cluster.request.call_args == call( - False, ON, (), expect_reply=True, manufacturer=None, tries=1, tsn=None + False, + ON, + on_off_cluster.commands_by_name["on"].schema, + expect_reply=True, + manufacturer=None, + tries=1, + tsn=None, ) on_off_cluster.request.reset_mock() level_cluster.request.reset_mock() @@ -389,12 +406,18 @@ async def async_test_level_on_off_from_hass( assert level_cluster.request.call_count == 1 assert level_cluster.request.await_count == 1 assert on_off_cluster.request.call_args == call( - False, ON, (), expect_reply=True, manufacturer=None, tries=1, tsn=None + False, + ON, + on_off_cluster.commands_by_name["on"].schema, + expect_reply=True, + manufacturer=None, + tries=1, + tsn=None, ) assert level_cluster.request.call_args == call( False, 4, - (zigpy.types.uint8_t, zigpy.types.uint16_t), + level_cluster.commands_by_name["move_to_level_with_on_off"].schema, 254, 100.0, expect_reply=True, @@ -419,7 +442,7 @@ async def async_test_level_on_off_from_hass( assert level_cluster.request.call_args == call( False, 4, - (zigpy.types.uint8_t, zigpy.types.uint16_t), + level_cluster.commands_by_name["move_to_level_with_on_off"].schema, 10, 1, expect_reply=True, @@ -462,7 +485,7 @@ async def async_test_flash_from_hass(hass, cluster, entity_id, flash): assert cluster.request.call_args == call( False, 64, - (zigpy.types.uint8_t, zigpy.types.uint8_t), + cluster.commands_by_name["trigger_effect"].schema, FLASH_EFFECTS[flash], 0, expect_reply=True, diff --git a/tests/components/zha/test_sensor.py b/tests/components/zha/test_sensor.py index c4e66e98098..03a88c3560e 100644 --- a/tests/components/zha/test_sensor.py +++ b/tests/components/zha/test_sensor.py @@ -307,7 +307,7 @@ async def async_test_device_temperature(hass, cluster, entity_id): "metering_device_type": 0x00, "multiplier": 1, "status": 0x00, - "summa_formatting": 0b1_0111_010, + "summation_formatting": 0b1_0111_010, "unit_of_measure": 0x01, }, {"instaneneous_demand"}, @@ -814,7 +814,7 @@ async def test_se_summation_uom( "metering_device_type": 0x00, "multiplier": 1, "status": 0x00, - "summa_formatting": 0b1_0111_010, + "summation_formatting": 0b1_0111_010, "unit_of_measure": raw_uom, } await zha_device_joined(zigpy_device) diff --git a/tests/components/zha/test_switch.py b/tests/components/zha/test_switch.py index c5cdf1a96f1..a624e5f2c73 100644 --- a/tests/components/zha/test_switch.py +++ b/tests/components/zha/test_switch.py @@ -141,7 +141,13 @@ async def test_switch(hass, zha_device_joined_restored, zigpy_device): ) assert len(cluster.request.mock_calls) == 1 assert cluster.request.call_args == call( - False, ON, (), expect_reply=True, manufacturer=None, tries=1, tsn=None + False, + ON, + cluster.commands_by_name["on"].schema, + expect_reply=True, + manufacturer=None, + tries=1, + tsn=None, ) # turn off from HA @@ -155,7 +161,13 @@ async def test_switch(hass, zha_device_joined_restored, zigpy_device): ) assert len(cluster.request.mock_calls) == 1 assert cluster.request.call_args == call( - False, OFF, (), expect_reply=True, manufacturer=None, tries=1, tsn=None + False, + OFF, + cluster.commands_by_name["off"].schema, + expect_reply=True, + manufacturer=None, + tries=1, + tsn=None, ) # test joining a new switch to the network and HA @@ -224,7 +236,13 @@ async def test_zha_group_switch_entity( ) assert len(group_cluster_on_off.request.mock_calls) == 1 assert group_cluster_on_off.request.call_args == call( - False, ON, (), expect_reply=True, manufacturer=None, tries=1, tsn=None + False, + ON, + group_cluster_on_off.commands_by_name["on"].schema, + expect_reply=True, + manufacturer=None, + tries=1, + tsn=None, ) assert hass.states.get(entity_id).state == STATE_ON @@ -239,7 +257,13 @@ async def test_zha_group_switch_entity( ) assert len(group_cluster_on_off.request.mock_calls) == 1 assert group_cluster_on_off.request.call_args == call( - False, OFF, (), expect_reply=True, manufacturer=None, tries=1, tsn=None + False, + OFF, + group_cluster_on_off.commands_by_name["off"].schema, + expect_reply=True, + manufacturer=None, + tries=1, + tsn=None, ) assert hass.states.get(entity_id).state == STATE_OFF From 475b9e212dc74375ed8208d64f4f395ee91fd5b4 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 30 Mar 2022 13:50:13 -0700 Subject: [PATCH 004/238] Mark all input integrations as helpers (#68922) --- homeassistant/components/input_boolean/manifest.json | 1 + homeassistant/components/input_button/manifest.json | 1 + homeassistant/components/input_datetime/manifest.json | 1 + homeassistant/components/input_number/manifest.json | 1 + homeassistant/components/input_select/manifest.json | 1 + homeassistant/components/input_text/manifest.json | 1 + 6 files changed, 6 insertions(+) diff --git a/homeassistant/components/input_boolean/manifest.json b/homeassistant/components/input_boolean/manifest.json index 7a27d475e6e..589cf536253 100644 --- a/homeassistant/components/input_boolean/manifest.json +++ b/homeassistant/components/input_boolean/manifest.json @@ -1,5 +1,6 @@ { "domain": "input_boolean", + "integration_type": "helper", "name": "Input Boolean", "documentation": "https://www.home-assistant.io/integrations/input_boolean", "codeowners": ["@home-assistant/core"], diff --git a/homeassistant/components/input_button/manifest.json b/homeassistant/components/input_button/manifest.json index 76133500d36..7e31df775c3 100644 --- a/homeassistant/components/input_button/manifest.json +++ b/homeassistant/components/input_button/manifest.json @@ -1,5 +1,6 @@ { "domain": "input_button", + "integration_type": "helper", "name": "Input Button", "documentation": "https://www.home-assistant.io/integrations/input_button", "codeowners": ["@home-assistant/core"], diff --git a/homeassistant/components/input_datetime/manifest.json b/homeassistant/components/input_datetime/manifest.json index a394b77b72e..4d1e680c12a 100644 --- a/homeassistant/components/input_datetime/manifest.json +++ b/homeassistant/components/input_datetime/manifest.json @@ -1,5 +1,6 @@ { "domain": "input_datetime", + "integration_type": "helper", "name": "Input Datetime", "documentation": "https://www.home-assistant.io/integrations/input_datetime", "codeowners": ["@home-assistant/core"], diff --git a/homeassistant/components/input_number/manifest.json b/homeassistant/components/input_number/manifest.json index 93081a7ed49..46cae513fd2 100644 --- a/homeassistant/components/input_number/manifest.json +++ b/homeassistant/components/input_number/manifest.json @@ -1,5 +1,6 @@ { "domain": "input_number", + "integration_type": "helper", "name": "Input Number", "documentation": "https://www.home-assistant.io/integrations/input_number", "codeowners": ["@home-assistant/core"], diff --git a/homeassistant/components/input_select/manifest.json b/homeassistant/components/input_select/manifest.json index 614ee18390d..1c3dc880d20 100644 --- a/homeassistant/components/input_select/manifest.json +++ b/homeassistant/components/input_select/manifest.json @@ -1,5 +1,6 @@ { "domain": "input_select", + "integration_type": "helper", "name": "Input Select", "documentation": "https://www.home-assistant.io/integrations/input_select", "codeowners": ["@home-assistant/core"], diff --git a/homeassistant/components/input_text/manifest.json b/homeassistant/components/input_text/manifest.json index 3ca9a0b961a..9cc48f745cf 100644 --- a/homeassistant/components/input_text/manifest.json +++ b/homeassistant/components/input_text/manifest.json @@ -1,5 +1,6 @@ { "domain": "input_text", + "integration_type": "helper", "name": "Input Text", "documentation": "https://www.home-assistant.io/integrations/input_text", "codeowners": ["@home-assistant/core"], From d38382fbe3b7f548af82deb7269b9c1e9fb6cbab Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Wed, 30 Mar 2022 23:36:47 +0200 Subject: [PATCH 005/238] Rename helper_config_entry_flow to schema_config_entry_flow (#68924) --- .../components/derivative/config_flow.py | 18 ++--- homeassistant/components/group/config_flow.py | 56 +++++++-------- .../components/integration/config_flow.py | 18 ++--- .../components/min_max/config_flow.py | 18 ++--- .../components/switch_as_x/config_flow.py | 14 ++-- .../components/threshold/config_flow.py | 22 +++--- homeassistant/components/tod/config_flow.py | 18 ++--- .../components/utility_meter/config_flow.py | 22 +++--- ...ry_flow.py => schema_config_entry_flow.py} | 68 +++++++++---------- .../integration/config_flow.py | 18 ++--- .../helpers/test_helper_config_entry_flow.py | 22 +++--- 11 files changed, 147 insertions(+), 147 deletions(-) rename homeassistant/helpers/{helper_config_entry_flow.py => schema_config_entry_flow.py} (86%) diff --git a/homeassistant/components/derivative/config_flow.py b/homeassistant/components/derivative/config_flow.py index 348158ce4e0..fe6b99c3eca 100644 --- a/homeassistant/components/derivative/config_flow.py +++ b/homeassistant/components/derivative/config_flow.py @@ -16,10 +16,10 @@ from homeassistant.const import ( TIME_SECONDS, ) from homeassistant.helpers import selector -from homeassistant.helpers.helper_config_entry_flow import ( - HelperConfigFlowHandler, - HelperFlowFormStep, - HelperFlowMenuStep, +from homeassistant.helpers.schema_config_entry_flow import ( + SchemaConfigFlowHandler, + SchemaFlowFormStep, + SchemaFlowMenuStep, ) from .const import ( @@ -78,16 +78,16 @@ CONFIG_SCHEMA = vol.Schema( } ).extend(OPTIONS_SCHEMA.schema) -CONFIG_FLOW: dict[str, HelperFlowFormStep | HelperFlowMenuStep] = { - "user": HelperFlowFormStep(CONFIG_SCHEMA) +CONFIG_FLOW: dict[str, SchemaFlowFormStep | SchemaFlowMenuStep] = { + "user": SchemaFlowFormStep(CONFIG_SCHEMA) } -OPTIONS_FLOW: dict[str, HelperFlowFormStep | HelperFlowMenuStep] = { - "init": HelperFlowFormStep(OPTIONS_SCHEMA) +OPTIONS_FLOW: dict[str, SchemaFlowFormStep | SchemaFlowMenuStep] = { + "init": SchemaFlowFormStep(OPTIONS_SCHEMA) } -class ConfigFlowHandler(HelperConfigFlowHandler, domain=DOMAIN): +class ConfigFlowHandler(SchemaConfigFlowHandler, domain=DOMAIN): """Handle a config or options flow for Derivative.""" config_flow = CONFIG_FLOW diff --git a/homeassistant/components/group/config_flow.py b/homeassistant/components/group/config_flow.py index 0ba5885a3fd..8ddee492834 100644 --- a/homeassistant/components/group/config_flow.py +++ b/homeassistant/components/group/config_flow.py @@ -10,11 +10,11 @@ import voluptuous as vol from homeassistant.const import CONF_ENTITIES from homeassistant.core import HomeAssistant, callback from homeassistant.helpers import entity_registry as er, selector -from homeassistant.helpers.helper_config_entry_flow import ( - HelperConfigFlowHandler, - HelperFlowFormStep, - HelperFlowMenuStep, - HelperOptionsFlowHandler, +from homeassistant.helpers.schema_config_entry_flow import ( + SchemaConfigFlowHandler, + SchemaFlowFormStep, + SchemaFlowMenuStep, + SchemaOptionsFlowHandler, entity_selector_without_own_entities, ) @@ -25,11 +25,11 @@ from .const import CONF_HIDE_MEMBERS def basic_group_options_schema( domain: str, - handler: HelperConfigFlowHandler | HelperOptionsFlowHandler, + handler: SchemaConfigFlowHandler | SchemaOptionsFlowHandler, options: dict[str, Any], ) -> vol.Schema: """Generate options schema.""" - handler = cast(HelperOptionsFlowHandler, handler) + handler = cast(SchemaOptionsFlowHandler, handler) return vol.Schema( { vol.Required(CONF_ENTITIES): entity_selector_without_own_entities( @@ -58,7 +58,7 @@ def basic_group_config_schema(domain: str) -> vol.Schema: def binary_sensor_options_schema( - handler: HelperConfigFlowHandler | HelperOptionsFlowHandler, + handler: SchemaConfigFlowHandler | SchemaOptionsFlowHandler, options: dict[str, Any], ) -> vol.Schema: """Generate options schema.""" @@ -78,7 +78,7 @@ BINARY_SENSOR_CONFIG_SCHEMA = basic_group_config_schema("binary_sensor").extend( def light_switch_options_schema( domain: str, - handler: HelperConfigFlowHandler | HelperOptionsFlowHandler, + handler: SchemaConfigFlowHandler | SchemaOptionsFlowHandler, options: dict[str, Any], ) -> vol.Schema: """Generate options schema.""" @@ -119,45 +119,45 @@ def set_group_type(group_type: str) -> Callable[[dict[str, Any]], dict[str, Any] return _set_group_type -CONFIG_FLOW: dict[str, HelperFlowFormStep | HelperFlowMenuStep] = { - "user": HelperFlowMenuStep(GROUP_TYPES), - "binary_sensor": HelperFlowFormStep( +CONFIG_FLOW: dict[str, SchemaFlowFormStep | SchemaFlowMenuStep] = { + "user": SchemaFlowMenuStep(GROUP_TYPES), + "binary_sensor": SchemaFlowFormStep( BINARY_SENSOR_CONFIG_SCHEMA, set_group_type("binary_sensor") ), - "cover": HelperFlowFormStep( + "cover": SchemaFlowFormStep( basic_group_config_schema("cover"), set_group_type("cover") ), - "fan": HelperFlowFormStep(basic_group_config_schema("fan"), set_group_type("fan")), - "light": HelperFlowFormStep( + "fan": SchemaFlowFormStep(basic_group_config_schema("fan"), set_group_type("fan")), + "light": SchemaFlowFormStep( basic_group_config_schema("light"), set_group_type("light") ), - "lock": HelperFlowFormStep( + "lock": SchemaFlowFormStep( basic_group_config_schema("lock"), set_group_type("lock") ), - "media_player": HelperFlowFormStep( + "media_player": SchemaFlowFormStep( basic_group_config_schema("media_player"), set_group_type("media_player") ), - "switch": HelperFlowFormStep( + "switch": SchemaFlowFormStep( basic_group_config_schema("switch"), set_group_type("switch") ), } -OPTIONS_FLOW: dict[str, HelperFlowFormStep | HelperFlowMenuStep] = { - "init": HelperFlowFormStep(None, next_step=choose_options_step), - "binary_sensor": HelperFlowFormStep(binary_sensor_options_schema), - "cover": HelperFlowFormStep(partial(basic_group_options_schema, "cover")), - "fan": HelperFlowFormStep(partial(basic_group_options_schema, "fan")), - "light": HelperFlowFormStep(partial(light_switch_options_schema, "light")), - "lock": HelperFlowFormStep(partial(basic_group_options_schema, "lock")), - "media_player": HelperFlowFormStep( +OPTIONS_FLOW: dict[str, SchemaFlowFormStep | SchemaFlowMenuStep] = { + "init": SchemaFlowFormStep(None, next_step=choose_options_step), + "binary_sensor": SchemaFlowFormStep(binary_sensor_options_schema), + "cover": SchemaFlowFormStep(partial(basic_group_options_schema, "cover")), + "fan": SchemaFlowFormStep(partial(basic_group_options_schema, "fan")), + "light": SchemaFlowFormStep(partial(light_switch_options_schema, "light")), + "lock": SchemaFlowFormStep(partial(basic_group_options_schema, "lock")), + "media_player": SchemaFlowFormStep( partial(basic_group_options_schema, "media_player") ), - "switch": HelperFlowFormStep(partial(light_switch_options_schema, "switch")), + "switch": SchemaFlowFormStep(partial(light_switch_options_schema, "switch")), } -class GroupConfigFlowHandler(HelperConfigFlowHandler, domain=DOMAIN): +class GroupConfigFlowHandler(SchemaConfigFlowHandler, domain=DOMAIN): """Handle a config or options flow for groups.""" config_flow = CONFIG_FLOW diff --git a/homeassistant/components/integration/config_flow.py b/homeassistant/components/integration/config_flow.py index c9e51fd4f9a..c220327e983 100644 --- a/homeassistant/components/integration/config_flow.py +++ b/homeassistant/components/integration/config_flow.py @@ -16,10 +16,10 @@ from homeassistant.const import ( TIME_SECONDS, ) from homeassistant.helpers import selector -from homeassistant.helpers.helper_config_entry_flow import ( - HelperConfigFlowHandler, - HelperFlowFormStep, - HelperFlowMenuStep, +from homeassistant.helpers.schema_config_entry_flow import ( + SchemaConfigFlowHandler, + SchemaFlowFormStep, + SchemaFlowMenuStep, ) from .const import ( @@ -88,16 +88,16 @@ CONFIG_SCHEMA = vol.Schema( } ) -CONFIG_FLOW: dict[str, HelperFlowFormStep | HelperFlowMenuStep] = { - "user": HelperFlowFormStep(CONFIG_SCHEMA) +CONFIG_FLOW: dict[str, SchemaFlowFormStep | SchemaFlowMenuStep] = { + "user": SchemaFlowFormStep(CONFIG_SCHEMA) } -OPTIONS_FLOW: dict[str, HelperFlowFormStep | HelperFlowMenuStep] = { - "init": HelperFlowFormStep(OPTIONS_SCHEMA) +OPTIONS_FLOW: dict[str, SchemaFlowFormStep | SchemaFlowMenuStep] = { + "init": SchemaFlowFormStep(OPTIONS_SCHEMA) } -class ConfigFlowHandler(HelperConfigFlowHandler, domain=DOMAIN): +class ConfigFlowHandler(SchemaConfigFlowHandler, domain=DOMAIN): """Handle a config or options flow for Integration.""" config_flow = CONFIG_FLOW diff --git a/homeassistant/components/min_max/config_flow.py b/homeassistant/components/min_max/config_flow.py index 353a90cbf6c..64d982dec92 100644 --- a/homeassistant/components/min_max/config_flow.py +++ b/homeassistant/components/min_max/config_flow.py @@ -8,10 +8,10 @@ import voluptuous as vol from homeassistant.const import CONF_TYPE from homeassistant.helpers import selector -from homeassistant.helpers.helper_config_entry_flow import ( - HelperConfigFlowHandler, - HelperFlowFormStep, - HelperFlowMenuStep, +from homeassistant.helpers.schema_config_entry_flow import ( + SchemaConfigFlowHandler, + SchemaFlowFormStep, + SchemaFlowMenuStep, ) from .const import CONF_ENTITY_IDS, CONF_ROUND_DIGITS, DOMAIN @@ -38,16 +38,16 @@ CONFIG_SCHEMA = vol.Schema( } ).extend(OPTIONS_SCHEMA.schema) -CONFIG_FLOW: dict[str, HelperFlowFormStep | HelperFlowMenuStep] = { - "user": HelperFlowFormStep(CONFIG_SCHEMA) +CONFIG_FLOW: dict[str, SchemaFlowFormStep | SchemaFlowMenuStep] = { + "user": SchemaFlowFormStep(CONFIG_SCHEMA) } -OPTIONS_FLOW: dict[str, HelperFlowFormStep | HelperFlowMenuStep] = { - "init": HelperFlowFormStep(OPTIONS_SCHEMA) +OPTIONS_FLOW: dict[str, SchemaFlowFormStep | SchemaFlowMenuStep] = { + "init": SchemaFlowFormStep(OPTIONS_SCHEMA) } -class ConfigFlowHandler(HelperConfigFlowHandler, domain=DOMAIN): +class ConfigFlowHandler(SchemaConfigFlowHandler, domain=DOMAIN): """Handle a config or options flow for Min/Max.""" config_flow = CONFIG_FLOW diff --git a/homeassistant/components/switch_as_x/config_flow.py b/homeassistant/components/switch_as_x/config_flow.py index 4cf7a001679..a70e0a371e8 100644 --- a/homeassistant/components/switch_as_x/config_flow.py +++ b/homeassistant/components/switch_as_x/config_flow.py @@ -8,17 +8,17 @@ import voluptuous as vol from homeassistant.const import CONF_ENTITY_ID, Platform from homeassistant.helpers import entity_registry as er, selector -from homeassistant.helpers.helper_config_entry_flow import ( - HelperConfigFlowHandler, - HelperFlowFormStep, - HelperFlowMenuStep, +from homeassistant.helpers.schema_config_entry_flow import ( + SchemaConfigFlowHandler, + SchemaFlowFormStep, + SchemaFlowMenuStep, wrapped_entity_config_entry_title, ) from .const import CONF_TARGET_DOMAIN, DOMAIN -CONFIG_FLOW: dict[str, HelperFlowFormStep | HelperFlowMenuStep] = { - "user": HelperFlowFormStep( +CONFIG_FLOW: dict[str, SchemaFlowFormStep | SchemaFlowMenuStep] = { + "user": SchemaFlowFormStep( vol.Schema( { vol.Required(CONF_ENTITY_ID): selector.selector( @@ -43,7 +43,7 @@ CONFIG_FLOW: dict[str, HelperFlowFormStep | HelperFlowMenuStep] = { } -class SwitchAsXConfigFlowHandler(HelperConfigFlowHandler, domain=DOMAIN): +class SwitchAsXConfigFlowHandler(SchemaConfigFlowHandler, domain=DOMAIN): """Handle a config flow for Switch as X.""" config_flow = CONFIG_FLOW diff --git a/homeassistant/components/threshold/config_flow.py b/homeassistant/components/threshold/config_flow.py index 35a32604334..c77d4b57115 100644 --- a/homeassistant/components/threshold/config_flow.py +++ b/homeassistant/components/threshold/config_flow.py @@ -8,11 +8,11 @@ import voluptuous as vol from homeassistant.const import CONF_ENTITY_ID, CONF_NAME from homeassistant.helpers import selector -from homeassistant.helpers.helper_config_entry_flow import ( - HelperConfigFlowHandler, - HelperFlowError, - HelperFlowFormStep, - HelperFlowMenuStep, +from homeassistant.helpers.schema_config_entry_flow import ( + SchemaConfigFlowHandler, + SchemaFlowError, + SchemaFlowFormStep, + SchemaFlowMenuStep, ) from .const import CONF_HYSTERESIS, CONF_LOWER, CONF_UPPER, DEFAULT_HYSTERESIS, DOMAIN @@ -21,7 +21,7 @@ from .const import CONF_HYSTERESIS, CONF_LOWER, CONF_UPPER, DEFAULT_HYSTERESIS, def _validate_mode(data: Any) -> Any: """Validate the threshold mode, and set limits to None if not set.""" if CONF_LOWER not in data and CONF_UPPER not in data: - raise HelperFlowError("need_lower_upper") + raise SchemaFlowError("need_lower_upper") return {CONF_LOWER: None, CONF_UPPER: None, **data} @@ -44,16 +44,16 @@ CONFIG_SCHEMA = vol.Schema( } ).extend(OPTIONS_SCHEMA.schema) -CONFIG_FLOW: dict[str, HelperFlowFormStep | HelperFlowMenuStep] = { - "user": HelperFlowFormStep(CONFIG_SCHEMA, validate_user_input=_validate_mode) +CONFIG_FLOW: dict[str, SchemaFlowFormStep | SchemaFlowMenuStep] = { + "user": SchemaFlowFormStep(CONFIG_SCHEMA, validate_user_input=_validate_mode) } -OPTIONS_FLOW: dict[str, HelperFlowFormStep | HelperFlowMenuStep] = { - "init": HelperFlowFormStep(OPTIONS_SCHEMA, validate_user_input=_validate_mode) +OPTIONS_FLOW: dict[str, SchemaFlowFormStep | SchemaFlowMenuStep] = { + "init": SchemaFlowFormStep(OPTIONS_SCHEMA, validate_user_input=_validate_mode) } -class ConfigFlowHandler(HelperConfigFlowHandler, domain=DOMAIN): +class ConfigFlowHandler(SchemaConfigFlowHandler, domain=DOMAIN): """Handle a config or options flow for Threshold.""" config_flow = CONFIG_FLOW diff --git a/homeassistant/components/tod/config_flow.py b/homeassistant/components/tod/config_flow.py index e4927096b69..bd1712d1db5 100644 --- a/homeassistant/components/tod/config_flow.py +++ b/homeassistant/components/tod/config_flow.py @@ -8,10 +8,10 @@ import voluptuous as vol from homeassistant.const import CONF_NAME from homeassistant.helpers import selector -from homeassistant.helpers.helper_config_entry_flow import ( - HelperConfigFlowHandler, - HelperFlowFormStep, - HelperFlowMenuStep, +from homeassistant.helpers.schema_config_entry_flow import ( + SchemaConfigFlowHandler, + SchemaFlowFormStep, + SchemaFlowMenuStep, ) from .const import CONF_AFTER_TIME, CONF_BEFORE_TIME, DOMAIN @@ -29,16 +29,16 @@ CONFIG_SCHEMA = vol.Schema( } ).extend(OPTIONS_SCHEMA.schema) -CONFIG_FLOW: dict[str, HelperFlowFormStep | HelperFlowMenuStep] = { - "user": HelperFlowFormStep(CONFIG_SCHEMA) +CONFIG_FLOW: dict[str, SchemaFlowFormStep | SchemaFlowMenuStep] = { + "user": SchemaFlowFormStep(CONFIG_SCHEMA) } -OPTIONS_FLOW: dict[str, HelperFlowFormStep | HelperFlowMenuStep] = { - "init": HelperFlowFormStep(OPTIONS_SCHEMA) +OPTIONS_FLOW: dict[str, SchemaFlowFormStep | SchemaFlowMenuStep] = { + "init": SchemaFlowFormStep(OPTIONS_SCHEMA) } -class ConfigFlowHandler(HelperConfigFlowHandler, domain=DOMAIN): +class ConfigFlowHandler(SchemaConfigFlowHandler, domain=DOMAIN): """Handle a config or options flow for Times of the Day.""" config_flow = CONFIG_FLOW diff --git a/homeassistant/components/utility_meter/config_flow.py b/homeassistant/components/utility_meter/config_flow.py index caf7d3c8d00..555ae7eb46d 100644 --- a/homeassistant/components/utility_meter/config_flow.py +++ b/homeassistant/components/utility_meter/config_flow.py @@ -8,11 +8,11 @@ import voluptuous as vol from homeassistant.const import CONF_NAME, CONF_UNIT_OF_MEASUREMENT from homeassistant.helpers import selector -from homeassistant.helpers.helper_config_entry_flow import ( - HelperConfigFlowHandler, - HelperFlowError, - HelperFlowFormStep, - HelperFlowMenuStep, +from homeassistant.helpers.schema_config_entry_flow import ( + SchemaConfigFlowHandler, + SchemaFlowError, + SchemaFlowFormStep, + SchemaFlowMenuStep, ) from .const import ( @@ -56,7 +56,7 @@ def _validate_config(data: Any) -> Any: try: vol.Unique()(tariffs) except vol.Invalid as exc: - raise HelperFlowError("tariffs_not_unique") from exc + raise SchemaFlowError("tariffs_not_unique") from exc return data @@ -98,16 +98,16 @@ CONFIG_SCHEMA = vol.Schema( } ) -CONFIG_FLOW: dict[str, HelperFlowFormStep | HelperFlowMenuStep] = { - "user": HelperFlowFormStep(CONFIG_SCHEMA, validate_user_input=_validate_config) +CONFIG_FLOW: dict[str, SchemaFlowFormStep | SchemaFlowMenuStep] = { + "user": SchemaFlowFormStep(CONFIG_SCHEMA, validate_user_input=_validate_config) } -OPTIONS_FLOW: dict[str, HelperFlowFormStep | HelperFlowMenuStep] = { - "init": HelperFlowFormStep(OPTIONS_SCHEMA) +OPTIONS_FLOW: dict[str, SchemaFlowFormStep | SchemaFlowMenuStep] = { + "init": SchemaFlowFormStep(OPTIONS_SCHEMA) } -class ConfigFlowHandler(HelperConfigFlowHandler, domain=DOMAIN): +class ConfigFlowHandler(SchemaConfigFlowHandler, domain=DOMAIN): """Handle a config or options flow for Utility Meter.""" config_flow = CONFIG_FLOW diff --git a/homeassistant/helpers/helper_config_entry_flow.py b/homeassistant/helpers/schema_config_entry_flow.py similarity index 86% rename from homeassistant/helpers/helper_config_entry_flow.py rename to homeassistant/helpers/schema_config_entry_flow.py index 62c9da48547..341ae605025 100644 --- a/homeassistant/helpers/helper_config_entry_flow.py +++ b/homeassistant/helpers/schema_config_entry_flow.py @@ -1,4 +1,4 @@ -"""Helpers for data entry flows for helper config entries.""" +"""Helpers for creating schema based data entry flows.""" from __future__ import annotations from abc import abstractmethod @@ -17,25 +17,25 @@ from homeassistant.data_entry_flow import FlowResult, UnknownHandler from . import entity_registry as er, selector -class HelperFlowError(Exception): +class SchemaFlowError(Exception): """Validation failed.""" @dataclass -class HelperFlowFormStep: - """Define a helper config or options flow step.""" +class SchemaFlowFormStep: + """Define a config or options flow step.""" # Optional schema for requesting and validating user input. If schema validation # fails, the step will be retried. If the schema is None, no user input is requested. schema: vol.Schema | Callable[ - [HelperConfigFlowHandler | HelperOptionsFlowHandler, dict[str, Any]], + [SchemaConfigFlowHandler | SchemaOptionsFlowHandler, dict[str, Any]], vol.Schema | None, ] | None # Optional function to validate user input. # The validate_user_input function is called if the schema validates successfully. # The validate_user_input function is passed the user input from the current step. - # The validate_user_input should raise HelperFlowError is user input is invalid. + # The validate_user_input should raise SchemaFlowError is user input is invalid. validate_user_input: Callable[[dict[str, Any]], dict[str, Any]] = lambda x: x # Optional function to identify next step. @@ -48,11 +48,11 @@ class HelperFlowFormStep: # Optional function to allow amending a form schema. # The update_form_schema function is called before async_show_form is called. The # update_form_schema function is passed the handler, which is either an instance of - # HelperConfigFlowHandler or HelperOptionsFlowHandler, the schema, and the union of + # SchemaConfigFlowHandler or SchemaOptionsFlowHandler, the schema, and the union of # config entry options and user input from previous steps. update_form_schema: Callable[ [ - HelperConfigFlowHandler | HelperOptionsFlowHandler, + SchemaConfigFlowHandler | SchemaOptionsFlowHandler, vol.Schema, dict[str, Any], ], @@ -61,20 +61,20 @@ class HelperFlowFormStep: @dataclass -class HelperFlowMenuStep: - """Define a helper config or options flow menu step.""" +class SchemaFlowMenuStep: + """Define a config or options flow menu step.""" # Menu options options: list[str] | dict[str, str] -class HelperCommonFlowHandler: - """Handle a config or options flow for helper.""" +class SchemaCommonFlowHandler: + """Handle a schema based config or options flow.""" def __init__( self, - handler: HelperConfigFlowHandler | HelperOptionsFlowHandler, - flow: dict[str, HelperFlowFormStep | HelperFlowMenuStep], + handler: SchemaConfigFlowHandler | SchemaOptionsFlowHandler, + flow: dict[str, SchemaFlowFormStep | SchemaFlowMenuStep], config_entry: config_entries.ConfigEntry | None, ) -> None: """Initialize a common handler.""" @@ -86,12 +86,12 @@ class HelperCommonFlowHandler: self, step_id: str, user_input: dict[str, Any] | None = None ) -> FlowResult: """Handle a step.""" - if isinstance(self._flow[step_id], HelperFlowFormStep): + if isinstance(self._flow[step_id], SchemaFlowFormStep): return await self._async_form_step(step_id, user_input) return await self._async_menu_step(step_id, user_input) def _get_schema( - self, form_step: HelperFlowFormStep, options: dict[str, Any] + self, form_step: SchemaFlowFormStep, options: dict[str, Any] ) -> vol.Schema | None: if form_step.schema is None: return None @@ -103,7 +103,7 @@ class HelperCommonFlowHandler: self, step_id: str, user_input: dict[str, Any] | None = None ) -> FlowResult: """Handle a form step.""" - form_step: HelperFlowFormStep = cast(HelperFlowFormStep, self._flow[step_id]) + form_step: SchemaFlowFormStep = cast(SchemaFlowFormStep, self._flow[step_id]) if ( user_input is not None @@ -126,7 +126,7 @@ class HelperCommonFlowHandler: # Do extra validation of user input try: user_input = form_step.validate_user_input(user_input) - except HelperFlowError as exc: + except SchemaFlowError as exc: return self._show_next_step(step_id, exc, user_input) if user_input is not None: @@ -148,12 +148,12 @@ class HelperCommonFlowHandler: def _show_next_step( self, next_step_id: str, - error: HelperFlowError | None = None, + error: SchemaFlowError | None = None, user_input: dict[str, Any] | None = None, ) -> FlowResult: """Show form for next step.""" - form_step: HelperFlowFormStep = cast( - HelperFlowFormStep, self._flow[next_step_id] + form_step: SchemaFlowFormStep = cast( + SchemaFlowFormStep, self._flow[next_step_id] ) options = dict(self._options) @@ -195,18 +195,18 @@ class HelperCommonFlowHandler: self, step_id: str, user_input: dict[str, Any] | None = None ) -> FlowResult: """Handle a menu step.""" - form_step: HelperFlowMenuStep = cast(HelperFlowMenuStep, self._flow[step_id]) + form_step: SchemaFlowMenuStep = cast(SchemaFlowMenuStep, self._flow[step_id]) return self._handler.async_show_menu( step_id=step_id, menu_options=form_step.options, ) -class HelperConfigFlowHandler(config_entries.ConfigFlow): - """Handle a config flow for helper integrations.""" +class SchemaConfigFlowHandler(config_entries.ConfigFlow): + """Handle a schema based config flow.""" - config_flow: dict[str, HelperFlowFormStep | HelperFlowMenuStep] - options_flow: dict[str, HelperFlowFormStep | HelperFlowMenuStep] | None = None + config_flow: dict[str, SchemaFlowFormStep | SchemaFlowMenuStep] + options_flow: dict[str, SchemaFlowFormStep | SchemaFlowMenuStep] | None = None VERSION = 1 @@ -222,7 +222,7 @@ class HelperConfigFlowHandler(config_entries.ConfigFlow): if cls.options_flow is None: raise UnknownHandler - return HelperOptionsFlowHandler( + return SchemaOptionsFlowHandler( config_entry, cls.options_flow, cls.async_options_flow_finished ) @@ -235,7 +235,7 @@ class HelperConfigFlowHandler(config_entries.ConfigFlow): def __init__(self) -> None: """Initialize config flow.""" - self._common_handler = HelperCommonFlowHandler(self, self.config_flow, None) + self._common_handler = SchemaCommonFlowHandler(self, self.config_flow, None) @classmethod @callback @@ -250,7 +250,7 @@ class HelperConfigFlowHandler(config_entries.ConfigFlow): """Generate a step handler.""" async def _async_step( - self: HelperConfigFlowHandler, user_input: dict[str, Any] | None = None + self: SchemaConfigFlowHandler, user_input: dict[str, Any] | None = None ) -> FlowResult: """Handle a config flow step.""" # pylint: disable-next=protected-access @@ -300,8 +300,8 @@ class HelperConfigFlowHandler(config_entries.ConfigFlow): ) -class HelperOptionsFlowHandler(config_entries.OptionsFlow): - """Handle an options flow for helper integrations.""" +class SchemaOptionsFlowHandler(config_entries.OptionsFlow): + """Handle a schema based options flow.""" def __init__( self, @@ -310,7 +310,7 @@ class HelperOptionsFlowHandler(config_entries.OptionsFlow): async_options_flow_finished: Callable[[HomeAssistant, Mapping[str, Any]], None], ) -> None: """Initialize options flow.""" - self._common_handler = HelperCommonFlowHandler(self, options_flow, config_entry) + self._common_handler = SchemaCommonFlowHandler(self, options_flow, config_entry) self.config_entry = config_entry self._async_options_flow_finished = async_options_flow_finished @@ -326,7 +326,7 @@ class HelperOptionsFlowHandler(config_entries.OptionsFlow): """Generate a step handler.""" async def _async_step( - self: HelperConfigFlowHandler, user_input: dict[str, Any] | None = None + self: SchemaConfigFlowHandler, user_input: dict[str, Any] | None = None ) -> FlowResult: """Handle an options flow step.""" # pylint: disable-next=protected-access @@ -370,7 +370,7 @@ def wrapped_entity_config_entry_title( @callback def entity_selector_without_own_entities( - handler: HelperOptionsFlowHandler, + handler: SchemaOptionsFlowHandler, entity_selector_config: dict[str, Any], ) -> vol.Schema: """Return an entity selector which excludes own entities.""" diff --git a/script/scaffold/templates/config_flow_helper/integration/config_flow.py b/script/scaffold/templates/config_flow_helper/integration/config_flow.py index cc81d0a22b1..b8a048e9dba 100644 --- a/script/scaffold/templates/config_flow_helper/integration/config_flow.py +++ b/script/scaffold/templates/config_flow_helper/integration/config_flow.py @@ -8,10 +8,10 @@ import voluptuous as vol from homeassistant.const import CONF_ENTITY_ID from homeassistant.helpers import selector -from homeassistant.helpers.helper_config_entry_flow import ( - HelperConfigFlowHandler, - HelperFlowFormStep, - HelperFlowMenuStep, +from homeassistant.helpers.schema_config_entry_flow import ( + SchemaConfigFlowHandler, + SchemaFlowFormStep, + SchemaFlowMenuStep, ) from .const import DOMAIN @@ -30,16 +30,16 @@ CONFIG_SCHEMA = vol.Schema( } ).extend(OPTIONS_SCHEMA.schema) -CONFIG_FLOW: dict[str, HelperFlowFormStep | HelperFlowMenuStep] = { - "user": HelperFlowFormStep(CONFIG_SCHEMA) +CONFIG_FLOW: dict[str, SchemaFlowFormStep | SchemaFlowMenuStep] = { + "user": SchemaFlowFormStep(CONFIG_SCHEMA) } -OPTIONS_FLOW: dict[str, HelperFlowFormStep | HelperFlowMenuStep] = { - "init": HelperFlowFormStep(OPTIONS_SCHEMA) +OPTIONS_FLOW: dict[str, SchemaFlowFormStep | SchemaFlowMenuStep] = { + "init": SchemaFlowFormStep(OPTIONS_SCHEMA) } -class ConfigFlowHandler(HelperConfigFlowHandler, domain=DOMAIN): +class ConfigFlowHandler(SchemaConfigFlowHandler, domain=DOMAIN): """Handle a config or options flow for NEW_NAME.""" config_flow = CONFIG_FLOW diff --git a/tests/helpers/test_helper_config_entry_flow.py b/tests/helpers/test_helper_config_entry_flow.py index dece7ace37c..46e8998c738 100644 --- a/tests/helpers/test_helper_config_entry_flow.py +++ b/tests/helpers/test_helper_config_entry_flow.py @@ -1,14 +1,14 @@ -"""Test helper_config_entry_flow.""" +"""Test schema_config_entry_flow.""" import pytest import voluptuous as vol from homeassistant import data_entry_flow from homeassistant.core import HomeAssistant from homeassistant.helpers import entity_registry as er -from homeassistant.helpers.helper_config_entry_flow import ( - HelperConfigFlowHandler, - HelperFlowFormStep, - HelperFlowMenuStep, +from homeassistant.helpers.schema_config_entry_flow import ( + SchemaConfigFlowHandler, + SchemaFlowFormStep, + SchemaFlowMenuStep, wrapped_entity_config_entry_title, ) from homeassistant.util.decorator import Registry @@ -100,12 +100,12 @@ async def test_config_flow_advanced_option( } ) - CONFIG_FLOW: dict[str, HelperFlowFormStep | HelperFlowMenuStep] = { - "init": HelperFlowFormStep(CONFIG_SCHEMA) + CONFIG_FLOW: dict[str, SchemaFlowFormStep | SchemaFlowMenuStep] = { + "init": SchemaFlowFormStep(CONFIG_SCHEMA) } @manager.mock_reg_handler("test") - class TestFlow(HelperConfigFlowHandler): + class TestFlow(SchemaConfigFlowHandler): config_flow = CONFIG_FLOW # Start flow in basic mode @@ -195,11 +195,11 @@ async def test_options_flow_advanced_option( } ) - OPTIONS_FLOW: dict[str, HelperFlowFormStep | HelperFlowMenuStep] = { - "init": HelperFlowFormStep(OPTIONS_SCHEMA) + OPTIONS_FLOW: dict[str, SchemaFlowFormStep | SchemaFlowMenuStep] = { + "init": SchemaFlowFormStep(OPTIONS_SCHEMA) } - class TestFlow(HelperConfigFlowHandler, domain="test"): + class TestFlow(SchemaConfigFlowHandler, domain="test"): config_flow = {} options_flow = OPTIONS_FLOW From d617271ca0ee483de65b6612fdff36a20bd3ad22 Mon Sep 17 00:00:00 2001 From: Michael <35783820+mib1185@users.noreply.github.com> Date: Thu, 31 Mar 2022 22:45:58 +0200 Subject: [PATCH 006/238] Add "station is open" sensor to Tankerkoenig (#68925) --- .coveragerc | 1 + .../components/tankerkoenig/__init__.py | 14 +-- .../components/tankerkoenig/binary_sensor.py | 78 ++++++++++++ .../components/tankerkoenig/const.py | 9 ++ .../components/tankerkoenig/sensor.py | 111 ++++++------------ 5 files changed, 131 insertions(+), 82 deletions(-) create mode 100644 homeassistant/components/tankerkoenig/binary_sensor.py diff --git a/.coveragerc b/.coveragerc index d020a59c712..73814938619 100644 --- a/.coveragerc +++ b/.coveragerc @@ -1197,6 +1197,7 @@ omit = homeassistant/components/tado/water_heater.py homeassistant/components/tank_utility/sensor.py homeassistant/components/tankerkoenig/__init__.py + homeassistant/components/tankerkoenig/binary_sensor.py homeassistant/components/tankerkoenig/const.py homeassistant/components/tankerkoenig/sensor.py homeassistant/components/tapsaff/binary_sensor.py diff --git a/homeassistant/components/tankerkoenig/__init__.py b/homeassistant/components/tankerkoenig/__init__.py index 3051d70b06d..08520c8f5cc 100644 --- a/homeassistant/components/tankerkoenig/__init__.py +++ b/homeassistant/components/tankerkoenig/__init__.py @@ -75,7 +75,7 @@ CONFIG_SCHEMA = vol.Schema( extra=vol.ALLOW_EXTRA, ) -PLATFORMS = [Platform.SENSOR] +PLATFORMS = [Platform.BINARY_SENSOR, Platform.SENSOR] async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: @@ -170,14 +170,14 @@ class TankerkoenigDataUpdateCoordinator(DataUpdateCoordinator): update_interval=timedelta(minutes=update_interval), ) - self._api_key = entry.data[CONF_API_KEY] - self._selected_stations = entry.data[CONF_STATIONS] + self._api_key: str = entry.data[CONF_API_KEY] + self._selected_stations: list[str] = entry.data[CONF_STATIONS] self._hass = hass self.stations: dict[str, dict] = {} - self.fuel_types = entry.data[CONF_FUEL_TYPES] - self.show_on_map = entry.options[CONF_SHOW_ON_MAP] + self.fuel_types: list[str] = entry.data[CONF_FUEL_TYPES] + self.show_on_map: bool = entry.options[CONF_SHOW_ON_MAP] - def setup(self): + def setup(self) -> bool: """Set up the tankerkoenig API.""" for station_id in self._selected_stations: try: @@ -205,7 +205,7 @@ class TankerkoenigDataUpdateCoordinator(DataUpdateCoordinator): ) return True - async def _async_update_data(self): + async def _async_update_data(self) -> dict: """Get the latest data from tankerkoenig.de.""" _LOGGER.debug("Fetching new data from tankerkoenig.de") station_ids = list(self.stations) diff --git a/homeassistant/components/tankerkoenig/binary_sensor.py b/homeassistant/components/tankerkoenig/binary_sensor.py new file mode 100644 index 00000000000..4b58ea26703 --- /dev/null +++ b/homeassistant/components/tankerkoenig/binary_sensor.py @@ -0,0 +1,78 @@ +"""Tankerkoenig binary sensor integration.""" +from __future__ import annotations + +import logging + +from homeassistant.components.binary_sensor import ( + BinarySensorDeviceClass, + BinarySensorEntity, +) +from homeassistant.config_entries import ConfigEntry +from homeassistant.const import ATTR_ID, ATTR_LATITUDE, ATTR_LONGITUDE +from homeassistant.core import HomeAssistant +from homeassistant.helpers.entity import DeviceInfo +from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.helpers.update_coordinator import CoordinatorEntity + +from . import TankerkoenigDataUpdateCoordinator +from .const import DOMAIN + +_LOGGER = logging.getLogger(__name__) + + +async def async_setup_entry( + hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback +) -> None: + """Set up the tankerkoenig binary sensors.""" + + coordinator: TankerkoenigDataUpdateCoordinator = hass.data[DOMAIN][entry.unique_id] + + stations = coordinator.stations.values() + entities = [] + for station in stations: + sensor = StationOpenBinarySensorEntity( + station, + coordinator, + coordinator.show_on_map, + ) + entities.append(sensor) + _LOGGER.debug("Added sensors %s", entities) + + async_add_entities(entities) + + +class StationOpenBinarySensorEntity(CoordinatorEntity, BinarySensorEntity): + """Shows if a station is open or closed.""" + + _attr_device_class = BinarySensorDeviceClass.DOOR + + def __init__( + self, + station: dict, + coordinator: TankerkoenigDataUpdateCoordinator, + show_on_map: bool, + ) -> None: + """Initialize the sensor.""" + super().__init__(coordinator) + self._station_id = station["id"] + self._attr_name = ( + f"{station['brand']} {station['street']} {station['houseNumber']} status" + ) + self._attr_unique_id = f"{station['id']}_status" + self._attr_device_info = DeviceInfo( + identifiers={(ATTR_ID, station["id"])}, + name=f"{station['brand']} {station['street']} {station['houseNumber']}", + model=station["brand"], + configuration_url="https://www.tankerkoenig.de", + ) + if show_on_map: + self._attr_extra_state_attributes = { + ATTR_LATITUDE: station["lat"], + ATTR_LONGITUDE: station["lng"], + } + + @property + def is_on(self) -> bool | None: + """Return true if the station is open.""" + data = self.coordinator.data[self._station_id] + return data is not None and "status" in data diff --git a/homeassistant/components/tankerkoenig/const.py b/homeassistant/components/tankerkoenig/const.py index 5c4746bd3a1..c2a1dba9b6a 100644 --- a/homeassistant/components/tankerkoenig/const.py +++ b/homeassistant/components/tankerkoenig/const.py @@ -10,3 +10,12 @@ DEFAULT_RADIUS = 2 DEFAULT_SCAN_INTERVAL = 30 FUEL_TYPES = {"e5": "Super", "e10": "Super E10", "diesel": "Diesel"} + +ATTR_BRAND = "brand" +ATTR_CITY = "city" +ATTR_FUEL_TYPE = "fuel_type" +ATTR_HOUSE_NUMBER = "house_number" +ATTR_POSTCODE = "postcode" +ATTR_STATION_NAME = "station_name" +ATTR_STREET = "street" +ATTRIBUTION = "Data provided by https://www.tankerkoenig.de" diff --git a/homeassistant/components/tankerkoenig/sensor.py b/homeassistant/components/tankerkoenig/sensor.py index e22a7c1c82e..bbaeda44fd7 100644 --- a/homeassistant/components/tankerkoenig/sensor.py +++ b/homeassistant/components/tankerkoenig/sensor.py @@ -18,22 +18,21 @@ from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.update_coordinator import CoordinatorEntity from . import TankerkoenigDataUpdateCoordinator -from .const import DOMAIN, FUEL_TYPES +from .const import ( + ATTR_BRAND, + ATTR_CITY, + ATTR_FUEL_TYPE, + ATTR_HOUSE_NUMBER, + ATTR_POSTCODE, + ATTR_STATION_NAME, + ATTR_STREET, + ATTRIBUTION, + DOMAIN, + FUEL_TYPES, +) _LOGGER = logging.getLogger(__name__) -ATTR_BRAND = "brand" -ATTR_CITY = "city" -ATTR_FUEL_TYPE = "fuel_type" -ATTR_HOUSE_NUMBER = "house_number" -ATTR_IS_OPEN = "is_open" -ATTR_POSTCODE = "postcode" -ATTR_STATION_NAME = "station_name" -ATTR_STREET = "street" -ATTRIBUTION = "Data provided by https://creativecommons.tankerkoenig.de" - -ICON = "mdi:gas-station" - async def async_setup_entry( hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback @@ -67,79 +66,41 @@ class FuelPriceSensor(CoordinatorEntity, SensorEntity): """Contains prices for fuel in a given station.""" _attr_state_class = STATE_CLASS_MEASUREMENT + _attr_icon = "mdi:gas-station" def __init__(self, fuel_type, station, coordinator, show_on_map): """Initialize the sensor.""" super().__init__(coordinator) - self._station = station self._station_id = station["id"] self._fuel_type = fuel_type - self._latitude = station["lat"] - self._longitude = station["lng"] - self._city = station["place"] - self._house_number = station["houseNumber"] - self._postcode = station["postCode"] - self._street = station["street"] - self._brand = self._station["brand"] - self._price = station[fuel_type] - self._show_on_map = show_on_map + self._attr_name = f"{station['brand']} {station['street']} {station['houseNumber']} {FUEL_TYPES[fuel_type]}" + self._attr_native_unit_of_measurement = CURRENCY_EURO + self._attr_unique_id = f"{station['id']}_{fuel_type}" + self._attr_device_info = DeviceInfo( + identifiers={(ATTR_ID, station["id"])}, + name=f"{station['brand']} {station['street']} {station['houseNumber']}", + model=station["brand"], + configuration_url="https://www.tankerkoenig.de", + ) - @property - def name(self): - """Return the name of the sensor.""" - return f"{self._brand} {self._street} {self._house_number} {FUEL_TYPES[self._fuel_type]}" + attrs = { + ATTR_ATTRIBUTION: ATTRIBUTION, + ATTR_BRAND: station["brand"], + ATTR_FUEL_TYPE: fuel_type, + ATTR_STATION_NAME: station["name"], + ATTR_STREET: station["street"], + ATTR_HOUSE_NUMBER: station["houseNumber"], + ATTR_POSTCODE: station["postCode"], + ATTR_CITY: station["place"], + } - @property - def icon(self): - """Icon to use in the frontend.""" - return ICON - - @property - def native_unit_of_measurement(self): - """Return unit of measurement.""" - return CURRENCY_EURO + if show_on_map: + attrs[ATTR_LATITUDE] = station["lat"] + attrs[ATTR_LONGITUDE] = station["lng"] + self._attr_extra_state_attributes = attrs @property def native_value(self): """Return the state of the device.""" # key Fuel_type is not available when the fuel station is closed, use "get" instead of "[]" to avoid exceptions return self.coordinator.data[self._station_id].get(self._fuel_type) - - @property - def unique_id(self) -> str: - """Return a unique identifier for this entity.""" - return f"{self._station_id}_{self._fuel_type}" - - @property - def device_info(self) -> DeviceInfo | None: - """Return device info.""" - return DeviceInfo( - identifiers={(ATTR_ID, self._station_id)}, - name=f"{self._brand} {self._street} {self._house_number}", - model=self._brand, - configuration_url="https://www.tankerkoenig.de", - ) - - @property - def extra_state_attributes(self): - """Return the attributes of the device.""" - data = self.coordinator.data[self._station_id] - - attrs = { - ATTR_ATTRIBUTION: ATTRIBUTION, - ATTR_BRAND: self._station["brand"], - ATTR_FUEL_TYPE: self._fuel_type, - ATTR_STATION_NAME: self._station["name"], - ATTR_STREET: self._street, - ATTR_HOUSE_NUMBER: self._house_number, - ATTR_POSTCODE: self._postcode, - ATTR_CITY: self._city, - } - - if self._show_on_map: - attrs[ATTR_LATITUDE] = self._latitude - attrs[ATTR_LONGITUDE] = self._longitude - - if data is not None and "status" in data: - attrs[ATTR_IS_OPEN] = data["status"] == "open" - return attrs From ff786c3be8a59864f5650d25f5d193f1919fc121 Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Wed, 30 Mar 2022 23:35:12 +0200 Subject: [PATCH 007/238] Handle config entries of integrations that are removed (#68928) --- .../components/config/config_entries.py | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/config/config_entries.py b/homeassistant/components/config/config_entries.py index f3a239b5822..64151c7d90d 100644 --- a/homeassistant/components/config/config_entries.py +++ b/homeassistant/components/config/config_entries.py @@ -18,7 +18,7 @@ from homeassistant.helpers.data_entry_flow import ( FlowManagerIndexView, FlowManagerResourceView, ) -from homeassistant.loader import async_get_config_flows +from homeassistant.loader import Integration, async_get_config_flows async def async_setup(hass): @@ -63,19 +63,33 @@ class ConfigManagerEntryIndexView(HomeAssistantView): integrations = {} type_filter = request.query["type"] + async def load_integration( + hass: HomeAssistant, domain: str + ) -> Integration | None: + """Load integration.""" + try: + return await loader.async_get_integration(hass, domain) + except loader.IntegrationNotFound: + return None + # Fetch all the integrations so we can check their type for integration in await asyncio.gather( *( - loader.async_get_integration(hass, domain) + load_integration(hass, domain) for domain in {entry.domain for entry in entries} ) ): - integrations[integration.domain] = integration + if integration: + integrations[integration.domain] = integration entries = [ entry for entry in entries - if integrations[entry.domain].integration_type == type_filter + if (type_filter != "helper" and entry.domain not in integrations) + or ( + entry.domain in integrations + and integrations[entry.domain].integration_type == type_filter + ) ] return self.json([entry_json(entry) for entry in entries]) From 0de84d882ad477c43cdf0b1d11edc97f57118e4b Mon Sep 17 00:00:00 2001 From: Nathan Spencer Date: Wed, 30 Mar 2022 17:01:43 -0600 Subject: [PATCH 008/238] Bump pylitterbot to 2022.3.0 (#68929) --- homeassistant/components/litterrobot/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/litterrobot/manifest.json b/homeassistant/components/litterrobot/manifest.json index 0e2746017d8..a07f13a47b5 100644 --- a/homeassistant/components/litterrobot/manifest.json +++ b/homeassistant/components/litterrobot/manifest.json @@ -3,7 +3,7 @@ "name": "Litter-Robot", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/litterrobot", - "requirements": ["pylitterbot==2021.12.0"], + "requirements": ["pylitterbot==2022.3.0"], "codeowners": ["@natekspencer"], "iot_class": "cloud_polling", "loggers": ["pylitterbot"] diff --git a/requirements_all.txt b/requirements_all.txt index 38f7a282e8d..cabe5ded9ba 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -1599,7 +1599,7 @@ pylibrespot-java==0.1.0 pylitejet==0.3.0 # homeassistant.components.litterrobot -pylitterbot==2021.12.0 +pylitterbot==2022.3.0 # homeassistant.components.lutron_caseta pylutron-caseta==0.13.1 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index d9126758eec..b4d446870b6 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -1061,7 +1061,7 @@ pylibrespot-java==0.1.0 pylitejet==0.3.0 # homeassistant.components.litterrobot -pylitterbot==2021.12.0 +pylitterbot==2022.3.0 # homeassistant.components.lutron_caseta pylutron-caseta==0.13.1 From 143e9f4fc3f5abf7bebefbf02284a274613adea1 Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Thu, 31 Mar 2022 00:47:15 +0200 Subject: [PATCH 009/238] Improve utility_meter services.yaml (#68930) --- homeassistant/components/utility_meter/services.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/homeassistant/components/utility_meter/services.yaml b/homeassistant/components/utility_meter/services.yaml index 800e001f6ff..777af78257c 100644 --- a/homeassistant/components/utility_meter/services.yaml +++ b/homeassistant/components/utility_meter/services.yaml @@ -6,6 +6,7 @@ reset: target: entity: domain: select + integration: utility_meter next_tariff: name: Next Tariff From 3aa0294b5d6daf310f8f0bdb9c4aa283b5c3380f Mon Sep 17 00:00:00 2001 From: Dave T <17680170+davet2001@users.noreply.github.com> Date: Wed, 30 Mar 2022 23:45:55 +0100 Subject: [PATCH 010/238] Generic camera: Allow svg detect to accept leading whitespace (#68932) --- homeassistant/components/generic/config_flow.py | 2 +- tests/components/generic/test_config_flow.py | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/generic/config_flow.py b/homeassistant/components/generic/config_flow.py index 1b484821788..5c61966808d 100644 --- a/homeassistant/components/generic/config_flow.py +++ b/homeassistant/components/generic/config_flow.py @@ -114,7 +114,7 @@ def get_image_type(image): if fmt is None: # if imghdr can't figure it out, could be svg. with contextlib.suppress(UnicodeDecodeError): - if image.decode("utf-8").startswith(" Date: Thu, 31 Mar 2022 08:02:43 +0100 Subject: [PATCH 011/238] Generic camera: Allow gif image type in still image checker (#68933) --- homeassistant/components/generic/config_flow.py | 2 +- tests/components/generic/conftest.py | 14 ++++++++++++++ tests/components/generic/test_config_flow.py | 14 +++++++++++++- 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/generic/config_flow.py b/homeassistant/components/generic/config_flow.py index 5c61966808d..c5c645264d6 100644 --- a/homeassistant/components/generic/config_flow.py +++ b/homeassistant/components/generic/config_flow.py @@ -57,7 +57,7 @@ DEFAULT_DATA = { CONF_VERIFY_SSL: True, } -SUPPORTED_IMAGE_TYPES = ["png", "jpeg", "svg+xml"] +SUPPORTED_IMAGE_TYPES = {"png", "jpeg", "gif", "svg+xml"} def build_schema( diff --git a/tests/components/generic/conftest.py b/tests/components/generic/conftest.py index 63f7a87cba0..9daa3574e6e 100644 --- a/tests/components/generic/conftest.py +++ b/tests/components/generic/conftest.py @@ -36,12 +36,26 @@ def fakeimgbytes_svg(): ) +@pytest.fixture(scope="package") +def fakeimgbytes_gif(): + """Fake image in RAM for testing.""" + buf = BytesIO() # fake image in ram for testing. + Image.new("RGB", (1, 1)).save(buf, format="gif") + yield bytes(buf.getbuffer()) + + @pytest.fixture def fakeimg_png(fakeimgbytes_png): """Set up respx to respond to test url with fake image bytes.""" respx.get("http://127.0.0.1/testurl/1").respond(stream=fakeimgbytes_png) +@pytest.fixture +def fakeimg_gif(fakeimgbytes_gif): + """Set up respx to respond to test url with fake image bytes.""" + respx.get("http://127.0.0.1/testurl/1").respond(stream=fakeimgbytes_gif) + + @pytest.fixture(scope="package") def mock_av_open(): """Fake container object with .streams.video[0] != None.""" diff --git a/tests/components/generic/test_config_flow.py b/tests/components/generic/test_config_flow.py index b3811f61acc..7849e54c747 100644 --- a/tests/components/generic/test_config_flow.py +++ b/tests/components/generic/test_config_flow.py @@ -110,12 +110,24 @@ async def test_form_only_stillimage(hass, fakeimg_png, user_flow): assert respx.calls.call_count == 1 +@respx.mock +async def test_form_only_stillimage_gif(hass, fakeimg_gif, user_flow): + """Test we complete ok if the user wants a gif.""" + data = TESTDATA.copy() + data.pop(CONF_STREAM_SOURCE) + result2 = await hass.config_entries.flow.async_configure( + user_flow["flow_id"], + data, + ) + assert result2["type"] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY + assert result2["options"][CONF_CONTENT_TYPE] == "image/gif" + + @respx.mock async def test_form_only_svg_whitespace(hass, fakeimgbytes_svg, user_flow): """Test we complete ok if svg starts with whitespace, issue #68889.""" fakeimgbytes_wspace_svg = bytes(" \n ", encoding="utf-8") + fakeimgbytes_svg respx.get("http://127.0.0.1/testurl/1").respond(stream=fakeimgbytes_wspace_svg) - data = TESTDATA.copy() data.pop(CONF_STREAM_SOURCE) result2 = await hass.config_entries.flow.async_configure( From 40e7055934277e2ef2863f3fdf721f4dda9f0095 Mon Sep 17 00:00:00 2001 From: Philip Allgaier Date: Thu, 31 Mar 2022 16:57:52 +0200 Subject: [PATCH 012/238] Prevent issues with setting up "Timer" integration (unknown "restore" key) (#68936) * Prevent issues with setting up "Timer" for existing entities * Use default constant * Update homeassistant/components/timer/__init__.py Co-authored-by: Franck Nijhof Co-authored-by: Franck Nijhof --- homeassistant/components/timer/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/components/timer/__init__.py b/homeassistant/components/timer/__init__.py index 63ab766567d..215aa8577f7 100644 --- a/homeassistant/components/timer/__init__.py +++ b/homeassistant/components/timer/__init__.py @@ -207,7 +207,7 @@ class Timer(RestoreEntity): self._remaining: timedelta | None = None self._end: datetime | None = None self._listener: Callable[[], None] | None = None - self._restore: bool = self._config[CONF_RESTORE] + self._restore: bool = self._config.get(CONF_RESTORE, DEFAULT_RESTORE) self._attr_should_poll = False self._attr_force_update = True From df308f703f0aeac92b3409248a683aed747dde84 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Thu, 31 Mar 2022 02:28:19 -1000 Subject: [PATCH 013/238] Exclude large and chatty attributes from being recorded for update entities (#68940) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Joakim Sørensen --- homeassistant/components/update/recorder.py | 12 +++++ tests/components/update/test_recorder.py | 55 +++++++++++++++++++++ 2 files changed, 67 insertions(+) create mode 100644 homeassistant/components/update/recorder.py create mode 100644 tests/components/update/test_recorder.py diff --git a/homeassistant/components/update/recorder.py b/homeassistant/components/update/recorder.py new file mode 100644 index 00000000000..cba4cab8ec2 --- /dev/null +++ b/homeassistant/components/update/recorder.py @@ -0,0 +1,12 @@ +"""Integration platform for recorder.""" +from __future__ import annotations + +from homeassistant.core import HomeAssistant, callback + +from . import ATTR_IN_PROGRESS, ATTR_RELEASE_SUMMARY + + +@callback +def exclude_attributes(hass: HomeAssistant) -> set[str]: + """Exclude large and chatty update attributes from being recorded in the database.""" + return {ATTR_IN_PROGRESS, ATTR_RELEASE_SUMMARY} diff --git a/tests/components/update/test_recorder.py b/tests/components/update/test_recorder.py new file mode 100644 index 00000000000..17ab7445b4b --- /dev/null +++ b/tests/components/update/test_recorder.py @@ -0,0 +1,55 @@ +"""The tests for update recorder.""" +from __future__ import annotations + +from datetime import timedelta + +from homeassistant.components.recorder.models import StateAttributes, States +from homeassistant.components.recorder.util import session_scope +from homeassistant.components.update.const import ( + ATTR_CURRENT_VERSION, + ATTR_IN_PROGRESS, + ATTR_RELEASE_SUMMARY, + DOMAIN, +) +from homeassistant.const import CONF_PLATFORM +from homeassistant.core import HomeAssistant, State +from homeassistant.setup import async_setup_component +from homeassistant.util import dt as dt_util + +from tests.common import async_fire_time_changed, async_init_recorder_component +from tests.components.recorder.common import async_wait_recording_done_without_instance + + +async def test_exclude_attributes( + hass: HomeAssistant, enable_custom_integrations: None +): + """Test update attributes to be excluded.""" + await async_init_recorder_component(hass) + platform = getattr(hass.components, f"test.{DOMAIN}") + platform.init() + assert await async_setup_component(hass, DOMAIN, {DOMAIN: {CONF_PLATFORM: "test"}}) + await hass.async_block_till_done() + state = hass.states.get("update.update_already_in_progress") + assert state.attributes[ATTR_IN_PROGRESS] == 50 + await async_setup_component(hass, DOMAIN, {}) + + await hass.async_block_till_done() + async_fire_time_changed(hass, dt_util.utcnow() + timedelta(minutes=5)) + await hass.async_block_till_done() + await async_wait_recording_done_without_instance(hass) + + def _fetch_states() -> list[State]: + with session_scope(hass=hass) as session: + native_states = [] + for db_state, db_state_attributes in session.query(States, StateAttributes): + state = db_state.to_native() + state.attributes = db_state_attributes.to_native() + native_states.append(state) + return native_states + + states: list[State] = await hass.async_add_executor_job(_fetch_states) + assert len(states) > 1 + for state in states: + assert ATTR_IN_PROGRESS not in state.attributes + assert ATTR_RELEASE_SUMMARY not in state.attributes + assert ATTR_CURRENT_VERSION in state.attributes From a16d86585b63a4171c69bb36999abca3e7006895 Mon Sep 17 00:00:00 2001 From: Robert Hillis Date: Thu, 31 Mar 2022 08:47:51 -0400 Subject: [PATCH 014/238] Rename google hangouts to google chat (#68941) --- homeassistant/components/hangouts/manifest.json | 2 +- homeassistant/components/hangouts/strings.json | 2 +- homeassistant/components/hangouts/translations/en.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/hangouts/manifest.json b/homeassistant/components/hangouts/manifest.json index 983dc60414a..44d85405339 100644 --- a/homeassistant/components/hangouts/manifest.json +++ b/homeassistant/components/hangouts/manifest.json @@ -1,6 +1,6 @@ { "domain": "hangouts", - "name": "Google Hangouts", + "name": "Google Chat", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/hangouts", "requirements": ["hangups==0.4.17"], diff --git a/homeassistant/components/hangouts/strings.json b/homeassistant/components/hangouts/strings.json index 0128363a1ab..fcc2da456bb 100644 --- a/homeassistant/components/hangouts/strings.json +++ b/homeassistant/components/hangouts/strings.json @@ -16,7 +16,7 @@ "password": "[%key:common::config_flow::data::password%]", "authorization_code": "Authorization Code (required for manual authentication)" }, - "title": "Google Hangouts Login" + "title": "Google Chat Login" }, "2fa": { "data": { diff --git a/homeassistant/components/hangouts/translations/en.json b/homeassistant/components/hangouts/translations/en.json index b2d7076bd75..4829e843c6c 100644 --- a/homeassistant/components/hangouts/translations/en.json +++ b/homeassistant/components/hangouts/translations/en.json @@ -22,7 +22,7 @@ "email": "Email", "password": "Password" }, - "title": "Google Hangouts Login" + "title": "Google Chat Login" } } } From e6b88a5214483f15d7a73984fe420ad52743d9b3 Mon Sep 17 00:00:00 2001 From: Allen Porter Date: Thu, 31 Mar 2022 04:22:33 -0700 Subject: [PATCH 015/238] Fix google calendar blocking call, running outside of executor (#68948) --- homeassistant/components/google/api.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/google/api.py b/homeassistant/components/google/api.py index 10b4a35e25f..ea3d23dcb01 100644 --- a/homeassistant/components/google/api.py +++ b/homeassistant/components/google/api.py @@ -183,9 +183,13 @@ class GoogleCalendarService: """Get the calendar service with valid credetnails.""" await self._session.async_ensure_token_valid() creds = _async_google_creds(self._hass, self._session.token) - return google_discovery.build( - "calendar", "v3", credentials=creds, cache_discovery=False - ) + + def _build() -> google_discovery.Resource: + return google_discovery.build( + "calendar", "v3", credentials=creds, cache_discovery=False + ) + + return await self._hass.async_add_executor_job(_build) async def async_list_calendars( self, From c68460303748006367932d69cf285203ded91afc Mon Sep 17 00:00:00 2001 From: Raman Gupta <7243222+raman325@users.noreply.github.com> Date: Thu, 31 Mar 2022 05:28:49 -0400 Subject: [PATCH 016/238] Add support for new select selector properties (#68952) * Add support for new select selector properties * fix mode option * Apply suggestions from code review * Correct validation for empty options, update tests Co-authored-by: Erik Montnemery --- homeassistant/helpers/selector.py | 30 ++++++++++++++++++-------- tests/helpers/test_selector.py | 36 +++++++++++++++++++++++++++---- 2 files changed, 53 insertions(+), 13 deletions(-) diff --git a/homeassistant/helpers/selector.py b/homeassistant/helpers/selector.py index 9577381d92b..b4d01ef52e0 100644 --- a/homeassistant/helpers/selector.py +++ b/homeassistant/helpers/selector.py @@ -471,25 +471,37 @@ select_option = vol.All( @SELECTORS.register("select") class SelectSelector(Selector): - """Selector for an single-choice input select.""" + """Selector for an single or multi-choice input select.""" selector_type = "select" CONFIG_SCHEMA = vol.Schema( { - vol.Required("options"): vol.All( - vol.Any([str], [select_option]), vol.Length(min=1) - ) + vol.Required("options"): vol.All(vol.Any([str], [select_option])), + vol.Optional("multiple", default=False): cv.boolean, + vol.Optional("custom_value", default=False): cv.boolean, + vol.Optional("mode"): vol.In(("list", "dropdown")), } ) def __call__(self, data: Any) -> Any: """Validate the passed selection.""" - if isinstance(self.config["options"][0], str): - options = self.config["options"] - else: - options = [option["value"] for option in self.config["options"]] - return vol.In(options)(vol.Schema(str)(data)) + options = [] + if self.config["options"]: + if isinstance(self.config["options"][0], str): + options = self.config["options"] + else: + options = [option["value"] for option in self.config["options"]] + + parent_schema = vol.In(options) + if self.config["custom_value"]: + parent_schema = vol.Any(parent_schema, str) + + if not self.config["multiple"]: + return parent_schema(vol.Schema(str)(data)) + if not isinstance(data, list): + raise vol.Invalid("Value should be a list") + return [parent_schema(vol.Schema(str)(val)) for val in data] @SELECTORS.register("text") diff --git a/tests/helpers/test_selector.py b/tests/helpers/test_selector.py index 9e68af05487..bef95b056b4 100644 --- a/tests/helpers/test_selector.py +++ b/tests/helpers/test_selector.py @@ -246,7 +246,7 @@ def test_number_selector_schema(schema, valid_selections, invalid_selections): ), ) def test_number_selector_schema_error(schema): - """Test select selector.""" + """Test number selector.""" with pytest.raises(vol.Invalid): selector.validate_selector({"number": schema}) @@ -349,7 +349,7 @@ def test_text_selector_schema(schema, valid_selections, invalid_selections): ( {"options": ["red", "green", "blue"]}, ("red", "green", "blue"), - ("cat", 0, None), + ("cat", 0, None, ["red"]), ), ( { @@ -359,7 +359,36 @@ def test_text_selector_schema(schema, valid_selections, invalid_selections): ] }, ("red", "green"), - ("cat", 0, None), + ("cat", 0, None, ["red"]), + ), + ( + {"options": ["red", "green", "blue"], "multiple": True}, + (["red"], ["green", "blue"], []), + ("cat", 0, None, "red"), + ), + ( + { + "options": ["red", "green", "blue"], + "multiple": True, + "custom_value": True, + }, + (["red"], ["green", "blue"], ["red", "cat"], []), + ("cat", 0, None, "red"), + ), + ( + {"options": ["red", "green", "blue"], "custom_value": True}, + ("red", "green", "blue", "cat"), + (0, None, ["red"]), + ), + ( + {"options": [], "custom_value": True}, + ("red", "cat"), + (0, None, ["red"]), + ), + ( + {"options": [], "custom_value": True, "multiple": True}, + (["red"], ["green", "blue"], []), + (0, None, "red"), ), ), ) @@ -373,7 +402,6 @@ def test_select_selector_schema(schema, valid_selections, invalid_selections): ( {}, # Must have options {"options": {"hello": "World"}}, # Options must be a list - {"options": []}, # Must have at least option # Options must be strings or value / label pairs {"options": [{"hello": "World"}]}, # Options must all be of the same type From 844d0680f0f984adfc345c4f310c39d82c7fec8e Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 31 Mar 2022 02:06:07 -0700 Subject: [PATCH 017/238] Change privacy mode to config (#68954) --- homeassistant/components/unifiprotect/switch.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/components/unifiprotect/switch.py b/homeassistant/components/unifiprotect/switch.py index 086bd852049..9271e87db50 100644 --- a/homeassistant/components/unifiprotect/switch.py +++ b/homeassistant/components/unifiprotect/switch.py @@ -87,7 +87,7 @@ CAMERA_SWITCHES: tuple[ProtectSwitchEntityDescription, ...] = ( key=_KEY_PRIVACY_MODE, name="Privacy Mode", icon="mdi:eye-settings", - entity_category=None, + entity_category=EntityCategory.CONFIG, ufp_required_field="feature_flags.has_privacy_mask", ufp_value="is_privacy_on", ), From 76db6acfb2171dc0166b148916cd8943537880a7 Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Thu, 31 Mar 2022 11:32:11 +0200 Subject: [PATCH 018/238] Improve utility_meter services.yaml (#68960) --- homeassistant/components/utility_meter/services.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/homeassistant/components/utility_meter/services.yaml b/homeassistant/components/utility_meter/services.yaml index 777af78257c..32a6069d3bb 100644 --- a/homeassistant/components/utility_meter/services.yaml +++ b/homeassistant/components/utility_meter/services.yaml @@ -36,6 +36,7 @@ calibrate: target: entity: domain: sensor + integration: utility_meter fields: value: name: Value From a8dcecf1ec66d3858a4f9935f690f2b51605e641 Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Thu, 31 Mar 2022 13:57:26 +0200 Subject: [PATCH 019/238] Make utility_meter tariffs a list (#68967) --- .../components/utility_meter/config_flow.py | 11 ++++------- homeassistant/components/utility_meter/select.py | 7 +------ homeassistant/components/utility_meter/sensor.py | 7 +------ .../components/utility_meter/test_config_flow.py | 14 +++++++------- tests/components/utility_meter/test_init.py | 8 ++++---- tests/components/utility_meter/test_sensor.py | 16 ++++++++-------- 6 files changed, 25 insertions(+), 38 deletions(-) diff --git a/homeassistant/components/utility_meter/config_flow.py b/homeassistant/components/utility_meter/config_flow.py index 555ae7eb46d..ed12b3038b6 100644 --- a/homeassistant/components/utility_meter/config_flow.py +++ b/homeassistant/components/utility_meter/config_flow.py @@ -48,13 +48,8 @@ METER_TYPES = [ def _validate_config(data: Any) -> Any: """Validate config.""" - tariffs: list[str] - if not data[CONF_TARIFFS]: - tariffs = [] - else: - tariffs = data[CONF_TARIFFS].split(",") try: - vol.Unique()(tariffs) + vol.Unique()(data[CONF_TARIFFS]) except vol.Invalid as exc: raise SchemaFlowError("tariffs_not_unique") from exc @@ -88,7 +83,9 @@ CONFIG_SCHEMA = vol.Schema( } } ), - vol.Optional(CONF_TARIFFS): selector.selector({"text": {}}), + vol.Required(CONF_TARIFFS, default=[]): selector.selector( + {"select": {"options": [], "custom_value": True, "multiple": True}} + ), vol.Required(CONF_METER_NET_CONSUMPTION, default=False): selector.selector( {"boolean": {}} ), diff --git a/homeassistant/components/utility_meter/select.py b/homeassistant/components/utility_meter/select.py index e47f0626f6e..1f39b7f7c16 100644 --- a/homeassistant/components/utility_meter/select.py +++ b/homeassistant/components/utility_meter/select.py @@ -42,12 +42,7 @@ async def async_setup_entry( ) -> None: """Initialize Utility Meter config entry.""" name = config_entry.title - - # Remove when frontend list selector is available - if not config_entry.options.get(CONF_TARIFFS): - tariffs = [] - else: - tariffs = config_entry.options[CONF_TARIFFS].split(",") + tariffs = config_entry.options[CONF_TARIFFS] legacy_add_entities = None unique_id = config_entry.entry_id diff --git a/homeassistant/components/utility_meter/sensor.py b/homeassistant/components/utility_meter/sensor.py index 7800c5035fb..c3d2be63a4b 100644 --- a/homeassistant/components/utility_meter/sensor.py +++ b/homeassistant/components/utility_meter/sensor.py @@ -119,12 +119,7 @@ async def async_setup_entry( tariff_entity = hass.data[DATA_UTILITY][entry_id][CONF_TARIFF_ENTITY] meters = [] - - # Remove when frontend list selector is available - if not config_entry.options.get(CONF_TARIFFS): - tariffs = [] - else: - tariffs = config_entry.options[CONF_TARIFFS].split(",") + tariffs = config_entry.options[CONF_TARIFFS] if not tariffs: # Add single sensor, not gated by a tariff selector diff --git a/tests/components/utility_meter/test_config_flow.py b/tests/components/utility_meter/test_config_flow.py index dd2d99617c6..53f9d814f2f 100644 --- a/tests/components/utility_meter/test_config_flow.py +++ b/tests/components/utility_meter/test_config_flow.py @@ -33,7 +33,7 @@ async def test_config_flow(hass: HomeAssistant, platform) -> None: "name": "Electricity meter", "offset": 0, "source": input_sensor_entity_id, - "tariffs": "", + "tariffs": [], }, ) await hass.async_block_till_done() @@ -48,7 +48,7 @@ async def test_config_flow(hass: HomeAssistant, platform) -> None: "net_consumption": False, "offset": 0, "source": input_sensor_entity_id, - "tariffs": "", + "tariffs": [], } assert len(mock_setup_entry.mock_calls) == 1 @@ -61,7 +61,7 @@ async def test_config_flow(hass: HomeAssistant, platform) -> None: "net_consumption": False, "offset": 0, "source": input_sensor_entity_id, - "tariffs": "", + "tariffs": [], } assert config_entry.title == "Electricity meter" @@ -83,7 +83,7 @@ async def test_tariffs(hass: HomeAssistant) -> None: "name": "Electricity meter", "offset": 0, "source": input_sensor_entity_id, - "tariffs": "cat,dog,horse,cow", + "tariffs": ["cat", "dog", "horse", "cow"], }, ) await hass.async_block_till_done() @@ -98,7 +98,7 @@ async def test_tariffs(hass: HomeAssistant) -> None: "net_consumption": False, "offset": 0, "source": input_sensor_entity_id, - "tariffs": "cat,dog,horse,cow", + "tariffs": ["cat", "dog", "horse", "cow"], } config_entry = hass.config_entries.async_entries(DOMAIN)[0] @@ -110,7 +110,7 @@ async def test_tariffs(hass: HomeAssistant) -> None: "net_consumption": False, "offset": 0, "source": input_sensor_entity_id, - "tariffs": "cat,dog,horse,cow", + "tariffs": ["cat", "dog", "horse", "cow"], } assert config_entry.title == "Electricity meter" @@ -127,7 +127,7 @@ async def test_tariffs(hass: HomeAssistant) -> None: "name": "Electricity meter", "offset": 0, "source": input_sensor_entity_id, - "tariffs": "cat,cat,cat,cat", + "tariffs": ["cat", "cat", "cat", "cat"], }, ) await hass.async_block_till_done() diff --git a/tests/components/utility_meter/test_init.py b/tests/components/utility_meter/test_init.py index 925ff00f323..853fd827f0a 100644 --- a/tests/components/utility_meter/test_init.py +++ b/tests/components/utility_meter/test_init.py @@ -186,7 +186,7 @@ async def test_services_config_entry(hass): "net_consumption": False, "offset": 0, "source": "sensor.energy", - "tariffs": "peak,offpeak", + "tariffs": ["peak", "offpeak"], }, title="Energy bill", ) @@ -202,7 +202,7 @@ async def test_services_config_entry(hass): "net_consumption": False, "offset": 0, "source": "sensor.energy", - "tariffs": "peak,offpeak", + "tariffs": ["peak", "offpeak"], }, title="Energy bill2", ) @@ -469,11 +469,11 @@ async def test_legacy_support(hass): "tariffs,expected_entities", ( ( - "", + [], ["sensor.electricity_meter"], ), ( - "high,low", + ["high", "low"], [ "sensor.electricity_meter_low", "sensor.electricity_meter_high", diff --git a/tests/components/utility_meter/test_sensor.py b/tests/components/utility_meter/test_sensor.py index 04610f6c2f4..1b8328f5a62 100644 --- a/tests/components/utility_meter/test_sensor.py +++ b/tests/components/utility_meter/test_sensor.py @@ -77,7 +77,7 @@ def alter_time(retval): "net_consumption": False, "offset": 0, "source": "sensor.energy", - "tariffs": "onpeak,midpeak,offpeak", + "tariffs": ["onpeak", "midpeak", "offpeak"], }, ), ), @@ -249,7 +249,7 @@ async def test_state(hass, yaml_config, config_entry_config): "net_consumption": False, "offset": 0, "source": "sensor.energy", - "tariffs": "onpeak,midpeak,offpeak", + "tariffs": ["onpeak", "midpeak", "offpeak"], }, ), ), @@ -327,7 +327,7 @@ async def test_init(hass, yaml_config, config_entry_config): "net_consumption": True, "offset": 0, "source": "sensor.energy", - "tariffs": "", + "tariffs": [], }, { "cycle": "none", @@ -336,7 +336,7 @@ async def test_init(hass, yaml_config, config_entry_config): "net_consumption": False, "offset": 0, "source": "sensor.gas", - "tariffs": "", + "tariffs": [], }, ], ), @@ -411,7 +411,7 @@ async def test_device_class(hass, yaml_config, config_entry_configs): "net_consumption": False, "offset": 0, "source": "sensor.energy", - "tariffs": "onpeak,midpeak,offpeak", + "tariffs": ["onpeak", "midpeak", "offpeak"], }, ), ), @@ -514,7 +514,7 @@ async def test_restore_state(hass, yaml_config, config_entry_config): "net_consumption": True, "offset": 0, "source": "sensor.energy", - "tariffs": "", + "tariffs": [], }, ), ), @@ -582,7 +582,7 @@ async def test_net_consumption(hass, yaml_config, config_entry_config): "net_consumption": False, "offset": 0, "source": "sensor.energy", - "tariffs": "", + "tariffs": [], }, ), ), @@ -650,7 +650,7 @@ async def test_non_net_consumption(hass, yaml_config, config_entry_config): "net_consumption": False, "offset": 0, "source": "sensor.energy", - "tariffs": "", + "tariffs": [], }, ), ), From a8e6ad9f3da55965287696fe417da64a8152cc7f Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Thu, 31 Mar 2022 23:29:44 +0200 Subject: [PATCH 020/238] Deprecate temperature conversion in base entity class (#68978) Co-authored-by: Paulus Schoutsen --- homeassistant/helpers/entity.py | 57 +++++++++++++++++++++++++------ tests/helpers/test_entity.py | 59 +++++++++++++++++++++++++++++++++ 2 files changed, 106 insertions(+), 10 deletions(-) diff --git a/homeassistant/helpers/entity.py b/homeassistant/helpers/entity.py index f6ff8c73bf5..75ac1e0c1b8 100644 --- a/homeassistant/helpers/entity.py +++ b/homeassistant/helpers/entity.py @@ -295,6 +295,9 @@ class Entity(ABC): # If we reported this entity is updated while disabled _disabled_reported = False + # If we reported this entity is relying on deprecated temperature conversion + _temperature_reported = False + # Protect for multiple updates _update_staged = False @@ -642,23 +645,57 @@ class Entity(ABC): if DATA_CUSTOMIZE in self.hass.data: attr.update(self.hass.data[DATA_CUSTOMIZE].get(self.entity_id)) - # Convert temperature if we detect one - try: + def _convert_temperature(state: str, attr: dict) -> str: + # Convert temperature if we detect one + # pylint: disable-next=import-outside-toplevel + from homeassistant.components.sensor import SensorEntity + unit_of_measure = attr.get(ATTR_UNIT_OF_MEASUREMENT) units = self.hass.config.units - domain = split_entity_id(self.entity_id)[0] - if ( - unit_of_measure in (TEMP_CELSIUS, TEMP_FAHRENHEIT) - and unit_of_measure != units.temperature_unit - and domain != "sensor" + if unit_of_measure == units.temperature_unit or unit_of_measure not in ( + TEMP_CELSIUS, + TEMP_FAHRENHEIT, ): + return state + + domain = split_entity_id(self.entity_id)[0] + if domain != "sensor": + if not self._temperature_reported: + self._temperature_reported = True + report_issue = self._suggest_report_issue() + _LOGGER.warning( + "Entity %s (%s) relies on automatic temperature conversion, this will " + "be unsupported in Home Assistant Core 2022.7. Please %s", + self.entity_id, + type(self), + report_issue, + ) + elif not isinstance(self, SensorEntity): + if not self._temperature_reported: + self._temperature_reported = True + report_issue = self._suggest_report_issue() + _LOGGER.warning( + "Temperature sensor %s (%s) does not inherit SensorEntity, " + "this will be unsupported in Home Assistant Core 2022.7." + "Please %s", + self.entity_id, + type(self), + report_issue, + ) + else: + return state + + try: prec = len(state) - state.index(".") - 1 if "." in state else 0 temp = units.temperature(float(state), unit_of_measure) state = str(round(temp) if prec == 0 else round(temp, prec)) attr[ATTR_UNIT_OF_MEASUREMENT] = units.temperature_unit - except ValueError: - # Could not convert state to float - pass + except ValueError: + # Could not convert state to float + pass + return state + + state = _convert_temperature(state, attr) if ( self._context_set is not None diff --git a/tests/helpers/test_entity.py b/tests/helpers/test_entity.py index afc0887371e..9130de04e0f 100644 --- a/tests/helpers/test_entity.py +++ b/tests/helpers/test_entity.py @@ -13,6 +13,7 @@ from homeassistant.const import ( ATTR_DEVICE_CLASS, STATE_UNAVAILABLE, STATE_UNKNOWN, + TEMP_FAHRENHEIT, ) from homeassistant.core import Context, HomeAssistantError from homeassistant.helpers import entity, entity_registry @@ -814,6 +815,64 @@ async def test_float_conversion(hass): assert state.state == "3.6" +async def test_temperature_conversion(hass, caplog): + """Test conversion of temperatures.""" + # Non sensor entity reporting a temperature + with patch.object( + entity.Entity, "state", PropertyMock(return_value=100) + ), patch.object( + entity.Entity, "unit_of_measurement", PropertyMock(return_value=TEMP_FAHRENHEIT) + ): + ent = entity.Entity() + ent.hass = hass + ent.entity_id = "hello.world" + ent.async_write_ha_state() + + state = hass.states.get("hello.world") + assert state is not None + assert state.state == "38" + assert ( + "Entity hello.world () relies on automatic " + "temperature conversion, this will be unsupported in Home Assistant Core 2022.7. " + "Please create a bug report" in caplog.text + ) + + # Sensor entity, not extending SensorEntity, reporting a temperature + with patch.object( + entity.Entity, "state", PropertyMock(return_value=100) + ), patch.object( + entity.Entity, "unit_of_measurement", PropertyMock(return_value=TEMP_FAHRENHEIT) + ): + ent = entity.Entity() + ent.hass = hass + ent.entity_id = "sensor.temp" + ent.async_write_ha_state() + + state = hass.states.get("sensor.temp") + assert state is not None + assert state.state == "38" + assert ( + "Temperature sensor sensor.temp () " + "does not inherit SensorEntity, this will be unsupported in Home Assistant Core " + "2022.7.Please create a bug report" in caplog.text + ) + + # Sensor entity, not extending SensorEntity, not reporting a number + with patch.object( + entity.Entity, "state", PropertyMock(return_value="really warm") + ), patch.object( + entity.Entity, "unit_of_measurement", PropertyMock(return_value=TEMP_FAHRENHEIT) + ): + ent = entity.Entity() + ent.hass = hass + ent.entity_id = "sensor.temp" + ent.async_write_ha_state() + + state = hass.states.get("sensor.temp") + assert state is not None + assert state.state == "really warm" + + async def test_attribution_attribute(hass): """Test attribution attribute.""" mock_entity = entity.Entity() From 013f376ef3fdc76c1de72f5a4c20cb16d1fd3f5b Mon Sep 17 00:00:00 2001 From: starkillerOG Date: Thu, 31 Mar 2022 18:58:49 +0200 Subject: [PATCH 021/238] bump pynetgear to 0.9.2 (#68986) --- homeassistant/components/netgear/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/netgear/manifest.json b/homeassistant/components/netgear/manifest.json index b2c7ddf6be2..932535f68f6 100644 --- a/homeassistant/components/netgear/manifest.json +++ b/homeassistant/components/netgear/manifest.json @@ -2,7 +2,7 @@ "domain": "netgear", "name": "NETGEAR", "documentation": "https://www.home-assistant.io/integrations/netgear", - "requirements": ["pynetgear==0.9.1"], + "requirements": ["pynetgear==0.9.2"], "codeowners": ["@hacf-fr", "@Quentame", "@starkillerOG"], "iot_class": "local_polling", "config_flow": true, diff --git a/requirements_all.txt b/requirements_all.txt index cabe5ded9ba..0deafba17c4 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -1650,7 +1650,7 @@ pymyq==3.1.4 pymysensors==0.22.1 # homeassistant.components.netgear -pynetgear==0.9.1 +pynetgear==0.9.2 # homeassistant.components.netio pynetio==0.1.9.1 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index b4d446870b6..dcd9483eaf0 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -1100,7 +1100,7 @@ pymyq==3.1.4 pymysensors==0.22.1 # homeassistant.components.netgear -pynetgear==0.9.1 +pynetgear==0.9.2 # homeassistant.components.nina pynina==0.1.7 From 2328813e692b2fb58a542e0df2081202f039ae5f Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 31 Mar 2022 11:10:16 -0700 Subject: [PATCH 022/238] Don't log the stack trace (#69000) --- homeassistant/components/kodi/media_player.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/kodi/media_player.py b/homeassistant/components/kodi/media_player.py index 7281057ac7e..a07ee14137a 100644 --- a/homeassistant/components/kodi/media_player.py +++ b/homeassistant/components/kodi/media_player.py @@ -447,7 +447,7 @@ class KodiEntity(MediaPlayerEntity): except (jsonrpc_base.jsonrpc.TransportError, CannotConnectError): if not self._connect_error: self._connect_error = True - _LOGGER.error("Unable to connect to Kodi via websocket", exc_info=True) + _LOGGER.error("Unable to connect to Kodi via websocket") await self._clear_connection(False) async def _ping(self): @@ -456,7 +456,7 @@ class KodiEntity(MediaPlayerEntity): except (jsonrpc_base.jsonrpc.TransportError, CannotConnectError): if not self._connect_error: self._connect_error = True - _LOGGER.error("Unable to ping Kodi via websocket", exc_info=True) + _LOGGER.error("Unable to ping Kodi via websocket") await self._clear_connection() async def _async_connect_websocket_if_disconnected(self, *_): From 0adeebfe330b23294562e77aa847189d0fdb39c8 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 31 Mar 2022 11:12:02 -0700 Subject: [PATCH 023/238] Remove deprecated Switchbot import (#69002) --- .../components/switchbot/config_flow.py | 13 ---- homeassistant/components/switchbot/switch.py | 62 ++----------------- tests/components/switchbot/__init__.py | 12 +--- .../components/switchbot/test_config_flow.py | 36 ++--------- 4 files changed, 14 insertions(+), 109 deletions(-) diff --git a/homeassistant/components/switchbot/config_flow.py b/homeassistant/components/switchbot/config_flow.py index 2d4e61bada5..70e032414a7 100644 --- a/homeassistant/components/switchbot/config_flow.py +++ b/homeassistant/components/switchbot/config_flow.py @@ -131,19 +131,6 @@ class SwitchbotConfigFlow(ConfigFlow, domain=DOMAIN): step_id="user", data_schema=data_schema, errors=errors ) - async def async_step_import(self, import_config: dict[str, Any]) -> FlowResult: - """Handle config import from yaml.""" - _LOGGER.debug("import config: %s", import_config) - - import_config[CONF_MAC] = import_config[CONF_MAC].replace("-", ":").lower() - - await self.async_set_unique_id(import_config[CONF_MAC].replace(":", "")) - self._abort_if_unique_id_configured() - - return self.async_create_entry( - title=import_config[CONF_NAME], data=import_config - ) - class SwitchbotOptionsFlowHandler(OptionsFlow): """Handle Switchbot options.""" diff --git a/homeassistant/components/switchbot/switch.py b/homeassistant/components/switchbot/switch.py index de66a437dee..b5507594521 100644 --- a/homeassistant/components/switchbot/switch.py +++ b/homeassistant/components/switchbot/switch.py @@ -5,27 +5,15 @@ import logging from typing import Any from switchbot import Switchbot # pylint: disable=import-error -import voluptuous as vol -from homeassistant.components.switch import ( - PLATFORM_SCHEMA, - SwitchDeviceClass, - SwitchEntity, -) -from homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry -from homeassistant.const import ( - CONF_MAC, - CONF_NAME, - CONF_PASSWORD, - CONF_SENSOR_TYPE, - STATE_ON, -) +from homeassistant.components.switch import SwitchDeviceClass, SwitchEntity +from homeassistant.config_entries import ConfigEntry +from homeassistant.const import CONF_MAC, CONF_NAME, CONF_PASSWORD, STATE_ON from homeassistant.core import HomeAssistant -from homeassistant.helpers import config_validation as cv, entity_platform +from homeassistant.helpers import entity_platform from homeassistant.helpers.restore_state import RestoreEntity -from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType -from .const import ATTR_BOT, CONF_RETRY_COUNT, DATA_COORDINATOR, DEFAULT_NAME, DOMAIN +from .const import CONF_RETRY_COUNT, DATA_COORDINATOR, DOMAIN from .coordinator import SwitchbotDataUpdateCoordinator from .entity import SwitchbotEntity @@ -33,46 +21,6 @@ from .entity import SwitchbotEntity _LOGGER = logging.getLogger(__name__) PARALLEL_UPDATES = 1 -PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( - { - vol.Required(CONF_MAC): cv.string, - vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, - vol.Optional(CONF_PASSWORD): cv.string, - } -) - - -async def async_setup_platform( - hass: HomeAssistant, - config: ConfigType, - async_add_entities: entity_platform.AddEntitiesCallback, - discovery_info: DiscoveryInfoType | None = None, -) -> None: - """Import yaml config and initiates config flow for Switchbot devices.""" - _LOGGER.warning( - "Configuration of the Switchbot switch platform in YAML is deprecated and " - "will be removed in Home Assistant 2022.4; Your existing configuration " - "has been imported into the UI automatically and can be safely removed " - "from your configuration.yaml file" - ) - - # Check if entry config exists and skips import if it does. - if hass.config_entries.async_entries(DOMAIN): - return - - hass.async_create_task( - hass.config_entries.flow.async_init( - DOMAIN, - context={"source": SOURCE_IMPORT}, - data={ - CONF_NAME: config[CONF_NAME], - CONF_PASSWORD: config.get(CONF_PASSWORD, None), - CONF_MAC: config[CONF_MAC].replace("-", ":").lower(), - CONF_SENSOR_TYPE: ATTR_BOT, - }, - ) - ) - async def async_setup_entry( hass: HomeAssistant, diff --git a/tests/components/switchbot/__init__.py b/tests/components/switchbot/__init__.py index 5d01a8d0d68..376406ac50c 100644 --- a/tests/components/switchbot/__init__.py +++ b/tests/components/switchbot/__init__.py @@ -1,7 +1,7 @@ """Tests for the switchbot integration.""" from unittest.mock import patch -from homeassistant.const import CONF_MAC, CONF_NAME, CONF_PASSWORD, CONF_SENSOR_TYPE +from homeassistant.const import CONF_MAC, CONF_NAME, CONF_PASSWORD from homeassistant.core import HomeAssistant from tests.common import MockConfigEntry @@ -38,15 +38,9 @@ USER_INPUT_INVALID = { CONF_MAC: "invalid-mac", } -YAML_CONFIG = { - CONF_NAME: "test-name", - CONF_PASSWORD: "test-password", - CONF_MAC: "e7:89:43:99:99:99", - CONF_SENSOR_TYPE: "bot", -} - -def _patch_async_setup_entry(return_value=True): +def patch_async_setup_entry(return_value=True): + """Patch async setup entry to return True.""" return patch( "homeassistant.components.switchbot.async_setup_entry", return_value=return_value, diff --git a/tests/components/switchbot/test_config_flow.py b/tests/components/switchbot/test_config_flow.py index edd35238034..59871681dfe 100644 --- a/tests/components/switchbot/test_config_flow.py +++ b/tests/components/switchbot/test_config_flow.py @@ -7,7 +7,7 @@ from homeassistant.components.switchbot.const import ( CONF_SCAN_TIMEOUT, CONF_TIME_BETWEEN_UPDATE_COMMAND, ) -from homeassistant.config_entries import SOURCE_IMPORT, SOURCE_USER +from homeassistant.config_entries import SOURCE_USER from homeassistant.const import CONF_MAC, CONF_NAME, CONF_PASSWORD, CONF_SENSOR_TYPE from homeassistant.data_entry_flow import ( RESULT_TYPE_ABORT, @@ -15,13 +15,7 @@ from homeassistant.data_entry_flow import ( RESULT_TYPE_FORM, ) -from . import ( - USER_INPUT, - USER_INPUT_CURTAIN, - YAML_CONFIG, - _patch_async_setup_entry, - init_integration, -) +from . import USER_INPUT, USER_INPUT_CURTAIN, init_integration, patch_async_setup_entry DOMAIN = "switchbot" @@ -36,7 +30,7 @@ async def test_user_form_valid_mac(hass): assert result["step_id"] == "user" assert result["errors"] == {} - with _patch_async_setup_entry() as mock_setup_entry: + with patch_async_setup_entry() as mock_setup_entry: result = await hass.config_entries.flow.async_configure( result["flow_id"], USER_INPUT, @@ -63,7 +57,7 @@ async def test_user_form_valid_mac(hass): assert result["step_id"] == "user" assert result["errors"] == {} - with _patch_async_setup_entry() as mock_setup_entry: + with patch_async_setup_entry() as mock_setup_entry: result = await hass.config_entries.flow.async_configure( result["flow_id"], USER_INPUT_CURTAIN, @@ -90,24 +84,6 @@ async def test_user_form_valid_mac(hass): assert result["reason"] == "no_unconfigured_devices" -async def test_async_step_import(hass): - """Test the config import flow.""" - - with _patch_async_setup_entry() as mock_setup_entry: - result = await hass.config_entries.flow.async_init( - DOMAIN, context={"source": SOURCE_IMPORT}, data=YAML_CONFIG - ) - assert result["type"] == RESULT_TYPE_CREATE_ENTRY - assert result["data"] == { - CONF_MAC: "e7:89:43:99:99:99", - CONF_NAME: "test-name", - CONF_PASSWORD: "test-password", - CONF_SENSOR_TYPE: "bot", - } - - assert len(mock_setup_entry.mock_calls) == 1 - - async def test_user_form_exception(hass, switchbot_config_flow): """Test we handle exception on user form.""" @@ -132,7 +108,7 @@ async def test_user_form_exception(hass, switchbot_config_flow): async def test_options_flow(hass): """Test updating options.""" - with _patch_async_setup_entry() as mock_setup_entry: + with patch_async_setup_entry() as mock_setup_entry: entry = await init_integration(hass) result = await hass.config_entries.options.async_init(entry.entry_id) @@ -161,7 +137,7 @@ async def test_options_flow(hass): # Test changing of entry options. - with _patch_async_setup_entry() as mock_setup_entry: + with patch_async_setup_entry() as mock_setup_entry: entry = await init_integration(hass) result = await hass.config_entries.options.async_init(entry.entry_id) From fa12fd3776abfd771cede5e1c0d7855860e0e1d1 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 31 Mar 2022 11:16:55 -0700 Subject: [PATCH 024/238] Solax: remove deprecated YAML import (#69003) --- homeassistant/components/solax/config_flow.py | 11 ----- homeassistant/components/solax/sensor.py | 41 +------------------ tests/components/solax/test_config_flow.py | 39 ------------------ 3 files changed, 2 insertions(+), 89 deletions(-) diff --git a/homeassistant/components/solax/config_flow.py b/homeassistant/components/solax/config_flow.py index 5c4ef05da4b..56c6989cc7f 100644 --- a/homeassistant/components/solax/config_flow.py +++ b/homeassistant/components/solax/config_flow.py @@ -63,14 +63,3 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): return self.async_show_form( step_id="user", data_schema=STEP_USER_DATA_SCHEMA, errors=errors ) - - async def async_step_import(self, config: dict[str, Any]) -> FlowResult: - """Handle import of solax config from YAML.""" - - import_data = { - CONF_IP_ADDRESS: config[CONF_IP_ADDRESS], - CONF_PORT: config[CONF_PORT], - CONF_PASSWORD: DEFAULT_PASSWORD, - } - - return await self.async_step_user(user_input=import_data) diff --git a/homeassistant/components/solax/sensor.py b/homeassistant/components/solax/sensor.py index 6f1b5ef6cf3..7f9d81ac9b0 100644 --- a/homeassistant/components/solax/sensor.py +++ b/homeassistant/components/solax/sensor.py @@ -3,38 +3,25 @@ from __future__ import annotations import asyncio from datetime import timedelta -import logging from solax.inverter import InverterError -import voluptuous as vol from homeassistant.components.sensor import ( - PLATFORM_SCHEMA, SensorDeviceClass, SensorEntity, SensorStateClass, ) -from homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry -from homeassistant.const import CONF_IP_ADDRESS, CONF_PORT, TEMP_CELSIUS +from homeassistant.config_entries import ConfigEntry +from homeassistant.const import TEMP_CELSIUS from homeassistant.core import HomeAssistant from homeassistant.exceptions import PlatformNotReady -import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity import DeviceInfo from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.event import async_track_time_interval -from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType from .const import DOMAIN, MANUFACTURER -_LOGGER = logging.getLogger(__name__) - DEFAULT_PORT = 80 -PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( - { - vol.Required(CONF_IP_ADDRESS): cv.string, - vol.Optional(CONF_PORT, default=DEFAULT_PORT): cv.port, - }, -) SCAN_INTERVAL = timedelta(seconds=30) @@ -81,30 +68,6 @@ async def async_setup_entry( async_add_entities(devices) -async def async_setup_platform( - hass: HomeAssistant, - config: ConfigType, - async_add_entities: AddEntitiesCallback, - discovery_info: DiscoveryInfoType | None = None, -) -> None: - """Platform setup.""" - - _LOGGER.warning( - "Configuration of the SolaX Power platform in YAML is deprecated and " - "will be removed in Home Assistant 2022.4; Your existing configuration " - "has been imported into the UI automatically and can be safely removed " - "from your configuration.yaml file" - ) - - hass.async_create_task( - hass.config_entries.flow.async_init( - DOMAIN, - context={"source": SOURCE_IMPORT}, - data=config, - ) - ) - - class RealTimeDataEndpoint: """Representation of a Sensor.""" diff --git a/tests/components/solax/test_config_flow.py b/tests/components/solax/test_config_flow.py index 56db8d3f6cb..cb658405860 100644 --- a/tests/components/solax/test_config_flow.py +++ b/tests/components/solax/test_config_flow.py @@ -90,42 +90,3 @@ async def test_form_unknown_error(hass): assert entry_result["type"] == "form" assert entry_result["errors"] == {"base": "unknown"} - - -async def test_import_success(hass): - """Test import success.""" - conf = {CONF_IP_ADDRESS: "192.168.1.87", CONF_PORT: 80} - with patch( - "homeassistant.components.solax.config_flow.real_time_api", - return_value=__mock_real_time_api_success(), - ), patch("solax.RealTimeAPI.get_data", return_value=__mock_get_data()), patch( - "homeassistant.components.solax.async_setup_entry", - return_value=True, - ) as mock_setup_entry: - entry_result = await hass.config_entries.flow.async_init( - DOMAIN, context={"source": config_entries.SOURCE_IMPORT}, data=conf - ) - - assert entry_result["type"] == "create_entry" - assert entry_result["title"] == "ABCDEFGHIJ" - assert entry_result["data"] == { - CONF_IP_ADDRESS: "192.168.1.87", - CONF_PORT: 80, - CONF_PASSWORD: "", - } - assert len(mock_setup_entry.mock_calls) == 1 - - -async def test_import_error(hass): - """Test import success.""" - conf = {CONF_IP_ADDRESS: "192.168.1.87", CONF_PORT: 80} - with patch( - "homeassistant.components.solax.config_flow.real_time_api", - side_effect=ConnectionError, - ): - entry_result = await hass.config_entries.flow.async_init( - DOMAIN, context={"source": config_entries.SOURCE_IMPORT}, data=conf - ) - - assert entry_result["type"] == "form" - assert entry_result["errors"] == {"base": "cannot_connect"} From ff332049e1d333cf62f22f8a7a9ee2bf3b673bfb Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 31 Mar 2022 11:18:17 -0700 Subject: [PATCH 025/238] Nanoleaf: remove deprecated YAML import (#69004) --- .../components/nanoleaf/config_flow.py | 11 ---- homeassistant/components/nanoleaf/light.py | 40 +-------------- tests/components/nanoleaf/test_config_flow.py | 51 +------------------ 3 files changed, 2 insertions(+), 100 deletions(-) diff --git a/homeassistant/components/nanoleaf/config_flow.py b/homeassistant/components/nanoleaf/config_flow.py index 6ae70b32d8e..ed63754697a 100644 --- a/homeassistant/components/nanoleaf/config_flow.py +++ b/homeassistant/components/nanoleaf/config_flow.py @@ -184,17 +184,6 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): return await self.async_setup_finish() - async def async_step_import(self, config: dict[str, Any]) -> FlowResult: - """Handle Nanoleaf configuration import.""" - self._async_abort_entries_match({CONF_HOST: config[CONF_HOST]}) - _LOGGER.debug( - "Importing Nanoleaf on %s from your configuration.yaml", config[CONF_HOST] - ) - self.nanoleaf = Nanoleaf( - async_get_clientsession(self.hass), config[CONF_HOST], config[CONF_TOKEN] - ) - return await self.async_setup_finish() - async def async_setup_finish( self, discovery_integration_import: bool = False ) -> FlowResult: diff --git a/homeassistant/components/nanoleaf/light.py b/homeassistant/components/nanoleaf/light.py index ed3476c4576..1cf6bd4d8bf 100644 --- a/homeassistant/components/nanoleaf/light.py +++ b/homeassistant/components/nanoleaf/light.py @@ -1,12 +1,10 @@ """Support for Nanoleaf Lights.""" from __future__ import annotations -import logging import math from typing import Any from aionanoleaf import Nanoleaf -import voluptuous as vol from homeassistant.components.light import ( ATTR_BRIGHTNESS, @@ -14,7 +12,6 @@ from homeassistant.components.light import ( ATTR_EFFECT, ATTR_HS_COLOR, ATTR_TRANSITION, - PLATFORM_SCHEMA, SUPPORT_BRIGHTNESS, SUPPORT_COLOR, SUPPORT_COLOR_TEMP, @@ -22,12 +19,9 @@ from homeassistant.components.light import ( SUPPORT_TRANSITION, LightEntity, ) -from homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry -from homeassistant.const import CONF_HOST, CONF_NAME, CONF_TOKEN +from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant -import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity_platform import AddEntitiesCallback -from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType from homeassistant.helpers.update_coordinator import DataUpdateCoordinator from homeassistant.util.color import ( color_temperature_kelvin_to_mired as kelvin_to_mired, @@ -41,38 +35,6 @@ from .entity import NanoleafEntity RESERVED_EFFECTS = ("*Solid*", "*Static*", "*Dynamic*") DEFAULT_NAME = "Nanoleaf" -PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( - { - vol.Required(CONF_HOST): cv.string, - vol.Required(CONF_TOKEN): cv.string, - vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, - } -) - -_LOGGER = logging.getLogger(__name__) - - -async def async_setup_platform( - hass: HomeAssistant, - config: ConfigType, - async_add_entities: AddEntitiesCallback, - discovery_info: DiscoveryInfoType | None = None, -) -> None: - """Import Nanoleaf light platform.""" - _LOGGER.warning( - "Configuration of the Nanoleaf integration in YAML is deprecated and " - "will be removed in Home Assistant 2022.4; Your existing configuration " - "has been imported into the UI automatically and can be safely removed " - "from your configuration.yaml file" - ) - hass.async_create_task( - hass.config_entries.flow.async_init( - DOMAIN, - context={"source": SOURCE_IMPORT}, - data={CONF_HOST: config[CONF_HOST], CONF_TOKEN: config[CONF_TOKEN]}, - ) - ) - async def async_setup_entry( hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback diff --git a/tests/components/nanoleaf/test_config_flow.py b/tests/components/nanoleaf/test_config_flow.py index 305f88a2e90..0a2a262ce6f 100644 --- a/tests/components/nanoleaf/test_config_flow.py +++ b/tests/components/nanoleaf/test_config_flow.py @@ -3,7 +3,7 @@ from __future__ import annotations from unittest.mock import AsyncMock, MagicMock, patch -from aionanoleaf import InvalidToken, NanoleafException, Unauthorized, Unavailable +from aionanoleaf import InvalidToken, Unauthorized, Unavailable import pytest from homeassistant import config_entries @@ -302,55 +302,6 @@ async def test_reauth(hass: HomeAssistant) -> None: assert entry.data[CONF_TOKEN] == TEST_TOKEN -async def test_import_config(hass: HomeAssistant) -> None: - """Test configuration import.""" - with patch( - "homeassistant.components.nanoleaf.config_flow.Nanoleaf", - return_value=_mock_nanoleaf(TEST_HOST, TEST_TOKEN), - ), patch( - "homeassistant.components.nanoleaf.async_setup_entry", - return_value=True, - ) as mock_setup_entry: - result = await hass.config_entries.flow.async_init( - DOMAIN, - context={"source": config_entries.SOURCE_IMPORT}, - data={CONF_HOST: TEST_HOST, CONF_TOKEN: TEST_TOKEN}, - ) - assert result["type"] == "create_entry" - assert result["title"] == TEST_NAME - assert result["data"] == { - CONF_HOST: TEST_HOST, - CONF_TOKEN: TEST_TOKEN, - } - await hass.async_block_till_done() - assert len(mock_setup_entry.mock_calls) == 1 - - -@pytest.mark.parametrize( - "error, reason", - [ - (Unavailable, "cannot_connect"), - (InvalidToken, "invalid_token"), - (Exception, "unknown"), - ], -) -async def test_import_config_error( - hass: HomeAssistant, error: NanoleafException, reason: str -) -> None: - """Test configuration import with errors in setup_finish.""" - with patch( - "homeassistant.components.nanoleaf.config_flow.Nanoleaf.get_info", - side_effect=error, - ): - result = await hass.config_entries.flow.async_init( - DOMAIN, - context={"source": config_entries.SOURCE_IMPORT}, - data={CONF_HOST: TEST_HOST, CONF_TOKEN: TEST_TOKEN}, - ) - assert result["type"] == "abort" - assert result["reason"] == reason - - @pytest.mark.parametrize( "source, type_in_discovery", [ From 8c65e930d5c9765f597ecec70f9d5f9007668ef7 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 31 Mar 2022 11:20:50 -0700 Subject: [PATCH 026/238] Update tradfri deprecation message (#69005) --- homeassistant/components/tradfri/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/components/tradfri/__init__.py b/homeassistant/components/tradfri/__init__.py index 1971b14b2be..0054b1d7bff 100644 --- a/homeassistant/components/tradfri/__init__.py +++ b/homeassistant/components/tradfri/__init__.py @@ -141,7 +141,7 @@ async def async_setup_entry( # https://www.home-assistant.io/integrations/tradfri/ _LOGGER.warning( "Importing of Tradfri groups has been deprecated due to stability issues " - "and will be removed in Home Assistant core 2022.4" + "and will be removed in Home Assistant core 2022.5" ) # No need to load groups if the user hasn't requested it groups_commands: Command = await api( From bb26ded11553c869699ffc5a64ebfae0a7de7c02 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 31 Mar 2022 13:25:32 -0700 Subject: [PATCH 027/238] iCloud: remove deprecated YAML import (#69006) Co-authored-by: Franck Nijhof --- homeassistant/components/icloud/__init__.py | 50 +------ .../components/icloud/config_flow.py | 4 - tests/components/icloud/conftest.py | 9 ++ tests/components/icloud/test_config_flow.py | 123 +----------------- 4 files changed, 12 insertions(+), 174 deletions(-) diff --git a/homeassistant/components/icloud/__init__.py b/homeassistant/components/icloud/__init__.py index 8b6c8355e40..17cc15b195a 100644 --- a/homeassistant/components/icloud/__init__.py +++ b/homeassistant/components/icloud/__init__.py @@ -1,13 +1,10 @@ """The iCloud component.""" -import logging - import voluptuous as vol -from homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry +from homeassistant.config_entries import ConfigEntry from homeassistant.const import CONF_PASSWORD, CONF_USERNAME from homeassistant.core import HomeAssistant, ServiceCall import homeassistant.helpers.config_validation as cv -from homeassistant.helpers.typing import ConfigType from homeassistant.util import slugify from .account import IcloudAccount @@ -15,9 +12,6 @@ from .const import ( CONF_GPS_ACCURACY_THRESHOLD, CONF_MAX_INTERVAL, CONF_WITH_FAMILY, - DEFAULT_GPS_ACCURACY_THRESHOLD, - DEFAULT_MAX_INTERVAL, - DEFAULT_WITH_FAMILY, DOMAIN, PLATFORMS, STORAGE_KEY, @@ -69,47 +63,7 @@ SERVICE_SCHEMA_LOST_DEVICE = vol.Schema( } ) -ACCOUNT_SCHEMA = vol.Schema( - { - vol.Required(CONF_USERNAME): cv.string, - vol.Required(CONF_PASSWORD): cv.string, - vol.Optional(CONF_WITH_FAMILY, default=DEFAULT_WITH_FAMILY): cv.boolean, - vol.Optional(CONF_MAX_INTERVAL, default=DEFAULT_MAX_INTERVAL): cv.positive_int, - vol.Optional( - CONF_GPS_ACCURACY_THRESHOLD, default=DEFAULT_GPS_ACCURACY_THRESHOLD - ): cv.positive_int, - } -) - -CONFIG_SCHEMA = vol.Schema( - {DOMAIN: vol.Schema(vol.All(cv.ensure_list, [ACCOUNT_SCHEMA]))}, - extra=vol.ALLOW_EXTRA, -) - -_LOGGER = logging.getLogger(__name__) - - -async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: - """Set up iCloud from legacy config file.""" - if (conf := config.get(DOMAIN)) is None: - return True - - # Note: need to remember to cleanup device_tracker (remove async_setup_scanner) - _LOGGER.warning( - "Configuration of the iCloud integration in YAML is deprecated and " - "will be removed in Home Assistant 2022.4; Your existing configuration " - "has been imported into the UI automatically and can be safely removed " - "from your configuration.yaml file" - ) - - for account_conf in conf: - hass.async_create_task( - hass.config_entries.flow.async_init( - DOMAIN, context={"source": SOURCE_IMPORT}, data=account_conf - ) - ) - - return True +CONFIG_SCHEMA = cv.removed(DOMAIN, raise_if_present=False) async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: diff --git a/homeassistant/components/icloud/config_flow.py b/homeassistant/components/icloud/config_flow.py index 3eb6ced782c..f3630abfdaa 100644 --- a/homeassistant/components/icloud/config_flow.py +++ b/homeassistant/components/icloud/config_flow.py @@ -172,10 +172,6 @@ class IcloudFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): return await self._validate_and_create_entry(user_input, "user") - async def async_step_import(self, user_input): - """Import a config entry.""" - return await self.async_step_user(user_input) - async def async_step_reauth(self, user_input=None): """Update password for a config entry that can't authenticate.""" # Store existing entry data so it can be used later and set unique ID diff --git a/tests/components/icloud/conftest.py b/tests/components/icloud/conftest.py index 2230cc2ea32..c8195471878 100644 --- a/tests/components/icloud/conftest.py +++ b/tests/components/icloud/conftest.py @@ -9,3 +9,12 @@ def icloud_bypass_setup_fixture(): """Mock component setup.""" with patch("homeassistant.components.icloud.async_setup_entry", return_value=True): yield + + +@pytest.fixture(autouse=True) +def icloud_not_create_dir(): + """Mock component setup.""" + with patch( + "homeassistant.components.icloud.config_flow.os.path.exists", return_value=True + ): + yield diff --git a/tests/components/icloud/test_config_flow.py b/tests/components/icloud/test_config_flow.py index 59c5ebf24a9..cd72aae0eff 100644 --- a/tests/components/icloud/test_config_flow.py +++ b/tests/components/icloud/test_config_flow.py @@ -18,7 +18,7 @@ from homeassistant.components.icloud.const import ( DEFAULT_WITH_FAMILY, DOMAIN, ) -from homeassistant.config_entries import SOURCE_IMPORT, SOURCE_REAUTH, SOURCE_USER +from homeassistant.config_entries import SOURCE_REAUTH, SOURCE_USER from homeassistant.const import CONF_PASSWORD, CONF_USERNAME from homeassistant.core import HomeAssistant @@ -197,127 +197,6 @@ async def test_user_with_cookie(hass: HomeAssistant, service_authenticated: Magi assert result["data"][CONF_GPS_ACCURACY_THRESHOLD] == DEFAULT_GPS_ACCURACY_THRESHOLD -async def test_import(hass: HomeAssistant, service: MagicMock): - """Test import step.""" - # import with required - result = await hass.config_entries.flow.async_init( - DOMAIN, - context={"source": SOURCE_IMPORT}, - data={CONF_USERNAME: USERNAME, CONF_PASSWORD: PASSWORD}, - ) - assert result["type"] == data_entry_flow.RESULT_TYPE_FORM - assert result["step_id"] == "trusted_device" - - # import with all - result = await hass.config_entries.flow.async_init( - DOMAIN, - context={"source": SOURCE_IMPORT}, - data={ - CONF_USERNAME: USERNAME_2, - CONF_PASSWORD: PASSWORD, - CONF_WITH_FAMILY: WITH_FAMILY, - CONF_MAX_INTERVAL: MAX_INTERVAL, - CONF_GPS_ACCURACY_THRESHOLD: GPS_ACCURACY_THRESHOLD, - }, - ) - assert result["type"] == data_entry_flow.RESULT_TYPE_FORM - assert result["step_id"] == "trusted_device" - - -async def test_import_with_cookie( - hass: HomeAssistant, service_authenticated: MagicMock -): - """Test import step with presence of a cookie.""" - # import with required - result = await hass.config_entries.flow.async_init( - DOMAIN, - context={"source": SOURCE_IMPORT}, - data={CONF_USERNAME: USERNAME, CONF_PASSWORD: PASSWORD}, - ) - assert result["type"] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY - assert result["result"].unique_id == USERNAME - assert result["title"] == USERNAME - assert result["data"][CONF_USERNAME] == USERNAME - assert result["data"][CONF_PASSWORD] == PASSWORD - assert result["data"][CONF_WITH_FAMILY] == DEFAULT_WITH_FAMILY - assert result["data"][CONF_MAX_INTERVAL] == DEFAULT_MAX_INTERVAL - assert result["data"][CONF_GPS_ACCURACY_THRESHOLD] == DEFAULT_GPS_ACCURACY_THRESHOLD - - # import with all - result = await hass.config_entries.flow.async_init( - DOMAIN, - context={"source": SOURCE_IMPORT}, - data={ - CONF_USERNAME: USERNAME_2, - CONF_PASSWORD: PASSWORD, - CONF_WITH_FAMILY: WITH_FAMILY, - CONF_MAX_INTERVAL: MAX_INTERVAL, - CONF_GPS_ACCURACY_THRESHOLD: GPS_ACCURACY_THRESHOLD, - }, - ) - assert result["type"] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY - assert result["result"].unique_id == USERNAME_2 - assert result["title"] == USERNAME_2 - assert result["data"][CONF_USERNAME] == USERNAME_2 - assert result["data"][CONF_PASSWORD] == PASSWORD - assert result["data"][CONF_WITH_FAMILY] == WITH_FAMILY - assert result["data"][CONF_MAX_INTERVAL] == MAX_INTERVAL - assert result["data"][CONF_GPS_ACCURACY_THRESHOLD] == GPS_ACCURACY_THRESHOLD - - -async def test_two_accounts_setup( - hass: HomeAssistant, service_authenticated: MagicMock -): - """Test to setup two accounts.""" - MockConfigEntry( - domain=DOMAIN, - data={CONF_USERNAME: USERNAME, CONF_PASSWORD: PASSWORD}, - unique_id=USERNAME, - ).add_to_hass(hass) - - # import with required - result = await hass.config_entries.flow.async_init( - DOMAIN, - context={"source": SOURCE_IMPORT}, - data={CONF_USERNAME: USERNAME_2, CONF_PASSWORD: PASSWORD}, - ) - assert result["type"] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY - assert result["result"].unique_id == USERNAME_2 - assert result["title"] == USERNAME_2 - assert result["data"][CONF_USERNAME] == USERNAME_2 - assert result["data"][CONF_PASSWORD] == PASSWORD - assert result["data"][CONF_WITH_FAMILY] == DEFAULT_WITH_FAMILY - assert result["data"][CONF_MAX_INTERVAL] == DEFAULT_MAX_INTERVAL - assert result["data"][CONF_GPS_ACCURACY_THRESHOLD] == DEFAULT_GPS_ACCURACY_THRESHOLD - - -async def test_already_setup(hass: HomeAssistant): - """Test we abort if the account is already setup.""" - MockConfigEntry( - domain=DOMAIN, - data={CONF_USERNAME: USERNAME, CONF_PASSWORD: PASSWORD}, - unique_id=USERNAME, - ).add_to_hass(hass) - - # Should fail, same USERNAME (import) - result = await hass.config_entries.flow.async_init( - DOMAIN, - context={"source": SOURCE_IMPORT}, - data={CONF_USERNAME: USERNAME, CONF_PASSWORD: PASSWORD}, - ) - assert result["type"] == data_entry_flow.RESULT_TYPE_ABORT - assert result["reason"] == "already_configured" - - # Should fail, same USERNAME (flow) - result = await hass.config_entries.flow.async_init( - DOMAIN, - context={"source": SOURCE_USER}, - data={CONF_USERNAME: USERNAME, CONF_PASSWORD: PASSWORD}, - ) - assert result["type"] == data_entry_flow.RESULT_TYPE_ABORT - assert result["reason"] == "already_configured" - - async def test_login_failed(hass: HomeAssistant): """Test when we have errors during login.""" with patch( From 7eecf486453cc9bd0cd3437d47305270592eaa11 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 31 Mar 2022 12:04:55 -0700 Subject: [PATCH 028/238] DNS IP: Remove deprecated YAML import (#69007) Co-authored-by: Franck Nijhof --- homeassistant/components/dnsip/__init__.py | 4 -- homeassistant/components/dnsip/config_flow.py | 8 --- homeassistant/components/dnsip/sensor.py | 46 +------------- tests/components/dnsip/test_config_flow.py | 60 ------------------- 4 files changed, 2 insertions(+), 116 deletions(-) diff --git a/homeassistant/components/dnsip/__init__.py b/homeassistant/components/dnsip/__init__.py index 2f20f18580e..f679fb4ad30 100644 --- a/homeassistant/components/dnsip/__init__.py +++ b/homeassistant/components/dnsip/__init__.py @@ -1,15 +1,11 @@ """The dnsip component.""" from __future__ import annotations -import logging - from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant from .const import PLATFORMS -_LOGGER = logging.getLogger(__name__) - async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: """Set up DNS IP from a config entry.""" diff --git a/homeassistant/components/dnsip/config_flow.py b/homeassistant/components/dnsip/config_flow.py index 2db0034b697..a5b51f06a45 100644 --- a/homeassistant/components/dnsip/config_flow.py +++ b/homeassistant/components/dnsip/config_flow.py @@ -82,14 +82,6 @@ class DnsIPConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): """Return Option handler.""" return DnsIPOptionsFlowHandler(config_entry) - async def async_step_import(self, config: dict[str, Any]) -> FlowResult: - """Import a configuration from config.yaml.""" - - hostname = config.get(CONF_HOSTNAME, DEFAULT_HOSTNAME) - self._async_abort_entries_match({CONF_HOSTNAME: hostname}) - config[CONF_HOSTNAME] = hostname - return await self.async_step_user(user_input=config) - async def async_step_user( self, user_input: dict[str, Any] | None = None ) -> FlowResult: diff --git a/homeassistant/components/dnsip/sensor.py b/homeassistant/components/dnsip/sensor.py index 7dfc3aaa544..a770afe388d 100644 --- a/homeassistant/components/dnsip/sensor.py +++ b/homeassistant/components/dnsip/sensor.py @@ -6,20 +6,14 @@ import logging import aiodns from aiodns.error import DNSError -import voluptuous as vol -from homeassistant.components.sensor import ( - PLATFORM_SCHEMA as PARENT_PLATFORM_SCHEMA, - SensorEntity, -) -from homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry +from homeassistant.components.sensor import SensorEntity +from homeassistant.config_entries import ConfigEntry from homeassistant.const import CONF_NAME from homeassistant.core import HomeAssistant -import homeassistant.helpers.config_validation as cv from homeassistant.helpers.device_registry import DeviceEntryType from homeassistant.helpers.entity import DeviceInfo from homeassistant.helpers.entity_platform import AddEntitiesCallback -from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType from .const import ( CONF_HOSTNAME, @@ -27,10 +21,6 @@ from .const import ( CONF_IPV6, CONF_RESOLVER, CONF_RESOLVER_IPV6, - DEFAULT_HOSTNAME, - DEFAULT_IPV6, - DEFAULT_RESOLVER, - DEFAULT_RESOLVER_IPV6, DOMAIN, ) @@ -38,38 +28,6 @@ _LOGGER = logging.getLogger(__name__) SCAN_INTERVAL = timedelta(seconds=120) -PLATFORM_SCHEMA = PARENT_PLATFORM_SCHEMA.extend( - { - vol.Optional(CONF_NAME): cv.string, - vol.Optional(CONF_HOSTNAME, default=DEFAULT_HOSTNAME): cv.string, - vol.Optional(CONF_RESOLVER, default=DEFAULT_RESOLVER): cv.string, - vol.Optional(CONF_RESOLVER_IPV6, default=DEFAULT_RESOLVER_IPV6): cv.string, - vol.Optional(CONF_IPV6, default=DEFAULT_IPV6): cv.boolean, - } -) - - -async def async_setup_platform( - hass: HomeAssistant, - config: ConfigType, - async_add_devices: AddEntitiesCallback, - discovery_info: DiscoveryInfoType | None = None, -) -> None: - """Set up the DNS IP sensor.""" - _LOGGER.warning( - "Configuration of the DNS IP platform in YAML is deprecated and will be " - "removed in Home Assistant 2022.4; Your existing configuration " - "has been imported into the UI automatically and can be safely removed " - "from your configuration.yaml file" - ) - hass.async_create_task( - hass.config_entries.flow.async_init( - DOMAIN, - context={"source": SOURCE_IMPORT}, - data=config, - ) - ) - async def async_setup_entry( hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback diff --git a/tests/components/dnsip/test_config_flow.py b/tests/components/dnsip/test_config_flow.py index f4684eb1cc4..51e169b8bb5 100644 --- a/tests/components/dnsip/test_config_flow.py +++ b/tests/components/dnsip/test_config_flow.py @@ -146,66 +146,6 @@ async def test_form_error(hass: HomeAssistant) -> None: assert result2["errors"] == {"base": "invalid_hostname"} -@pytest.mark.parametrize( - "p_input,p_output,p_options", - [ - ( - {CONF_HOSTNAME: "home-assistant.io"}, - { - "hostname": "home-assistant.io", - "name": "home-assistant.io", - "ipv4": True, - "ipv6": True, - }, - { - "resolver": "208.67.222.222", - "resolver_ipv6": "2620:0:ccc::2", - }, - ), - ( - {}, - { - "hostname": "myip.opendns.com", - "name": "myip", - "ipv4": True, - "ipv6": True, - }, - { - "resolver": "208.67.222.222", - "resolver_ipv6": "2620:0:ccc::2", - }, - ), - ], -) -async def test_import_flow_success( - hass: HomeAssistant, - p_input: dict[str, str], - p_output: dict[str, str], - p_options: dict[str, str], -) -> None: - """Test a successful import of YAML.""" - - with patch( - "homeassistant.components.dnsip.config_flow.aiodns.DNSResolver", - return_value=RetrieveDNS(), - ), patch( - "homeassistant.components.dnsip.async_setup_entry", - return_value=True, - ) as mock_setup_entry: - result2 = await hass.config_entries.flow.async_init( - DOMAIN, - context={"source": config_entries.SOURCE_IMPORT}, - data=p_input, - ) - await hass.async_block_till_done() - - assert result2["type"] == RESULT_TYPE_CREATE_ENTRY - assert result2["title"] == p_output["name"] - assert result2["data"] == p_output - assert result2["options"] == p_options - assert len(mock_setup_entry.mock_calls) == 1 - - async def test_flow_already_exist(hass: HomeAssistant) -> None: """Test flow when unique id already exist.""" From b7e3e7a8e6afcd969e47c6b4cd780963b26f89e9 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 31 Mar 2022 11:23:52 -0700 Subject: [PATCH 029/238] Launch Library: remove deprecated YAML import (#69008) --- .../components/launch_library/config_flow.py | 5 --- .../components/launch_library/sensor.py | 36 +------------------ .../launch_library/test_config_flow.py | 20 +---------- 3 files changed, 2 insertions(+), 59 deletions(-) diff --git a/homeassistant/components/launch_library/config_flow.py b/homeassistant/components/launch_library/config_flow.py index 1023bb84079..d57bc3b7d01 100644 --- a/homeassistant/components/launch_library/config_flow.py +++ b/homeassistant/components/launch_library/config_flow.py @@ -4,7 +4,6 @@ from __future__ import annotations from typing import Any from homeassistant import config_entries -from homeassistant.const import CONF_NAME from homeassistant.data_entry_flow import FlowResult from .const import DOMAIN @@ -27,7 +26,3 @@ class LaunchLibraryFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): return self.async_create_entry(title="Launch Library", data=user_input) return self.async_show_form(step_id="user") - - async def async_step_import(self, conf: dict[str, Any]) -> FlowResult: - """Import a configuration from config.yaml.""" - return await self.async_step_user(user_input={CONF_NAME: conf[CONF_NAME]}) diff --git a/homeassistant/components/launch_library/sensor.py b/homeassistant/components/launch_library/sensor.py index fac62c9bb87..85183a2d616 100644 --- a/homeassistant/components/launch_library/sensor.py +++ b/homeassistant/components/launch_library/sensor.py @@ -4,25 +4,20 @@ from __future__ import annotations from collections.abc import Callable from dataclasses import dataclass from datetime import datetime -import logging from typing import Any from pylaunches.objects.event import Event from pylaunches.objects.launch import Launch -import voluptuous as vol from homeassistant.components.sensor import ( - PLATFORM_SCHEMA, SensorDeviceClass, SensorEntity, SensorEntityDescription, ) -from homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry +from homeassistant.config_entries import ConfigEntry from homeassistant.const import CONF_NAME, PERCENTAGE from homeassistant.core import HomeAssistant, callback -import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity_platform import AddEntitiesCallback -from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType from homeassistant.helpers.update_coordinator import ( CoordinatorEntity, DataUpdateCoordinator, @@ -34,13 +29,6 @@ from .const import DOMAIN DEFAULT_NEXT_LAUNCH_NAME = "Next launch" -_LOGGER = logging.getLogger(__name__) - - -PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( - {vol.Optional(CONF_NAME, default=DEFAULT_NEXT_LAUNCH_NAME): cv.string} -) - @dataclass class LaunchLibrarySensorEntityDescriptionMixin: @@ -137,28 +125,6 @@ SENSOR_DESCRIPTIONS: tuple[LaunchLibrarySensorEntityDescription, ...] = ( ) -async def async_setup_platform( - hass: HomeAssistant, - config: ConfigType, - async_add_entities: AddEntitiesCallback, - discovery_info: DiscoveryInfoType | None = None, -) -> None: - """Import Launch Library configuration from yaml.""" - _LOGGER.warning( - "Configuration of the launch_library platform in YAML is deprecated and will be " - "removed in Home Assistant 2022.4; Your existing configuration " - "has been imported into the UI automatically and can be safely removed " - "from your configuration.yaml file" - ) - hass.async_create_task( - hass.config_entries.flow.async_init( - DOMAIN, - context={"source": SOURCE_IMPORT}, - data=config, - ) - ) - - async def async_setup_entry( hass: HomeAssistant, entry: ConfigEntry, diff --git a/tests/components/launch_library/test_config_flow.py b/tests/components/launch_library/test_config_flow.py index 1b8f2bde453..5b6cb85cfee 100644 --- a/tests/components/launch_library/test_config_flow.py +++ b/tests/components/launch_library/test_config_flow.py @@ -3,29 +3,11 @@ from unittest.mock import patch from homeassistant import data_entry_flow from homeassistant.components.launch_library.const import DOMAIN -from homeassistant.components.launch_library.sensor import DEFAULT_NEXT_LAUNCH_NAME -from homeassistant.config_entries import SOURCE_IMPORT, SOURCE_USER -from homeassistant.const import CONF_NAME +from homeassistant.config_entries import SOURCE_USER from tests.common import MockConfigEntry -async def test_import(hass): - """Test entry will be imported.""" - - imported_config = {CONF_NAME: DEFAULT_NEXT_LAUNCH_NAME} - - with patch( - "homeassistant.components.launch_library.async_setup_entry", return_value=True - ): - - result = await hass.config_entries.flow.async_init( - DOMAIN, context={"source": SOURCE_IMPORT}, data=imported_config - ) - assert result.get("type") == data_entry_flow.RESULT_TYPE_CREATE_ENTRY - assert result.get("result").data == imported_config - - async def test_create_entry(hass): """Test we can finish a config flow.""" From a630e7dc4902ec9fb6138ed0f4767a4f3a2664da Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 31 Mar 2022 11:25:01 -0700 Subject: [PATCH 030/238] Version: remove deprecated YAML import (#69010) --- homeassistant/components/version/sensor.py | 60 +----------- tests/components/version/test_sensor.py | 101 +-------------------- 2 files changed, 6 insertions(+), 155 deletions(-) diff --git a/homeassistant/components/version/sensor.py b/homeassistant/components/version/sensor.py index f0583a19068..82e49155603 100644 --- a/homeassistant/components/version/sensor.py +++ b/homeassistant/components/version/sensor.py @@ -1,69 +1,19 @@ """Sensor that can display the current Home Assistant versions.""" from __future__ import annotations -from typing import Any, Final +from typing import Any -import voluptuous as vol -from voluptuous.schema_builder import Schema - -from homeassistant.components.sensor import ( - PLATFORM_SCHEMA as SENSOR_PLATFORM_SCHEMA, - SensorEntity, - SensorEntityDescription, -) -from homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry +from homeassistant.components.sensor import SensorEntity, SensorEntityDescription +from homeassistant.config_entries import ConfigEntry from homeassistant.const import CONF_NAME from homeassistant.core import HomeAssistant -import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity_platform import AddEntitiesCallback -from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType, StateType +from homeassistant.helpers.typing import StateType -from .const import ( - ATTR_SOURCE, - CONF_BETA, - CONF_IMAGE, - CONF_SOURCE, - DEFAULT_BETA, - DEFAULT_IMAGE, - DEFAULT_NAME, - DEFAULT_SOURCE, - DOMAIN, - LOGGER, - VALID_IMAGES, - VALID_SOURCES, -) +from .const import CONF_SOURCE, DEFAULT_NAME, DOMAIN from .coordinator import VersionDataUpdateCoordinator from .entity import VersionEntity -PLATFORM_SCHEMA: Final[Schema] = SENSOR_PLATFORM_SCHEMA.extend( - { - vol.Optional(CONF_BETA, default=DEFAULT_BETA): cv.boolean, - vol.Optional(CONF_IMAGE, default=DEFAULT_IMAGE): vol.In(VALID_IMAGES), - vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, - vol.Optional(CONF_SOURCE, default=DEFAULT_SOURCE): vol.In(VALID_SOURCES), - } -) - - -async def async_setup_platform( - hass: HomeAssistant, - config: ConfigType, - async_add_entities: AddEntitiesCallback, - discovery_info: DiscoveryInfoType | None = None, -) -> None: - """Set up the legacy version sensor platform.""" - LOGGER.warning( - "Configuration of the Version platform in YAML is deprecated and will be " - "removed in Home Assistant 2022.4; Your existing configuration " - "has been imported into the UI automatically and can be safely removed " - "from your configuration.yaml file" - ) - hass.async_create_task( - hass.config_entries.flow.async_init( - DOMAIN, context={ATTR_SOURCE: SOURCE_IMPORT}, data=config - ) - ) - async def async_setup_entry( hass: HomeAssistant, diff --git a/tests/components/version/test_sensor.py b/tests/components/version/test_sensor.py index 72e63820345..94b6f3f4c56 100644 --- a/tests/components/version/test_sensor.py +++ b/tests/components/version/test_sensor.py @@ -1,54 +1,12 @@ """The test for the version sensor platform.""" from __future__ import annotations -from typing import Any -from unittest.mock import patch - -from pyhaversion import HaVersionChannel, HaVersionSource from pyhaversion.exceptions import HaVersionException import pytest -from homeassistant.components.version.const import ( - CONF_BETA, - CONF_CHANNEL, - CONF_IMAGE, - CONF_VERSION_SOURCE, - DEFAULT_NAME_LATEST, - DOMAIN, - VERSION_SOURCE_DOCKER_HUB, - VERSION_SOURCE_VERSIONS, -) -from homeassistant.config_entries import ConfigEntry -from homeassistant.const import CONF_NAME, CONF_SOURCE from homeassistant.core import HomeAssistant -from homeassistant.setup import async_setup_component -from .common import ( - MOCK_VERSION, - MOCK_VERSION_DATA, - TEST_DEFAULT_IMPORT_CONFIG, - mock_get_version_update, - setup_version_integration, -) - - -async def async_setup_sensor_wrapper( - hass: HomeAssistant, config: dict[str, Any] -) -> ConfigEntry: - """Set up the Version sensor platform.""" - with patch( - "pyhaversion.HaVersion.get_version", - return_value=(MOCK_VERSION, MOCK_VERSION_DATA), - ): - assert await async_setup_component( - hass, "sensor", {"sensor": {"platform": DOMAIN, **config}} - ) - await hass.async_block_till_done() - - config_entries = hass.config_entries.async_entries(DOMAIN) - config_entry = config_entries[-1] - assert config_entry.source == "import" - return config_entry +from .common import MOCK_VERSION, mock_get_version_update, setup_version_integration async def test_version_sensor(hass: HomeAssistant): @@ -73,60 +31,3 @@ async def test_update(hass: HomeAssistant, caplog: pytest.LogCaptureFixture): await mock_get_version_update(hass, side_effect=HaVersionException) assert hass.states.get("sensor.local_installation").state == "unavailable" assert "Error fetching version data" in caplog.text - - -@pytest.mark.parametrize( - "yaml,converted", - ( - ( - {}, - TEST_DEFAULT_IMPORT_CONFIG, - ), - ( - {CONF_NAME: "test"}, - {**TEST_DEFAULT_IMPORT_CONFIG, CONF_NAME: "test"}, - ), - ( - {CONF_SOURCE: "hassio", CONF_IMAGE: "odroid-n2"}, - { - **TEST_DEFAULT_IMPORT_CONFIG, - CONF_NAME: DEFAULT_NAME_LATEST, - CONF_SOURCE: HaVersionSource.SUPERVISOR, - CONF_VERSION_SOURCE: VERSION_SOURCE_VERSIONS, - CONF_IMAGE: "odroid-n2", - }, - ), - ( - {CONF_SOURCE: "docker"}, - { - **TEST_DEFAULT_IMPORT_CONFIG, - CONF_NAME: DEFAULT_NAME_LATEST, - CONF_SOURCE: HaVersionSource.CONTAINER, - CONF_VERSION_SOURCE: VERSION_SOURCE_DOCKER_HUB, - }, - ), - ( - {CONF_BETA: True}, - { - **TEST_DEFAULT_IMPORT_CONFIG, - CONF_CHANNEL: HaVersionChannel.BETA, - }, - ), - ( - {CONF_SOURCE: "container", CONF_IMAGE: "odroid-n2"}, - { - **TEST_DEFAULT_IMPORT_CONFIG, - CONF_NAME: DEFAULT_NAME_LATEST, - CONF_SOURCE: HaVersionSource.CONTAINER, - CONF_VERSION_SOURCE: VERSION_SOURCE_DOCKER_HUB, - CONF_IMAGE: "odroid-n2-homeassistant", - }, - ), - ), -) -async def test_config_import( - hass: HomeAssistant, yaml: dict[str, Any], converted: dict[str, Any] -) -> None: - """Test importing YAML configuration.""" - config_entry = await async_setup_sensor_wrapper(hass, yaml) - assert config_entry.data == converted From c73f42310236ebff491357354f06fd9b0b21ec5b Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 31 Mar 2022 14:30:11 -0700 Subject: [PATCH 031/238] Device Automation: enforce passing in device-automation-enum (#69013) --- .../components/device_automation/__init__.py | 42 ++++--------------- .../components/device_automation/test_init.py | 7 ---- .../components/webostv/test_device_trigger.py | 5 ++- 3 files changed, 12 insertions(+), 42 deletions(-) diff --git a/homeassistant/components/device_automation/__init__.py b/homeassistant/components/device_automation/__init__.py index 75613b3d118..46a3bf6815d 100644 --- a/homeassistant/components/device_automation/__init__.py +++ b/homeassistant/components/device_automation/__init__.py @@ -20,7 +20,6 @@ from homeassistant.helpers import ( device_registry as dr, entity_registry as er, ) -from homeassistant.helpers.frame import report from homeassistant.helpers.typing import ConfigType from homeassistant.loader import IntegrationNotFound, bind_hass from homeassistant.requirements import async_get_integration_with_requirements @@ -88,24 +87,6 @@ TYPES = { } -@bind_hass -async def async_get_device_automations( - hass: HomeAssistant, - automation_type: DeviceAutomationType | str, - device_ids: Iterable[str] | None = None, -) -> Mapping[str, Any]: - """Return all the device automations for a type optionally limited to specific device ids.""" - if isinstance(automation_type, str): - report( - "uses str for async_get_device_automations automation_type. This is " - "deprecated and will stop working in Home Assistant 2022.4, it should be " - "updated to use DeviceAutomationType instead", - error_if_core=False, - ) - automation_type = DeviceAutomationType[automation_type.upper()] - return await _async_get_device_automations(hass, automation_type, device_ids) - - async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: """Set up device automation.""" websocket_api.async_register_command(hass, websocket_device_automation_list_actions) @@ -156,26 +137,18 @@ async def async_get_device_automation_platform( # noqa: D103 @overload async def async_get_device_automation_platform( # noqa: D103 - hass: HomeAssistant, domain: str, automation_type: DeviceAutomationType | str + hass: HomeAssistant, domain: str, automation_type: DeviceAutomationType ) -> "DeviceAutomationPlatformType": ... async def async_get_device_automation_platform( - hass: HomeAssistant, domain: str, automation_type: DeviceAutomationType | str + hass: HomeAssistant, domain: str, automation_type: DeviceAutomationType ) -> "DeviceAutomationPlatformType": """Load device automation platform for integration. Throws InvalidDeviceAutomationConfig if the integration is not found or does not support device automation. """ - if isinstance(automation_type, str): - report( - "uses str for async_get_device_automation_platform automation_type. This " - "is deprecated and will stop working in Home Assistant 2022.4, it should " - "be updated to use DeviceAutomationType instead", - error_if_core=False, - ) - automation_type = DeviceAutomationType[automation_type.upper()] platform_name = automation_type.value.section try: integration = await async_get_integration_with_requirements(hass, domain) @@ -215,10 +188,11 @@ async def _async_get_device_automations_from_domain( ) -async def _async_get_device_automations( +@bind_hass +async def async_get_device_automations( hass: HomeAssistant, automation_type: DeviceAutomationType, - device_ids: Iterable[str] | None, + device_ids: Iterable[str] | None = None, ) -> Mapping[str, list[dict[str, Any]]]: """List device automations.""" device_registry = dr.async_get(hass) @@ -336,7 +310,7 @@ async def websocket_device_automation_list_actions(hass, connection, msg): """Handle request for device actions.""" device_id = msg["device_id"] actions = ( - await _async_get_device_automations( + await async_get_device_automations( hass, DeviceAutomationType.ACTION, [device_id] ) ).get(device_id) @@ -355,7 +329,7 @@ async def websocket_device_automation_list_conditions(hass, connection, msg): """Handle request for device conditions.""" device_id = msg["device_id"] conditions = ( - await _async_get_device_automations( + await async_get_device_automations( hass, DeviceAutomationType.CONDITION, [device_id] ) ).get(device_id) @@ -374,7 +348,7 @@ async def websocket_device_automation_list_triggers(hass, connection, msg): """Handle request for device triggers.""" device_id = msg["device_id"] triggers = ( - await _async_get_device_automations( + await async_get_device_automations( hass, DeviceAutomationType.TRIGGER, [device_id] ) ).get(device_id) diff --git a/tests/components/device_automation/test_init.py b/tests/components/device_automation/test_init.py index f7b1339014a..ad6a08814ff 100644 --- a/tests/components/device_automation/test_init.py +++ b/tests/components/device_automation/test_init.py @@ -404,13 +404,6 @@ async def test_async_get_device_automations_single_device_trigger( assert device_entry.id in result assert len(result[device_entry.id]) == 3 - # Test deprecated str automation_type works, to be removed in 2022.4 - result = await device_automation.async_get_device_automations( - hass, "trigger", [device_entry.id] - ) - assert device_entry.id in result - assert len(result[device_entry.id]) == 3 # toggled, turned_on, turned_off - async def test_async_get_device_automations_all_devices_trigger( hass, device_reg, entity_reg diff --git a/tests/components/webostv/test_device_trigger.py b/tests/components/webostv/test_device_trigger.py index fb8512d56f1..337b4a8acae 100644 --- a/tests/components/webostv/test_device_trigger.py +++ b/tests/components/webostv/test_device_trigger.py @@ -2,6 +2,7 @@ import pytest from homeassistant.components import automation +from homeassistant.components.device_automation import DeviceAutomationType from homeassistant.components.device_automation.exceptions import ( InvalidDeviceAutomationConfig, ) @@ -31,7 +32,9 @@ async def test_get_triggers(hass, client): "device_id": device.id, } - triggers = await async_get_device_automations(hass, "trigger", device.id) + triggers = await async_get_device_automations( + hass, DeviceAutomationType.TRIGGER, device.id + ) assert turn_on_trigger in triggers From a1ebea271c9862ae0c33e4e0d51e6940d3a787cf Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 31 Mar 2022 13:10:07 -0700 Subject: [PATCH 032/238] Enforce RegistryEntryDisabler enum (#69017) Co-authored-by: Franck Nijhof --- homeassistant/helpers/entity_registry.py | 38 ++++++------------------ tests/components/prometheus/test_init.py | 7 +++-- tests/helpers/test_entity_registry.py | 23 +++++++------- 3 files changed, 27 insertions(+), 41 deletions(-) diff --git a/homeassistant/helpers/entity_registry.py b/homeassistant/helpers/entity_registry.py index c02ffde4672..6c1c443ad2b 100644 --- a/homeassistant/helpers/entity_registry.py +++ b/homeassistant/helpers/entity_registry.py @@ -44,7 +44,6 @@ from homeassistant.util.yaml import load_yaml from . import device_registry as dr, storage from .device_registry import EVENT_DEVICE_REGISTRY_UPDATED -from .frame import report from .typing import UNDEFINED, UndefinedType if TYPE_CHECKING: @@ -92,14 +91,6 @@ class RegistryEntryHider(StrEnum): USER = "user" -# DISABLED_* are deprecated, to be removed in 2022.3 -DISABLED_CONFIG_ENTRY = RegistryEntryDisabler.CONFIG_ENTRY.value -DISABLED_DEVICE = RegistryEntryDisabler.DEVICE.value -DISABLED_HASS = RegistryEntryDisabler.HASS.value -DISABLED_INTEGRATION = RegistryEntryDisabler.INTEGRATION.value -DISABLED_USER = RegistryEntryDisabler.USER.value - - def _convert_to_entity_category( value: EntityCategory | str | None, raise_report: bool = True ) -> EntityCategory | None: @@ -389,17 +380,10 @@ class EntityRegistry: domain, suggested_object_id or f"{platform}_{unique_id}", known_object_ids ) - if isinstance(disabled_by, str) and not isinstance( - disabled_by, RegistryEntryDisabler - ): - report( # type: ignore[unreachable] - "uses str for entity registry disabled_by. This is deprecated and will " - "stop working in Home Assistant 2022.3, it should be updated to use " - "RegistryEntryDisabler instead", - error_if_core=False, - ) - disabled_by = RegistryEntryDisabler(disabled_by) - elif ( + if disabled_by and not isinstance(disabled_by, RegistryEntryDisabler): + raise ValueError("disabled_by must be a RegistryEntryDisabler value") + + if ( disabled_by is None and config_entry and config_entry.pref_disable_new_entities @@ -537,16 +521,12 @@ class EntityRegistry: new_values: dict[str, Any] = {} # Dict with new key/value pairs old_values: dict[str, Any] = {} # Dict with old key/value pairs - if isinstance(disabled_by, str) and not isinstance( - disabled_by, RegistryEntryDisabler + if ( + disabled_by + and disabled_by is not UNDEFINED + and not isinstance(disabled_by, RegistryEntryDisabler) ): - report( # type: ignore[unreachable] - "uses str for entity registry disabled_by. This is deprecated and will " - "stop working in Home Assistant 2022.3, it should be updated to use " - "RegistryEntryDisabler instead", - error_if_core=False, - ) - disabled_by = RegistryEntryDisabler(disabled_by) + raise ValueError("disabled_by must be a RegistryEntryDisabler value") for attr_name, value in ( ("area_id", area_id), diff --git a/tests/components/prometheus/test_init.py b/tests/components/prometheus/test_init.py index 096f1405168..5864b551b3c 100644 --- a/tests/components/prometheus/test_init.py +++ b/tests/components/prometheus/test_init.py @@ -782,9 +782,12 @@ async def test_disabling_entity( assert "climate.heatpump" in registry.entities registry.async_update_entity( entity_id=data["sensor_1"].entity_id, - disabled_by="user", + disabled_by=entity_registry.RegistryEntryDisabler.USER, + ) + registry.async_update_entity( + entity_id="climate.heatpump", + disabled_by=entity_registry.RegistryEntryDisabler.USER, ) - registry.async_update_entity(entity_id="climate.heatpump", disabled_by="user") await hass.async_block_till_done() body = await generate_latest_metrics(client) diff --git a/tests/helpers/test_entity_registry.py b/tests/helpers/test_entity_registry.py index 7dc749b8592..eeac78a2654 100644 --- a/tests/helpers/test_entity_registry.py +++ b/tests/helpers/test_entity_registry.py @@ -1217,17 +1217,20 @@ def test_entity_registry_items(): assert entities.get_entry(entry2.id) is None -async def test_deprecated_disabled_by_str(hass, registry, caplog): - """Test deprecated str use of disabled_by converts to enum and logs a warning.""" - entry = registry.async_get_or_create( - domain="light.kitchen", - platform="hue", - unique_id="5678", - disabled_by=er.RegistryEntryDisabler.USER.value, - ) +async def test_disabled_by_str_not_allowed(hass): + """Test we need to pass entity category type.""" + reg = er.async_get(hass) - assert entry.disabled_by is er.RegistryEntryDisabler.USER - assert " str for entity registry disabled_by. This is deprecated " in caplog.text + with pytest.raises(ValueError): + reg.async_get_or_create( + "light", "hue", "1234", disabled_by=er.RegistryEntryDisabler.USER.value + ) + + entity_id = reg.async_get_or_create("light", "hue", "1234").entity_id + with pytest.raises(ValueError): + reg.async_update_entity( + entity_id, disabled_by=er.RegistryEntryDisabler.USER.value + ) async def test_deprecated_entity_category_str(hass, registry, caplog): From 00b363d89646df4018503bfcd20a9fb90f050241 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 31 Mar 2022 15:04:33 -0700 Subject: [PATCH 033/238] Enforce EntityCategory enum (#69015) Co-authored-by: Franck Nijhof --- homeassistant/components/mqtt/mixins.py | 2 +- homeassistant/components/neato/switch.py | 2 +- homeassistant/components/update/__init__.py | 2 +- homeassistant/helpers/entity.py | 32 +------------- homeassistant/helpers/entity_registry.py | 44 ++++++++++--------- tests/components/cloud/test_alexa_config.py | 7 +-- tests/components/cloud/test_google_config.py | 7 +-- .../google_assistant/test_google_assistant.py | 7 +-- tests/helpers/test_entity_platform.py | 10 +++-- tests/helpers/test_entity_registry.py | 33 +++++--------- tests/helpers/test_service.py | 7 +-- 11 files changed, 63 insertions(+), 90 deletions(-) diff --git a/homeassistant/components/mqtt/mixins.py b/homeassistant/components/mqtt/mixins.py index 659d0debe31..09efb384196 100644 --- a/homeassistant/components/mqtt/mixins.py +++ b/homeassistant/components/mqtt/mixins.py @@ -814,7 +814,7 @@ class MqttEntity( return self._config[CONF_ENABLED_BY_DEFAULT] @property - def entity_category(self) -> EntityCategory | str | None: + def entity_category(self) -> EntityCategory | None: """Return the entity category if any.""" return self._config.get(CONF_ENTITY_CATEGORY) diff --git a/homeassistant/components/neato/switch.py b/homeassistant/components/neato/switch.py index 8817e280f43..52226292248 100644 --- a/homeassistant/components/neato/switch.py +++ b/homeassistant/components/neato/switch.py @@ -108,7 +108,7 @@ class NeatoConnectedSwitch(SwitchEntity): ) @property - def entity_category(self) -> str: + def entity_category(self) -> EntityCategory: """Device entity category.""" return EntityCategory.CONFIG diff --git a/homeassistant/components/update/__init__.py b/homeassistant/components/update/__init__.py index 1ecb5d13090..0a78840e66e 100644 --- a/homeassistant/components/update/__init__.py +++ b/homeassistant/components/update/__init__.py @@ -183,7 +183,7 @@ class UpdateEntity(RestoreEntity): return None @property - def entity_category(self) -> EntityCategory | str | None: + def entity_category(self) -> EntityCategory | None: """Return the category of the entity, if any.""" if hasattr(self, "_attr_entity_category"): return self._attr_entity_category diff --git a/homeassistant/helpers/entity.py b/homeassistant/helpers/entity.py index 75ac1e0c1b8..f6869787f5b 100644 --- a/homeassistant/helpers/entity.py +++ b/homeassistant/helpers/entity.py @@ -52,7 +52,6 @@ from . import entity_registry as er from .device_registry import DeviceEntryType from .entity_platform import EntityPlatform from .event import async_track_entity_registry_updated_event -from .frame import report from .typing import StateType _LOGGER = logging.getLogger(__name__) @@ -228,29 +227,6 @@ class EntityPlatformState(Enum): REMOVED = auto() -def convert_to_entity_category( - value: EntityCategory | str | None, raise_report: bool = True -) -> EntityCategory | None: - """Force incoming entity_category to be an enum.""" - - if value is None: - return value - - if not isinstance(value, EntityCategory): - if raise_report: - report( - "uses %s (%s) for entity category. This is deprecated and will " - "stop working in Home Assistant 2022.4, it should be updated to use " - "EntityCategory instead" % (type(value).__name__, value), - error_if_core=False, - ) - try: - return EntityCategory(value) - except ValueError: - return None - return value - - @dataclass class EntityDescription: """A class that describes Home Assistant entities.""" @@ -259,10 +235,7 @@ class EntityDescription: key: str device_class: str | None = None - # Type string is deprecated as of 2021.12, use EntityCategory - entity_category: EntityCategory | Literal[ - "config", "diagnostic", "system" - ] | None = None + entity_category: EntityCategory | None = None entity_registry_enabled_default: bool = True force_update: bool = False icon: str | None = None @@ -491,9 +464,8 @@ class Entity(ABC): """Return the attribution.""" return self._attr_attribution - # Type str is deprecated as of 2021.12, use EntityCategory @property - def entity_category(self) -> EntityCategory | str | None: + def entity_category(self) -> EntityCategory | None: """Return the category of the entity, if any.""" if hasattr(self, "_attr_entity_category"): return self._attr_entity_category diff --git a/homeassistant/helpers/entity_registry.py b/homeassistant/helpers/entity_registry.py index 6c1c443ad2b..f171f3f7f70 100644 --- a/homeassistant/helpers/entity_registry.py +++ b/homeassistant/helpers/entity_registry.py @@ -91,16 +91,6 @@ class RegistryEntryHider(StrEnum): USER = "user" -def _convert_to_entity_category( - value: EntityCategory | str | None, raise_report: bool = True -) -> EntityCategory | None: - """Force incoming entity_category to be an enum.""" - # pylint: disable=import-outside-toplevel - from .entity import convert_to_entity_category - - return convert_to_entity_category(value, raise_report=raise_report) - - @attr.s(slots=True, frozen=True) class RegistryEntry: """Entity Registry Entry.""" @@ -115,9 +105,7 @@ class RegistryEntry: device_id: str | None = attr.ib(default=None) domain: str = attr.ib(init=False, repr=False) disabled_by: RegistryEntryDisabler | None = attr.ib(default=None) - entity_category: EntityCategory | None = attr.ib( - default=None, converter=_convert_to_entity_category - ) + entity_category: EntityCategory | None = attr.ib(default=None) hidden_by: RegistryEntryHider | None = attr.ib(default=None) icon: str | None = attr.ib(default=None) id: str = attr.ib(factory=uuid_util.random_uuid_hex) @@ -339,8 +327,7 @@ class EntityRegistry: capabilities: Mapping[str, Any] | None = None, config_entry: ConfigEntry | None = None, device_id: str | None = None, - # Type str (ENTITY_CATEG*) is deprecated as of 2021.12, use EntityCategory - entity_category: EntityCategory | str | None = None, + entity_category: EntityCategory | None = None, original_device_class: str | None = None, original_icon: str | None = None, original_name: str | None = None, @@ -390,13 +377,18 @@ class EntityRegistry: ): disabled_by = RegistryEntryDisabler.INTEGRATION + from .entity import EntityCategory # pylint: disable=import-outside-toplevel + + if entity_category and not isinstance(entity_category, EntityCategory): + raise ValueError("entity_category must be a valid EntityCategory instance") + entry = RegistryEntry( area_id=area_id, capabilities=capabilities, config_entry_id=config_entry_id, device_id=device_id, disabled_by=disabled_by, - entity_category=_convert_to_entity_category(entity_category), + entity_category=entity_category, entity_id=entity_id, hidden_by=hidden_by, original_device_class=original_device_class, @@ -502,8 +494,7 @@ class EntityRegistry: device_class: str | None | UndefinedType = UNDEFINED, device_id: str | None | UndefinedType = UNDEFINED, disabled_by: RegistryEntryDisabler | None | UndefinedType = UNDEFINED, - # Type str (ENTITY_CATEG*) is deprecated as of 2021.12, use EntityCategory - entity_category: EntityCategory | str | None | UndefinedType = UNDEFINED, + entity_category: EntityCategory | None | UndefinedType = UNDEFINED, hidden_by: RegistryEntryHider | None | UndefinedType = UNDEFINED, icon: str | None | UndefinedType = UNDEFINED, name: str | None | UndefinedType = UNDEFINED, @@ -528,6 +519,15 @@ class EntityRegistry: ): raise ValueError("disabled_by must be a RegistryEntryDisabler value") + from .entity import EntityCategory # pylint: disable=import-outside-toplevel + + if ( + entity_category + and entity_category is not UNDEFINED + and not isinstance(entity_category, EntityCategory) + ): + raise ValueError("entity_category must be a valid EntityCategory instance") + for attr_name, value in ( ("area_id", area_id), ("capabilities", capabilities), @@ -629,6 +629,8 @@ class EntityRegistry: ) entities = EntityRegistryItems() + from .entity import EntityCategory # pylint: disable=import-outside-toplevel + if data is not None: for entity in data["entities"]: # Some old installations can have some bad entities. @@ -646,9 +648,9 @@ class EntityRegistry: disabled_by=RegistryEntryDisabler(entity["disabled_by"]) if entity["disabled_by"] else None, - entity_category=_convert_to_entity_category( - entity["entity_category"], raise_report=False - ), + entity_category=EntityCategory(entity["entity_category"]) + if entity["entity_category"] + else None, entity_id=entity["entity_id"], hidden_by=entity["hidden_by"], icon=entity["icon"], diff --git a/tests/components/cloud/test_alexa_config.py b/tests/components/cloud/test_alexa_config.py index ced2a664763..115d39d3aeb 100644 --- a/tests/components/cloud/test_alexa_config.py +++ b/tests/components/cloud/test_alexa_config.py @@ -8,6 +8,7 @@ from homeassistant.components.alexa import errors from homeassistant.components.cloud import ALEXA_SCHEMA, alexa_config from homeassistant.helpers import entity_registry as er from homeassistant.helpers.aiohttp_client import async_get_clientsession +from homeassistant.helpers.entity import EntityCategory from homeassistant.util.dt import utcnow from tests.common import async_fire_time_changed, mock_registry @@ -28,21 +29,21 @@ async def test_alexa_config_expose_entity_prefs(hass, cloud_prefs, cloud_stub): "test", "light_config_id", suggested_object_id="config_light", - entity_category="config", + entity_category=EntityCategory.CONFIG, ) entity_entry2 = entity_registry.async_get_or_create( "light", "test", "light_diagnostic_id", suggested_object_id="diagnostic_light", - entity_category="diagnostic", + entity_category=EntityCategory.DIAGNOSTIC, ) entity_entry3 = entity_registry.async_get_or_create( "light", "test", "light_system_id", suggested_object_id="system_light", - entity_category="system", + entity_category=EntityCategory.SYSTEM, ) entity_entry4 = entity_registry.async_get_or_create( "light", diff --git a/tests/components/cloud/test_google_config.py b/tests/components/cloud/test_google_config.py index 1fbff368602..e7867f52e6c 100644 --- a/tests/components/cloud/test_google_config.py +++ b/tests/components/cloud/test_google_config.py @@ -10,6 +10,7 @@ from homeassistant.components.google_assistant import helpers as ga_helpers from homeassistant.const import EVENT_HOMEASSISTANT_STARTED from homeassistant.core import CoreState, State from homeassistant.helpers import entity_registry as er +from homeassistant.helpers.entity import EntityCategory from homeassistant.util.dt import utcnow from tests.common import async_fire_time_changed, mock_registry @@ -227,21 +228,21 @@ async def test_google_config_expose_entity_prefs(hass, mock_conf, cloud_prefs): "test", "light_config_id", suggested_object_id="config_light", - entity_category="config", + entity_category=EntityCategory.CONFIG, ) entity_entry2 = entity_registry.async_get_or_create( "light", "test", "light_diagnostic_id", suggested_object_id="diagnostic_light", - entity_category="diagnostic", + entity_category=EntityCategory.DIAGNOSTIC, ) entity_entry3 = entity_registry.async_get_or_create( "light", "test", "light_system_id", suggested_object_id="system_light", - entity_category="system", + entity_category=EntityCategory.SYSTEM, ) entity_entry4 = entity_registry.async_get_or_create( "light", diff --git a/tests/components/google_assistant/test_google_assistant.py b/tests/components/google_assistant/test_google_assistant.py index fe86aae4b1a..642ef15451a 100644 --- a/tests/components/google_assistant/test_google_assistant.py +++ b/tests/components/google_assistant/test_google_assistant.py @@ -22,6 +22,7 @@ from homeassistant.components.climate import const as climate from homeassistant.components.humidifier import const as humidifier from homeassistant.const import CLOUD_NEVER_EXPOSED_ENTITIES from homeassistant.helpers import entity_registry as er +from homeassistant.helpers.entity import EntityCategory from . import DEMO_DEVICES @@ -136,21 +137,21 @@ async def test_sync_request(hass_fixture, assistant_client, auth_header): "test", "switch_config_id", suggested_object_id="config_switch", - entity_category="config", + entity_category=EntityCategory.CONFIG, ) entity_entry2 = entity_registry.async_get_or_create( "switch", "test", "switch_diagnostic_id", suggested_object_id="diagnostic_switch", - entity_category="diagnostic", + entity_category=EntityCategory.DIAGNOSTIC, ) entity_entry3 = entity_registry.async_get_or_create( "switch", "test", "switch_system_id", suggested_object_id="system_switch", - entity_category="system", + entity_category=EntityCategory.SYSTEM, ) entity_entry4 = entity_registry.async_get_or_create( "switch", diff --git a/tests/helpers/test_entity_platform.py b/tests/helpers/test_entity_platform.py index c98fdff7858..ff29897bb12 100644 --- a/tests/helpers/test_entity_platform.py +++ b/tests/helpers/test_entity_platform.py @@ -14,7 +14,11 @@ from homeassistant.helpers import ( entity_platform, entity_registry as er, ) -from homeassistant.helpers.entity import DeviceInfo, async_generate_entity_id +from homeassistant.helpers.entity import ( + DeviceInfo, + EntityCategory, + async_generate_entity_id, +) from homeassistant.helpers.entity_component import ( DEFAULT_SCAN_INTERVAL, EntityComponent, @@ -1151,7 +1155,7 @@ async def test_entity_info_added_to_entity_registry(hass): entity_default = MockEntity( capability_attributes={"max": 100}, device_class="mock-device-class", - entity_category="config", + entity_category=EntityCategory.CONFIG, icon="nice:icon", name="best name", supported_features=5, @@ -1170,7 +1174,7 @@ async def test_entity_info_added_to_entity_registry(hass): "test_domain", capabilities={"max": 100}, device_class=None, - entity_category="config", + entity_category=EntityCategory.CONFIG, icon=None, id=ANY, name=None, diff --git a/tests/helpers/test_entity_registry.py b/tests/helpers/test_entity_registry.py index eeac78a2654..ab4e15289b9 100644 --- a/tests/helpers/test_entity_registry.py +++ b/tests/helpers/test_entity_registry.py @@ -1233,26 +1233,17 @@ async def test_disabled_by_str_not_allowed(hass): ) -async def test_deprecated_entity_category_str(hass, registry, caplog): - """Test deprecated str use of entity_category converts to enum and logs a warning.""" - entry = er.RegistryEntry( - entity_id="light.kitchen", - unique_id="5678", - platform="hue", - entity_category="diagnostic", - ) +async def test_entity_category_str_not_allowed(hass): + """Test we need to pass entity category type.""" + reg = er.async_get(hass) - assert entry.entity_category is EntityCategory.DIAGNOSTIC - assert " should be updated to use EntityCategory" in caplog.text + with pytest.raises(ValueError): + reg.async_get_or_create( + "light", "hue", "1234", entity_category=EntityCategory.DIAGNOSTIC.value + ) - -async def test_invalid_entity_category_str(hass, registry, caplog): - """Test use of invalid entity category.""" - entry = er.RegistryEntry( - entity_id="light.kitchen", - unique_id="5678", - platform="hue", - entity_category="invalid", - ) - - assert entry.entity_category is None + entity_id = reg.async_get_or_create("light", "hue", "1234").entity_id + with pytest.raises(ValueError): + reg.async_update_entity( + entity_id, entity_category=EntityCategory.DIAGNOSTIC.value + ) diff --git a/tests/helpers/test_service.py b/tests/helpers/test_service.py index 7bde035d1f8..1b8de6ca6e2 100644 --- a/tests/helpers/test_service.py +++ b/tests/helpers/test_service.py @@ -25,6 +25,7 @@ from homeassistant.helpers import ( template, ) import homeassistant.helpers.config_validation as cv +from homeassistant.helpers.entity import EntityCategory from homeassistant.setup import async_setup_component from tests.common import ( @@ -119,7 +120,7 @@ def area_mock(hass): unique_id="config-in-own-area-id", platform="test", area_id="own-area", - entity_category="config", + entity_category=EntityCategory.CONFIG, ) hidden_entity_in_own_area = ent_reg.RegistryEntry( entity_id="light.hidden_in_own_area", @@ -139,7 +140,7 @@ def area_mock(hass): unique_id="config-in-area-id", platform="test", device_id=device_in_area.id, - entity_category="config", + entity_category=EntityCategory.CONFIG, ) hidden_entity_in_area = ent_reg.RegistryEntry( entity_id="light.hidden_in_area", @@ -173,7 +174,7 @@ def area_mock(hass): unique_id="config-no-area-id", platform="test", device_id=device_no_area.id, - entity_category="config", + entity_category=EntityCategory.CONFIG, ) hidden_entity_no_area = ent_reg.RegistryEntry( entity_id="light.hidden_no_area", From b3493220554c1f5030ff200c4a42cfc55e05d53a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20S=C3=B8rensen?= Date: Thu, 31 Mar 2022 20:59:26 +0200 Subject: [PATCH 034/238] Cleanup Version after removing YAML (#69020) --- .../components/version/config_flow.py | 54 +------------------ homeassistant/components/version/const.py | 7 --- tests/components/version/test_config_flow.py | 40 ++------------ 3 files changed, 4 insertions(+), 97 deletions(-) diff --git a/homeassistant/components/version/config_flow.py b/homeassistant/components/version/config_flow.py index 292b194eea1..2fd670a7342 100644 --- a/homeassistant/components/version/config_flow.py +++ b/homeassistant/components/version/config_flow.py @@ -6,7 +6,7 @@ from typing import Any import voluptuous as vol from homeassistant import config_entries -from homeassistant.const import CONF_NAME, CONF_SOURCE +from homeassistant.const import CONF_SOURCE from homeassistant.data_entry_flow import FlowResult from .const import ( @@ -20,25 +20,16 @@ from .const import ( DEFAULT_CHANNEL, DEFAULT_CONFIGURATION, DEFAULT_IMAGE, - DEFAULT_NAME, DEFAULT_NAME_CURRENT, - DEFAULT_NAME_LATEST, - DEFAULT_SOURCE, DOMAIN, - POSTFIX_CONTAINER_NAME, - SOURCE_DOCKER, - SOURCE_HASSIO, STEP_USER, STEP_VERSION_SOURCE, VALID_BOARDS, VALID_CHANNELS, VALID_CONTAINER_IMAGES, VALID_IMAGES, - VERSION_SOURCE_DOCKER_HUB, VERSION_SOURCE_LOCAL, VERSION_SOURCE_MAP, - VERSION_SOURCE_MAP_INVERTED, - VERSION_SOURCE_VERSIONS, ) @@ -137,16 +128,6 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): title=self._config_entry_name, data=self._entry_data ) - async def async_step_import(self, import_config: dict[str, Any]) -> FlowResult: - """Import a config entry from configuration.yaml.""" - self._entry_data = _convert_imported_configuration(import_config) - - self._async_abort_entries_match({**DEFAULT_CONFIGURATION, **self._entry_data}) - - return self.async_create_entry( - title=self._config_entry_name, data=self._entry_data - ) - @property def _config_entry_name(self) -> str: """Return the name of the config entry.""" @@ -159,36 +140,3 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): return f"{name} {channel.title()}" return name - - -def _convert_imported_configuration(config: dict[str, Any]) -> Any: - """Convert a key from the imported configuration.""" - data = DEFAULT_CONFIGURATION.copy() - if config.get(CONF_BETA): - data[CONF_CHANNEL] = "beta" - - if (source := config.get(CONF_SOURCE)) and source != DEFAULT_SOURCE: - if source == SOURCE_HASSIO: - data[CONF_SOURCE] = "supervisor" - data[CONF_VERSION_SOURCE] = VERSION_SOURCE_VERSIONS - elif source == SOURCE_DOCKER: - data[CONF_SOURCE] = "container" - data[CONF_VERSION_SOURCE] = VERSION_SOURCE_DOCKER_HUB - else: - data[CONF_SOURCE] = source - data[CONF_VERSION_SOURCE] = VERSION_SOURCE_MAP_INVERTED[source] - - if (image := config.get(CONF_IMAGE)) and image != DEFAULT_IMAGE: - if data[CONF_SOURCE] == "container": - data[CONF_IMAGE] = f"{config[CONF_IMAGE]}{POSTFIX_CONTAINER_NAME}" - else: - data[CONF_IMAGE] = config[CONF_IMAGE] - - if (name := config.get(CONF_NAME)) and name != DEFAULT_NAME: - data[CONF_NAME] = config[CONF_NAME] - else: - if data[CONF_SOURCE] == "local": - data[CONF_NAME] = DEFAULT_NAME_CURRENT - else: - data[CONF_NAME] = DEFAULT_NAME_LATEST - return data diff --git a/homeassistant/components/version/const.py b/homeassistant/components/version/const.py index 9f480c25cc5..419e49d7240 100644 --- a/homeassistant/components/version/const.py +++ b/homeassistant/components/version/const.py @@ -31,7 +31,6 @@ ATTR_VERSION_SOURCE: Final = CONF_VERSION_SOURCE ATTR_SOURCE: Final = CONF_SOURCE SOURCE_DOCKER: Final = "docker" # Kept to not break existing configurations -SOURCE_HASSIO: Final = "hassio" # Kept to not break existing configurations VERSION_SOURCE_DOCKER_HUB: Final = "Docker Hub" VERSION_SOURCE_HAIO: Final = "Home Assistant Website" @@ -44,7 +43,6 @@ DEFAULT_BOARD: Final = "OVA" DEFAULT_CHANNEL: Final = "stable" DEFAULT_IMAGE: Final = "default" DEFAULT_NAME_CURRENT: Final = "Current Version" -DEFAULT_NAME_LATEST: Final = "Latest Version" DEFAULT_NAME: Final = "" DEFAULT_SOURCE: Final = "local" DEFAULT_CONFIGURATION: Final[dict[str, Any]] = { @@ -89,11 +87,6 @@ VERSION_SOURCE_MAP: Final[dict[str, str]] = { VERSION_SOURCE_PYPI: "pypi", } -VERSION_SOURCE_MAP_INVERTED: Final[dict[str, str]] = { - value: key for key, value in VERSION_SOURCE_MAP.items() -} - - VALID_SOURCES: Final[list[str]] = HA_VERSION_SOURCES + [ "hassio", # Kept to not break existing configurations "docker", # Kept to not break existing configurations diff --git a/tests/components/version/test_config_flow.py b/tests/components/version/test_config_flow.py index 757afeac93d..64296498f35 100644 --- a/tests/components/version/test_config_flow.py +++ b/tests/components/version/test_config_flow.py @@ -19,19 +19,12 @@ from homeassistant.components.version.const import ( ) from homeassistant.const import CONF_SOURCE from homeassistant.core import HomeAssistant -from homeassistant.data_entry_flow import ( - RESULT_TYPE_ABORT, - RESULT_TYPE_CREATE_ENTRY, - RESULT_TYPE_FORM, -) +from homeassistant.data_entry_flow import RESULT_TYPE_CREATE_ENTRY, RESULT_TYPE_FORM from homeassistant.util import dt +from .common import MOCK_VERSION, MOCK_VERSION_DATA, setup_version_integration + from tests.common import async_fire_time_changed -from tests.components.version.common import ( - MOCK_VERSION, - MOCK_VERSION_DATA, - setup_version_integration, -) async def test_reload_config_entry(hass: HomeAssistant): @@ -203,30 +196,3 @@ async def test_advanced_form_supervisor(hass: HomeAssistant) -> None: CONF_VERSION_SOURCE: VERSION_SOURCE_VERSIONS, } assert len(mock_setup_entry.mock_calls) == 1 - - -async def test_import_existing(hass: HomeAssistant) -> None: - """Test importing existing configuration.""" - with patch( - "homeassistant.components.version.async_setup_entry", - return_value=True, - ) as mock_setup_entry: - result = await hass.config_entries.flow.async_init( - DOMAIN, - context={"source": config_entries.SOURCE_IMPORT}, - data={}, - ) - await hass.async_block_till_done() - - assert result["type"] == RESULT_TYPE_CREATE_ENTRY - - result = await hass.config_entries.flow.async_init( - DOMAIN, - context={"source": config_entries.SOURCE_IMPORT}, - data={}, - ) - await hass.async_block_till_done() - - assert result["type"] == RESULT_TYPE_ABORT - - assert len(mock_setup_entry.mock_calls) == 1 From 5120a0347067e36f08149d69767f3eadd53c06ac Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Thu, 31 Mar 2022 22:28:15 +0200 Subject: [PATCH 035/238] Remove deprecated template support in persistent notifications (#69021) --- .../persistent_notification/__init__.py | 31 ++----------------- .../persistent_notification/test_init.py | 23 +------------- 2 files changed, 3 insertions(+), 51 deletions(-) diff --git a/homeassistant/components/persistent_notification/__init__.py b/homeassistant/components/persistent_notification/__init__.py index 88a61b52038..c247a326036 100644 --- a/homeassistant/components/persistent_notification/__init__.py +++ b/homeassistant/components/persistent_notification/__init__.py @@ -3,17 +3,15 @@ from __future__ import annotations from collections.abc import Mapping import logging -from typing import Any, cast +from typing import Any import voluptuous as vol from homeassistant.components import websocket_api from homeassistant.const import ATTR_FRIENDLY_NAME from homeassistant.core import Context, HomeAssistant, ServiceCall, callback -from homeassistant.exceptions import TemplateError from homeassistant.helpers import config_validation as cv from homeassistant.helpers.entity import async_generate_entity_id -from homeassistant.helpers.template import Template, is_template_string from homeassistant.helpers.typing import ConfigType from homeassistant.loader import bind_hass from homeassistant.util import slugify @@ -82,36 +80,11 @@ def async_create( ) notification_id = entity_id.split(".")[1] - warn = False - - attr: dict[str, str] = {} + attr: dict[str, str] = {ATTR_MESSAGE: message} if title is not None: - if is_template_string(title): - warn = True - try: - title = cast( - str, Template(title, hass).async_render(parse_result=False) # type: ignore[no-untyped-call] - ) - except TemplateError as ex: - _LOGGER.error("Error rendering title %s: %s", title, ex) - attr[ATTR_TITLE] = title attr[ATTR_FRIENDLY_NAME] = title - if is_template_string(message): - warn = True - try: - message = Template(message, hass).async_render(parse_result=False) # type: ignore[no-untyped-call] - except TemplateError as ex: - _LOGGER.error("Error rendering message %s: %s", message, ex) - - attr[ATTR_MESSAGE] = message - - if warn: - _LOGGER.warning( - "Passing a template string to persistent_notification.async_create function is deprecated" - ) - hass.states.async_set(entity_id, STATE, attr, context=context) # Store notification and fire event diff --git a/tests/components/persistent_notification/test_init.py b/tests/components/persistent_notification/test_init.py index a26e243df11..bca6fe3b93d 100644 --- a/tests/components/persistent_notification/test_init.py +++ b/tests/components/persistent_notification/test_init.py @@ -20,7 +20,7 @@ async def test_create(hass): assert len(hass.states.async_entity_ids(pn.DOMAIN)) == 0 assert len(notifications) == 0 - pn.async_create(hass, "Hello World {{ 1 + 1 }}", title="{{ 1 + 1 }} beers") + pn.async_create(hass, "Hello World 2", title="2 beers") entity_ids = hass.states.async_entity_ids(pn.DOMAIN) assert len(entity_ids) == 1 @@ -68,27 +68,6 @@ async def test_create_notification_id(hass): assert notification["message"] == "test 2" -async def test_create_template_error(hass): - """Ensure we output templates if contain error.""" - notifications = hass.data[pn.DOMAIN] - assert len(hass.states.async_entity_ids(pn.DOMAIN)) == 0 - assert len(notifications) == 0 - - pn.async_create(hass, "{{ message + 1 }}", "{{ title + 1 }}") - - entity_ids = hass.states.async_entity_ids(pn.DOMAIN) - assert len(entity_ids) == 1 - assert len(notifications) == 1 - - state = hass.states.get(entity_ids[0]) - assert state.attributes.get("message") == "{{ message + 1 }}" - assert state.attributes.get("title") == "{{ title + 1 }}" - - notification = notifications.get(entity_ids[0]) - assert notification["message"] == "{{ message + 1 }}" - assert notification["title"] == "{{ title + 1 }}" - - async def test_dismiss_notification(hass): """Ensure removal of specific notification.""" notifications = hass.data[pn.DOMAIN] From 652ce897c7240ea49fc3da559ccbe41b21640e89 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Thu, 31 Mar 2022 22:31:17 +0200 Subject: [PATCH 036/238] Remove deprecated YAML configuration from Brunt (#69024) --- homeassistant/components/brunt/config_flow.py | 6 --- homeassistant/components/brunt/cover.py | 23 +-------- tests/components/brunt/test_config_flow.py | 48 ------------------- 3 files changed, 1 insertion(+), 76 deletions(-) diff --git a/homeassistant/components/brunt/config_flow.py b/homeassistant/components/brunt/config_flow.py index 636a9affddd..c81eb2de6ca 100644 --- a/homeassistant/components/brunt/config_flow.py +++ b/homeassistant/components/brunt/config_flow.py @@ -111,9 +111,3 @@ class BruntConfigFlow(ConfigFlow, domain=DOMAIN): self.hass.config_entries.async_update_entry(self._reauth_entry, data=user_input) await self.hass.config_entries.async_reload(self._reauth_entry.entry_id) return self.async_abort(reason="reauth_successful") - - async def async_step_import(self, import_config: dict[str, Any]) -> FlowResult: - """Import config from configuration.yaml.""" - await self.async_set_unique_id(import_config[CONF_USERNAME].lower()) - self._abort_if_unique_id_configured() - return await self.async_step_user(import_config) diff --git a/homeassistant/components/brunt/cover.py b/homeassistant/components/brunt/cover.py index d3efdce0a5b..8bbb11914f7 100644 --- a/homeassistant/components/brunt/cover.py +++ b/homeassistant/components/brunt/cover.py @@ -2,7 +2,6 @@ from __future__ import annotations from collections.abc import MutableMapping -import logging from typing import Any from aiohttp.client_exceptions import ClientResponseError @@ -16,12 +15,11 @@ from homeassistant.components.cover import ( CoverDeviceClass, CoverEntity, ) -from homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry +from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant, callback from homeassistant.exceptions import HomeAssistantError from homeassistant.helpers.entity import DeviceInfo from homeassistant.helpers.entity_platform import AddEntitiesCallback -from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType from homeassistant.helpers.update_coordinator import ( CoordinatorEntity, DataUpdateCoordinator, @@ -39,28 +37,9 @@ from .const import ( REGULAR_INTERVAL, ) -_LOGGER = logging.getLogger(__name__) - COVER_FEATURES = SUPPORT_OPEN | SUPPORT_CLOSE | SUPPORT_SET_POSITION -async def async_setup_platform( - hass: HomeAssistant, - config: ConfigType, - add_entities: AddEntitiesCallback, - discovery_info: DiscoveryInfoType | None = None, -) -> None: - """Component setup, run import config flow for each entry in config.""" - _LOGGER.warning( - "Loading brunt via platform config is deprecated; The configuration has been migrated to a config entry and can be safely removed from configuration.yaml" - ) - hass.async_create_task( - hass.config_entries.flow.async_init( - DOMAIN, context={"source": SOURCE_IMPORT}, data=config - ) - ) - - async def async_setup_entry( hass: HomeAssistant, entry: ConfigEntry, diff --git a/tests/components/brunt/test_config_flow.py b/tests/components/brunt/test_config_flow.py index f053a6d18b0..4a949911ca6 100644 --- a/tests/components/brunt/test_config_flow.py +++ b/tests/components/brunt/test_config_flow.py @@ -41,54 +41,6 @@ async def test_form(hass): assert len(mock_setup_entry.mock_calls) == 1 -async def test_import(hass): - """Test we get the form.""" - - with patch( - "homeassistant.components.brunt.config_flow.BruntClientAsync.async_login", - return_value=None, - ), patch( - "homeassistant.components.brunt.async_setup_entry", - return_value=True, - ) as mock_setup_entry: - result = await hass.config_entries.flow.async_init( - DOMAIN, context={"source": config_entries.SOURCE_IMPORT}, data=CONFIG - ) - - await hass.async_block_till_done() - - assert result["type"] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY - assert result["title"] == "test-username" - assert result["data"] == CONFIG - assert len(mock_setup_entry.mock_calls) == 1 - - -async def test_import_duplicate_login(hass): - """Test uniqueness of username.""" - entry = MockConfigEntry( - domain=DOMAIN, - data=CONFIG, - title="test-username", - unique_id="test-username", - ) - entry.add_to_hass(hass) - - with patch( - "homeassistant.components.brunt.config_flow.BruntClientAsync.async_login", - return_value=None, - ), patch( - "homeassistant.components.brunt.async_setup_entry", - return_value=True, - ): - result = await hass.config_entries.flow.async_init( - DOMAIN, context={"source": config_entries.SOURCE_IMPORT}, data=CONFIG - ) - await hass.async_block_till_done() - - assert result["type"] == data_entry_flow.RESULT_TYPE_ABORT - assert result["reason"] == "already_configured" - - async def test_form_duplicate_login(hass): """Test uniqueness of username.""" entry = MockConfigEntry( From d0bb58c6987b50cdd3de32a268a0438ab8fa0df7 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Thu, 31 Mar 2022 22:09:24 +0200 Subject: [PATCH 037/238] Remove deprecated YAML configuration from Yale Smart Alarm (#69025) --- .../yale_smart_alarm/alarm_control_panel.py | 52 ++---------------- .../yale_smart_alarm/config_flow.py | 5 -- .../yale_smart_alarm/test_config_flow.py | 54 ------------------- 3 files changed, 5 insertions(+), 106 deletions(-) diff --git a/homeassistant/components/yale_smart_alarm/alarm_control_panel.py b/homeassistant/components/yale_smart_alarm/alarm_control_panel.py index 7a74b675f0b..20d88ca4859 100644 --- a/homeassistant/components/yale_smart_alarm/alarm_control_panel.py +++ b/homeassistant/components/yale_smart_alarm/alarm_control_panel.py @@ -3,70 +3,28 @@ from __future__ import annotations from typing import TYPE_CHECKING -import voluptuous as vol from yalesmartalarmclient.const import ( YALE_STATE_ARM_FULL, YALE_STATE_ARM_PARTIAL, YALE_STATE_DISARM, ) -from homeassistant.components.alarm_control_panel import ( - PLATFORM_SCHEMA as PARENT_PLATFORM_SCHEMA, - AlarmControlPanelEntity, -) +from homeassistant.components.alarm_control_panel import AlarmControlPanelEntity from homeassistant.components.alarm_control_panel.const import ( SUPPORT_ALARM_ARM_AWAY, SUPPORT_ALARM_ARM_HOME, ) -from homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry -from homeassistant.const import CONF_NAME, CONF_PASSWORD, CONF_USERNAME +from homeassistant.config_entries import ConfigEntry +from homeassistant.const import CONF_NAME from homeassistant.core import HomeAssistant from homeassistant.exceptions import HomeAssistantError -import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity_platform import AddEntitiesCallback -from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType, StateType +from homeassistant.helpers.typing import StateType -from .const import ( - CONF_AREA_ID, - COORDINATOR, - DEFAULT_AREA_ID, - DEFAULT_NAME, - DOMAIN, - LOGGER, - STATE_MAP, - YALE_ALL_ERRORS, -) +from .const import COORDINATOR, DOMAIN, STATE_MAP, YALE_ALL_ERRORS from .coordinator import YaleDataUpdateCoordinator from .entity import YaleAlarmEntity -PLATFORM_SCHEMA = PARENT_PLATFORM_SCHEMA.extend( - { - vol.Required(CONF_USERNAME): cv.string, - vol.Required(CONF_PASSWORD): cv.string, - vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, - vol.Optional(CONF_AREA_ID, default=DEFAULT_AREA_ID): cv.string, - } -) - - -async def async_setup_platform( - hass: HomeAssistant, - config: ConfigType, - async_add_entities: AddEntitiesCallback, - discovery_info: DiscoveryInfoType | None = None, -) -> None: - """Import Yale configuration from YAML.""" - LOGGER.warning( - "Loading Yale Alarm via platform setup is deprecated; Please remove it from your configuration" - ) - hass.async_create_task( - hass.config_entries.flow.async_init( - DOMAIN, - context={"source": SOURCE_IMPORT}, - data=config, - ) - ) - async def async_setup_entry( hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback diff --git a/homeassistant/components/yale_smart_alarm/config_flow.py b/homeassistant/components/yale_smart_alarm/config_flow.py index fe8b1c5b2fb..ae5f492bc6a 100644 --- a/homeassistant/components/yale_smart_alarm/config_flow.py +++ b/homeassistant/components/yale_smart_alarm/config_flow.py @@ -53,11 +53,6 @@ class YaleConfigFlow(ConfigFlow, domain=DOMAIN): """Get the options flow for this handler.""" return YaleOptionsFlowHandler(config_entry) - async def async_step_import(self, config: dict[str, Any]) -> FlowResult: - """Import a configuration from config.yaml.""" - - return await self.async_step_user(user_input=config) - async def async_step_reauth( self, user_input: dict[str, Any] | None = None ) -> FlowResult: diff --git a/tests/components/yale_smart_alarm/test_config_flow.py b/tests/components/yale_smart_alarm/test_config_flow.py index fee5e5ab97a..97a4cdfed6b 100644 --- a/tests/components/yale_smart_alarm/test_config_flow.py +++ b/tests/components/yale_smart_alarm/test_config_flow.py @@ -114,60 +114,6 @@ async def test_form_invalid_auth( } -@pytest.mark.parametrize( - "p_input,p_output", - [ - ( - { - "username": "test-username", - "password": "test-password", - "area_id": "1", - }, - { - "username": "test-username", - "password": "test-password", - "name": "Yale Smart Alarm", - "area_id": "1", - }, - ), - ( - { - "username": "test-username", - "password": "test-password", - }, - { - "username": "test-username", - "password": "test-password", - "name": "Yale Smart Alarm", - "area_id": "1", - }, - ), - ], -) -async def test_import_flow_success( - hass, p_input: dict[str, str], p_output: dict[str, str] -): - """Test a successful import of yaml.""" - - with patch( - "homeassistant.components.yale_smart_alarm.config_flow.YaleSmartAlarmClient", - ), patch( - "homeassistant.components.yale_smart_alarm.async_setup_entry", - return_value=True, - ) as mock_setup_entry: - result2 = await hass.config_entries.flow.async_init( - DOMAIN, - context={"source": config_entries.SOURCE_IMPORT}, - data=p_input, - ) - await hass.async_block_till_done() - - assert result2["type"] == "create_entry" - assert result2["title"] == "test-username" - assert result2["data"] == p_output - assert len(mock_setup_entry.mock_calls) == 1 - - async def test_reauth_flow(hass: HomeAssistant) -> None: """Test a reauthentication flow.""" entry = MockConfigEntry( From daf2f746edf661af6e0962501c0f717682ebacb3 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Thu, 31 Mar 2022 22:08:51 +0200 Subject: [PATCH 038/238] Remove deprecated YAML configuration from Met.no (#69027) --- homeassistant/components/met/config_flow.py | 5 --- homeassistant/components/met/weather.py | 47 +-------------------- tests/components/met/test_config_flow.py | 18 -------- 3 files changed, 1 insertion(+), 69 deletions(-) diff --git a/homeassistant/components/met/config_flow.py b/homeassistant/components/met/config_flow.py index 42186a60bb9..6c4c4d33d5b 100644 --- a/homeassistant/components/met/config_flow.py +++ b/homeassistant/components/met/config_flow.py @@ -6,7 +6,6 @@ import voluptuous as vol from homeassistant import config_entries from homeassistant.const import CONF_ELEVATION, CONF_LATITUDE, CONF_LONGITUDE, CONF_NAME from homeassistant.core import callback -from homeassistant.data_entry_flow import FlowResult import homeassistant.helpers.config_validation as cv from .const import ( @@ -79,10 +78,6 @@ class MetFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): errors=self._errors, ) - async def async_step_import(self, user_input: dict | None = None) -> FlowResult: - """Handle configuration by yaml file.""" - return await self.async_step_user(user_input) - async def async_step_onboarding(self, data=None): """Handle a flow initialized by onboarding.""" # Don't create entry if latitude or longitude isn't set. diff --git a/homeassistant/components/met/weather.py b/homeassistant/components/met/weather.py index d17bfda03f1..251d99ad295 100644 --- a/homeassistant/components/met/weather.py +++ b/homeassistant/components/met/weather.py @@ -1,12 +1,9 @@ """Support for Met.no weather service.""" from __future__ import annotations -import logging from types import MappingProxyType from typing import Any -import voluptuous as vol - from homeassistant.components.weather import ( ATTR_FORECAST_CONDITION, ATTR_FORECAST_TEMP, @@ -16,13 +13,11 @@ from homeassistant.components.weather import ( ATTR_WEATHER_TEMPERATURE, ATTR_WEATHER_WIND_BEARING, ATTR_WEATHER_WIND_SPEED, - PLATFORM_SCHEMA, Forecast, WeatherEntity, ) -from homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry +from homeassistant.config_entries import ConfigEntry from homeassistant.const import ( - CONF_ELEVATION, CONF_LATITUDE, CONF_LONGITUDE, CONF_NAME, @@ -35,11 +30,9 @@ from homeassistant.const import ( TEMP_CELSIUS, ) from homeassistant.core import HomeAssistant -from homeassistant.helpers import config_validation as cv from homeassistant.helpers.device_registry import DeviceEntryType from homeassistant.helpers.entity import DeviceInfo from homeassistant.helpers.entity_platform import AddEntitiesCallback -from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType from homeassistant.helpers.update_coordinator import CoordinatorEntity from homeassistant.util.distance import convert as convert_distance from homeassistant.util.pressure import convert as convert_pressure @@ -55,8 +48,6 @@ from .const import ( FORECAST_MAP, ) -_LOGGER = logging.getLogger(__name__) - ATTRIBUTION = ( "Weather forecast from met.no, delivered by the Norwegian " "Meteorological Institute." @@ -64,42 +55,6 @@ ATTRIBUTION = ( DEFAULT_NAME = "Met.no" -PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( - { - vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, - vol.Inclusive( - CONF_LATITUDE, "coordinates", "Latitude and longitude must exist together" - ): cv.latitude, - vol.Inclusive( - CONF_LONGITUDE, "coordinates", "Latitude and longitude must exist together" - ): cv.longitude, - vol.Optional(CONF_ELEVATION): int, - } -) - - -async def async_setup_platform( - hass: HomeAssistant, - config: ConfigType, - async_add_entities: AddEntitiesCallback, - discovery_info: DiscoveryInfoType | None = None, -) -> None: - """Set up the Met.no weather platform.""" - _LOGGER.warning("Loading Met.no via platform config is deprecated") - - # Add defaults. - config = {CONF_ELEVATION: hass.config.elevation, **config} - - if config.get(CONF_LATITUDE) is None: - config[CONF_TRACK_HOME] = True - - hass.async_create_task( - hass.config_entries.flow.async_init( - DOMAIN, context={"source": SOURCE_IMPORT}, data=config - ) - ) - - async def async_setup_entry( hass: HomeAssistant, config_entry: ConfigEntry, diff --git a/tests/components/met/test_config_flow.py b/tests/components/met/test_config_flow.py index ff5deb18194..358afe11cc2 100644 --- a/tests/components/met/test_config_flow.py +++ b/tests/components/met/test_config_flow.py @@ -125,21 +125,3 @@ async def test_onboarding_step_abort_no_home(hass, latitude, longitude): assert result["type"] == "abort" assert result["reason"] == "no_home" - - -async def test_import_step(hass): - """Test initializing via import step.""" - test_data = { - "name": "home", - CONF_LONGITUDE: None, - CONF_LATITUDE: None, - CONF_ELEVATION: 0, - "track_home": True, - } - result = await hass.config_entries.flow.async_init( - DOMAIN, context={"source": config_entries.SOURCE_IMPORT}, data=test_data - ) - - assert result["type"] == "create_entry" - assert result["title"] == "home" - assert result["data"] == test_data From 9c9bacad31d3de0751b3affcf756e9b36989401d Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Thu, 31 Mar 2022 22:07:48 +0200 Subject: [PATCH 039/238] Remove deprecated YAML configuration from Sensibo (#69028) --- homeassistant/components/sensibo/climate.py | 40 ++---------- .../components/sensibo/config_flow.py | 5 -- homeassistant/components/sensibo/const.py | 1 - tests/components/sensibo/test_config_flow.py | 64 ------------------- 4 files changed, 4 insertions(+), 106 deletions(-) diff --git a/homeassistant/components/sensibo/climate.py b/homeassistant/components/sensibo/climate.py index 6e9d2709b8b..8f7b671a948 100644 --- a/homeassistant/components/sensibo/climate.py +++ b/homeassistant/components/sensibo/climate.py @@ -3,10 +3,7 @@ from __future__ import annotations import voluptuous as vol -from homeassistant.components.climate import ( - PLATFORM_SCHEMA as PARENT_PLATFORM_SCHEMA, - ClimateEntity, -) +from homeassistant.components.climate import ClimateEntity from homeassistant.components.climate.const import ( HVAC_MODE_COOL, HVAC_MODE_DRY, @@ -18,36 +15,26 @@ from homeassistant.components.climate.const import ( SUPPORT_SWING_MODE, SUPPORT_TARGET_TEMPERATURE, ) -from homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry +from homeassistant.config_entries import ConfigEntry from homeassistant.const import ( ATTR_STATE, ATTR_TEMPERATURE, - CONF_API_KEY, - CONF_ID, PRECISION_TENTHS, TEMP_CELSIUS, TEMP_FAHRENHEIT, ) from homeassistant.core import HomeAssistant from homeassistant.exceptions import HomeAssistantError -from homeassistant.helpers import config_validation as cv, entity_platform +from homeassistant.helpers import entity_platform from homeassistant.helpers.entity_platform import AddEntitiesCallback -from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType from homeassistant.util.temperature import convert as convert_temperature -from .const import ALL, DOMAIN, LOGGER +from .const import DOMAIN from .coordinator import SensiboDataUpdateCoordinator from .entity import SensiboDeviceBaseEntity SERVICE_ASSUME_STATE = "assume_state" -PLATFORM_SCHEMA = PARENT_PLATFORM_SCHEMA.extend( - { - vol.Required(CONF_API_KEY): cv.string, - vol.Optional(CONF_ID, default=ALL): vol.All(cv.ensure_list, [cv.string]), - } -) - FIELD_TO_FLAG = { "fanLevel": SUPPORT_FAN_MODE, "swing": SUPPORT_SWING_MODE, @@ -74,25 +61,6 @@ AC_STATE_TO_DATA = { } -async def async_setup_platform( - hass: HomeAssistant, - config: ConfigType, - async_add_entities: AddEntitiesCallback, - discovery_info: DiscoveryInfoType | None = None, -) -> None: - """Set up Sensibo devices.""" - LOGGER.warning( - "Loading Sensibo via platform setup is deprecated; Please remove it from your configuration" - ) - hass.async_create_task( - hass.config_entries.flow.async_init( - DOMAIN, - context={"source": SOURCE_IMPORT}, - data=config, - ) - ) - - async def async_setup_entry( hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback ) -> None: diff --git a/homeassistant/components/sensibo/config_flow.py b/homeassistant/components/sensibo/config_flow.py index b8cca2e6fb8..c4b637e4439 100644 --- a/homeassistant/components/sensibo/config_flow.py +++ b/homeassistant/components/sensibo/config_flow.py @@ -75,11 +75,6 @@ class SensiboConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): errors=errors, ) - async def async_step_import(self, config: dict) -> FlowResult: - """Import a configuration from config.yaml.""" - - return await self.async_step_user(user_input=config) - async def async_step_user(self, user_input=None) -> FlowResult: """Handle the initial step.""" diff --git a/homeassistant/components/sensibo/const.py b/homeassistant/components/sensibo/const.py index 59f0d1c1179..ac3df435e29 100644 --- a/homeassistant/components/sensibo/const.py +++ b/homeassistant/components/sensibo/const.py @@ -19,7 +19,6 @@ PLATFORMS = [ Platform.SELECT, Platform.SENSOR, ] -ALL = ["all"] DEFAULT_NAME = "Sensibo" TIMEOUT = 8 diff --git a/tests/components/sensibo/test_config_flow.py b/tests/components/sensibo/test_config_flow.py index cb5c2b239df..7e92e1f2eb3 100644 --- a/tests/components/sensibo/test_config_flow.py +++ b/tests/components/sensibo/test_config_flow.py @@ -60,70 +60,6 @@ async def test_form(hass: HomeAssistant) -> None: assert len(mock_setup_entry.mock_calls) == 1 -async def test_import_flow_success(hass: HomeAssistant) -> None: - """Test a successful import of yaml.""" - - with patch( - "homeassistant.components.sensibo.util.SensiboClient.async_get_devices", - return_value={"result": [{"id": "xyzxyz"}, {"id": "abcabc"}]}, - ), patch( - "homeassistant.components.sensibo.util.SensiboClient.async_get_me", - return_value={"result": {"username": "username"}}, - ), patch( - "homeassistant.components.sensibo.async_setup_entry", - return_value=True, - ) as mock_setup_entry: - result2 = await hass.config_entries.flow.async_init( - DOMAIN, - context={"source": config_entries.SOURCE_IMPORT}, - data={ - CONF_API_KEY: "1234567890", - }, - ) - await hass.async_block_till_done() - - assert result2["type"] == RESULT_TYPE_CREATE_ENTRY - assert result2["title"] == "Sensibo" - assert result2["data"] == { - "api_key": "1234567890", - } - assert len(mock_setup_entry.mock_calls) == 1 - - -async def test_import_flow_already_exist(hass: HomeAssistant) -> None: - """Test import of yaml already exist.""" - - MockConfigEntry( - domain=DOMAIN, - data={ - CONF_API_KEY: "1234567890", - }, - unique_id="username", - ).add_to_hass(hass) - - with patch( - "homeassistant.components.sensibo.async_setup_entry", - return_value=True, - ), patch( - "homeassistant.components.sensibo.util.SensiboClient.async_get_devices", - return_value={"result": [{"id": "xyzxyz"}, {"id": "abcabc"}]}, - ), patch( - "homeassistant.components.sensibo.util.SensiboClient.async_get_me", - return_value={"result": {"username": "username"}}, - ): - result3 = await hass.config_entries.flow.async_init( - DOMAIN, - context={"source": config_entries.SOURCE_IMPORT}, - data={ - CONF_API_KEY: "1234567890", - }, - ) - await hass.async_block_till_done() - - assert result3["type"] == RESULT_TYPE_ABORT - assert result3["reason"] == "already_configured" - - @pytest.mark.parametrize( "error_message, p_error", [ From deed4c59802326030a7f4cf9c1837dab9f542d3c Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Thu, 31 Mar 2022 22:30:42 +0200 Subject: [PATCH 040/238] Remove deprecated YAML configuration from EZVIZ (#69031) --- homeassistant/components/ezviz/camera.py | 58 +-------- homeassistant/components/ezviz/config_flow.py | 44 ------- homeassistant/components/ezviz/const.py | 1 - tests/components/ezviz/__init__.py | 33 ------ tests/components/ezviz/test_config_flow.py | 110 +----------------- 5 files changed, 2 insertions(+), 244 deletions(-) diff --git a/homeassistant/components/ezviz/camera.py b/homeassistant/components/ezviz/camera.py index 58b45eeafd3..ed48ed4ee03 100644 --- a/homeassistant/components/ezviz/camera.py +++ b/homeassistant/components/ezviz/camera.py @@ -7,18 +7,16 @@ from pyezviz.exceptions import HTTPError, InvalidHost, PyEzvizError import voluptuous as vol from homeassistant.components import ffmpeg -from homeassistant.components.camera import PLATFORM_SCHEMA, SUPPORT_STREAM, Camera +from homeassistant.components.camera import SUPPORT_STREAM, Camera from homeassistant.components.ffmpeg import get_ffmpeg_manager from homeassistant.config_entries import ( SOURCE_IGNORE, - SOURCE_IMPORT, SOURCE_INTEGRATION_DISCOVERY, ConfigEntry, ) from homeassistant.const import CONF_IP_ADDRESS, CONF_PASSWORD, CONF_USERNAME from homeassistant.core import HomeAssistant from homeassistant.helpers import config_validation as cv, entity_platform -from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType from .const import ( ATTR_DIRECTION, @@ -27,7 +25,6 @@ from .const import ( ATTR_SERIAL, ATTR_SPEED, ATTR_TYPE, - CONF_CAMERAS, CONF_FFMPEG_ARGUMENTS, DATA_COORDINATOR, DEFAULT_CAMERA_USERNAME, @@ -47,62 +44,9 @@ from .const import ( from .coordinator import EzvizDataUpdateCoordinator from .entity import EzvizEntity -CAMERA_SCHEMA = vol.Schema( - {vol.Required(CONF_USERNAME): cv.string, vol.Required(CONF_PASSWORD): cv.string} -) - -PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( - { - vol.Required(CONF_USERNAME): cv.string, - vol.Required(CONF_PASSWORD): cv.string, - vol.Optional(CONF_CAMERAS, default={}): {cv.string: CAMERA_SCHEMA}, - } -) - _LOGGER = logging.getLogger(__name__) -async def async_setup_platform( - hass: HomeAssistant, - config: ConfigType, - async_add_entities: entity_platform.AddEntitiesCallback, - discovery_info: DiscoveryInfoType | None = None, -) -> None: - """Set up a Ezviz IP Camera from platform config.""" - _LOGGER.warning( - "Loading ezviz via platform config is deprecated, it will be automatically imported. Please remove it afterwards" - ) - - # Check if entry config exists and skips import if it does. - if hass.config_entries.async_entries(DOMAIN): - return - - # Check if importing camera account. - if CONF_CAMERAS in config: - cameras_conf = config[CONF_CAMERAS] - for serial, camera in cameras_conf.items(): - hass.async_create_task( - hass.config_entries.flow.async_init( - DOMAIN, - context={"source": SOURCE_IMPORT}, - data={ - ATTR_SERIAL: serial, - CONF_USERNAME: camera[CONF_USERNAME], - CONF_PASSWORD: camera[CONF_PASSWORD], - }, - ) - ) - - # Check if importing main ezviz cloud account. - hass.async_create_task( - hass.config_entries.flow.async_init( - DOMAIN, - context={"source": SOURCE_IMPORT}, - data=config, - ) - ) - - async def async_setup_entry( hass: HomeAssistant, entry: ConfigEntry, diff --git a/homeassistant/components/ezviz/config_flow.py b/homeassistant/components/ezviz/config_flow.py index 780d06383f9..36cf2ac456e 100644 --- a/homeassistant/components/ezviz/config_flow.py +++ b/homeassistant/components/ezviz/config_flow.py @@ -307,50 +307,6 @@ class EzvizConfigFlow(ConfigFlow, domain=DOMAIN): }, ) - async def async_step_import(self, import_config): - """Handle config import from yaml.""" - _LOGGER.debug("import config: %s", import_config) - - # Check importing camera. - if ATTR_SERIAL in import_config: - return await self.async_step_import_camera(import_config) - - # Validate and setup of main ezviz cloud account. - try: - return await self._validate_and_create_auth(import_config) - - except InvalidURL: - _LOGGER.error("Error importing Ezviz platform config: invalid host") - return self.async_abort(reason="invalid_host") - - except InvalidHost: - _LOGGER.error("Error importing Ezviz platform config: cannot connect") - return self.async_abort(reason="cannot_connect") - - except (AuthTestResultFailed, PyEzvizError): - _LOGGER.error("Error importing Ezviz platform config: invalid auth") - return self.async_abort(reason="invalid_auth") - - except Exception: # pylint: disable=broad-except - _LOGGER.exception( - "Error importing ezviz platform config: unexpected exception" - ) - - return self.async_abort(reason="unknown") - - async def async_step_import_camera(self, data): - """Create RTSP auth entry per camera in config.""" - - await self.async_set_unique_id(data[ATTR_SERIAL]) - self._abort_if_unique_id_configured() - - _LOGGER.debug("Create camera with: %s", data) - - cam_serial = data.pop(ATTR_SERIAL) - data[CONF_TYPE] = ATTR_TYPE_CAMERA - - return self.async_create_entry(title=cam_serial, data=data) - class EzvizOptionsFlowHandler(OptionsFlow): """Handle Ezviz client options.""" diff --git a/homeassistant/components/ezviz/const.py b/homeassistant/components/ezviz/const.py index 6131904be99..5340f48d0f6 100644 --- a/homeassistant/components/ezviz/const.py +++ b/homeassistant/components/ezviz/const.py @@ -5,7 +5,6 @@ MANUFACTURER = "Ezviz" # Configuration ATTR_SERIAL = "serial" -CONF_CAMERAS = "cameras" CONF_FFMPEG_ARGUMENTS = "ffmpeg_arguments" ATTR_HOME = "HOME_MODE" ATTR_AWAY = "AWAY_MODE" diff --git a/tests/components/ezviz/__init__.py b/tests/components/ezviz/__init__.py index b8dc04ef790..bfb30b893eb 100644 --- a/tests/components/ezviz/__init__.py +++ b/tests/components/ezviz/__init__.py @@ -3,9 +3,7 @@ from unittest.mock import patch from homeassistant.components.ezviz.const import ( ATTR_SERIAL, - ATTR_TYPE_CAMERA, ATTR_TYPE_CLOUD, - CONF_CAMERAS, CONF_FFMPEG_ARGUMENTS, DEFAULT_FFMPEG_ARGUMENTS, DEFAULT_TIMEOUT, @@ -48,37 +46,6 @@ USER_INPUT = { CONF_TYPE: ATTR_TYPE_CLOUD, } -USER_INPUT_CAMERA_VALIDATE = { - ATTR_SERIAL: "C666666", - CONF_PASSWORD: "test-password", - CONF_USERNAME: "test-username", -} - -USER_INPUT_CAMERA = { - CONF_PASSWORD: "test-password", - CONF_USERNAME: "test-username", - CONF_TYPE: ATTR_TYPE_CAMERA, -} - -YAML_CONFIG = { - CONF_USERNAME: "test-username", - CONF_PASSWORD: "test-password", - CONF_URL: "apiieu.ezvizlife.com", - CONF_CAMERAS: { - "C666666": {CONF_USERNAME: "test-username", CONF_PASSWORD: "test-password"} - }, -} - -YAML_INVALID = { - "C666666": {CONF_USERNAME: "test-username", CONF_PASSWORD: "test-password"} -} - -YAML_CONFIG_CAMERA = { - ATTR_SERIAL: "C666666", - CONF_USERNAME: "test-username", - CONF_PASSWORD: "test-password", -} - DISCOVERY_INFO = { ATTR_SERIAL: "C666666", CONF_USERNAME: None, diff --git a/tests/components/ezviz/test_config_flow.py b/tests/components/ezviz/test_config_flow.py index 9a3129b7dd6..4ba3b5911f6 100644 --- a/tests/components/ezviz/test_config_flow.py +++ b/tests/components/ezviz/test_config_flow.py @@ -19,11 +19,7 @@ from homeassistant.components.ezviz.const import ( DEFAULT_TIMEOUT, DOMAIN, ) -from homeassistant.config_entries import ( - SOURCE_IMPORT, - SOURCE_INTEGRATION_DISCOVERY, - SOURCE_USER, -) +from homeassistant.config_entries import SOURCE_INTEGRATION_DISCOVERY, SOURCE_USER from homeassistant.const import ( CONF_CUSTOMIZE, CONF_IP_ADDRESS, @@ -42,12 +38,7 @@ from homeassistant.data_entry_flow import ( from . import ( DISCOVERY_INFO, USER_INPUT, - USER_INPUT_CAMERA, - USER_INPUT_CAMERA_VALIDATE, USER_INPUT_VALIDATE, - YAML_CONFIG, - YAML_CONFIG_CAMERA, - YAML_INVALID, _patch_async_setup_entry, init_integration, ) @@ -115,66 +106,6 @@ async def test_user_custom_url(hass, ezviz_config_flow): assert len(mock_setup_entry.mock_calls) == 1 -async def test_async_step_import(hass, ezviz_config_flow): - """Test the config import flow.""" - - with _patch_async_setup_entry() as mock_setup_entry: - result = await hass.config_entries.flow.async_init( - DOMAIN, context={"source": SOURCE_IMPORT}, data=YAML_CONFIG - ) - assert result["type"] == RESULT_TYPE_CREATE_ENTRY - assert result["data"] == USER_INPUT - - assert len(mock_setup_entry.mock_calls) == 1 - - -async def test_async_step_import_camera(hass, ezviz_config_flow): - """Test the config import camera flow.""" - - with _patch_async_setup_entry() as mock_setup_entry: - result = await hass.config_entries.flow.async_init( - DOMAIN, context={"source": SOURCE_IMPORT}, data=YAML_CONFIG_CAMERA - ) - assert result["type"] == RESULT_TYPE_CREATE_ENTRY - assert result["data"] == USER_INPUT_CAMERA - - assert len(mock_setup_entry.mock_calls) == 1 - - -async def test_async_step_import_2nd_form_returns_camera(hass, ezviz_config_flow): - """Test we get the user initiated form.""" - - with _patch_async_setup_entry() as mock_setup_entry: - result = await hass.config_entries.flow.async_init( - DOMAIN, context={"source": SOURCE_IMPORT}, data=YAML_CONFIG - ) - assert result["type"] == RESULT_TYPE_CREATE_ENTRY - assert result["data"] == USER_INPUT - - assert len(mock_setup_entry.mock_calls) == 1 - - with _patch_async_setup_entry() as mock_setup_entry: - result = await hass.config_entries.flow.async_init( - DOMAIN, context={"source": SOURCE_IMPORT}, data=USER_INPUT_CAMERA_VALIDATE - ) - await hass.async_block_till_done() - - assert result["type"] == RESULT_TYPE_CREATE_ENTRY - assert result["data"] == USER_INPUT_CAMERA - - assert len(mock_setup_entry.mock_calls) == 1 - - -async def test_async_step_import_abort(hass, ezviz_config_flow): - """Test the config import flow with invalid data.""" - - result = await hass.config_entries.flow.async_init( - DOMAIN, context={"source": SOURCE_IMPORT}, data=YAML_INVALID - ) - assert result["type"] == RESULT_TYPE_ABORT - assert result["reason"] == "unknown" - - async def test_step_discovery_abort_if_cloud_account_missing(hass): """Test discovery and confirm step, abort if cloud account was removed.""" @@ -308,45 +239,6 @@ async def test_user_form_exception(hass, ezviz_config_flow): assert result["reason"] == "unknown" -async def test_import_exception(hass, ezviz_config_flow): - """Test we handle unexpected exception on import.""" - ezviz_config_flow.side_effect = PyEzvizError - - result = await hass.config_entries.flow.async_init( - DOMAIN, context={"source": SOURCE_IMPORT}, data=YAML_CONFIG - ) - - assert result["type"] == RESULT_TYPE_ABORT - assert result["reason"] == "invalid_auth" - - ezviz_config_flow.side_effect = InvalidURL - - result = await hass.config_entries.flow.async_init( - DOMAIN, context={"source": SOURCE_IMPORT}, data=YAML_CONFIG - ) - - assert result["type"] == RESULT_TYPE_ABORT - assert result["reason"] == "invalid_host" - - ezviz_config_flow.side_effect = HTTPError - - result = await hass.config_entries.flow.async_init( - DOMAIN, context={"source": SOURCE_IMPORT}, data=YAML_CONFIG - ) - - assert result["type"] == RESULT_TYPE_ABORT - assert result["reason"] == "cannot_connect" - - ezviz_config_flow.side_effect = Exception - - result = await hass.config_entries.flow.async_init( - DOMAIN, context={"source": SOURCE_IMPORT}, data=YAML_CONFIG - ) - - assert result["type"] == RESULT_TYPE_ABORT - assert result["reason"] == "unknown" - - async def test_discover_exception_step1( hass, ezviz_config_flow, From 9614e8496b84f698891a1660c7b30786bbbca44a Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Thu, 31 Mar 2022 22:38:54 +0200 Subject: [PATCH 041/238] Remove deprecated YAML configuration from Fronius (#69032) --- .../components/fronius/config_flow.py | 6 +-- homeassistant/components/fronius/sensor.py | 40 +------------------ tests/components/fronius/test_config_flow.py | 32 +-------------- 3 files changed, 4 insertions(+), 74 deletions(-) diff --git a/homeassistant/components/fronius/config_flow.py b/homeassistant/components/fronius/config_flow.py index 00ddd9335a3..15b8cd7a3b8 100644 --- a/homeassistant/components/fronius/config_flow.py +++ b/homeassistant/components/fronius/config_flow.py @@ -10,7 +10,7 @@ import voluptuous as vol from homeassistant import config_entries from homeassistant.components.dhcp import DhcpServiceInfo -from homeassistant.const import CONF_HOST, CONF_RESOURCE +from homeassistant.const import CONF_HOST from homeassistant.core import HomeAssistant from homeassistant.data_entry_flow import FlowResult from homeassistant.exceptions import HomeAssistantError @@ -110,10 +110,6 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): step_id="user", data_schema=STEP_USER_DATA_SCHEMA, errors=errors ) - async def async_step_import(self, conf: dict) -> FlowResult: - """Import a configuration from config.yaml.""" - return await self.async_step_user(user_input={CONF_HOST: conf[CONF_RESOURCE]}) - async def async_step_dhcp(self, discovery_info: DhcpServiceInfo) -> FlowResult: """Handle a flow initiated by the DHCP client.""" for entry in self._async_current_entries(include_ignore=False): diff --git a/homeassistant/components/fronius/sensor.py b/homeassistant/components/fronius/sensor.py index f13caf83a5d..c3b219c4b22 100644 --- a/homeassistant/components/fronius/sensor.py +++ b/homeassistant/components/fronius/sensor.py @@ -1,23 +1,17 @@ """Support for Fronius devices.""" from __future__ import annotations -import logging from typing import TYPE_CHECKING, Any, Final -import voluptuous as vol - from homeassistant.components.sensor import ( DOMAIN as SENSOR_DOMAIN, - PLATFORM_SCHEMA, SensorDeviceClass, SensorEntity, SensorEntityDescription, SensorStateClass, ) -from homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry +from homeassistant.config_entries import ConfigEntry from homeassistant.const import ( - CONF_MONITORED_CONDITIONS, - CONF_RESOURCE, ELECTRIC_CURRENT_AMPERE, ELECTRIC_POTENTIAL_VOLT, ENERGY_WATT_HOUR, @@ -29,10 +23,8 @@ from homeassistant.const import ( TEMP_CELSIUS, ) from homeassistant.core import HomeAssistant, callback -import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity import DeviceInfo, EntityCategory from homeassistant.helpers.entity_platform import AddEntitiesCallback -from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType from homeassistant.helpers.update_coordinator import CoordinatorEntity from .const import DOMAIN @@ -49,38 +41,8 @@ if TYPE_CHECKING: FroniusStorageUpdateCoordinator, ) -_LOGGER: Final = logging.getLogger(__name__) - ENERGY_VOLT_AMPERE_REACTIVE_HOUR: Final = "varh" -PLATFORM_SCHEMA = vol.All( - PLATFORM_SCHEMA.extend( - { - vol.Required(CONF_RESOURCE): cv.url, - vol.Optional(CONF_MONITORED_CONDITIONS): object, - } - ), -) - - -async def async_setup_platform( - hass: HomeAssistant, - config: ConfigType, - async_add_entities: AddEntitiesCallback, - discovery_info: DiscoveryInfoType | None = None, -) -> None: - """Import Fronius configuration from yaml.""" - _LOGGER.warning( - "Loading Fronius via platform setup is deprecated. Please remove it from your yaml configuration" - ) - hass.async_create_task( - hass.config_entries.flow.async_init( - DOMAIN, - context={"source": SOURCE_IMPORT}, - data=config, - ) - ) - async def async_setup_entry( hass: HomeAssistant, diff --git a/tests/components/fronius/test_config_flow.py b/tests/components/fronius/test_config_flow.py index c6f2f69ce5f..256d64d4cbe 100644 --- a/tests/components/fronius/test_config_flow.py +++ b/tests/components/fronius/test_config_flow.py @@ -7,17 +7,15 @@ import pytest from homeassistant import config_entries from homeassistant.components.dhcp import DhcpServiceInfo from homeassistant.components.fronius.const import DOMAIN -from homeassistant.components.sensor import DOMAIN as SENSOR_DOMAIN -from homeassistant.const import CONF_HOST, CONF_RESOURCE +from homeassistant.const import CONF_HOST from homeassistant.core import HomeAssistant from homeassistant.data_entry_flow import ( RESULT_TYPE_ABORT, RESULT_TYPE_CREATE_ENTRY, RESULT_TYPE_FORM, ) -from homeassistant.setup import async_setup_component -from . import MOCK_HOST, mock_responses +from . import mock_responses from tests.common import MockConfigEntry @@ -260,32 +258,6 @@ async def test_form_updates_host(hass, aioclient_mock): } -async def test_import(hass, aioclient_mock): - """Test import step.""" - mock_responses(aioclient_mock) - assert await async_setup_component( - hass, - SENSOR_DOMAIN, - { - SENSOR_DOMAIN: { - "platform": DOMAIN, - CONF_RESOURCE: MOCK_HOST, - } - }, - ) - await hass.async_block_till_done() - - fronius_entries = hass.config_entries.async_entries(DOMAIN) - assert len(fronius_entries) == 1 - - test_entry = fronius_entries[0] - assert test_entry.unique_id == "123.4567890" # has to match mocked logger unique_id - assert test_entry.data == { - "host": MOCK_HOST, - "is_logger": True, - } - - async def test_dhcp(hass, aioclient_mock): """Test starting a flow from discovery.""" with patch( From dcbca89d06588840094db5e07666344e38c8b866 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Thu, 31 Mar 2022 22:35:44 +0200 Subject: [PATCH 042/238] Remove deprecated YAML configuration from Yamaha Music Cast (#69033) --- .../yamaha_musiccast/config_flow.py | 15 ----- .../components/yamaha_musiccast/const.py | 1 - .../yamaha_musiccast/media_player.py | 57 +------------------ .../yamaha_musiccast/test_config_flow.py | 55 ------------------ 4 files changed, 3 insertions(+), 125 deletions(-) diff --git a/homeassistant/components/yamaha_musiccast/config_flow.py b/homeassistant/components/yamaha_musiccast/config_flow.py index 4049a5d6a37..94153a47fdc 100644 --- a/homeassistant/components/yamaha_musiccast/config_flow.py +++ b/homeassistant/components/yamaha_musiccast/config_flow.py @@ -131,18 +131,3 @@ class MusicCastFlowHandler(ConfigFlow, domain=DOMAIN): ) return self.async_show_form(step_id="confirm") - - async def async_step_import(self, import_data: dict) -> data_entry_flow.FlowResult: - """Import data from configuration.yaml into the config flow.""" - res = await self.async_step_user(import_data) - if res["type"] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY: - _LOGGER.info( - "Successfully imported %s from configuration.yaml", - import_data.get(CONF_HOST), - ) - elif res["type"] == data_entry_flow.RESULT_TYPE_FORM: - _LOGGER.error( - "Could not import %s from configuration.yaml", - import_data.get(CONF_HOST), - ) - return res diff --git a/homeassistant/components/yamaha_musiccast/const.py b/homeassistant/components/yamaha_musiccast/const.py index 21b7de82184..7846cab1754 100644 --- a/homeassistant/components/yamaha_musiccast/const.py +++ b/homeassistant/components/yamaha_musiccast/const.py @@ -34,7 +34,6 @@ HA_REPEAT_MODE_TO_MC_MAPPING = { NULL_GROUP = "00000000000000000000000000000000" -INTERVAL_SECONDS = "interval_seconds" MC_REPEAT_MODE_TO_HA_MAPPING = { val: key for key, val in HA_REPEAT_MODE_TO_MC_MAPPING.items() diff --git a/homeassistant/components/yamaha_musiccast/media_player.py b/homeassistant/components/yamaha_musiccast/media_player.py index ff62799ec58..3618bc78dbe 100644 --- a/homeassistant/components/yamaha_musiccast/media_player.py +++ b/homeassistant/components/yamaha_musiccast/media_player.py @@ -6,14 +6,9 @@ import logging from aiomusiccast import MusicCastGroupException, MusicCastMediaContent from aiomusiccast.features import ZoneFeature -import voluptuous as vol from homeassistant.components import media_source -from homeassistant.components.media_player import ( - PLATFORM_SCHEMA, - BrowseMedia, - MediaPlayerEntity, -) +from homeassistant.components.media_player import BrowseMedia, MediaPlayerEntity from homeassistant.components.media_player.browse_media import ( async_process_play_media_url, ) @@ -40,21 +35,12 @@ from homeassistant.components.media_player.const import ( SUPPORT_VOLUME_SET, SUPPORT_VOLUME_STEP, ) -from homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry -from homeassistant.const import ( - CONF_HOST, - CONF_PORT, - STATE_IDLE, - STATE_OFF, - STATE_PAUSED, - STATE_PLAYING, -) +from homeassistant.config_entries import ConfigEntry +from homeassistant.const import STATE_IDLE, STATE_OFF, STATE_PAUSED, STATE_PLAYING from homeassistant.core import HomeAssistant, callback from homeassistant.exceptions import HomeAssistantError -import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity_platform import AddEntitiesCallback -from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType from homeassistant.util import uuid from . import MusicCastDataUpdateCoordinator, MusicCastDeviceEntity @@ -64,7 +50,6 @@ from .const import ( DEFAULT_ZONE, DOMAIN, HA_REPEAT_MODE_TO_MC_MAPPING, - INTERVAL_SECONDS, MC_REPEAT_MODE_TO_HA_MAPPING, MEDIA_CLASS_MAPPING, NULL_GROUP, @@ -81,42 +66,6 @@ MUSIC_PLAYER_BASE_SUPPORT = ( | SUPPORT_PLAY_MEDIA ) -PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( - { - vol.Required(CONF_HOST): cv.string, - vol.Optional(CONF_PORT, default=5000): cv.port, - vol.Optional(INTERVAL_SECONDS, default=0): cv.positive_int, - } -) - - -async def async_setup_platform( - hass: HomeAssistant, - config: ConfigType, - async_add_devices: AddEntitiesCallback, - discovery_info: DiscoveryInfoType | None = None, -) -> None: - """Import legacy configurations.""" - - if hass.config_entries.async_entries(DOMAIN) and config[CONF_HOST] not in [ - entry.data[CONF_HOST] for entry in hass.config_entries.async_entries(DOMAIN) - ]: - _LOGGER.error( - "Configuration in configuration.yaml is not supported anymore. " - "Please add this device using the config flow: %s", - config[CONF_HOST], - ) - else: - _LOGGER.warning( - "Configuration in configuration.yaml is deprecated. Use the config flow instead" - ) - - hass.async_create_task( - hass.config_entries.flow.async_init( - DOMAIN, context={"source": SOURCE_IMPORT}, data=config - ) - ) - async def async_setup_entry( hass: HomeAssistant, diff --git a/tests/components/yamaha_musiccast/test_config_flow.py b/tests/components/yamaha_musiccast/test_config_flow.py index bddc350cff8..fc9a740d4a6 100644 --- a/tests/components/yamaha_musiccast/test_config_flow.py +++ b/tests/components/yamaha_musiccast/test_config_flow.py @@ -250,61 +250,6 @@ async def test_user_input_device_found_no_ssdp( } -async def test_import_device_already_existing( - hass, mock_get_device_info_valid, mock_get_source_ip -): - """Test when the configurations.yaml contains an existing device.""" - mock_entry = MockConfigEntry( - domain=DOMAIN, - unique_id="1234567890", - data={CONF_HOST: "192.168.188.18", "model": "MC20", "serial": "1234567890"}, - ) - mock_entry.add_to_hass(hass) - - config = {"platform": "yamaha_musiccast", "host": "192.168.188.18", "port": 5006} - - result = await hass.config_entries.flow.async_init( - DOMAIN, context={"source": config_entries.SOURCE_IMPORT}, data=config - ) - - assert result["type"] == data_entry_flow.RESULT_TYPE_ABORT - assert result["reason"] == "already_configured" - - -async def test_import_error(hass, mock_get_device_info_exception, mock_get_source_ip): - """Test when in the configuration.yaml a device is configured, which cannot be added..""" - config = {"platform": "yamaha_musiccast", "host": "192.168.188.18", "port": 5006} - - result = await hass.config_entries.flow.async_init( - DOMAIN, context={"source": config_entries.SOURCE_IMPORT}, data=config - ) - - assert result["type"] == data_entry_flow.RESULT_TYPE_FORM - assert result["errors"] == {"base": "unknown"} - - -async def test_import_device_successful( - hass, - mock_get_device_info_valid, - mock_valid_discovery_information, - mock_get_source_ip, -): - """Test when the device was imported successfully.""" - config = {"platform": "yamaha_musiccast", "host": "127.0.0.1", "port": 5006} - - result = await hass.config_entries.flow.async_init( - DOMAIN, context={"source": config_entries.SOURCE_IMPORT}, data=config - ) - - assert result["type"] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY - assert isinstance(result["result"], ConfigEntry) - assert result["data"] == { - "host": "127.0.0.1", - "serial": "1234567890", - "upnp_description": "http://127.0.0.1:9000/MediaRenderer/desc.xml", - } - - # SSDP Flows From 2cb77c470214457bcd85392b0e3d6003fea150b3 Mon Sep 17 00:00:00 2001 From: Dave T <17680170+davet2001@users.noreply.github.com> Date: Thu, 31 Mar 2022 23:05:39 +0100 Subject: [PATCH 043/238] Improve image checks for generic camera (#69037) --- homeassistant/components/generic/config_flow.py | 12 +++++++++--- homeassistant/components/generic/manifest.json | 2 +- requirements_all.txt | 1 + requirements_test_all.txt | 1 + 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/generic/config_flow.py b/homeassistant/components/generic/config_flow.py index c5c645264d6..d3b2a260477 100644 --- a/homeassistant/components/generic/config_flow.py +++ b/homeassistant/components/generic/config_flow.py @@ -4,12 +4,13 @@ from __future__ import annotations import contextlib from errno import EHOSTUNREACH, EIO from functools import partial -import imghdr +import io import logging from types import MappingProxyType from typing import Any from urllib.parse import urlparse, urlunparse +import PIL from async_timeout import timeout import av from httpx import HTTPStatusError, RequestError, TimeoutException @@ -110,9 +111,14 @@ def build_schema( def get_image_type(image): """Get the format of downloaded bytes that could be an image.""" - fmt = imghdr.what(None, h=image) + fmt = None + imagefile = io.BytesIO(image) + with contextlib.suppress(PIL.UnidentifiedImageError): + img = PIL.Image.open(imagefile) + fmt = img.format.lower() + if fmt is None: - # if imghdr can't figure it out, could be svg. + # if PIL can't figure it out, could be svg. with contextlib.suppress(UnicodeDecodeError): if image.decode("utf-8").lstrip().startswith(" Date: Thu, 31 Mar 2022 15:10:09 -0700 Subject: [PATCH 044/238] Bumped version to 2022.4.0b1 --- homeassistant/const.py | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/const.py b/homeassistant/const.py index da56eb9b024..d4c91230467 100644 --- a/homeassistant/const.py +++ b/homeassistant/const.py @@ -7,7 +7,7 @@ from .backports.enum import StrEnum MAJOR_VERSION: Final = 2022 MINOR_VERSION: Final = 4 -PATCH_VERSION: Final = "0b0" +PATCH_VERSION: Final = "0b1" __short_version__: Final = f"{MAJOR_VERSION}.{MINOR_VERSION}" __version__: Final = f"{__short_version__}.{PATCH_VERSION}" REQUIRED_PYTHON_VER: Final[tuple[int, int, int]] = (3, 9, 0) diff --git a/setup.cfg b/setup.cfg index 2ffe01ec5cc..875e7bbf829 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = homeassistant -version = 2022.4.0b0 +version = 2022.4.0b1 author = The Home Assistant Authors author_email = hello@home-assistant.io license = Apache-2.0 From e4395dee6c7b7d2e0b807e20bceb71168e6fd2c9 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Fri, 1 Apr 2022 05:49:21 -1000 Subject: [PATCH 045/238] Convert statistics to use history api for database access (#68411) --- homeassistant/components/statistics/sensor.py | 54 ++++++++----------- 1 file changed, 22 insertions(+), 32 deletions(-) diff --git a/homeassistant/components/statistics/sensor.py b/homeassistant/components/statistics/sensor.py index d632e9710cf..aaca8a98290 100644 --- a/homeassistant/components/statistics/sensor.py +++ b/homeassistant/components/statistics/sensor.py @@ -12,9 +12,7 @@ from typing import Any, Literal, cast import voluptuous as vol from homeassistant.components.binary_sensor import DOMAIN as BINARY_SENSOR_DOMAIN -from homeassistant.components.recorder import get_instance -from homeassistant.components.recorder.models import StateAttributes, States -from homeassistant.components.recorder.util import execute, session_scope +from homeassistant.components.recorder import get_instance, history from homeassistant.components.sensor import ( PLATFORM_SCHEMA, SensorDeviceClass, @@ -474,37 +472,29 @@ class StatisticsSensor(SensorEntity): def _fetch_states_from_database(self) -> list[State]: """Fetch the states from the database.""" _LOGGER.debug("%s: initializing values from the database", self.entity_id) - states = [] - - with session_scope(hass=self.hass) as session: - query = session.query(States, StateAttributes).filter( - States.entity_id == self._source_entity_id.lower() + lower_entity_id = self._source_entity_id.lower() + if self._samples_max_age is not None: + start_date = ( + dt_util.utcnow() - self._samples_max_age - timedelta(microseconds=1) ) - - if self._samples_max_age is not None: - records_older_then = dt_util.utcnow() - self._samples_max_age - _LOGGER.debug( - "%s: retrieve records not older then %s", - self.entity_id, - records_older_then, - ) - query = query.filter(States.last_updated >= records_older_then) - else: - _LOGGER.debug("%s: retrieving all records", self.entity_id) - - query = query.outerjoin( - StateAttributes, States.attributes_id == StateAttributes.attributes_id + _LOGGER.debug( + "%s: retrieve records not older then %s", + self.entity_id, + start_date, ) - query = query.order_by(States.last_updated.desc()).limit( - self._samples_max_buffer_size - ) - if results := execute(query, to_native=False, validate_entity_ids=False): - for state, attributes in results: - native = state.to_native() - if not native.attributes: - native.attributes = attributes.to_native() - states.append(native) - return states + else: + start_date = datetime.fromtimestamp(0, tz=dt_util.UTC) + _LOGGER.debug("%s: retrieving all records", self.entity_id) + entity_states = history.state_changes_during_period( + self.hass, + start_date, + entity_id=lower_entity_id, + descending=True, + limit=self._samples_max_buffer_size, + include_start_time_state=False, + ) + # Need to cast since minimal responses is not passed in + return cast(list[State], entity_states.get(lower_entity_id, [])) async def _initialize_from_database(self) -> None: """Initialize the list of states from the database. From 3659bceedb285b58075fb8609ffcd21b39f09dee Mon Sep 17 00:00:00 2001 From: Chris Talkington Date: Fri, 1 Apr 2022 06:39:28 -0500 Subject: [PATCH 046/238] Update rokuecp to 0.16.0 (#68822) --- homeassistant/components/roku/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/roku/manifest.json b/homeassistant/components/roku/manifest.json index 433ce6b29d1..3f63a7039c1 100644 --- a/homeassistant/components/roku/manifest.json +++ b/homeassistant/components/roku/manifest.json @@ -2,7 +2,7 @@ "domain": "roku", "name": "Roku", "documentation": "https://www.home-assistant.io/integrations/roku", - "requirements": ["rokuecp==0.15.0"], + "requirements": ["rokuecp==0.16.0"], "homekit": { "models": ["3810X", "4660X", "7820X", "C105X", "C135X"] }, diff --git a/requirements_all.txt b/requirements_all.txt index acc692d436c..b3ae57a6563 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -2063,7 +2063,7 @@ rjpl==0.3.6 rocketchat-API==0.6.1 # homeassistant.components.roku -rokuecp==0.15.0 +rokuecp==0.16.0 # homeassistant.components.roomba roombapy==1.6.5 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 2fd96b24c89..c952dfe9a3b 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -1333,7 +1333,7 @@ rflink==0.0.62 ring_doorbell==0.7.2 # homeassistant.components.roku -rokuecp==0.15.0 +rokuecp==0.16.0 # homeassistant.components.roomba roombapy==1.6.5 From 43b9e4febfd44d3026f4355d31a2a7082e98593b Mon Sep 17 00:00:00 2001 From: Matthias Alphart Date: Fri, 1 Apr 2022 00:15:53 +0200 Subject: [PATCH 047/238] Update KNX flow strings to use "data_description" and remove invalid options (#68935) * use `data_description` * use selectors so `data_description` shows * remove unused config option `individual_address` has no effect for tunneling. The address is always assigned by the tunnelling server. * remove unsupported option for tunneling V1 devices --- homeassistant/components/knx/config_flow.py | 67 +++++++++------ homeassistant/components/knx/strings.json | 65 ++++++++++----- .../components/knx/translations/en.json | 81 +++++++++++++------ 3 files changed, 144 insertions(+), 69 deletions(-) diff --git a/homeassistant/components/knx/config_flow.py b/homeassistant/components/knx/config_flow.py index 3cedf518e1a..e7e8854a9fb 100644 --- a/homeassistant/components/knx/config_flow.py +++ b/homeassistant/components/knx/config_flow.py @@ -15,7 +15,7 @@ from homeassistant.config_entries import ConfigEntry, OptionsFlow from homeassistant.const import CONF_HOST, CONF_PORT from homeassistant.core import callback from homeassistant.data_entry_flow import FlowResult -import homeassistant.helpers.config_validation as cv +from homeassistant.helpers import selector from homeassistant.helpers.storage import STORAGE_DIR from .const import ( @@ -63,6 +63,10 @@ CONF_KNX_LABEL_TUNNELING_TCP_SECURE: Final = "TCP with IP Secure" CONF_KNX_LABEL_TUNNELING_UDP: Final = "UDP" CONF_KNX_LABEL_TUNNELING_UDP_ROUTE_BACK: Final = "UDP with route back / NAT mode" +_IA_SELECTOR = selector.selector({"text": {}}) +_IP_SELECTOR = selector.selector({"text": {}}) +_PORT_SELECTOR = selector.selector({"number": {"min": 1, "max": 65535, "mode": "box"}}) + class FlowHandler(config_entries.ConfigFlow, domain=DOMAIN): """Handle a KNX config flow.""" @@ -164,7 +168,6 @@ class FlowHandler(config_entries.ConfigFlow, domain=DOMAIN): **DEFAULT_ENTRY_DATA, # type: ignore[misc] CONF_HOST: user_input[CONF_HOST], CONF_PORT: user_input[CONF_PORT], - CONF_KNX_INDIVIDUAL_ADDRESS: user_input[CONF_KNX_INDIVIDUAL_ADDRESS], CONF_KNX_ROUTE_BACK: ( connection_type == CONF_KNX_LABEL_TUNNELING_UDP_ROUTE_BACK ), @@ -202,18 +205,16 @@ class FlowHandler(config_entries.ConfigFlow, domain=DOMAIN): port = self._selected_tunnel.port if not self._selected_tunnel.supports_tunnelling_tcp: connection_methods.remove(CONF_KNX_LABEL_TUNNELING_TCP) + connection_methods.remove(CONF_KNX_LABEL_TUNNELING_TCP_SECURE) fields = { vol.Required(CONF_KNX_TUNNELING_TYPE): vol.In(connection_methods), - vol.Required(CONF_HOST, default=ip_address): str, - vol.Required(CONF_PORT, default=port): cv.port, - vol.Required( - CONF_KNX_INDIVIDUAL_ADDRESS, default=XKNX.DEFAULT_ADDRESS - ): str, + vol.Required(CONF_HOST, default=ip_address): _IP_SELECTOR, + vol.Required(CONF_PORT, default=port): _PORT_SELECTOR, } if self.show_advanced_options: - fields[vol.Optional(CONF_KNX_LOCAL_IP)] = str + fields[vol.Optional(CONF_KNX_LOCAL_IP)] = _IP_SELECTOR return self.async_show_form( step_id="manual_tunnel", data_schema=vol.Schema(fields), errors=errors @@ -245,9 +246,15 @@ class FlowHandler(config_entries.ConfigFlow, domain=DOMAIN): ) fields = { - vol.Required(CONF_KNX_SECURE_USER_ID): int, - vol.Required(CONF_KNX_SECURE_USER_PASSWORD): str, - vol.Required(CONF_KNX_SECURE_DEVICE_AUTHENTICATION): str, + vol.Required(CONF_KNX_SECURE_USER_ID, default=2): selector.selector( + {"number": {"min": 1, "max": 127, "mode": "box"}} + ), + vol.Required(CONF_KNX_SECURE_USER_PASSWORD): selector.selector( + {"text": {"type": "password"}} + ), + vol.Required(CONF_KNX_SECURE_DEVICE_AUTHENTICATION): selector.selector( + {"text": {"type": "password"}} + ), } return self.async_show_form( @@ -290,8 +297,8 @@ class FlowHandler(config_entries.ConfigFlow, domain=DOMAIN): errors["base"] = "file_not_found" fields = { - vol.Required(CONF_KNX_KNXKEY_FILENAME): str, - vol.Required(CONF_KNX_KNXKEY_PASSWORD): str, + vol.Required(CONF_KNX_KNXKEY_FILENAME): selector.selector({"text": {}}), + vol.Required(CONF_KNX_KNXKEY_PASSWORD): selector.selector({"text": {}}), } return self.async_show_form( @@ -319,13 +326,15 @@ class FlowHandler(config_entries.ConfigFlow, domain=DOMAIN): fields = { vol.Required( CONF_KNX_INDIVIDUAL_ADDRESS, default=XKNX.DEFAULT_ADDRESS - ): str, - vol.Required(CONF_KNX_MCAST_GRP, default=DEFAULT_MCAST_GRP): str, - vol.Required(CONF_KNX_MCAST_PORT, default=DEFAULT_MCAST_PORT): cv.port, + ): _IA_SELECTOR, + vol.Required(CONF_KNX_MCAST_GRP, default=DEFAULT_MCAST_GRP): _IP_SELECTOR, + vol.Required( + CONF_KNX_MCAST_PORT, default=DEFAULT_MCAST_PORT + ): _PORT_SELECTOR, } if self.show_advanced_options: - fields[vol.Optional(CONF_KNX_LOCAL_IP)] = str + fields[vol.Optional(CONF_KNX_LOCAL_IP)] = _IP_SELECTOR return self.async_show_form( step_id="routing", data_schema=vol.Schema(fields), errors=errors @@ -370,17 +379,17 @@ class KNXOptionsFlowHandler(OptionsFlow): vol.Required( CONF_KNX_INDIVIDUAL_ADDRESS, default=self.current_config[CONF_KNX_INDIVIDUAL_ADDRESS], - ): str, + ): selector.selector({"text": {}}), vol.Required( CONF_KNX_MCAST_GRP, default=self.current_config.get(CONF_KNX_MCAST_GRP, DEFAULT_MCAST_GRP), - ): str, + ): _IP_SELECTOR, vol.Required( CONF_KNX_MCAST_PORT, default=self.current_config.get( CONF_KNX_MCAST_PORT, DEFAULT_MCAST_PORT ), - ): cv.port, + ): _PORT_SELECTOR, } if self.show_advanced_options: @@ -394,7 +403,7 @@ class KNXOptionsFlowHandler(OptionsFlow): CONF_KNX_LOCAL_IP, default=local_ip, ) - ] = str + ] = _IP_SELECTOR data_schema[ vol.Required( CONF_KNX_STATE_UPDATER, @@ -403,7 +412,7 @@ class KNXOptionsFlowHandler(OptionsFlow): CONF_KNX_DEFAULT_STATE_UPDATER, ), ) - ] = bool + ] = selector.selector({"boolean": {}}) data_schema[ vol.Required( CONF_KNX_RATE_LIMIT, @@ -412,7 +421,15 @@ class KNXOptionsFlowHandler(OptionsFlow): CONF_KNX_DEFAULT_RATE_LIMIT, ), ) - ] = vol.All(vol.Coerce(int), vol.Range(min=1, max=CONF_MAX_RATE_LIMIT)) + ] = selector.selector( + { + "number": { + "min": 1, + "max": CONF_MAX_RATE_LIMIT, + "mode": "box", + } + } + ) return self.async_show_form( step_id="init", @@ -444,10 +461,10 @@ class KNXOptionsFlowHandler(OptionsFlow): ): vol.In(connection_methods), vol.Required( CONF_HOST, default=self.current_config.get(CONF_HOST) - ): str, + ): _IP_SELECTOR, vol.Required( CONF_PORT, default=self.current_config.get(CONF_PORT, 3671) - ): cv.port, + ): _PORT_SELECTOR, } ), last_step=True, diff --git a/homeassistant/components/knx/strings.json b/homeassistant/components/knx/strings.json index 1a7f3481a1a..2149dd96a47 100644 --- a/homeassistant/components/knx/strings.json +++ b/homeassistant/components/knx/strings.json @@ -19,39 +19,56 @@ "tunneling_type": "KNX Tunneling Type", "port": "[%key:common::config_flow::data::port%]", "host": "[%key:common::config_flow::data::host%]", - "individual_address": "Individual address for the connection", - "local_ip": "Local IP of Home Assistant (leave empty for automatic detection)" + "local_ip": "Local IP of Home Assistant" + }, + "data_description": { + "port": "Port of the KNX/IP tunneling device.", + "host": "IP address of the KNX/IP tunneling device.", + "local_ip": "Leave blank to use auto-discovery." } }, "secure_tunneling": { - "description": "Select how you want to configure IP Secure.", + "description": "Select how you want to configure KNX/IP Secure.", "menu_options": { - "secure_knxkeys": "Configure a knxkeys file containing IP secure information", - "secure_manual": "Configure IP secure manually" + "secure_knxkeys": "Use a `.knxkeys` file containing IP secure keys", + "secure_manual": "Configure IP secure keys manually" } }, "secure_knxkeys": { - "description": "Please enter the information for your knxkeys file.", + "description": "Please enter the information for your `.knxkeys` file.", "data": { - "knxkeys_filename": "The full name of your knxkeys file", - "knxkeys_password": "The password to decrypt the knxkeys file" + "knxkeys_filename": "The filename of your `.knxkeys` file (including extension)", + "knxkeys_password": "The password to decrypt the `.knxkeys` file" + }, + "data_description": { + "knxkeys_filename": "The file is expected to be found in your config directory in `.storage/knx/`.\nIn Home Assistant OS this would be `/config/.storage/knx/`\nExample: `my_project.knxkeys`", + "knxkeys_password": "This was set when exporting the file from ETS." } }, "secure_manual": { - "description": "Please enter the IP secure information.", + "description": "Please enter your IP secure information.", "data": { "user_id": "User ID", "user_password": "User password", "device_authentication": "Device authentication password" + }, + "data_description": { + "user_id": "This is often tunnel number +1. So 'Tunnel 2' would have User-ID '3'.", + "user_password": "Password for the specific tunnel connection set in the 'Properties' panel of the tunnel in ETS.", + "device_authentication": "This is set in the 'IP' panel of the interface in ETS." } }, "routing": { "description": "Please configure the routing options.", "data": { - "individual_address": "Individual address for the routing connection", - "multicast_group": "The multicast group used for routing", - "multicast_port": "The multicast port used for routing", - "local_ip": "Local IP of Home Assistant (leave empty for automatic detection)" + "individual_address": "Individual address", + "multicast_group": "Multicast group used for routing", + "multicast_port": "Multicast port used for routing", + "local_ip": "Local IP of Home Assistant" + }, + "data_description": { + "individual_address": "KNX address to be used by Home Assistant, e.g. `0.0.4`", + "local_ip": "Leave blank to use auto-discovery." } } }, @@ -71,11 +88,19 @@ "data": { "connection_type": "KNX Connection Type", "individual_address": "Default individual address", - "multicast_group": "Multicast group used for routing and discovery", - "multicast_port": "Multicast port used for routing and discovery", - "local_ip": "Local IP of Home Assistant (use 0.0.0.0 for automatic detection)", - "state_updater": "Globally enable reading states from the KNX Bus", - "rate_limit": "Maximum outgoing telegrams per second" + "multicast_group": "Multicast group", + "multicast_port": "Multicast port", + "local_ip": "Local IP of Home Assistant", + "state_updater": "State updater", + "rate_limit": "Rate limit" + }, + "data_description": { + "individual_address": "KNX address to be used by Home Assistant, e.g. `0.0.4`", + "multicast_group": "Used for routing and discovery. Default: `224.0.23.12`", + "multicast_port": "Used for routing and discovery. Default: `3671`", + "local_ip": "Use `0.0.0.0` for auto-discovery.", + "state_updater": "Globally enable or disable reading states from the KNX Bus. When disabled, Home Assistant will not actively retrieve states from the KNX Bus, `sync_state` entity options will have no effect.", + "rate_limit": "Maximum outgoing telegrams per second.\nRecommended: 20 to 40" } }, "tunnel": { @@ -83,6 +108,10 @@ "tunneling_type": "KNX Tunneling Type", "port": "[%key:common::config_flow::data::port%]", "host": "[%key:common::config_flow::data::host%]" + }, + "data_description": { + "port": "Port of the KNX/IP tunneling device.", + "host": "IP address of the KNX/IP tunneling device." } } } diff --git a/homeassistant/components/knx/translations/en.json b/homeassistant/components/knx/translations/en.json index f5ec7afc46b..640cb4a5358 100644 --- a/homeassistant/components/knx/translations/en.json +++ b/homeassistant/components/knx/translations/en.json @@ -13,44 +13,61 @@ "manual_tunnel": { "data": { "host": "Host", - "individual_address": "Individual address for the connection", - "local_ip": "Local IP of Home Assistant (leave empty for automatic detection)", + "local_ip": "Local IP of Home Assistant", "port": "Port", "tunneling_type": "KNX Tunneling Type" }, + "data_description": { + "host": "IP address of the KNX/IP tunneling device.", + "local_ip": "Leave blank to use auto-discovery.", + "port": "Port of the KNX/IP tunneling device." + }, "description": "Please enter the connection information of your tunneling device." }, "routing": { "data": { - "individual_address": "Individual address for the routing connection", - "local_ip": "Local IP of Home Assistant (leave empty for automatic detection)", - "multicast_group": "The multicast group used for routing", - "multicast_port": "The multicast port used for routing" + "individual_address": "Individual address", + "local_ip": "Local IP of Home Assistant", + "multicast_group": "Multicast group used for routing", + "multicast_port": "Multicast port used for routing" + }, + "data_description": { + "individual_address": "KNX address to be used by Home Assistant, e.g. `0.0.4`", + "local_ip": "Leave blank to use auto-discovery." }, "description": "Please configure the routing options." }, "secure_knxkeys": { "data": { - "knxkeys_filename": "The full name of your knxkeys file", - "knxkeys_password": "The password to decrypt the knxkeys file." + "knxkeys_filename": "The filename of your `.knxkeys` file (including extension)", + "knxkeys_password": "The password to decrypt the `.knxkeys` file" }, - "description": "Please enter the information for your knxkeys file." - }, - "secure_tunneling": { - "description": "Select how you want to configure IP Secure.", - "menu_options": { - "secure_knxkeys": "Configure a knxkeys file containing IP secure information", - "secure_manual": "Configure IP secure manually" - } + "data_description": { + "knxkeys_filename": "The file is expected to be found in your config directory in `.storage/knx/`.\nIn Home Assistant OS this would be `/config/.storage/knx/`\nExample: `my_project.knxkeys`", + "knxkeys_password": "This was set when exporting the file from ETS." + }, + "description": "Please enter the information for your `.knxkeys` file." }, "secure_manual": { - "description": "Please enter the IP secure information.", "data": { - "user_id": "User ID", - "user_password": "User password", - "device_authentication": "Device authentication password" + "device_authentication": "Device authentication password", + "user_id": "User ID", + "user_password": "User password" + }, + "data_description": { + "device_authentication": "This is set in the 'IP' panel of the interface in ETS.", + "user_id": "This is often tunnel number +1. So 'Tunnel 2' would have User-ID '3'.", + "user_password": "Password for the specific tunnel connection set in the 'Properties' panel of the tunnel in ETS." + }, + "description": "Please enter your IP secure information." + }, + "secure_tunneling": { + "description": "Select how you want to configure KNX/IP Secure.", + "menu_options": { + "secure_knxkeys": "Use a `.knxkeys` file containing IP secure keys", + "secure_manual": "Configure IP secure keys manually" } - }, + }, "tunnel": { "data": { "gateway": "KNX Tunnel Connection" @@ -71,11 +88,19 @@ "data": { "connection_type": "KNX Connection Type", "individual_address": "Default individual address", - "local_ip": "Local IP of Home Assistant (use 0.0.0.0 for automatic detection)", - "multicast_group": "Multicast group used for routing and discovery", - "multicast_port": "Multicast port used for routing and discovery", - "rate_limit": "Maximum outgoing telegrams per second", - "state_updater": "Globally enable reading states from the KNX Bus" + "local_ip": "Local IP of Home Assistant", + "multicast_group": "Multicast group", + "multicast_port": "Multicast port", + "rate_limit": "Rate limit", + "state_updater": "State updater" + }, + "data_description": { + "individual_address": "KNX address to be used by Home Assistant, e.g. `0.0.4`", + "local_ip": "Use `0.0.0.0` for auto-discovery.", + "multicast_group": "Used for routing and discovery. Default: `224.0.23.12`", + "multicast_port": "Used for routing and discovery. Default: `3671`", + "rate_limit": "Maximum outgoing telegrams per second.\nRecommended: 20 to 40", + "state_updater": "Globally enable or disable reading states from the KNX Bus. When disabled, Home Assistant will not actively retrieve states from the KNX Bus, `sync_state` entity options will have no effect." } }, "tunnel": { @@ -83,6 +108,10 @@ "host": "Host", "port": "Port", "tunneling_type": "KNX Tunneling Type" + }, + "data_description": { + "host": "IP address of the KNX/IP tunneling device.", + "port": "Port of the KNX/IP tunneling device." } } } From ab21ac370c9ae8c726b069187119103121cb090c Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Fri, 1 Apr 2022 17:11:31 +0200 Subject: [PATCH 048/238] Mend incorrectly imported MQTT config entries (#68987) Co-authored-by: Paulus Schoutsen --- homeassistant/components/mqtt/__init__.py | 74 +++++++++++++++++++---- tests/components/mqtt/test_init.py | 53 +++++++++++++++- 2 files changed, 114 insertions(+), 13 deletions(-) diff --git a/homeassistant/components/mqtt/__init__.py b/homeassistant/components/mqtt/__init__.py index 22d99d1b7be..7c16da7f2aa 100644 --- a/homeassistant/components/mqtt/__init__.py +++ b/homeassistant/components/mqtt/__init__.py @@ -131,12 +131,15 @@ DEFAULT_PROTOCOL = PROTOCOL_311 DEFAULT_TLS_PROTOCOL = "auto" DEFAULT_VALUES = { - CONF_PORT: DEFAULT_PORT, - CONF_WILL_MESSAGE: DEFAULT_WILL, CONF_BIRTH_MESSAGE: DEFAULT_BIRTH, CONF_DISCOVERY: DEFAULT_DISCOVERY, + CONF_PORT: DEFAULT_PORT, + CONF_TLS_VERSION: DEFAULT_TLS_PROTOCOL, + CONF_WILL_MESSAGE: DEFAULT_WILL, } +MANDATORY_DEFAULT_VALUES = (CONF_PORT,) + ATTR_TOPIC_TEMPLATE = "topic_template" ATTR_PAYLOAD_TEMPLATE = "payload_template" @@ -203,9 +206,7 @@ CONFIG_SCHEMA_BASE = vol.Schema( CONF_CLIENT_CERT, "client_key_auth", msg=CLIENT_KEY_AUTH_MSG ): cv.isfile, vol.Optional(CONF_TLS_INSECURE): cv.boolean, - vol.Optional(CONF_TLS_VERSION, default=DEFAULT_TLS_PROTOCOL): vol.Any( - "auto", "1.0", "1.1", "1.2" - ), + vol.Optional(CONF_TLS_VERSION): vol.Any("auto", "1.0", "1.1", "1.2"), vol.Optional(CONF_PROTOCOL, default=DEFAULT_PROTOCOL): vol.All( cv.string, vol.In([PROTOCOL_31, PROTOCOL_311]) ), @@ -220,6 +221,17 @@ CONFIG_SCHEMA_BASE = vol.Schema( } ) +DEPRECATED_CONFIG_KEYS = [ + CONF_BIRTH_MESSAGE, + CONF_BROKER, + CONF_DISCOVERY, + CONF_PASSWORD, + CONF_PORT, + CONF_TLS_VERSION, + CONF_USERNAME, + CONF_WILL_MESSAGE, +] + CONFIG_SCHEMA = vol.Schema( { DOMAIN: vol.All( @@ -602,6 +614,9 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: hass.data[DATA_MQTT_CONFIG] = conf if not bool(hass.config_entries.async_entries(DOMAIN)): + # Create an import flow if the user has yaml configured entities etc. + # but no broker configuration. Note: The intention is not for this to + # import broker configuration from YAML because that has been deprecated. hass.async_create_task( hass.config_entries.flow.async_init( DOMAIN, @@ -612,18 +627,53 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: return True -def _merge_config(entry, conf): - """Merge configuration.yaml config with config entry.""" - # Base config on default values +def _merge_basic_config( + hass: HomeAssistant, entry: ConfigEntry, yaml_config: dict[str, Any] +) -> None: + """Merge basic options in configuration.yaml config with config entry. + + This mends incomplete migration from old version of HA Core. + """ + + entry_updated = False + entry_config = {**entry.data} + for key in DEPRECATED_CONFIG_KEYS: + if key in yaml_config and key not in entry_config: + entry_config[key] = yaml_config[key] + entry_updated = True + + for key in MANDATORY_DEFAULT_VALUES: + if key not in entry_config: + entry_config[key] = DEFAULT_VALUES[key] + entry_updated = True + + if entry_updated: + hass.config_entries.async_update_entry(entry, data=entry_config) + + +def _merge_extended_config(entry, conf): + """Merge advanced options in configuration.yaml config with config entry.""" + # Add default values conf = {**DEFAULT_VALUES, **conf} return {**conf, **entry.data} async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: """Load a config entry.""" - # If user didn't have configuration.yaml config, generate defaults + # Merge basic configuration, and add missing defaults for basic options + _merge_basic_config(hass, entry, hass.data.get(DATA_MQTT_CONFIG, {})) + + # Bail out if broker setting is missing + if CONF_BROKER not in entry.data: + _LOGGER.error("MQTT broker is not configured, please configure it") + return False + + # If user doesn't have configuration.yaml config, generate default values + # for options not in config entry data if (conf := hass.data.get(DATA_MQTT_CONFIG)) is None: conf = CONFIG_SCHEMA_BASE(dict(entry.data)) + + # User has configuration.yaml config, warn about config entry overrides elif any(key in conf for key in entry.data): shared_keys = conf.keys() & entry.data.keys() override = {k: entry.data[k] for k in shared_keys} @@ -635,8 +685,8 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: override, ) - # Merge the configuration values from configuration.yaml - conf = _merge_config(entry, conf) + # Merge advanced configuration values from configuration.yaml + conf = _merge_extended_config(entry, conf) hass.data[DATA_MQTT] = MQTT( hass, @@ -870,7 +920,7 @@ class MQTT: if (conf := hass.data.get(DATA_MQTT_CONFIG)) is None: conf = CONFIG_SCHEMA_BASE(dict(entry.data)) - self.conf = _merge_config(entry, conf) + self.conf = _merge_extended_config(entry, conf) await self.async_disconnect() self.init_client() await self.async_connect() diff --git a/tests/components/mqtt/test_init.py b/tests/components/mqtt/test_init.py index 87eddd4421f..03874ed331e 100644 --- a/tests/components/mqtt/test_init.py +++ b/tests/components/mqtt/test_init.py @@ -23,7 +23,7 @@ from homeassistant.const import ( TEMP_CELSIUS, ) import homeassistant.core as ha -from homeassistant.core import CoreState, callback +from homeassistant.core import CoreState, HomeAssistant, callback from homeassistant.exceptions import HomeAssistantError from homeassistant.helpers import device_registry as dr, template from homeassistant.helpers.entity import Entity @@ -1620,6 +1620,57 @@ async def test_setup_entry_with_config_override(hass, device_reg, mqtt_client_mo assert device_entry is not None +async def test_update_incomplete_entry( + hass: HomeAssistant, device_reg, mqtt_client_mock, caplog +): + """Test if the MQTT component loads when config entry data is incomplete.""" + data = ( + '{ "device":{"identifiers":["0AFFD2"]},' + ' "state_topic": "foobar/sensor",' + ' "unique_id": "unique" }' + ) + + # Config entry data is incomplete + entry = MockConfigEntry(domain=mqtt.DOMAIN, data={"port": 1234}) + entry.add_to_hass(hass) + # Mqtt present in yaml config + config = {"broker": "yaml_broker"} + await async_setup_component(hass, mqtt.DOMAIN, {mqtt.DOMAIN: config}) + await hass.async_block_till_done() + + # Config entry data should now be updated + assert entry.data == { + "port": 1234, + "broker": "yaml_broker", + } + # Warnings about broker deprecated, but not about other keys with default values + assert ( + "The 'broker' option is deprecated, please remove it from your configuration" + in caplog.text + ) + assert ( + "Deprecated configuration settings found in configuration.yaml. These settings " + "from your configuration entry will override: {'broker': 'yaml_broker'}" + in caplog.text + ) + + # Discover a device to verify the entry was setup correctly + async_fire_mqtt_message(hass, "homeassistant/sensor/bla/config", data) + await hass.async_block_till_done() + + device_entry = device_reg.async_get_device({("mqtt", "0AFFD2")}) + assert device_entry is not None + + +async def test_fail_no_broker(hass, device_reg, mqtt_client_mock, caplog): + """Test if the MQTT component loads when broker configuration is missing.""" + # Config entry data is incomplete + entry = MockConfigEntry(domain=mqtt.DOMAIN, data={}) + entry.add_to_hass(hass) + assert not await hass.config_entries.async_setup(entry.entry_id) + assert "MQTT broker is not configured, please configure it" in caplog.text + + @pytest.mark.no_fail_on_log_exception async def test_message_callback_exception_gets_logged(hass, caplog, mqtt_mock): """Test exception raised by message handler.""" From 90bec9cfcdf972518053077e22b33e7168d08b98 Mon Sep 17 00:00:00 2001 From: Mick Vleeshouwer Date: Fri, 1 Apr 2022 07:28:29 -0700 Subject: [PATCH 049/238] Enable select platform in Overkiz integration (#68995) --- homeassistant/components/overkiz/const.py | 1 + 1 file changed, 1 insertion(+) diff --git a/homeassistant/components/overkiz/const.py b/homeassistant/components/overkiz/const.py index 119f7a32262..8488103a238 100644 --- a/homeassistant/components/overkiz/const.py +++ b/homeassistant/components/overkiz/const.py @@ -28,6 +28,7 @@ PLATFORMS: list[Platform] = [ Platform.LOCK, Platform.NUMBER, Platform.SCENE, + Platform.SELECT, Platform.SENSOR, Platform.SIREN, Platform.SWITCH, From 65ccb7446f5696c202951cfbd7f3efb9c72cb10f Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Fri, 1 Apr 2022 01:34:44 -1000 Subject: [PATCH 050/238] Prevent HomeKit from offering hidden entities (#69042) --- .../components/homekit/config_flow.py | 47 ++++++----- tests/components/homekit/test_config_flow.py | 78 +++++++++++++++++++ 2 files changed, 107 insertions(+), 18 deletions(-) diff --git a/homeassistant/components/homekit/config_flow.py b/homeassistant/components/homekit/config_flow.py index a147c8dcb5d..79193cd3dac 100644 --- a/homeassistant/components/homekit/config_flow.py +++ b/homeassistant/components/homekit/config_flow.py @@ -466,7 +466,9 @@ class OptionsFlowHandler(config_entries.OptionsFlow): entity_filter = self.hk_options.get(CONF_FILTER, {}) entities = entity_filter.get(CONF_INCLUDE_ENTITIES, []) - all_supported_entities = _async_get_matching_entities(self.hass, domains) + all_supported_entities = _async_get_matching_entities( + self.hass, domains, include_entity_category=True + ) # In accessory mode we can only have one default_value = next( iter( @@ -505,7 +507,9 @@ class OptionsFlowHandler(config_entries.OptionsFlow): entity_filter = self.hk_options.get(CONF_FILTER, {}) entities = entity_filter.get(CONF_INCLUDE_ENTITIES, []) - all_supported_entities = _async_get_matching_entities(self.hass, domains) + all_supported_entities = _async_get_matching_entities( + self.hass, domains, include_entity_category=True + ) if not entities: entities = entity_filter.get(CONF_EXCLUDE_ENTITIES, []) # Strip out entities that no longer exist to prevent error in the UI @@ -559,21 +563,7 @@ class OptionsFlowHandler(config_entries.OptionsFlow): all_supported_entities = _async_get_matching_entities(self.hass, domains) if not entities: entities = entity_filter.get(CONF_EXCLUDE_ENTITIES, []) - ent_reg = entity_registry.async_get(self.hass) - excluded_entities = set() - for entity_id in all_supported_entities: - if ent_reg_ent := ent_reg.async_get(entity_id): - if ( - ent_reg_ent.entity_category is not None - or ent_reg_ent.hidden_by is not None - ): - excluded_entities.add(entity_id) - # Remove entity category entities since we will exclude them anyways - all_supported_entities = { - k: v - for k, v in all_supported_entities.items() - if k not in excluded_entities - } + # Strip out entities that no longer exist to prevent error in the UI default_value = [ entity_id for entity_id in entities if entity_id in all_supported_entities @@ -652,16 +642,37 @@ async def _async_get_supported_devices(hass: HomeAssistant) -> dict[str, str]: return dict(sorted(unsorted.items(), key=lambda item: item[1])) +def _exclude_by_entity_registry( + ent_reg: entity_registry.EntityRegistry, + entity_id: str, + include_entity_category: bool, +) -> bool: + """Filter out hidden entities and ones with entity category (unless specified).""" + return bool( + (entry := ent_reg.async_get(entity_id)) + and ( + entry.hidden_by is not None + or (not include_entity_category or entry.entity_category is not None) + ) + ) + + def _async_get_matching_entities( - hass: HomeAssistant, domains: list[str] | None = None + hass: HomeAssistant, + domains: list[str] | None = None, + include_entity_category: bool = False, ) -> dict[str, str]: """Fetch all entities or entities in the given domains.""" + ent_reg = entity_registry.async_get(hass) return { state.entity_id: f"{state.attributes.get(ATTR_FRIENDLY_NAME, state.entity_id)} ({state.entity_id})" for state in sorted( hass.states.async_all(domains and set(domains)), key=lambda item: item.entity_id, ) + if not _exclude_by_entity_registry( + ent_reg, state.entity_id, include_entity_category + ) } diff --git a/tests/components/homekit/test_config_flow.py b/tests/components/homekit/test_config_flow.py index 301040e4f88..fc3ef3e2710 100644 --- a/tests/components/homekit/test_config_flow.py +++ b/tests/components/homekit/test_config_flow.py @@ -1481,3 +1481,81 @@ async def test_options_flow_exclude_mode_skips_hidden_entities( "include_entities": [], }, } + + +@patch(f"{PATH_HOMEKIT}.async_port_is_available", return_value=True) +async def test_options_flow_include_mode_skips_hidden_entities( + port_mock, hass, mock_get_source_ip, hk_driver, mock_async_zeroconf, entity_reg +): + """Ensure include mode does not offer hidden entities.""" + config_entry = _mock_config_entry_with_options_populated() + await async_init_entry(hass, config_entry) + + hass.states.async_set("media_player.tv", "off") + hass.states.async_set("media_player.sonos", "off") + hass.states.async_set("switch.other", "off") + + sonos_hidden_switch: RegistryEntry = entity_reg.async_get_or_create( + "switch", + "sonos", + "config", + device_id="1234", + hidden_by=RegistryEntryHider.INTEGRATION, + ) + hass.states.async_set(sonos_hidden_switch.entity_id, "off") + await hass.async_block_till_done() + + result = await hass.config_entries.options.async_init( + config_entry.entry_id, context={"show_advanced_options": False} + ) + + assert result["type"] == data_entry_flow.RESULT_TYPE_FORM + assert result["step_id"] == "init" + assert result["data_schema"]({}) == { + "domains": [ + "fan", + "humidifier", + "vacuum", + "media_player", + "climate", + "alarm_control_panel", + ], + "mode": "bridge", + "include_exclude_mode": "exclude", + } + + result2 = await hass.config_entries.options.async_configure( + result["flow_id"], + user_input={ + "domains": ["media_player", "switch"], + "mode": "bridge", + "include_exclude_mode": "include", + }, + ) + + assert result2["type"] == data_entry_flow.RESULT_TYPE_FORM + assert result2["step_id"] == "include" + assert _get_schema_default(result2["data_schema"].schema, "entities") == [] + + # sonos_hidden_switch.entity_id is a hidden entity + # so it should not be selectable since it will always be excluded + with pytest.raises(voluptuous.error.MultipleInvalid): + await hass.config_entries.options.async_configure( + result2["flow_id"], + user_input={"entities": [sonos_hidden_switch.entity_id]}, + ) + + result4 = await hass.config_entries.options.async_configure( + result2["flow_id"], + user_input={"entities": ["media_player.tv", "switch.other"]}, + ) + assert result4["type"] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY + assert config_entry.options == { + "mode": "bridge", + "filter": { + "exclude_domains": [], + "exclude_entities": [], + "include_domains": [], + "include_entities": ["media_player.tv", "switch.other"], + }, + } From 432768f5030fbbb8ba10ab6ca82051caea225ec5 Mon Sep 17 00:00:00 2001 From: Shay Levy Date: Fri, 1 Apr 2022 11:05:59 +0300 Subject: [PATCH 051/238] Remove webostv deprecated YAML import (#69043) * webostv: remove deprecated YAML import * Remove unused CUSTOMIZE_SCHEMA and WEBOSTV_CONFIG_FILE --- homeassistant/components/webostv/__init__.py | 145 +----------------- .../components/webostv/config_flow.py | 30 +--- homeassistant/components/webostv/const.py | 2 - .../components/webostv/manifest.json | 2 +- requirements_all.txt | 1 - requirements_test_all.txt | 1 - tests/components/webostv/__init__.py | 55 +------ tests/components/webostv/test_config_flow.py | 61 -------- tests/components/webostv/test_init.py | 141 ----------------- 9 files changed, 8 insertions(+), 430 deletions(-) delete mode 100644 tests/components/webostv/test_init.py diff --git a/homeassistant/components/webostv/__init__.py b/homeassistant/components/webostv/__init__.py index 9f78dcd0964..e759077ad3e 100644 --- a/homeassistant/components/webostv/__init__.py +++ b/homeassistant/components/webostv/__init__.py @@ -1,33 +1,24 @@ """Support for LG webOS Smart TV.""" from __future__ import annotations -import asyncio from collections.abc import Callable from contextlib import suppress -import json import logging -import os -from pickle import loads from typing import Any from aiowebostv import WebOsClient, WebOsTvPairError -import sqlalchemy as db import voluptuous as vol from homeassistant.components import notify as hass_notify from homeassistant.components.automation import AutomationActionType -from homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry +from homeassistant.config_entries import ConfigEntry from homeassistant.const import ( ATTR_COMMAND, ATTR_ENTITY_ID, CONF_CLIENT_SECRET, - CONF_CUSTOMIZE, CONF_HOST, - CONF_ICON, CONF_NAME, - CONF_UNIQUE_ID, EVENT_HOMEASSISTANT_STOP, - Platform, ) from homeassistant.core import ( Context, @@ -37,7 +28,7 @@ from homeassistant.core import ( ServiceCall, callback, ) -from homeassistant.helpers import config_validation as cv, discovery, entity_registry +from homeassistant.helpers import config_validation as cv, discovery from homeassistant.helpers.dispatcher import async_dispatcher_send from homeassistant.helpers.typing import ConfigType @@ -46,46 +37,17 @@ from .const import ( ATTR_CONFIG_ENTRY_ID, ATTR_PAYLOAD, ATTR_SOUND_OUTPUT, - CONF_ON_ACTION, - CONF_SOURCES, DATA_CONFIG_ENTRY, DATA_HASS_CONFIG, - DEFAULT_NAME, DOMAIN, PLATFORMS, SERVICE_BUTTON, SERVICE_COMMAND, SERVICE_SELECT_SOUND_OUTPUT, - WEBOSTV_CONFIG_FILE, WEBOSTV_EXCEPTIONS, ) -CUSTOMIZE_SCHEMA = vol.Schema( - {vol.Optional(CONF_SOURCES, default=[]): vol.All(cv.ensure_list, [cv.string])} -) - -CONFIG_SCHEMA = vol.Schema( - vol.All( - cv.deprecated(DOMAIN), - { - DOMAIN: vol.All( - cv.ensure_list, - [ - vol.Schema( - { - vol.Optional(CONF_CUSTOMIZE, default={}): CUSTOMIZE_SCHEMA, - vol.Required(CONF_HOST): cv.string, - vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, - vol.Optional(CONF_ON_ACTION): cv.SCRIPT_SCHEMA, - vol.Optional(CONF_ICON): cv.string, - } - ) - ], - ) - }, - ), - extra=vol.ALLOW_EXTRA, -) +CONFIG_SCHEMA = cv.removed(DOMAIN, raise_if_present=False) CALL_SCHEMA = vol.Schema({vol.Required(ATTR_ENTITY_ID): cv.comp_entity_ids}) @@ -109,113 +71,12 @@ SERVICE_TO_METHOD = { _LOGGER = logging.getLogger(__name__) -def read_client_keys(config_file: str) -> dict[str, str]: - """Read legacy client keys from file.""" - if not os.path.isfile(config_file): - return {} - - # Try to parse the file as being JSON - with open(config_file, encoding="utf8") as json_file: - try: - client_keys = json.load(json_file) - if isinstance(client_keys, dict): - return client_keys - return {} - except (json.JSONDecodeError, UnicodeDecodeError): - pass - - # If the file is not JSON, read it as Sqlite DB - engine = db.create_engine(f"sqlite:///{config_file}") - table = db.Table("unnamed", db.MetaData(), autoload=True, autoload_with=engine) - results = engine.connect().execute(db.select([table])).fetchall() - db_client_keys = {k: loads(v) for k, v in results} - return db_client_keys - - async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: """Set up the LG WebOS TV platform.""" hass.data.setdefault(DOMAIN, {}) hass.data[DOMAIN].setdefault(DATA_CONFIG_ENTRY, {}) hass.data[DOMAIN][DATA_HASS_CONFIG] = config - if DOMAIN not in config: - return True - - config_file = hass.config.path(WEBOSTV_CONFIG_FILE) - if not ( - client_keys := await hass.async_add_executor_job(read_client_keys, config_file) - ): - _LOGGER.debug("No pairing keys, Not importing webOS Smart TV YAML config") - return True - - async def async_migrate_task( - entity_id: str, conf: dict[str, str], key: str - ) -> None: - _LOGGER.debug("Migrating webOS Smart TV entity %s unique_id", entity_id) - client = WebOsClient(conf[CONF_HOST], key) - tries = 0 - while not client.is_connected(): - try: - await client.connect() - except WEBOSTV_EXCEPTIONS: - if tries == 0: - _LOGGER.warning( - "Please make sure webOS TV %s is turned on to complete " - "the migration of configuration.yaml to the UI", - entity_id, - ) - wait_time = 2 ** min(tries, 4) * 5 - tries += 1 - await asyncio.sleep(wait_time) - except WebOsTvPairError: - return - - ent_reg = entity_registry.async_get(hass) - if not ( - new_entity_id := ent_reg.async_get_entity_id( - Platform.MEDIA_PLAYER, DOMAIN, key - ) - ): - _LOGGER.debug( - "Not updating webOSTV Smart TV entity %s unique_id, entity missing", - entity_id, - ) - return - - uuid = client.hello_info["deviceUUID"] - ent_reg.async_update_entity(new_entity_id, new_unique_id=uuid) - await hass.config_entries.flow.async_init( - DOMAIN, - context={"source": SOURCE_IMPORT}, - data={ - **conf, - CONF_CLIENT_SECRET: key, - CONF_UNIQUE_ID: uuid, - }, - ) - - ent_reg = entity_registry.async_get(hass) - - tasks = [] - for conf in config[DOMAIN]: - host = conf[CONF_HOST] - if (key := client_keys.get(host)) is None: - _LOGGER.debug( - "Not importing webOS Smart TV host %s without pairing key", host - ) - continue - - if entity_id := ent_reg.async_get_entity_id(Platform.MEDIA_PLAYER, DOMAIN, key): - tasks.append(asyncio.create_task(async_migrate_task(entity_id, conf, key))) - - async def async_tasks_cancel(_event: Event) -> None: - """Cancel config flow import tasks.""" - for task in tasks: - if not task.done(): - task.cancel() - - hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, async_tasks_cancel) - return True diff --git a/homeassistant/components/webostv/config_flow.py b/homeassistant/components/webostv/config_flow.py index 18338e86f1a..85da9250539 100644 --- a/homeassistant/components/webostv/config_flow.py +++ b/homeassistant/components/webostv/config_flow.py @@ -10,13 +10,7 @@ import voluptuous as vol from homeassistant import config_entries, data_entry_flow from homeassistant.components import ssdp -from homeassistant.const import ( - CONF_CLIENT_SECRET, - CONF_CUSTOMIZE, - CONF_HOST, - CONF_NAME, - CONF_UNIQUE_ID, -) +from homeassistant.const import CONF_CLIENT_SECRET, CONF_HOST, CONF_NAME from homeassistant.core import callback from homeassistant.data_entry_flow import FlowResult from homeassistant.helpers import config_validation as cv @@ -55,28 +49,6 @@ class FlowHandler(config_entries.ConfigFlow, domain=DOMAIN): """Get the options flow for this handler.""" return OptionsFlowHandler(config_entry) - async def async_step_import(self, import_info: dict[str, Any]) -> FlowResult: - """Set the config entry up from yaml.""" - self._host = import_info[CONF_HOST] - self._name = import_info.get(CONF_NAME) or import_info[CONF_HOST] - await self.async_set_unique_id( - import_info[CONF_UNIQUE_ID], raise_on_progress=False - ) - data = { - CONF_HOST: self._host, - CONF_CLIENT_SECRET: import_info[CONF_CLIENT_SECRET], - } - self._abort_if_unique_id_configured() - - options: dict[str, list[str]] | None = None - if sources := import_info.get(CONF_CUSTOMIZE, {}).get(CONF_SOURCES): - if not isinstance(sources, list): - sources = [s.strip() for s in sources.split(",")] - options = {CONF_SOURCES: sources} - - _LOGGER.debug("WebOS Smart TV host %s imported from YAML config", self._host) - return self.async_create_entry(title=self._name, data=data, options=options) - async def async_step_user( self, user_input: dict[str, Any] | None = None ) -> FlowResult: diff --git a/homeassistant/components/webostv/const.py b/homeassistant/components/webostv/const.py index 9be44d86469..f471ca7340d 100644 --- a/homeassistant/components/webostv/const.py +++ b/homeassistant/components/webostv/const.py @@ -33,5 +33,3 @@ WEBOSTV_EXCEPTIONS = ( asyncio.TimeoutError, asyncio.CancelledError, ) - -WEBOSTV_CONFIG_FILE = "webostv.conf" diff --git a/homeassistant/components/webostv/manifest.json b/homeassistant/components/webostv/manifest.json index 2725609f119..81c4d04901f 100644 --- a/homeassistant/components/webostv/manifest.json +++ b/homeassistant/components/webostv/manifest.json @@ -3,7 +3,7 @@ "name": "LG webOS Smart TV", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/webostv", - "requirements": ["aiowebostv==0.2.0", "sqlalchemy==1.4.32"], + "requirements": ["aiowebostv==0.2.0"], "codeowners": ["@bendavid", "@thecode"], "ssdp": [{ "st": "urn:lge-com:service:webos-second-screen:1" }], "quality_scale": "platinum", diff --git a/requirements_all.txt b/requirements_all.txt index b3ae57a6563..a5615f668f9 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -2194,7 +2194,6 @@ spotipy==2.19.0 # homeassistant.components.recorder # homeassistant.components.sql -# homeassistant.components.webostv sqlalchemy==1.4.32 # homeassistant.components.srp_energy diff --git a/requirements_test_all.txt b/requirements_test_all.txt index c952dfe9a3b..f192d1b6a54 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -1419,7 +1419,6 @@ spotipy==2.19.0 # homeassistant.components.recorder # homeassistant.components.sql -# homeassistant.components.webostv sqlalchemy==1.4.32 # homeassistant.components.srp_energy diff --git a/tests/components/webostv/__init__.py b/tests/components/webostv/__init__.py index 1cbc72b43fc..5ef210da56d 100644 --- a/tests/components/webostv/__init__.py +++ b/tests/components/webostv/__init__.py @@ -1,17 +1,10 @@ """Tests for the WebOS TV integration.""" -from pickle import dumps -from unittest.mock import patch -import sqlalchemy as db -from sqlalchemy import create_engine - -from homeassistant.components.media_player import DOMAIN as MP_DOMAIN from homeassistant.components.webostv.const import DOMAIN from homeassistant.const import CONF_CLIENT_SECRET, CONF_HOST -from homeassistant.helpers import entity_registry from homeassistant.setup import async_setup_component -from .const import CLIENT_KEY, FAKE_UUID, HOST, MOCK_CLIENT_KEYS, TV_NAME +from .const import CLIENT_KEY, FAKE_UUID, HOST, TV_NAME from tests.common import MockConfigEntry @@ -29,53 +22,11 @@ async def setup_webostv(hass, unique_id=FAKE_UUID): ) entry.add_to_hass(hass) - with patch( - "homeassistant.components.webostv.read_client_keys", - return_value=MOCK_CLIENT_KEYS, - ): - await async_setup_component( - hass, - DOMAIN, - {DOMAIN: {CONF_HOST: HOST}}, - ) - await hass.async_block_till_done() - - return entry - - -async def setup_legacy_component(hass, create_entity=True): - """Initialize webostv component with legacy entity.""" - if create_entity: - ent_reg = entity_registry.async_get(hass) - assert ent_reg.async_get_or_create(MP_DOMAIN, DOMAIN, CLIENT_KEY) - - assert await async_setup_component( + await async_setup_component( hass, DOMAIN, {DOMAIN: {CONF_HOST: HOST}}, ) await hass.async_block_till_done() - -def create_memory_sqlite_engine(url): - """Create fake db keys file in memory.""" - mem_eng = create_engine("sqlite:///:memory:") - table = db.Table( - "unnamed", - db.MetaData(), - db.Column("key", db.String), - db.Column("value", db.String), - ) - table.create(mem_eng) - query = db.insert(table).values(key=HOST, value=dumps(CLIENT_KEY)) - connection = mem_eng.connect() - connection.execute(query) - return mem_eng - - -def is_entity_unique_id_updated(hass): - """Check if entity has new unique_id from UUID.""" - ent_reg = entity_registry.async_get(hass) - return ent_reg.async_get_entity_id( - MP_DOMAIN, DOMAIN, FAKE_UUID - ) and not ent_reg.async_get_entity_id(MP_DOMAIN, DOMAIN, CLIENT_KEY) + return entry diff --git a/tests/components/webostv/test_config_flow.py b/tests/components/webostv/test_config_flow.py index a874532ff51..012682615dc 100644 --- a/tests/components/webostv/test_config_flow.py +++ b/tests/components/webostv/test_config_flow.py @@ -11,7 +11,6 @@ from homeassistant.components.webostv.const import CONF_SOURCES, DOMAIN, LIVE_TV from homeassistant.config_entries import SOURCE_SSDP from homeassistant.const import ( CONF_CLIENT_SECRET, - CONF_CUSTOMIZE, CONF_HOST, CONF_ICON, CONF_NAME, @@ -46,66 +45,6 @@ MOCK_DISCOVERY_INFO = ssdp.SsdpServiceInfo( ) -async def test_import(hass, client): - """Test we can import yaml config.""" - assert client - - with patch("homeassistant.components.webostv.async_setup_entry", return_value=True): - result = await hass.config_entries.flow.async_init( - DOMAIN, - context={CONF_SOURCE: config_entries.SOURCE_IMPORT}, - data=MOCK_YAML_CONFIG, - ) - - assert result["type"] == RESULT_TYPE_CREATE_ENTRY - assert result["title"] == TV_NAME - assert result["data"][CONF_HOST] == MOCK_YAML_CONFIG[CONF_HOST] - assert result["data"][CONF_CLIENT_SECRET] == MOCK_YAML_CONFIG[CONF_CLIENT_SECRET] - assert result["result"].unique_id == MOCK_YAML_CONFIG[CONF_UNIQUE_ID] - - with patch("homeassistant.components.webostv.async_setup_entry", return_value=True): - result = await hass.config_entries.flow.async_init( - DOMAIN, - context={CONF_SOURCE: config_entries.SOURCE_IMPORT}, - data=MOCK_YAML_CONFIG, - ) - - assert result["type"] == RESULT_TYPE_ABORT - assert result["reason"] == "already_configured" - - -@pytest.mark.parametrize( - "sources", - [ - ["Live TV", "Input01", "Input02"], - "Live TV, Input01 , Input02", - "Live TV,Input01 ,Input02", - ], -) -async def test_import_sources(hass, client, sources): - """Test import yaml config with sources list/csv.""" - assert client - - with patch("homeassistant.components.webostv.async_setup_entry", return_value=True): - result = await hass.config_entries.flow.async_init( - DOMAIN, - context={CONF_SOURCE: config_entries.SOURCE_IMPORT}, - data={ - **MOCK_YAML_CONFIG, - CONF_CUSTOMIZE: { - CONF_SOURCES: sources, - }, - }, - ) - - assert result["type"] == RESULT_TYPE_CREATE_ENTRY - assert result["title"] == TV_NAME - assert result["data"][CONF_HOST] == MOCK_YAML_CONFIG[CONF_HOST] - assert result["data"][CONF_CLIENT_SECRET] == MOCK_YAML_CONFIG[CONF_CLIENT_SECRET] - assert result["options"][CONF_SOURCES] == ["Live TV", "Input01", "Input02"] - assert result["result"].unique_id == MOCK_YAML_CONFIG[CONF_UNIQUE_ID] - - async def test_form(hass, client): """Test we get the form.""" assert client diff --git a/tests/components/webostv/test_init.py b/tests/components/webostv/test_init.py deleted file mode 100644 index 8729576d869..00000000000 --- a/tests/components/webostv/test_init.py +++ /dev/null @@ -1,141 +0,0 @@ -"""The tests for the WebOS TV platform.""" - -from unittest.mock import Mock, mock_open, patch - -from aiowebostv import WebOsTvPairError - -from homeassistant.components.media_player import DOMAIN as MP_DOMAIN -from homeassistant.components.webostv import DOMAIN - -from . import ( - create_memory_sqlite_engine, - is_entity_unique_id_updated, - setup_legacy_component, -) -from .const import MOCK_JSON - - -async def test_missing_keys_file_abort(hass, client, caplog): - """Test abort import when no pairing keys file.""" - with patch( - "homeassistant.components.webostv.os.path.isfile", Mock(return_value=False) - ): - await setup_legacy_component(hass) - - assert "No pairing keys, Not importing" in caplog.text - assert not is_entity_unique_id_updated(hass) - - -async def test_empty_json_abort(hass, client, caplog): - """Test abort import when keys file is empty.""" - m_open = mock_open(read_data="[]") - - with patch( - "homeassistant.components.webostv.os.path.isfile", Mock(return_value=True) - ), patch("homeassistant.components.webostv.open", m_open, create=True): - await setup_legacy_component(hass) - - assert "No pairing keys, Not importing" in caplog.text - assert not is_entity_unique_id_updated(hass) - - -async def test_valid_json_migrate_not_needed(hass, client, caplog): - """Test import from valid json entity already migrated or removed.""" - m_open = mock_open(read_data=MOCK_JSON) - - with patch( - "homeassistant.components.webostv.os.path.isfile", Mock(return_value=True) - ), patch("homeassistant.components.webostv.open", m_open, create=True): - await setup_legacy_component(hass, False) - - assert "Migrating webOS Smart TV entity" not in caplog.text - assert not is_entity_unique_id_updated(hass) - - -async def test_valid_json_missing_host_key(hass, client, caplog): - """Test import from valid json missing host key.""" - m_open = mock_open(read_data='{"1.2.3.5": "other-key"}') - - with patch( - "homeassistant.components.webostv.os.path.isfile", Mock(return_value=True) - ), patch("homeassistant.components.webostv.open", m_open, create=True): - await setup_legacy_component(hass) - - assert "Not importing webOS Smart TV host" in caplog.text - assert not is_entity_unique_id_updated(hass) - - -async def test_not_connected_import(hass, client, caplog, monkeypatch): - """Test import while device is not connected.""" - m_open = mock_open(read_data=MOCK_JSON) - monkeypatch.setattr(client, "is_connected", Mock(return_value=False)) - monkeypatch.setattr(client, "connect", Mock(side_effect=OSError)) - - with patch( - "homeassistant.components.webostv.os.path.isfile", Mock(return_value=True) - ), patch("homeassistant.components.webostv.open", m_open, create=True): - await setup_legacy_component(hass) - - assert f"Please make sure webOS TV {MP_DOMAIN}.{DOMAIN}" in caplog.text - assert not is_entity_unique_id_updated(hass) - - -async def test_pair_error_import_abort(hass, client, caplog, monkeypatch): - """Test abort import if device is not paired.""" - m_open = mock_open(read_data=MOCK_JSON) - monkeypatch.setattr(client, "is_connected", Mock(return_value=False)) - monkeypatch.setattr(client, "connect", Mock(side_effect=WebOsTvPairError)) - - with patch( - "homeassistant.components.webostv.os.path.isfile", Mock(return_value=True) - ), patch("homeassistant.components.webostv.open", m_open, create=True): - await setup_legacy_component(hass) - - assert f"Please make sure webOS TV {MP_DOMAIN}.{DOMAIN}" not in caplog.text - assert not is_entity_unique_id_updated(hass) - - -async def test_entity_removed_import_abort(hass, client_entity_removed, caplog): - """Test abort import if entity removed by user during import.""" - m_open = mock_open(read_data=MOCK_JSON) - - with patch( - "homeassistant.components.webostv.os.path.isfile", Mock(return_value=True) - ), patch("homeassistant.components.webostv.open", m_open, create=True): - await setup_legacy_component(hass) - - assert "Not updating webOSTV Smart TV entity" in caplog.text - assert not is_entity_unique_id_updated(hass) - - -async def test_json_import(hass, client, caplog, monkeypatch): - """Test import from json keys file.""" - m_open = mock_open(read_data=MOCK_JSON) - monkeypatch.setattr(client, "is_connected", Mock(return_value=True)) - monkeypatch.setattr(client, "connect", Mock(return_value=True)) - - with patch( - "homeassistant.components.webostv.os.path.isfile", Mock(return_value=True) - ), patch("homeassistant.components.webostv.open", m_open, create=True): - await setup_legacy_component(hass) - - assert "imported from YAML config" in caplog.text - assert is_entity_unique_id_updated(hass) - - -async def test_sqlite_import(hass, client, caplog, monkeypatch): - """Test import from sqlite keys file.""" - m_open = mock_open(read_data="will raise JSONDecodeError") - monkeypatch.setattr(client, "is_connected", Mock(return_value=True)) - monkeypatch.setattr(client, "connect", Mock(return_value=True)) - - with patch( - "homeassistant.components.webostv.os.path.isfile", Mock(return_value=True) - ), patch("homeassistant.components.webostv.open", m_open, create=True), patch( - "homeassistant.components.webostv.db.create_engine", - side_effect=create_memory_sqlite_engine, - ): - await setup_legacy_component(hass) - - assert "imported from YAML config" in caplog.text - assert is_entity_unique_id_updated(hass) From 0cf817698db04256fe55a848d5c8246ef6f63758 Mon Sep 17 00:00:00 2001 From: Raman Gupta <7243222+raman325@users.noreply.github.com> Date: Fri, 1 Apr 2022 01:44:52 -0400 Subject: [PATCH 052/238] Fix zwave_js device action logic (#69049) * Fix zwave_js device action logic * Add test for this behavior --- .../components/zwave_js/device_action.py | 6 +-- .../components/zwave_js/test_device_action.py | 54 +++++++++++++++++++ 2 files changed, 57 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/zwave_js/device_action.py b/homeassistant/components/zwave_js/device_action.py index 7e5e8c6c78d..a67bd44e533 100644 --- a/homeassistant/components/zwave_js/device_action.py +++ b/homeassistant/components/zwave_js/device_action.py @@ -241,7 +241,7 @@ async def async_call_action_from_config( hass: HomeAssistant, config: dict, variables: dict, context: Context | None ) -> None: """Execute a device action.""" - action_type = service = config.pop(CONF_TYPE) + action_type = service = config[CONF_TYPE] if action_type not in ACTION_TYPES: raise HomeAssistantError(f"Unhandled action type {action_type}") @@ -249,10 +249,10 @@ async def async_call_action_from_config( service_data = { k: v for k, v in config.items() - if k not in (ATTR_DOMAIN, CONF_SUBTYPE) and v not in (None, "") + if k not in (ATTR_DOMAIN, CONF_TYPE, CONF_SUBTYPE) and v not in (None, "") } - # Entity services (including refresh value which is a fake entity service) expects + # Entity services (including refresh value which is a fake entity service) expect # just an entity ID if action_type in ( SERVICE_REFRESH_VALUE, diff --git a/tests/components/zwave_js/test_device_action.py b/tests/components/zwave_js/test_device_action.py index 07663ce9456..657540db94d 100644 --- a/tests/components/zwave_js/test_device_action.py +++ b/tests/components/zwave_js/test_device_action.py @@ -169,6 +169,15 @@ async def test_actions( }, ) + with patch("zwave_js_server.model.node.Node.async_poll_value") as mock_call: + hass.bus.async_fire("test_event_refresh_value") + await hass.async_block_till_done() + mock_call.assert_called_once() + args = mock_call.call_args_list[0][0] + assert len(args) == 1 + assert args[0].value_id == "13-64-1-mode" + + # Call action a second time to confirm that it works (this was previously a bug) with patch("zwave_js_server.model.node.Node.async_poll_value") as mock_call: hass.bus.async_fire("test_event_refresh_value") await hass.async_block_till_done() @@ -206,6 +215,51 @@ async def test_actions( assert args[2] == 1 +async def test_actions_multiple_calls( + hass: HomeAssistant, + client: Client, + climate_radio_thermostat_ct100_plus: Node, + integration: ConfigEntry, +) -> None: + """Test actions can be called multiple times and still work.""" + node = climate_radio_thermostat_ct100_plus + device_id = get_device_id(client, node) + dev_reg = device_registry.async_get(hass) + device = dev_reg.async_get_device({device_id}) + assert device + + assert await async_setup_component( + hass, + automation.DOMAIN, + { + automation.DOMAIN: [ + { + "trigger": { + "platform": "event", + "event_type": "test_event_refresh_value", + }, + "action": { + "domain": DOMAIN, + "type": "refresh_value", + "device_id": device.id, + "entity_id": "climate.z_wave_thermostat", + }, + }, + ] + }, + ) + + # Trigger automation multiple times to confirm that it works each time + for _ in range(5): + with patch("zwave_js_server.model.node.Node.async_poll_value") as mock_call: + hass.bus.async_fire("test_event_refresh_value") + await hass.async_block_till_done() + mock_call.assert_called_once() + args = mock_call.call_args_list[0][0] + assert len(args) == 1 + assert args[0].value_id == "13-64-1-mode" + + async def test_lock_actions( hass: HomeAssistant, client: Client, From fadb63c43a1301248de84dc2891b67ba46d45263 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20S=C3=B8rensen?= Date: Fri, 1 Apr 2022 12:56:58 +0200 Subject: [PATCH 053/238] Add auto_update property to UpdateEntity (#69054) --- homeassistant/components/update/__init__.py | 17 +++++++- homeassistant/components/update/const.py | 1 + tests/components/update/test_init.py | 42 +++++++++++++++++++ .../custom_components/test/update.py | 13 ++++++ 4 files changed, 72 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/update/__init__.py b/homeassistant/components/update/__init__.py index 0a78840e66e..6b30f45b023 100644 --- a/homeassistant/components/update/__init__.py +++ b/homeassistant/components/update/__init__.py @@ -26,6 +26,7 @@ from homeassistant.helpers.restore_state import RestoreEntity from homeassistant.helpers.typing import ConfigType from .const import ( + ATTR_AUTO_UPDATE, ATTR_BACKUP, ATTR_CURRENT_VERSION, ATTR_IN_PROGRESS, @@ -93,7 +94,7 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: component.async_register_entity_service( SERVICE_SKIP, {}, - UpdateEntity.async_skip.__name__, + async_skip, ) websocket_api.async_register_command(hass, websocket_release_notes) @@ -144,6 +145,13 @@ async def async_install(entity: UpdateEntity, service_call: ServiceCall) -> None await entity.async_install_with_progress(version, backup) +async def async_skip(entity: UpdateEntity, service_call: ServiceCall) -> None: + """Service call wrapper to validate the call.""" + if entity.auto_update: + raise HomeAssistantError(f"Skipping update is not supported for {entity.name}") + await entity.async_skip() + + @dataclass class UpdateEntityDescription(EntityDescription): """A class that describes update entities.""" @@ -156,6 +164,7 @@ class UpdateEntity(RestoreEntity): """Representation of an update entity.""" entity_description: UpdateEntityDescription + _attr_auto_update: bool = False _attr_current_version: str | None = None _attr_device_class: UpdateDeviceClass | str | None _attr_in_progress: bool | int = False @@ -168,6 +177,11 @@ class UpdateEntity(RestoreEntity): __skipped_version: str | None = None __in_progress: bool = False + @property + def auto_update(self) -> bool: + """Indicate if the device or service has auto update enabled.""" + return self._attr_auto_update + @property def current_version(self) -> str | None: """Version currently in use.""" @@ -329,6 +343,7 @@ class UpdateEntity(RestoreEntity): self.__skipped_version = None return { + ATTR_AUTO_UPDATE: self.auto_update, ATTR_CURRENT_VERSION: self.current_version, ATTR_IN_PROGRESS: in_progress, ATTR_LATEST_VERSION: self.latest_version, diff --git a/homeassistant/components/update/const.py b/homeassistant/components/update/const.py index 7c70572f458..916d2cbaceb 100644 --- a/homeassistant/components/update/const.py +++ b/homeassistant/components/update/const.py @@ -20,6 +20,7 @@ class UpdateEntityFeature(IntEnum): SERVICE_INSTALL: Final = "install" SERVICE_SKIP: Final = "skip" +ATTR_AUTO_UPDATE: Final = "auto_update" ATTR_BACKUP: Final = "backup" ATTR_CURRENT_VERSION: Final = "current_version" ATTR_IN_PROGRESS: Final = "in_progress" diff --git a/tests/components/update/test_init.py b/tests/components/update/test_init.py index c6845f73d0c..b8db7f24f4a 100644 --- a/tests/components/update/test_init.py +++ b/tests/components/update/test_init.py @@ -16,6 +16,7 @@ from homeassistant.components.update import ( UpdateEntityDescription, ) from homeassistant.components.update.const import ( + ATTR_AUTO_UPDATE, ATTR_CURRENT_VERSION, ATTR_IN_PROGRESS, ATTR_LATEST_VERSION, @@ -65,6 +66,7 @@ async def test_update(hass: HomeAssistant) -> None: assert update.in_progress is False assert update.state == STATE_ON assert update.state_attributes == { + ATTR_AUTO_UPDATE: False, ATTR_CURRENT_VERSION: "1.0.0", ATTR_IN_PROGRESS: False, ATTR_LATEST_VERSION: "1.0.1", @@ -242,6 +244,46 @@ async def test_entity_with_no_updates( ) +async def test_entity_with_auto_update( + hass: HomeAssistant, + enable_custom_integrations: None, + caplog: pytest.LogCaptureFixture, +) -> None: + """Test update entity that has auto update feature.""" + platform = getattr(hass.components, f"test.{DOMAIN}") + platform.init() + + assert await async_setup_component(hass, DOMAIN, {DOMAIN: {CONF_PLATFORM: "test"}}) + await hass.async_block_till_done() + + state = hass.states.get("update.update_with_auto_update") + assert state + assert state.state == STATE_ON + assert state.attributes[ATTR_CURRENT_VERSION] == "1.0.0" + assert state.attributes[ATTR_LATEST_VERSION] == "1.0.1" + assert state.attributes[ATTR_SKIPPED_VERSION] is None + + # Should be able to manually install an update even if it can auto update + await hass.services.async_call( + DOMAIN, + SERVICE_INSTALL, + {ATTR_ENTITY_ID: "update.update_with_auto_update"}, + blocking=True, + ) + + # Should not be to skip the update + with pytest.raises( + HomeAssistantError, + match="Skipping update is not supported for Update with auto update", + ): + await hass.services.async_call( + DOMAIN, + SERVICE_SKIP, + {ATTR_ENTITY_ID: "update.update_with_auto_update"}, + blocking=True, + ) + + async def test_entity_with_updates_available( hass: HomeAssistant, enable_custom_integrations: None, diff --git a/tests/testing_config/custom_components/test/update.py b/tests/testing_config/custom_components/test/update.py index ce8cd3869f5..fc5ee31246e 100644 --- a/tests/testing_config/custom_components/test/update.py +++ b/tests/testing_config/custom_components/test/update.py @@ -20,6 +20,11 @@ _LOGGER = logging.getLogger(__name__) class MockUpdateEntity(MockEntity, UpdateEntity): """Mock UpdateEntity class.""" + @property + def auto_update(self) -> bool: + """Indicate if the device or service has auto update enabled.""" + return self._handle("auto_update") + @property def current_version(self) -> str | None: """Version currently in use.""" @@ -135,6 +140,14 @@ def init(empty=False): latest_version="1.0.1", supported_features=UpdateEntityFeature.RELEASE_NOTES, ), + MockUpdateEntity( + name="Update with auto update", + unique_id="with_auto_update", + current_version="1.0.0", + latest_version="1.0.1", + auto_update=True, + supported_features=UpdateEntityFeature.INSTALL, + ), ] ) From cc9e55594f583ca9bfd271634619b7ef5906c535 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20S=C3=B8rensen?= Date: Fri, 1 Apr 2022 17:31:39 +0200 Subject: [PATCH 054/238] Add auto_update property to supervisor and addon update entities (#69055) --- homeassistant/components/hassio/__init__.py | 26 +++++++++++++++ homeassistant/components/hassio/const.py | 1 + homeassistant/components/hassio/update.py | 7 ++++ tests/components/hassio/test_binary_sensor.py | 8 +++++ tests/components/hassio/test_init.py | 8 +++++ tests/components/hassio/test_sensor.py | 8 +++++ tests/components/hassio/test_update.py | 33 ++++++++++++++----- 7 files changed, 83 insertions(+), 8 deletions(-) diff --git a/homeassistant/components/hassio/__init__.py b/homeassistant/components/hassio/__init__.py index 8a69f553025..acc676bdf9f 100644 --- a/homeassistant/components/hassio/__init__.py +++ b/homeassistant/components/hassio/__init__.py @@ -51,6 +51,7 @@ from .auth import async_setup_auth_view from .const import ( ATTR_ADDON, ATTR_ADDONS, + ATTR_AUTO_UPDATE, ATTR_CHANGELOG, ATTR_DISCOVERY, ATTR_FOLDERS, @@ -98,6 +99,7 @@ DATA_INFO = "hassio_info" DATA_OS_INFO = "hassio_os_info" DATA_SUPERVISOR_INFO = "hassio_supervisor_info" DATA_ADDONS_CHANGELOGS = "hassio_addons_changelogs" +DATA_ADDONS_INFO = "hassio_addons_info" DATA_ADDONS_STATS = "hassio_addons_stats" HASSIO_UPDATE_INTERVAL = timedelta(minutes=5) @@ -422,6 +424,16 @@ def get_supervisor_info(hass): return hass.data.get(DATA_SUPERVISOR_INFO) +@callback +@bind_hass +def get_addons_info(hass): + """Return Addons info. + + Async friendly. + """ + return hass.data.get(DATA_ADDONS_INFO) + + @callback @bind_hass def get_addons_stats(hass): @@ -607,6 +619,11 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: # noqa: changelog = await hassio.get_addon_changelog(slug) return (slug, changelog) + async def update_addon_info(slug): + """Return the info for an add-on.""" + info = await hassio.get_addon_info(slug) + return (slug, info) + async def update_info_data(now): """Update last available supervisor information.""" @@ -641,6 +658,11 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: # noqa: *[update_addon_changelog(addon[ATTR_SLUG]) for addon in addons] ) ) + hass.data[DATA_ADDONS_INFO] = dict( + await asyncio.gather( + *[update_addon_info(addon[ATTR_SLUG]) for addon in addons] + ) + ) if ADDONS_COORDINATOR in hass.data: await hass.data[ADDONS_COORDINATOR].async_refresh() @@ -845,6 +867,7 @@ class HassioDataUpdateCoordinator(DataUpdateCoordinator): """Update data via library.""" new_data = {} supervisor_info = get_supervisor_info(self.hass) + addons_info = get_addons_info(self.hass) addons_stats = get_addons_stats(self.hass) addons_changelogs = get_addons_changelogs(self.hass) store_data = get_store(self.hass) @@ -858,6 +881,9 @@ class HassioDataUpdateCoordinator(DataUpdateCoordinator): addon[ATTR_SLUG]: { **addon, **((addons_stats or {}).get(addon[ATTR_SLUG], {})), + ATTR_AUTO_UPDATE: addons_info.get(addon[ATTR_SLUG], {}).get( + ATTR_AUTO_UPDATE, False + ), ATTR_CHANGELOG: (addons_changelogs or {}).get(addon[ATTR_SLUG]), ATTR_REPOSITORY: repositories.get( addon.get(ATTR_REPOSITORY), addon.get(ATTR_REPOSITORY, "") diff --git a/homeassistant/components/hassio/const.py b/homeassistant/components/hassio/const.py index 7f62748b835..8c27fdebb17 100644 --- a/homeassistant/components/hassio/const.py +++ b/homeassistant/components/hassio/const.py @@ -39,6 +39,7 @@ WS_TYPE_SUBSCRIBE = "supervisor/subscribe" EVENT_SUPERVISOR_EVENT = "supervisor_event" +ATTR_AUTO_UPDATE = "auto_update" ATTR_VERSION = "version" ATTR_VERSION_LATEST = "version_latest" ATTR_UPDATE_AVAILABLE = "update_available" diff --git a/homeassistant/components/hassio/update.py b/homeassistant/components/hassio/update.py index 41539aa21e0..d2953a0f801 100644 --- a/homeassistant/components/hassio/update.py +++ b/homeassistant/components/hassio/update.py @@ -24,6 +24,7 @@ from . import ( async_update_supervisor, ) from .const import ( + ATTR_AUTO_UPDATE, ATTR_CHANGELOG, ATTR_VERSION, ATTR_VERSION_LATEST, @@ -99,6 +100,11 @@ class SupervisorAddonUpdateEntity(HassioAddonEntity, UpdateEntity): """Return the add-on data.""" return self.coordinator.data[DATA_KEY_ADDONS][self._addon_slug] + @property + def auto_update(self): + """Return true if auto-update is enabled for the add-on.""" + return self._addon_data[ATTR_AUTO_UPDATE] + @property def title(self) -> str | None: """Return the title of the update.""" @@ -210,6 +216,7 @@ class SupervisorOSUpdateEntity(HassioOSEntity, UpdateEntity): class SupervisorSupervisorUpdateEntity(HassioSupervisorEntity, UpdateEntity): """Update entity to handle updates for the Home Assistant Supervisor.""" + _attr_auto_update = True _attr_supported_features = UpdateEntityFeature.INSTALL _attr_title = "Home Assistant Supervisor" diff --git a/tests/components/hassio/test_binary_sensor.py b/tests/components/hassio/test_binary_sensor.py index e48f8a6a481..ef114b90771 100644 --- a/tests/components/hassio/test_binary_sensor.py +++ b/tests/components/hassio/test_binary_sensor.py @@ -115,7 +115,15 @@ def mock_all(aioclient_mock, request): }, ) aioclient_mock.get("http://127.0.0.1/addons/test/changelog", text="") + aioclient_mock.get( + "http://127.0.0.1/addons/test/info", + json={"result": "ok", "data": {"auto_update": True}}, + ) aioclient_mock.get("http://127.0.0.1/addons/test2/changelog", text="") + aioclient_mock.get( + "http://127.0.0.1/addons/test2/info", + json={"result": "ok", "data": {"auto_update": False}}, + ) aioclient_mock.get( "http://127.0.0.1/ingress/panels", json={"result": "ok", "data": {"panels": {}}} ) diff --git a/tests/components/hassio/test_init.py b/tests/components/hassio/test_init.py index 30776fd5b17..1a50d9c3036 100644 --- a/tests/components/hassio/test_init.py +++ b/tests/components/hassio/test_init.py @@ -139,7 +139,15 @@ def mock_all(aioclient_mock, request): }, ) aioclient_mock.get("http://127.0.0.1/addons/test/changelog", text="") + aioclient_mock.get( + "http://127.0.0.1/addons/test/info", + json={"result": "ok", "data": {"auto_update": True}}, + ) aioclient_mock.get("http://127.0.0.1/addons/test2/changelog", text="") + aioclient_mock.get( + "http://127.0.0.1/addons/test2/info", + json={"result": "ok", "data": {"auto_update": False}}, + ) aioclient_mock.get( "http://127.0.0.1/ingress/panels", json={"result": "ok", "data": {"panels": {}}} ) diff --git a/tests/components/hassio/test_sensor.py b/tests/components/hassio/test_sensor.py index df309e94360..e6a35c4744d 100644 --- a/tests/components/hassio/test_sensor.py +++ b/tests/components/hassio/test_sensor.py @@ -108,7 +108,15 @@ def mock_all(aioclient_mock, request): }, ) aioclient_mock.get("http://127.0.0.1/addons/test/changelog", text="") + aioclient_mock.get( + "http://127.0.0.1/addons/test/info", + json={"result": "ok", "data": {"auto_update": True}}, + ) aioclient_mock.get("http://127.0.0.1/addons/test2/changelog", text="") + aioclient_mock.get( + "http://127.0.0.1/addons/test2/info", + json={"result": "ok", "data": {"auto_update": False}}, + ) aioclient_mock.get( "http://127.0.0.1/ingress/panels", json={"result": "ok", "data": {"panels": {}}} ) diff --git a/tests/components/hassio/test_update.py b/tests/components/hassio/test_update.py index 8442f01abf3..f9b7c201ba3 100644 --- a/tests/components/hassio/test_update.py +++ b/tests/components/hassio/test_update.py @@ -121,23 +121,37 @@ def mock_all(aioclient_mock, request): }, ) aioclient_mock.get("http://127.0.0.1/addons/test/changelog", text="") + aioclient_mock.get( + "http://127.0.0.1/addons/test/info", + json={"result": "ok", "data": {"auto_update": True}}, + ) aioclient_mock.get("http://127.0.0.1/addons/test2/changelog", text="") + aioclient_mock.get( + "http://127.0.0.1/addons/test2/info", + json={"result": "ok", "data": {"auto_update": False}}, + ) aioclient_mock.get( "http://127.0.0.1/ingress/panels", json={"result": "ok", "data": {"panels": {}}} ) @pytest.mark.parametrize( - "entity_id,expected", + "entity_id,expected_state, auto_update", [ - ("update.home_assistant_operating_system_update", "on"), - ("update.home_assistant_supervisor_update", "on"), - ("update.home_assistant_core_update", "on"), - ("update.test_update", "on"), - ("update.test2_update", "off"), + ("update.home_assistant_operating_system_update", "on", False), + ("update.home_assistant_supervisor_update", "on", True), + ("update.home_assistant_core_update", "on", False), + ("update.test_update", "on", True), + ("update.test2_update", "off", False), ], ) -async def test_update_entities(hass, entity_id, expected, aioclient_mock): +async def test_update_entities( + hass, + entity_id, + expected_state, + auto_update, + aioclient_mock, +): """Test update entities.""" config_entry = MockConfigEntry(domain=DOMAIN, data={}, unique_id=DOMAIN) config_entry.add_to_hass(hass) @@ -153,7 +167,10 @@ async def test_update_entities(hass, entity_id, expected, aioclient_mock): # Verify that the entity have the expected state. state = hass.states.get(entity_id) - assert state.state == expected + assert state.state == expected_state + + # Verify that the auto_update attribute is correct + assert state.attributes["auto_update"] is auto_update async def test_update_addon(hass, aioclient_mock): From ad2067381b166c4426f38388b35a43e33e41e21e Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Fri, 1 Apr 2022 11:01:51 +0200 Subject: [PATCH 055/238] Bump pychromecast to 11.0.0 (#69057) --- homeassistant/components/cast/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/cast/manifest.json b/homeassistant/components/cast/manifest.json index 85457307c94..1e933d5e10e 100644 --- a/homeassistant/components/cast/manifest.json +++ b/homeassistant/components/cast/manifest.json @@ -3,7 +3,7 @@ "name": "Google Cast", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/cast", - "requirements": ["pychromecast==10.3.0"], + "requirements": ["pychromecast==11.0.0"], "after_dependencies": [ "cloud", "http", diff --git a/requirements_all.txt b/requirements_all.txt index a5615f668f9..a33b74a51a9 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -1386,7 +1386,7 @@ pycfdns==1.2.2 pychannels==1.0.0 # homeassistant.components.cast -pychromecast==10.3.0 +pychromecast==11.0.0 # homeassistant.components.pocketcasts pycketcasts==1.0.0 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index f192d1b6a54..1e353832ed3 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -923,7 +923,7 @@ pybotvac==0.0.23 pycfdns==1.2.2 # homeassistant.components.cast -pychromecast==10.3.0 +pychromecast==11.0.0 # homeassistant.components.climacell pyclimacell==0.18.2 From c030af0919e33b8840be1197929529294e3c2b52 Mon Sep 17 00:00:00 2001 From: Matthias Alphart Date: Fri, 1 Apr 2022 10:07:13 +0200 Subject: [PATCH 056/238] coerce number selector values to int (#69059) --- homeassistant/components/knx/config_flow.py | 27 +++++++++++++-------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/homeassistant/components/knx/config_flow.py b/homeassistant/components/knx/config_flow.py index e7e8854a9fb..e45eb3a87a1 100644 --- a/homeassistant/components/knx/config_flow.py +++ b/homeassistant/components/knx/config_flow.py @@ -65,7 +65,10 @@ CONF_KNX_LABEL_TUNNELING_UDP_ROUTE_BACK: Final = "UDP with route back / NAT mode _IA_SELECTOR = selector.selector({"text": {}}) _IP_SELECTOR = selector.selector({"text": {}}) -_PORT_SELECTOR = selector.selector({"number": {"min": 1, "max": 65535, "mode": "box"}}) +_PORT_SELECTOR = vol.All( + selector.selector({"number": {"min": 1, "max": 65535, "mode": "box"}}), + vol.Coerce(int), +) class FlowHandler(config_entries.ConfigFlow, domain=DOMAIN): @@ -246,8 +249,9 @@ class FlowHandler(config_entries.ConfigFlow, domain=DOMAIN): ) fields = { - vol.Required(CONF_KNX_SECURE_USER_ID, default=2): selector.selector( - {"number": {"min": 1, "max": 127, "mode": "box"}} + vol.Required(CONF_KNX_SECURE_USER_ID, default=2): vol.All( + selector.selector({"number": {"min": 1, "max": 127, "mode": "box"}}), + vol.Coerce(int), ), vol.Required(CONF_KNX_SECURE_USER_PASSWORD): selector.selector( {"text": {"type": "password"}} @@ -421,14 +425,17 @@ class KNXOptionsFlowHandler(OptionsFlow): CONF_KNX_DEFAULT_RATE_LIMIT, ), ) - ] = selector.selector( - { - "number": { - "min": 1, - "max": CONF_MAX_RATE_LIMIT, - "mode": "box", + ] = vol.All( + selector.selector( + { + "number": { + "min": 1, + "max": CONF_MAX_RATE_LIMIT, + "mode": "box", + } } - } + ), + vol.Coerce(int), ) return self.async_show_form( From 200a24d8696a659c7b9e3374143255e5de779b6e Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Fri, 1 Apr 2022 17:28:50 +0200 Subject: [PATCH 057/238] Fix utility_meter startup (#69064) --- homeassistant/components/utility_meter/sensor.py | 10 ++++++---- tests/components/utility_meter/test_sensor.py | 8 +++++++- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/homeassistant/components/utility_meter/sensor.py b/homeassistant/components/utility_meter/sensor.py index c3d2be63a4b..511dc9ee138 100644 --- a/homeassistant/components/utility_meter/sensor.py +++ b/homeassistant/components/utility_meter/sensor.py @@ -20,7 +20,6 @@ from homeassistant.const import ( CONF_NAME, ENERGY_KILO_WATT_HOUR, ENERGY_WATT_HOUR, - EVENT_HOMEASSISTANT_START, STATE_UNAVAILABLE, STATE_UNKNOWN, ) @@ -33,6 +32,7 @@ from homeassistant.helpers.event import ( async_track_state_change_event, ) from homeassistant.helpers.restore_state import RestoreEntity +from homeassistant.helpers.start import async_at_start from homeassistant.helpers.template import is_number from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType import homeassistant.util.dt as dt_util @@ -418,6 +418,10 @@ class UtilityMeterSensor(RestoreEntity, SensorEntity): ) tariff_entity_state = self.hass.states.get(self._tariff_entity) + if not tariff_entity_state: + # The utility meter is not yet added + return + self._change_status(tariff_entity_state.state) return @@ -431,9 +435,7 @@ class UtilityMeterSensor(RestoreEntity, SensorEntity): self.hass, [self._sensor_source_id], self.async_reading ) - self.hass.bus.async_listen_once( - EVENT_HOMEASSISTANT_START, async_source_tracking - ) + async_at_start(self.hass, async_source_tracking) @property def name(self): diff --git a/tests/components/utility_meter/test_sensor.py b/tests/components/utility_meter/test_sensor.py index 1b8328f5a62..371e30ed604 100644 --- a/tests/components/utility_meter/test_sensor.py +++ b/tests/components/utility_meter/test_sensor.py @@ -37,7 +37,7 @@ from homeassistant.const import ( STATE_UNAVAILABLE, STATE_UNKNOWN, ) -from homeassistant.core import State +from homeassistant.core import CoreState, State from homeassistant.setup import async_setup_component import homeassistant.util.dt as dt_util @@ -418,6 +418,9 @@ async def test_device_class(hass, yaml_config, config_entry_configs): ) async def test_restore_state(hass, yaml_config, config_entry_config): """Test utility sensor restore state.""" + # Home assistant is not runnit yet + hass.state = CoreState.not_running + last_reset = "2020-12-21T00:00:00.013073+00:00" mock_restore_cache( hass, @@ -657,6 +660,9 @@ async def test_non_net_consumption(hass, yaml_config, config_entry_config): ) async def test_delta_values(hass, yaml_config, config_entry_config): """Test utility meter "delta_values" mode.""" + # Home assistant is not runnit yet + hass.state = CoreState.not_running + now = dt_util.utcnow() with alter_time(now): if yaml_config: From 66c131515a980a00361874a438672df47e9a4a26 Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Fri, 1 Apr 2022 14:38:34 +0200 Subject: [PATCH 058/238] Update zengge codeowners (#69068) --- CODEOWNERS | 1 + homeassistant/components/zengge/manifest.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CODEOWNERS b/CODEOWNERS index d0f03e31e0e..6da9c48adc9 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -1187,6 +1187,7 @@ build.json @home-assistant/supervisor /homeassistant/components/yi/ @bachya /homeassistant/components/youless/ @gjong /tests/components/youless/ @gjong +/homeassistant/components/zengge/ @emontnemery /homeassistant/components/zeroconf/ @bdraco /tests/components/zeroconf/ @bdraco /homeassistant/components/zerproc/ @emlove diff --git a/homeassistant/components/zengge/manifest.json b/homeassistant/components/zengge/manifest.json index 98f2ab1de21..cc04876287d 100644 --- a/homeassistant/components/zengge/manifest.json +++ b/homeassistant/components/zengge/manifest.json @@ -3,7 +3,7 @@ "name": "Zengge", "documentation": "https://www.home-assistant.io/integrations/zengge", "requirements": ["zengge==0.2"], - "codeowners": [], + "codeowners": ["@emontnemery"], "iot_class": "local_polling", "loggers": ["zengge"] } From 718bc734f2ae7b72f0077cc7988aa939339966b4 Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Fri, 1 Apr 2022 15:58:08 +0200 Subject: [PATCH 059/238] Add bluepy as a dependency for zengge (#69067) Co-authored-by: Franck Nijhof --- homeassistant/components/zengge/manifest.json | 2 +- requirements_all.txt | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/zengge/manifest.json b/homeassistant/components/zengge/manifest.json index cc04876287d..79ae849dd36 100644 --- a/homeassistant/components/zengge/manifest.json +++ b/homeassistant/components/zengge/manifest.json @@ -2,7 +2,7 @@ "domain": "zengge", "name": "Zengge", "documentation": "https://www.home-assistant.io/integrations/zengge", - "requirements": ["zengge==0.2"], + "requirements": ["bluepy==1.3.0", "zengge==0.2"], "codeowners": ["@emontnemery"], "iot_class": "local_polling", "loggers": ["zengge"] diff --git a/requirements_all.txt b/requirements_all.txt index a33b74a51a9..32cbc4862b1 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -407,6 +407,7 @@ blockchain==1.4.4 # homeassistant.components.decora # homeassistant.components.miflora +# homeassistant.components.zengge # bluepy==1.3.0 # homeassistant.components.bond From 2d7cbeb1fc39f461ca58023ebae06b7fcb532164 Mon Sep 17 00:00:00 2001 From: Mick Vleeshouwer Date: Fri, 1 Apr 2022 08:48:14 -0700 Subject: [PATCH 060/238] Bump pyoverkiz to 1.3.14 in Overkiz integration (#69084) --- homeassistant/components/overkiz/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/overkiz/manifest.json b/homeassistant/components/overkiz/manifest.json index 53f2a7227bd..3409c06be26 100644 --- a/homeassistant/components/overkiz/manifest.json +++ b/homeassistant/components/overkiz/manifest.json @@ -3,7 +3,7 @@ "name": "Overkiz (by Somfy)", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/overkiz", - "requirements": ["pyoverkiz==1.3.13"], + "requirements": ["pyoverkiz==1.3.14"], "zeroconf": [ { "type": "_kizbox._tcp.local.", diff --git a/requirements_all.txt b/requirements_all.txt index 32cbc4862b1..97f167c3b45 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -1702,7 +1702,7 @@ pyotgw==1.1b1 pyotp==2.6.0 # homeassistant.components.overkiz -pyoverkiz==1.3.13 +pyoverkiz==1.3.14 # homeassistant.components.openweathermap pyowm==3.2.0 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 1e353832ed3..7255aa0d5e2 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -1139,7 +1139,7 @@ pyotgw==1.1b1 pyotp==2.6.0 # homeassistant.components.overkiz -pyoverkiz==1.3.13 +pyoverkiz==1.3.14 # homeassistant.components.openweathermap pyowm==3.2.0 From f40513c95b89db875bbdc3aaf90dd939aa68955b Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 1 Apr 2022 09:30:33 -0700 Subject: [PATCH 061/238] Bumped version to 2022.4.0b2 --- homeassistant/const.py | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/const.py b/homeassistant/const.py index d4c91230467..705bfebfc61 100644 --- a/homeassistant/const.py +++ b/homeassistant/const.py @@ -7,7 +7,7 @@ from .backports.enum import StrEnum MAJOR_VERSION: Final = 2022 MINOR_VERSION: Final = 4 -PATCH_VERSION: Final = "0b1" +PATCH_VERSION: Final = "0b2" __short_version__: Final = f"{MAJOR_VERSION}.{MINOR_VERSION}" __version__: Final = f"{__short_version__}.{PATCH_VERSION}" REQUIRED_PYTHON_VER: Final[tuple[int, int, int]] = (3, 9, 0) diff --git a/setup.cfg b/setup.cfg index 875e7bbf829..c18402325ec 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = homeassistant -version = 2022.4.0b1 +version = 2022.4.0b2 author = The Home Assistant Authors author_email = hello@home-assistant.io license = Apache-2.0 From 5db1c678122e73ea8de12a19782c8d457b69f95a Mon Sep 17 00:00:00 2001 From: Mick Vleeshouwer Date: Fri, 1 Apr 2022 10:26:34 -0700 Subject: [PATCH 062/238] Fix Protexial alarm in Overkiz integration (#68996) --- .../components/overkiz/alarm_control_panel.py | 49 +++++++++---------- 1 file changed, 24 insertions(+), 25 deletions(-) diff --git a/homeassistant/components/overkiz/alarm_control_panel.py b/homeassistant/components/overkiz/alarm_control_panel.py index f6bdb6eef0e..4e62547bec5 100644 --- a/homeassistant/components/overkiz/alarm_control_panel.py +++ b/homeassistant/components/overkiz/alarm_control_panel.py @@ -22,6 +22,7 @@ from homeassistant.components.alarm_control_panel.const import ( from homeassistant.config_entries import ConfigEntry from homeassistant.const import ( STATE_ALARM_ARMED_AWAY, + STATE_ALARM_ARMED_CUSTOM_BYPASS, STATE_ALARM_ARMED_HOME, STATE_ALARM_ARMED_NIGHT, STATE_ALARM_DISARMED, @@ -54,15 +55,15 @@ class OverkizAlarmDescription( """Class to describe an Overkiz alarm control panel.""" alarm_disarm: str | None = None - alarm_disarm_args: OverkizStateType | list[OverkizStateType] | None = None + alarm_disarm_args: OverkizStateType | list[OverkizStateType] = [] alarm_arm_home: str | None = None - alarm_arm_home_args: OverkizStateType | list[OverkizStateType] | None = None + alarm_arm_home_args: OverkizStateType | list[OverkizStateType] = [] alarm_arm_night: str | None = None - alarm_arm_night_args: OverkizStateType | list[OverkizStateType] | None = None + alarm_arm_night_args: OverkizStateType | list[OverkizStateType] = [] alarm_arm_away: str | None = None - alarm_arm_away_args: OverkizStateType | list[OverkizStateType] | None = None + alarm_arm_away_args: OverkizStateType | list[OverkizStateType] = [] alarm_trigger: str | None = None - alarm_trigger_args: OverkizStateType | list[OverkizStateType] | None = None + alarm_trigger_args: OverkizStateType | list[OverkizStateType] = [] MAP_INTERNAL_STATUS_STATE: dict[str, str] = { @@ -91,23 +92,25 @@ def _state_tsk_alarm_controller(select_state: Callable[[str], OverkizStateType]) ] +MAP_CORE_ACTIVE_ZONES: dict[str, str] = { + OverkizCommandParam.A: STATE_ALARM_ARMED_HOME, + f"{OverkizCommandParam.A},{OverkizCommandParam.B}": STATE_ALARM_ARMED_NIGHT, + f"{OverkizCommandParam.A},{OverkizCommandParam.B},{OverkizCommandParam.C}": STATE_ALARM_ARMED_AWAY, +} + + def _state_stateful_alarm_controller( select_state: Callable[[str], OverkizStateType] ) -> str: """Return the state of the device.""" - if state := cast(list, select_state(OverkizState.CORE_ACTIVE_ZONES)): - if [ - OverkizCommandParam.A, - OverkizCommandParam.B, - OverkizCommandParam.C, - ] in state: - return STATE_ALARM_ARMED_AWAY + if state := cast(str, select_state(OverkizState.CORE_ACTIVE_ZONES)): + # The Stateful Alarm Controller has 3 zones with the following options: + # (A, B, C, A,B, B,C, A,C, A,B,C). Since it is not possible to map this to AlarmControlPanel entity, + # only the most important zones are mapped, other zones can only be disarmed. + if state in MAP_CORE_ACTIVE_ZONES: + return MAP_CORE_ACTIVE_ZONES[state] - if [OverkizCommandParam.A, OverkizCommandParam.B] in state: - return STATE_ALARM_ARMED_NIGHT - - if OverkizCommandParam.A in state: - return STATE_ALARM_ARMED_HOME + return STATE_ALARM_ARMED_CUSTOM_BYPASS return STATE_ALARM_DISARMED @@ -181,17 +184,13 @@ ALARM_DESCRIPTIONS: list[OverkizAlarmDescription] = [ SUPPORT_ALARM_ARM_AWAY | SUPPORT_ALARM_ARM_HOME | SUPPORT_ALARM_ARM_NIGHT ), fn_state=_state_stateful_alarm_controller, - alarm_disarm=OverkizCommand.DISARM, + alarm_disarm=OverkizCommand.ALARM_OFF, alarm_arm_home=OverkizCommand.ALARM_ZONE_ON, - alarm_arm_home_args=[OverkizCommandParam.A], + alarm_arm_home_args=OverkizCommandParam.A, alarm_arm_night=OverkizCommand.ALARM_ZONE_ON, - alarm_arm_night_args=[OverkizCommandParam.A, OverkizCommandParam.B], + alarm_arm_night_args=f"{OverkizCommandParam.A}, {OverkizCommandParam.B}", alarm_arm_away=OverkizCommand.ALARM_ZONE_ON, - alarm_arm_away_args=[ - OverkizCommandParam.A, - OverkizCommandParam.B, - OverkizCommandParam.C, - ], + alarm_arm_away_args=f"{OverkizCommandParam.A},{OverkizCommandParam.B},{OverkizCommandParam.C}", ), # MyFoxAlarmController OverkizAlarmDescription( From d4a31b037f6d5827a179e4960c4a62abfeb77067 Mon Sep 17 00:00:00 2001 From: Dave T <17680170+davet2001@users.noreply.github.com> Date: Sat, 2 Apr 2022 09:54:19 +0100 Subject: [PATCH 063/238] Add image test cases to generic (#69040) --- tests/components/generic/sample1_animate.png | Bin 0 -> 259461 bytes .../generic/sample2_jpeg_odd_header.jpg | Bin 0 -> 79018 bytes .../generic/sample3_jpeg_odd_header.jpg | Bin 0 -> 176350 bytes .../generic/sample4_K5-60mileAnim-320x240.gif | Bin 0 -> 1140935 bytes tests/components/generic/test_config_flow.py | 25 ++++++++++++++++++ 5 files changed, 25 insertions(+) create mode 100644 tests/components/generic/sample1_animate.png create mode 100644 tests/components/generic/sample2_jpeg_odd_header.jpg create mode 100644 tests/components/generic/sample3_jpeg_odd_header.jpg create mode 100644 tests/components/generic/sample4_K5-60mileAnim-320x240.gif diff --git a/tests/components/generic/sample1_animate.png b/tests/components/generic/sample1_animate.png new file mode 100644 index 0000000000000000000000000000000000000000..d59a744f735de26c22c011306c7f90d460792a87 GIT binary patch literal 259461 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%0Dek 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 A@&Et; literal 0 HcmV?d00001 diff --git a/tests/components/generic/sample2_jpeg_odd_header.jpg b/tests/components/generic/sample2_jpeg_odd_header.jpg new file mode 100644 index 0000000000000000000000000000000000000000..80372d4edd65c5e4f8fa29be43512199159fa3fe GIT binary patch literal 79018 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 literal 0 HcmV?d00001 diff --git a/tests/components/generic/sample3_jpeg_odd_header.jpg b/tests/components/generic/sample3_jpeg_odd_header.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ecc18d7ad9eeaf1b402cbc2443fe73292a194804 GIT binary patch literal 176350 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�l)2U-mXP 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

Y_KXFt5@cdW&4cS)<;ziF z1I%^#14s%9)tEmSi)<)qj7-4aUA9|)%yNdb_1XvAZA2~DM;AqI1(k^nlFbP`d*7krk$); z>b(*Vg*Rs0aK1`e>I+M4pG+~6%T=B~A)Gb6N!6Y`4pkm)7ja7t5c*B3s_&8@t2=G@ zg)>HEv0qQd#&k-`k=DS*uGuEha-2RLs6J-aZ22X+=$( z6GgeiWwiX3u{^Vmv4*TH6=TsD2yKoSnN*45cE}ToQ+I5f7ZVMKDiM(X@3n$uTYs%h%mYCmy z2lOuFx*!MVlZD(HbjJ?HZwkFSe1nFvifue9Ugzu*)Qkq*IAK*!ReK3S99Ao?+bqtk zsvTA(3dFrMvUgReAXKgPT32=*oQqr=9QWG;OC6i#xk#{}9=d4zx{BLW+Q`*DSWw8d{FI z9mMRSjCeET7{Mhejn!L5JM>h6L4J-lKgJGet(4*+F9Eu438VJJIBYouIJ z!bn&QAcwCEr;~=$y?f!c0;JU&*CY?ya@HnL$wrI>#3Zw*g~~rF)!jY^v(nzGfKtH% zUp+;H0X?~3v@u*cYMwA{Rt{TO*o4)X@ZaS|7QORj53@=7NC{wW_dL7|r2Z@pQ#Pe` zsXQyY%PJLwKYIwv&!RbOBu5NvHu_iG%ik;}dAm{C`tp0&Ypc07FC@?z1M!d;0^~>; zhGYYUX&9pIoTD6~-cyL56`SD!+;jrKhJ-fC7!n5JjpP_H$espPb7xv0;9QoBP2n5B-shrA z_rRKOkUPg9&E3pPrfiMc&3@Qpa|ZG1aQ593!3>3)@He@Go_-1ioTDJJWiI{Y}S6pdjQ=h=myo$9aXA+3QDF9#NnCE?Kpc=-a70)OzF4@E%TJf1?4!}oj;k{o^u zLjUdO{D6{B)ORU6bmNFk6X0ojfe&RfN4SD*3PKHFKEq{gk(oJJ0>2c7`N|h0PU9{s z$cWKAuRek%*x#kHUWl_H~j|npp0n#A{IPkAf7amoef);8v+ri8{cg`Gm; z8GVet)83@AcMy{{3zm_F;jR6C>8*+N&*h&OhbIx7el|l0DPBXH=&2*xA8aX8(%jDFa8%t&o!rx95+5N>2Png{_g2m9$ z&F^vU?`qAa33VA{nZZ&Dan3k7A2(*v&mPMq(&l^9o9Yg9`p}irz$X3os|*CHcWhHF z(dz)`@F&_iwe;u&_stA#%E%e3$KiB1JR7<{n(k~Y!lR@`2Fhsx@rr>YH0+I*1J2l7 zEmQSwWnr!Ff)GT5!c!>hK5K+`qh*zMm)mxL0RZ^5+&VRO-o!Mp)F}CBsYO#GKI$*ZPt#2X9*n70~YC7 zgns}1HR80?nf;fi@lhs*Pc1Pz1a=y>cVUOLX64HS1=sV*DRQV;4_fF@i|JKDKyg`) zOz0`$2J2xJcd1B4K+nE@=3 z6NIxys#abD9*2)i<5vmDVIB4^>Ev8_P_3T4<^lPPqS$lk9{zMTDY+z8j{I`B#P2TH zA%`wul*?`ilogEXv-i5X3Iya>G4-f`{97r0Gn*n`vD^XL(p+G-4

9?JnawcV1@? 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�(PZ^eu^JLOC4~NdXs6rt8{ZmND4)|QBIL4x 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

_40hQDyAL2)-Go;gCb@_+ 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

7QAocDr}Iww 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%0DMm3y%8)v9p4QMToQx4+}p1<*S>=8cyFmq)R9O! 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

!uE!KmuNp9 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

NN-O3v1eUg3RrgfdTb3-idaEVL3egjK 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 z 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 z

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

uANMIsU~oF03yi2^dYj?hKJJ#;Ub87fip%QIZtE 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

Uek(x}OERa}e7=(waG>&}ZNJrEHi%?2d0 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 VbCNhJfJgA`wD+Xg@pwSw{{i~~v}FJQ literal 0 HcmV?d00001 diff --git a/tests/components/generic/test_config_flow.py b/tests/components/generic/test_config_flow.py index 7849e54c747..7e6c55dafff 100644 --- a/tests/components/generic/test_config_flow.py +++ b/tests/components/generic/test_config_flow.py @@ -1,6 +1,7 @@ """Test The generic (IP Camera) config flow.""" import errno +import os.path from unittest.mock import patch import av @@ -137,6 +138,30 @@ async def test_form_only_svg_whitespace(hass, fakeimgbytes_svg, user_flow): assert result2["type"] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY +@respx.mock +@pytest.mark.parametrize( + "image_file", + [ + ("sample1_animate.png"), + ("sample2_jpeg_odd_header.jpg"), + ("sample3_jpeg_odd_header.jpg"), + ("sample4_K5-60mileAnim-320x240.gif"), + ], +) +async def test_form_only_still_sample(hass, user_flow, image_file): + """Test various sample images #69037.""" + image_path = os.path.join(os.path.dirname(__file__), image_file) + with open(image_path, "rb") as image: + respx.get("http://127.0.0.1/testurl/1").respond(stream=image.read()) + data = TESTDATA.copy() + data.pop(CONF_STREAM_SOURCE) + result2 = await hass.config_entries.flow.async_configure( + user_flow["flow_id"], + data, + ) + assert result2["type"] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY + + @respx.mock async def test_form_rtsp_mode(hass, fakeimg_png, mock_av_open, user_flow): """Test we complete ok if the user enters a stream url.""" From 7fe6174bd979c17dd1e4161aaf30b431dc17627b Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Fri, 1 Apr 2022 20:11:17 +0200 Subject: [PATCH 064/238] Rename current_version to installed_version in Update platform (#69093) --- homeassistant/components/demo/update.py | 16 ++--- homeassistant/components/hassio/update.py | 17 +++-- homeassistant/components/pi_hole/update.py | 14 ++-- .../components/synology_dsm/update.py | 6 +- homeassistant/components/update/__init__.py | 29 ++++---- homeassistant/components/update/const.py | 2 +- .../components/update/significant_change.py | 4 +- homeassistant/components/wled/update.py | 4 +- tests/components/demo/test_update.py | 12 ++-- tests/components/pi_hole/test_update.py | 12 ++-- tests/components/update/test_init.py | 70 +++++++++---------- tests/components/update/test_recorder.py | 4 +- .../update/test_significant_change.py | 6 +- tests/components/wled/test_update.py | 14 ++-- .../custom_components/test/update.py | 28 ++++---- 15 files changed, 121 insertions(+), 117 deletions(-) diff --git a/homeassistant/components/demo/update.py b/homeassistant/components/demo/update.py index e0f5814c63d..648ad59bb55 100644 --- a/homeassistant/components/demo/update.py +++ b/homeassistant/components/demo/update.py @@ -31,7 +31,7 @@ async def async_setup_platform( unique_id="update_no_install", name="Demo Update No Install", title="Awesomesoft Inc.", - current_version="1.0.0", + installed_version="1.0.0", latest_version="1.0.1", release_summary="Awesome update, fixing everything!", release_url="https://www.example.com/release/1.0.1", @@ -41,14 +41,14 @@ async def async_setup_platform( unique_id="update_2_date", name="Demo No Update", title="AdGuard Home", - current_version="1.0.0", + installed_version="1.0.0", latest_version="1.0.0", ), DemoUpdate( unique_id="update_addon", name="Demo add-on", title="AdGuard Home", - current_version="1.0.0", + installed_version="1.0.0", latest_version="1.0.1", release_summary="Awesome update, fixing everything!", release_url="https://www.example.com/release/1.0.1", @@ -57,7 +57,7 @@ async def async_setup_platform( unique_id="update_light_bulb", name="Demo Living Room Bulb Update", title="Philips Lamps Firmware", - current_version="1.93.3", + installed_version="1.93.3", latest_version="1.94.2", release_summary="Added support for effects", release_url="https://www.example.com/release/1.93.3", @@ -67,7 +67,7 @@ async def async_setup_platform( unique_id="update_support_progress", name="Demo Update with Progress", title="Philips Lamps Firmware", - current_version="1.93.3", + installed_version="1.93.3", latest_version="1.94.2", support_progress=True, release_summary="Added support for effects", @@ -104,7 +104,7 @@ class DemoUpdate(UpdateEntity): unique_id: str, name: str, title: str | None, - current_version: str | None, + installed_version: str | None, latest_version: str | None, release_summary: str | None = None, release_url: str | None = None, @@ -114,7 +114,7 @@ class DemoUpdate(UpdateEntity): device_class: UpdateDeviceClass | None = None, ) -> None: """Initialize the Demo select entity.""" - self._attr_current_version = current_version + self._attr_installed_version = installed_version self._attr_device_class = device_class self._attr_latest_version = latest_version self._attr_name = name or DEVICE_DEFAULT_NAME @@ -149,7 +149,7 @@ class DemoUpdate(UpdateEntity): await _fake_install() self._attr_in_progress = False - self._attr_current_version = ( + self._attr_installed_version = ( version if version is not None else self.latest_version ) self.async_write_ha_state() diff --git a/homeassistant/components/hassio/update.py b/homeassistant/components/hassio/update.py index d2953a0f801..8af3d88088a 100644 --- a/homeassistant/components/hassio/update.py +++ b/homeassistant/components/hassio/update.py @@ -116,8 +116,8 @@ class SupervisorAddonUpdateEntity(HassioAddonEntity, UpdateEntity): return self._addon_data[ATTR_VERSION_LATEST] @property - def current_version(self) -> str | None: - """Version currently in use.""" + def installed_version(self) -> str | None: + """Version installed and in use.""" return self._addon_data[ATTR_VERSION] @property @@ -139,9 +139,12 @@ class SupervisorAddonUpdateEntity(HassioAddonEntity, UpdateEntity): if (notes := self._addon_data[ATTR_CHANGELOG]) is None: return None - if f"# {self.latest_version}" in notes and f"# {self.current_version}" in notes: + if ( + f"# {self.latest_version}" in notes + and f"# {self.installed_version}" in notes + ): # Split the release notes to only what is between the versions if we can - new_notes = notes.split(f"# {self.current_version}")[0] + new_notes = notes.split(f"# {self.installed_version}")[0] if f"# {self.latest_version}" in new_notes: # Make sure the latest version is still there. # This can be False if the order of the release notes are not correct @@ -182,7 +185,7 @@ class SupervisorOSUpdateEntity(HassioOSEntity, UpdateEntity): return self.coordinator.data[DATA_KEY_OS][ATTR_VERSION_LATEST] @property - def current_version(self) -> str: + def installed_version(self) -> str: """Return native value of entity.""" return self.coordinator.data[DATA_KEY_OS][ATTR_VERSION] @@ -226,7 +229,7 @@ class SupervisorSupervisorUpdateEntity(HassioSupervisorEntity, UpdateEntity): return self.coordinator.data[DATA_KEY_SUPERVISOR][ATTR_VERSION_LATEST] @property - def current_version(self) -> str: + def installed_version(self) -> str: """Return native value of entity.""" return self.coordinator.data[DATA_KEY_SUPERVISOR][ATTR_VERSION] @@ -271,7 +274,7 @@ class SupervisorCoreUpdateEntity(HassioCoreEntity, UpdateEntity): return self.coordinator.data[DATA_KEY_CORE][ATTR_VERSION_LATEST] @property - def current_version(self) -> str: + def installed_version(self) -> str: """Return native value of entity.""" return self.coordinator.data[DATA_KEY_CORE][ATTR_VERSION] diff --git a/homeassistant/components/pi_hole/update.py b/homeassistant/components/pi_hole/update.py index 14e6761f7c5..6bb424f15b1 100644 --- a/homeassistant/components/pi_hole/update.py +++ b/homeassistant/components/pi_hole/update.py @@ -22,7 +22,7 @@ from .const import DATA_KEY_API, DATA_KEY_COORDINATOR, DOMAIN class PiHoleUpdateEntityDescription(UpdateEntityDescription): """Describes PiHole update entity.""" - current_version: Callable[[dict], str | None] = lambda api: None + installed_version: Callable[[dict], str | None] = lambda api: None latest_version: Callable[[dict], str | None] = lambda api: None release_base_url: str | None = None title: str | None = None @@ -34,7 +34,7 @@ UPDATE_ENTITY_TYPES: tuple[PiHoleUpdateEntityDescription, ...] = ( name="Core Update Available", title="Pi-hole Core", entity_category=EntityCategory.DIAGNOSTIC, - current_version=lambda versions: versions.get("core_current"), + installed_version=lambda versions: versions.get("core_current"), latest_version=lambda versions: versions.get("core_latest"), release_base_url="https://github.com/pi-hole/pi-hole/releases/tag", ), @@ -43,7 +43,7 @@ UPDATE_ENTITY_TYPES: tuple[PiHoleUpdateEntityDescription, ...] = ( name="Web Update Available", title="Pi-hole Web interface", entity_category=EntityCategory.DIAGNOSTIC, - current_version=lambda versions: versions.get("web_current"), + installed_version=lambda versions: versions.get("web_current"), latest_version=lambda versions: versions.get("web_latest"), release_base_url="https://github.com/pi-hole/AdminLTE/releases/tag", ), @@ -52,7 +52,7 @@ UPDATE_ENTITY_TYPES: tuple[PiHoleUpdateEntityDescription, ...] = ( name="FTL Update Available", title="Pi-hole FTL DNS", entity_category=EntityCategory.DIAGNOSTIC, - current_version=lambda versions: versions.get("FTL_current"), + installed_version=lambda versions: versions.get("FTL_current"), latest_version=lambda versions: versions.get("FTL_latest"), release_base_url="https://github.com/pi-hole/FTL/releases/tag", ), @@ -100,10 +100,10 @@ class PiHoleUpdateEntity(PiHoleEntity, UpdateEntity): self._attr_title = description.title @property - def current_version(self) -> str | None: - """Version currently in use.""" + def installed_version(self) -> str | None: + """Version installed and in use.""" if isinstance(self.api.versions, dict): - return self.entity_description.current_version(self.api.versions) + return self.entity_description.installed_version(self.api.versions) return None @property diff --git a/homeassistant/components/synology_dsm/update.py b/homeassistant/components/synology_dsm/update.py index a4a958b8c1a..836468d6f50 100644 --- a/homeassistant/components/synology_dsm/update.py +++ b/homeassistant/components/synology_dsm/update.py @@ -55,15 +55,15 @@ class SynoDSMUpdateEntity(SynologyDSMBaseEntity, UpdateEntity): _attr_title = "Synology DSM" @property - def current_version(self) -> str | None: - """Version currently in use.""" + def installed_version(self) -> str | None: + """Version installed and in use.""" return self._api.information.version_string # type: ignore[no-any-return] @property def latest_version(self) -> str | None: """Latest version available for install.""" if not self._api.upgrade.update_available: - return self.current_version + return self.installed_version return self._api.upgrade.available_version # type: ignore[no-any-return] @property diff --git a/homeassistant/components/update/__init__.py b/homeassistant/components/update/__init__.py index 6b30f45b023..6d4b36e3411 100644 --- a/homeassistant/components/update/__init__.py +++ b/homeassistant/components/update/__init__.py @@ -28,8 +28,8 @@ from homeassistant.helpers.typing import ConfigType from .const import ( ATTR_AUTO_UPDATE, ATTR_BACKUP, - ATTR_CURRENT_VERSION, ATTR_IN_PROGRESS, + ATTR_INSTALLED_VERSION, ATTR_LATEST_VERSION, ATTR_RELEASE_SUMMARY, ATTR_RELEASE_URL, @@ -117,7 +117,8 @@ async def async_install(entity: UpdateEntity, service_call: ServiceCall) -> None """Service call wrapper to validate the call.""" # If version is not specified, but no update is available. if (version := service_call.data.get(ATTR_VERSION)) is None and ( - entity.current_version == entity.latest_version or entity.latest_version is None + entity.installed_version == entity.latest_version + or entity.latest_version is None ): raise HomeAssistantError(f"No update available for {entity.name}") @@ -165,7 +166,7 @@ class UpdateEntity(RestoreEntity): entity_description: UpdateEntityDescription _attr_auto_update: bool = False - _attr_current_version: str | None = None + _attr_installed_version: str | None = None _attr_device_class: UpdateDeviceClass | str | None _attr_in_progress: bool | int = False _attr_latest_version: str | None = None @@ -183,9 +184,9 @@ class UpdateEntity(RestoreEntity): return self._attr_auto_update @property - def current_version(self) -> str | None: - """Version currently in use.""" - return self._attr_current_version + def installed_version(self) -> str | None: + """Version installed and in use.""" + return self._attr_installed_version @property def device_class(self) -> UpdateDeviceClass | str | None: @@ -256,7 +257,7 @@ class UpdateEntity(RestoreEntity): """Skip the current offered version to update.""" if (latest_version := self.latest_version) is None: raise HomeAssistantError(f"Cannot skip an unknown version for {self.name}") - if self.current_version == latest_version: + if self.installed_version == latest_version: raise HomeAssistantError(f"No update available to skip for {self.name}") self.__skipped_version = latest_version self.async_write_ha_state() @@ -305,7 +306,7 @@ class UpdateEntity(RestoreEntity): @final def state(self) -> str | None: """Return the entity state.""" - if (current_version := self.current_version) is None or ( + if (installed_version := self.installed_version) is None or ( latest_version := self.latest_version ) is None: return None @@ -314,11 +315,11 @@ class UpdateEntity(RestoreEntity): return STATE_OFF try: - newer = AwesomeVersion(latest_version) > current_version + newer = AwesomeVersion(latest_version) > installed_version return STATE_ON if newer else STATE_OFF except AwesomeVersionCompareException: # Can't compare versions, fallback to exact match - return STATE_OFF if latest_version == current_version else STATE_ON + return STATE_OFF if latest_version == installed_version else STATE_ON @final @property @@ -334,17 +335,17 @@ class UpdateEntity(RestoreEntity): else: in_progress = self.__in_progress - # Clear skipped version in case it matches the current version or - # the latest version diverged. + # Clear skipped version in case it matches the current installed + # version or the latest version diverged. if ( - self.__skipped_version == self.current_version + self.__skipped_version == self.installed_version or self.__skipped_version != self.latest_version ): self.__skipped_version = None return { ATTR_AUTO_UPDATE: self.auto_update, - ATTR_CURRENT_VERSION: self.current_version, + ATTR_INSTALLED_VERSION: self.installed_version, ATTR_IN_PROGRESS: in_progress, ATTR_LATEST_VERSION: self.latest_version, ATTR_RELEASE_SUMMARY: release_summary, diff --git a/homeassistant/components/update/const.py b/homeassistant/components/update/const.py index 916d2cbaceb..aec3c183a63 100644 --- a/homeassistant/components/update/const.py +++ b/homeassistant/components/update/const.py @@ -22,7 +22,7 @@ SERVICE_SKIP: Final = "skip" ATTR_AUTO_UPDATE: Final = "auto_update" ATTR_BACKUP: Final = "backup" -ATTR_CURRENT_VERSION: Final = "current_version" +ATTR_INSTALLED_VERSION: Final = "installed_version" ATTR_IN_PROGRESS: Final = "in_progress" ATTR_LATEST_VERSION: Final = "latest_version" ATTR_RELEASE_SUMMARY: Final = "release_summary" diff --git a/homeassistant/components/update/significant_change.py b/homeassistant/components/update/significant_change.py index 400734f2e43..8b37d227a1f 100644 --- a/homeassistant/components/update/significant_change.py +++ b/homeassistant/components/update/significant_change.py @@ -5,7 +5,7 @@ from typing import Any from homeassistant.core import HomeAssistant, callback -from .const import ATTR_CURRENT_VERSION, ATTR_LATEST_VERSION +from .const import ATTR_INSTALLED_VERSION, ATTR_LATEST_VERSION @callback @@ -21,7 +21,7 @@ def async_check_significant_change( if old_state != new_state: return True - if old_attrs.get(ATTR_CURRENT_VERSION) != new_attrs.get(ATTR_CURRENT_VERSION): + if old_attrs.get(ATTR_INSTALLED_VERSION) != new_attrs.get(ATTR_INSTALLED_VERSION): return True if old_attrs.get(ATTR_LATEST_VERSION) != new_attrs.get(ATTR_LATEST_VERSION): diff --git a/homeassistant/components/wled/update.py b/homeassistant/components/wled/update.py index 098f2ca3831..f0fc532b3b3 100644 --- a/homeassistant/components/wled/update.py +++ b/homeassistant/components/wled/update.py @@ -44,8 +44,8 @@ class WLEDUpdateEntity(WLEDEntity, UpdateEntity): self._attr_unique_id = coordinator.data.info.mac_address @property - def current_version(self) -> str | None: - """Version currently in use.""" + def installed_version(self) -> str | None: + """Version currently installed and in use.""" if (version := self.coordinator.data.info.version) is None: return None return str(version) diff --git a/tests/components/demo/test_update.py b/tests/components/demo/test_update.py index 37e0ea903d1..ebee402049c 100644 --- a/tests/components/demo/test_update.py +++ b/tests/components/demo/test_update.py @@ -5,8 +5,8 @@ import pytest from homeassistant.components.update import DOMAIN, SERVICE_INSTALL, UpdateDeviceClass from homeassistant.components.update.const import ( - ATTR_CURRENT_VERSION, ATTR_IN_PROGRESS, + ATTR_INSTALLED_VERSION, ATTR_LATEST_VERSION, ATTR_RELEASE_SUMMARY, ATTR_RELEASE_URL, @@ -31,7 +31,7 @@ def test_setup_params(hass: HomeAssistant) -> None: assert state assert state.state == STATE_ON assert state.attributes[ATTR_TITLE] == "Awesomesoft Inc." - assert state.attributes[ATTR_CURRENT_VERSION] == "1.0.0" + assert state.attributes[ATTR_INSTALLED_VERSION] == "1.0.0" assert state.attributes[ATTR_LATEST_VERSION] == "1.0.1" assert ( state.attributes[ATTR_RELEASE_SUMMARY] == "Awesome update, fixing everything!" @@ -42,7 +42,7 @@ def test_setup_params(hass: HomeAssistant) -> None: assert state assert state.state == STATE_OFF assert state.attributes[ATTR_TITLE] == "AdGuard Home" - assert state.attributes[ATTR_CURRENT_VERSION] == "1.0.0" + assert state.attributes[ATTR_INSTALLED_VERSION] == "1.0.0" assert state.attributes[ATTR_LATEST_VERSION] == "1.0.0" assert state.attributes[ATTR_RELEASE_SUMMARY] is None assert state.attributes[ATTR_RELEASE_URL] is None @@ -51,7 +51,7 @@ def test_setup_params(hass: HomeAssistant) -> None: assert state assert state.state == STATE_ON assert state.attributes[ATTR_TITLE] == "AdGuard Home" - assert state.attributes[ATTR_CURRENT_VERSION] == "1.0.0" + assert state.attributes[ATTR_INSTALLED_VERSION] == "1.0.0" assert state.attributes[ATTR_LATEST_VERSION] == "1.0.1" assert ( state.attributes[ATTR_RELEASE_SUMMARY] == "Awesome update, fixing everything!" @@ -62,7 +62,7 @@ def test_setup_params(hass: HomeAssistant) -> None: assert state assert state.state == STATE_ON assert state.attributes[ATTR_TITLE] == "Philips Lamps Firmware" - assert state.attributes[ATTR_CURRENT_VERSION] == "1.93.3" + assert state.attributes[ATTR_INSTALLED_VERSION] == "1.93.3" assert state.attributes[ATTR_LATEST_VERSION] == "1.94.2" assert state.attributes[ATTR_RELEASE_SUMMARY] == "Added support for effects" assert ( @@ -74,7 +74,7 @@ def test_setup_params(hass: HomeAssistant) -> None: assert state assert state.state == STATE_ON assert state.attributes[ATTR_TITLE] == "Philips Lamps Firmware" - assert state.attributes[ATTR_CURRENT_VERSION] == "1.93.3" + assert state.attributes[ATTR_INSTALLED_VERSION] == "1.93.3" assert state.attributes[ATTR_LATEST_VERSION] == "1.94.2" assert state.attributes[ATTR_RELEASE_SUMMARY] == "Added support for effects" assert ( diff --git a/tests/components/pi_hole/test_update.py b/tests/components/pi_hole/test_update.py index 375104a9ce0..8da4ec263d5 100644 --- a/tests/components/pi_hole/test_update.py +++ b/tests/components/pi_hole/test_update.py @@ -20,7 +20,7 @@ async def test_update(hass): state = hass.states.get("update.pi_hole_core_update_available") assert state.name == "Pi-Hole Core Update Available" assert state.state == STATE_ON - assert state.attributes["current_version"] == "v5.5" + assert state.attributes["installed_version"] == "v5.5" assert state.attributes["latest_version"] == "v5.6" assert ( state.attributes["release_url"] @@ -30,7 +30,7 @@ async def test_update(hass): state = hass.states.get("update.pi_hole_ftl_update_available") assert state.name == "Pi-Hole FTL Update Available" assert state.state == STATE_ON - assert state.attributes["current_version"] == "v5.10" + assert state.attributes["installed_version"] == "v5.10" assert state.attributes["latest_version"] == "v5.11" assert ( state.attributes["release_url"] @@ -40,7 +40,7 @@ async def test_update(hass): state = hass.states.get("update.pi_hole_web_update_available") assert state.name == "Pi-Hole Web Update Available" assert state.state == STATE_ON - assert state.attributes["current_version"] == "v5.7" + assert state.attributes["installed_version"] == "v5.7" assert state.attributes["latest_version"] == "v5.8" assert ( state.attributes["release_url"] @@ -61,20 +61,20 @@ async def test_update_no_versions(hass): state = hass.states.get("update.pi_hole_core_update_available") assert state.name == "Pi-Hole Core Update Available" assert state.state == STATE_UNKNOWN - assert state.attributes["current_version"] is None + assert state.attributes["installed_version"] is None assert state.attributes["latest_version"] is None assert state.attributes["release_url"] is None state = hass.states.get("update.pi_hole_ftl_update_available") assert state.name == "Pi-Hole FTL Update Available" assert state.state == STATE_UNKNOWN - assert state.attributes["current_version"] is None + assert state.attributes["installed_version"] is None assert state.attributes["latest_version"] is None assert state.attributes["release_url"] is None state = hass.states.get("update.pi_hole_web_update_available") assert state.name == "Pi-Hole Web Update Available" assert state.state == STATE_UNKNOWN - assert state.attributes["current_version"] is None + assert state.attributes["installed_version"] is None assert state.attributes["latest_version"] is None assert state.attributes["release_url"] is None diff --git a/tests/components/update/test_init.py b/tests/components/update/test_init.py index b8db7f24f4a..3a40b51cca2 100644 --- a/tests/components/update/test_init.py +++ b/tests/components/update/test_init.py @@ -17,8 +17,8 @@ from homeassistant.components.update import ( ) from homeassistant.components.update.const import ( ATTR_AUTO_UPDATE, - ATTR_CURRENT_VERSION, ATTR_IN_PROGRESS, + ATTR_INSTALLED_VERSION, ATTR_LATEST_VERSION, ATTR_RELEASE_SUMMARY, ATTR_RELEASE_URL, @@ -51,14 +51,14 @@ async def test_update(hass: HomeAssistant) -> None: update = MockUpdateEntity() update.hass = hass - update._attr_current_version = "1.0.0" + update._attr_installed_version = "1.0.0" update._attr_latest_version = "1.0.1" update._attr_release_summary = "Summary" update._attr_release_url = "https://example.com" update._attr_title = "Title" assert update.entity_category is EntityCategory.DIAGNOSTIC - assert update.current_version == "1.0.0" + assert update.installed_version == "1.0.0" assert update.latest_version == "1.0.1" assert update.release_summary == "Summary" assert update.release_url == "https://example.com" @@ -67,7 +67,7 @@ async def test_update(hass: HomeAssistant) -> None: assert update.state == STATE_ON assert update.state_attributes == { ATTR_AUTO_UPDATE: False, - ATTR_CURRENT_VERSION: "1.0.0", + ATTR_INSTALLED_VERSION: "1.0.0", ATTR_IN_PROGRESS: False, ATTR_LATEST_VERSION: "1.0.1", ATTR_RELEASE_SUMMARY: "Summary", @@ -77,27 +77,27 @@ async def test_update(hass: HomeAssistant) -> None: } # Test no update available - update._attr_current_version = "1.0.0" + update._attr_installed_version = "1.0.0" update._attr_latest_version = "1.0.0" assert update.state is STATE_OFF - # Test state becomes unknown if current version is unknown - update._attr_current_version = None + # Test state becomes unknown if installed version is unknown + update._attr_installed_version = None update._attr_latest_version = "1.0.0" assert update.state is None # Test state becomes unknown if latest version is unknown - update._attr_current_version = "1.0.0" + update._attr_installed_version = "1.0.0" update._attr_latest_version = None assert update.state is None # Test no update if new version is not an update - update._attr_current_version = "1.0.0" + update._attr_installed_version = "1.0.0" update._attr_latest_version = "0.9.0" assert update.state is STATE_OFF # Test update if new version is not considered a valid version - update._attr_current_version = "1.0.0" + update._attr_installed_version = "1.0.0" update._attr_latest_version = "awesome_update" assert update.state is STATE_ON @@ -159,7 +159,7 @@ async def test_entity_with_no_install( state = hass.states.get("update.update_no_install") assert state assert state.state == STATE_ON - assert state.attributes[ATTR_CURRENT_VERSION] == "1.0.0" + assert state.attributes[ATTR_INSTALLED_VERSION] == "1.0.0" assert state.attributes[ATTR_LATEST_VERSION] == "1.0.1" # Should not be able to install as the entity doesn't support that @@ -175,7 +175,7 @@ async def test_entity_with_no_install( state = hass.states.get("update.update_no_install") assert state assert state.state == STATE_ON - assert state.attributes[ATTR_CURRENT_VERSION] == "1.0.0" + assert state.attributes[ATTR_INSTALLED_VERSION] == "1.0.0" assert state.attributes[ATTR_LATEST_VERSION] == "1.0.1" assert state.attributes[ATTR_SKIPPED_VERSION] is None @@ -190,7 +190,7 @@ async def test_entity_with_no_install( state = hass.states.get("update.update_no_install") assert state assert state.state == STATE_OFF - assert state.attributes[ATTR_CURRENT_VERSION] == "1.0.0" + assert state.attributes[ATTR_INSTALLED_VERSION] == "1.0.0" assert state.attributes[ATTR_LATEST_VERSION] == "1.0.1" assert state.attributes[ATTR_SKIPPED_VERSION] == "1.0.1" @@ -210,7 +210,7 @@ async def test_entity_with_no_updates( state = hass.states.get("update.no_update") assert state assert state.state == STATE_OFF - assert state.attributes[ATTR_CURRENT_VERSION] == "1.0.0" + assert state.attributes[ATTR_INSTALLED_VERSION] == "1.0.0" assert state.attributes[ATTR_LATEST_VERSION] == "1.0.0" # Should not be able to skip when there is no update available @@ -259,7 +259,7 @@ async def test_entity_with_auto_update( state = hass.states.get("update.update_with_auto_update") assert state assert state.state == STATE_ON - assert state.attributes[ATTR_CURRENT_VERSION] == "1.0.0" + assert state.attributes[ATTR_INSTALLED_VERSION] == "1.0.0" assert state.attributes[ATTR_LATEST_VERSION] == "1.0.1" assert state.attributes[ATTR_SKIPPED_VERSION] is None @@ -300,7 +300,7 @@ async def test_entity_with_updates_available( state = hass.states.get("update.update_available") assert state assert state.state == STATE_ON - assert state.attributes[ATTR_CURRENT_VERSION] == "1.0.0" + assert state.attributes[ATTR_INSTALLED_VERSION] == "1.0.0" assert state.attributes[ATTR_LATEST_VERSION] == "1.0.1" assert state.attributes[ATTR_SKIPPED_VERSION] is None @@ -316,7 +316,7 @@ async def test_entity_with_updates_available( state = hass.states.get("update.update_available") assert state assert state.state == STATE_OFF - assert state.attributes[ATTR_CURRENT_VERSION] == "1.0.0" + assert state.attributes[ATTR_INSTALLED_VERSION] == "1.0.0" assert state.attributes[ATTR_LATEST_VERSION] == "1.0.1" assert state.attributes[ATTR_SKIPPED_VERSION] == "1.0.1" @@ -332,7 +332,7 @@ async def test_entity_with_updates_available( state = hass.states.get("update.update_available") assert state assert state.state == STATE_OFF - assert state.attributes[ATTR_CURRENT_VERSION] == "1.0.1" + assert state.attributes[ATTR_INSTALLED_VERSION] == "1.0.1" assert state.attributes[ATTR_LATEST_VERSION] == "1.0.1" assert state.attributes[ATTR_SKIPPED_VERSION] is None assert "Installed latest update" in caplog.text @@ -353,7 +353,7 @@ async def test_entity_with_unknown_version( state = hass.states.get("update.update_unknown") assert state assert state.state == STATE_UNKNOWN - assert state.attributes[ATTR_CURRENT_VERSION] == "1.0.0" + assert state.attributes[ATTR_INSTALLED_VERSION] == "1.0.0" assert state.attributes[ATTR_LATEST_VERSION] is None assert state.attributes[ATTR_SKIPPED_VERSION] is None @@ -391,7 +391,7 @@ async def test_entity_with_specific_version( state = hass.states.get("update.update_specific_version") assert state assert state.state == STATE_OFF - assert state.attributes[ATTR_CURRENT_VERSION] == "1.0.0" + assert state.attributes[ATTR_INSTALLED_VERSION] == "1.0.0" assert state.attributes[ATTR_LATEST_VERSION] == "1.0.0" # Update to a specific version @@ -406,7 +406,7 @@ async def test_entity_with_specific_version( state = hass.states.get("update.update_specific_version") assert state assert state.state == STATE_ON - assert state.attributes[ATTR_CURRENT_VERSION] == "0.9.9" + assert state.attributes[ATTR_INSTALLED_VERSION] == "0.9.9" assert state.attributes[ATTR_LATEST_VERSION] == "1.0.0" assert "Installed update with version: 0.9.9" in caplog.text @@ -421,7 +421,7 @@ async def test_entity_with_specific_version( state = hass.states.get("update.update_specific_version") assert state assert state.state == STATE_OFF - assert state.attributes[ATTR_CURRENT_VERSION] == "1.0.0" + assert state.attributes[ATTR_INSTALLED_VERSION] == "1.0.0" assert state.attributes[ATTR_LATEST_VERSION] == "1.0.0" assert "Installed latest update" in caplog.text @@ -455,7 +455,7 @@ async def test_entity_with_backup_support( state = hass.states.get("update.update_backup") assert state assert state.state == STATE_ON - assert state.attributes[ATTR_CURRENT_VERSION] == "1.0.0" + assert state.attributes[ATTR_INSTALLED_VERSION] == "1.0.0" assert state.attributes[ATTR_LATEST_VERSION] == "1.0.1" # Without a backup @@ -472,7 +472,7 @@ async def test_entity_with_backup_support( state = hass.states.get("update.update_backup") assert state assert state.state == STATE_OFF - assert state.attributes[ATTR_CURRENT_VERSION] == "1.0.1" + assert state.attributes[ATTR_INSTALLED_VERSION] == "1.0.1" assert state.attributes[ATTR_LATEST_VERSION] == "1.0.1" assert "Creating backup before installing update" not in caplog.text assert "Installed latest update" in caplog.text @@ -493,7 +493,7 @@ async def test_entity_with_backup_support( state = hass.states.get("update.update_backup") assert state assert state.state == STATE_ON - assert state.attributes[ATTR_CURRENT_VERSION] == "0.9.8" + assert state.attributes[ATTR_INSTALLED_VERSION] == "0.9.8" assert state.attributes[ATTR_LATEST_VERSION] == "1.0.1" assert "Creating backup before installing update" in caplog.text assert "Installed update with version: 0.9.8" in caplog.text @@ -514,7 +514,7 @@ async def test_entity_already_in_progress( state = hass.states.get("update.update_already_in_progress") assert state assert state.state == STATE_ON - assert state.attributes[ATTR_CURRENT_VERSION] == "1.0.0" + assert state.attributes[ATTR_INSTALLED_VERSION] == "1.0.0" assert state.attributes[ATTR_LATEST_VERSION] == "1.0.1" assert state.attributes[ATTR_IN_PROGRESS] == 50 @@ -559,14 +559,14 @@ async def test_entity_without_progress_support( assert len(events) == 2 assert events[0].data.get("old_state").attributes[ATTR_IN_PROGRESS] is False - assert events[0].data.get("old_state").attributes[ATTR_CURRENT_VERSION] == "1.0.0" + assert events[0].data.get("old_state").attributes[ATTR_INSTALLED_VERSION] == "1.0.0" assert events[0].data.get("new_state").attributes[ATTR_IN_PROGRESS] is True - assert events[0].data.get("new_state").attributes[ATTR_CURRENT_VERSION] == "1.0.0" + assert events[0].data.get("new_state").attributes[ATTR_INSTALLED_VERSION] == "1.0.0" assert events[1].data.get("old_state").attributes[ATTR_IN_PROGRESS] is True - assert events[1].data.get("old_state").attributes[ATTR_CURRENT_VERSION] == "1.0.0" + assert events[1].data.get("old_state").attributes[ATTR_INSTALLED_VERSION] == "1.0.0" assert events[1].data.get("new_state").attributes[ATTR_IN_PROGRESS] is False - assert events[1].data.get("new_state").attributes[ATTR_CURRENT_VERSION] == "1.0.1" + assert events[1].data.get("new_state").attributes[ATTR_INSTALLED_VERSION] == "1.0.1" async def test_entity_without_progress_support_raising( @@ -602,14 +602,14 @@ async def test_entity_without_progress_support_raising( assert len(events) == 2 assert events[0].data.get("old_state").attributes[ATTR_IN_PROGRESS] is False - assert events[0].data.get("old_state").attributes[ATTR_CURRENT_VERSION] == "1.0.0" + assert events[0].data.get("old_state").attributes[ATTR_INSTALLED_VERSION] == "1.0.0" assert events[0].data.get("new_state").attributes[ATTR_IN_PROGRESS] is True - assert events[0].data.get("new_state").attributes[ATTR_CURRENT_VERSION] == "1.0.0" + assert events[0].data.get("new_state").attributes[ATTR_INSTALLED_VERSION] == "1.0.0" assert events[1].data.get("old_state").attributes[ATTR_IN_PROGRESS] is True - assert events[1].data.get("old_state").attributes[ATTR_CURRENT_VERSION] == "1.0.0" + assert events[1].data.get("old_state").attributes[ATTR_INSTALLED_VERSION] == "1.0.0" assert events[1].data.get("new_state").attributes[ATTR_IN_PROGRESS] is False - assert events[1].data.get("new_state").attributes[ATTR_CURRENT_VERSION] == "1.0.0" + assert events[1].data.get("new_state").attributes[ATTR_INSTALLED_VERSION] == "1.0.0" async def test_restore_state( @@ -638,7 +638,7 @@ async def test_restore_state( state = hass.states.get("update.update_available") assert state assert state.state == STATE_OFF - assert state.attributes[ATTR_CURRENT_VERSION] == "1.0.0" + assert state.attributes[ATTR_INSTALLED_VERSION] == "1.0.0" assert state.attributes[ATTR_LATEST_VERSION] == "1.0.1" assert state.attributes[ATTR_SKIPPED_VERSION] == "1.0.1" diff --git a/tests/components/update/test_recorder.py b/tests/components/update/test_recorder.py index 17ab7445b4b..6d4ec567182 100644 --- a/tests/components/update/test_recorder.py +++ b/tests/components/update/test_recorder.py @@ -6,8 +6,8 @@ from datetime import timedelta from homeassistant.components.recorder.models import StateAttributes, States from homeassistant.components.recorder.util import session_scope from homeassistant.components.update.const import ( - ATTR_CURRENT_VERSION, ATTR_IN_PROGRESS, + ATTR_INSTALLED_VERSION, ATTR_RELEASE_SUMMARY, DOMAIN, ) @@ -52,4 +52,4 @@ async def test_exclude_attributes( for state in states: assert ATTR_IN_PROGRESS not in state.attributes assert ATTR_RELEASE_SUMMARY not in state.attributes - assert ATTR_CURRENT_VERSION in state.attributes + assert ATTR_INSTALLED_VERSION in state.attributes diff --git a/tests/components/update/test_significant_change.py b/tests/components/update/test_significant_change.py index 699d3e60f57..35e601f4789 100644 --- a/tests/components/update/test_significant_change.py +++ b/tests/components/update/test_significant_change.py @@ -1,7 +1,7 @@ """Test the update significant change platform.""" from homeassistant.components.update.const import ( - ATTR_CURRENT_VERSION, ATTR_IN_PROGRESS, + ATTR_INSTALLED_VERSION, ATTR_LATEST_VERSION, ATTR_RELEASE_SUMMARY, ATTR_RELEASE_URL, @@ -23,7 +23,7 @@ async def test_significant_change(hass: HomeAssistant) -> None: assert not async_check_significant_change(hass, STATE_ON, {}, STATE_ON, {}) attrs = { - ATTR_CURRENT_VERSION: "1.0.0", + ATTR_INSTALLED_VERSION: "1.0.0", ATTR_IN_PROGRESS: False, ATTR_LATEST_VERSION: "1.0.1", ATTR_RELEASE_SUMMARY: "Fixes!", @@ -38,7 +38,7 @@ async def test_significant_change(hass: HomeAssistant) -> None: STATE_ON, attrs, STATE_ON, - attrs.copy() | {ATTR_CURRENT_VERSION: "1.0.1"}, + attrs.copy() | {ATTR_INSTALLED_VERSION: "1.0.1"}, ) assert async_check_significant_change( diff --git a/tests/components/wled/test_update.py b/tests/components/wled/test_update.py index fea6180048e..452aeba6a80 100644 --- a/tests/components/wled/test_update.py +++ b/tests/components/wled/test_update.py @@ -11,7 +11,7 @@ from homeassistant.components.update import ( UpdateEntityFeature, ) from homeassistant.components.update.const import ( - ATTR_CURRENT_VERSION, + ATTR_INSTALLED_VERSION, ATTR_LATEST_VERSION, ATTR_RELEASE_SUMMARY, ATTR_RELEASE_URL, @@ -46,7 +46,7 @@ async def test_update_available( assert state assert state.attributes.get(ATTR_DEVICE_CLASS) == UpdateDeviceClass.FIRMWARE assert state.state == STATE_ON - assert state.attributes[ATTR_CURRENT_VERSION] == "0.8.5" + assert state.attributes[ATTR_INSTALLED_VERSION] == "0.8.5" assert state.attributes[ATTR_LATEST_VERSION] == "0.12.0" assert state.attributes[ATTR_RELEASE_SUMMARY] is None assert ( @@ -79,7 +79,7 @@ async def test_update_information_available( assert state assert state.attributes.get(ATTR_DEVICE_CLASS) == UpdateDeviceClass.FIRMWARE assert state.state == STATE_UNKNOWN - assert state.attributes[ATTR_CURRENT_VERSION] is None + assert state.attributes[ATTR_INSTALLED_VERSION] is None assert state.attributes[ATTR_LATEST_VERSION] is None assert state.attributes[ATTR_RELEASE_SUMMARY] is None assert state.attributes[ATTR_RELEASE_URL] is None @@ -110,7 +110,7 @@ async def test_no_update_available( assert state assert state.state == STATE_OFF assert state.attributes.get(ATTR_DEVICE_CLASS) == UpdateDeviceClass.FIRMWARE - assert state.attributes[ATTR_CURRENT_VERSION] == "0.12.0-b2" + assert state.attributes[ATTR_INSTALLED_VERSION] == "0.12.0-b2" assert state.attributes[ATTR_LATEST_VERSION] == "0.12.0-b2" assert state.attributes[ATTR_RELEASE_SUMMARY] is None assert ( @@ -169,7 +169,7 @@ async def test_update_stay_stable( state = hass.states.get("update.wled_rgb_light_firmware") assert state assert state.state == STATE_ON - assert state.attributes[ATTR_CURRENT_VERSION] == "0.8.5" + assert state.attributes[ATTR_INSTALLED_VERSION] == "0.8.5" assert state.attributes[ATTR_LATEST_VERSION] == "0.12.0" await hass.services.async_call( @@ -198,7 +198,7 @@ async def test_update_beta_to_stable( state = hass.states.get("update.wled_rgbw_light_firmware") assert state assert state.state == STATE_ON - assert state.attributes[ATTR_CURRENT_VERSION] == "0.8.6b4" + assert state.attributes[ATTR_INSTALLED_VERSION] == "0.8.6b4" assert state.attributes[ATTR_LATEST_VERSION] == "0.8.6" await hass.services.async_call( @@ -226,7 +226,7 @@ async def test_update_stay_beta( state = hass.states.get("update.wled_rgb_light_firmware") assert state assert state.state == STATE_ON - assert state.attributes[ATTR_CURRENT_VERSION] == "0.8.6b1" + assert state.attributes[ATTR_INSTALLED_VERSION] == "0.8.6b1" assert state.attributes[ATTR_LATEST_VERSION] == "0.8.6b2" await hass.services.async_call( diff --git a/tests/testing_config/custom_components/test/update.py b/tests/testing_config/custom_components/test/update.py index fc5ee31246e..1840f076407 100644 --- a/tests/testing_config/custom_components/test/update.py +++ b/tests/testing_config/custom_components/test/update.py @@ -26,9 +26,9 @@ class MockUpdateEntity(MockEntity, UpdateEntity): return self._handle("auto_update") @property - def current_version(self) -> str | None: - """Version currently in use.""" - return self._handle("current_version") + def installed_version(self) -> str | None: + """Version currently installed and in use.""" + return self._handle("installed_version") @property def in_progress(self) -> bool | int | None: @@ -61,10 +61,10 @@ class MockUpdateEntity(MockEntity, UpdateEntity): _LOGGER.info("Creating backup before installing update") if version is not None: - self._values["current_version"] = version + self._values["installed_version"] = version _LOGGER.info(f"Installed update with version: {version}") else: - self._values["current_version"] = self.latest_version + self._values["installed_version"] = self.latest_version _LOGGER.info("Installed latest update") def release_notes(self) -> str | None: @@ -83,28 +83,28 @@ def init(empty=False): MockUpdateEntity( name="No Update", unique_id="no_update", - current_version="1.0.0", + installed_version="1.0.0", latest_version="1.0.0", supported_features=UpdateEntityFeature.INSTALL, ), MockUpdateEntity( name="Update Available", unique_id="update_available", - current_version="1.0.0", + installed_version="1.0.0", latest_version="1.0.1", supported_features=UpdateEntityFeature.INSTALL, ), MockUpdateEntity( name="Update Unknown", unique_id="update_unknown", - current_version="1.0.0", + installed_version="1.0.0", latest_version=None, supported_features=UpdateEntityFeature.INSTALL, ), MockUpdateEntity( name="Update Specific Version", unique_id="update_specific_version", - current_version="1.0.0", + installed_version="1.0.0", latest_version="1.0.0", supported_features=UpdateEntityFeature.INSTALL | UpdateEntityFeature.SPECIFIC_VERSION, @@ -112,7 +112,7 @@ def init(empty=False): MockUpdateEntity( name="Update Backup", unique_id="update_backup", - current_version="1.0.0", + installed_version="1.0.0", latest_version="1.0.1", supported_features=UpdateEntityFeature.INSTALL | UpdateEntityFeature.SPECIFIC_VERSION @@ -121,7 +121,7 @@ def init(empty=False): MockUpdateEntity( name="Update Already in Progress", unique_id="update_already_in_progres", - current_version="1.0.0", + installed_version="1.0.0", latest_version="1.0.1", in_progress=50, supported_features=UpdateEntityFeature.INSTALL @@ -130,20 +130,20 @@ def init(empty=False): MockUpdateEntity( name="Update No Install", unique_id="no_install", - current_version="1.0.0", + installed_version="1.0.0", latest_version="1.0.1", ), MockUpdateEntity( name="Update with release notes", unique_id="with_release_notes", - current_version="1.0.0", + installed_version="1.0.0", latest_version="1.0.1", supported_features=UpdateEntityFeature.RELEASE_NOTES, ), MockUpdateEntity( name="Update with auto update", unique_id="with_auto_update", - current_version="1.0.0", + installed_version="1.0.0", latest_version="1.0.1", auto_update=True, supported_features=UpdateEntityFeature.INSTALL, From 5df7882ce470b2ff07aa2c1c3c6c8d0950ecd6a9 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk <11290930+bouwew@users.noreply.github.com> Date: Fri, 1 Apr 2022 20:53:09 +0200 Subject: [PATCH 065/238] Remove use of HVAC_MODE_OFF in plugwise climate, it's not implemented (#69094) --- homeassistant/components/plugwise/climate.py | 5 ++--- tests/components/plugwise/test_climate.py | 4 ---- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/homeassistant/components/plugwise/climate.py b/homeassistant/components/plugwise/climate.py index 12a203b6896..1e4b972e4d0 100644 --- a/homeassistant/components/plugwise/climate.py +++ b/homeassistant/components/plugwise/climate.py @@ -12,7 +12,6 @@ from homeassistant.components.climate.const import ( HVAC_MODE_AUTO, HVAC_MODE_COOL, HVAC_MODE_HEAT, - HVAC_MODE_OFF, SUPPORT_PRESET_MODE, SUPPORT_TARGET_TEMPERATURE, ) @@ -64,7 +63,7 @@ class PlugwiseClimateEntity(PlugwiseEntity, ClimateEntity): self._attr_preset_modes = list(presets) # Determine hvac modes and current hvac mode - self._attr_hvac_modes = [HVAC_MODE_HEAT, HVAC_MODE_OFF] + self._attr_hvac_modes = [HVAC_MODE_HEAT] if self.coordinator.data.gateway.get("cooling_present"): self._attr_hvac_modes.append(HVAC_MODE_COOL) if self.device.get("available_schedules") != ["None"]: @@ -90,7 +89,7 @@ class PlugwiseClimateEntity(PlugwiseEntity, ClimateEntity): def hvac_mode(self) -> str: """Return HVAC operation ie. heat, cool mode.""" if (mode := self.device.get("mode")) is None or mode not in self.hvac_modes: - return HVAC_MODE_OFF + return HVAC_MODE_HEAT return mode @property diff --git a/tests/components/plugwise/test_climate.py b/tests/components/plugwise/test_climate.py index a52e4a955a6..a695906c0af 100644 --- a/tests/components/plugwise/test_climate.py +++ b/tests/components/plugwise/test_climate.py @@ -9,7 +9,6 @@ from homeassistant.components.climate.const import ( HVAC_MODE_AUTO, HVAC_MODE_COOL, HVAC_MODE_HEAT, - HVAC_MODE_OFF, ) from homeassistant.core import HomeAssistant from homeassistant.exceptions import HomeAssistantError @@ -26,7 +25,6 @@ async def test_adam_climate_entity_attributes( assert state assert state.attributes["hvac_modes"] == [ HVAC_MODE_HEAT, - HVAC_MODE_OFF, HVAC_MODE_AUTO, ] @@ -47,7 +45,6 @@ async def test_adam_climate_entity_attributes( assert state.attributes["hvac_modes"] == [ HVAC_MODE_HEAT, - HVAC_MODE_OFF, HVAC_MODE_AUTO, ] @@ -161,7 +158,6 @@ async def test_anna_climate_entity_attributes( assert state.state == HVAC_MODE_HEAT assert state.attributes["hvac_modes"] == [ HVAC_MODE_HEAT, - HVAC_MODE_OFF, HVAC_MODE_COOL, ] assert "no_frost" in state.attributes["preset_modes"] From 328f479bc44d027fe7c7ad70bdec5d3c043ff1b1 Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Fri, 1 Apr 2022 20:26:18 +0200 Subject: [PATCH 066/238] Update frontend to 20220401.0 (#69095) --- homeassistant/components/frontend/manifest.json | 2 +- homeassistant/package_constraints.txt | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/frontend/manifest.json b/homeassistant/components/frontend/manifest.json index 06b46f97fb7..43bea9503c8 100644 --- a/homeassistant/components/frontend/manifest.json +++ b/homeassistant/components/frontend/manifest.json @@ -2,7 +2,7 @@ "domain": "frontend", "name": "Home Assistant Frontend", "documentation": "https://www.home-assistant.io/integrations/frontend", - "requirements": ["home-assistant-frontend==20220330.0"], + "requirements": ["home-assistant-frontend==20220401.0"], "dependencies": [ "api", "auth", diff --git a/homeassistant/package_constraints.txt b/homeassistant/package_constraints.txt index 9e0f7d5ea23..251c68ae698 100644 --- a/homeassistant/package_constraints.txt +++ b/homeassistant/package_constraints.txt @@ -15,7 +15,7 @@ ciso8601==2.2.0 cryptography==35.0.0 fnvhash==0.1.0 hass-nabucasa==0.54.0 -home-assistant-frontend==20220330.0 +home-assistant-frontend==20220401.0 httpx==0.22.0 ifaddr==0.1.7 jinja2==3.1.0 diff --git a/requirements_all.txt b/requirements_all.txt index 97f167c3b45..e5153a76906 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -812,7 +812,7 @@ hole==0.7.0 holidays==0.13 # homeassistant.components.frontend -home-assistant-frontend==20220330.0 +home-assistant-frontend==20220401.0 # homeassistant.components.home_connect homeconnect==0.7.0 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 7255aa0d5e2..8ae2c8345a9 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -567,7 +567,7 @@ hole==0.7.0 holidays==0.13 # homeassistant.components.frontend -home-assistant-frontend==20220330.0 +home-assistant-frontend==20220401.0 # homeassistant.components.home_connect homeconnect==0.7.0 From c2c397527ed50d3d429ce844bde17d4908980bba Mon Sep 17 00:00:00 2001 From: puddly <32534428+puddly@users.noreply.github.com> Date: Sat, 2 Apr 2022 04:23:22 -0400 Subject: [PATCH 067/238] Bump ZHA dependency zigpy-deconz from 0.14.0 to 0.15.0 (#69099) --- homeassistant/components/zha/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/zha/manifest.json b/homeassistant/components/zha/manifest.json index 6d47535b765..fcf6a126963 100644 --- a/homeassistant/components/zha/manifest.json +++ b/homeassistant/components/zha/manifest.json @@ -8,7 +8,7 @@ "pyserial==3.5", "pyserial-asyncio==0.6", "zha-quirks==0.0.69", - "zigpy-deconz==0.14.0", + "zigpy-deconz==0.15.0", "zigpy==0.44.1", "zigpy-xbee==0.14.0", "zigpy-zigate==0.8.0", diff --git a/requirements_all.txt b/requirements_all.txt index e5153a76906..a588a7cab40 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -2479,7 +2479,7 @@ zhong_hong_hvac==1.0.9 ziggo-mediabox-xl==1.1.0 # homeassistant.components.zha -zigpy-deconz==0.14.0 +zigpy-deconz==0.15.0 # homeassistant.components.zha zigpy-xbee==0.14.0 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 8ae2c8345a9..18d5398c04a 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -1598,7 +1598,7 @@ zeroconf==0.38.4 zha-quirks==0.0.69 # homeassistant.components.zha -zigpy-deconz==0.14.0 +zigpy-deconz==0.15.0 # homeassistant.components.zha zigpy-xbee==0.14.0 From 51e8ddbd273cbcc524cdbdcc24c2dd5644b1eca4 Mon Sep 17 00:00:00 2001 From: Glenn Waters Date: Sat, 2 Apr 2022 03:44:40 -0400 Subject: [PATCH 068/238] Environment Canada: Fix for when temperature is zero (#69101) --- .../components/environment_canada/weather.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/homeassistant/components/environment_canada/weather.py b/homeassistant/components/environment_canada/weather.py index 4d226261b94..1b81750fb47 100644 --- a/homeassistant/components/environment_canada/weather.py +++ b/homeassistant/components/environment_canada/weather.py @@ -80,12 +80,16 @@ class ECWeather(CoordinatorEntity, WeatherEntity): @property def temperature(self): """Return the temperature.""" - if self.ec_data.conditions.get("temperature", {}).get("value"): - return float(self.ec_data.conditions["temperature"]["value"]) - if self.ec_data.hourly_forecasts and self.ec_data.hourly_forecasts[0].get( - "temperature" + if ( + temperature := self.ec_data.conditions.get("temperature", {}).get("value") + ) is not None: + return float(temperature) + if ( + self.ec_data.hourly_forecasts + and (temperature := self.ec_data.hourly_forecasts[0].get("temperature")) + is not None ): - return float(self.ec_data.hourly_forecasts[0]["temperature"]) + return float(temperature) return None @property From e341e55e88d30ced7a74a367527f1cda15591ba1 Mon Sep 17 00:00:00 2001 From: Keilin Bickar Date: Sat, 2 Apr 2022 04:44:16 -0400 Subject: [PATCH 069/238] Bump asyncsleepiq to 1.2.3 (#69104) --- .../components/sleepiq/manifest.json | 2 +- homeassistant/components/sleepiq/select.py | 15 ++++++------- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- tests/components/sleepiq/conftest.py | 21 ++++++++++--------- 5 files changed, 20 insertions(+), 22 deletions(-) diff --git a/homeassistant/components/sleepiq/manifest.json b/homeassistant/components/sleepiq/manifest.json index 16881506cb8..cadfe126ecf 100644 --- a/homeassistant/components/sleepiq/manifest.json +++ b/homeassistant/components/sleepiq/manifest.json @@ -3,7 +3,7 @@ "name": "SleepIQ", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/sleepiq", - "requirements": ["asyncsleepiq==1.2.1"], + "requirements": ["asyncsleepiq==1.2.3"], "codeowners": ["@mfugate1", "@kbickar"], "dhcp": [ { diff --git a/homeassistant/components/sleepiq/select.py b/homeassistant/components/sleepiq/select.py index 711f228d7f2..0cbf1671e2b 100644 --- a/homeassistant/components/sleepiq/select.py +++ b/homeassistant/components/sleepiq/select.py @@ -1,7 +1,7 @@ """Support for SleepIQ foundation preset selection.""" from __future__ import annotations -from asyncsleepiq import BED_PRESETS, SleepIQBed, SleepIQPreset +from asyncsleepiq import BED_PRESETS, Side, SleepIQBed, SleepIQPreset from homeassistant.components.select import SelectEntity from homeassistant.config_entries import ConfigEntry @@ -39,14 +39,11 @@ class SleepIQSelectEntity(SleepIQBedEntity, SelectEntity): """Initialize the select entity.""" self.preset = preset - if preset.side: - self._attr_name = ( - f"SleepNumber {bed.name} Foundation Preset {preset.side_full}" - ) - self._attr_unique_id = f"{bed.id}_preset_{preset.side}" - else: - self._attr_name = f"SleepNumber {bed.name} Foundation Preset" - self._attr_unique_id = f"{bed.id}_preset" + self._attr_name = f"SleepNumber {bed.name} Foundation Preset" + self._attr_unique_id = f"{bed.id}_preset" + if preset.side != Side.NONE: + self._attr_name += f" {preset.side_full}" + self._attr_unique_id += f"_{preset.side}" super().__init__(coordinator, bed) self._async_update_attrs() diff --git a/requirements_all.txt b/requirements_all.txt index a588a7cab40..bb482e5865d 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -336,7 +336,7 @@ async-upnp-client==0.27.0 asyncpysupla==0.0.5 # homeassistant.components.sleepiq -asyncsleepiq==1.2.1 +asyncsleepiq==1.2.3 # homeassistant.components.aten_pe atenpdu==0.3.2 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 18d5398c04a..52b2f962f09 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -266,7 +266,7 @@ arcam-fmj==0.12.0 async-upnp-client==0.27.0 # homeassistant.components.sleepiq -asyncsleepiq==1.2.1 +asyncsleepiq==1.2.3 # homeassistant.components.aurora auroranoaa==0.0.2 diff --git a/tests/components/sleepiq/conftest.py b/tests/components/sleepiq/conftest.py index 4408f41035b..23c42ee7f66 100644 --- a/tests/components/sleepiq/conftest.py +++ b/tests/components/sleepiq/conftest.py @@ -5,6 +5,7 @@ from collections.abc import Generator from unittest.mock import MagicMock, create_autospec, patch from asyncsleepiq import ( + Side, SleepIQActuator, SleepIQBed, SleepIQFoundation, @@ -52,14 +53,14 @@ def mock_bed() -> MagicMock: sleeper_r = create_autospec(SleepIQSleeper) bed.sleepers = [sleeper_l, sleeper_r] - sleeper_l.side = "L" + sleeper_l.side = Side.LEFT sleeper_l.name = SLEEPER_L_NAME sleeper_l.in_bed = True sleeper_l.sleep_number = 40 sleeper_l.pressure = 1000 sleeper_l.sleeper_id = SLEEPER_L_ID - sleeper_r.side = "R" + sleeper_r.side = Side.RIGHT sleeper_r.name = SLEEPER_R_NAME sleeper_r.in_bed = False sleeper_r.sleep_number = 80 @@ -91,13 +92,13 @@ def mock_asyncsleepiq_single_foundation( actuator_f = create_autospec(SleepIQActuator) mock_bed.foundation.actuators = [actuator_h, actuator_f] - actuator_h.side = "R" + actuator_h.side = Side.NONE actuator_h.side_full = "Right" actuator_h.actuator = "H" actuator_h.actuator_full = "Head" actuator_h.position = 60 - actuator_f.side = None + actuator_f.side = Side.NONE actuator_f.actuator = "F" actuator_f.actuator_full = "Foot" actuator_f.position = 10 @@ -106,8 +107,8 @@ def mock_asyncsleepiq_single_foundation( mock_bed.foundation.presets = [preset] preset.preset = PRESET_R_STATE - preset.side = None - preset.side_full = None + preset.side = Side.NONE + preset.side_full = "Right" yield client @@ -123,13 +124,13 @@ def mock_asyncsleepiq(mock_bed: MagicMock) -> Generator[MagicMock, None, None]: actuator_f = create_autospec(SleepIQActuator) mock_bed.foundation.actuators = [actuator_h_r, actuator_h_l, actuator_f] - actuator_h_r.side = "R" + actuator_h_r.side = Side.RIGHT actuator_h_r.side_full = "Right" actuator_h_r.actuator = "H" actuator_h_r.actuator_full = "Head" actuator_h_r.position = 60 - actuator_h_l.side = "L" + actuator_h_l.side = Side.LEFT actuator_h_l.side_full = "Left" actuator_h_l.actuator = "H" actuator_h_l.actuator_full = "Head" @@ -145,11 +146,11 @@ def mock_asyncsleepiq(mock_bed: MagicMock) -> Generator[MagicMock, None, None]: mock_bed.foundation.presets = [preset_l, preset_r] preset_l.preset = PRESET_L_STATE - preset_l.side = "L" + preset_l.side = Side.LEFT preset_l.side_full = "Left" preset_r.preset = PRESET_R_STATE - preset_r.side = "R" + preset_r.side = Side.RIGHT preset_r.side_full = "Right" yield client From 691eac7a7fe2df935e36bc871ac577e02510c65f Mon Sep 17 00:00:00 2001 From: Raman Gupta <7243222+raman325@users.noreply.github.com> Date: Sat, 2 Apr 2022 03:36:56 -0400 Subject: [PATCH 070/238] Fix unit prefixes for derivative and integration (#69109) --- homeassistant/components/derivative/config_flow.py | 5 +++-- homeassistant/components/integration/config_flow.py | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/derivative/config_flow.py b/homeassistant/components/derivative/config_flow.py index fe6b99c3eca..6249e9fd1cc 100644 --- a/homeassistant/components/derivative/config_flow.py +++ b/homeassistant/components/derivative/config_flow.py @@ -37,8 +37,9 @@ UNIT_PREFIXES = [ {"value": "m", "label": "m (milli)"}, {"value": "k", "label": "k (kilo)"}, {"value": "M", "label": "M (mega)"}, - {"value": "G", "label": "T (tera)"}, - {"value": "T", "label": "P (peta)"}, + {"value": "G", "label": "G (giga)"}, + {"value": "T", "label": "T (tera)"}, + {"value": "P", "label": "P (peta)"}, ] TIME_UNITS = [ {"value": TIME_SECONDS, "label": "Seconds"}, diff --git a/homeassistant/components/integration/config_flow.py b/homeassistant/components/integration/config_flow.py index c220327e983..cd4f8a11fbf 100644 --- a/homeassistant/components/integration/config_flow.py +++ b/homeassistant/components/integration/config_flow.py @@ -37,8 +37,9 @@ UNIT_PREFIXES = [ {"value": "none", "label": "none"}, {"value": "k", "label": "k (kilo)"}, {"value": "M", "label": "M (mega)"}, - {"value": "G", "label": "T (tera)"}, - {"value": "T", "label": "P (peta)"}, + {"value": "G", "label": "G (giga)"}, + {"value": "T", "label": "T (tera)"}, + {"value": "P", "label": "P (peta)"}, ] TIME_UNITS = [ {"value": TIME_SECONDS, "label": "s (seconds)"}, From c7f807cf3303c41c4fdad3b5de5724197729d72a Mon Sep 17 00:00:00 2001 From: Marcel van der Veldt Date: Sat, 2 Apr 2022 09:44:05 +0200 Subject: [PATCH 071/238] Adjust check for orphaned Hue device entries for grouped lights (#69110) Co-authored-by: Paulus Schoutsen --- homeassistant/components/hue/v2/device.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/homeassistant/components/hue/v2/device.py b/homeassistant/components/hue/v2/device.py index 64bdcc7a4f2..c3deee40023 100644 --- a/homeassistant/components/hue/v2/device.py +++ b/homeassistant/components/hue/v2/device.py @@ -81,6 +81,10 @@ async def async_setup_devices(bridge: "HueBridge"): dev_reg, entry.entry_id ): if device not in known_devices: + # handle case where a virtual device was created for a Hue group + hue_dev_id = next(x[1] for x in device.identifiers if x[0] == DOMAIN) + if hue_dev_id in api.groups: + continue dev_reg.async_remove_device(device.id) # add listener for updates on Hue devices controller From 9327938dcc1928d9e1d017b9d0cc2b520ba19ba0 Mon Sep 17 00:00:00 2001 From: Marcel van der Veldt Date: Sat, 2 Apr 2022 09:14:56 +0200 Subject: [PATCH 072/238] Allow lowercase none for effect value in Hue lights (#69111) --- homeassistant/components/hue/v2/light.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/components/hue/v2/light.py b/homeassistant/components/hue/v2/light.py index 5b6bb4ed82c..af3dfa80ffc 100644 --- a/homeassistant/components/hue/v2/light.py +++ b/homeassistant/components/hue/v2/light.py @@ -194,7 +194,7 @@ class HueLight(HueBaseEntity, LightEntity): brightness = normalize_hue_brightness(kwargs.get(ATTR_BRIGHTNESS)) flash = kwargs.get(ATTR_FLASH) effect = effect_str = kwargs.get(ATTR_EFFECT) - if effect_str == EFFECT_NONE: + if effect_str in (EFFECT_NONE, EFFECT_NONE.lower()): effect = EffectStatus.NO_EFFECT elif effect_str is not None: # work out if we got a regular effect or timed effect From c72db40082278d9fd027235956978f5827622f87 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Sat, 2 Apr 2022 09:38:10 +0200 Subject: [PATCH 073/238] Bump num of conflicts in pip check (#69112) --- script/pip_check | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/script/pip_check b/script/pip_check index f29ea5a5dd0..6f48ce15bb1 100755 --- a/script/pip_check +++ b/script/pip_check @@ -3,7 +3,7 @@ PIP_CACHE=$1 # Number of existing dependency conflicts # Update if a PR resolve one! -DEPENDENCY_CONFLICTS=6 +DEPENDENCY_CONFLICTS=7 PIP_CHECK=$(pip check --cache-dir=$PIP_CACHE) LINE_COUNT=$(echo "$PIP_CHECK" | wc -l) From c1c829951194572508fbc656eabf1ff0fc134740 Mon Sep 17 00:00:00 2001 From: Raman Gupta <7243222+raman325@users.noreply.github.com> Date: Sat, 2 Apr 2022 03:42:19 -0400 Subject: [PATCH 074/238] Fix kodi log spamming (#69113) --- homeassistant/components/kodi/media_player.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/kodi/media_player.py b/homeassistant/components/kodi/media_player.py index a07ee14137a..2de2c277189 100644 --- a/homeassistant/components/kodi/media_player.py +++ b/homeassistant/components/kodi/media_player.py @@ -321,7 +321,6 @@ class KodiEntity(MediaPlayerEntity): self._app_properties = {} self._media_position_updated_at = None self._media_position = None - self._connect_error = False @property def _kodi_is_off(self): @@ -447,8 +446,9 @@ class KodiEntity(MediaPlayerEntity): except (jsonrpc_base.jsonrpc.TransportError, CannotConnectError): if not self._connect_error: self._connect_error = True - _LOGGER.error("Unable to connect to Kodi via websocket") + _LOGGER.warning("Unable to connect to Kodi via websocket") await self._clear_connection(False) + self._connect_error = False async def _ping(self): try: @@ -456,8 +456,9 @@ class KodiEntity(MediaPlayerEntity): except (jsonrpc_base.jsonrpc.TransportError, CannotConnectError): if not self._connect_error: self._connect_error = True - _LOGGER.error("Unable to ping Kodi via websocket") + _LOGGER.warning("Unable to ping Kodi via websocket") await self._clear_connection() + self._connect_error = False async def _async_connect_websocket_if_disconnected(self, *_): """Reconnect the websocket if it fails.""" From dd2c2eb97411dfe7297620f2110cdfd9ec41930f Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Sat, 2 Apr 2022 10:43:50 +0200 Subject: [PATCH 075/238] Update wled to 0.13.2 (#69116) --- homeassistant/components/wled/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/wled/manifest.json b/homeassistant/components/wled/manifest.json index 6b72bbf905c..668950b9326 100644 --- a/homeassistant/components/wled/manifest.json +++ b/homeassistant/components/wled/manifest.json @@ -3,7 +3,7 @@ "name": "WLED", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/wled", - "requirements": ["wled==0.13.1"], + "requirements": ["wled==0.13.2"], "zeroconf": ["_wled._tcp.local."], "codeowners": ["@frenck"], "quality_scale": "platinum", diff --git a/requirements_all.txt b/requirements_all.txt index bb482e5865d..5928f3bc3b7 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -2420,7 +2420,7 @@ wirelesstagpy==0.8.1 withings-api==2.4.0 # homeassistant.components.wled -wled==0.13.1 +wled==0.13.2 # homeassistant.components.wolflink wolf_smartset==0.1.11 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 52b2f962f09..e5f9741f203 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -1560,7 +1560,7 @@ wiffi==1.1.0 withings-api==2.4.0 # homeassistant.components.wled -wled==0.13.1 +wled==0.13.2 # homeassistant.components.wolflink wolf_smartset==0.1.11 From b539700e454063b3a8554ea76de84597ca4934d9 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Sat, 2 Apr 2022 11:40:11 +0200 Subject: [PATCH 076/238] Bumped version to 2022.4.0b3 --- homeassistant/const.py | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/const.py b/homeassistant/const.py index 705bfebfc61..ae2db813d19 100644 --- a/homeassistant/const.py +++ b/homeassistant/const.py @@ -7,7 +7,7 @@ from .backports.enum import StrEnum MAJOR_VERSION: Final = 2022 MINOR_VERSION: Final = 4 -PATCH_VERSION: Final = "0b2" +PATCH_VERSION: Final = "0b3" __short_version__: Final = f"{MAJOR_VERSION}.{MINOR_VERSION}" __version__: Final = f"{__short_version__}.{PATCH_VERSION}" REQUIRED_PYTHON_VER: Final[tuple[int, int, int]] = (3, 9, 0) diff --git a/setup.cfg b/setup.cfg index c18402325ec..022064c5d5f 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = homeassistant -version = 2022.4.0b2 +version = 2022.4.0b3 author = The Home Assistant Authors author_email = hello@home-assistant.io license = Apache-2.0 From 53107e4f2c50c0d776d6ceb424b6189f1a5206a9 Mon Sep 17 00:00:00 2001 From: Wictor Date: Sun, 3 Apr 2022 05:39:14 +0200 Subject: [PATCH 077/238] Refactor telegram_bot polling/webhooks platforms and add tests (#66433) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Pär Berge --- .../components/telegram_bot/__init__.py | 227 ++++++++---------- .../components/telegram_bot/polling.py | 79 ++---- .../components/telegram_bot/webhooks.py | 151 +++++++----- requirements_test_all.txt | 6 + tests/components/telegram_bot/__init__.py | 1 + tests/components/telegram_bot/conftest.py | 187 +++++++++++++++ .../telegram_bot/test_telegram_bot.py | 112 +++++++++ 7 files changed, 514 insertions(+), 249 deletions(-) create mode 100644 tests/components/telegram_bot/__init__.py create mode 100644 tests/components/telegram_bot/conftest.py create mode 100644 tests/components/telegram_bot/test_telegram_bot.py diff --git a/homeassistant/components/telegram_bot/__init__.py b/homeassistant/components/telegram_bot/__init__.py index cebdd4f4573..29dbabcbbfe 100644 --- a/homeassistant/components/telegram_bot/__init__.py +++ b/homeassistant/components/telegram_bot/__init__.py @@ -1,20 +1,27 @@ """Support to send and receive Telegram messages.""" +from __future__ import annotations + from functools import partial import importlib import io from ipaddress import ip_network import logging +from typing import Any import requests from requests.auth import HTTPBasicAuth, HTTPDigestAuth from telegram import ( Bot, + CallbackQuery, InlineKeyboardButton, InlineKeyboardMarkup, + Message, ReplyKeyboardMarkup, ReplyKeyboardRemove, + Update, ) from telegram.error import TelegramError +from telegram.ext import CallbackContext, Filters from telegram.parsemode import ParseMode from telegram.utils.request import Request import voluptuous as vol @@ -311,14 +318,15 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: return False for p_config in config[DOMAIN]: - + # Each platform config gets its own bot + bot = initialize_bot(p_config) p_type = p_config.get(CONF_PLATFORM) platform = importlib.import_module(f".{p_config[CONF_PLATFORM]}", __name__) _LOGGER.info("Setting up %s.%s", DOMAIN, p_type) try: - receiver_service = await platform.async_setup_platform(hass, p_config) + receiver_service = await platform.async_setup_platform(hass, bot, p_config) if receiver_service is False: _LOGGER.error("Failed to initialize Telegram bot %s", p_type) return False @@ -327,7 +335,6 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: _LOGGER.exception("Error setting up platform %s", p_type) return False - bot = initialize_bot(p_config) notify_service = TelegramNotificationService( hass, bot, p_config.get(CONF_ALLOWED_CHAT_IDS), p_config.get(ATTR_PARSER) ) @@ -416,7 +423,6 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: def initialize_bot(p_config): """Initialize telegram bot with proxy support.""" - api_key = p_config.get(CONF_API_KEY) proxy_url = p_config.get(CONF_PROXY_URL) proxy_params = p_config.get(CONF_PROXY_PARAMS) @@ -435,7 +441,6 @@ class TelegramNotificationService: def __init__(self, hass, bot, allowed_chat_ids, parser): """Initialize the service.""" - self.allowed_chat_ids = allowed_chat_ids self._default_user = self.allowed_chat_ids[0] self._last_message_id = {user: None for user in self.allowed_chat_ids} @@ -495,7 +500,6 @@ class TelegramNotificationService: - a string like: `/cmd1, /cmd2, /cmd3` - or a string like: `text_b1:/cmd1, text_b2:/cmd2` """ - buttons = [] if isinstance(row_keyboard, str): for key in row_keyboard.split(","): @@ -566,7 +570,6 @@ class TelegramNotificationService: def _send_msg(self, func_send, msg_error, message_tag, *args_msg, **kwargs_msg): """Send one message.""" - try: out = func_send(*args_msg, **kwargs_msg) if not isinstance(out, bool) and hasattr(out, ATTR_MESSAGEID): @@ -857,131 +860,99 @@ class TelegramNotificationService: class BaseTelegramBotEntity: """The base class for the telegram bot.""" - def __init__(self, hass, allowed_chat_ids): + def __init__(self, hass, config): """Initialize the bot base class.""" - self.allowed_chat_ids = allowed_chat_ids + self.allowed_chat_ids = config[CONF_ALLOWED_CHAT_IDS] self.hass = hass - def _get_message_data(self, msg_data): - """Return boolean msg_data_is_ok and dict msg_data.""" - if not msg_data: - return False, None - bad_fields = ( - "text" not in msg_data and "data" not in msg_data and "chat" not in msg_data - ) - if bad_fields or "from" not in msg_data: - # Message is not correct. - _LOGGER.error("Incoming message does not have required data (%s)", msg_data) - return False, None + def handle_update(self, update: Update, context: CallbackContext) -> bool: + """Handle updates from bot dispatcher set up by the respective platform.""" + _LOGGER.debug("Handling update %s", update) + if not self.authorize_update(update): + return False - if ( - msg_data["from"].get("id") not in self.allowed_chat_ids - and msg_data["message"]["chat"].get("id") not in self.allowed_chat_ids - ): - # Neither from id nor chat id was in allowed_chat_ids, - # origin is not allowed. - _LOGGER.error("Incoming message is not allowed (%s)", msg_data) - return True, None - - data = { - ATTR_USER_ID: msg_data["from"]["id"], - ATTR_FROM_FIRST: msg_data["from"]["first_name"], - } - if "message_id" in msg_data: - data[ATTR_MSGID] = msg_data["message_id"] - if "last_name" in msg_data["from"]: - data[ATTR_FROM_LAST] = msg_data["from"]["last_name"] - if "chat" in msg_data: - data[ATTR_CHAT_ID] = msg_data["chat"]["id"] - elif ATTR_MESSAGE in msg_data and "chat" in msg_data[ATTR_MESSAGE]: - data[ATTR_CHAT_ID] = msg_data[ATTR_MESSAGE]["chat"]["id"] - - return True, data - - def _get_channel_post_data(self, msg_data): - """Return boolean msg_data_is_ok and dict msg_data.""" - if not msg_data: - return False, None - - if "sender_chat" in msg_data and "chat" in msg_data and "text" in msg_data: - if ( - msg_data["sender_chat"].get("id") not in self.allowed_chat_ids - and msg_data["chat"].get("id") not in self.allowed_chat_ids - ): - # Neither sender_chat id nor chat id was in allowed_chat_ids, - # origin is not allowed. - _LOGGER.error("Incoming message is not allowed (%s)", msg_data) - return True, None - - data = { - ATTR_MSGID: msg_data["message_id"], - ATTR_CHAT_ID: msg_data["chat"]["id"], - ATTR_TEXT: msg_data["text"], - } - return True, data - - _LOGGER.error("Incoming message does not have required data (%s)", msg_data) - return False, None - - def process_message(self, data): - """Check for basic message rules and fire an event if message is ok.""" - if ATTR_MSG in data or ATTR_EDITED_MSG in data: - event = EVENT_TELEGRAM_COMMAND - if ATTR_MSG in data: - data = data.get(ATTR_MSG) - else: - data = data.get(ATTR_EDITED_MSG) - message_ok, event_data = self._get_message_data(data) - if event_data is None: - return message_ok - - if ATTR_MSGID in data: - event_data[ATTR_MSGID] = data[ATTR_MSGID] - - if "text" in data: - if data["text"][0] == "/": - pieces = data["text"].split(" ") - event_data[ATTR_COMMAND] = pieces[0] - event_data[ATTR_ARGS] = pieces[1:] - else: - event_data[ATTR_TEXT] = data["text"] - event = EVENT_TELEGRAM_TEXT - else: - _LOGGER.warning("Message without text data received: %s", data) - event_data[ATTR_TEXT] = str(data) - event = EVENT_TELEGRAM_TEXT - - self.hass.bus.async_fire(event, event_data) - return True - if ATTR_CALLBACK_QUERY in data: - event = EVENT_TELEGRAM_CALLBACK - data = data.get(ATTR_CALLBACK_QUERY) - message_ok, event_data = self._get_message_data(data) - if event_data is None: - return message_ok - - query_data = event_data[ATTR_DATA] = data[ATTR_DATA] - - if query_data[0] == "/": - pieces = query_data.split(" ") - event_data[ATTR_COMMAND] = pieces[0] - event_data[ATTR_ARGS] = pieces[1:] - - event_data[ATTR_MSG] = data[ATTR_MSG] - event_data[ATTR_CHAT_INSTANCE] = data[ATTR_CHAT_INSTANCE] - event_data[ATTR_MSGID] = data[ATTR_MSGID] - - self.hass.bus.async_fire(event, event_data) - return True - if ATTR_CHANNEL_POST in data: - event = EVENT_TELEGRAM_TEXT - data = data.get(ATTR_CHANNEL_POST) - message_ok, event_data = self._get_channel_post_data(data) - if event_data is None: - return message_ok - - self.hass.bus.async_fire(event, event_data) + # establish event type: text, command or callback_query + if update.callback_query: + # NOTE: Check for callback query first since effective message will be populated with the message + # in .callback_query (python-telegram-bot docs are wrong) + event_type, event_data = self._get_callback_query_event_data( + update.callback_query + ) + elif update.effective_message: + event_type, event_data = self._get_message_event_data( + update.effective_message + ) + else: + _LOGGER.warning("Unhandled update: %s", update) return True - _LOGGER.warning("Message with unknown data received: %s", data) + _LOGGER.debug("Firing event %s: %s", event_type, event_data) + self.hass.bus.fire(event_type, event_data) return True + + @staticmethod + def _get_command_event_data(command_text: str) -> dict[str, str | list]: + if not command_text.startswith("/"): + return {} + command_parts = command_text.split() + command = command_parts[0] + args = command_parts[1:] + return {ATTR_COMMAND: command, ATTR_ARGS: args} + + def _get_message_event_data(self, message: Message) -> tuple[str, dict[str, Any]]: + event_data: dict[str, Any] = { + ATTR_MSGID: message.message_id, + ATTR_CHAT_ID: message.chat.id, + } + if Filters.command.filter(message): + # This is a command message - set event type to command and split data into command and args + event_type = EVENT_TELEGRAM_COMMAND + event_data.update(self._get_command_event_data(message.text)) + else: + event_type = EVENT_TELEGRAM_TEXT + event_data[ATTR_TEXT] = message.text + + if message.from_user: + event_data.update( + { + ATTR_USER_ID: message.from_user.id, + ATTR_FROM_FIRST: message.from_user.first_name, + ATTR_FROM_LAST: message.from_user.last_name, + } + ) + + return event_type, event_data + + def _get_callback_query_event_data( + self, callback_query: CallbackQuery + ) -> tuple[str, dict[str, Any]]: + event_type = EVENT_TELEGRAM_CALLBACK + event_data: dict[str, Any] = { + ATTR_MSGID: callback_query.id, + ATTR_CHAT_INSTANCE: callback_query.chat_instance, + ATTR_DATA: callback_query.data, + ATTR_MSG: None, + ATTR_CHAT_ID: None, + } + if callback_query.message: + event_data[ATTR_MSG] = callback_query.message.to_dict() + event_data[ATTR_CHAT_ID] = callback_query.message.chat.id + + # Split data into command and args if possible + event_data.update(self._get_command_event_data(callback_query.data)) + + return event_type, event_data + + def authorize_update(self, update: Update) -> bool: + """Make sure either user or chat is in allowed_chat_ids.""" + from_user = update.effective_user.id if update.effective_user else None + from_chat = update.effective_chat.id if update.effective_chat else None + if from_user in self.allowed_chat_ids or from_chat in self.allowed_chat_ids: + return True + _LOGGER.error( + "Unauthorized update - neither user id %s nor chat id %s is in allowed chats: %s", + from_user, + from_chat, + self.allowed_chat_ids, + ) + return False diff --git a/homeassistant/components/telegram_bot/polling.py b/homeassistant/components/telegram_bot/polling.py index b617826411d..4c0de6ade1e 100644 --- a/homeassistant/components/telegram_bot/polling.py +++ b/homeassistant/components/telegram_bot/polling.py @@ -3,31 +3,21 @@ import logging from telegram import Update from telegram.error import NetworkError, RetryAfter, TelegramError, TimedOut -from telegram.ext import CallbackContext, Dispatcher, Handler, Updater -from telegram.utils.types import HandlerArg +from telegram.ext import CallbackContext, TypeHandler, Updater from homeassistant.const import EVENT_HOMEASSISTANT_START, EVENT_HOMEASSISTANT_STOP -from . import CONF_ALLOWED_CHAT_IDS, BaseTelegramBotEntity, initialize_bot +from . import BaseTelegramBotEntity _LOGGER = logging.getLogger(__name__) -async def async_setup_platform(hass, config): +async def async_setup_platform(hass, bot, config): """Set up the Telegram polling platform.""" - bot = initialize_bot(config) - pol = TelegramPoll(bot, hass, config[CONF_ALLOWED_CHAT_IDS]) + pollbot = PollBot(hass, bot, config) - def _start_bot(_event): - """Start the bot.""" - pol.start_polling() - - def _stop_bot(_event): - """Stop the bot.""" - pol.stop_polling() - - hass.bus.async_listen_once(EVENT_HOMEASSISTANT_START, _start_bot) - hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, _stop_bot) + hass.bus.async_listen_once(EVENT_HOMEASSISTANT_START, pollbot.start_polling) + hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, pollbot.stop_polling) return True @@ -43,57 +33,28 @@ def process_error(update: Update, context: CallbackContext): _LOGGER.error('Update "%s" caused error: "%s"', update, context.error) -def message_handler(handler): - """Create messages handler.""" +class PollBot(BaseTelegramBotEntity): + """ + Controls the Updater object that holds the bot and a dispatcher. - class MessageHandler(Handler): - """Telegram bot message handler.""" - - def __init__(self): - """Initialize the messages handler instance.""" - super().__init__(handler) - - def check_update(self, update): - """Check is update valid.""" - return isinstance(update, Update) - - def handle_update( - self, - update: HandlerArg, - dispatcher: Dispatcher, - check_result: object, - context: CallbackContext = None, - ): - """Handle update.""" - optional_args = self.collect_optional_args(dispatcher, update) - context.args = optional_args - return self.callback(update, context) - - return MessageHandler() - - -class TelegramPoll(BaseTelegramBotEntity): - """Asyncio telegram incoming message handler.""" - - def __init__(self, bot, hass, allowed_chat_ids): - """Initialize the polling instance.""" - - BaseTelegramBotEntity.__init__(self, hass, allowed_chat_ids) + The dispatcher is set up by the super class to pass telegram updates to `self.handle_update` + """ + def __init__(self, hass, bot, config): + """Create Updater and Dispatcher before calling super().""" + self.bot = bot self.updater = Updater(bot=bot, workers=4) self.dispatcher = self.updater.dispatcher - - self.dispatcher.add_handler(message_handler(self.process_update)) + self.dispatcher.add_handler(TypeHandler(Update, self.handle_update)) self.dispatcher.add_error_handler(process_error) + super().__init__(hass, config) - def start_polling(self): + def start_polling(self, event=None): """Start the polling task.""" + _LOGGER.debug("Starting polling") self.updater.start_polling() - def stop_polling(self): + def stop_polling(self, event=None): """Stop the polling task.""" + _LOGGER.debug("Stopping polling") self.updater.stop() - - def process_update(self, update: HandlerArg, context: CallbackContext): - """Process incoming message.""" - self.process_message(update.to_dict()) diff --git a/homeassistant/components/telegram_bot/webhooks.py b/homeassistant/components/telegram_bot/webhooks.py index c1e86129ebb..8b94cb66496 100644 --- a/homeassistant/components/telegram_bot/webhooks.py +++ b/homeassistant/components/telegram_bot/webhooks.py @@ -4,90 +4,115 @@ from http import HTTPStatus from ipaddress import ip_address import logging +from telegram import Update from telegram.error import TimedOut +from telegram.ext import Dispatcher, TypeHandler from homeassistant.components.http import HomeAssistantView from homeassistant.const import EVENT_HOMEASSISTANT_STOP from homeassistant.helpers.network import get_url -from . import ( - CONF_ALLOWED_CHAT_IDS, - CONF_TRUSTED_NETWORKS, - CONF_URL, - BaseTelegramBotEntity, - initialize_bot, -) +from . import CONF_TRUSTED_NETWORKS, CONF_URL, BaseTelegramBotEntity _LOGGER = logging.getLogger(__name__) -TELEGRAM_HANDLER_URL = "/api/telegram_webhooks" -REMOVE_HANDLER_URL = "" +TELEGRAM_WEBHOOK_URL = "/api/telegram_webhooks" +REMOVE_WEBHOOK_URL = "" -async def async_setup_platform(hass, config): +async def async_setup_platform(hass, bot, config): """Set up the Telegram webhooks platform.""" + pushbot = PushBot(hass, bot, config) - bot = initialize_bot(config) - - current_status = await hass.async_add_executor_job(bot.getWebhookInfo) - if not (base_url := config.get(CONF_URL)): - base_url = get_url(hass, require_ssl=True, allow_internal=False) - - # Some logging of Bot current status: - last_error_date = getattr(current_status, "last_error_date", None) - if (last_error_date is not None) and (isinstance(last_error_date, int)): - last_error_date = dt.datetime.fromtimestamp(last_error_date) - _LOGGER.info( - "Telegram webhook last_error_date: %s. Status: %s", - last_error_date, - current_status, - ) - else: - _LOGGER.debug("telegram webhook Status: %s", current_status) - - handler_url = f"{base_url}{TELEGRAM_HANDLER_URL}" - if not handler_url.startswith("https"): - _LOGGER.error("Invalid telegram webhook %s must be https", handler_url) + if not pushbot.webhook_url.startswith("https"): + _LOGGER.error("Invalid telegram webhook %s must be https", pushbot.webhook_url) return False - def _try_to_set_webhook(): - retry_num = 0 - while retry_num < 3: - try: - return bot.setWebhook(handler_url, timeout=5) - except TimedOut: - retry_num += 1 - _LOGGER.warning("Timeout trying to set webhook (retry #%d)", retry_num) + webhook_registered = await pushbot.register_webhook() + if not webhook_registered: + return False - if current_status and current_status["url"] != handler_url: - result = await hass.async_add_executor_job(_try_to_set_webhook) - if result: - _LOGGER.info("Set new telegram webhook %s", handler_url) - else: - _LOGGER.error("Set telegram webhook failed %s", handler_url) - return False - - hass.bus.async_listen_once( - EVENT_HOMEASSISTANT_STOP, lambda event: bot.setWebhook(REMOVE_HANDLER_URL) - ) + hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, pushbot.deregister_webhook) hass.http.register_view( - BotPushReceiver( - hass, config[CONF_ALLOWED_CHAT_IDS], config[CONF_TRUSTED_NETWORKS] - ) + PushBotView(hass, bot, pushbot.dispatcher, config[CONF_TRUSTED_NETWORKS]) ) return True -class BotPushReceiver(HomeAssistantView, BaseTelegramBotEntity): - """Handle pushes from Telegram.""" +class PushBot(BaseTelegramBotEntity): + """Handles all the push/webhook logic and passes telegram updates to `self.handle_update`.""" + + def __init__(self, hass, bot, config): + """Create Dispatcher before calling super().""" + self.bot = bot + self.trusted_networks = config[CONF_TRUSTED_NETWORKS] + # Dumb dispatcher that just gets our updates to our handler callback (self.handle_update) + self.dispatcher = Dispatcher(bot, None) + self.dispatcher.add_handler(TypeHandler(Update, self.handle_update)) + super().__init__(hass, config) + + self.base_url = config.get(CONF_URL) or get_url( + hass, require_ssl=True, allow_internal=False + ) + self.webhook_url = f"{self.base_url}{TELEGRAM_WEBHOOK_URL}" + + def _try_to_set_webhook(self): + _LOGGER.debug("Registering webhook URL: %s", self.webhook_url) + retry_num = 0 + while retry_num < 3: + try: + return self.bot.set_webhook(self.webhook_url, timeout=5) + except TimedOut: + retry_num += 1 + _LOGGER.warning("Timeout trying to set webhook (retry #%d)", retry_num) + + return False + + async def register_webhook(self): + """Query telegram and register the URL for our webhook.""" + current_status = await self.hass.async_add_executor_job( + self.bot.get_webhook_info + ) + # Some logging of Bot current status: + last_error_date = getattr(current_status, "last_error_date", None) + if (last_error_date is not None) and (isinstance(last_error_date, int)): + last_error_date = dt.datetime.fromtimestamp(last_error_date) + _LOGGER.debug( + "Telegram webhook last_error_date: %s. Status: %s", + last_error_date, + current_status, + ) + else: + _LOGGER.debug("telegram webhook status: %s", current_status) + + if current_status and current_status["url"] != self.webhook_url: + result = await self.hass.async_add_executor_job(self._try_to_set_webhook) + if result: + _LOGGER.info("Set new telegram webhook %s", self.webhook_url) + else: + _LOGGER.error("Set telegram webhook failed %s", self.webhook_url) + return False + + return True + + def deregister_webhook(self, event=None): + """Query telegram and deregister the URL for our webhook.""" + _LOGGER.debug("Deregistering webhook URL") + return self.bot.delete_webhook() + + +class PushBotView(HomeAssistantView): + """View for handling webhook calls from Telegram.""" requires_auth = False - url = TELEGRAM_HANDLER_URL + url = TELEGRAM_WEBHOOK_URL name = "telegram_webhooks" - def __init__(self, hass, allowed_chat_ids, trusted_networks): - """Initialize the class.""" - BaseTelegramBotEntity.__init__(self, hass, allowed_chat_ids) + def __init__(self, hass, bot, dispatcher, trusted_networks): + """Initialize by storing stuff needed for setting up our webhook endpoint.""" + self.hass = hass + self.bot = bot + self.dispatcher = dispatcher self.trusted_networks = trusted_networks async def post(self, request): @@ -98,10 +123,12 @@ class BotPushReceiver(HomeAssistantView, BaseTelegramBotEntity): return self.json_message("Access denied", HTTPStatus.UNAUTHORIZED) try: - data = await request.json() + update_data = await request.json() except ValueError: return self.json_message("Invalid JSON", HTTPStatus.BAD_REQUEST) - if not self.process_message(data): - return self.json_message("Invalid message", HTTPStatus.BAD_REQUEST) + update = Update.de_json(update_data, self.bot) + _LOGGER.debug("Received Update on %s: %s", self.url, update) + await self.hass.async_add_executor_job(self.dispatcher.process_update, update) + return None diff --git a/requirements_test_all.txt b/requirements_test_all.txt index e5f9741f203..109e43d92e8 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -26,6 +26,9 @@ PyQRCode==1.2.1 # homeassistant.components.rmvtransport PyRMVtransport==0.3.3 +# homeassistant.components.telegram_bot +PySocks==1.7.1 + # homeassistant.components.switchbot # PySwitchbot==0.13.3 @@ -1256,6 +1259,9 @@ python-songpal==0.14.1 # homeassistant.components.tado python-tado==0.12.0 +# homeassistant.components.telegram_bot +python-telegram-bot==13.1 + # homeassistant.components.awair python_awair==0.2.3 diff --git a/tests/components/telegram_bot/__init__.py b/tests/components/telegram_bot/__init__.py new file mode 100644 index 00000000000..810b1bc268f --- /dev/null +++ b/tests/components/telegram_bot/__init__.py @@ -0,0 +1 @@ +"""Tests for telegram_bot integration.""" diff --git a/tests/components/telegram_bot/conftest.py b/tests/components/telegram_bot/conftest.py new file mode 100644 index 00000000000..61818e4c377 --- /dev/null +++ b/tests/components/telegram_bot/conftest.py @@ -0,0 +1,187 @@ +"""Tests for the telegram_bot integration.""" +from unittest.mock import patch + +import pytest +from telegram.ext.dispatcher import Dispatcher + +from homeassistant.components.telegram_bot import ( + CONF_ALLOWED_CHAT_IDS, + CONF_TRUSTED_NETWORKS, + DOMAIN, +) +from homeassistant.const import CONF_API_KEY, CONF_PLATFORM, CONF_URL +from homeassistant.setup import async_setup_component + + +@pytest.fixture +def config_webhooks(): + """Fixture for a webhooks platform configuration.""" + return { + DOMAIN: [ + { + CONF_PLATFORM: "webhooks", + CONF_URL: "https://test", + CONF_TRUSTED_NETWORKS: ["127.0.0.1"], + CONF_API_KEY: "1234567890:ABC", + CONF_ALLOWED_CHAT_IDS: [ + # "me" + 12345678, + # Some chat + -123456789, + ], + } + ] + } + + +@pytest.fixture +def config_polling(): + """Fixture for a polling platform configuration.""" + return { + DOMAIN: [ + { + CONF_PLATFORM: "polling", + CONF_API_KEY: "1234567890:ABC", + CONF_ALLOWED_CHAT_IDS: [ + # "me" + 12345678, + # Some chat + -123456789, + ], + } + ] + } + + +@pytest.fixture +def mock_register_webhook(): + """Mock calls made by telegram_bot when (de)registering webhook.""" + with patch( + "homeassistant.components.telegram_bot.webhooks.PushBot.register_webhook", + return_value=True, + ), patch( + "homeassistant.components.telegram_bot.webhooks.PushBot.deregister_webhook", + return_value=True, + ): + yield + + +@pytest.fixture +def update_message_command(): + """Fixture for mocking an incoming update of type message/command.""" + return { + "update_id": 1, + "message": { + "message_id": 1, + "from": { + "id": 12345678, + "is_bot": False, + "first_name": "Firstname", + "username": "some_username", + "language_code": "en", + }, + "chat": { + "id": -123456789, + "title": "SomeChat", + "type": "group", + "all_members_are_administrators": True, + }, + "date": 1644518189, + "text": "/command", + "entities": [ + { + "type": "bot_command", + "offset": 0, + "length": 7, + } + ], + }, + } + + +@pytest.fixture +def update_message_text(): + """Fixture for mocking an incoming update of type message/text.""" + return { + "update_id": 1, + "message": { + "message_id": 1, + "date": 1441645532, + "from": { + "id": 12345678, + "is_bot": False, + "last_name": "Test Lastname", + "first_name": "Test Firstname", + "username": "Testusername", + }, + "chat": { + "last_name": "Test Lastname", + "id": 1111111, + "type": "private", + "first_name": "Test Firstname", + "username": "Testusername", + }, + "text": "HELLO", + }, + } + + +@pytest.fixture +def unauthorized_update_message_text(update_message_text): + """Fixture for mocking an incoming update of type message/text that is not in our `allowed_chat_ids`.""" + update_message_text["message"]["from"]["id"] = 1234 + update_message_text["message"]["chat"]["id"] = 1234 + return update_message_text + + +@pytest.fixture +def update_callback_query(): + """Fixture for mocking an incoming update of type callback_query.""" + return { + "update_id": 1, + "callback_query": { + "id": "4382bfdwdsb323b2d9", + "from": { + "id": 12345678, + "type": "private", + "is_bot": False, + "last_name": "Test Lastname", + "first_name": "Test Firstname", + "username": "Testusername", + }, + "chat_instance": "aaa111", + "data": "Data from button callback", + "inline_message_id": "1234csdbsk4839", + }, + } + + +@pytest.fixture +async def webhook_platform(hass, config_webhooks, mock_register_webhook): + """Fixture for setting up the webhooks platform using appropriate config and mocks.""" + await async_setup_component( + hass, + DOMAIN, + config_webhooks, + ) + await hass.async_block_till_done() + + +@pytest.fixture +async def polling_platform(hass, config_polling): + """Fixture for setting up the polling platform using appropriate config and mocks.""" + await async_setup_component( + hass, + DOMAIN, + config_polling, + ) + await hass.async_block_till_done() + + +@pytest.fixture(autouse=True) +def clear_dispatcher(): + """Clear the singleton that telegram.ext.dispatcher.Dispatcher sets on itself.""" + yield + Dispatcher._set_singleton(None) + # This is how python-telegram-bot resets the dispatcher in their test suite + Dispatcher._Dispatcher__singleton_semaphore.release() diff --git a/tests/components/telegram_bot/test_telegram_bot.py b/tests/components/telegram_bot/test_telegram_bot.py new file mode 100644 index 00000000000..9b099a180f7 --- /dev/null +++ b/tests/components/telegram_bot/test_telegram_bot.py @@ -0,0 +1,112 @@ +"""Tests for the telegram_bot component.""" +from telegram import Update +from telegram.ext.dispatcher import Dispatcher + +from homeassistant.components.telegram_bot import DOMAIN, SERVICE_SEND_MESSAGE +from homeassistant.components.telegram_bot.webhooks import TELEGRAM_WEBHOOK_URL + +from tests.common import async_capture_events + + +async def test_webhook_platform_init(hass, webhook_platform): + """Test initialization of the webhooks platform.""" + assert hass.services.has_service(DOMAIN, SERVICE_SEND_MESSAGE) is True + + +async def test_polling_platform_init(hass, polling_platform): + """Test initialization of the polling platform.""" + assert hass.services.has_service(DOMAIN, SERVICE_SEND_MESSAGE) is True + + +async def test_webhook_endpoint_generates_telegram_text_event( + hass, webhook_platform, hass_client, update_message_text +): + """POST to the configured webhook endpoint and assert fired `telegram_text` event.""" + client = await hass_client() + events = async_capture_events(hass, "telegram_text") + + response = await client.post(TELEGRAM_WEBHOOK_URL, json=update_message_text) + assert response.status == 200 + assert (await response.read()).decode("utf-8") == "" + + # Make sure event has fired + await hass.async_block_till_done() + + assert len(events) == 1 + assert events[0].data["text"] == update_message_text["message"]["text"] + + +async def test_webhook_endpoint_generates_telegram_command_event( + hass, webhook_platform, hass_client, update_message_command +): + """POST to the configured webhook endpoint and assert fired `telegram_command` event.""" + client = await hass_client() + events = async_capture_events(hass, "telegram_command") + + response = await client.post(TELEGRAM_WEBHOOK_URL, json=update_message_command) + assert response.status == 200 + assert (await response.read()).decode("utf-8") == "" + + # Make sure event has fired + await hass.async_block_till_done() + + assert len(events) == 1 + assert events[0].data["command"] == update_message_command["message"]["text"] + + +async def test_webhook_endpoint_generates_telegram_callback_event( + hass, webhook_platform, hass_client, update_callback_query +): + """POST to the configured webhook endpoint and assert fired `telegram_callback` event.""" + client = await hass_client() + events = async_capture_events(hass, "telegram_callback") + + response = await client.post(TELEGRAM_WEBHOOK_URL, json=update_callback_query) + assert response.status == 200 + assert (await response.read()).decode("utf-8") == "" + + # Make sure event has fired + await hass.async_block_till_done() + + assert len(events) == 1 + assert events[0].data["data"] == update_callback_query["callback_query"]["data"] + + +async def test_polling_platform_message_text_update( + hass, polling_platform, update_message_text +): + """Provide the `PollBot`s `Dispatcher` with an `Update` and assert fired `telegram_text` event.""" + events = async_capture_events(hass, "telegram_text") + + def telegram_dispatcher_callback(): + dispatcher = Dispatcher.get_instance() + update = Update.de_json(update_message_text, dispatcher.bot) + dispatcher.process_update(update) + + # python-telegram-bots `Updater` uses threading, so we need to schedule its callback in a sync context. + await hass.async_add_executor_job(telegram_dispatcher_callback) + + # Make sure event has fired + await hass.async_block_till_done() + + assert len(events) == 1 + assert events[0].data["text"] == update_message_text["message"]["text"] + + +async def test_webhook_endpoint_unauthorized_update_doesnt_generate_telegram_text_event( + hass, webhook_platform, hass_client, unauthorized_update_message_text +): + """Update with unauthorized user/chat should not trigger event.""" + client = await hass_client() + events = async_capture_events(hass, "telegram_text") + + response = await client.post( + TELEGRAM_WEBHOOK_URL, json=unauthorized_update_message_text + ) + assert response.status == 200 + assert (await response.read()).decode("utf-8") == "" + + # Make sure any events would have fired + await hass.async_block_till_done() + + assert len(events) == 0 From 3ba8ddb19291bd4d9229fd3363cb274495778404 Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Fri, 1 Apr 2022 23:34:36 +0200 Subject: [PATCH 078/238] Return unsubscribe callback from start.async_at_start (#69083) * Return unsubscribe callback from start.async_at_start * Update calling code --- homeassistant/components/group/__init__.py | 4 ++-- homeassistant/components/here_travel_time/sensor.py | 2 +- homeassistant/components/statistics/sensor.py | 2 +- homeassistant/helpers/start.py | 8 ++++---- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/homeassistant/components/group/__init__.py b/homeassistant/components/group/__init__.py index 7b895f9c1ce..9627ad86734 100644 --- a/homeassistant/components/group/__init__.py +++ b/homeassistant/components/group/__init__.py @@ -454,7 +454,7 @@ class GroupEntity(Entity): self.async_update_group_state() self.async_write_ha_state() - start.async_at_start(self.hass, _update_at_start) + self.async_on_remove(start.async_at_start(self.hass, _update_at_start)) @callback def async_defer_or_update_ha_state(self) -> None: @@ -689,7 +689,7 @@ class Group(Entity): async def async_added_to_hass(self): """Handle addition to Home Assistant.""" - start.async_at_start(self.hass, self._async_start) + self.async_on_remove(start.async_at_start(self.hass, self._async_start)) async def async_will_remove_from_hass(self): """Handle removal from Home Assistant.""" diff --git a/homeassistant/components/here_travel_time/sensor.py b/homeassistant/components/here_travel_time/sensor.py index 8fdd3df5fc1..a0449f7b5c0 100644 --- a/homeassistant/components/here_travel_time/sensor.py +++ b/homeassistant/components/here_travel_time/sensor.py @@ -247,7 +247,7 @@ class HERETravelTimeSensor(SensorEntity, CoordinatorEntity): async def _update_at_start(_): await self.async_update() - async_at_start(self.hass, _update_at_start) + self.async_on_remove(async_at_start(self.hass, _update_at_start)) @property def native_value(self) -> str | None: diff --git a/homeassistant/components/statistics/sensor.py b/homeassistant/components/statistics/sensor.py index aaca8a98290..ed2352657f4 100644 --- a/homeassistant/components/statistics/sensor.py +++ b/homeassistant/components/statistics/sensor.py @@ -302,7 +302,7 @@ class StatisticsSensor(SensorEntity): if "recorder" in self.hass.config.components: self.hass.async_create_task(self._initialize_from_database()) - async_at_start(self.hass, async_stats_sensor_startup) + self.async_on_remove(async_at_start(self.hass, async_stats_sensor_startup)) def _add_state_to_queue(self, new_state: State) -> None: """Add the state to the queue.""" diff --git a/homeassistant/helpers/start.py b/homeassistant/helpers/start.py index 4560119a685..7f919f5351d 100644 --- a/homeassistant/helpers/start.py +++ b/homeassistant/helpers/start.py @@ -4,13 +4,13 @@ from __future__ import annotations from collections.abc import Awaitable, Callable from homeassistant.const import EVENT_HOMEASSISTANT_START -from homeassistant.core import Event, HassJob, HomeAssistant, callback +from homeassistant.core import CALLBACK_TYPE, Event, HassJob, HomeAssistant, callback @callback def async_at_start( hass: HomeAssistant, at_start_cb: Callable[[HomeAssistant], Awaitable[None] | None] -) -> None: +) -> CALLBACK_TYPE: """Execute something when Home Assistant is started. Will execute it now if Home Assistant is already started. @@ -18,10 +18,10 @@ def async_at_start( at_start_job = HassJob(at_start_cb) if hass.is_running: hass.async_run_hass_job(at_start_job, hass) - return + return lambda: None async def _matched_event(event: Event) -> None: """Call the callback when Home Assistant started.""" hass.async_run_hass_job(at_start_job, hass) - hass.bus.async_listen_once(EVENT_HOMEASSISTANT_START, _matched_event) + return hass.bus.async_listen_once(EVENT_HOMEASSISTANT_START, _matched_event) From bee853d415cd16eeae0a53e927546eac641cae44 Mon Sep 17 00:00:00 2001 From: Nenad Bogojevic Date: Sun, 3 Apr 2022 05:39:44 +0200 Subject: [PATCH 079/238] Fix withings race condition for access token (#69107) --- homeassistant/components/withings/common.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/withings/common.py b/homeassistant/components/withings/common.py index 56f7f7cdf91..8682df59e0d 100644 --- a/homeassistant/components/withings/common.py +++ b/homeassistant/components/withings/common.py @@ -494,7 +494,7 @@ class ConfigEntryWithingsApi(AbstractWithingsApi): """Perform an async request.""" asyncio.run_coroutine_threadsafe( self.session.async_ensure_token_valid(), self._hass.loop - ) + ).result() access_token = self._config_entry.data["token"]["access_token"] response = requests.request( @@ -648,7 +648,11 @@ class DataManager: try: return await func() except Exception as exception1: # pylint: disable=broad-except - await asyncio.sleep(0.1) + _LOGGER.debug( + "Failed attempt %s of %s (%s)", attempt, attempts, exception1 + ) + # Make each backoff pause a little bit longer + await asyncio.sleep(0.5 * attempt) exception = exception1 continue From f2d41a0011299326cfe1a067a3d42a25ce6721a5 Mon Sep 17 00:00:00 2001 From: Mick Vleeshouwer Date: Sat, 2 Apr 2022 12:27:12 -0700 Subject: [PATCH 080/238] Bugfix for overkiz.alarm_control_panel platform exception (#69131) * Revert changes * Remove debug statement --- .../components/overkiz/alarm_control_panel.py | 29 ++++++++++++------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/homeassistant/components/overkiz/alarm_control_panel.py b/homeassistant/components/overkiz/alarm_control_panel.py index 4e62547bec5..059f2562544 100644 --- a/homeassistant/components/overkiz/alarm_control_panel.py +++ b/homeassistant/components/overkiz/alarm_control_panel.py @@ -3,7 +3,7 @@ from __future__ import annotations from collections.abc import Callable from dataclasses import dataclass -from typing import cast +from typing import Any, cast from pyoverkiz.enums import OverkizCommand, OverkizCommandParam, OverkizState from pyoverkiz.enums.ui import UIWidget @@ -55,15 +55,15 @@ class OverkizAlarmDescription( """Class to describe an Overkiz alarm control panel.""" alarm_disarm: str | None = None - alarm_disarm_args: OverkizStateType | list[OverkizStateType] = [] + alarm_disarm_args: OverkizStateType | list[OverkizStateType] = None alarm_arm_home: str | None = None - alarm_arm_home_args: OverkizStateType | list[OverkizStateType] = [] + alarm_arm_home_args: OverkizStateType | list[OverkizStateType] = None alarm_arm_night: str | None = None - alarm_arm_night_args: OverkizStateType | list[OverkizStateType] = [] + alarm_arm_night_args: OverkizStateType | list[OverkizStateType] = None alarm_arm_away: str | None = None - alarm_arm_away_args: OverkizStateType | list[OverkizStateType] = [] + alarm_arm_away_args: OverkizStateType | list[OverkizStateType] = None alarm_trigger: str | None = None - alarm_trigger_args: OverkizStateType | list[OverkizStateType] = [] + alarm_trigger_args: OverkizStateType | list[OverkizStateType] = None MAP_INTERNAL_STATUS_STATE: dict[str, str] = { @@ -266,7 +266,7 @@ class OverkizAlarmControlPanel(OverkizDescriptiveEntity, AlarmControlPanelEntity async def async_alarm_disarm(self, code: str | None = None) -> None: """Send disarm command.""" assert self.entity_description.alarm_disarm - await self.executor.async_execute_command( + await self.async_execute_command( self.entity_description.alarm_disarm, self.entity_description.alarm_disarm_args, ) @@ -274,7 +274,7 @@ class OverkizAlarmControlPanel(OverkizDescriptiveEntity, AlarmControlPanelEntity async def async_alarm_arm_home(self, code: str | None = None) -> None: """Send arm home command.""" assert self.entity_description.alarm_arm_home - await self.executor.async_execute_command( + await self.async_execute_command( self.entity_description.alarm_arm_home, self.entity_description.alarm_arm_home_args, ) @@ -282,7 +282,7 @@ class OverkizAlarmControlPanel(OverkizDescriptiveEntity, AlarmControlPanelEntity async def async_alarm_arm_night(self, code: str | None = None) -> None: """Send arm night command.""" assert self.entity_description.alarm_arm_night - await self.executor.async_execute_command( + await self.async_execute_command( self.entity_description.alarm_arm_night, self.entity_description.alarm_arm_night_args, ) @@ -290,7 +290,7 @@ class OverkizAlarmControlPanel(OverkizDescriptiveEntity, AlarmControlPanelEntity async def async_alarm_arm_away(self, code: str | None = None) -> None: """Send arm away command.""" assert self.entity_description.alarm_arm_away - await self.executor.async_execute_command( + await self.async_execute_command( self.entity_description.alarm_arm_away, self.entity_description.alarm_arm_away_args, ) @@ -298,7 +298,14 @@ class OverkizAlarmControlPanel(OverkizDescriptiveEntity, AlarmControlPanelEntity async def async_alarm_trigger(self, code: str | None = None) -> None: """Send alarm trigger command.""" assert self.entity_description.alarm_trigger - await self.executor.async_execute_command( + await self.async_execute_command( self.entity_description.alarm_trigger, self.entity_description.alarm_trigger_args, ) + + async def async_execute_command(self, command_name: str, args: Any) -> None: + """Execute device command in async context.""" + if args: + await self.executor.async_execute_command(command_name, args) + else: + await self.executor.async_execute_command(command_name) From 026c8435455ce39b556308f31e6f1e179df78238 Mon Sep 17 00:00:00 2001 From: Michael <35783820+mib1185@users.noreply.github.com> Date: Sat, 2 Apr 2022 21:34:12 +0200 Subject: [PATCH 081/238] ignore ip6 link local address on ssdp discovery (#69135) --- homeassistant/components/fritz/config_flow.py | 4 ++++ homeassistant/components/fritz/strings.json | 1 + homeassistant/components/fritz/translations/en.json | 12 +----------- 3 files changed, 6 insertions(+), 11 deletions(-) diff --git a/homeassistant/components/fritz/config_flow.py b/homeassistant/components/fritz/config_flow.py index 17457522bb0..ebc5512f920 100644 --- a/homeassistant/components/fritz/config_flow.py +++ b/homeassistant/components/fritz/config_flow.py @@ -1,6 +1,7 @@ """Config flow to configure the FRITZ!Box Tools integration.""" from __future__ import annotations +import ipaddress import logging import socket from typing import Any @@ -129,6 +130,9 @@ class FritzBoxToolsFlowHandler(ConfigFlow, domain=DOMAIN): ) self.context[CONF_HOST] = self._host + if ipaddress.ip_address(self._host).is_link_local: + return self.async_abort(reason="ignore_ip6_link_local") + if uuid := discovery_info.upnp.get(ssdp.ATTR_UPNP_UDN): if uuid.startswith("uuid:"): uuid = uuid[5:] diff --git a/homeassistant/components/fritz/strings.json b/homeassistant/components/fritz/strings.json index 49a89b6e43f..9d6628aca0e 100644 --- a/homeassistant/components/fritz/strings.json +++ b/homeassistant/components/fritz/strings.json @@ -32,6 +32,7 @@ "abort": { "already_in_progress": "[%key:common::config_flow::abort::already_in_progress%]", "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", + "ignore_ip6_link_local": "IPv6 link local address is not supported.", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "error": { diff --git a/homeassistant/components/fritz/translations/en.json b/homeassistant/components/fritz/translations/en.json index f44c41f2ef9..e7ee1568684 100644 --- a/homeassistant/components/fritz/translations/en.json +++ b/homeassistant/components/fritz/translations/en.json @@ -3,13 +3,13 @@ "abort": { "already_configured": "Device is already configured", "already_in_progress": "Configuration flow is already in progress", + "ignore_ip6_link_local": "IPv6 link local address is not supported.", "reauth_successful": "Re-authentication was successful" }, "error": { "already_configured": "Device is already configured", "already_in_progress": "Configuration flow is already in progress", "cannot_connect": "Failed to connect", - "connection_error": "Failed to connect", "invalid_auth": "Invalid authentication", "upnp_not_configured": "Missing UPnP settings on device." }, @@ -31,16 +31,6 @@ "description": "Update FRITZ!Box Tools credentials for: {host}.\n\nFRITZ!Box Tools is unable to log in to your FRITZ!Box.", "title": "Updating FRITZ!Box Tools - credentials" }, - "start_config": { - "data": { - "host": "Host", - "password": "Password", - "port": "Port", - "username": "Username" - }, - "description": "Setup FRITZ!Box Tools to control your FRITZ!Box.\nMinimum needed: username, password.", - "title": "Setup FRITZ!Box Tools - mandatory" - }, "user": { "data": { "host": "Host", From a26e221ebc146e5da1fbc9a685e1a843a578acce Mon Sep 17 00:00:00 2001 From: Raman Gupta <7243222+raman325@users.noreply.github.com> Date: Sat, 2 Apr 2022 13:26:50 -0400 Subject: [PATCH 082/238] Fix kodi log spamming again (#69137) * Fix kodi log spamming again * use try except else --- homeassistant/components/kodi/media_player.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/kodi/media_player.py b/homeassistant/components/kodi/media_player.py index 2de2c277189..51e242ae137 100644 --- a/homeassistant/components/kodi/media_player.py +++ b/homeassistant/components/kodi/media_player.py @@ -448,7 +448,8 @@ class KodiEntity(MediaPlayerEntity): self._connect_error = True _LOGGER.warning("Unable to connect to Kodi via websocket") await self._clear_connection(False) - self._connect_error = False + else: + self._connect_error = False async def _ping(self): try: @@ -458,7 +459,8 @@ class KodiEntity(MediaPlayerEntity): self._connect_error = True _LOGGER.warning("Unable to ping Kodi via websocket") await self._clear_connection() - self._connect_error = False + else: + self._connect_error = False async def _async_connect_websocket_if_disconnected(self, *_): """Reconnect the websocket if it fails.""" From 61129734f5288cc62e264e7e043edfb1f8d92925 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk <11290930+bouwew@users.noreply.github.com> Date: Sun, 3 Apr 2022 13:20:20 +0200 Subject: [PATCH 083/238] Bump plugwise to v0.17.3 (#69139) --- homeassistant/components/plugwise/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/plugwise/manifest.json b/homeassistant/components/plugwise/manifest.json index a19e48ed0b3..68ed6d65647 100644 --- a/homeassistant/components/plugwise/manifest.json +++ b/homeassistant/components/plugwise/manifest.json @@ -2,7 +2,7 @@ "domain": "plugwise", "name": "Plugwise", "documentation": "https://www.home-assistant.io/integrations/plugwise", - "requirements": ["plugwise==0.17.2"], + "requirements": ["plugwise==0.17.3"], "codeowners": ["@CoMPaTech", "@bouwew", "@brefra", "@frenck"], "zeroconf": ["_plugwise._tcp.local."], "config_flow": true, diff --git a/requirements_all.txt b/requirements_all.txt index 5928f3bc3b7..09e2c994a15 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -1224,7 +1224,7 @@ plexauth==0.0.6 plexwebsocket==0.0.13 # homeassistant.components.plugwise -plugwise==0.17.2 +plugwise==0.17.3 # homeassistant.components.plum_lightpad plumlightpad==0.0.11 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 109e43d92e8..048a22c4db5 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -820,7 +820,7 @@ plexauth==0.0.6 plexwebsocket==0.0.13 # homeassistant.components.plugwise -plugwise==0.17.2 +plugwise==0.17.3 # homeassistant.components.plum_lightpad plumlightpad==0.0.11 From 5cc58579bb541a2905a12ce282b4b6046a6fd9d3 Mon Sep 17 00:00:00 2001 From: Glenn Waters Date: Sun, 3 Apr 2022 04:59:27 -0400 Subject: [PATCH 084/238] Environment Canada: allow AQHI to pull from forecast when current not available (#69142) * Allow AQHI to pull from forecast when current not available. * Remove redundant check. * Remove lambda. --- .../components/environment_canada/manifest.json | 2 +- .../components/environment_canada/sensor.py | 12 +++++++++++- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/environment_canada/manifest.json b/homeassistant/components/environment_canada/manifest.json index 4d1f1ecdff0..a0399629030 100644 --- a/homeassistant/components/environment_canada/manifest.json +++ b/homeassistant/components/environment_canada/manifest.json @@ -2,7 +2,7 @@ "domain": "environment_canada", "name": "Environment Canada", "documentation": "https://www.home-assistant.io/integrations/environment_canada", - "requirements": ["env_canada==0.5.20"], + "requirements": ["env_canada==0.5.21"], "codeowners": ["@gwww", "@michaeldavie"], "config_flow": true, "iot_class": "cloud_polling", diff --git a/homeassistant/components/environment_canada/sensor.py b/homeassistant/components/environment_canada/sensor.py index 4cfe6bbbfb2..2e124d1ec7c 100644 --- a/homeassistant/components/environment_canada/sensor.py +++ b/homeassistant/components/environment_canada/sensor.py @@ -209,13 +209,23 @@ SENSOR_TYPES: tuple[ECSensorEntityDescription, ...] = ( ), ) + +def _get_aqhi_value(data): + if (aqhi := data.current) is not None: + return aqhi + if data.forecasts and (hourly := data.forecasts.get("hourly")) is not None: + if values := list(hourly.values()): + return values[0] + return None + + AQHI_SENSOR = ECSensorEntityDescription( key="aqhi", name="AQHI", device_class=SensorDeviceClass.AQI, native_unit_of_measurement="AQI", state_class=SensorStateClass.MEASUREMENT, - value_fn=lambda data: data.current, + value_fn=_get_aqhi_value, ) ALERT_TYPES: tuple[ECSensorEntityDescription, ...] = ( diff --git a/requirements_all.txt b/requirements_all.txt index 09e2c994a15..3b4acefe92b 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -593,7 +593,7 @@ enocean==0.50 enturclient==0.2.3 # homeassistant.components.environment_canada -env_canada==0.5.20 +env_canada==0.5.21 # homeassistant.components.enphase_envoy envoy_reader==0.20.1 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 048a22c4db5..d006a231c3f 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -421,7 +421,7 @@ emulated_roku==0.2.1 enocean==0.50 # homeassistant.components.environment_canada -env_canada==0.5.20 +env_canada==0.5.21 # homeassistant.components.enphase_envoy envoy_reader==0.20.1 From 2ae390a342b4b739b74de7f6c3004e8236ff6f2b Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Sat, 2 Apr 2022 21:28:08 +0200 Subject: [PATCH 085/238] Set brand icon on WLED update entity (#69145) --- homeassistant/components/wled/update.py | 5 +++++ tests/components/wled/test_update.py | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/homeassistant/components/wled/update.py b/homeassistant/components/wled/update.py index f0fc532b3b3..c0c099ead65 100644 --- a/homeassistant/components/wled/update.py +++ b/homeassistant/components/wled/update.py @@ -50,6 +50,11 @@ class WLEDUpdateEntity(WLEDEntity, UpdateEntity): return None return str(version) + @property + def entity_picture(self) -> str: + """Return the entity picture to use in the frontend, if any.""" + return "https://brands.home-assistant.io/wled/icon.png" + @property def latest_version(self) -> str | None: """Latest version available for install.""" diff --git a/tests/components/wled/test_update.py b/tests/components/wled/test_update.py index 452aeba6a80..e64018aba59 100644 --- a/tests/components/wled/test_update.py +++ b/tests/components/wled/test_update.py @@ -20,6 +20,7 @@ from homeassistant.components.update.const import ( from homeassistant.const import ( ATTR_DEVICE_CLASS, ATTR_ENTITY_ID, + ATTR_ENTITY_PICTURE, ATTR_ICON, ATTR_SUPPORTED_FEATURES, STATE_OFF, @@ -46,6 +47,10 @@ async def test_update_available( assert state assert state.attributes.get(ATTR_DEVICE_CLASS) == UpdateDeviceClass.FIRMWARE assert state.state == STATE_ON + assert ( + state.attributes[ATTR_ENTITY_PICTURE] + == "https://brands.home-assistant.io/wled/icon.png" + ) assert state.attributes[ATTR_INSTALLED_VERSION] == "0.8.5" assert state.attributes[ATTR_LATEST_VERSION] == "0.12.0" assert state.attributes[ATTR_RELEASE_SUMMARY] is None From bc106cc4305def3afbe57d9f8836fc3d32c6d2fe Mon Sep 17 00:00:00 2001 From: Alex Yao <33379584+alexyao2015@users.noreply.github.com> Date: Mon, 4 Apr 2022 07:47:44 +0000 Subject: [PATCH 086/238] Bump Yeelight to v0.7.10 (#69147) --- homeassistant/components/yeelight/device.py | 1 + homeassistant/components/yeelight/light.py | 4 ++-- homeassistant/components/yeelight/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 5 files changed, 6 insertions(+), 5 deletions(-) diff --git a/homeassistant/components/yeelight/device.py b/homeassistant/components/yeelight/device.py index 02228e5d9fc..6737f96c169 100644 --- a/homeassistant/components/yeelight/device.py +++ b/homeassistant/components/yeelight/device.py @@ -219,6 +219,7 @@ class YeelightDevice: @callback def async_update_callback(self, data): """Update push from device.""" + _LOGGER.debug("Received callback: %s", data) was_available = self._available self._available = data.get(KEY_CONNECTED, True) if update_needs_bg_power_workaround(data) or ( diff --git a/homeassistant/components/yeelight/light.py b/homeassistant/components/yeelight/light.py index 0c906b3e268..1de97c45fd0 100644 --- a/homeassistant/components/yeelight/light.py +++ b/homeassistant/components/yeelight/light.py @@ -245,7 +245,7 @@ def _parse_custom_effects(effects_config): def _async_cmd(func): """Define a wrapper to catch exceptions from the bulb.""" - async def _async_wrap(self, *args, **kwargs): + async def _async_wrap(self: "YeelightGenericLight", *args, **kwargs): for attempts in range(2): try: _LOGGER.debug("Calling %s with %s %s", func, args, kwargs) @@ -708,7 +708,7 @@ class YeelightGenericLight(YeelightEntity, LightEntity): """Activate flash.""" if not flash: return - if int(self._bulb.last_properties["color_mode"]) != 1: + if int(self._get_property("color_mode")) != 1: _LOGGER.error("Flash supported currently only in RGB mode") return diff --git a/homeassistant/components/yeelight/manifest.json b/homeassistant/components/yeelight/manifest.json index cd47b1ee049..1967793b855 100644 --- a/homeassistant/components/yeelight/manifest.json +++ b/homeassistant/components/yeelight/manifest.json @@ -2,7 +2,7 @@ "domain": "yeelight", "name": "Yeelight", "documentation": "https://www.home-assistant.io/integrations/yeelight", - "requirements": ["yeelight==0.7.9", "async-upnp-client==0.27.0"], + "requirements": ["yeelight==0.7.10", "async-upnp-client==0.27.0"], "codeowners": ["@zewelor", "@shenxn", "@starkillerOG", "@alexyao2015"], "config_flow": true, "dependencies": ["network"], diff --git a/requirements_all.txt b/requirements_all.txt index 3b4acefe92b..985a7c54476 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -2452,7 +2452,7 @@ yalesmartalarmclient==0.3.8 yalexs==1.1.23 # homeassistant.components.yeelight -yeelight==0.7.9 +yeelight==0.7.10 # homeassistant.components.yeelightsunflower yeelightsunflower==0.0.10 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index d006a231c3f..3c2c66010a9 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -1592,7 +1592,7 @@ yalesmartalarmclient==0.3.8 yalexs==1.1.23 # homeassistant.components.yeelight -yeelight==0.7.9 +yeelight==0.7.10 # homeassistant.components.youless youless-api==0.16 From 39a38d986677e328734af6f20dd7371c239a427d Mon Sep 17 00:00:00 2001 From: Marc Mueller <30130371+cdce8p@users.noreply.github.com> Date: Sun, 3 Apr 2022 15:46:28 +0200 Subject: [PATCH 087/238] Update hangups to 0.4.18 (#69149) --- homeassistant/components/hangouts/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- script/pip_check | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/hangouts/manifest.json b/homeassistant/components/hangouts/manifest.json index 44d85405339..b8b1004bb78 100644 --- a/homeassistant/components/hangouts/manifest.json +++ b/homeassistant/components/hangouts/manifest.json @@ -3,7 +3,7 @@ "name": "Google Chat", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/hangouts", - "requirements": ["hangups==0.4.17"], + "requirements": ["hangups==0.4.18"], "codeowners": [], "iot_class": "cloud_push", "loggers": ["hangups", "urwid"] diff --git a/requirements_all.txt b/requirements_all.txt index 985a7c54476..6681762b7e7 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -776,7 +776,7 @@ ha-philipsjs==2.7.6 habitipy==0.2.0 # homeassistant.components.hangouts -hangups==0.4.17 +hangups==0.4.18 # homeassistant.components.cloud hass-nabucasa==0.54.0 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 3c2c66010a9..47a44740062 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -546,7 +546,7 @@ ha-philipsjs==2.7.6 habitipy==0.2.0 # homeassistant.components.hangouts -hangups==0.4.17 +hangups==0.4.18 # homeassistant.components.cloud hass-nabucasa==0.54.0 diff --git a/script/pip_check b/script/pip_check index 6f48ce15bb1..f29ea5a5dd0 100755 --- a/script/pip_check +++ b/script/pip_check @@ -3,7 +3,7 @@ PIP_CACHE=$1 # Number of existing dependency conflicts # Update if a PR resolve one! -DEPENDENCY_CONFLICTS=7 +DEPENDENCY_CONFLICTS=6 PIP_CHECK=$(pip check --cache-dir=$PIP_CACHE) LINE_COUNT=$(echo "$PIP_CHECK" | wc -l) From d99e04e2bc882f069805cbc837581fc54d78d997 Mon Sep 17 00:00:00 2001 From: Diogo Gomes Date: Sun, 3 Apr 2022 04:41:03 +0100 Subject: [PATCH 088/238] Makes sure YAML defined tariffs are unique (#69151) --- .../components/utility_meter/__init__.py | 2 +- tests/components/utility_meter/test_sensor.py | 21 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/utility_meter/__init__.py b/homeassistant/components/utility_meter/__init__.py index 0195ee53fc8..ecc1110d7ff 100644 --- a/homeassistant/components/utility_meter/__init__.py +++ b/homeassistant/components/utility_meter/__init__.py @@ -85,7 +85,7 @@ METER_CONFIG_SCHEMA = vol.Schema( vol.Optional(CONF_METER_DELTA_VALUES, default=False): cv.boolean, vol.Optional(CONF_METER_NET_CONSUMPTION, default=False): cv.boolean, vol.Optional(CONF_TARIFFS, default=[]): vol.All( - cv.ensure_list, [cv.string] + cv.ensure_list, vol.Unique(), [cv.string] ), vol.Optional(CONF_CRON_PATTERN): validate_cron_pattern, }, diff --git a/tests/components/utility_meter/test_sensor.py b/tests/components/utility_meter/test_sensor.py index 371e30ed604..bfe6162a222 100644 --- a/tests/components/utility_meter/test_sensor.py +++ b/tests/components/utility_meter/test_sensor.py @@ -226,6 +226,27 @@ async def test_state(hass, yaml_config, config_entry_config): assert state.state == "0.123" +@pytest.mark.parametrize( + "yaml_config", + ( + ( + { + "utility_meter": { + "energy_bill": { + "source": "sensor.energy", + "tariffs": ["onpeak", "onpeak"], + } + } + }, + None, + ), + ), +) +async def test_not_unique_tariffs(hass, yaml_config): + """Test utility sensor state initializtion.""" + assert not await async_setup_component(hass, DOMAIN, yaml_config) + + @pytest.mark.parametrize( "yaml_config,config_entry_config", ( From b503be9301faf3bff7c2b625470cccb238fc3cc9 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Sun, 3 Apr 2022 06:13:03 -0600 Subject: [PATCH 089/238] Exclude static light attributes from being recorded in the database (#69155) --- homeassistant/components/light/recorder.py | 22 ++++++++++ tests/components/light/test_recorder.py | 51 ++++++++++++++++++++++ 2 files changed, 73 insertions(+) create mode 100644 homeassistant/components/light/recorder.py create mode 100644 tests/components/light/test_recorder.py diff --git a/homeassistant/components/light/recorder.py b/homeassistant/components/light/recorder.py new file mode 100644 index 00000000000..9febb98fa41 --- /dev/null +++ b/homeassistant/components/light/recorder.py @@ -0,0 +1,22 @@ +"""Integration platform for recorder.""" +from __future__ import annotations + +from homeassistant.core import HomeAssistant, callback + +from . import ( + ATTR_EFFECT_LIST, + ATTR_MAX_MIREDS, + ATTR_MIN_MIREDS, + ATTR_SUPPORTED_COLOR_MODES, +) + + +@callback +def exclude_attributes(hass: HomeAssistant) -> set[str]: + """Exclude static attributes from being recorded in the database.""" + return { + ATTR_SUPPORTED_COLOR_MODES, + ATTR_EFFECT_LIST, + ATTR_MIN_MIREDS, + ATTR_MAX_MIREDS, + } diff --git a/tests/components/light/test_recorder.py b/tests/components/light/test_recorder.py new file mode 100644 index 00000000000..b8e35788562 --- /dev/null +++ b/tests/components/light/test_recorder.py @@ -0,0 +1,51 @@ +"""The tests for light recorder.""" +from __future__ import annotations + +from datetime import timedelta + +from homeassistant.components import light +from homeassistant.components.light import ( + ATTR_EFFECT, + ATTR_MAX_MIREDS, + ATTR_MIN_MIREDS, + ATTR_SUPPORTED_COLOR_MODES, +) +from homeassistant.components.recorder.models import StateAttributes, States +from homeassistant.components.recorder.util import session_scope +from homeassistant.const import ATTR_FRIENDLY_NAME +from homeassistant.core import State +from homeassistant.setup import async_setup_component +from homeassistant.util import dt as dt_util + +from tests.common import async_fire_time_changed, async_init_recorder_component +from tests.components.recorder.common import async_wait_recording_done_without_instance + + +async def test_exclude_attributes(hass): + """Test light registered attributes to be excluded.""" + await async_init_recorder_component(hass) + await async_setup_component( + hass, light.DOMAIN, {light.DOMAIN: {"platform": "demo"}} + ) + await hass.async_block_till_done() + async_fire_time_changed(hass, dt_util.utcnow() + timedelta(minutes=5)) + await hass.async_block_till_done() + await async_wait_recording_done_without_instance(hass) + + def _fetch_states() -> list[State]: + with session_scope(hass=hass) as session: + native_states = [] + for db_state, db_state_attributes in session.query(States, StateAttributes): + state = db_state.to_native() + state.attributes = db_state_attributes.to_native() + native_states.append(state) + return native_states + + states: list[State] = await hass.async_add_executor_job(_fetch_states) + assert len(states) > 1 + for state in states: + assert ATTR_MIN_MIREDS not in state.attributes + assert ATTR_MAX_MIREDS not in state.attributes + assert ATTR_SUPPORTED_COLOR_MODES not in state.attributes + assert ATTR_EFFECT not in state.attributes + assert ATTR_FRIENDLY_NAME in state.attributes From 5fa2dc540bd5a178c6ccd4517a8f78b16e335b5c Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Sat, 2 Apr 2022 21:47:43 -0600 Subject: [PATCH 090/238] Exclude static and token attributes from being recorded for media_player (#69156) --- .../components/media_player/recorder.py | 13 +++++ .../components/media_player/test_recorder.py | 48 +++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 homeassistant/components/media_player/recorder.py create mode 100644 tests/components/media_player/test_recorder.py diff --git a/homeassistant/components/media_player/recorder.py b/homeassistant/components/media_player/recorder.py new file mode 100644 index 00000000000..66bd61c72cd --- /dev/null +++ b/homeassistant/components/media_player/recorder.py @@ -0,0 +1,13 @@ +"""Integration platform for recorder.""" +from __future__ import annotations + +from homeassistant.const import ATTR_ENTITY_PICTURE +from homeassistant.core import HomeAssistant, callback + +from . import ATTR_INPUT_SOURCE_LIST, ATTR_SOUND_MODE_LIST + + +@callback +def exclude_attributes(hass: HomeAssistant) -> set[str]: + """Exclude static and token attributes from being recorded in the database.""" + return {ATTR_SOUND_MODE_LIST, ATTR_ENTITY_PICTURE, ATTR_INPUT_SOURCE_LIST} diff --git a/tests/components/media_player/test_recorder.py b/tests/components/media_player/test_recorder.py new file mode 100644 index 00000000000..9532fe75cd0 --- /dev/null +++ b/tests/components/media_player/test_recorder.py @@ -0,0 +1,48 @@ +"""The tests for media_player recorder.""" +from __future__ import annotations + +from datetime import timedelta + +from homeassistant.components import media_player +from homeassistant.components.media_player.const import ( + ATTR_INPUT_SOURCE_LIST, + ATTR_SOUND_MODE_LIST, +) +from homeassistant.components.recorder.models import StateAttributes, States +from homeassistant.components.recorder.util import session_scope +from homeassistant.const import ATTR_ENTITY_PICTURE, ATTR_FRIENDLY_NAME +from homeassistant.core import State +from homeassistant.setup import async_setup_component +from homeassistant.util import dt as dt_util + +from tests.common import async_fire_time_changed, async_init_recorder_component +from tests.components.recorder.common import async_wait_recording_done_without_instance + + +async def test_exclude_attributes(hass): + """Test media_player registered attributes to be excluded.""" + await async_init_recorder_component(hass) + await async_setup_component( + hass, media_player.DOMAIN, {media_player.DOMAIN: {"platform": "demo"}} + ) + await hass.async_block_till_done() + async_fire_time_changed(hass, dt_util.utcnow() + timedelta(minutes=5)) + await hass.async_block_till_done() + await async_wait_recording_done_without_instance(hass) + + def _fetch_states() -> list[State]: + with session_scope(hass=hass) as session: + native_states = [] + for db_state, db_state_attributes in session.query(States, StateAttributes): + state = db_state.to_native() + state.attributes = db_state_attributes.to_native() + native_states.append(state) + return native_states + + states: list[State] = await hass.async_add_executor_job(_fetch_states) + assert len(states) > 1 + for state in states: + assert ATTR_SOUND_MODE_LIST not in state.attributes + assert ATTR_ENTITY_PICTURE not in state.attributes + assert ATTR_INPUT_SOURCE_LIST not in state.attributes + assert ATTR_FRIENDLY_NAME in state.attributes From 0e6550ab704cbe847af3eea7ba0c71d3ee35b658 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Sat, 2 Apr 2022 21:48:32 -0600 Subject: [PATCH 091/238] Exclude static climate attributes from being recorded in the database (#69158) --- homeassistant/components/climate/recorder.py | 32 ++++++++++ tests/components/climate/test_recorder.py | 61 ++++++++++++++++++++ 2 files changed, 93 insertions(+) create mode 100644 homeassistant/components/climate/recorder.py create mode 100644 tests/components/climate/test_recorder.py diff --git a/homeassistant/components/climate/recorder.py b/homeassistant/components/climate/recorder.py new file mode 100644 index 00000000000..879e6bfbbac --- /dev/null +++ b/homeassistant/components/climate/recorder.py @@ -0,0 +1,32 @@ +"""Integration platform for recorder.""" +from __future__ import annotations + +from homeassistant.core import HomeAssistant, callback + +from .const import ( + ATTR_FAN_MODES, + ATTR_HVAC_MODES, + ATTR_MAX_HUMIDITY, + ATTR_MAX_TEMP, + ATTR_MIN_HUMIDITY, + ATTR_MIN_TEMP, + ATTR_PRESET_MODES, + ATTR_SWING_MODES, + ATTR_TARGET_TEMP_STEP, +) + + +@callback +def exclude_attributes(hass: HomeAssistant) -> set[str]: + """Exclude static attributes from being recorded in the database.""" + return { + ATTR_HVAC_MODES, + ATTR_FAN_MODES, + ATTR_SWING_MODES, + ATTR_MIN_TEMP, + ATTR_MAX_TEMP, + ATTR_MIN_HUMIDITY, + ATTR_MAX_HUMIDITY, + ATTR_TARGET_TEMP_STEP, + ATTR_PRESET_MODES, + } diff --git a/tests/components/climate/test_recorder.py b/tests/components/climate/test_recorder.py new file mode 100644 index 00000000000..f1642fca240 --- /dev/null +++ b/tests/components/climate/test_recorder.py @@ -0,0 +1,61 @@ +"""The tests for climate recorder.""" +from __future__ import annotations + +from datetime import timedelta + +from homeassistant.components import climate +from homeassistant.components.climate.const import ( + ATTR_FAN_MODES, + ATTR_HVAC_MODES, + ATTR_MAX_HUMIDITY, + ATTR_MAX_TEMP, + ATTR_MIN_HUMIDITY, + ATTR_MIN_TEMP, + ATTR_PRESET_MODES, + ATTR_SWING_MODES, + ATTR_TARGET_TEMP_STEP, +) +from homeassistant.components.recorder.models import StateAttributes, States +from homeassistant.components.recorder.util import session_scope +from homeassistant.const import ATTR_FRIENDLY_NAME +from homeassistant.core import State +from homeassistant.setup import async_setup_component +from homeassistant.util import dt as dt_util + +from tests.common import async_fire_time_changed, async_init_recorder_component +from tests.components.recorder.common import async_wait_recording_done_without_instance + + +async def test_exclude_attributes(hass): + """Test climate registered attributes to be excluded.""" + await async_init_recorder_component(hass) + await async_setup_component( + hass, climate.DOMAIN, {climate.DOMAIN: {"platform": "demo"}} + ) + await hass.async_block_till_done() + async_fire_time_changed(hass, dt_util.utcnow() + timedelta(minutes=5)) + await hass.async_block_till_done() + await async_wait_recording_done_without_instance(hass) + + def _fetch_states() -> list[State]: + with session_scope(hass=hass) as session: + native_states = [] + for db_state, db_state_attributes in session.query(States, StateAttributes): + state = db_state.to_native() + state.attributes = db_state_attributes.to_native() + native_states.append(state) + return native_states + + states: list[State] = await hass.async_add_executor_job(_fetch_states) + assert len(states) > 1 + for state in states: + assert ATTR_PRESET_MODES not in state.attributes + assert ATTR_HVAC_MODES not in state.attributes + assert ATTR_FAN_MODES not in state.attributes + assert ATTR_SWING_MODES not in state.attributes + assert ATTR_MIN_TEMP not in state.attributes + assert ATTR_MAX_TEMP not in state.attributes + assert ATTR_MIN_HUMIDITY not in state.attributes + assert ATTR_MAX_HUMIDITY not in state.attributes + assert ATTR_TARGET_TEMP_STEP not in state.attributes + assert ATTR_FRIENDLY_NAME in state.attributes From 47c1e48166d497fd1a4477c6790732def2bcfa5b Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Sat, 2 Apr 2022 21:46:41 -0600 Subject: [PATCH 092/238] Exclude static water_heater attributes from being recorded in the database (#69159) --- .../components/water_heater/recorder.py | 12 +++++ .../components/water_heater/test_recorder.py | 49 +++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 homeassistant/components/water_heater/recorder.py create mode 100644 tests/components/water_heater/test_recorder.py diff --git a/homeassistant/components/water_heater/recorder.py b/homeassistant/components/water_heater/recorder.py new file mode 100644 index 00000000000..d76b96936fa --- /dev/null +++ b/homeassistant/components/water_heater/recorder.py @@ -0,0 +1,12 @@ +"""Integration platform for recorder.""" +from __future__ import annotations + +from homeassistant.core import HomeAssistant, callback + +from . import ATTR_MAX_TEMP, ATTR_MIN_TEMP, ATTR_OPERATION_LIST + + +@callback +def exclude_attributes(hass: HomeAssistant) -> set[str]: + """Exclude static attributes from being recorded in the database.""" + return {ATTR_OPERATION_LIST, ATTR_MIN_TEMP, ATTR_MAX_TEMP} diff --git a/tests/components/water_heater/test_recorder.py b/tests/components/water_heater/test_recorder.py new file mode 100644 index 00000000000..b7e7fc4bb10 --- /dev/null +++ b/tests/components/water_heater/test_recorder.py @@ -0,0 +1,49 @@ +"""The tests for water_heater recorder.""" +from __future__ import annotations + +from datetime import timedelta + +from homeassistant.components import water_heater +from homeassistant.components.recorder.models import StateAttributes, States +from homeassistant.components.recorder.util import session_scope +from homeassistant.components.water_heater import ( + ATTR_MAX_TEMP, + ATTR_MIN_TEMP, + ATTR_OPERATION_LIST, +) +from homeassistant.const import ATTR_FRIENDLY_NAME +from homeassistant.core import State +from homeassistant.setup import async_setup_component +from homeassistant.util import dt as dt_util + +from tests.common import async_fire_time_changed, async_init_recorder_component +from tests.components.recorder.common import async_wait_recording_done_without_instance + + +async def test_exclude_attributes(hass): + """Test water_heater registered attributes to be excluded.""" + await async_init_recorder_component(hass) + await async_setup_component( + hass, water_heater.DOMAIN, {water_heater.DOMAIN: {"platform": "demo"}} + ) + await hass.async_block_till_done() + async_fire_time_changed(hass, dt_util.utcnow() + timedelta(minutes=5)) + await hass.async_block_till_done() + await async_wait_recording_done_without_instance(hass) + + def _fetch_states() -> list[State]: + with session_scope(hass=hass) as session: + native_states = [] + for db_state, db_state_attributes in session.query(States, StateAttributes): + state = db_state.to_native() + state.attributes = db_state_attributes.to_native() + native_states.append(state) + return native_states + + states: list[State] = await hass.async_add_executor_job(_fetch_states) + assert len(states) > 1 + for state in states: + assert ATTR_OPERATION_LIST not in state.attributes + assert ATTR_MIN_TEMP not in state.attributes + assert ATTR_MAX_TEMP not in state.attributes + assert ATTR_FRIENDLY_NAME in state.attributes From c769b20256c43a578b13b8e9713ded032b67cb42 Mon Sep 17 00:00:00 2001 From: Raman Gupta <7243222+raman325@users.noreply.github.com> Date: Sat, 2 Apr 2022 23:52:07 -0400 Subject: [PATCH 093/238] Make zwave_js config entry unique ID a string (#69163) * Make zwave_js config entry unique ID a string * Add test * Fix tests --- homeassistant/components/zwave_js/__init__.py | 11 +++++++++++ homeassistant/components/zwave_js/config_flow.py | 6 +++--- tests/components/zwave_js/test_config_flow.py | 13 ++++++++----- tests/components/zwave_js/test_init.py | 10 ++++++++++ 4 files changed, 32 insertions(+), 8 deletions(-) diff --git a/homeassistant/components/zwave_js/__init__.py b/homeassistant/components/zwave_js/__init__.py index 5d294931e66..b1fc585394e 100644 --- a/homeassistant/components/zwave_js/__init__.py +++ b/homeassistant/components/zwave_js/__init__.py @@ -770,3 +770,14 @@ def async_ensure_addon_updated(hass: HomeAssistant) -> None: if addon_manager.task_in_progress(): raise ConfigEntryNotReady addon_manager.async_schedule_update_addon(catch_error=True) + + +async def async_migrate_entry(hass: HomeAssistant, config_entry: ConfigEntry) -> bool: + """Migrate old entry.""" + if isinstance(config_entry.unique_id, int): # type: ignore[unreachable] + hass.config_entries.async_update_entry( # type: ignore[unreachable] + config_entry, + unique_id=str(config_entry.unique_id), + ) + + return True diff --git a/homeassistant/components/zwave_js/config_flow.py b/homeassistant/components/zwave_js/config_flow.py index c76e0692ad5..609da3390cc 100644 --- a/homeassistant/components/zwave_js/config_flow.py +++ b/homeassistant/components/zwave_js/config_flow.py @@ -411,7 +411,7 @@ class ConfigFlow(BaseZwaveJSFlow, config_entries.ConfigFlow, domain=DOMAIN): errors["base"] = "unknown" else: await self.async_set_unique_id( - version_info.home_id, raise_on_progress=False + str(version_info.home_id), raise_on_progress=False ) # Make sure we disable any add-on handling # if the controller is reconfigured in a manual step. @@ -445,7 +445,7 @@ class ConfigFlow(BaseZwaveJSFlow, config_entries.ConfigFlow, domain=DOMAIN): except CannotConnect: return self.async_abort(reason="cannot_connect") - await self.async_set_unique_id(version_info.home_id) + await self.async_set_unique_id(str(version_info.home_id)) self._abort_if_unique_id_configured(updates={CONF_URL: self.ws_address}) return await self.async_step_hassio_confirm() @@ -579,7 +579,7 @@ class ConfigFlow(BaseZwaveJSFlow, config_entries.ConfigFlow, domain=DOMAIN): raise AbortFlow("cannot_connect") from err await self.async_set_unique_id( - self.version_info.home_id, raise_on_progress=False + str(self.version_info.home_id), raise_on_progress=False ) self._abort_if_unique_id_configured( diff --git a/tests/components/zwave_js/test_config_flow.py b/tests/components/zwave_js/test_config_flow.py index 66fc9934ee1..3e40d67e2a4 100644 --- a/tests/components/zwave_js/test_config_flow.py +++ b/tests/components/zwave_js/test_config_flow.py @@ -169,7 +169,7 @@ async def test_manual(hass): } assert len(mock_setup.mock_calls) == 1 assert len(mock_setup_entry.mock_calls) == 1 - assert result2["result"].unique_id == 1234 + assert result2["result"].unique_id == "1234" async def slow_server_version(*args): @@ -243,7 +243,7 @@ async def test_manual_already_configured(hass): "integration_created_addon": True, }, title=TITLE, - unique_id=1234, + unique_id="1234", ) entry.add_to_hass(hass) @@ -401,7 +401,10 @@ async def test_abort_discovery_with_existing_entry( """Test discovery flow is aborted if an entry already exists.""" entry = MockConfigEntry( - domain=DOMAIN, data={"url": "ws://localhost:3000"}, title=TITLE, unique_id=1234 + domain=DOMAIN, + data={"url": "ws://localhost:3000"}, + title=TITLE, + unique_id="1234", ) entry.add_to_hass(hass) @@ -1039,7 +1042,7 @@ async def test_addon_running_already_configured( "s2_unauthenticated_key": "old987", }, title=TITLE, - unique_id=1234, + unique_id="1234", ) entry.add_to_hass(hass) @@ -1370,7 +1373,7 @@ async def test_addon_installed_already_configured( "s2_unauthenticated_key": "old987", }, title=TITLE, - unique_id=1234, + unique_id="1234", ) entry.add_to_hass(hass) diff --git a/tests/components/zwave_js/test_init.py b/tests/components/zwave_js/test_init.py index 7b3fd773839..9c260eda4c1 100644 --- a/tests/components/zwave_js/test_init.py +++ b/tests/components/zwave_js/test_init.py @@ -8,6 +8,7 @@ from zwave_js_server.exceptions import BaseZwaveJSServerError, InvalidServerVers from zwave_js_server.model.node import Node from homeassistant.components.hassio.handler import HassioAPIError +from homeassistant.components.zwave_js import async_migrate_entry from homeassistant.components.zwave_js.const import DOMAIN from homeassistant.components.zwave_js.helpers import get_device_id from homeassistant.config_entries import ConfigEntryDisabler, ConfigEntryState @@ -1327,3 +1328,12 @@ async def test_disabled_entity_on_value_removed(hass, zp3111, client, integratio | {battery_level_entity, binary_cover_entity, sensor_cover_entity} == new_unavailable_entities ) + + +async def test_async_migrate_entry(hass): + """Test async_migrate_entry.""" + entry = MockConfigEntry(domain=DOMAIN, unique_id=123456789) + assert isinstance(entry.unique_id, int) + await async_migrate_entry(hass, entry) + assert isinstance(entry.unique_id, str) + assert entry.unique_id == "123456789" From 9a91a7edf51c9e8720fd9db7360919cedbd19d67 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Sun, 3 Apr 2022 05:51:42 -0600 Subject: [PATCH 094/238] Exclude supported features and attribution from being recorded in the database (#69165) --- homeassistant/components/recorder/const.py | 3 +++ homeassistant/components/recorder/models.py | 13 +++++++------ tests/components/camera/test_recorder.py | 12 ++++++++++-- 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/homeassistant/components/recorder/const.py b/homeassistant/components/recorder/const.py index 13f833627a4..0fce9657624 100644 --- a/homeassistant/components/recorder/const.py +++ b/homeassistant/components/recorder/const.py @@ -4,6 +4,7 @@ from functools import partial import json from typing import Final +from homeassistant.const import ATTR_ATTRIBUTION, ATTR_SUPPORTED_FEATURES from homeassistant.helpers.json import JSONEncoder DATA_INSTANCE = "recorder_instance" @@ -25,3 +26,5 @@ MAX_ROWS_TO_PURGE = 998 DB_WORKER_PREFIX = "DbWorker" JSON_DUMP: Final = partial(json.dumps, cls=JSONEncoder, separators=(",", ":")) + +ALL_DOMAIN_EXCLUDE_ATTRS = {ATTR_ATTRIBUTION, ATTR_SUPPORTED_FEATURES} diff --git a/homeassistant/components/recorder/models.py b/homeassistant/components/recorder/models.py index afadde560a0..384bf4b22e2 100644 --- a/homeassistant/components/recorder/models.py +++ b/homeassistant/components/recorder/models.py @@ -38,7 +38,7 @@ from homeassistant.core import Context, Event, EventOrigin, State, split_entity_ from homeassistant.helpers.typing import UNDEFINED, UndefinedType import homeassistant.util.dt as dt_util -from .const import JSON_DUMP +from .const import ALL_DOMAIN_EXCLUDE_ATTRS, JSON_DUMP # SQLAlchemy Schema # pylint: disable=invalid-name @@ -269,11 +269,12 @@ class StateAttributes(Base): # type: ignore[misc,valid-type] if state is None: return "{}" domain = split_entity_id(state.entity_id)[0] - if exclude_attrs := exclude_attrs_by_domain.get(domain): - return JSON_DUMP( - {k: v for k, v in state.attributes.items() if k not in exclude_attrs} - ) - return JSON_DUMP(state.attributes) + exclude_attrs = ( + exclude_attrs_by_domain.get(domain, set()) | ALL_DOMAIN_EXCLUDE_ATTRS + ) + return JSON_DUMP( + {k: v for k, v in state.attributes.items() if k not in exclude_attrs} + ) @staticmethod def hash_shared_attrs(shared_attrs: str) -> int: diff --git a/tests/components/camera/test_recorder.py b/tests/components/camera/test_recorder.py index 1496c834e3e..76654a2dd9c 100644 --- a/tests/components/camera/test_recorder.py +++ b/tests/components/camera/test_recorder.py @@ -6,6 +6,12 @@ from datetime import timedelta from homeassistant.components import camera from homeassistant.components.recorder.models import StateAttributes, States from homeassistant.components.recorder.util import session_scope +from homeassistant.const import ( + ATTR_ATTRIBUTION, + ATTR_ENTITY_PICTURE, + ATTR_FRIENDLY_NAME, + ATTR_SUPPORTED_FEATURES, +) from homeassistant.core import State from homeassistant.setup import async_setup_component from homeassistant.util import dt as dt_util @@ -38,5 +44,7 @@ async def test_exclude_attributes(hass): assert len(states) > 1 for state in states: assert "access_token" not in state.attributes - assert "entity_picture" not in state.attributes - assert "friendly_name" in state.attributes + assert ATTR_ENTITY_PICTURE not in state.attributes + assert ATTR_ATTRIBUTION not in state.attributes + assert ATTR_SUPPORTED_FEATURES not in state.attributes + assert ATTR_FRIENDLY_NAME in state.attributes From 90cb9ccde209701b7c718e9fd756fd8498a30f7a Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Mon, 4 Apr 2022 03:19:23 +1200 Subject: [PATCH 095/238] ESPHome: Remove disconnect callbacks after they are done (#69169) --- homeassistant/components/esphome/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/homeassistant/components/esphome/__init__.py b/homeassistant/components/esphome/__init__.py index fd9b5dfd6d2..8aa2dba4d07 100644 --- a/homeassistant/components/esphome/__init__.py +++ b/homeassistant/components/esphome/__init__.py @@ -520,6 +520,7 @@ async def _cleanup_instance( data = domain_data.pop_entry_data(entry) for disconnect_cb in data.disconnect_callbacks: disconnect_cb() + data.disconnect_callbacks = [] for cleanup_callback in data.cleanup_callbacks: cleanup_callback() await data.client.disconnect() From 2e13fb3c24551d369a34a1f7114e00d1ebe2bae9 Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Sun, 3 Apr 2022 13:15:22 +0200 Subject: [PATCH 096/238] Unsubscribe listeners when entity meter sensor is removed (#69172) --- .../components/utility_meter/sensor.py | 40 +++++++++++++------ 1 file changed, 28 insertions(+), 12 deletions(-) diff --git a/homeassistant/components/utility_meter/sensor.py b/homeassistant/components/utility_meter/sensor.py index 511dc9ee138..7b1f28ff5b4 100644 --- a/homeassistant/components/utility_meter/sensor.py +++ b/homeassistant/components/utility_meter/sensor.py @@ -344,10 +344,12 @@ class UtilityMeterSensor(RestoreEntity, SensorEntity): async def _async_reset_meter(self, event): """Determine cycle - Helper function for larger than daily cycles.""" if self._cron_pattern is not None: - async_track_point_in_time( - self.hass, - self._async_reset_meter, - croniter(self._cron_pattern, dt_util.now()).get_next(datetime), + self.async_on_remove( + async_track_point_in_time( + self.hass, + self._async_reset_meter, + croniter(self._cron_pattern, dt_util.now()).get_next(datetime), + ) ) await self.async_reset_meter(self._tariff_entity) @@ -372,13 +374,19 @@ class UtilityMeterSensor(RestoreEntity, SensorEntity): await super().async_added_to_hass() if self._cron_pattern is not None: - async_track_point_in_time( - self.hass, - self._async_reset_meter, - croniter(self._cron_pattern, dt_util.now()).get_next(datetime), + self.async_on_remove( + async_track_point_in_time( + self.hass, + self._async_reset_meter, + croniter(self._cron_pattern, dt_util.now()).get_next(datetime), + ) ) - async_dispatcher_connect(self.hass, SIGNAL_RESET_METER, self.async_reset_meter) + self.async_on_remove( + async_dispatcher_connect( + self.hass, SIGNAL_RESET_METER, self.async_reset_meter + ) + ) if state := await self.async_get_last_state(): try: @@ -413,8 +421,10 @@ class UtilityMeterSensor(RestoreEntity, SensorEntity): _LOGGER.debug( "<%s> tracks utility meter %s", self.name, self._tariff_entity ) - async_track_state_change_event( - self.hass, [self._tariff_entity], self.async_tariff_change + self.async_on_remove( + async_track_state_change_event( + self.hass, [self._tariff_entity], self.async_tariff_change + ) ) tariff_entity_state = self.hass.states.get(self._tariff_entity) @@ -435,7 +445,13 @@ class UtilityMeterSensor(RestoreEntity, SensorEntity): self.hass, [self._sensor_source_id], self.async_reading ) - async_at_start(self.hass, async_source_tracking) + self.async_on_remove(async_at_start(self.hass, async_source_tracking)) + + async def async_will_remove_from_hass(self) -> None: + """Run when entity will be removed from hass.""" + if self._collecting: + self._collecting() + self._collecting = None @property def name(self): From 5a96b0ffbc8d572103f10a48af19ccda300b32b9 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Sun, 3 Apr 2022 07:52:46 -0600 Subject: [PATCH 097/238] Exclude static fan attributes from being recorded in the database (#69192) --- homeassistant/components/fan/recorder.py | 12 +++++++ tests/components/fan/test_recorder.py | 41 ++++++++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 homeassistant/components/fan/recorder.py create mode 100644 tests/components/fan/test_recorder.py diff --git a/homeassistant/components/fan/recorder.py b/homeassistant/components/fan/recorder.py new file mode 100644 index 00000000000..e7305b64f16 --- /dev/null +++ b/homeassistant/components/fan/recorder.py @@ -0,0 +1,12 @@ +"""Integration platform for recorder.""" +from __future__ import annotations + +from homeassistant.core import HomeAssistant, callback + +from . import ATTR_PRESET_MODES + + +@callback +def exclude_attributes(hass: HomeAssistant) -> set[str]: + """Exclude static attributes from being recorded in the database.""" + return {ATTR_PRESET_MODES} diff --git a/tests/components/fan/test_recorder.py b/tests/components/fan/test_recorder.py new file mode 100644 index 00000000000..360e03d2491 --- /dev/null +++ b/tests/components/fan/test_recorder.py @@ -0,0 +1,41 @@ +"""The tests for fan recorder.""" +from __future__ import annotations + +from datetime import timedelta + +from homeassistant.components import fan +from homeassistant.components.fan import ATTR_PRESET_MODES +from homeassistant.components.recorder.models import StateAttributes, States +from homeassistant.components.recorder.util import session_scope +from homeassistant.const import ATTR_FRIENDLY_NAME +from homeassistant.core import State +from homeassistant.setup import async_setup_component +from homeassistant.util import dt as dt_util + +from tests.common import async_fire_time_changed, async_init_recorder_component +from tests.components.recorder.common import async_wait_recording_done_without_instance + + +async def test_exclude_attributes(hass): + """Test fan registered attributes to be excluded.""" + await async_init_recorder_component(hass) + await async_setup_component(hass, fan.DOMAIN, {fan.DOMAIN: {"platform": "demo"}}) + await hass.async_block_till_done() + async_fire_time_changed(hass, dt_util.utcnow() + timedelta(minutes=5)) + await hass.async_block_till_done() + await async_wait_recording_done_without_instance(hass) + + def _fetch_states() -> list[State]: + with session_scope(hass=hass) as session: + native_states = [] + for db_state, db_state_attributes in session.query(States, StateAttributes): + state = db_state.to_native() + state.attributes = db_state_attributes.to_native() + native_states.append(state) + return native_states + + states: list[State] = await hass.async_add_executor_job(_fetch_states) + assert len(states) > 1 + for state in states: + assert ATTR_PRESET_MODES not in state.attributes + assert ATTR_FRIENDLY_NAME in state.attributes From 8fa8716387b879b74fca6e2090a321ac09c50f15 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Sun, 3 Apr 2022 07:42:29 -0600 Subject: [PATCH 098/238] Exclude static humidifier attributes from being recorded in the database (#69193) --- .../components/humidifier/recorder.py | 16 ++++++ tests/components/humidifier/test_recorder.py | 49 +++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 homeassistant/components/humidifier/recorder.py create mode 100644 tests/components/humidifier/test_recorder.py diff --git a/homeassistant/components/humidifier/recorder.py b/homeassistant/components/humidifier/recorder.py new file mode 100644 index 00000000000..53df96605d6 --- /dev/null +++ b/homeassistant/components/humidifier/recorder.py @@ -0,0 +1,16 @@ +"""Integration platform for recorder.""" +from __future__ import annotations + +from homeassistant.core import HomeAssistant, callback + +from . import ATTR_AVAILABLE_MODES, ATTR_MAX_HUMIDITY, ATTR_MIN_HUMIDITY + + +@callback +def exclude_attributes(hass: HomeAssistant) -> set[str]: + """Exclude static attributes from being recorded in the database.""" + return { + ATTR_MIN_HUMIDITY, + ATTR_MAX_HUMIDITY, + ATTR_AVAILABLE_MODES, + } diff --git a/tests/components/humidifier/test_recorder.py b/tests/components/humidifier/test_recorder.py new file mode 100644 index 00000000000..c7505574b98 --- /dev/null +++ b/tests/components/humidifier/test_recorder.py @@ -0,0 +1,49 @@ +"""The tests for humidifier recorder.""" +from __future__ import annotations + +from datetime import timedelta + +from homeassistant.components import humidifier +from homeassistant.components.humidifier import ( + ATTR_AVAILABLE_MODES, + ATTR_MAX_HUMIDITY, + ATTR_MIN_HUMIDITY, +) +from homeassistant.components.recorder.models import StateAttributes, States +from homeassistant.components.recorder.util import session_scope +from homeassistant.const import ATTR_FRIENDLY_NAME +from homeassistant.core import State +from homeassistant.setup import async_setup_component +from homeassistant.util import dt as dt_util + +from tests.common import async_fire_time_changed, async_init_recorder_component +from tests.components.recorder.common import async_wait_recording_done_without_instance + + +async def test_exclude_attributes(hass): + """Test humidifier registered attributes to be excluded.""" + await async_init_recorder_component(hass) + await async_setup_component( + hass, humidifier.DOMAIN, {humidifier.DOMAIN: {"platform": "demo"}} + ) + await hass.async_block_till_done() + async_fire_time_changed(hass, dt_util.utcnow() + timedelta(minutes=5)) + await hass.async_block_till_done() + await async_wait_recording_done_without_instance(hass) + + def _fetch_states() -> list[State]: + with session_scope(hass=hass) as session: + native_states = [] + for db_state, db_state_attributes in session.query(States, StateAttributes): + state = db_state.to_native() + state.attributes = db_state_attributes.to_native() + native_states.append(state) + return native_states + + states: list[State] = await hass.async_add_executor_job(_fetch_states) + assert len(states) > 1 + for state in states: + assert ATTR_MIN_HUMIDITY not in state.attributes + assert ATTR_MAX_HUMIDITY not in state.attributes + assert ATTR_AVAILABLE_MODES not in state.attributes + assert ATTR_FRIENDLY_NAME in state.attributes From cebf53c340705da4d2471f59b85836aff0ae7e81 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Sun, 3 Apr 2022 07:43:44 -0600 Subject: [PATCH 099/238] Exclude static number attributes from being recorded in the database (#69194) --- homeassistant/components/number/recorder.py | 17 ++++++++ tests/components/number/test_recorder.py | 46 +++++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 homeassistant/components/number/recorder.py create mode 100644 tests/components/number/test_recorder.py diff --git a/homeassistant/components/number/recorder.py b/homeassistant/components/number/recorder.py new file mode 100644 index 00000000000..39418a48878 --- /dev/null +++ b/homeassistant/components/number/recorder.py @@ -0,0 +1,17 @@ +"""Integration platform for recorder.""" +from __future__ import annotations + +from homeassistant.core import HomeAssistant, callback + +from . import ATTR_MAX, ATTR_MIN, ATTR_MODE, ATTR_STEP + + +@callback +def exclude_attributes(hass: HomeAssistant) -> set[str]: + """Exclude static attributes from being recorded in the database.""" + return { + ATTR_MIN, + ATTR_MAX, + ATTR_STEP, + ATTR_MODE, + } diff --git a/tests/components/number/test_recorder.py b/tests/components/number/test_recorder.py new file mode 100644 index 00000000000..26eca4eb4da --- /dev/null +++ b/tests/components/number/test_recorder.py @@ -0,0 +1,46 @@ +"""The tests for number recorder.""" +from __future__ import annotations + +from datetime import timedelta + +from homeassistant.components import number +from homeassistant.components.number import ATTR_MAX, ATTR_MIN, ATTR_MODE, ATTR_STEP +from homeassistant.components.recorder.models import StateAttributes, States +from homeassistant.components.recorder.util import session_scope +from homeassistant.const import ATTR_FRIENDLY_NAME +from homeassistant.core import State +from homeassistant.setup import async_setup_component +from homeassistant.util import dt as dt_util + +from tests.common import async_fire_time_changed, async_init_recorder_component +from tests.components.recorder.common import async_wait_recording_done_without_instance + + +async def test_exclude_attributes(hass): + """Test number registered attributes to be excluded.""" + await async_init_recorder_component(hass) + await async_setup_component( + hass, number.DOMAIN, {number.DOMAIN: {"platform": "demo"}} + ) + await hass.async_block_till_done() + async_fire_time_changed(hass, dt_util.utcnow() + timedelta(minutes=5)) + await hass.async_block_till_done() + await async_wait_recording_done_without_instance(hass) + + def _fetch_states() -> list[State]: + with session_scope(hass=hass) as session: + native_states = [] + for db_state, db_state_attributes in session.query(States, StateAttributes): + state = db_state.to_native() + state.attributes = db_state_attributes.to_native() + native_states.append(state) + return native_states + + states: list[State] = await hass.async_add_executor_job(_fetch_states) + assert len(states) > 1 + for state in states: + assert ATTR_MIN not in state.attributes + assert ATTR_MAX not in state.attributes + assert ATTR_STEP not in state.attributes + assert ATTR_MODE not in state.attributes + assert ATTR_FRIENDLY_NAME in state.attributes From 7cfaf462878f3b410878f30ed2e21da61792f998 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Sun, 3 Apr 2022 09:17:55 -0600 Subject: [PATCH 100/238] Exclude static select attributes from being recorded in the database (#69195) --- homeassistant/components/select/recorder.py | 12 ++++++ tests/components/select/test_recorder.py | 43 +++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 homeassistant/components/select/recorder.py create mode 100644 tests/components/select/test_recorder.py diff --git a/homeassistant/components/select/recorder.py b/homeassistant/components/select/recorder.py new file mode 100644 index 00000000000..6660c8383d0 --- /dev/null +++ b/homeassistant/components/select/recorder.py @@ -0,0 +1,12 @@ +"""Integration platform for recorder.""" +from __future__ import annotations + +from homeassistant.core import HomeAssistant, callback + +from . import ATTR_OPTIONS + + +@callback +def exclude_attributes(hass: HomeAssistant) -> set[str]: + """Exclude static attributes from being recorded in the database.""" + return {ATTR_OPTIONS} diff --git a/tests/components/select/test_recorder.py b/tests/components/select/test_recorder.py new file mode 100644 index 00000000000..f6366045338 --- /dev/null +++ b/tests/components/select/test_recorder.py @@ -0,0 +1,43 @@ +"""The tests for select recorder.""" +from __future__ import annotations + +from datetime import timedelta + +from homeassistant.components import select +from homeassistant.components.recorder.models import StateAttributes, States +from homeassistant.components.recorder.util import session_scope +from homeassistant.components.select import ATTR_OPTIONS +from homeassistant.const import ATTR_FRIENDLY_NAME +from homeassistant.core import State +from homeassistant.setup import async_setup_component +from homeassistant.util import dt as dt_util + +from tests.common import async_fire_time_changed, async_init_recorder_component +from tests.components.recorder.common import async_wait_recording_done_without_instance + + +async def test_exclude_attributes(hass): + """Test select registered attributes to be excluded.""" + await async_init_recorder_component(hass) + await async_setup_component( + hass, select.DOMAIN, {select.DOMAIN: {"platform": "demo"}} + ) + await hass.async_block_till_done() + async_fire_time_changed(hass, dt_util.utcnow() + timedelta(minutes=5)) + await hass.async_block_till_done() + await async_wait_recording_done_without_instance(hass) + + def _fetch_states() -> list[State]: + with session_scope(hass=hass) as session: + native_states = [] + for db_state, db_state_attributes in session.query(States, StateAttributes): + state = db_state.to_native() + state.attributes = db_state_attributes.to_native() + native_states.append(state) + return native_states + + states: list[State] = await hass.async_add_executor_job(_fetch_states) + assert len(states) > 1 + for state in states: + assert ATTR_OPTIONS not in state.attributes + assert ATTR_FRIENDLY_NAME in state.attributes From e18d61224df5099882871fe3a40be054bd3567a5 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Sun, 3 Apr 2022 09:16:49 -0600 Subject: [PATCH 101/238] Exclude static siren attributes from being recorded in the database (#69196) --- homeassistant/components/siren/recorder.py | 12 ++++++ tests/components/siren/test_recorder.py | 43 ++++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 homeassistant/components/siren/recorder.py create mode 100644 tests/components/siren/test_recorder.py diff --git a/homeassistant/components/siren/recorder.py b/homeassistant/components/siren/recorder.py new file mode 100644 index 00000000000..3daf4fc52b2 --- /dev/null +++ b/homeassistant/components/siren/recorder.py @@ -0,0 +1,12 @@ +"""Integration platform for recorder.""" +from __future__ import annotations + +from homeassistant.core import HomeAssistant, callback + +from . import ATTR_AVAILABLE_TONES + + +@callback +def exclude_attributes(hass: HomeAssistant) -> set[str]: + """Exclude static attributes from being recorded in the database.""" + return {ATTR_AVAILABLE_TONES} diff --git a/tests/components/siren/test_recorder.py b/tests/components/siren/test_recorder.py new file mode 100644 index 00000000000..89d770fbfb3 --- /dev/null +++ b/tests/components/siren/test_recorder.py @@ -0,0 +1,43 @@ +"""The tests for siren recorder.""" +from __future__ import annotations + +from datetime import timedelta + +from homeassistant.components import siren +from homeassistant.components.recorder.models import StateAttributes, States +from homeassistant.components.recorder.util import session_scope +from homeassistant.components.siren import ATTR_AVAILABLE_TONES +from homeassistant.const import ATTR_FRIENDLY_NAME +from homeassistant.core import State +from homeassistant.setup import async_setup_component +from homeassistant.util import dt as dt_util + +from tests.common import async_fire_time_changed, async_init_recorder_component +from tests.components.recorder.common import async_wait_recording_done_without_instance + + +async def test_exclude_attributes(hass): + """Test siren registered attributes to be excluded.""" + await async_init_recorder_component(hass) + await async_setup_component( + hass, siren.DOMAIN, {siren.DOMAIN: {"platform": "demo"}} + ) + await hass.async_block_till_done() + async_fire_time_changed(hass, dt_util.utcnow() + timedelta(minutes=5)) + await hass.async_block_till_done() + await async_wait_recording_done_without_instance(hass) + + def _fetch_states() -> list[State]: + with session_scope(hass=hass) as session: + native_states = [] + for db_state, db_state_attributes in session.query(States, StateAttributes): + state = db_state.to_native() + state.attributes = db_state_attributes.to_native() + native_states.append(state) + return native_states + + states: list[State] = await hass.async_add_executor_job(_fetch_states) + assert len(states) > 1 + for state in states: + assert ATTR_AVAILABLE_TONES not in state.attributes + assert ATTR_FRIENDLY_NAME in state.attributes From 1ae45fa7ada8372f36e466726450dee766a6df47 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Sun, 3 Apr 2022 09:15:50 -0600 Subject: [PATCH 102/238] Exclude static vacuum attributes from being recorded in the database (#69199) --- homeassistant/components/vacuum/recorder.py | 12 ++++++ tests/components/vacuum/test_recorder.py | 43 +++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 homeassistant/components/vacuum/recorder.py create mode 100644 tests/components/vacuum/test_recorder.py diff --git a/homeassistant/components/vacuum/recorder.py b/homeassistant/components/vacuum/recorder.py new file mode 100644 index 00000000000..7dc7e9e0408 --- /dev/null +++ b/homeassistant/components/vacuum/recorder.py @@ -0,0 +1,12 @@ +"""Integration platform for recorder.""" +from __future__ import annotations + +from homeassistant.core import HomeAssistant, callback + +from . import ATTR_FAN_SPEED_LIST + + +@callback +def exclude_attributes(hass: HomeAssistant) -> set[str]: + """Exclude static attributes from being recorded in the database.""" + return {ATTR_FAN_SPEED_LIST} diff --git a/tests/components/vacuum/test_recorder.py b/tests/components/vacuum/test_recorder.py new file mode 100644 index 00000000000..0717c149d19 --- /dev/null +++ b/tests/components/vacuum/test_recorder.py @@ -0,0 +1,43 @@ +"""The tests for vacuum recorder.""" +from __future__ import annotations + +from datetime import timedelta + +from homeassistant.components import vacuum +from homeassistant.components.recorder.models import StateAttributes, States +from homeassistant.components.recorder.util import session_scope +from homeassistant.components.vacuum import ATTR_FAN_SPEED_LIST +from homeassistant.const import ATTR_FRIENDLY_NAME +from homeassistant.core import State +from homeassistant.setup import async_setup_component +from homeassistant.util import dt as dt_util + +from tests.common import async_fire_time_changed, async_init_recorder_component +from tests.components.recorder.common import async_wait_recording_done_without_instance + + +async def test_exclude_attributes(hass): + """Test vacuum registered attributes to be excluded.""" + await async_init_recorder_component(hass) + await async_setup_component( + hass, vacuum.DOMAIN, {vacuum.DOMAIN: {"platform": "demo"}} + ) + await hass.async_block_till_done() + async_fire_time_changed(hass, dt_util.utcnow() + timedelta(minutes=5)) + await hass.async_block_till_done() + await async_wait_recording_done_without_instance(hass) + + def _fetch_states() -> list[State]: + with session_scope(hass=hass) as session: + native_states = [] + for db_state, db_state_attributes in session.query(States, StateAttributes): + state = db_state.to_native() + state.attributes = db_state_attributes.to_native() + native_states.append(state) + return native_states + + states: list[State] = await hass.async_add_executor_job(_fetch_states) + assert len(states) > 1 + for state in states: + assert ATTR_FAN_SPEED_LIST not in state.attributes + assert ATTR_FRIENDLY_NAME in state.attributes From 814f92a75c1e0c03ca75c595e194d87d96532482 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Sun, 3 Apr 2022 20:38:05 +0200 Subject: [PATCH 103/238] Set brand icon as entity picture on update entities (#69200) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Joakim Sørensen --- homeassistant/components/update/__init__.py | 14 +++++++++++ homeassistant/components/wled/update.py | 5 ---- tests/components/demo/test_update.py | 28 ++++++++++++++++++++- tests/components/update/test_init.py | 10 +++++++- tests/components/wled/test_update.py | 2 +- 5 files changed, 51 insertions(+), 8 deletions(-) diff --git a/homeassistant/components/update/__init__.py b/homeassistant/components/update/__init__.py index 6d4b36e3411..90418dbf8b9 100644 --- a/homeassistant/components/update/__init__.py +++ b/homeassistant/components/update/__init__.py @@ -208,6 +208,20 @@ class UpdateEntity(RestoreEntity): return EntityCategory.CONFIG return EntityCategory.DIAGNOSTIC + @property + def entity_picture(self) -> str | None: + """Return the entity picture to use in the frontend. + + Update entities return the brand icon based on the integration + domain by default. + """ + if self.platform is None: + return None + + return ( + f"https://brands.home-assistant.io/_/{self.platform.platform_name}/icon.png" + ) + @property def in_progress(self) -> bool | int | None: """Update installation progress. diff --git a/homeassistant/components/wled/update.py b/homeassistant/components/wled/update.py index c0c099ead65..f0fc532b3b3 100644 --- a/homeassistant/components/wled/update.py +++ b/homeassistant/components/wled/update.py @@ -50,11 +50,6 @@ class WLEDUpdateEntity(WLEDEntity, UpdateEntity): return None return str(version) - @property - def entity_picture(self) -> str: - """Return the entity picture to use in the frontend, if any.""" - return "https://brands.home-assistant.io/wled/icon.png" - @property def latest_version(self) -> str | None: """Latest version available for install.""" diff --git a/tests/components/demo/test_update.py b/tests/components/demo/test_update.py index ebee402049c..35780114f29 100644 --- a/tests/components/demo/test_update.py +++ b/tests/components/demo/test_update.py @@ -12,7 +12,13 @@ from homeassistant.components.update.const import ( ATTR_RELEASE_URL, ATTR_TITLE, ) -from homeassistant.const import ATTR_DEVICE_CLASS, ATTR_ENTITY_ID, STATE_OFF, STATE_ON +from homeassistant.const import ( + ATTR_DEVICE_CLASS, + ATTR_ENTITY_ID, + ATTR_ENTITY_PICTURE, + STATE_OFF, + STATE_ON, +) from homeassistant.core import HomeAssistant, callback from homeassistant.helpers.event import async_track_state_change_event from homeassistant.setup import async_setup_component @@ -37,6 +43,10 @@ def test_setup_params(hass: HomeAssistant) -> None: state.attributes[ATTR_RELEASE_SUMMARY] == "Awesome update, fixing everything!" ) assert state.attributes[ATTR_RELEASE_URL] == "https://www.example.com/release/1.0.1" + assert ( + state.attributes[ATTR_ENTITY_PICTURE] + == "https://brands.home-assistant.io/_/demo/icon.png" + ) state = hass.states.get("update.demo_no_update") assert state @@ -46,6 +56,10 @@ def test_setup_params(hass: HomeAssistant) -> None: assert state.attributes[ATTR_LATEST_VERSION] == "1.0.0" assert state.attributes[ATTR_RELEASE_SUMMARY] is None assert state.attributes[ATTR_RELEASE_URL] is None + assert ( + state.attributes[ATTR_ENTITY_PICTURE] + == "https://brands.home-assistant.io/_/demo/icon.png" + ) state = hass.states.get("update.demo_add_on") assert state @@ -57,6 +71,10 @@ def test_setup_params(hass: HomeAssistant) -> None: state.attributes[ATTR_RELEASE_SUMMARY] == "Awesome update, fixing everything!" ) assert state.attributes[ATTR_RELEASE_URL] == "https://www.example.com/release/1.0.1" + assert ( + state.attributes[ATTR_ENTITY_PICTURE] + == "https://brands.home-assistant.io/_/demo/icon.png" + ) state = hass.states.get("update.demo_living_room_bulb_update") assert state @@ -69,6 +87,10 @@ def test_setup_params(hass: HomeAssistant) -> None: state.attributes[ATTR_RELEASE_URL] == "https://www.example.com/release/1.93.3" ) assert state.attributes[ATTR_DEVICE_CLASS] == UpdateDeviceClass.FIRMWARE + assert ( + state.attributes[ATTR_ENTITY_PICTURE] + == "https://brands.home-assistant.io/_/demo/icon.png" + ) state = hass.states.get("update.demo_update_with_progress") assert state @@ -81,6 +103,10 @@ def test_setup_params(hass: HomeAssistant) -> None: state.attributes[ATTR_RELEASE_URL] == "https://www.example.com/release/1.93.3" ) assert state.attributes[ATTR_DEVICE_CLASS] == UpdateDeviceClass.FIRMWARE + assert ( + state.attributes[ATTR_ENTITY_PICTURE] + == "https://brands.home-assistant.io/_/demo/icon.png" + ) async def test_update_with_progress(hass: HomeAssistant) -> None: diff --git a/tests/components/update/test_init.py b/tests/components/update/test_init.py index 3a40b51cca2..c4078460f57 100644 --- a/tests/components/update/test_init.py +++ b/tests/components/update/test_init.py @@ -39,7 +39,7 @@ from homeassistant.helpers.entity import EntityCategory from homeassistant.helpers.event import async_track_state_change_event from homeassistant.setup import async_setup_component -from tests.common import mock_restore_cache +from tests.common import MockEntityPlatform, mock_restore_cache class MockUpdateEntity(UpdateEntity): @@ -58,6 +58,7 @@ async def test_update(hass: HomeAssistant) -> None: update._attr_title = "Title" assert update.entity_category is EntityCategory.DIAGNOSTIC + assert update.entity_picture is None assert update.installed_version == "1.0.0" assert update.latest_version == "1.0.1" assert update.release_summary == "Summary" @@ -76,6 +77,13 @@ async def test_update(hass: HomeAssistant) -> None: ATTR_TITLE: "Title", } + # Test with platform + update.platform = MockEntityPlatform(hass) + assert ( + update.entity_picture + == "https://brands.home-assistant.io/_/test_platform/icon.png" + ) + # Test no update available update._attr_installed_version = "1.0.0" update._attr_latest_version = "1.0.0" diff --git a/tests/components/wled/test_update.py b/tests/components/wled/test_update.py index e64018aba59..2ddba81ac8b 100644 --- a/tests/components/wled/test_update.py +++ b/tests/components/wled/test_update.py @@ -49,7 +49,7 @@ async def test_update_available( assert state.state == STATE_ON assert ( state.attributes[ATTR_ENTITY_PICTURE] - == "https://brands.home-assistant.io/wled/icon.png" + == "https://brands.home-assistant.io/_/wled/icon.png" ) assert state.attributes[ATTR_INSTALLED_VERSION] == "0.8.5" assert state.attributes[ATTR_LATEST_VERSION] == "0.12.0" From 2916d35626b4ab1593907d82f40c35c4e77da18f Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Sun, 3 Apr 2022 21:41:51 +0200 Subject: [PATCH 104/238] Exclude update entity picture attribute from recorder (#69201) --- homeassistant/components/update/recorder.py | 5 +++-- tests/components/update/test_recorder.py | 7 ++++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/update/recorder.py b/homeassistant/components/update/recorder.py index cba4cab8ec2..1b22360761f 100644 --- a/homeassistant/components/update/recorder.py +++ b/homeassistant/components/update/recorder.py @@ -1,12 +1,13 @@ """Integration platform for recorder.""" from __future__ import annotations +from homeassistant.const import ATTR_ENTITY_PICTURE from homeassistant.core import HomeAssistant, callback -from . import ATTR_IN_PROGRESS, ATTR_RELEASE_SUMMARY +from .const import ATTR_IN_PROGRESS, ATTR_RELEASE_SUMMARY @callback def exclude_attributes(hass: HomeAssistant) -> set[str]: """Exclude large and chatty update attributes from being recorded in the database.""" - return {ATTR_IN_PROGRESS, ATTR_RELEASE_SUMMARY} + return {ATTR_ENTITY_PICTURE, ATTR_IN_PROGRESS, ATTR_RELEASE_SUMMARY} diff --git a/tests/components/update/test_recorder.py b/tests/components/update/test_recorder.py index 6d4ec567182..9e1767c190c 100644 --- a/tests/components/update/test_recorder.py +++ b/tests/components/update/test_recorder.py @@ -11,7 +11,7 @@ from homeassistant.components.update.const import ( ATTR_RELEASE_SUMMARY, DOMAIN, ) -from homeassistant.const import CONF_PLATFORM +from homeassistant.const import ATTR_ENTITY_PICTURE, CONF_PLATFORM from homeassistant.core import HomeAssistant, State from homeassistant.setup import async_setup_component from homeassistant.util import dt as dt_util @@ -31,6 +31,10 @@ async def test_exclude_attributes( await hass.async_block_till_done() state = hass.states.get("update.update_already_in_progress") assert state.attributes[ATTR_IN_PROGRESS] == 50 + assert ( + state.attributes[ATTR_ENTITY_PICTURE] + == "https://brands.home-assistant.io/_/test/icon.png" + ) await async_setup_component(hass, DOMAIN, {}) await hass.async_block_till_done() @@ -50,6 +54,7 @@ async def test_exclude_attributes( states: list[State] = await hass.async_add_executor_job(_fetch_states) assert len(states) > 1 for state in states: + assert ATTR_ENTITY_PICTURE not in state.attributes assert ATTR_IN_PROGRESS not in state.attributes assert ATTR_RELEASE_SUMMARY not in state.attributes assert ATTR_INSTALLED_VERSION in state.attributes From 8ce1b104ebb9bf706e343a6e730ddb5dc669f360 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Sun, 3 Apr 2022 20:16:12 +0200 Subject: [PATCH 105/238] Exclude weather forecast attribute from recorder (#69205) --- homeassistant/components/weather/recorder.py | 12 ++++++ tests/components/weather/test_recorder.py | 45 ++++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 homeassistant/components/weather/recorder.py create mode 100644 tests/components/weather/test_recorder.py diff --git a/homeassistant/components/weather/recorder.py b/homeassistant/components/weather/recorder.py new file mode 100644 index 00000000000..1c887ea5202 --- /dev/null +++ b/homeassistant/components/weather/recorder.py @@ -0,0 +1,12 @@ +"""Integration platform for recorder.""" +from __future__ import annotations + +from homeassistant.core import HomeAssistant, callback + +from . import ATTR_FORECAST + + +@callback +def exclude_attributes(hass: HomeAssistant) -> set[str]: + """Exclude (often large) forecasts from being recorded in the database.""" + return {ATTR_FORECAST} diff --git a/tests/components/weather/test_recorder.py b/tests/components/weather/test_recorder.py new file mode 100644 index 00000000000..ed902df1385 --- /dev/null +++ b/tests/components/weather/test_recorder.py @@ -0,0 +1,45 @@ +"""The tests for weather recorder.""" +from __future__ import annotations + +from datetime import timedelta + +from homeassistant.components.recorder.models import StateAttributes, States +from homeassistant.components.recorder.util import session_scope +from homeassistant.components.weather import ATTR_FORECAST, DOMAIN +from homeassistant.core import HomeAssistant, State +from homeassistant.setup import async_setup_component +from homeassistant.util import dt as dt_util +from homeassistant.util.unit_system import METRIC_SYSTEM + +from tests.common import async_fire_time_changed, async_init_recorder_component +from tests.components.recorder.common import async_wait_recording_done_without_instance + + +async def test_exclude_attributes(hass: HomeAssistant) -> None: + """Test weather attributes to be excluded.""" + await async_init_recorder_component(hass) + await async_setup_component(hass, DOMAIN, {DOMAIN: {"platform": "demo"}}) + hass.config.units = METRIC_SYSTEM + await hass.async_block_till_done() + + state = hass.states.get("weather.demo_weather_south") + assert state.attributes[ATTR_FORECAST] + + await hass.async_block_till_done() + async_fire_time_changed(hass, dt_util.utcnow() + timedelta(minutes=5)) + await hass.async_block_till_done() + await async_wait_recording_done_without_instance(hass) + + def _fetch_states() -> list[State]: + with session_scope(hass=hass) as session: + native_states = [] + for db_state, db_state_attributes in session.query(States, StateAttributes): + state = db_state.to_native() + state.attributes = db_state_attributes.to_native() + native_states.append(state) + return native_states + + states: list[State] = await hass.async_add_executor_job(_fetch_states) + assert len(states) > 1 + for state in states: + assert ATTR_FORECAST not in state.attributes From 9c6a69775a73c9fd90ee3d10ac1ea3b4e89be551 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Hjelseth=20H=C3=B8yer?= Date: Sun, 3 Apr 2022 20:22:03 +0200 Subject: [PATCH 106/238] Tibber, Use a dedicated executor pool for database operations (#69208) --- homeassistant/components/tibber/sensor.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/tibber/sensor.py b/homeassistant/components/tibber/sensor.py index cd5148ba58a..bc3f6015286 100644 --- a/homeassistant/components/tibber/sensor.py +++ b/homeassistant/components/tibber/sensor.py @@ -8,6 +8,7 @@ from random import randrange import aiohttp +from homeassistant.components.recorder import get_instance from homeassistant.components.recorder.models import StatisticData, StatisticMetaData from homeassistant.components.recorder.statistics import ( async_add_external_statistics, @@ -574,7 +575,7 @@ class TibberDataCoordinator(DataUpdateCoordinator): f"{home.home_id.replace('-', '')}" ) - last_stats = await self.hass.async_add_executor_job( + last_stats = await get_instance(self.hass).async_add_executor_job( get_last_statistics, self.hass, 1, statistic_id, True ) @@ -594,7 +595,7 @@ class TibberDataCoordinator(DataUpdateCoordinator): start = dt_util.parse_datetime( hourly_consumption_data[0]["from"] ) - timedelta(hours=1) - stat = await self.hass.async_add_executor_job( + stat = await get_instance(self.hass).async_add_executor_job( statistics_during_period, self.hass, start, From 62b44e6903427cb40b9a1123ce62111ed5a62945 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Sun, 3 Apr 2022 20:37:13 +0200 Subject: [PATCH 107/238] Exclude more media player attributes from recorder (#69209) --- .../components/media_player/__init__.py | 3 ++- homeassistant/components/media_player/const.py | 1 + .../components/media_player/recorder.py | 17 +++++++++++++++-- tests/components/media_player/test_recorder.py | 10 ++++++++-- 4 files changed, 26 insertions(+), 5 deletions(-) diff --git a/homeassistant/components/media_player/__init__.py b/homeassistant/components/media_player/__init__.py index 99d493a75c4..1a2ea50d306 100644 --- a/homeassistant/components/media_player/__init__.py +++ b/homeassistant/components/media_player/__init__.py @@ -70,6 +70,7 @@ from .browse_media import BrowseMedia, async_process_play_media_url # noqa: F40 from .const import ( # noqa: F401 ATTR_APP_ID, ATTR_APP_NAME, + ATTR_ENTITY_PICTURE_LOCAL, ATTR_GROUP_MEMBERS, ATTR_INPUT_SOURCE, ATTR_INPUT_SOURCE_LIST, @@ -936,7 +937,7 @@ class MediaPlayerEntity(Entity): state_attr[attr] = value if self.media_image_remotely_accessible: - state_attr["entity_picture_local"] = self.media_image_local + state_attr[ATTR_ENTITY_PICTURE_LOCAL] = self.media_image_local return state_attr diff --git a/homeassistant/components/media_player/const.py b/homeassistant/components/media_player/const.py index e7b16f6ac88..fec2cfb3d0a 100644 --- a/homeassistant/components/media_player/const.py +++ b/homeassistant/components/media_player/const.py @@ -4,6 +4,7 @@ CONTENT_AUTH_EXPIRY_TIME = 3600 * 24 ATTR_APP_ID = "app_id" ATTR_APP_NAME = "app_name" +ATTR_ENTITY_PICTURE_LOCAL = "entity_picture_local" ATTR_GROUP_MEMBERS = "group_members" ATTR_INPUT_SOURCE = "source" ATTR_INPUT_SOURCE_LIST = "source_list" diff --git a/homeassistant/components/media_player/recorder.py b/homeassistant/components/media_player/recorder.py index 66bd61c72cd..8ced833ebec 100644 --- a/homeassistant/components/media_player/recorder.py +++ b/homeassistant/components/media_player/recorder.py @@ -4,10 +4,23 @@ from __future__ import annotations from homeassistant.const import ATTR_ENTITY_PICTURE from homeassistant.core import HomeAssistant, callback -from . import ATTR_INPUT_SOURCE_LIST, ATTR_SOUND_MODE_LIST +from . import ( + ATTR_ENTITY_PICTURE_LOCAL, + ATTR_INPUT_SOURCE_LIST, + ATTR_MEDIA_POSITION, + ATTR_MEDIA_POSITION_UPDATED_AT, + ATTR_SOUND_MODE_LIST, +) @callback def exclude_attributes(hass: HomeAssistant) -> set[str]: """Exclude static and token attributes from being recorded in the database.""" - return {ATTR_SOUND_MODE_LIST, ATTR_ENTITY_PICTURE, ATTR_INPUT_SOURCE_LIST} + return { + ATTR_ENTITY_PICTURE_LOCAL, + ATTR_ENTITY_PICTURE, + ATTR_INPUT_SOURCE_LIST, + ATTR_MEDIA_POSITION_UPDATED_AT, + ATTR_MEDIA_POSITION, + ATTR_SOUND_MODE_LIST, + } diff --git a/tests/components/media_player/test_recorder.py b/tests/components/media_player/test_recorder.py index 9532fe75cd0..df1c7cc8da0 100644 --- a/tests/components/media_player/test_recorder.py +++ b/tests/components/media_player/test_recorder.py @@ -5,7 +5,10 @@ from datetime import timedelta from homeassistant.components import media_player from homeassistant.components.media_player.const import ( + ATTR_ENTITY_PICTURE_LOCAL, ATTR_INPUT_SOURCE_LIST, + ATTR_MEDIA_POSITION, + ATTR_MEDIA_POSITION_UPDATED_AT, ATTR_SOUND_MODE_LIST, ) from homeassistant.components.recorder.models import StateAttributes, States @@ -42,7 +45,10 @@ async def test_exclude_attributes(hass): states: list[State] = await hass.async_add_executor_job(_fetch_states) assert len(states) > 1 for state in states: - assert ATTR_SOUND_MODE_LIST not in state.attributes assert ATTR_ENTITY_PICTURE not in state.attributes - assert ATTR_INPUT_SOURCE_LIST not in state.attributes + assert ATTR_ENTITY_PICTURE_LOCAL not in state.attributes assert ATTR_FRIENDLY_NAME in state.attributes + assert ATTR_INPUT_SOURCE_LIST not in state.attributes + assert ATTR_MEDIA_POSITION not in state.attributes + assert ATTR_MEDIA_POSITION_UPDATED_AT not in state.attributes + assert ATTR_SOUND_MODE_LIST not in state.attributes From 3cd9c7d19d8f7b13cc07e05f524bfc78055e12ab Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Mon, 4 Apr 2022 01:51:39 -0600 Subject: [PATCH 108/238] Only fire device_registry_updated for suggested_area if the suggestion results in an area change (#69215) --- homeassistant/helpers/device_registry.py | 11 +++++++++++ tests/helpers/test_device_registry.py | 10 ++++++++++ 2 files changed, 21 insertions(+) diff --git a/homeassistant/helpers/device_registry.py b/homeassistant/helpers/device_registry.py index cb009efeb07..c45b7d5f37b 100644 --- a/homeassistant/helpers/device_registry.py +++ b/homeassistant/helpers/device_registry.py @@ -43,6 +43,8 @@ CONNECTION_ZIGBEE = "zigbee" ORPHANED_DEVICE_KEEP_SECONDS = 86400 * 30 +RUNTIME_ONLY_ATTRS = {"suggested_area"} + class _DeviceIndex(NamedTuple): identifiers: dict[tuple[str, str], str] @@ -509,6 +511,15 @@ class DeviceRegistry: new = attr.evolve(old, **new_values) self._update_device(old, new) + + # If its only run time attributes (suggested_area) + # that do not get saved we do not want to write + # to disk or fire an event as we would end up + # firing events for data we have nothing to compare + # against since its never saved on disk + if RUNTIME_ONLY_ATTRS.issuperset(new_values): + return new + self.async_schedule_save() data: dict[str, Any] = { diff --git a/tests/helpers/test_device_registry.py b/tests/helpers/test_device_registry.py index 4e4150fe504..38632ba6545 100644 --- a/tests/helpers/test_device_registry.py +++ b/tests/helpers/test_device_registry.py @@ -1128,6 +1128,16 @@ async def test_update_suggested_area(hass, registry, area_registry, update_event assert update_events[1]["device_id"] == entry.id assert update_events[1]["changes"] == {"area_id": None, "suggested_area": None} + # Do not save or fire the event if the suggested + # area does not result in a change of area + # but still update the actual entry + with patch.object(registry, "async_schedule_save") as mock_save_2: + updated_entry = registry.async_update_device(entry.id, suggested_area="Other") + assert len(update_events) == 2 + assert mock_save_2.call_count == 0 + assert updated_entry != entry + assert updated_entry.suggested_area == "Other" + async def test_cleanup_device_registry(hass, registry): """Test cleanup works.""" From eeeff761e9795fe5f5c2ee4c8b9d78db4f8dbb2c Mon Sep 17 00:00:00 2001 From: Simone Chemelli Date: Mon, 4 Apr 2022 11:04:54 +0200 Subject: [PATCH 109/238] Avoid fritz API calls during shutdown (#69225) --- homeassistant/components/fritz/common.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/homeassistant/components/fritz/common.py b/homeassistant/components/fritz/common.py index 514697a32f9..d7b8d916803 100644 --- a/homeassistant/components/fritz/common.py +++ b/homeassistant/components/fritz/common.py @@ -91,6 +91,11 @@ def _cleanup_entity_filter(device: er.RegistryEntry) -> bool: ) +def _ha_is_stopping(activity: str) -> None: + """Inform that HA is stopping.""" + _LOGGER.info("Cannot execute %s: HomeAssistant is shutting down", activity) + + class ClassSetupMissing(Exception): """Raised when a Class func is called before setup.""" @@ -351,6 +356,10 @@ class FritzBoxTools(update_coordinator.DataUpdateCoordinator): def scan_devices(self, now: datetime | None = None) -> None: """Scan for new devices and return a list of found device ids.""" + if self.hass.is_stopping: + _ha_is_stopping("scan devices") + return + _LOGGER.debug("Checking host info for FRITZ!Box device %s", self.host) self._update_available, self._latest_firmware = self._update_device_info() @@ -603,6 +612,10 @@ class AvmWrapper(FritzBoxTools): ) -> dict: """Return service details.""" + if self.hass.is_stopping: + _ha_is_stopping(f"{service_name}/{action_name}") + return {} + if f"{service_name}{service_suffix}" not in self.connection.services: return {} From da3f9fdf7d3bae0656625ddf03dc3b7a59212a0a Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Mon, 4 Apr 2022 09:48:28 +0200 Subject: [PATCH 110/238] Drop unsupported SI-prefix peta from integration sensor (#69229) --- homeassistant/components/integration/config_flow.py | 1 - 1 file changed, 1 deletion(-) diff --git a/homeassistant/components/integration/config_flow.py b/homeassistant/components/integration/config_flow.py index cd4f8a11fbf..1f6fc7c6ee0 100644 --- a/homeassistant/components/integration/config_flow.py +++ b/homeassistant/components/integration/config_flow.py @@ -39,7 +39,6 @@ UNIT_PREFIXES = [ {"value": "M", "label": "M (mega)"}, {"value": "G", "label": "G (giga)"}, {"value": "T", "label": "T (tera)"}, - {"value": "P", "label": "P (peta)"}, ] TIME_UNITS = [ {"value": TIME_SECONDS, "label": "s (seconds)"}, From a3ad44f7b6facdb62841c7fc102e80a5c150b0d3 Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Mon, 4 Apr 2022 11:09:21 +0200 Subject: [PATCH 111/238] Unsubscribe from listeners when removing derivative sensor (#69234) --- homeassistant/components/derivative/sensor.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/derivative/sensor.py b/homeassistant/components/derivative/sensor.py index 25bc3450dcb..fb5bf7e518d 100644 --- a/homeassistant/components/derivative/sensor.py +++ b/homeassistant/components/derivative/sensor.py @@ -250,8 +250,10 @@ class DerivativeSensor(RestoreEntity, SensorEntity): self._state = derivative self.async_write_ha_state() - async_track_state_change_event( - self.hass, self._sensor_source_id, calc_derivative + self.async_on_remove( + async_track_state_change_event( + self.hass, self._sensor_source_id, calc_derivative + ) ) @property From 9ec9dc047b1a4d199a5b0de2345cd52a9cebac7f Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Mon, 4 Apr 2022 11:09:38 +0200 Subject: [PATCH 112/238] Unsubscribe from listeners when removing integration sensor (#69235) --- homeassistant/components/integration/sensor.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/integration/sensor.py b/homeassistant/components/integration/sensor.py index c0bac1b2745..ba76556fc51 100644 --- a/homeassistant/components/integration/sensor.py +++ b/homeassistant/components/integration/sensor.py @@ -253,8 +253,10 @@ class IntegrationSensor(RestoreEntity, SensorEntity): self._state = integral self.async_write_ha_state() - async_track_state_change_event( - self.hass, [self._sensor_source_id], calc_integration + self.async_on_remove( + async_track_state_change_event( + self.hass, [self._sensor_source_id], calc_integration + ) ) @property From 73cd4a33665a548a770a9526f6f6c5f802ac9614 Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Mon, 4 Apr 2022 11:02:30 +0200 Subject: [PATCH 113/238] Unsubscribe from listeners when removing threshold binary sensor (#69236) --- homeassistant/components/threshold/binary_sensor.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/threshold/binary_sensor.py b/homeassistant/components/threshold/binary_sensor.py index 49a97d84f0e..802aa22d759 100644 --- a/homeassistant/components/threshold/binary_sensor.py +++ b/homeassistant/components/threshold/binary_sensor.py @@ -151,8 +151,10 @@ class ThresholdSensor(BinarySensorEntity): _update_sensor_state() self.async_write_ha_state() - async_track_state_change_event( - hass, [entity_id], async_threshold_sensor_state_listener + self.async_on_remove( + async_track_state_change_event( + hass, [entity_id], async_threshold_sensor_state_listener + ) ) _update_sensor_state() From e6dcaaadd80d580d046272bd9ed59c9f725512a7 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Mon, 4 Apr 2022 11:14:39 +0200 Subject: [PATCH 114/238] Bumped version to 2022.4.0b4 --- homeassistant/const.py | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/const.py b/homeassistant/const.py index ae2db813d19..3781eccfa24 100644 --- a/homeassistant/const.py +++ b/homeassistant/const.py @@ -7,7 +7,7 @@ from .backports.enum import StrEnum MAJOR_VERSION: Final = 2022 MINOR_VERSION: Final = 4 -PATCH_VERSION: Final = "0b3" +PATCH_VERSION: Final = "0b4" __short_version__: Final = f"{MAJOR_VERSION}.{MINOR_VERSION}" __version__: Final = f"{__short_version__}.{PATCH_VERSION}" REQUIRED_PYTHON_VER: Final[tuple[int, int, int]] = (3, 9, 0) diff --git a/setup.cfg b/setup.cfg index 022064c5d5f..a21cc6fec9e 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = homeassistant -version = 2022.4.0b3 +version = 2022.4.0b4 author = The Home Assistant Authors author_email = hello@home-assistant.io license = Apache-2.0 From 2efa9f00d5cd9c2b157af395c1b535d3a17acd97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Toke=20H=C3=B8iland-J=C3=B8rgensen?= Date: Tue, 5 Apr 2022 08:53:50 +0200 Subject: [PATCH 115/238] Fix network starting with no configured IPv4 addresses (#69030) Co-authored-by: J. Nick Koston --- homeassistant/components/network/__init__.py | 21 +++++++++--- homeassistant/components/network/const.py | 1 + tests/components/network/test_init.py | 36 ++++++++++++++++++++ 3 files changed, 54 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/network/__init__.py b/homeassistant/components/network/__init__.py index 8c1a0020cfb..1ad975e1d85 100644 --- a/homeassistant/components/network/__init__.py +++ b/homeassistant/components/network/__init__.py @@ -6,11 +6,16 @@ import logging from homeassistant.core import HomeAssistant, callback from homeassistant.exceptions import HomeAssistantError -from homeassistant.helpers.typing import ConfigType +from homeassistant.helpers.typing import UNDEFINED, ConfigType, UndefinedType from homeassistant.loader import bind_hass from . import util -from .const import IPV4_BROADCAST_ADDR, PUBLIC_TARGET_IP +from .const import ( + IPV4_BROADCAST_ADDR, + LOOPBACK_TARGET_IP, + MDNS_TARGET_IP, + PUBLIC_TARGET_IP, +) from .models import Adapter from .network import Network, async_get_network @@ -26,7 +31,7 @@ async def async_get_adapters(hass: HomeAssistant) -> list[Adapter]: @bind_hass async def async_get_source_ip( - hass: HomeAssistant, target_ip: str = PUBLIC_TARGET_IP + hass: HomeAssistant, target_ip: str | UndefinedType = UNDEFINED ) -> str: """Get the source ip for a target ip.""" adapters = await async_get_adapters(hass) @@ -35,7 +40,15 @@ async def async_get_source_ip( if adapter["enabled"] and (ipv4s := adapter["ipv4"]): all_ipv4s.extend([ipv4["address"] for ipv4 in ipv4s]) - source_ip = util.async_get_source_ip(target_ip) + if target_ip is UNDEFINED: + source_ip = ( + util.async_get_source_ip(PUBLIC_TARGET_IP) + or util.async_get_source_ip(MDNS_TARGET_IP) + or util.async_get_source_ip(LOOPBACK_TARGET_IP) + ) + else: + source_ip = util.async_get_source_ip(target_ip) + if not all_ipv4s: _LOGGER.warning( "Because the system does not have any enabled IPv4 addresses, source address detection may be inaccurate" diff --git a/homeassistant/components/network/const.py b/homeassistant/components/network/const.py index 07c12e63a10..3a166189b85 100644 --- a/homeassistant/components/network/const.py +++ b/homeassistant/components/network/const.py @@ -17,6 +17,7 @@ ATTR_ADAPTERS: Final = "adapters" ATTR_CONFIGURED_ADAPTERS: Final = "configured_adapters" DEFAULT_CONFIGURED_ADAPTERS: list[str] = [] +LOOPBACK_TARGET_IP: Final = "127.0.0.1" MDNS_TARGET_IP: Final = "224.0.0.251" PUBLIC_TARGET_IP: Final = "8.8.8.8" IPV4_BROADCAST_ADDR: Final = "255.255.255.255" diff --git a/tests/components/network/test_init.py b/tests/components/network/test_init.py index 1103c6fa850..dc1ed064dc9 100644 --- a/tests/components/network/test_init.py +++ b/tests/components/network/test_init.py @@ -27,6 +27,21 @@ def _mock_socket(sockname): return mock_socket +def _mock_cond_socket(sockname): + class CondMockSock(MagicMock): + def connect(self, addr): + """Mock connect that stores addr.""" + self._addr = addr[0] + + def getsockname(self): + """Return addr if it matches the mock sockname.""" + if self._addr == sockname: + return [sockname] + raise AttributeError() + + return CondMockSock() + + def _mock_socket_exception(exc): mock_socket = MagicMock() mock_socket.getsockname = Mock(side_effect=exc) @@ -650,3 +665,24 @@ async def test_async_get_source_ip_cannot_be_determined_and_no_enabled_addresses await hass.async_block_till_done() with pytest.raises(HomeAssistantError): await network.async_get_source_ip(hass, MDNS_TARGET_IP) + + +async def test_async_get_source_ip_no_ip_loopback(hass, hass_storage, caplog): + """Test getting the source ip address when all adapters are disabled no target is specified.""" + hass_storage[STORAGE_KEY] = { + "version": STORAGE_VERSION, + "key": STORAGE_KEY, + "data": {ATTR_CONFIGURED_ADAPTERS: ["eth1"]}, + } + + with patch( + "homeassistant.components.network.util.ifaddr.get_adapters", + return_value=[], + ), patch( + "homeassistant.components.network.util.socket.socket", + return_value=_mock_cond_socket(_LOOPBACK_IPADDR), + ): + assert await async_setup_component(hass, DOMAIN, {DOMAIN: {}}) + await hass.async_block_till_done() + + assert await network.async_get_source_ip(hass) == "127.0.0.1" From 40b9f2f57804863307ca48672bd50a386ca95952 Mon Sep 17 00:00:00 2001 From: Radu Cotescu <170911+raducotescu@users.noreply.github.com> Date: Mon, 4 Apr 2022 13:39:40 +0200 Subject: [PATCH 116/238] Input binary sensors are not generated for Shelly 1 Pro (#69046) Co-authored-by: Shay Levy --- homeassistant/components/shelly/utils.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/shelly/utils.py b/homeassistant/components/shelly/utils.py index dd07d17e419..df5a75a7ed9 100644 --- a/homeassistant/components/shelly/utils.py +++ b/homeassistant/components/shelly/utils.py @@ -265,7 +265,9 @@ def get_rpc_channel_name(device: RpcDevice, key: str) -> str: if device.config.get("switch:0"): key = key.replace("input", "switch") device_name = get_rpc_device_name(device) - entity_name: str | None = device.config[key].get("name", device_name) + entity_name: str | None = None + if key in device.config: + entity_name = device.config[key].get("name", device_name) if entity_name is None: return f"{device_name} {key.replace(':', '_')}" From 66cc2c78464729a8e8e987572a9cf6cea0de4be7 Mon Sep 17 00:00:00 2001 From: Raman Gupta <7243222+raman325@users.noreply.github.com> Date: Tue, 5 Apr 2022 02:52:36 -0400 Subject: [PATCH 117/238] Fix tomorrowio sensor units and conversions (#69166) Co-authored-by: Erik Montnemery --- homeassistant/components/tomorrowio/sensor.py | 155 ++++++++++-------- tests/components/tomorrowio/test_sensor.py | 17 +- 2 files changed, 100 insertions(+), 72 deletions(-) diff --git a/homeassistant/components/tomorrowio/sensor.py b/homeassistant/components/tomorrowio/sensor.py index 11e10f0d7f9..8361869c18a 100644 --- a/homeassistant/components/tomorrowio/sensor.py +++ b/homeassistant/components/tomorrowio/sensor.py @@ -34,7 +34,6 @@ from homeassistant.const import ( PRESSURE_INHG, SPEED_METERS_PER_SECOND, SPEED_MILES_PER_HOUR, - TEMP_CELSIUS, TEMP_FAHRENHEIT, ) from homeassistant.core import HomeAssistant @@ -42,7 +41,6 @@ from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.util import slugify from homeassistant.util.distance import convert as distance_convert from homeassistant.util.pressure import convert as pressure_convert -from homeassistant.util.temperature import convert as temp_convert from . import TomorrowioDataUpdateCoordinator, TomorrowioEntity from .const import ( @@ -81,48 +79,61 @@ class TomorrowioSensorEntityDescription(SensorEntityDescription): unit_imperial: str | None = None unit_metric: str | None = None - metric_conversion: Callable[[float], float] | float = 1.0 - is_metric_check: bool | None = None + multiplication_factor: Callable[[float], float] | float | None = None + metric_conversion: Callable[[float], float] | float | None = None value_map: Any | None = None + def __post_init__(self) -> None: + """Handle post init.""" + if (self.unit_imperial is None and self.unit_metric is not None) or ( + self.unit_imperial is not None and self.unit_metric is None + ): + raise ValueError( + "Entity descriptions must include both imperial and metric units or " + "they must both be None" + ) + + +# From https://cfpub.epa.gov/ncer_abstracts/index.cfm/fuseaction/display.files/fileID/14285 +# x ug/m^3 = y ppb * molecular weight / 24.45 +def convert_ppb_to_ugm3(molecular_weight: int | float) -> Callable[[float], float]: + """Return function to convert ppb to ug/m^3.""" + return lambda x: (x * molecular_weight) / 24.45 + SENSOR_TYPES = ( TomorrowioSensorEntityDescription( key=TMRW_ATTR_FEELS_LIKE, name="Feels Like", - unit_imperial=TEMP_FAHRENHEIT, - unit_metric=TEMP_CELSIUS, - metric_conversion=lambda val: temp_convert(val, TEMP_FAHRENHEIT, TEMP_CELSIUS), - is_metric_check=True, + native_unit_of_measurement=TEMP_FAHRENHEIT, device_class=SensorDeviceClass.TEMPERATURE, ), TomorrowioSensorEntityDescription( key=TMRW_ATTR_DEW_POINT, name="Dew Point", - unit_imperial=TEMP_FAHRENHEIT, - unit_metric=TEMP_CELSIUS, - metric_conversion=lambda val: temp_convert(val, TEMP_FAHRENHEIT, TEMP_CELSIUS), - is_metric_check=True, + native_unit_of_measurement=TEMP_FAHRENHEIT, device_class=SensorDeviceClass.TEMPERATURE, ), + # Data comes in as inHg TomorrowioSensorEntityDescription( key=TMRW_ATTR_PRESSURE_SURFACE_LEVEL, name="Pressure (Surface Level)", - unit_metric=PRESSURE_HPA, - metric_conversion=lambda val: pressure_convert( + native_unit_of_measurement=PRESSURE_HPA, + multiplication_factor=lambda val: pressure_convert( val, PRESSURE_INHG, PRESSURE_HPA ), - is_metric_check=True, device_class=SensorDeviceClass.PRESSURE, ), + # Data comes in as BTUs/(hr * ft^2) + # https://www.theunitconverter.com/watt-square-meter-to-btu-hour-square-foot-conversion/ TomorrowioSensorEntityDescription( key=TMRW_ATTR_SOLAR_GHI, name="Global Horizontal Irradiance", unit_imperial=IRRADIATION_BTUS_PER_HOUR_SQUARE_FOOT, unit_metric=IRRADIATION_WATTS_PER_SQUARE_METER, metric_conversion=3.15459, - is_metric_check=True, ), + # Data comes in as miles TomorrowioSensorEntityDescription( key=TMRW_ATTR_CLOUD_BASE, name="Cloud Base", @@ -131,8 +142,8 @@ SENSOR_TYPES = ( metric_conversion=lambda val: distance_convert( val, LENGTH_MILES, LENGTH_KILOMETERS ), - is_metric_check=True, ), + # Data comes in as miles TomorrowioSensorEntityDescription( key=TMRW_ATTR_CLOUD_CEILING, name="Cloud Ceiling", @@ -141,14 +152,13 @@ SENSOR_TYPES = ( metric_conversion=lambda val: distance_convert( val, LENGTH_MILES, LENGTH_KILOMETERS ), - is_metric_check=True, ), TomorrowioSensorEntityDescription( key=TMRW_ATTR_CLOUD_COVER, name="Cloud Cover", - unit_imperial=PERCENTAGE, - unit_metric=PERCENTAGE, + native_unit_of_measurement=PERCENTAGE, ), + # Data comes in as MPH TomorrowioSensorEntityDescription( key=TMRW_ATTR_WIND_GUST, name="Wind Gust", @@ -156,7 +166,6 @@ SENSOR_TYPES = ( unit_metric=SPEED_METERS_PER_SECOND, metric_conversion=lambda val: distance_convert(val, LENGTH_MILES, LENGTH_METERS) / 3600, - is_metric_check=True, ), TomorrowioSensorEntityDescription( key=TMRW_ATTR_PRECIPITATION_TYPE, @@ -165,51 +174,54 @@ SENSOR_TYPES = ( device_class="tomorrowio__precipitation_type", icon="mdi:weather-snowy-rainy", ), + # Data comes in as ppb + # Molecular weight of Ozone is 48 TomorrowioSensorEntityDescription( key=TMRW_ATTR_OZONE, name="Ozone", - unit_metric=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER, - metric_conversion=2.03, - is_metric_check=True, + native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER, + multiplication_factor=convert_ppb_to_ugm3(48), device_class=SensorDeviceClass.OZONE, ), + # Data comes in as ug/ft^3 TomorrowioSensorEntityDescription( key=TMRW_ATTR_PARTICULATE_MATTER_25, name="Particulate Matter < 2.5 μm", - unit_metric=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER, - metric_conversion=3.2808399**3, - is_metric_check=True, + native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER, + multiplication_factor=3.2808399**3, device_class=SensorDeviceClass.PM25, ), + # Data comes in as ug/ft^3 TomorrowioSensorEntityDescription( key=TMRW_ATTR_PARTICULATE_MATTER_10, name="Particulate Matter < 10 μm", - unit_metric=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER, - metric_conversion=3.2808399**3, - is_metric_check=True, + native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER, + multiplication_factor=3.2808399**3, device_class=SensorDeviceClass.PM10, ), + # Data comes in as ppb + # Molecular weight of Nitrogen Dioxide is 46.01 TomorrowioSensorEntityDescription( key=TMRW_ATTR_NITROGEN_DIOXIDE, name="Nitrogen Dioxide", - unit_metric=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER, - metric_conversion=1.95, - is_metric_check=True, + native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER, + multiplication_factor=convert_ppb_to_ugm3(46.01), device_class=SensorDeviceClass.NITROGEN_DIOXIDE, ), + # Data comes in as ppb TomorrowioSensorEntityDescription( key=TMRW_ATTR_CARBON_MONOXIDE, name="Carbon Monoxide", - unit_imperial=CONCENTRATION_PARTS_PER_MILLION, - unit_metric=CONCENTRATION_PARTS_PER_MILLION, + native_unit_of_measurement=CONCENTRATION_PARTS_PER_MILLION, + multiplication_factor=1 / 1000, device_class=SensorDeviceClass.CO, ), + # Molecular weight of Sulphur Dioxide is 64.07 TomorrowioSensorEntityDescription( key=TMRW_ATTR_SULPHUR_DIOXIDE, name="Sulphur Dioxide", - unit_metric=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER, - metric_conversion=2.71, - is_metric_check=True, + native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER, + multiplication_factor=convert_ppb_to_ugm3(64.07), device_class=SensorDeviceClass.SULPHUR_DIOXIDE, ), TomorrowioSensorEntityDescription( @@ -289,6 +301,16 @@ async def async_setup_entry( async_add_entities(entities) +def handle_conversion( + value: float | int, conversion: Callable[[float], float] | float +) -> float: + """Handle conversion of a value based on conversion type.""" + if callable(conversion): + return round(conversion(float(value)), 2) + + return round(float(value) * conversion, 2) + + class BaseTomorrowioSensorEntity(TomorrowioEntity, SensorEntity): """Base Tomorrow.io sensor entity.""" @@ -311,47 +333,42 @@ class BaseTomorrowioSensorEntity(TomorrowioEntity, SensorEntity): f"{self._config_entry.unique_id}_{slugify(description.name)}" ) self._attr_extra_state_attributes = {ATTR_ATTRIBUTION: self.attribution} - # Fallback to metric always in case imperial isn't defined (for metric only - # sensors) - self._attr_native_unit_of_measurement = ( - description.unit_metric - if hass.config.units.is_metric - else description.unit_imperial - ) or description.unit_metric + if self.entity_description.native_unit_of_measurement is None: + self._attr_native_unit_of_measurement = ( + description.unit_metric + if hass.config.units.is_metric + else description.unit_imperial + ) @property @abstractmethod - def _state(self) -> str | int | float | None: + def _state(self) -> int | float | None: """Return the raw state.""" @property def native_value(self) -> str | int | float | None: """Return the state.""" state = self._state + desc = self.entity_description + + if state is None: + return state + + if desc.value_map is not None: + return desc.value_map(state).name.lower() + + if desc.multiplication_factor is not None: + state = handle_conversion(state, desc.multiplication_factor) # If an imperial unit isn't provided, we always want to convert to metric since # that is what the UI expects - if state is not None and ( - ( - self.entity_description.metric_conversion != 1.0 - and self.entity_description.is_metric_check is not None - and self.hass.config.units.is_metric - == self.entity_description.is_metric_check - ) - or ( - self.entity_description.unit_imperial is None - and self.entity_description.unit_metric is not None - ) + if ( + desc.metric_conversion + and desc.unit_imperial is not None + and desc.unit_imperial != desc.unit_metric + and self.hass.config.units.is_metric ): - conversion = self.entity_description.metric_conversion - # When conversion is a callable, we assume it's a single input function - if callable(conversion): - return round(conversion(float(state)), 2) - - return round(float(state) * conversion, 2) - - if self.entity_description.value_map is not None and state is not None: - return self.entity_description.value_map(state).name.lower() + return handle_conversion(state, desc.metric_conversion) return state @@ -360,6 +377,8 @@ class TomorrowioSensorEntity(BaseTomorrowioSensorEntity): """Sensor entity that talks to Tomorrow.io v4 API to retrieve non-weather data.""" @property - def _state(self) -> str | int | float | None: + def _state(self) -> int | float | None: """Return the raw state.""" - return self._get_current_property(self.entity_description.key) + val = self._get_current_property(self.entity_description.key) + assert not isinstance(val, str) + return val diff --git a/tests/components/tomorrowio/test_sensor.py b/tests/components/tomorrowio/test_sensor.py index 09316ed2518..91a4a2eabc5 100644 --- a/tests/components/tomorrowio/test_sensor.py +++ b/tests/components/tomorrowio/test_sensor.py @@ -5,6 +5,8 @@ from datetime import datetime from typing import Any from unittest.mock import patch +import pytest + from homeassistant.components.sensor import DOMAIN as SENSOR_DOMAIN from homeassistant.components.tomorrowio.config_flow import ( _get_config_schema, @@ -17,6 +19,7 @@ from homeassistant.components.tomorrowio.const import ( DEFAULT_TIMESTEP, DOMAIN, ) +from homeassistant.components.tomorrowio.sensor import TomorrowioSensorEntityDescription from homeassistant.config_entries import SOURCE_USER from homeassistant.const import ATTR_ATTRIBUTION, CONF_NAME from homeassistant.core import HomeAssistant, State, callback @@ -139,10 +142,10 @@ def check_sensor_state(hass: HomeAssistant, entity_name: str, value: str): async def test_v4_sensor(hass: HomeAssistant) -> None: """Test v4 sensor data.""" await _setup(hass, V4_FIELDS, API_V4_ENTRY_DATA) - check_sensor_state(hass, O3, "94.46") - check_sensor_state(hass, CO, "0.63") - check_sensor_state(hass, NO2, "20.81") - check_sensor_state(hass, SO2, "4.47") + check_sensor_state(hass, O3, "91.35") + check_sensor_state(hass, CO, "0.0") + check_sensor_state(hass, NO2, "20.08") + check_sensor_state(hass, SO2, "4.32") check_sensor_state(hass, PM25, "5.3") check_sensor_state(hass, PM10, "20.13") check_sensor_state(hass, MEP_AQI, "23") @@ -164,3 +167,9 @@ async def test_v4_sensor(hass: HomeAssistant) -> None: check_sensor_state(hass, CLOUD_CEILING, "1.19") check_sensor_state(hass, WIND_GUST, "5.65") check_sensor_state(hass, PRECIPITATION_TYPE, "rain") + + +async def test_entity_description() -> None: + """Test improper entity description raises.""" + with pytest.raises(ValueError): + TomorrowioSensorEntityDescription("a", unit_imperial="b") From 37c0200f83ddb32b9e13cb1a94627442a6a06249 Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Mon, 4 Apr 2022 14:14:26 +0200 Subject: [PATCH 118/238] Improve derivative translation strings (#69245) --- homeassistant/components/derivative/strings.json | 7 ++++--- .../components/derivative/translations/en.json | 12 +++++++----- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/homeassistant/components/derivative/strings.json b/homeassistant/components/derivative/strings.json index b9ef15d652d..0a58b28a1c6 100644 --- a/homeassistant/components/derivative/strings.json +++ b/homeassistant/components/derivative/strings.json @@ -1,8 +1,9 @@ { + "title": "Derivative sensor", "config": { "step": { "user": { - "title": "New Derivative sensor", + "title": "Add Derivative sensor", "description": "Create a sensor that estimates the derivative of a sensor.", "data": { "name": "Name", @@ -15,14 +16,14 @@ "data_description": { "round": "Controls the number of decimal digits in the output.", "time_window": "If set, the sensor's value is a time weighted moving average of derivatives within this window.", - "unit_prefix": "The derivative will be scaled according to the selected metric prefix and time unit of the derivative." + "unit_prefix": "The output will be scaled according to the selected metric prefix and time unit of the derivative." } } } }, "options": { "step": { - "options": { + "init": { "data": { "name": "[%key:component::derivative::config::step::user::data::name%]", "round": "[%key:component::derivative::config::step::user::data::round%]", diff --git a/homeassistant/components/derivative/translations/en.json b/homeassistant/components/derivative/translations/en.json index cfa3bf2ab96..b91318b5237 100644 --- a/homeassistant/components/derivative/translations/en.json +++ b/homeassistant/components/derivative/translations/en.json @@ -13,15 +13,16 @@ "data_description": { "round": "Controls the number of decimal digits in the output.", "time_window": "If set, the sensor's value is a time weighted moving average of derivatives within this window.", - "unit_prefix": "The derivative will be scaled according to the selected metric prefix and time unit of the derivative." + "unit_prefix": "The output will be scaled according to the selected metric prefix and time unit of the derivative." }, - "title": "New Derivative sensor" + "description": "Create a sensor that estimates the derivative of a sensor.", + "title": "Add Derivative sensor" } } }, "options": { "step": { - "options": { + "init": { "data": { "name": "Name", "round": "Precision", @@ -33,9 +34,10 @@ "data_description": { "round": "Controls the number of decimal digits in the output.", "time_window": "If set, the sensor's value is a time weighted moving average of derivatives within this window.", - "unit_prefix": "The derivative will be scaled according to the selected metric prefix and time unit of the derivative.." + "unit_prefix": "The output will be scaled according to the selected metric prefix and time unit of the derivative.." } } } - } + }, + "title": "Derivative sensor" } \ No newline at end of file From 408f87c7e675c26b8a3c0971a116c0cf4078f559 Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Mon, 4 Apr 2022 17:55:09 +0200 Subject: [PATCH 119/238] Improve min_max translation strings (#69248) Co-authored-by: Martin Hjelmare --- homeassistant/components/min_max/config_flow.py | 9 ++++++++- homeassistant/components/min_max/strings.json | 12 +++++++++--- .../components/min_max/translations/en.json | 12 +++++++++--- 3 files changed, 26 insertions(+), 7 deletions(-) diff --git a/homeassistant/components/min_max/config_flow.py b/homeassistant/components/min_max/config_flow.py index 64d982dec92..6dab7cc000c 100644 --- a/homeassistant/components/min_max/config_flow.py +++ b/homeassistant/components/min_max/config_flow.py @@ -16,7 +16,14 @@ from homeassistant.helpers.schema_config_entry_flow import ( from .const import CONF_ENTITY_IDS, CONF_ROUND_DIGITS, DOMAIN -_STATISTIC_MEASURES = ["last", "max", "mean", "min", "median"] +_STATISTIC_MEASURES = [ + {"value": "min", "label": "Minimum"}, + {"value": "max", "label": "Maximum"}, + {"value": "mean", "label": "Arithmetic mean"}, + {"value": "median", "label": "Median"}, + {"value": "last", "label": "Most recently updated"}, +] + OPTIONS_SCHEMA = vol.Schema( { diff --git a/homeassistant/components/min_max/strings.json b/homeassistant/components/min_max/strings.json index 13f81365a25..596dd2250eb 100644 --- a/homeassistant/components/min_max/strings.json +++ b/homeassistant/components/min_max/strings.json @@ -3,24 +3,30 @@ "config": { "step": { "user": { - "description": "Precision controls the number of decimal digits when the statistics characteristic is mean or median.", + "title": "Add min / max / mean / median sensor", + "description": "Create a sensor that calculates a min, max, mean or median value from a list of input sensors.", "data": { "entity_ids": "Input entities", "name": "Name", "round_digits": "Precision", "type": "Statistic characteristic" + }, + "data_description": { + "round_digits": "Controls the number of decimal digits in the output when the statistics characteristic is mean or median." } } } }, "options": { "step": { - "options": { - "description": "[%key:component::min_max::config::step::user::description%]", + "init": { "data": { "entity_ids": "[%key:component::min_max::config::step::user::data::entity_ids%]", "round_digits": "[%key:component::min_max::config::step::user::data::round_digits%]", "type": "[%key:component::min_max::config::step::user::data::type%]" + }, + "data_description": { + "round_digits": "[%key:component::min_max::config::step::user::data_description::round_digits%]" } } } diff --git a/homeassistant/components/min_max/translations/en.json b/homeassistant/components/min_max/translations/en.json index 65cdce569a8..8cc0d41c419 100644 --- a/homeassistant/components/min_max/translations/en.json +++ b/homeassistant/components/min_max/translations/en.json @@ -8,19 +8,25 @@ "round_digits": "Precision", "type": "Statistic characteristic" }, - "description": "Precision controls the number of decimal digits when the statistics characteristic is mean or median." + "data_description": { + "round_digits": "Controls the number of decimal digits in the output when the statistics characteristic is mean or median." + }, + "description": "Create a sensor that calculates a min, max, mean or median value from a list of input sensors.", + "title": "Add min / max / mean / median sensor" } } }, "options": { "step": { - "options": { + "init": { "data": { "entity_ids": "Input entities", "round_digits": "Precision", "type": "Statistic characteristic" }, - "description": "Precision controls the number of decimal digits when the statistics characteristic is mean or median." + "data_description": { + "round_digits": "Controls the number of decimal digits in the output when the statistics characteristic is mean or median." + } } } }, From 8191172f07e6f8f5f5270e14335d3b000703e164 Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Mon, 4 Apr 2022 17:53:16 +0200 Subject: [PATCH 120/238] Improve switch_as_x translation strings (#69249) --- homeassistant/components/switch_as_x/strings.json | 3 +-- .../components/switch_as_x/translations/en.json | 10 +++++----- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/homeassistant/components/switch_as_x/strings.json b/homeassistant/components/switch_as_x/strings.json index 05863b0c5fe..10adfd7686e 100644 --- a/homeassistant/components/switch_as_x/strings.json +++ b/homeassistant/components/switch_as_x/strings.json @@ -1,9 +1,8 @@ { - "title": "Switch as X", + "title": "Change device type of a switch", "config": { "step": { "user": { - "title": "Change switch device type", "description": "Pick a switch that you want to show up in Home Assistant as a light, cover or anything else. The original switch will be hidden.", "data": { "entity_id": "Switch", diff --git a/homeassistant/components/switch_as_x/translations/en.json b/homeassistant/components/switch_as_x/translations/en.json index 5c6fb30b9f2..7709a27cf35 100644 --- a/homeassistant/components/switch_as_x/translations/en.json +++ b/homeassistant/components/switch_as_x/translations/en.json @@ -1,14 +1,14 @@ { "config": { "step": { - "init": { + "user": { "data": { - "entity_id": "Switch entity", - "target_domain": "Type" + "entity_id": "Switch", + "target_domain": "New Type" }, - "title": "Make a switch a ..." + "description": "Pick a switch that you want to show up in Home Assistant as a light, cover or anything else. The original switch will be hidden." } } }, - "title": "Switch as X" + "title": "Change device type of a switch" } \ No newline at end of file From 4313be1ca2cbf814182ee97e3e808051a52d02d3 Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Mon, 4 Apr 2022 17:45:24 +0200 Subject: [PATCH 121/238] Improve threshold translation strings (#69250) --- homeassistant/components/threshold/strings.json | 9 ++++----- .../components/threshold/translations/en.json | 11 +++++------ 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/homeassistant/components/threshold/strings.json b/homeassistant/components/threshold/strings.json index dbe8bf39b1e..8bfd9fb96b1 100644 --- a/homeassistant/components/threshold/strings.json +++ b/homeassistant/components/threshold/strings.json @@ -1,14 +1,14 @@ { + "title": "Threshold Sensor", "config": { "step": { "user": { - "title": "New Threshold Sensor", - "description": "Configure when the sensor should turn on and off.\n\nOnly lower limit configured - Turn on when the input sensor's value is less than the lower limit.\nOnly upper limit configured - Turn on when the input sensor's value is greater than the upper limit.\nBoth lower and upper limit configured - Turn on when the input sensor's value is in the range [lower limit .. upper limit].", + "title": "Add Threshold Sensor", + "description": "Create a binary sensor that turns on and off depending on the value of a sensor\n\nOnly lower limit configured - Turn on when the input sensor's value is less than the lower limit.\nOnly upper limit configured - Turn on when the input sensor's value is greater than the upper limit.\nBoth lower and upper limit configured - Turn on when the input sensor's value is in the range [lower limit .. upper limit].", "data": { "entity_id": "Input sensor", "hysteresis": "Hysteresis", "lower": "Lower limit", - "mode": "Threshold mode", "name": "Name", "upper": "Upper limit" } @@ -21,12 +21,11 @@ "options": { "step": { "init": { - "description": "[%key:component::threshold::config::step::user::description%]", + "description": "Only lower limit configured - Turn on when the input sensor's value is less than the lower limit.\nOnly upper limit configured - Turn on when the input sensor's value is greater than the upper limit.\nBoth lower and upper limit configured - Turn on when the input sensor's value is in the range [lower limit .. upper limit].", "data": { "entity_id": "[%key:component::threshold::config::step::user::data::entity_id%]", "hysteresis": "[%key:component::threshold::config::step::user::data::hysteresis%]", "lower": "[%key:component::threshold::config::step::user::data::lower%]", - "mode": "[%key:component::threshold::config::step::user::data::mode%]", "name": "[%key:component::threshold::config::step::user::data::name%]", "upper": "[%key:component::threshold::config::step::user::data::upper%]" } diff --git a/homeassistant/components/threshold/translations/en.json b/homeassistant/components/threshold/translations/en.json index ace0621ab02..461ca244353 100644 --- a/homeassistant/components/threshold/translations/en.json +++ b/homeassistant/components/threshold/translations/en.json @@ -9,12 +9,11 @@ "entity_id": "Input sensor", "hysteresis": "Hysteresis", "lower": "Lower limit", - "mode": "Threshold mode", "name": "Name", "upper": "Upper limit" }, - "description": "Configure when the sensor should turn on and off.\n\nOnly lower limit configured - Turn on when the input sensor's value is less than the lower limit.\nOnly upper limit configured - Turn on when the input sensor's value is greater than the upper limit.\nBoth lower and upper limit configured - Turn on when the input sensor's value is in the range [lower limit .. upper limit].", - "title": "New Threshold Sensor" + "description": "Create a binary sensor that turns on and off depending on the value of a sensor\n\nOnly lower limit configured - Turn on when the input sensor's value is less than the lower limit.\nOnly upper limit configured - Turn on when the input sensor's value is greater than the upper limit.\nBoth lower and upper limit configured - Turn on when the input sensor's value is in the range [lower limit .. upper limit].", + "title": "Add Threshold Sensor" } } }, @@ -28,12 +27,12 @@ "entity_id": "Input sensor", "hysteresis": "Hysteresis", "lower": "Lower limit", - "mode": "Threshold mode", "name": "Name", "upper": "Upper limit" }, - "description": "Configure when the sensor should turn on and off.\n\nOnly lower limit configured - Turn on when the input sensor's value is less than the lower limit.\nOnly upper limit configured - Turn on when the input sensor's value is greater than the upper limit.\nBoth lower and upper limit configured - Turn on when the input sensor's value is in the range [lower limit .. upper limit]." + "description": "Only lower limit configured - Turn on when the input sensor's value is less than the lower limit.\nOnly upper limit configured - Turn on when the input sensor's value is greater than the upper limit.\nBoth lower and upper limit configured - Turn on when the input sensor's value is in the range [lower limit .. upper limit]." } } - } + }, + "title": "Threshold Sensor" } \ No newline at end of file From 45843297f9cff14a1bfe3cd14730d0b47bf517fa Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Mon, 4 Apr 2022 17:43:25 +0200 Subject: [PATCH 122/238] Improve tod translation strings (#69251) --- homeassistant/components/tod/strings.json | 10 +++------- homeassistant/components/tod/translations/en.json | 14 +++++--------- 2 files changed, 8 insertions(+), 16 deletions(-) diff --git a/homeassistant/components/tod/strings.json b/homeassistant/components/tod/strings.json index 713ff6e58e3..41e40525081 100644 --- a/homeassistant/components/tod/strings.json +++ b/homeassistant/components/tod/strings.json @@ -1,13 +1,12 @@ { + "title": "Times of the Day Sensor", "config": { "step": { "user": { - "title": "New Times of the Day Sensor", - "description": "Configure when the sensor should turn on and off.", + "title": "Add Times of the Day Sensor", + "description": "Create a binary sensor that turns on or off depending on the time.", "data": { - "after": "On after", "after_time": "On time", - "before": "Off after", "before_time": "Off time", "name": "Name" } @@ -17,11 +16,8 @@ "options": { "step": { "init": { - "description": "[%key:component::tod::config::step::user::description%]", "data": { - "after": "[%key:component::tod::config::step::user::data::after%]", "after_time": "[%key:component::tod::config::step::user::data::after_time%]", - "before": "[%key:component::tod::config::step::user::data::before%]", "before_time": "[%key:component::tod::config::step::user::data::before_time%]" } } diff --git a/homeassistant/components/tod/translations/en.json b/homeassistant/components/tod/translations/en.json index 288b51c4b5e..2ecb2c695c8 100644 --- a/homeassistant/components/tod/translations/en.json +++ b/homeassistant/components/tod/translations/en.json @@ -3,14 +3,12 @@ "step": { "user": { "data": { - "after": "On after", "after_time": "On time", - "before": "Off after", "before_time": "Off time", "name": "Name" }, - "description": "Configure when the sensor should turn on and off.", - "title": "New Times of the Day Sensor" + "description": "Create a binary sensor that turns on or off depending on the time.", + "title": "Add Times of the Day Sensor" } } }, @@ -18,13 +16,11 @@ "step": { "init": { "data": { - "after": "On after", "after_time": "On time", - "before": "Off after", "before_time": "Off time" - }, - "description": "Configure when the sensor should turn on and off." + } } } - } + }, + "title": "Times of the Day Sensor" } \ No newline at end of file From eab787633084cd5469513b09c38f315f22d08bbd Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Mon, 4 Apr 2022 14:24:56 +0200 Subject: [PATCH 123/238] Improve utility_meter translation strings (#69252) --- homeassistant/components/utility_meter/strings.json | 11 +++++++++-- .../components/utility_meter/translations/en.json | 13 ++++++++++--- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/homeassistant/components/utility_meter/strings.json b/homeassistant/components/utility_meter/strings.json index 468e2065c68..35a35b7f2db 100644 --- a/homeassistant/components/utility_meter/strings.json +++ b/homeassistant/components/utility_meter/strings.json @@ -1,9 +1,10 @@ { + "title": "Utility Meter", "config": { "step": { "user": { - "title": "New Utility Meter", - "description": "The utility meter sensor provides functionality to track consumptions of various utilities (e.g., energy, gas, water, heating) over a configured period of time, typically monthly. The utility meter sensor also supports splitting the consumption by tariffs.\nMeter reset offset allows offsetting the day of monthly meter reset.\nSupported tariffs is a comma separated list of supported tariffs, leave empty if only a single tariff is needed.", + "title": "Add Utility Meter", + "description": "Create a sensor which tracks consumption of various utilities (e.g., energy, gas, water, heating) over a configured period of time, typically monthly. The utility meter sensor optionally supports splitting the consumption by tariffs, in that case one sensor for each tariff is created as well as a select entity to choose the current tariff.", "data": { "cycle": "Meter reset cycle", "delta_values": "Delta values", @@ -12,6 +13,12 @@ "offset": "Meter reset offset", "source": "Input sensor", "tariffs": "Supported tariffs" + }, + "data_description": { + "delta_values": "Enable if the source values are delta values since the last reading instead of absolute values.", + "net_consumption": "Enable if the source is a net meter, meaning it can both increase and decrease.", + "offset": "Offset the day of a monthly meter reset.", + "tariffs": "A list of supported tariffs, leave empty if only a single tariff is needed." } } } diff --git a/homeassistant/components/utility_meter/translations/en.json b/homeassistant/components/utility_meter/translations/en.json index 1ac1445069e..d5dc7f18ddd 100644 --- a/homeassistant/components/utility_meter/translations/en.json +++ b/homeassistant/components/utility_meter/translations/en.json @@ -11,8 +11,14 @@ "source": "Input sensor", "tariffs": "Supported tariffs" }, - "description": "The utility meter sensor provides functionality to track consumptions of various utilities (e.g., energy, gas, water, heating) over a configured period of time, typically monthly. The utility meter sensor also supports splitting the consumption by tariffs.\nMeter reset offset allows offsetting the day of monthly meter reset.\nSupported tariffs is a comma separated list of supported tariffs, leave empty if only a single tariff is needed.", - "title": "New Utility Meter" + "data_description": { + "delta_values": "Enable if the source values are delta values since the last reading instead of absolute values.", + "net_consumption": "Enable if the source is a net meter, meaning it can both increase and decrease.", + "offset": "Offset the day of a monthly meter reset.", + "tariffs": "A list of supported tariffs, leave empty if only a single tariff is needed." + }, + "description": "Create a sensor which tracks consumption of various utilities (e.g., energy, gas, water, heating) over a configured period of time, typically monthly. The utility meter sensor optionally supports splitting the consumption by tariffs, in that case one sensor for each tariff is created as well as a select entity to choose the current tariff.", + "title": "Add Utility Meter" } } }, @@ -24,5 +30,6 @@ } } } - } + }, + "title": "Utility Meter" } \ No newline at end of file From b66770d34986d000fef7aa935831d126e918d636 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20S=C3=B8rensen?= Date: Mon, 4 Apr 2022 17:34:06 +0200 Subject: [PATCH 124/238] Make hassio coordinator refresh data (#69272) --- homeassistant/components/hassio/__init__.py | 96 +++++++++++-------- homeassistant/components/hassio/handler.py | 8 ++ tests/components/hassio/test_binary_sensor.py | 1 + tests/components/hassio/test_init.py | 40 ++++++-- tests/components/hassio/test_sensor.py | 1 + tests/components/hassio/test_update.py | 1 + 6 files changed, 101 insertions(+), 46 deletions(-) diff --git a/homeassistant/components/hassio/__init__.py b/homeassistant/components/hassio/__init__.py index acc676bdf9f..7b8608a7fad 100644 --- a/homeassistant/components/hassio/__init__.py +++ b/homeassistant/components/hassio/__init__.py @@ -42,7 +42,7 @@ from homeassistant.helpers.device_registry import ( ) from homeassistant.helpers.entity import DeviceInfo from homeassistant.helpers.typing import ConfigType -from homeassistant.helpers.update_coordinator import DataUpdateCoordinator +from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed from homeassistant.loader import bind_hass from homeassistant.util.dt import utcnow @@ -609,21 +609,6 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: # noqa: DOMAIN, service, async_service_handler, schema=settings.schema ) - async def update_addon_stats(slug): - """Update single addon stats.""" - stats = await hassio.get_addon_stats(slug) - return (slug, stats) - - async def update_addon_changelog(slug): - """Return the changelog for an add-on.""" - changelog = await hassio.get_addon_changelog(slug) - return (slug, changelog) - - async def update_addon_info(slug): - """Return the info for an add-on.""" - info = await hassio.get_addon_info(slug) - return (slug, info) - async def update_info_data(now): """Update last available supervisor information.""" @@ -644,28 +629,6 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: # noqa: hassio.get_os_info(), ) - addons = [ - addon - for addon in hass.data[DATA_SUPERVISOR_INFO].get("addons", []) - if addon[ATTR_STATE] == ATTR_STARTED - ] - stats_data = await asyncio.gather( - *[update_addon_stats(addon[ATTR_SLUG]) for addon in addons] - ) - hass.data[DATA_ADDONS_STATS] = dict(stats_data) - hass.data[DATA_ADDONS_CHANGELOGS] = dict( - await asyncio.gather( - *[update_addon_changelog(addon[ATTR_SLUG]) for addon in addons] - ) - ) - hass.data[DATA_ADDONS_INFO] = dict( - await asyncio.gather( - *[update_addon_info(addon[ATTR_SLUG]) for addon in addons] - ) - ) - - if ADDONS_COORDINATOR in hass.data: - await hass.data[ADDONS_COORDINATOR].async_refresh() except HassioAPIError as err: _LOGGER.warning("Can't read Supervisor data: %s", err) @@ -855,7 +818,7 @@ class HassioDataUpdateCoordinator(DataUpdateCoordinator): hass, _LOGGER, name=DOMAIN, - update_method=self._async_update_data, + update_interval=HASSIO_UPDATE_INTERVAL, ) self.hassio: HassIO = hass.data[DOMAIN] self.data = {} @@ -865,6 +828,11 @@ class HassioDataUpdateCoordinator(DataUpdateCoordinator): async def _async_update_data(self) -> dict[str, Any]: """Update data via library.""" + try: + await self.force_data_refresh() + except HassioAPIError as err: + raise UpdateFailed(f"Error on Supervisor API: {err}") from err + new_data = {} supervisor_info = get_supervisor_info(self.hass) addons_info = get_addons_info(self.hass) @@ -940,3 +908,53 @@ class HassioDataUpdateCoordinator(DataUpdateCoordinator): """Force update of the supervisor info.""" self.hass.data[DATA_SUPERVISOR_INFO] = await self.hassio.get_supervisor_info() await self.async_refresh() + + async def force_data_refresh(self) -> None: + """Force update of the addon info.""" + await self.hassio.refresh_updates() + ( + self.hass.data[DATA_INFO], + self.hass.data[DATA_CORE_INFO], + self.hass.data[DATA_SUPERVISOR_INFO], + self.hass.data[DATA_OS_INFO], + ) = await asyncio.gather( + self.hassio.get_info(), + self.hassio.get_core_info(), + self.hassio.get_supervisor_info(), + self.hassio.get_os_info(), + ) + + addons = [ + addon + for addon in self.hass.data[DATA_SUPERVISOR_INFO].get("addons", []) + if addon[ATTR_STATE] == ATTR_STARTED + ] + stats_data = await asyncio.gather( + *[self._update_addon_stats(addon[ATTR_SLUG]) for addon in addons] + ) + self.hass.data[DATA_ADDONS_STATS] = dict(stats_data) + self.hass.data[DATA_ADDONS_CHANGELOGS] = dict( + await asyncio.gather( + *[self._update_addon_changelog(addon[ATTR_SLUG]) for addon in addons] + ) + ) + self.hass.data[DATA_ADDONS_INFO] = dict( + await asyncio.gather( + *[self._update_addon_info(addon[ATTR_SLUG]) for addon in addons] + ) + ) + + async def _update_addon_stats(self, slug): + """Update single addon stats.""" + stats = await self.hassio.get_addon_stats(slug) + return (slug, stats) + + async def _update_addon_changelog(self, slug): + """Return the changelog for an add-on.""" + changelog = await self.hassio.get_addon_changelog(slug) + return (slug, changelog) + + async def _update_addon_info(self, slug): + """Return the info for an add-on.""" + info = await self.hassio.get_addon_info(slug) + return (slug, info) diff --git a/homeassistant/components/hassio/handler.py b/homeassistant/components/hassio/handler.py index 66395b49400..4146753b753 100644 --- a/homeassistant/components/hassio/handler.py +++ b/homeassistant/components/hassio/handler.py @@ -168,6 +168,14 @@ class HassIO: """ return self.send_command("/homeassistant/stop") + @_api_bool + def refresh_updates(self): + """Refresh available updates. + + This method return a coroutine. + """ + return self.send_command("/refresh_updates", timeout=None) + @api_data def retrieve_discovery_messages(self): """Return all discovery data from Hass.io API. diff --git a/tests/components/hassio/test_binary_sensor.py b/tests/components/hassio/test_binary_sensor.py index ef114b90771..a49b27ba4e7 100644 --- a/tests/components/hassio/test_binary_sensor.py +++ b/tests/components/hassio/test_binary_sensor.py @@ -127,6 +127,7 @@ def mock_all(aioclient_mock, request): aioclient_mock.get( "http://127.0.0.1/ingress/panels", json={"result": "ok", "data": {"panels": {}}} ) + aioclient_mock.post("http://127.0.0.1/refresh_updates", json={"result": "ok"}) @pytest.mark.parametrize( diff --git a/tests/components/hassio/test_init.py b/tests/components/hassio/test_init.py index 1a50d9c3036..527c98b615e 100644 --- a/tests/components/hassio/test_init.py +++ b/tests/components/hassio/test_init.py @@ -9,6 +9,7 @@ from homeassistant.auth.const import GROUP_ID_ADMIN from homeassistant.components import frontend from homeassistant.components.binary_sensor import DOMAIN as BINARY_SENSOR_DOMAIN from homeassistant.components.hassio import ADDONS_COORDINATOR, DOMAIN, STORAGE_KEY +from homeassistant.components.hassio.handler import HassioAPIError from homeassistant.components.sensor import DOMAIN as SENSOR_DOMAIN from homeassistant.helpers.device_registry import async_get from homeassistant.setup import async_setup_component @@ -151,6 +152,7 @@ def mock_all(aioclient_mock, request): aioclient_mock.get( "http://127.0.0.1/ingress/panels", json={"result": "ok", "data": {"panels": {}}} ) + aioclient_mock.post("http://127.0.0.1/refresh_updates", json={"result": "ok"}) async def test_setup_api_ping(hass, aioclient_mock): @@ -159,7 +161,7 @@ async def test_setup_api_ping(hass, aioclient_mock): result = await async_setup_component(hass, "hassio", {}) assert result - assert aioclient_mock.call_count == 10 + assert aioclient_mock.call_count == 15 assert hass.components.hassio.get_core_info()["version_latest"] == "1.0.0" assert hass.components.hassio.is_hassio() @@ -198,7 +200,7 @@ async def test_setup_api_push_api_data(hass, aioclient_mock): ) assert result - assert aioclient_mock.call_count == 10 + assert aioclient_mock.call_count == 15 assert not aioclient_mock.mock_calls[1][2]["ssl"] assert aioclient_mock.mock_calls[1][2]["port"] == 9999 assert aioclient_mock.mock_calls[1][2]["watchdog"] @@ -214,7 +216,7 @@ async def test_setup_api_push_api_data_server_host(hass, aioclient_mock): ) assert result - assert aioclient_mock.call_count == 10 + assert aioclient_mock.call_count == 15 assert not aioclient_mock.mock_calls[1][2]["ssl"] assert aioclient_mock.mock_calls[1][2]["port"] == 9999 assert not aioclient_mock.mock_calls[1][2]["watchdog"] @@ -226,7 +228,7 @@ async def test_setup_api_push_api_data_default(hass, aioclient_mock, hass_storag result = await async_setup_component(hass, "hassio", {"http": {}, "hassio": {}}) assert result - assert aioclient_mock.call_count == 10 + assert aioclient_mock.call_count == 15 assert not aioclient_mock.mock_calls[1][2]["ssl"] assert aioclient_mock.mock_calls[1][2]["port"] == 8123 refresh_token = aioclient_mock.mock_calls[1][2]["refresh_token"] @@ -293,7 +295,7 @@ async def test_setup_api_existing_hassio_user(hass, aioclient_mock, hass_storage result = await async_setup_component(hass, "hassio", {"http": {}, "hassio": {}}) assert result - assert aioclient_mock.call_count == 10 + assert aioclient_mock.call_count == 15 assert not aioclient_mock.mock_calls[1][2]["ssl"] assert aioclient_mock.mock_calls[1][2]["port"] == 8123 assert aioclient_mock.mock_calls[1][2]["refresh_token"] == token.token @@ -307,7 +309,7 @@ async def test_setup_core_push_timezone(hass, aioclient_mock): result = await async_setup_component(hass, "hassio", {"hassio": {}}) assert result - assert aioclient_mock.call_count == 10 + assert aioclient_mock.call_count == 15 assert aioclient_mock.mock_calls[2][2]["timezone"] == "testzone" with patch("homeassistant.util.dt.set_default_time_zone"): @@ -324,7 +326,7 @@ async def test_setup_hassio_no_additional_data(hass, aioclient_mock): result = await async_setup_component(hass, "hassio", {"hassio": {}}) assert result - assert aioclient_mock.call_count == 10 + assert aioclient_mock.call_count == 15 assert aioclient_mock.mock_calls[-1][3]["X-Hassio-Key"] == "123456" @@ -630,3 +632,27 @@ async def test_device_registry_calls(hass): async_fire_time_changed(hass, dt_util.now() + timedelta(hours=3)) await hass.async_block_till_done() assert len(dev_reg.devices) == 5 + + +async def test_coordinator_updates(hass, caplog): + """Test coordinator.""" + with patch.dict(os.environ, MOCK_ENVIRON), patch( + "homeassistant.components.hassio.HassIO.refresh_updates" + ) as refresh_updates_mock: + config_entry = MockConfigEntry(domain=DOMAIN, data={}, unique_id=DOMAIN) + config_entry.add_to_hass(hass) + assert await hass.config_entries.async_setup(config_entry.entry_id) + await hass.async_block_till_done() + assert refresh_updates_mock.call_count == 1 + + with patch( + "homeassistant.components.hassio.HassIO.refresh_updates", + side_effect=HassioAPIError("Unknown"), + ) as refresh_updates_mock: + async_fire_time_changed(hass, dt_util.now() + timedelta(minutes=5)) + await hass.async_block_till_done() + assert refresh_updates_mock.call_count == 1 + assert ( + "Error fetching hassio data: Error on Supervisor API: Unknown" + in caplog.text + ) diff --git a/tests/components/hassio/test_sensor.py b/tests/components/hassio/test_sensor.py index e6a35c4744d..9dc620ba94f 100644 --- a/tests/components/hassio/test_sensor.py +++ b/tests/components/hassio/test_sensor.py @@ -120,6 +120,7 @@ def mock_all(aioclient_mock, request): aioclient_mock.get( "http://127.0.0.1/ingress/panels", json={"result": "ok", "data": {"panels": {}}} ) + aioclient_mock.post("http://127.0.0.1/refresh_updates", json={"result": "ok"}) @pytest.mark.parametrize( diff --git a/tests/components/hassio/test_update.py b/tests/components/hassio/test_update.py index f9b7c201ba3..e682562297d 100644 --- a/tests/components/hassio/test_update.py +++ b/tests/components/hassio/test_update.py @@ -133,6 +133,7 @@ def mock_all(aioclient_mock, request): aioclient_mock.get( "http://127.0.0.1/ingress/panels", json={"result": "ok", "data": {"panels": {}}} ) + aioclient_mock.post("http://127.0.0.1/refresh_updates", json={"result": "ok"}) @pytest.mark.parametrize( From 96ac47f36e3169d4512d70cb4b1960709cab1054 Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Tue, 5 Apr 2022 07:10:59 +0200 Subject: [PATCH 125/238] Correct unit_of_measurement for trigger-based template sensor (#69291) --- homeassistant/components/template/sensor.py | 5 +++++ homeassistant/components/template/trigger_entity.py | 13 +------------ 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/homeassistant/components/template/sensor.py b/homeassistant/components/template/sensor.py index c1fae1f4f3b..a61d15cb7a4 100644 --- a/homeassistant/components/template/sensor.py +++ b/homeassistant/components/template/sensor.py @@ -253,6 +253,11 @@ class TriggerSensorEntity(TriggerEntity, SensorEntity): """Sensor state class.""" return self._config.get(CONF_STATE_CLASS) + @property + def native_unit_of_measurement(self) -> str | None: + """Return the unit of measurement of the sensor, if any.""" + return self._config.get(CONF_UNIT_OF_MEASUREMENT) + @callback def _process_data(self) -> None: """Process new data.""" diff --git a/homeassistant/components/template/trigger_entity.py b/homeassistant/components/template/trigger_entity.py index 123b365d697..bebe941fbf9 100644 --- a/homeassistant/components/template/trigger_entity.py +++ b/homeassistant/components/template/trigger_entity.py @@ -4,13 +4,7 @@ from __future__ import annotations import logging from typing import Any -from homeassistant.const import ( - CONF_DEVICE_CLASS, - CONF_ICON, - CONF_NAME, - CONF_UNIQUE_ID, - CONF_UNIT_OF_MEASUREMENT, -) +from homeassistant.const import CONF_DEVICE_CLASS, CONF_ICON, CONF_NAME, CONF_UNIQUE_ID from homeassistant.core import HomeAssistant, callback from homeassistant.exceptions import TemplateError from homeassistant.helpers import template @@ -89,11 +83,6 @@ class TriggerEntity(CoordinatorEntity[TriggerUpdateCoordinator]): """Return device class of the entity.""" return self._config.get(CONF_DEVICE_CLASS) - @property - def unit_of_measurement(self) -> str | None: - """Return unit of measurement.""" - return self._config.get(CONF_UNIT_OF_MEASUREMENT) - @property def icon(self) -> str | None: """Return icon.""" From dc7d140c29d6864393b2462aef4941ab6f50e006 Mon Sep 17 00:00:00 2001 From: starkillerOG Date: Mon, 4 Apr 2022 21:09:48 +0200 Subject: [PATCH 126/238] bump pynetgear to 0.9.3 (#69292) --- homeassistant/components/netgear/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/netgear/manifest.json b/homeassistant/components/netgear/manifest.json index 932535f68f6..04c2a15760b 100644 --- a/homeassistant/components/netgear/manifest.json +++ b/homeassistant/components/netgear/manifest.json @@ -2,7 +2,7 @@ "domain": "netgear", "name": "NETGEAR", "documentation": "https://www.home-assistant.io/integrations/netgear", - "requirements": ["pynetgear==0.9.2"], + "requirements": ["pynetgear==0.9.3"], "codeowners": ["@hacf-fr", "@Quentame", "@starkillerOG"], "iot_class": "local_polling", "config_flow": true, diff --git a/requirements_all.txt b/requirements_all.txt index 6681762b7e7..c1930057180 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -1652,7 +1652,7 @@ pymyq==3.1.4 pymysensors==0.22.1 # homeassistant.components.netgear -pynetgear==0.9.2 +pynetgear==0.9.3 # homeassistant.components.netio pynetio==0.1.9.1 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 47a44740062..3af095fc88f 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -1104,7 +1104,7 @@ pymyq==3.1.4 pymysensors==0.22.1 # homeassistant.components.netgear -pynetgear==0.9.2 +pynetgear==0.9.3 # homeassistant.components.nina pynina==0.1.7 From df2a31a70b1c2ded5dffd3b541d4bb115103ea9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Hjelseth=20H=C3=B8yer?= Date: Tue, 5 Apr 2022 08:55:17 +0200 Subject: [PATCH 127/238] Update Tibber lib (#69300) --- homeassistant/components/tibber/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/tibber/manifest.json b/homeassistant/components/tibber/manifest.json index 9b84b9a54c2..598810b1a0a 100644 --- a/homeassistant/components/tibber/manifest.json +++ b/homeassistant/components/tibber/manifest.json @@ -3,7 +3,7 @@ "domain": "tibber", "name": "Tibber", "documentation": "https://www.home-assistant.io/integrations/tibber", - "requirements": ["pyTibber==0.22.1"], + "requirements": ["pyTibber==0.22.2"], "codeowners": ["@danielhiversen"], "quality_scale": "silver", "config_flow": true, diff --git a/requirements_all.txt b/requirements_all.txt index c1930057180..102498b4141 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -1315,7 +1315,7 @@ pyRFXtrx==0.28.0 # pySwitchmate==0.4.6 # homeassistant.components.tibber -pyTibber==0.22.1 +pyTibber==0.22.2 # homeassistant.components.dlink pyW215==0.7.0 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 3af095fc88f..850d77bb225 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -881,7 +881,7 @@ pyMetno==0.9.0 pyRFXtrx==0.28.0 # homeassistant.components.tibber -pyTibber==0.22.1 +pyTibber==0.22.2 # homeassistant.components.nextbus py_nextbusnext==0.1.5 From 681242f10257ad55bce01e13a3c53554a19cff87 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 4 Apr 2022 23:57:57 -0700 Subject: [PATCH 128/238] Bumped version to 2022.4.0b5 --- homeassistant/const.py | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/const.py b/homeassistant/const.py index 3781eccfa24..44cfbcbd7ec 100644 --- a/homeassistant/const.py +++ b/homeassistant/const.py @@ -7,7 +7,7 @@ from .backports.enum import StrEnum MAJOR_VERSION: Final = 2022 MINOR_VERSION: Final = 4 -PATCH_VERSION: Final = "0b4" +PATCH_VERSION: Final = "0b5" __short_version__: Final = f"{MAJOR_VERSION}.{MINOR_VERSION}" __version__: Final = f"{__short_version__}.{PATCH_VERSION}" REQUIRED_PYTHON_VER: Final[tuple[int, int, int]] = (3, 9, 0) diff --git a/setup.cfg b/setup.cfg index a21cc6fec9e..7c14c478d3f 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = homeassistant -version = 2022.4.0b4 +version = 2022.4.0b5 author = The Home Assistant Authors author_email = hello@home-assistant.io license = Apache-2.0 From 44fefa42a88626c7802dc576415d5be220cce500 Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Tue, 5 Apr 2022 20:08:17 +0200 Subject: [PATCH 129/238] Improve integration translation strings (#69246) * Improve integration translation strings * Update --- .../components/integration/config_flow.py | 2 +- .../components/integration/strings.json | 18 ++++++++++++----- .../integration/translations/en.json | 20 +++++++++++++------ 3 files changed, 28 insertions(+), 12 deletions(-) diff --git a/homeassistant/components/integration/config_flow.py b/homeassistant/components/integration/config_flow.py index 1f6fc7c6ee0..3f7d39554e8 100644 --- a/homeassistant/components/integration/config_flow.py +++ b/homeassistant/components/integration/config_flow.py @@ -83,7 +83,7 @@ CONFIG_SCHEMA = vol.Schema( {"select": {"options": UNIT_PREFIXES}} ), vol.Required(CONF_UNIT_TIME, default=TIME_HOURS): selector.selector( - {"select": {"options": TIME_UNITS}} + {"select": {"options": TIME_UNITS, "mode": "dropdown"}} ), } ) diff --git a/homeassistant/components/integration/strings.json b/homeassistant/components/integration/strings.json index 9566ca686d6..4eb3b952a78 100644 --- a/homeassistant/components/integration/strings.json +++ b/homeassistant/components/integration/strings.json @@ -1,26 +1,34 @@ { + "title": "Integration - Riemann sum integral sensor", "config": { "step": { "user": { - "title": "New Integration sensor", - "description": "Precision controls the number of decimal digits in the output.\nThe sum will be scaled according to the selected metric prefix and integration time.", + "title": "Add Riemann sum integral sensor", + "description": "Create a sensor that calculates a Riemann sum to estimate the integral of a sensor.", "data": { "method": "Integration method", "name": "Name", "round": "Precision", "source": "Input sensor", "unit_prefix": "Metric prefix", - "unit_time": "Integration time" + "unit_time": "Time unit" + }, + "data_description": { + "round": "Controls the number of decimal digits in the output.", + "unit_prefix": "The output will be scaled according to the selected metric prefix.", + "unit_time": "The output will be scaled according to the selected time unit." } } } }, "options": { "step": { - "options": { - "description": "Precision controls the number of decimal digits in the output.", + "init": { "data": { "round": "[%key:component::integration::config::step::user::data::round%]" + }, + "data_description": { + "round": "[%key:component::integration::config::step::user::data_description::round%]" } } } diff --git a/homeassistant/components/integration/translations/en.json b/homeassistant/components/integration/translations/en.json index 31223f01842..1ee047b447f 100644 --- a/homeassistant/components/integration/translations/en.json +++ b/homeassistant/components/integration/translations/en.json @@ -8,21 +8,29 @@ "round": "Precision", "source": "Input sensor", "unit_prefix": "Metric prefix", - "unit_time": "Integration time" + "unit_time": "Time unit" }, - "description": "Precision controls the number of decimal digits in the output.\nThe sum will be scaled according to the selected metric prefix and integration time.", - "title": "New Integration sensor" + "data_description": { + "round": "Controls the number of decimal digits in the output.", + "unit_prefix": "The output will be scaled according to the selected metric prefix.", + "unit_time": "The output will be scaled according to the selected time unit." + }, + "description": "Create a sensor that calculates a Riemann sum to estimate the integral of a sensor.", + "title": "Add Riemann sum integral sensor" } } }, "options": { "step": { - "options": { + "init": { "data": { "round": "Precision" }, - "description": "Precision controls the number of decimal digits in the output." + "data_description": { + "round": "Controls the number of decimal digits in the output." + } } } - } + }, + "title": "Integration - Riemann sum integral sensor" } \ No newline at end of file From 685af1dd5c05e079aff71887956760c19f065eea Mon Sep 17 00:00:00 2001 From: MoellerDi Date: Tue, 5 Apr 2022 20:00:12 +0200 Subject: [PATCH 130/238] Fix "Camera not found" error in microsoft_face integration (#69295) --- homeassistant/components/microsoft_face/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/components/microsoft_face/__init__.py b/homeassistant/components/microsoft_face/__init__.py index 19bfef1349c..6b8fcde63f1 100644 --- a/homeassistant/components/microsoft_face/__init__.py +++ b/homeassistant/components/microsoft_face/__init__.py @@ -10,6 +10,7 @@ from aiohttp.hdrs import CONTENT_TYPE import async_timeout import voluptuous as vol +from homeassistant.components import camera from homeassistant.const import ATTR_NAME, CONF_API_KEY, CONF_TIMEOUT, CONTENT_TYPE_JSON from homeassistant.core import HomeAssistant, ServiceCall from homeassistant.exceptions import HomeAssistantError @@ -181,7 +182,6 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: p_id = face.store[g_id].get(service.data[ATTR_PERSON]) camera_entity = service.data[ATTR_CAMERA_ENTITY] - camera = hass.components.camera try: image = await camera.async_get_image(hass, camera_entity) From 90d5bd12fbfa3540aa18dbd9dd8b56f8fa7ddbc1 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Tue, 5 Apr 2022 10:46:12 -1000 Subject: [PATCH 131/238] Ensure state is restored when turning on tplink lights without a color mode (#69308) --- homeassistant/components/tplink/light.py | 30 +++----------- homeassistant/components/tplink/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- tests/components/tplink/test_light.py | 41 +++++++++---------- 5 files changed, 27 insertions(+), 50 deletions(-) diff --git a/homeassistant/components/tplink/light.py b/homeassistant/components/tplink/light.py index 4bafb0472e9..9a67f8daf4b 100644 --- a/homeassistant/components/tplink/light.py +++ b/homeassistant/components/tplink/light.py @@ -318,15 +318,6 @@ class TPLinkSmartLightStrip(TPLinkSmartBulb): device: SmartLightStrip - def __init__( - self, - device: SmartLightStrip, - coordinator: TPLinkDataUpdateCoordinator, - ) -> None: - """Initialize the smart light strip.""" - super().__init__(device, coordinator) - self._last_custom_effect: dict[str, Any] = {} - @property def supported_features(self) -> int: """Flag supported features.""" @@ -351,6 +342,11 @@ class TPLinkSmartLightStrip(TPLinkSmartBulb): """Turn the light on.""" brightness, transition = self._async_extract_brightness_transition(**kwargs) if ATTR_COLOR_TEMP in kwargs: + if self.effect: + # If there is an effect in progress + # we have to set an HSV value to clear the effect + # before we can set a color temp + await self.device.set_hsv(0, 0, brightness) await self._async_set_color_temp( int(kwargs[ATTR_COLOR_TEMP]), brightness, transition ) @@ -358,20 +354,6 @@ class TPLinkSmartLightStrip(TPLinkSmartBulb): await self._async_set_hsv(kwargs[ATTR_HS_COLOR], brightness, transition) elif ATTR_EFFECT in kwargs: await self.device.set_effect(kwargs[ATTR_EFFECT]) - elif ( - self.device.is_off - and self.device.effect - and self.device.effect["enable"] == 0 - and self.device.effect["name"] - ): - if not self.device.effect["custom"]: - await self.device.set_effect(self.device.effect["name"]) - elif self._last_custom_effect: - await self.device.set_custom_effect(self._last_custom_effect) - # The device does not remember custom effects - # so we must set a default value or it can never turn back on - else: - await self.device.set_hsv(0, 0, 100, transition=transition) else: await self._async_turn_on_with_brightness(brightness, transition) @@ -412,7 +394,6 @@ class TPLinkSmartLightStrip(TPLinkSmartBulb): if transition_range: effect["transition_range"] = transition_range effect["transition"] = 0 - self._last_custom_effect = effect await self.device.set_custom_effect(effect) async def async_set_sequence_effect( @@ -434,5 +415,4 @@ class TPLinkSmartLightStrip(TPLinkSmartBulb): "spread": spread, "direction": direction, } - self._last_custom_effect = effect await self.device.set_custom_effect(effect) diff --git a/homeassistant/components/tplink/manifest.json b/homeassistant/components/tplink/manifest.json index 5ec5166aa1e..3b23f466296 100644 --- a/homeassistant/components/tplink/manifest.json +++ b/homeassistant/components/tplink/manifest.json @@ -3,7 +3,7 @@ "name": "TP-Link Kasa Smart", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/tplink", - "requirements": ["python-kasa==0.4.2"], + "requirements": ["python-kasa==0.4.3"], "codeowners": ["@rytilahti", "@thegardenmonkey"], "dependencies": ["network"], "quality_scale": "platinum", diff --git a/requirements_all.txt b/requirements_all.txt index 102498b4141..88612089f8c 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -1895,7 +1895,7 @@ python-join-api==0.0.9 python-juicenet==1.1.0 # homeassistant.components.tplink -python-kasa==0.4.2 +python-kasa==0.4.3 # homeassistant.components.lirc # python-lirc==1.2.3 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 850d77bb225..e8141fd4d22 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -1239,7 +1239,7 @@ python-izone==1.2.3 python-juicenet==1.1.0 # homeassistant.components.tplink -python-kasa==0.4.2 +python-kasa==0.4.3 # homeassistant.components.xiaomi_miio python-miio==0.5.11 diff --git a/tests/components/tplink/test_light.py b/tests/components/tplink/test_light.py index db2fdbebb41..9975aa1c660 100644 --- a/tests/components/tplink/test_light.py +++ b/tests/components/tplink/test_light.py @@ -412,6 +412,19 @@ async def test_smart_strip_effects(hass: HomeAssistant) -> None: assert state.attributes[ATTR_EFFECT] == "Effect1" assert state.attributes[ATTR_EFFECT_LIST] == ["Effect1", "Effect2"] + # Ensure setting color temp when an effect + # is in progress calls set_hsv to clear the effect + await hass.services.async_call( + LIGHT_DOMAIN, + "turn_on", + {ATTR_ENTITY_ID: entity_id, ATTR_COLOR_TEMP: 250}, + blocking=True, + ) + strip.set_hsv.assert_called_once_with(0, 0, None) + strip.set_color_temp.assert_called_once_with(4000, brightness=None, transition=None) + strip.set_hsv.reset_mock() + strip.set_color_temp.reset_mock() + await hass.services.async_call( LIGHT_DOMAIN, "turn_on", @@ -444,8 +457,8 @@ async def test_smart_strip_effects(hass: HomeAssistant) -> None: {ATTR_ENTITY_ID: entity_id}, blocking=True, ) - strip.set_effect.assert_called_once_with("Effect1") - strip.set_effect.reset_mock() + strip.turn_on.assert_called_once() + strip.turn_on.reset_mock() strip.is_off = False strip.is_on = True @@ -539,24 +552,8 @@ async def test_smart_strip_custom_random_effect(hass: HomeAssistant) -> None: {ATTR_ENTITY_ID: entity_id}, blocking=True, ) - strip.set_custom_effect.assert_called_once_with( - { - "custom": 1, - "id": "yMwcNpLxijmoKamskHCvvravpbnIqAIN", - "brightness": 100, - "name": "Custom", - "segments": [0], - "expansion_strategy": 1, - "enable": 1, - "duration": 0, - "transition": 0, - "type": "random", - "init_states": [[340, 20, 50]], - "random_seed": 100, - "backgrounds": [(340, 20, 50), (20, 50, 50), (0, 100, 50)], - } - ) - strip.set_custom_effect.reset_mock() + strip.turn_on.assert_called_once() + strip.turn_on.reset_mock() await hass.services.async_call( DOMAIN, @@ -632,8 +629,8 @@ async def test_smart_strip_custom_random_effect_at_start(hass: HomeAssistant) -> {ATTR_ENTITY_ID: entity_id}, blocking=True, ) - strip.set_hsv.assert_called_with(0, 0, 100, transition=None) - strip.set_hsv.reset_mock() + strip.turn_on.assert_called_once() + strip.turn_on.reset_mock() async def test_smart_strip_custom_sequence_effect(hass: HomeAssistant) -> None: From e94fad469ff40764f60ce1bda0f346d6d5883703 Mon Sep 17 00:00:00 2001 From: Martin Hjelmare Date: Tue, 5 Apr 2022 11:46:42 +0200 Subject: [PATCH 132/238] Use recorder executor in demo (#69327) --- homeassistant/components/demo/__init__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/demo/__init__.py b/homeassistant/components/demo/__init__.py index 2afb58aff70..9c399c67f35 100644 --- a/homeassistant/components/demo/__init__.py +++ b/homeassistant/components/demo/__init__.py @@ -5,6 +5,7 @@ from random import random from homeassistant import config_entries, setup from homeassistant.components import persistent_notification +from homeassistant.components.recorder import get_instance from homeassistant.components.recorder.statistics import ( async_add_external_statistics, get_last_statistics, @@ -245,7 +246,7 @@ async def _insert_statistics(hass): } statistic_id = f"{DOMAIN}:energy_consumption" sum_ = 0 - last_stats = await hass.async_add_executor_job( + last_stats = await get_instance(hass).async_add_executor_job( get_last_statistics, hass, 1, statistic_id, True ) if "domain:energy_consumption" in last_stats: From 186d8c9d50a4dc6c2c823ebd65e54ab3fa1aa511 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20S=C3=B8rensen?= Date: Tue, 5 Apr 2022 12:57:33 +0200 Subject: [PATCH 133/238] Bump pyhaversion from 22.02.0 to 22.04.0 (#69329) --- homeassistant/components/version/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/version/manifest.json b/homeassistant/components/version/manifest.json index ee6d5c4e684..966286d0b3b 100644 --- a/homeassistant/components/version/manifest.json +++ b/homeassistant/components/version/manifest.json @@ -2,7 +2,7 @@ "domain": "version", "name": "Version", "documentation": "https://www.home-assistant.io/integrations/version", - "requirements": ["pyhaversion==22.02.0"], + "requirements": ["pyhaversion==22.04.0"], "codeowners": ["@fabaff", "@ludeeus"], "quality_scale": "internal", "iot_class": "local_push", diff --git a/requirements_all.txt b/requirements_all.txt index 88612089f8c..b4becaaf8c0 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -1511,7 +1511,7 @@ pygtfs==0.1.6 pygti==0.9.2 # homeassistant.components.version -pyhaversion==22.02.0 +pyhaversion==22.04.0 # homeassistant.components.heos pyheos==0.7.2 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index e8141fd4d22..1f903f04262 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -999,7 +999,7 @@ pygatt[GATTTOOL]==4.0.5 pygti==0.9.2 # homeassistant.components.version -pyhaversion==22.02.0 +pyhaversion==22.04.0 # homeassistant.components.heos pyheos==0.7.2 From a3ac495e0303f2a63106c46e15e5767d8ab021a0 Mon Sep 17 00:00:00 2001 From: Philip Allgaier Date: Tue, 5 Apr 2022 21:22:03 +0200 Subject: [PATCH 134/238] Prevent issues with config update of "Timer" integration (unknown "restore" key) (#69332) --- homeassistant/components/timer/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/components/timer/__init__.py b/homeassistant/components/timer/__init__.py index 215aa8577f7..e5564736c74 100644 --- a/homeassistant/components/timer/__init__.py +++ b/homeassistant/components/timer/__init__.py @@ -388,5 +388,5 @@ class Timer(RestoreEntity): """Handle when the config is updated.""" self._config = config self._duration = cv.time_period_str(config[CONF_DURATION]) - self._restore = config[CONF_RESTORE] + self._restore = config.get(CONF_RESTORE, DEFAULT_RESTORE) self.async_write_ha_state() From 7b3643410132e6b1632393c960d08ce981ce6528 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Tue, 5 Apr 2022 03:51:25 -1000 Subject: [PATCH 135/238] Try exact match first for update state (#69335) - Exact matches are much cheaper than creating an AwesomeVersion and calling the __gt__ method, and since most of the time the result is expected to be off, we want to optimize for this case --- homeassistant/components/update/__init__.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/update/__init__.py b/homeassistant/components/update/__init__.py index 90418dbf8b9..100b5dcc35e 100644 --- a/homeassistant/components/update/__init__.py +++ b/homeassistant/components/update/__init__.py @@ -327,13 +327,15 @@ class UpdateEntity(RestoreEntity): if latest_version == self.__skipped_version: return STATE_OFF + if latest_version == installed_version: + return STATE_OFF try: newer = AwesomeVersion(latest_version) > installed_version return STATE_ON if newer else STATE_OFF except AwesomeVersionCompareException: - # Can't compare versions, fallback to exact match - return STATE_OFF if latest_version == installed_version else STATE_ON + # Can't compare versions, already tried exact match + return STATE_ON @final @property From a39a6fce2aa3de86eda48289b5316c8c5b7603d1 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Tue, 5 Apr 2022 01:10:20 -1000 Subject: [PATCH 136/238] Fix roomba doing I/O in the event loop (#69339) --- homeassistant/components/roomba/__init__.py | 16 ++++++++++------ homeassistant/components/roomba/config_flow.py | 16 ++++++++++------ 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/homeassistant/components/roomba/__init__.py b/homeassistant/components/roomba/__init__.py index 0a58effa481..31b5187a195 100644 --- a/homeassistant/components/roomba/__init__.py +++ b/homeassistant/components/roomba/__init__.py @@ -1,5 +1,6 @@ """The roomba component.""" import asyncio +from functools import partial import logging import async_timeout @@ -42,12 +43,15 @@ async def async_setup_entry(hass: HomeAssistant, config_entry: ConfigEntry) -> b }, ) - roomba = RoombaFactory.create_roomba( - address=config_entry.data[CONF_HOST], - blid=config_entry.data[CONF_BLID], - password=config_entry.data[CONF_PASSWORD], - continuous=config_entry.options[CONF_CONTINUOUS], - delay=config_entry.options[CONF_DELAY], + roomba = await hass.async_add_executor_job( + partial( + RoombaFactory.create_roomba, + address=config_entry.data[CONF_HOST], + blid=config_entry.data[CONF_BLID], + password=config_entry.data[CONF_PASSWORD], + continuous=config_entry.options[CONF_CONTINUOUS], + delay=config_entry.options[CONF_DELAY], + ) ) try: diff --git a/homeassistant/components/roomba/config_flow.py b/homeassistant/components/roomba/config_flow.py index 2dbecdf32f2..7aee875308b 100644 --- a/homeassistant/components/roomba/config_flow.py +++ b/homeassistant/components/roomba/config_flow.py @@ -1,6 +1,7 @@ """Config flow to configure roomba component.""" import asyncio +from functools import partial from roombapy import RoombaFactory from roombapy.discovery import RoombaDiscovery @@ -41,12 +42,15 @@ async def validate_input(hass: core.HomeAssistant, data): Data has the keys from DATA_SCHEMA with values provided by the user. """ - roomba = RoombaFactory.create_roomba( - address=data[CONF_HOST], - blid=data[CONF_BLID], - password=data[CONF_PASSWORD], - continuous=False, - delay=data[CONF_DELAY], + roomba = await hass.async_add_executor_job( + partial( + RoombaFactory.create_roomba, + address=data[CONF_HOST], + blid=data[CONF_BLID], + password=data[CONF_PASSWORD], + continuous=False, + delay=data[CONF_DELAY], + ) ) info = await async_connect_or_timeout(hass, roomba) From def04f1ae87af44f3ed321b9eeb6d58b40d8e7e5 Mon Sep 17 00:00:00 2001 From: shbatm Date: Tue, 5 Apr 2022 14:20:38 -0500 Subject: [PATCH 137/238] Bump PyISY to 3.0.6 to fix group statuses (#69345) --- homeassistant/components/isy994/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/isy994/manifest.json b/homeassistant/components/isy994/manifest.json index c7329bc57ce..d92226a4277 100644 --- a/homeassistant/components/isy994/manifest.json +++ b/homeassistant/components/isy994/manifest.json @@ -2,7 +2,7 @@ "domain": "isy994", "name": "Universal Devices ISY994", "documentation": "https://www.home-assistant.io/integrations/isy994", - "requirements": ["pyisy==3.0.5"], + "requirements": ["pyisy==3.0.6"], "codeowners": ["@bdraco", "@shbatm"], "config_flow": true, "ssdp": [ diff --git a/requirements_all.txt b/requirements_all.txt index b4becaaf8c0..de2a738e288 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -1556,7 +1556,7 @@ pyirishrail==0.0.2 pyiss==1.0.1 # homeassistant.components.isy994 -pyisy==3.0.5 +pyisy==3.0.6 # homeassistant.components.itach pyitachip2ir==0.0.7 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 1f903f04262..b9f3047e6f4 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -1032,7 +1032,7 @@ pyiqvia==2021.11.0 pyiss==1.0.1 # homeassistant.components.isy994 -pyisy==3.0.5 +pyisy==3.0.6 # homeassistant.components.kaleidescape pykaleidescape==1.0.1 From a42327ffce2bd137cbd946c20a4e007a1da8444a Mon Sep 17 00:00:00 2001 From: starkillerOG Date: Tue, 5 Apr 2022 16:31:54 +0200 Subject: [PATCH 138/238] bump pynetgear to 0.9.4 (#69346) * Bump home-assistant/wheels from 2022.01.0 to 2022.01.1 Bumps [home-assistant/wheels](https://github.com/home-assistant/wheels) from 2022.01.0 to 2022.01.1. - [Release notes](https://github.com/home-assistant/wheels/releases) - [Commits](https://github.com/home-assistant/wheels/compare/2022.01.0...2022.01.1) --- updated-dependencies: - dependency-name: home-assistant/wheels dependency-type: direct:production ... Signed-off-by: dependabot[bot] * Bump home-assistant/wheels from 2022.01.1 to 2022.01.2 Bumps [home-assistant/wheels](https://github.com/home-assistant/wheels) from 2022.01.1 to 2022.01.2. - [Release notes](https://github.com/home-assistant/wheels/releases) - [Commits](https://github.com/home-assistant/wheels/compare/2022.01.1...2022.01.2) --- updated-dependencies: - dependency-name: home-assistant/wheels dependency-type: direct:production ... Signed-off-by: dependabot[bot] * Bump home-assistant/builder from 2021.12.0 to 2022.01.0 Bumps [home-assistant/builder](https://github.com/home-assistant/builder) from 2021.12.0 to 2022.01.0. - [Release notes](https://github.com/home-assistant/builder/releases) - [Commits](https://github.com/home-assistant/builder/compare/2021.12.0...2022.01.0) --- updated-dependencies: - dependency-name: home-assistant/builder dependency-type: direct:production ... Signed-off-by: dependabot[bot] * bump pynetgear to 0.9.4 Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- homeassistant/components/netgear/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/netgear/manifest.json b/homeassistant/components/netgear/manifest.json index 04c2a15760b..a5374f4c315 100644 --- a/homeassistant/components/netgear/manifest.json +++ b/homeassistant/components/netgear/manifest.json @@ -2,7 +2,7 @@ "domain": "netgear", "name": "NETGEAR", "documentation": "https://www.home-assistant.io/integrations/netgear", - "requirements": ["pynetgear==0.9.3"], + "requirements": ["pynetgear==0.9.4"], "codeowners": ["@hacf-fr", "@Quentame", "@starkillerOG"], "iot_class": "local_polling", "config_flow": true, diff --git a/requirements_all.txt b/requirements_all.txt index de2a738e288..c3dad1308fd 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -1652,7 +1652,7 @@ pymyq==3.1.4 pymysensors==0.22.1 # homeassistant.components.netgear -pynetgear==0.9.3 +pynetgear==0.9.4 # homeassistant.components.netio pynetio==0.1.9.1 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index b9f3047e6f4..870c7b577db 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -1104,7 +1104,7 @@ pymyq==3.1.4 pymysensors==0.22.1 # homeassistant.components.netgear -pynetgear==0.9.3 +pynetgear==0.9.4 # homeassistant.components.nina pynina==0.1.7 From 1896e39f60c4ce4b685513bdcf050972d721eb7b Mon Sep 17 00:00:00 2001 From: Marvin Wichmann Date: Tue, 5 Apr 2022 20:07:11 +0200 Subject: [PATCH 139/238] Update XKNX to version 0.20.1 (#69353) --- homeassistant/components/knx/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/knx/manifest.json b/homeassistant/components/knx/manifest.json index d5366c02055..604821ae275 100644 --- a/homeassistant/components/knx/manifest.json +++ b/homeassistant/components/knx/manifest.json @@ -3,7 +3,7 @@ "name": "KNX", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/knx", - "requirements": ["xknx==0.20.0"], + "requirements": ["xknx==0.20.1"], "codeowners": ["@Julius2342", "@farmio", "@marvin-w"], "quality_scale": "silver", "iot_class": "local_push", diff --git a/requirements_all.txt b/requirements_all.txt index c3dad1308fd..7f75b019bd2 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -2432,7 +2432,7 @@ xbox-webapi==2.0.11 xboxapi==2.0.1 # homeassistant.components.knx -xknx==0.20.0 +xknx==0.20.1 # homeassistant.components.bluesound # homeassistant.components.fritz diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 870c7b577db..eb93fe0a6b0 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -1575,7 +1575,7 @@ wolf_smartset==0.1.11 xbox-webapi==2.0.11 # homeassistant.components.knx -xknx==0.20.0 +xknx==0.20.1 # homeassistant.components.bluesound # homeassistant.components.fritz From 531aa87170222c595f6d84a3d813fb119bc86e76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johan=20Nenz=C3=A9n?= Date: Wed, 6 Apr 2022 01:33:13 +0200 Subject: [PATCH 140/238] Bump pyplaato to 0.0.16 (#69361) --- homeassistant/components/plaato/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/plaato/manifest.json b/homeassistant/components/plaato/manifest.json index ddb3d4474a3..5335a79fe15 100644 --- a/homeassistant/components/plaato/manifest.json +++ b/homeassistant/components/plaato/manifest.json @@ -6,7 +6,7 @@ "dependencies": ["webhook"], "after_dependencies": ["cloud"], "codeowners": ["@JohNan"], - "requirements": ["pyplaato==0.0.15"], + "requirements": ["pyplaato==0.0.16"], "iot_class": "cloud_push", "loggers": ["pyplaato"] } diff --git a/requirements_all.txt b/requirements_all.txt index 7f75b019bd2..279aeda542c 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -1720,7 +1720,7 @@ pypck==0.7.14 pypjlink2==1.2.1 # homeassistant.components.plaato -pyplaato==0.0.15 +pyplaato==0.0.16 # homeassistant.components.point pypoint==2.3.0 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index eb93fe0a6b0..19457e4ccb6 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -1154,7 +1154,7 @@ pyownet==0.10.0.post1 pypck==0.7.14 # homeassistant.components.plaato -pyplaato==0.0.15 +pyplaato==0.0.16 # homeassistant.components.point pypoint==2.3.0 From 40385758068a8100637457053635395e818096dc Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Tue, 5 Apr 2022 23:54:03 +0200 Subject: [PATCH 141/238] Disable Spotify Media Player entity by default (#69372) --- homeassistant/components/spotify/media_player.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/spotify/media_player.py b/homeassistant/components/spotify/media_player.py index 2b62fdd78c4..3ed7be99041 100644 --- a/homeassistant/components/spotify/media_player.py +++ b/homeassistant/components/spotify/media_player.py @@ -47,7 +47,7 @@ from .util import fetch_image_url _LOGGER = logging.getLogger(__name__) -SCAN_INTERVAL = timedelta(seconds=30) +SCAN_INTERVAL = timedelta(minutes=1) SUPPORT_SPOTIFY = ( SUPPORT_BROWSE_MEDIA @@ -117,6 +117,7 @@ class SpotifyMediaPlayer(MediaPlayerEntity): _attr_icon = "mdi:spotify" _attr_media_content_type = MEDIA_TYPE_MUSIC _attr_media_image_remotely_accessible = False + _attr_entity_registry_enabled_default = False def __init__( self, From 1e6f8fc48ad7cacc0dffe2bed3bbdfbd66f66fd0 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Tue, 5 Apr 2022 13:38:55 -1000 Subject: [PATCH 142/238] Abort samsungtv discovery of legacy devices when unique id not available (#69376) --- .../components/samsungtv/config_flow.py | 7 +++++++ tests/components/samsungtv/test_config_flow.py | 16 ++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/homeassistant/components/samsungtv/config_flow.py b/homeassistant/components/samsungtv/config_flow.py index be71519b0c2..f37020cb029 100644 --- a/homeassistant/components/samsungtv/config_flow.py +++ b/homeassistant/components/samsungtv/config_flow.py @@ -469,6 +469,13 @@ class SamsungTVConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): await self._async_set_unique_id_from_udn() self._async_update_and_abort_for_matching_unique_id() self._async_abort_if_host_already_in_progress() + if self._method == METHOD_LEGACY and discovery_info.ssdp_st in ( + UPNP_SVC_RENDERING_CONTROL, + UPNP_SVC_MAIN_TV_AGENT, + ): + # The UDN we use for the unique id cannot be determined + # from device_info for legacy devices + return self.async_abort(reason="not_supported") self.context["title_placeholders"] = {"device": self._title} return await self.async_step_confirm() diff --git a/tests/components/samsungtv/test_config_flow.py b/tests/components/samsungtv/test_config_flow.py index ec4aa58d39d..19169c20dd3 100644 --- a/tests/components/samsungtv/test_config_flow.py +++ b/tests/components/samsungtv/test_config_flow.py @@ -43,6 +43,7 @@ from homeassistant.components.ssdp import ( ATTR_UPNP_MANUFACTURER, ATTR_UPNP_MODEL_NAME, ATTR_UPNP_UDN, + SsdpServiceInfo, ) from homeassistant.const import ( CONF_HOST, @@ -524,6 +525,21 @@ async def test_ssdp(hass: HomeAssistant) -> None: assert result["result"].unique_id == "0d1cef00-00dc-1000-9c80-4844f7b172de" +@pytest.mark.parametrize( + "data", [MOCK_SSDP_DATA_MAIN_TV_AGENT_ST, MOCK_SSDP_DATA_RENDERING_CONTROL_ST] +) +@pytest.mark.usefixtures("remote", "rest_api_failing") +async def test_ssdp_legacy_not_remote_control_receiver_udn( + hass: HomeAssistant, data: SsdpServiceInfo +) -> None: + """Test we abort if the st is not usable for legacy discovery since it will have a different UDN.""" + result = await hass.config_entries.flow.async_init( + DOMAIN, context={"source": config_entries.SOURCE_SSDP}, data=data + ) + assert result["type"] == RESULT_TYPE_ABORT + assert result["reason"] == RESULT_NOT_SUPPORTED + + @pytest.mark.usefixtures("remote", "rest_api_failing") async def test_ssdp_noprefix(hass: HomeAssistant) -> None: """Test starting a flow from discovery without prefixes.""" From 2296d0fbee92f29af8d252f61d3c843977b24753 Mon Sep 17 00:00:00 2001 From: Zack Barett Date: Tue, 5 Apr 2022 18:32:24 -0500 Subject: [PATCH 143/238] 20220405.0 (#69377) --- homeassistant/components/frontend/manifest.json | 2 +- homeassistant/package_constraints.txt | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/frontend/manifest.json b/homeassistant/components/frontend/manifest.json index 43bea9503c8..a26018e05ce 100644 --- a/homeassistant/components/frontend/manifest.json +++ b/homeassistant/components/frontend/manifest.json @@ -2,7 +2,7 @@ "domain": "frontend", "name": "Home Assistant Frontend", "documentation": "https://www.home-assistant.io/integrations/frontend", - "requirements": ["home-assistant-frontend==20220401.0"], + "requirements": ["home-assistant-frontend==20220405.0"], "dependencies": [ "api", "auth", diff --git a/homeassistant/package_constraints.txt b/homeassistant/package_constraints.txt index 251c68ae698..1ebfb713b70 100644 --- a/homeassistant/package_constraints.txt +++ b/homeassistant/package_constraints.txt @@ -15,7 +15,7 @@ ciso8601==2.2.0 cryptography==35.0.0 fnvhash==0.1.0 hass-nabucasa==0.54.0 -home-assistant-frontend==20220401.0 +home-assistant-frontend==20220405.0 httpx==0.22.0 ifaddr==0.1.7 jinja2==3.1.0 diff --git a/requirements_all.txt b/requirements_all.txt index 279aeda542c..53a810e004c 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -812,7 +812,7 @@ hole==0.7.0 holidays==0.13 # homeassistant.components.frontend -home-assistant-frontend==20220401.0 +home-assistant-frontend==20220405.0 # homeassistant.components.home_connect homeconnect==0.7.0 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 19457e4ccb6..eb98ec83760 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -570,7 +570,7 @@ hole==0.7.0 holidays==0.13 # homeassistant.components.frontend -home-assistant-frontend==20220401.0 +home-assistant-frontend==20220405.0 # homeassistant.components.home_connect homeconnect==0.7.0 From e3b20cf43f2a26efe93f86e0e7a6e1fd91573a39 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 5 Apr 2022 16:40:33 -0700 Subject: [PATCH 144/238] Bumped version to 2022.4.0b6 --- homeassistant/const.py | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/const.py b/homeassistant/const.py index 44cfbcbd7ec..dca2ba97e43 100644 --- a/homeassistant/const.py +++ b/homeassistant/const.py @@ -7,7 +7,7 @@ from .backports.enum import StrEnum MAJOR_VERSION: Final = 2022 MINOR_VERSION: Final = 4 -PATCH_VERSION: Final = "0b5" +PATCH_VERSION: Final = "0b6" __short_version__: Final = f"{MAJOR_VERSION}.{MINOR_VERSION}" __version__: Final = f"{__short_version__}.{PATCH_VERSION}" REQUIRED_PYTHON_VER: Final[tuple[int, int, int]] = (3, 9, 0) diff --git a/setup.cfg b/setup.cfg index 7c14c478d3f..6f07735f99e 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = homeassistant -version = 2022.4.0b5 +version = 2022.4.0b6 author = The Home Assistant Authors author_email = hello@home-assistant.io license = Apache-2.0 From 072cd29b9073027748d7c0ebdbfcf81e8cf30b10 Mon Sep 17 00:00:00 2001 From: hesselonline Date: Wed, 6 Apr 2022 12:05:50 +0200 Subject: [PATCH 145/238] Fix Wallbox charger status (#68708) Co-authored-by: Erik Montnemery Co-authored-by: Martin Hjelmare --- homeassistant/components/wallbox/__init__.py | 38 ++++++++++++++++++++ homeassistant/components/wallbox/const.py | 1 + tests/components/wallbox/__init__.py | 2 ++ 3 files changed, 41 insertions(+) diff --git a/homeassistant/components/wallbox/__init__.py b/homeassistant/components/wallbox/__init__.py index af1c59e42c1..f9510421ba0 100644 --- a/homeassistant/components/wallbox/__init__.py +++ b/homeassistant/components/wallbox/__init__.py @@ -29,6 +29,8 @@ from .const import ( CONF_SERIAL_NUMBER_KEY, CONF_SOFTWARE_KEY, CONF_STATION, + CONF_STATUS_DESCRIPTION_KEY, + CONF_STATUS_ID_KEY, DOMAIN, ) @@ -37,6 +39,39 @@ _LOGGER = logging.getLogger(__name__) PLATFORMS = [Platform.SENSOR, Platform.NUMBER, Platform.LOCK] UPDATE_INTERVAL = 30 +# Translation of StatusId based on Wallbox portal code: +# https://my.wallbox.com/src/utilities/charger/chargerStatuses.js +CHARGER_STATUS: dict[int, str] = { + 0: "Disconnected", + 14: "Error", + 15: "Error", + 161: "Ready", + 162: "Ready", + 163: "Disconnected", + 164: "Waiting", + 165: "Locked", + 166: "Updating", + 177: "Scheduled", + 178: "Paused", + 179: "Scheduled", + 180: "Waiting for car demand", + 181: "Waiting for car demand", + 182: "Paused", + 183: "Waiting in queue by Power Sharing", + 184: "Waiting in queue by Power Sharing", + 185: "Waiting in queue by Power Boost", + 186: "Waiting in queue by Power Boost", + 187: "Waiting MID failed", + 188: "Waiting MID safety margin exceeded", + 189: "Waiting in queue by Eco-Smart", + 193: "Charging", + 194: "Charging", + 195: "Charging", + 196: "Discharging", + 209: "Locked", + 210: "Locked", +} + class WallboxCoordinator(DataUpdateCoordinator[dict[str, Any]]): """Wallbox Coordinator class.""" @@ -86,6 +121,9 @@ class WallboxCoordinator(DataUpdateCoordinator[dict[str, Any]]): data[CONF_LOCKED_UNLOCKED_KEY] = data[CONF_DATA_KEY][ CONF_LOCKED_UNLOCKED_KEY ] + data[CONF_STATUS_DESCRIPTION_KEY] = CHARGER_STATUS.get( + data[CONF_STATUS_ID_KEY], "Unknown" + ) return data diff --git a/homeassistant/components/wallbox/const.py b/homeassistant/components/wallbox/const.py index c5be4d1606d..e4b33f6bc6b 100644 --- a/homeassistant/components/wallbox/const.py +++ b/homeassistant/components/wallbox/const.py @@ -21,5 +21,6 @@ CONF_MAX_CHARGING_CURRENT_KEY = "max_charging_current" CONF_LOCKED_UNLOCKED_KEY = "locked" CONF_NAME_KEY = "name" CONF_STATE_OF_CHARGE_KEY = "state_of_charge" +CONF_STATUS_ID_KEY = "status_id" CONF_STATUS_DESCRIPTION_KEY = "status_description" CONF_CONNECTIONS = "connections" diff --git a/tests/components/wallbox/__init__.py b/tests/components/wallbox/__init__.py index 8a31d2ebcd5..c778f02b454 100644 --- a/tests/components/wallbox/__init__.py +++ b/tests/components/wallbox/__init__.py @@ -20,6 +20,7 @@ from homeassistant.components.wallbox.const import ( CONF_SERIAL_NUMBER_KEY, CONF_SOFTWARE_KEY, CONF_STATION, + CONF_STATUS_ID_KEY, DOMAIN, ) from homeassistant.const import CONF_PASSWORD, CONF_USERNAME @@ -33,6 +34,7 @@ test_response = json.loads( json.dumps( { CONF_CHARGING_POWER_KEY: 0, + CONF_STATUS_ID_KEY: 161, CONF_MAX_AVAILABLE_POWER_KEY: 25.2, CONF_CHARGING_SPEED_KEY: 0, CONF_ADDED_RANGE_KEY: 150, From 8c794ecf93b67c6adc36085cd883ea630a488108 Mon Sep 17 00:00:00 2001 From: Raman Gupta <7243222+raman325@users.noreply.github.com> Date: Wed, 6 Apr 2022 00:40:33 -0400 Subject: [PATCH 146/238] Fix regression in zwave_js (#69312) * Handle unique ID update during discovery step * Use callback to convert unique IDs to strings * Adjust test to make sure logic works * Fix other tests * Move comment * Move migration to async_setup * Remove async_migrate_entry since we take care of it during setup * Remove unused test --- homeassistant/components/zwave_js/__init__.py | 16 ++++--------- .../components/zwave_js/config_flow.py | 4 ++-- tests/components/zwave_js/test_config_flow.py | 24 +++++++++++-------- tests/components/zwave_js/test_init.py | 10 -------- 4 files changed, 21 insertions(+), 33 deletions(-) diff --git a/homeassistant/components/zwave_js/__init__.py b/homeassistant/components/zwave_js/__init__.py index b1fc585394e..12ff9acb530 100644 --- a/homeassistant/components/zwave_js/__init__.py +++ b/homeassistant/components/zwave_js/__init__.py @@ -113,6 +113,11 @@ DATA_INVALID_SERVER_VERSION_LOGGED = "invalid_server_version_logged" async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: """Set up the Z-Wave JS component.""" hass.data[DOMAIN] = {} + for entry in hass.config_entries.async_entries(DOMAIN): + if not isinstance(entry.unique_id, str): + hass.config_entries.async_update_entry( + entry, unique_id=str(entry.unique_id) + ) return True @@ -770,14 +775,3 @@ def async_ensure_addon_updated(hass: HomeAssistant) -> None: if addon_manager.task_in_progress(): raise ConfigEntryNotReady addon_manager.async_schedule_update_addon(catch_error=True) - - -async def async_migrate_entry(hass: HomeAssistant, config_entry: ConfigEntry) -> bool: - """Migrate old entry.""" - if isinstance(config_entry.unique_id, int): # type: ignore[unreachable] - hass.config_entries.async_update_entry( # type: ignore[unreachable] - config_entry, - unique_id=str(config_entry.unique_id), - ) - - return True diff --git a/homeassistant/components/zwave_js/config_flow.py b/homeassistant/components/zwave_js/config_flow.py index 609da3390cc..66cb91f9330 100644 --- a/homeassistant/components/zwave_js/config_flow.py +++ b/homeassistant/components/zwave_js/config_flow.py @@ -667,7 +667,7 @@ class OptionsFlowHandler(BaseZwaveJSFlow, config_entries.OptionsFlow): _LOGGER.exception("Unexpected exception") errors["base"] = "unknown" else: - if self.config_entry.unique_id != version_info.home_id: + if self.config_entry.unique_id != str(version_info.home_id): return self.async_abort(reason="different_device") # Make sure we disable any add-on handling @@ -827,7 +827,7 @@ class OptionsFlowHandler(BaseZwaveJSFlow, config_entries.OptionsFlow): except CannotConnect: return await self.async_revert_addon_config(reason="cannot_connect") - if self.config_entry.unique_id != self.version_info.home_id: + if self.config_entry.unique_id != str(self.version_info.home_id): return await self.async_revert_addon_config(reason="different_device") self._async_update_entry( diff --git a/tests/components/zwave_js/test_config_flow.py b/tests/components/zwave_js/test_config_flow.py index 3e40d67e2a4..07a3f1305a5 100644 --- a/tests/components/zwave_js/test_config_flow.py +++ b/tests/components/zwave_js/test_config_flow.py @@ -811,7 +811,10 @@ async def test_abort_usb_discovery_with_existing_flow(hass, supervisor, addon_op async def test_abort_usb_discovery_already_configured(hass, supervisor, addon_options): """Test usb discovery flow is aborted when there is an existing entry.""" entry = MockConfigEntry( - domain=DOMAIN, data={"url": "ws://localhost:3000"}, title=TITLE, unique_id=1234 + domain=DOMAIN, + data={"url": "ws://localhost:3000"}, + title=TITLE, + unique_id="1234", ) entry.add_to_hass(hass) @@ -1042,9 +1045,10 @@ async def test_addon_running_already_configured( "s2_unauthenticated_key": "old987", }, title=TITLE, - unique_id="1234", + unique_id=1234, # Unique ID is purposely set to int to test migration logic ) entry.add_to_hass(hass) + await hass.config_entries.async_setup(entry.entry_id) result = await hass.config_entries.flow.async_init( DOMAIN, context={"source": config_entries.SOURCE_USER} @@ -1560,7 +1564,7 @@ async def test_install_addon_failure(hass, supervisor, addon_installed, install_ async def test_options_manual(hass, client, integration): """Test manual settings in options flow.""" entry = integration - entry.unique_id = 1234 + entry.unique_id = "1234" assert client.connect.call_count == 1 assert client.disconnect.call_count == 0 @@ -1605,7 +1609,7 @@ async def test_options_manual_different_device(hass, integration): async def test_options_not_addon(hass, client, supervisor, integration): """Test options flow and opting out of add-on on Supervisor.""" entry = integration - entry.unique_id = 1234 + entry.unique_id = "1234" assert client.connect.call_count == 1 assert client.disconnect.call_count == 0 @@ -1706,7 +1710,7 @@ async def test_options_addon_running( """Test options flow and add-on already running on Supervisor.""" addon_options.update(old_addon_options) entry = integration - entry.unique_id = 1234 + entry.unique_id = "1234" data = {**entry.data, **entry_data} hass.config_entries.async_update_entry(entry, data=data) @@ -1816,7 +1820,7 @@ async def test_options_addon_running_no_changes( """Test options flow without changes, and add-on already running on Supervisor.""" addon_options.update(old_addon_options) entry = integration - entry.unique_id = 1234 + entry.unique_id = "1234" data = {**entry.data, **entry_data} hass.config_entries.async_update_entry(entry, data=data) @@ -1929,7 +1933,7 @@ async def test_options_different_device( """Test options flow and configuring a different device.""" addon_options.update(old_addon_options) entry = integration - entry.unique_id = 1234 + entry.unique_id = "1234" data = {**entry.data, **entry_data} hass.config_entries.async_update_entry(entry, data=data) @@ -2079,7 +2083,7 @@ async def test_options_addon_restart_failed( """Test options flow and add-on restart failure.""" addon_options.update(old_addon_options) entry = integration - entry.unique_id = 1234 + entry.unique_id = "1234" data = {**entry.data, **entry_data} hass.config_entries.async_update_entry(entry, data=data) @@ -2200,7 +2204,7 @@ async def test_options_addon_running_server_info_failure( """Test options flow and add-on already running with server info failure.""" addon_options.update(old_addon_options) entry = integration - entry.unique_id = 1234 + entry.unique_id = "1234" data = {**entry.data, **entry_data} hass.config_entries.async_update_entry(entry, data=data) @@ -2304,7 +2308,7 @@ async def test_options_addon_not_installed( addon_installed.return_value["version"] = None addon_options.update(old_addon_options) entry = integration - entry.unique_id = 1234 + entry.unique_id = "1234" data = {**entry.data, **entry_data} hass.config_entries.async_update_entry(entry, data=data) diff --git a/tests/components/zwave_js/test_init.py b/tests/components/zwave_js/test_init.py index 9c260eda4c1..7b3fd773839 100644 --- a/tests/components/zwave_js/test_init.py +++ b/tests/components/zwave_js/test_init.py @@ -8,7 +8,6 @@ from zwave_js_server.exceptions import BaseZwaveJSServerError, InvalidServerVers from zwave_js_server.model.node import Node from homeassistant.components.hassio.handler import HassioAPIError -from homeassistant.components.zwave_js import async_migrate_entry from homeassistant.components.zwave_js.const import DOMAIN from homeassistant.components.zwave_js.helpers import get_device_id from homeassistant.config_entries import ConfigEntryDisabler, ConfigEntryState @@ -1328,12 +1327,3 @@ async def test_disabled_entity_on_value_removed(hass, zp3111, client, integratio | {battery_level_entity, binary_cover_entity, sensor_cover_entity} == new_unavailable_entities ) - - -async def test_async_migrate_entry(hass): - """Test async_migrate_entry.""" - entry = MockConfigEntry(domain=DOMAIN, unique_id=123456789) - assert isinstance(entry.unique_id, int) - await async_migrate_entry(hass, entry) - assert isinstance(entry.unique_id, str) - assert entry.unique_id == "123456789" From 8174b831cf25188a061da68f75aaad0068b74b2d Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Wed, 6 Apr 2022 07:58:12 +0200 Subject: [PATCH 147/238] Restore attributes of template binary sensor (#69350) --- .../components/template/binary_sensor.py | 1 + .../components/template/trigger_entity.py | 39 ++++++++++++++--- .../components/template/test_binary_sensor.py | 42 +++++++++++++++---- 3 files changed, 70 insertions(+), 12 deletions(-) diff --git a/homeassistant/components/template/binary_sensor.py b/homeassistant/components/template/binary_sensor.py index 53267b29341..2a537e2aa6b 100644 --- a/homeassistant/components/template/binary_sensor.py +++ b/homeassistant/components/template/binary_sensor.py @@ -331,6 +331,7 @@ class TriggerBinarySensorEntity(TriggerEntity, BinarySensorEntity, RestoreEntity and self._state is None ): self._state = last_state.state == STATE_ON + self.restore_attributes(last_state) if CONF_AUTO_OFF not in self._config: return diff --git a/homeassistant/components/template/trigger_entity.py b/homeassistant/components/template/trigger_entity.py index bebe941fbf9..6780d12c507 100644 --- a/homeassistant/components/template/trigger_entity.py +++ b/homeassistant/components/template/trigger_entity.py @@ -4,8 +4,16 @@ from __future__ import annotations import logging from typing import Any -from homeassistant.const import CONF_DEVICE_CLASS, CONF_ICON, CONF_NAME, CONF_UNIQUE_ID -from homeassistant.core import HomeAssistant, callback +from homeassistant.const import ( + ATTR_ENTITY_PICTURE, + ATTR_FRIENDLY_NAME, + ATTR_ICON, + CONF_DEVICE_CLASS, + CONF_ICON, + CONF_NAME, + CONF_UNIQUE_ID, +) +from homeassistant.core import HomeAssistant, State, callback from homeassistant.exceptions import TemplateError from homeassistant.helpers import template from homeassistant.helpers.update_coordinator import CoordinatorEntity @@ -13,6 +21,12 @@ from homeassistant.helpers.update_coordinator import CoordinatorEntity from . import TriggerUpdateCoordinator from .const import CONF_ATTRIBUTES, CONF_AVAILABILITY, CONF_PICTURE +CONF_TO_ATTRIBUTE = { + CONF_ICON: ATTR_ICON, + CONF_NAME: ATTR_FRIENDLY_NAME, + CONF_PICTURE: ATTR_ENTITY_PICTURE, +} + class TriggerEntity(CoordinatorEntity[TriggerUpdateCoordinator]): """Template entity based on trigger data.""" @@ -45,10 +59,10 @@ class TriggerEntity(CoordinatorEntity[TriggerUpdateCoordinator]): self._to_render_complex: list[str] = [] for itm in ( - CONF_NAME, - CONF_ICON, - CONF_PICTURE, CONF_AVAILABILITY, + CONF_ICON, + CONF_NAME, + CONF_PICTURE, ): if itm not in config: continue @@ -115,6 +129,21 @@ class TriggerEntity(CoordinatorEntity[TriggerUpdateCoordinator]): if self.coordinator.data is not None: self._process_data() + def restore_attributes(self, last_state: State) -> None: + """Restore attributes.""" + for conf_key, attr in CONF_TO_ATTRIBUTE.items(): + if conf_key not in self._config or attr not in last_state.attributes: + continue + self._rendered[conf_key] = last_state.attributes[attr] + + if CONF_ATTRIBUTES in self._config: + extra_state_attributes = {} + for attr in self._config[CONF_ATTRIBUTES]: + if attr not in last_state.attributes: + continue + extra_state_attributes[attr] = last_state.attributes[attr] + self._rendered[CONF_ATTRIBUTES] = extra_state_attributes + @callback def _process_data(self) -> None: """Process new data.""" diff --git a/tests/components/template/test_binary_sensor.py b/tests/components/template/test_binary_sensor.py index 4bd6c9ce305..8c408460a21 100644 --- a/tests/components/template/test_binary_sensor.py +++ b/tests/components/template/test_binary_sensor.py @@ -1142,29 +1142,41 @@ async def test_template_with_trigger_templated_delay_on(hass, start_ha): "name": "test", "state": "{{ trigger.event.data.beer == 2 }}", "device_class": "motion", + "picture": "{{ '/local/dogs.png' }}", + "icon": "{{ 'mdi:pirate' }}", + "attributes": { + "plus_one": "{{ trigger.event.data.beer + 1 }}", + "another": "{{ trigger.event.data.uno_mas or 1 }}", + }, }, }, }, ], ) @pytest.mark.parametrize( - "restored_state, initial_state", + "restored_state, initial_state, initial_attributes", [ - (ON, ON), - (OFF, OFF), - (STATE_UNAVAILABLE, STATE_UNKNOWN), - (STATE_UNKNOWN, STATE_UNKNOWN), + (ON, ON, ["entity_picture", "icon", "plus_one"]), + (OFF, OFF, ["entity_picture", "icon", "plus_one"]), + (STATE_UNAVAILABLE, STATE_UNKNOWN, []), + (STATE_UNKNOWN, STATE_UNKNOWN, []), ], ) async def test_trigger_entity_restore_state( - hass, count, domain, config, restored_state, initial_state + hass, count, domain, config, restored_state, initial_state, initial_attributes ): """Test restoring trigger template binary sensor.""" + restored_attributes = { + "entity_picture": "/local/cats.png", + "icon": "mdi:ship", + "plus_one": 55, + } + fake_state = State( "binary_sensor.test", restored_state, - {}, + restored_attributes, ) fake_extra_data = { "auto_off_time": None, @@ -1183,6 +1195,22 @@ async def test_trigger_entity_restore_state( state = hass.states.get("binary_sensor.test") assert state.state == initial_state + for attr in restored_attributes: + if attr in initial_attributes: + assert state.attributes[attr] == restored_attributes[attr] + else: + assert attr not in state.attributes + assert "another" not in state.attributes + + hass.bus.async_fire("test_event", {"beer": 2}) + await hass.async_block_till_done() + + state = hass.states.get("binary_sensor.test") + assert state.state == ON + assert state.attributes["icon"] == "mdi:pirate" + assert state.attributes["entity_picture"] == "/local/dogs.png" + assert state.attributes["plus_one"] == 3 + assert state.attributes["another"] == 1 @pytest.mark.parametrize("count,domain", [(1, "template")]) From 5a24dbbbf2f09ce48bd21663b68feb275c7cffbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Klomp?= Date: Wed, 6 Apr 2022 13:01:55 +0200 Subject: [PATCH 148/238] Update pysma to 0.6.11 (#69397) --- homeassistant/components/sma/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/sma/manifest.json b/homeassistant/components/sma/manifest.json index 308c11f91a1..6438c3a5777 100644 --- a/homeassistant/components/sma/manifest.json +++ b/homeassistant/components/sma/manifest.json @@ -3,7 +3,7 @@ "name": "SMA Solar", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/sma", - "requirements": ["pysma==0.6.10"], + "requirements": ["pysma==0.6.11"], "codeowners": ["@kellerza", "@rklomp"], "iot_class": "local_polling", "loggers": ["pysma"] diff --git a/requirements_all.txt b/requirements_all.txt index 53a810e004c..9dea0b1d92e 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -1799,7 +1799,7 @@ pysignalclirestapi==0.3.18 pyskyqhub==0.1.4 # homeassistant.components.sma -pysma==0.6.10 +pysma==0.6.11 # homeassistant.components.smappee pysmappee==0.2.29 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index eb98ec83760..d9ff1a51483 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -1200,7 +1200,7 @@ pysiaalarm==3.0.2 pysignalclirestapi==0.3.18 # homeassistant.components.sma -pysma==0.6.10 +pysma==0.6.11 # homeassistant.components.smappee pysmappee==0.2.29 From be3c1055ddf500f60aa93a7505128f63e8d587a7 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Wed, 6 Apr 2022 14:01:53 +0200 Subject: [PATCH 149/238] Bumped version to 2022.4.0 --- homeassistant/const.py | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/const.py b/homeassistant/const.py index dca2ba97e43..53e52f11e67 100644 --- a/homeassistant/const.py +++ b/homeassistant/const.py @@ -7,7 +7,7 @@ from .backports.enum import StrEnum MAJOR_VERSION: Final = 2022 MINOR_VERSION: Final = 4 -PATCH_VERSION: Final = "0b6" +PATCH_VERSION: Final = "0" __short_version__: Final = f"{MAJOR_VERSION}.{MINOR_VERSION}" __version__: Final = f"{__short_version__}.{PATCH_VERSION}" REQUIRED_PYTHON_VER: Final[tuple[int, int, int]] = (3, 9, 0) diff --git a/setup.cfg b/setup.cfg index 6f07735f99e..779f517a1fd 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = homeassistant -version = 2022.4.0b6 +version = 2022.4.0 author = The Home Assistant Authors author_email = hello@home-assistant.io license = Apache-2.0 From 91d2fafe1d400806e66fed9dddbf9a2dfd972eb0 Mon Sep 17 00:00:00 2001 From: Raman Gupta <7243222+raman325@users.noreply.github.com> Date: Thu, 31 Mar 2022 10:31:17 -0400 Subject: [PATCH 150/238] Add comments to zwave_js node metadata WS API (#67210) * Add comments to zwave_js node metadata WS API * Add test dat --- homeassistant/components/zwave_js/api.py | 1 + .../zwave_js/fixtures/wallmote_central_scene_state.json | 6 +++++- tests/components/zwave_js/test_api.py | 1 + 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/zwave_js/api.py b/homeassistant/components/zwave_js/api.py index 0e947de982b..9cd79ecb27b 100644 --- a/homeassistant/components/zwave_js/api.py +++ b/homeassistant/components/zwave_js/api.py @@ -496,6 +496,7 @@ async def websocket_node_metadata( "wakeup": node.device_config.metadata.wakeup, "reset": node.device_config.metadata.reset, "device_database_url": node.device_database_url, + "comments": node.device_config.metadata.comments, } connection.send_result( msg[ID], diff --git a/tests/components/zwave_js/fixtures/wallmote_central_scene_state.json b/tests/components/zwave_js/fixtures/wallmote_central_scene_state.json index af5314002fa..e4d9f01341e 100644 --- a/tests/components/zwave_js/fixtures/wallmote_central_scene_state.json +++ b/tests/components/zwave_js/fixtures/wallmote_central_scene_state.json @@ -68,7 +68,11 @@ "inclusion": "To add the ZP3111 to the Z-Wave network (inclusion), place the Z-Wave primary controller into inclusion mode. Press the Program Switch of ZP3111 for sending the NIF. After sending NIF, Z-Wave will send the auto inclusion, otherwise, ZP3111 will go to sleep after 20 seconds.", "exclusion": "To remove the ZP3111 from the Z-Wave network (exclusion), place the Z-Wave primary controller into \u201cexclusion\u201d mode, and following its instruction to delete the ZP3111 to the controller. Press the Program Switch of ZP3111 once to be excluded.", "reset": "Remove cover to triggered tamper switch, LED flash once & send out Alarm Report. Press Program Switch 10 times within 10 seconds, ZP3111 will send the \u201cDevice Reset Locally Notification\u201d command and reset to the factory default. (Remark: This is to be used only in the case of primary controller being inoperable or otherwise unavailable.)", - "manual": "https://products.z-wavealliance.org/ProductManual/File?folder=&filename=MarketCertificationFiles/2479/ZP3111-5_R2_20170316.pdf" + "manual": "https://products.z-wavealliance.org/ProductManual/File?folder=&filename=MarketCertificationFiles/2479/ZP3111-5_R2_20170316.pdf", + "comments": { + "level": "info", + "text": "test" + } }, "isEmbedded": true }, diff --git a/tests/components/zwave_js/test_api.py b/tests/components/zwave_js/test_api.py index 1596b099ab1..7ec7d98217b 100644 --- a/tests/components/zwave_js/test_api.py +++ b/tests/components/zwave_js/test_api.py @@ -249,6 +249,7 @@ async def test_node_metadata(hass, wallmote_central_scene, integration, hass_ws_ result["device_database_url"] == "https://devices.zwave-js.io/?jumpTo=0x0086:0x0002:0x0082:0.0" ) + assert result["comments"] == [{"level": "info", "text": "test"}] # Test getting non-existent node fails await ws_client.send_json( From ea5e894ac72e2c84bd56ad9cdcf9c4bfe7247efd Mon Sep 17 00:00:00 2001 From: Dave T <17680170+davet2001@users.noreply.github.com> Date: Wed, 6 Apr 2022 23:49:59 +0100 Subject: [PATCH 151/238] Continue on template error during yaml import for generic (#69440) Co-authored-by: Paulus Schoutsen --- homeassistant/components/generic/config_flow.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/generic/config_flow.py b/homeassistant/components/generic/config_flow.py index d3b2a260477..ce8caa457ec 100644 --- a/homeassistant/components/generic/config_flow.py +++ b/homeassistant/components/generic/config_flow.py @@ -136,7 +136,7 @@ async def async_test_still(hass, info) -> tuple[dict[str, str], str | None]: try: url = url.async_render(parse_result=False) except TemplateError as err: - _LOGGER.error("Error parsing template %s: %s", url, err) + _LOGGER.warning("Problem rendering template %s: %s", url, err) return {CONF_STILL_IMAGE_URL: "template_error"}, None verify_ssl = info.get(CONF_VERIFY_SSL) auth = generate_auth(info) @@ -283,6 +283,14 @@ class GenericIPCamConfigFlow(ConfigFlow, domain=DOMAIN): if self.check_for_existing(import_config): return self.async_abort(reason="already_exists") errors, still_format = await async_test_still(self.hass, import_config) + if errors.get(CONF_STILL_IMAGE_URL) == "template_error": + _LOGGER.warning( + "Could not render template, but it could be that " + "referenced entities are still initialising. " + "Continuing assuming that imported YAML template is valid" + ) + errors.pop(CONF_STILL_IMAGE_URL) + still_format = import_config.get(CONF_CONTENT_TYPE, "image/jpeg") errors = errors | await async_test_stream(self.hass, import_config) still_url = import_config.get(CONF_STILL_IMAGE_URL) stream_url = import_config.get(CONF_STREAM_SOURCE) From 0eed329bc8a890f1c8388c9c686795792a0607cd Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 6 Apr 2022 10:44:02 -0700 Subject: [PATCH 152/238] Fix telegram broadcast (#69452) --- .../components/telegram_bot/broadcast.py | 13 +----------- tests/components/telegram_bot/conftest.py | 10 ---------- .../components/telegram_bot/test_broadcast.py | 20 +++++++++++++++++++ .../telegram_bot/test_telegram_bot.py | 10 ++++++++++ 4 files changed, 31 insertions(+), 22 deletions(-) create mode 100644 tests/components/telegram_bot/test_broadcast.py diff --git a/homeassistant/components/telegram_bot/broadcast.py b/homeassistant/components/telegram_bot/broadcast.py index dd0d4cd1f31..dff061da243 100644 --- a/homeassistant/components/telegram_bot/broadcast.py +++ b/homeassistant/components/telegram_bot/broadcast.py @@ -1,17 +1,6 @@ """Support for Telegram bot to send messages only.""" -import logging - -from . import initialize_bot - -_LOGGER = logging.getLogger(__name__) -async def async_setup_platform(hass, config): +async def async_setup_platform(hass, bot, config): """Set up the Telegram broadcast platform.""" - bot = initialize_bot(config) - - bot_config = await hass.async_add_executor_job(bot.getMe) - _LOGGER.debug( - "Telegram broadcast platform setup with bot %s", bot_config["username"] - ) return True diff --git a/tests/components/telegram_bot/conftest.py b/tests/components/telegram_bot/conftest.py index 61818e4c377..d8d445fbb86 100644 --- a/tests/components/telegram_bot/conftest.py +++ b/tests/components/telegram_bot/conftest.py @@ -2,7 +2,6 @@ from unittest.mock import patch import pytest -from telegram.ext.dispatcher import Dispatcher from homeassistant.components.telegram_bot import ( CONF_ALLOWED_CHAT_IDS, @@ -176,12 +175,3 @@ async def polling_platform(hass, config_polling): config_polling, ) await hass.async_block_till_done() - - -@pytest.fixture(autouse=True) -def clear_dispatcher(): - """Clear the singleton that telegram.ext.dispatcher.Dispatcher sets on itself.""" - yield - Dispatcher._set_singleton(None) - # This is how python-telegram-bot resets the dispatcher in their test suite - Dispatcher._Dispatcher__singleton_semaphore.release() diff --git a/tests/components/telegram_bot/test_broadcast.py b/tests/components/telegram_bot/test_broadcast.py new file mode 100644 index 00000000000..22e4b8c6065 --- /dev/null +++ b/tests/components/telegram_bot/test_broadcast.py @@ -0,0 +1,20 @@ +"""Test Telegram broadcast.""" +from homeassistant.setup import async_setup_component + + +async def test_setup(hass): + """Test setting up Telegram broadcast.""" + assert await async_setup_component( + hass, + "telegram_bot", + { + "telegram_bot": { + "platform": "broadcast", + "api_key": "1234567890:ABC", + "allowed_chat_ids": [1], + } + }, + ) + await hass.async_block_till_done() + + assert hass.services.has_service("telegram_bot", "send_message") is True diff --git a/tests/components/telegram_bot/test_telegram_bot.py b/tests/components/telegram_bot/test_telegram_bot.py index 9b099a180f7..94d069a6bc5 100644 --- a/tests/components/telegram_bot/test_telegram_bot.py +++ b/tests/components/telegram_bot/test_telegram_bot.py @@ -1,4 +1,5 @@ """Tests for the telegram_bot component.""" +import pytest from telegram import Update from telegram.ext.dispatcher import Dispatcher @@ -8,6 +9,15 @@ from homeassistant.components.telegram_bot.webhooks import TELEGRAM_WEBHOOK_URL from tests.common import async_capture_events +@pytest.fixture(autouse=True) +def clear_dispatcher(): + """Clear the singleton that telegram.ext.dispatcher.Dispatcher sets on itself.""" + yield + Dispatcher._set_singleton(None) + # This is how python-telegram-bot resets the dispatcher in their test suite + Dispatcher._Dispatcher__singleton_semaphore.release() + + async def test_webhook_platform_init(hass, webhook_platform): """Test initialization of the webhooks platform.""" assert hass.services.has_service(DOMAIN, SERVICE_SEND_MESSAGE) is True From 87ab96f9c18d131f7b130aedc3f07ed16bc6fe9d Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Wed, 6 Apr 2022 07:45:40 -1000 Subject: [PATCH 153/238] Fix elkm1 connection when panel drops VN request (#69454) --- homeassistant/components/elkm1/__init__.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/homeassistant/components/elkm1/__init__.py b/homeassistant/components/elkm1/__init__.py index 6791c2ec1bb..3fed62e961e 100644 --- a/homeassistant/components/elkm1/__init__.py +++ b/homeassistant/components/elkm1/__init__.py @@ -363,6 +363,9 @@ async def async_wait_for_elk_to_sync( # VN is the first command sent for panel, when we get # it back we now we are logged in either with or without a password elk.add_handler("VN", first_response) + # Some panels do not respond to the vn request so we + # check for lw as well + elk.add_handler("LW", first_response) elk.add_handler("sync_complete", sync_complete) for name, event, timeout in ( ("login", login_event, login_timeout), From 2d74beaa67aba330073b859ef7b5dfb38ad14f97 Mon Sep 17 00:00:00 2001 From: Michael <35783820+mib1185@users.noreply.github.com> Date: Thu, 7 Apr 2022 00:45:46 +0200 Subject: [PATCH 154/238] Ignore IPv6 link local address on ssdp discovery in Fritz!Smarthome (#69455) --- .../components/fritzbox/config_flow.py | 7 ++ .../components/fritzbox/strings.json | 1 + .../components/fritzbox/translations/en.json | 1 + tests/components/fritzbox/const.py | 2 +- tests/components/fritzbox/test_config_flow.py | 90 +++++++++++++------ tests/components/fritzbox/test_init.py | 4 +- 6 files changed, 76 insertions(+), 29 deletions(-) diff --git a/homeassistant/components/fritzbox/config_flow.py b/homeassistant/components/fritzbox/config_flow.py index 0841757d147..bf290cb28f7 100644 --- a/homeassistant/components/fritzbox/config_flow.py +++ b/homeassistant/components/fritzbox/config_flow.py @@ -1,6 +1,7 @@ """Config flow for AVM FRITZ!SmartHome.""" from __future__ import annotations +import ipaddress from typing import Any from urllib.parse import urlparse @@ -120,6 +121,12 @@ class FritzboxConfigFlow(ConfigFlow, domain=DOMAIN): assert isinstance(host, str) self.context[CONF_HOST] = host + if ( + ipaddress.ip_address(host).version == 6 + and ipaddress.ip_address(host).is_link_local + ): + return self.async_abort(reason="ignore_ip6_link_local") + if uuid := discovery_info.upnp.get(ssdp.ATTR_UPNP_UDN): if uuid.startswith("uuid:"): uuid = uuid[5:] diff --git a/homeassistant/components/fritzbox/strings.json b/homeassistant/components/fritzbox/strings.json index 336671fd7a8..738c454e237 100644 --- a/homeassistant/components/fritzbox/strings.json +++ b/homeassistant/components/fritzbox/strings.json @@ -28,6 +28,7 @@ "abort": { "already_in_progress": "[%key:common::config_flow::abort::already_in_progress%]", "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", + "ignore_ip6_link_local": "IPv6 link local address is not supported.", "no_devices_found": "[%key:common::config_flow::abort::no_devices_found%]", "not_supported": "Connected to AVM FRITZ!Box but it's unable to control Smart Home devices.", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" diff --git a/homeassistant/components/fritzbox/translations/en.json b/homeassistant/components/fritzbox/translations/en.json index 5eb34096da0..3d85504b1b4 100644 --- a/homeassistant/components/fritzbox/translations/en.json +++ b/homeassistant/components/fritzbox/translations/en.json @@ -3,6 +3,7 @@ "abort": { "already_configured": "Device is already configured", "already_in_progress": "Configuration flow is already in progress", + "ignore_ip6_link_local": "IPv6 link local address is not supported.", "no_devices_found": "No devices found on the network", "not_supported": "Connected to AVM FRITZ!Box but it's unable to control Smart Home devices.", "reauth_successful": "Re-authentication was successful" diff --git a/tests/components/fritzbox/const.py b/tests/components/fritzbox/const.py index 58ad5ae177c..1725d974c6f 100644 --- a/tests/components/fritzbox/const.py +++ b/tests/components/fritzbox/const.py @@ -6,7 +6,7 @@ MOCK_CONFIG = { DOMAIN: { CONF_DEVICES: [ { - CONF_HOST: "fake_host", + CONF_HOST: "10.0.0.1", CONF_PASSWORD: "fake_pass", CONF_USERNAME: "fake_user", } diff --git a/tests/components/fritzbox/test_config_flow.py b/tests/components/fritzbox/test_config_flow.py index a3b258d405e..442b2f4d568 100644 --- a/tests/components/fritzbox/test_config_flow.py +++ b/tests/components/fritzbox/test_config_flow.py @@ -2,6 +2,7 @@ import dataclasses from unittest import mock from unittest.mock import Mock, patch +from urllib.parse import urlparse from pyfritzhome import LoginError import pytest @@ -24,15 +25,35 @@ from .const import CONF_FAKE_NAME, MOCK_CONFIG from tests.common import MockConfigEntry MOCK_USER_DATA = MOCK_CONFIG[DOMAIN][CONF_DEVICES][0] -MOCK_SSDP_DATA = ssdp.SsdpServiceInfo( - ssdp_usn="mock_usn", - ssdp_st="mock_st", - ssdp_location="https://fake_host:12345/test", - upnp={ - ATTR_UPNP_FRIENDLY_NAME: CONF_FAKE_NAME, - ATTR_UPNP_UDN: "uuid:only-a-test", - }, -) +MOCK_SSDP_DATA = { + "ip4_valid": ssdp.SsdpServiceInfo( + ssdp_usn="mock_usn", + ssdp_st="mock_st", + ssdp_location="https://10.0.0.1:12345/test", + upnp={ + ATTR_UPNP_FRIENDLY_NAME: CONF_FAKE_NAME, + ATTR_UPNP_UDN: "uuid:only-a-test", + }, + ), + "ip6_valid": ssdp.SsdpServiceInfo( + ssdp_usn="mock_usn", + ssdp_st="mock_st", + ssdp_location="https://[1234::1]:12345/test", + upnp={ + ATTR_UPNP_FRIENDLY_NAME: CONF_FAKE_NAME, + ATTR_UPNP_UDN: "uuid:only-a-test", + }, + ), + "ip6_invalid": ssdp.SsdpServiceInfo( + ssdp_usn="mock_usn", + ssdp_st="mock_st", + ssdp_location="https://[fe80::1%1]:12345/test", + upnp={ + ATTR_UPNP_FRIENDLY_NAME: CONF_FAKE_NAME, + ATTR_UPNP_UDN: "uuid:only-a-test", + }, + ), +} @pytest.fixture(name="fritz") @@ -56,8 +77,8 @@ async def test_user(hass: HomeAssistant, fritz: Mock): result["flow_id"], user_input=MOCK_USER_DATA ) assert result["type"] == RESULT_TYPE_CREATE_ENTRY - assert result["title"] == "fake_host" - assert result["data"][CONF_HOST] == "fake_host" + assert result["title"] == "10.0.0.1" + assert result["data"][CONF_HOST] == "10.0.0.1" assert result["data"][CONF_PASSWORD] == "fake_pass" assert result["data"][CONF_USERNAME] == "fake_user" assert not result["result"].unique_id @@ -183,12 +204,29 @@ async def test_reauth_not_successful(hass: HomeAssistant, fritz: Mock): assert result["reason"] == "no_devices_found" -async def test_ssdp(hass: HomeAssistant, fritz: Mock): +@pytest.mark.parametrize( + "test_data,expected_result", + [ + (MOCK_SSDP_DATA["ip4_valid"], RESULT_TYPE_FORM), + (MOCK_SSDP_DATA["ip6_valid"], RESULT_TYPE_FORM), + (MOCK_SSDP_DATA["ip6_invalid"], RESULT_TYPE_ABORT), + ], +) +async def test_ssdp( + hass: HomeAssistant, + fritz: Mock, + test_data: ssdp.SsdpServiceInfo, + expected_result: str, +): """Test starting a flow from discovery.""" result = await hass.config_entries.flow.async_init( - DOMAIN, context={"source": SOURCE_SSDP}, data=MOCK_SSDP_DATA + DOMAIN, context={"source": SOURCE_SSDP}, data=test_data ) - assert result["type"] == RESULT_TYPE_FORM + assert result["type"] == expected_result + + if expected_result == RESULT_TYPE_ABORT: + return + assert result["step_id"] == "confirm" result = await hass.config_entries.flow.async_configure( @@ -197,7 +235,7 @@ async def test_ssdp(hass: HomeAssistant, fritz: Mock): ) assert result["type"] == RESULT_TYPE_CREATE_ENTRY assert result["title"] == CONF_FAKE_NAME - assert result["data"][CONF_HOST] == "fake_host" + assert result["data"][CONF_HOST] == urlparse(test_data.ssdp_location).hostname assert result["data"][CONF_PASSWORD] == "fake_pass" assert result["data"][CONF_USERNAME] == "fake_user" assert result["result"].unique_id == "only-a-test" @@ -205,7 +243,7 @@ async def test_ssdp(hass: HomeAssistant, fritz: Mock): async def test_ssdp_no_friendly_name(hass: HomeAssistant, fritz: Mock): """Test starting a flow from discovery without friendly name.""" - MOCK_NO_NAME = dataclasses.replace(MOCK_SSDP_DATA) + MOCK_NO_NAME = dataclasses.replace(MOCK_SSDP_DATA["ip4_valid"]) MOCK_NO_NAME.upnp = MOCK_NO_NAME.upnp.copy() del MOCK_NO_NAME.upnp[ATTR_UPNP_FRIENDLY_NAME] result = await hass.config_entries.flow.async_init( @@ -219,8 +257,8 @@ async def test_ssdp_no_friendly_name(hass: HomeAssistant, fritz: Mock): user_input={CONF_PASSWORD: "fake_pass", CONF_USERNAME: "fake_user"}, ) assert result["type"] == RESULT_TYPE_CREATE_ENTRY - assert result["title"] == "fake_host" - assert result["data"][CONF_HOST] == "fake_host" + assert result["title"] == "10.0.0.1" + assert result["data"][CONF_HOST] == "10.0.0.1" assert result["data"][CONF_PASSWORD] == "fake_pass" assert result["data"][CONF_USERNAME] == "fake_user" assert result["result"].unique_id == "only-a-test" @@ -231,7 +269,7 @@ async def test_ssdp_auth_failed(hass: HomeAssistant, fritz: Mock): fritz().login.side_effect = LoginError("Boom") result = await hass.config_entries.flow.async_init( - DOMAIN, context={"source": SOURCE_SSDP}, data=MOCK_SSDP_DATA + DOMAIN, context={"source": SOURCE_SSDP}, data=MOCK_SSDP_DATA["ip4_valid"] ) assert result["type"] == RESULT_TYPE_FORM assert result["step_id"] == "confirm" @@ -251,7 +289,7 @@ async def test_ssdp_not_successful(hass: HomeAssistant, fritz: Mock): fritz().login.side_effect = OSError("Boom") result = await hass.config_entries.flow.async_init( - DOMAIN, context={"source": SOURCE_SSDP}, data=MOCK_SSDP_DATA + DOMAIN, context={"source": SOURCE_SSDP}, data=MOCK_SSDP_DATA["ip4_valid"] ) assert result["type"] == RESULT_TYPE_FORM assert result["step_id"] == "confirm" @@ -269,7 +307,7 @@ async def test_ssdp_not_supported(hass: HomeAssistant, fritz: Mock): fritz().get_device_elements.side_effect = HTTPError("Boom") result = await hass.config_entries.flow.async_init( - DOMAIN, context={"source": SOURCE_SSDP}, data=MOCK_SSDP_DATA + DOMAIN, context={"source": SOURCE_SSDP}, data=MOCK_SSDP_DATA["ip4_valid"] ) assert result["type"] == RESULT_TYPE_FORM assert result["step_id"] == "confirm" @@ -285,13 +323,13 @@ async def test_ssdp_not_supported(hass: HomeAssistant, fritz: Mock): async def test_ssdp_already_in_progress_unique_id(hass: HomeAssistant, fritz: Mock): """Test starting a flow from discovery twice.""" result = await hass.config_entries.flow.async_init( - DOMAIN, context={"source": SOURCE_SSDP}, data=MOCK_SSDP_DATA + DOMAIN, context={"source": SOURCE_SSDP}, data=MOCK_SSDP_DATA["ip4_valid"] ) assert result["type"] == RESULT_TYPE_FORM assert result["step_id"] == "confirm" result = await hass.config_entries.flow.async_init( - DOMAIN, context={"source": SOURCE_SSDP}, data=MOCK_SSDP_DATA + DOMAIN, context={"source": SOURCE_SSDP}, data=MOCK_SSDP_DATA["ip4_valid"] ) assert result["type"] == RESULT_TYPE_ABORT assert result["reason"] == "already_in_progress" @@ -300,12 +338,12 @@ async def test_ssdp_already_in_progress_unique_id(hass: HomeAssistant, fritz: Mo async def test_ssdp_already_in_progress_host(hass: HomeAssistant, fritz: Mock): """Test starting a flow from discovery twice.""" result = await hass.config_entries.flow.async_init( - DOMAIN, context={"source": SOURCE_SSDP}, data=MOCK_SSDP_DATA + DOMAIN, context={"source": SOURCE_SSDP}, data=MOCK_SSDP_DATA["ip4_valid"] ) assert result["type"] == RESULT_TYPE_FORM assert result["step_id"] == "confirm" - MOCK_NO_UNIQUE_ID = dataclasses.replace(MOCK_SSDP_DATA) + MOCK_NO_UNIQUE_ID = dataclasses.replace(MOCK_SSDP_DATA["ip4_valid"]) MOCK_NO_UNIQUE_ID.upnp = MOCK_NO_UNIQUE_ID.upnp.copy() del MOCK_NO_UNIQUE_ID.upnp[ATTR_UPNP_UDN] result = await hass.config_entries.flow.async_init( @@ -324,7 +362,7 @@ async def test_ssdp_already_configured(hass: HomeAssistant, fritz: Mock): assert not result["result"].unique_id result2 = await hass.config_entries.flow.async_init( - DOMAIN, context={"source": SOURCE_SSDP}, data=MOCK_SSDP_DATA + DOMAIN, context={"source": SOURCE_SSDP}, data=MOCK_SSDP_DATA["ip4_valid"] ) assert result2["type"] == RESULT_TYPE_ABORT assert result2["reason"] == "already_configured" diff --git a/tests/components/fritzbox/test_init.py b/tests/components/fritzbox/test_init.py index f69d7256e23..fdf787d4cf2 100644 --- a/tests/components/fritzbox/test_init.py +++ b/tests/components/fritzbox/test_init.py @@ -35,12 +35,12 @@ async def test_setup(hass: HomeAssistant, fritz: Mock): entries = hass.config_entries.async_entries() assert entries assert len(entries) == 1 - assert entries[0].data[CONF_HOST] == "fake_host" + assert entries[0].data[CONF_HOST] == "10.0.0.1" assert entries[0].data[CONF_PASSWORD] == "fake_pass" assert entries[0].data[CONF_USERNAME] == "fake_user" assert fritz.call_count == 1 assert fritz.call_args_list == [ - call(host="fake_host", password="fake_pass", user="fake_user") + call(host="10.0.0.1", password="fake_pass", user="fake_user") ] From 9351fcf36972ab0e5107f4d28fb55ec3e54ef806 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Wed, 6 Apr 2022 11:21:50 -1000 Subject: [PATCH 155/238] Fix reload race in unifiprotect (#69485) - The integration already has a reload listener installed once it is setup. We should not reload from the config flow since they compete --- homeassistant/components/unifiprotect/config_flow.py | 3 --- tests/components/unifiprotect/test_config_flow.py | 12 ++---------- 2 files changed, 2 insertions(+), 13 deletions(-) diff --git a/homeassistant/components/unifiprotect/config_flow.py b/homeassistant/components/unifiprotect/config_flow.py index 3039d5153e5..bd66b5f086a 100644 --- a/homeassistant/components/unifiprotect/config_flow.py +++ b/homeassistant/components/unifiprotect/config_flow.py @@ -116,9 +116,6 @@ class ProtectFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): self.hass.config_entries.async_update_entry( entry, data={**entry.data, CONF_HOST: new_host} ) - self.hass.async_create_task( - self.hass.config_entries.async_reload(entry.entry_id) - ) return self.async_abort(reason="already_configured") if entry_host in (direct_connect_domain, source_ip) or ( entry_has_direct_connect diff --git a/tests/components/unifiprotect/test_config_flow.py b/tests/components/unifiprotect/test_config_flow.py index 4c7f12a69fa..78931aa460a 100644 --- a/tests/components/unifiprotect/test_config_flow.py +++ b/tests/components/unifiprotect/test_config_flow.py @@ -365,10 +365,7 @@ async def test_discovered_by_unifi_discovery_direct_connect_updated( ) mock_config.add_to_hass(hass) - with _patch_discovery(), patch( - "homeassistant.components.unifiprotect.async_setup_entry", - return_value=True, - ) as mock_setup_entry: + with _patch_discovery(): result = await hass.config_entries.flow.async_init( DOMAIN, context={"source": config_entries.SOURCE_INTEGRATION_DISCOVERY}, @@ -378,7 +375,6 @@ async def test_discovered_by_unifi_discovery_direct_connect_updated( assert result["type"] == RESULT_TYPE_ABORT assert result["reason"] == "already_configured" - assert len(mock_setup_entry.mock_calls) == 1 assert mock_config.data[CONF_HOST] == DIRECT_CONNECT_DOMAIN @@ -401,10 +397,7 @@ async def test_discovered_by_unifi_discovery_direct_connect_updated_but_not_usin ) mock_config.add_to_hass(hass) - with _patch_discovery(), patch( - "homeassistant.components.unifiprotect.async_setup_entry", - return_value=True, - ) as mock_setup_entry: + with _patch_discovery(): result = await hass.config_entries.flow.async_init( DOMAIN, context={"source": config_entries.SOURCE_INTEGRATION_DISCOVERY}, @@ -414,7 +407,6 @@ async def test_discovered_by_unifi_discovery_direct_connect_updated_but_not_usin assert result["type"] == RESULT_TYPE_ABORT assert result["reason"] == "already_configured" - assert len(mock_setup_entry.mock_calls) == 1 assert mock_config.data[CONF_HOST] == "127.0.0.1" From 4c165636754bbf9890dc44efd13130366ac2f11f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20S=C3=B8rensen?= Date: Thu, 7 Apr 2022 01:13:11 +0200 Subject: [PATCH 156/238] Bump pyhaversion from 22.04.0 to 22.4.1 (#69486) --- homeassistant/components/version/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/version/manifest.json b/homeassistant/components/version/manifest.json index 966286d0b3b..80b3f2fb3dc 100644 --- a/homeassistant/components/version/manifest.json +++ b/homeassistant/components/version/manifest.json @@ -2,7 +2,7 @@ "domain": "version", "name": "Version", "documentation": "https://www.home-assistant.io/integrations/version", - "requirements": ["pyhaversion==22.04.0"], + "requirements": ["pyhaversion==22.4.1"], "codeowners": ["@fabaff", "@ludeeus"], "quality_scale": "internal", "iot_class": "local_push", diff --git a/requirements_all.txt b/requirements_all.txt index 9dea0b1d92e..2cba5a44d9b 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -1511,7 +1511,7 @@ pygtfs==0.1.6 pygti==0.9.2 # homeassistant.components.version -pyhaversion==22.04.0 +pyhaversion==22.4.1 # homeassistant.components.heos pyheos==0.7.2 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index d9ff1a51483..10454fa58f7 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -999,7 +999,7 @@ pygatt[GATTTOOL]==4.0.5 pygti==0.9.2 # homeassistant.components.version -pyhaversion==22.04.0 +pyhaversion==22.4.1 # homeassistant.components.heos pyheos==0.7.2 From 23bb38c5cf3ed2f98051ab9ff06ab94a016a6766 Mon Sep 17 00:00:00 2001 From: Shay Levy Date: Thu, 7 Apr 2022 01:48:47 +0300 Subject: [PATCH 157/238] Fix remote_rpi_gpio missing requirement (#69488) --- homeassistant/components/remote_rpi_gpio/manifest.json | 4 ++-- requirements_all.txt | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/remote_rpi_gpio/manifest.json b/homeassistant/components/remote_rpi_gpio/manifest.json index 7e42611dedf..f1613b2ba6b 100644 --- a/homeassistant/components/remote_rpi_gpio/manifest.json +++ b/homeassistant/components/remote_rpi_gpio/manifest.json @@ -2,8 +2,8 @@ "domain": "remote_rpi_gpio", "name": "remote_rpi_gpio", "documentation": "https://www.home-assistant.io/integrations/remote_rpi_gpio", - "requirements": ["gpiozero==1.5.1"], + "requirements": ["gpiozero==1.6.2", "pigpio==1.78"], "codeowners": [], "iot_class": "local_push", - "loggers": ["gpiozero"] + "loggers": ["gpiozero", "pigpio"] } diff --git a/requirements_all.txt b/requirements_all.txt index 2cba5a44d9b..9cc99e033d1 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -740,7 +740,7 @@ googlemaps==2.5.1 goslide-api==0.5.1 # homeassistant.components.remote_rpi_gpio -gpiozero==1.5.1 +gpiozero==1.6.2 # homeassistant.components.gpsd gps3==0.33.3 @@ -1198,6 +1198,9 @@ phone_modem==0.1.1 # homeassistant.components.onewire pi1wire==0.1.0 +# homeassistant.components.remote_rpi_gpio +pigpio==1.78 + # homeassistant.components.pilight pilight==0.1.1 From f9d447e4cdda580218beef02588d05cda176376d Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Wed, 6 Apr 2022 13:06:22 -1000 Subject: [PATCH 158/238] Fix reloading the sun integration (#69495) --- homeassistant/components/sun/__init__.py | 10 +++- tests/test_config_entries.py | 74 +++++++++++++++++++++++- 2 files changed, 79 insertions(+), 5 deletions(-) diff --git a/homeassistant/components/sun/__init__.py b/homeassistant/components/sun/__init__.py index c619607d5b2..94758d4e99f 100644 --- a/homeassistant/components/sun/__init__.py +++ b/homeassistant/components/sun/__init__.py @@ -130,9 +130,12 @@ class Sun(Entity): self._config_listener = self.hass.bus.async_listen( EVENT_CORE_CONFIG_UPDATE, self.update_location ) - self._loaded_listener = self.hass.bus.async_listen( - EVENT_COMPONENT_LOADED, self.loading_complete - ) + if DOMAIN in hass.config.components: + self.update_location() + else: + self._loaded_listener = self.hass.bus.async_listen( + EVENT_COMPONENT_LOADED, self.loading_complete + ) @callback def loading_complete(self, event_: Event) -> None: @@ -158,6 +161,7 @@ class Sun(Entity): """Remove the loaded listener.""" if self._loaded_listener: self._loaded_listener() + self._loaded_listener = None @callback def remove_listeners(self): diff --git a/tests/test_config_entries.py b/tests/test_config_entries.py index b62e9bffbce..2c3092427dc 100644 --- a/tests/test_config_entries.py +++ b/tests/test_config_entries.py @@ -8,8 +8,12 @@ import pytest from homeassistant import config_entries, data_entry_flow, loader from homeassistant.components.hassio import HassioServiceInfo -from homeassistant.const import EVENT_HOMEASSISTANT_STARTED, EVENT_HOMEASSISTANT_STOP -from homeassistant.core import CoreState, callback +from homeassistant.const import ( + EVENT_COMPONENT_LOADED, + EVENT_HOMEASSISTANT_STARTED, + EVENT_HOMEASSISTANT_STOP, +) +from homeassistant.core import CoreState, Event, callback from homeassistant.data_entry_flow import RESULT_TYPE_ABORT, BaseServiceInfo from homeassistant.exceptions import ( ConfigEntryAuthFailed, @@ -2299,6 +2303,72 @@ async def test_async_setup_init_entry(hass): assert entries[0].state is config_entries.ConfigEntryState.LOADED +async def test_async_setup_init_entry_completes_before_loaded_event_fires(hass): + """Test a config entry being initialized during integration setup before the loaded event fires.""" + + @callback + def _record_load(event: Event) -> None: + nonlocal load_events + load_events.append(event) + + listener = hass.bus.async_listen(EVENT_COMPONENT_LOADED, _record_load) + load_events: list[Event] = [] + + async def mock_async_setup(hass, config): + """Mock setup.""" + hass.async_create_task( + hass.config_entries.flow.async_init( + "comp", + context={"source": config_entries.SOURCE_IMPORT}, + data={}, + ) + ) + return True + + async_setup_entry = AsyncMock(return_value=True) + mock_integration( + hass, + MockModule( + "comp", async_setup=mock_async_setup, async_setup_entry=async_setup_entry + ), + ) + mock_entity_platform(hass, "config_flow.comp", None) + + class TestFlow(config_entries.ConfigFlow): + """Test flow.""" + + VERSION = 1 + + async def async_step_three(self, user_input=None): + """Test import step creating entry.""" + return self.async_create_entry(title="title", data={}) + + async def async_step_two(self, user_input=None): + """Test import step creating entry.""" + return await self.async_step_three() + + async def async_step_one(self, user_input=None): + """Test import step creating entry.""" + return await self.async_step_two() + + async def async_step_import(self, user_input=None): + """Test import step creating entry.""" + return await self.async_step_one() + + # This test must not use hass.async_block_till_done() + # as its explicitly testing what happens without it + with patch.dict(config_entries.HANDLERS, {"comp": TestFlow}): + assert await async_setup_component(hass, "comp", {}) + assert len(async_setup_entry.mock_calls) == 1 + assert load_events[0].event_type == EVENT_COMPONENT_LOADED + assert load_events[0].data == {"component": "comp"} + entries = hass.config_entries.async_entries("comp") + assert len(entries) == 1 + assert entries[0].state is config_entries.ConfigEntryState.LOADED + + listener() + + async def test_async_setup_update_entry(hass): """Test a config entry being updated during integration setup.""" entry = MockConfigEntry(domain="comp", data={"value": "initial"}) From 5cadea91bbdb5868969e275508cb07831788d974 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 6 Apr 2022 22:36:39 -0700 Subject: [PATCH 159/238] Bumped version to 2022.4.1 --- homeassistant/const.py | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/const.py b/homeassistant/const.py index 53e52f11e67..b84dee7274c 100644 --- a/homeassistant/const.py +++ b/homeassistant/const.py @@ -7,7 +7,7 @@ from .backports.enum import StrEnum MAJOR_VERSION: Final = 2022 MINOR_VERSION: Final = 4 -PATCH_VERSION: Final = "0" +PATCH_VERSION: Final = "1" __short_version__: Final = f"{MAJOR_VERSION}.{MINOR_VERSION}" __version__: Final = f"{__short_version__}.{PATCH_VERSION}" REQUIRED_PYTHON_VER: Final[tuple[int, int, int]] = (3, 9, 0) diff --git a/setup.cfg b/setup.cfg index 779f517a1fd..2420a7607d0 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = homeassistant -version = 2022.4.0 +version = 2022.4.1 author = The Home Assistant Authors author_email = hello@home-assistant.io license = Apache-2.0 From 8c9534d2bac46b83bf3c633bcd1e4dc2ecd7bb75 Mon Sep 17 00:00:00 2001 From: Allen Porter Date: Wed, 6 Apr 2022 23:26:07 -0700 Subject: [PATCH 160/238] Gracefully handle empty summary in google calendar (#69520) Gracefully handle empty summary in google calendar matching the old behavior before some code cleanup. --- homeassistant/components/google/calendar.py | 4 ++- tests/components/google/test_calendar.py | 29 +++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/google/calendar.py b/homeassistant/components/google/calendar.py index d04d913ae67..1174868bb78 100644 --- a/homeassistant/components/google/calendar.py +++ b/homeassistant/components/google/calendar.py @@ -183,7 +183,9 @@ class GoogleCalendarEventDevice(CalendarEventDevice): valid_items = filter(self._event_filter, items) self._event = copy.deepcopy(next(valid_items, None)) if self._event: - (summary, offset) = extract_offset(self._event["summary"], self._offset) + (summary, offset) = extract_offset( + self._event.get("summary", ""), self._offset + ) self._event["summary"] = summary self._offset_reached = is_offset_reached( get_date(self._event["start"]), offset diff --git a/tests/components/google/test_calendar.py b/tests/components/google/test_calendar.py index 53e7308bc6f..a5aca8a27d4 100644 --- a/tests/components/google/test_calendar.py +++ b/tests/components/google/test_calendar.py @@ -272,6 +272,35 @@ async def test_all_day_offset_event(hass, mock_events_list_items, component_setu } +async def test_missing_summary(hass, mock_events_list_items, component_setup): + """Test that we can create an event trigger on device.""" + start_event = dt_util.now() + datetime.timedelta(minutes=14) + end_event = start_event + datetime.timedelta(minutes=60) + event = { + **TEST_EVENT, + "start": {"dateTime": start_event.isoformat()}, + "end": {"dateTime": end_event.isoformat()}, + } + del event["summary"] + mock_events_list_items([event]) + + assert await component_setup() + + state = hass.states.get(TEST_ENTITY) + assert state.name == TEST_ENTITY_NAME + assert state.state == STATE_OFF + assert dict(state.attributes) == { + "friendly_name": TEST_ENTITY_NAME, + "message": "", + "all_day": False, + "offset_reached": False, + "start_time": start_event.strftime(DATE_STR_FORMAT), + "end_time": end_event.strftime(DATE_STR_FORMAT), + "location": event["location"], + "description": event["description"], + } + + async def test_update_error( hass, calendar_resource, component_setup, test_api_calendar ): From e726ef662cc49adc104f291e067638f1c118b928 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20S=C3=B8rensen?= Date: Thu, 7 Apr 2022 13:34:20 +0200 Subject: [PATCH 161/238] Fix adding OS entities for supervised installations (#69539) --- homeassistant/components/hassio/__init__.py | 8 ++++- tests/components/hassio/test_binary_sensor.py | 6 +++- tests/components/hassio/test_init.py | 29 +++++++++++++------ tests/components/hassio/test_sensor.py | 6 +++- tests/components/hassio/test_update.py | 28 +++++++++++++++++- 5 files changed, 64 insertions(+), 13 deletions(-) diff --git a/homeassistant/components/hassio/__init__.py b/homeassistant/components/hassio/__init__.py index 7b8608a7fad..5f2cc386a87 100644 --- a/homeassistant/components/hassio/__init__.py +++ b/homeassistant/components/hassio/__init__.py @@ -824,7 +824,7 @@ class HassioDataUpdateCoordinator(DataUpdateCoordinator): self.data = {} self.entry_id = config_entry.entry_id self.dev_reg = dev_reg - self.is_hass_os = "hassos" in get_info(self.hass) + self.is_hass_os = (get_info(self.hass) or {}).get("hassos") is not None async def _async_update_data(self) -> dict[str, Any]: """Update data via library.""" @@ -891,6 +891,12 @@ class HassioDataUpdateCoordinator(DataUpdateCoordinator): if stale_addons := supervisor_addon_devices - set(new_data[DATA_KEY_ADDONS]): async_remove_addons_from_dev_reg(self.dev_reg, stale_addons) + if not self.is_hass_os and ( + dev := self.dev_reg.async_get_device({(DOMAIN, "OS")}) + ): + # Remove the OS device if it exists and the installation is not hassos + self.dev_reg.async_remove_device(dev.id) + # If there are new add-ons, we should reload the config entry so we can # create new devices and entities. We can return an empty dict because # coordinator will be recreated. diff --git a/tests/components/hassio/test_binary_sensor.py b/tests/components/hassio/test_binary_sensor.py index a49b27ba4e7..0f4691e2795 100644 --- a/tests/components/hassio/test_binary_sensor.py +++ b/tests/components/hassio/test_binary_sensor.py @@ -24,7 +24,11 @@ def mock_all(aioclient_mock, request): "http://127.0.0.1/info", json={ "result": "ok", - "data": {"supervisor": "222", "homeassistant": "0.110.0", "hassos": None}, + "data": { + "supervisor": "222", + "homeassistant": "0.110.0", + "hassos": "1.2.3", + }, }, ) aioclient_mock.get( diff --git a/tests/components/hassio/test_init.py b/tests/components/hassio/test_init.py index 527c98b615e..2e7bea90f68 100644 --- a/tests/components/hassio/test_init.py +++ b/tests/components/hassio/test_init.py @@ -30,7 +30,11 @@ def mock_all(aioclient_mock, request): "http://127.0.0.1/info", json={ "result": "ok", - "data": {"supervisor": "222", "homeassistant": "0.110.0", "hassos": None}, + "data": { + "supervisor": "222", + "homeassistant": "0.110.0", + "hassos": "1.2.3", + }, }, ) aioclient_mock.get( @@ -396,14 +400,14 @@ async def test_service_calls(hassio_env, hass, aioclient_mock, caplog): ) await hass.async_block_till_done() - assert aioclient_mock.call_count == 8 + assert aioclient_mock.call_count == 9 assert aioclient_mock.mock_calls[-1][2] == "test" await hass.services.async_call("hassio", "host_shutdown", {}) await hass.services.async_call("hassio", "host_reboot", {}) await hass.async_block_till_done() - assert aioclient_mock.call_count == 10 + assert aioclient_mock.call_count == 11 await hass.services.async_call("hassio", "backup_full", {}) await hass.services.async_call( @@ -418,7 +422,7 @@ async def test_service_calls(hassio_env, hass, aioclient_mock, caplog): ) await hass.async_block_till_done() - assert aioclient_mock.call_count == 12 + assert aioclient_mock.call_count == 13 assert aioclient_mock.mock_calls[-1][2] == { "homeassistant": True, "addons": ["test"], @@ -442,7 +446,7 @@ async def test_service_calls(hassio_env, hass, aioclient_mock, caplog): ) await hass.async_block_till_done() - assert aioclient_mock.call_count == 14 + assert aioclient_mock.call_count == 15 assert aioclient_mock.mock_calls[-1][2] == { "addons": ["test"], "folders": ["ssl"], @@ -461,12 +465,12 @@ async def test_service_calls_core(hassio_env, hass, aioclient_mock): await hass.services.async_call("homeassistant", "stop") await hass.async_block_till_done() - assert aioclient_mock.call_count == 4 + assert aioclient_mock.call_count == 5 await hass.services.async_call("homeassistant", "check_config") await hass.async_block_till_done() - assert aioclient_mock.call_count == 4 + assert aioclient_mock.call_count == 5 with patch( "homeassistant.config.async_check_ha_config_file", return_value=None @@ -475,7 +479,7 @@ async def test_service_calls_core(hassio_env, hass, aioclient_mock): await hass.async_block_till_done() assert mock_check_config.called - assert aioclient_mock.call_count == 5 + assert aioclient_mock.call_count == 6 async def test_entry_load_and_unload(hass): @@ -628,10 +632,17 @@ async def test_device_registry_calls(hass): ), patch( "homeassistant.components.hassio.HassIO.get_os_info", return_value=os_mock_data, + ), patch( + "homeassistant.components.hassio.HassIO.get_info", + return_value={ + "supervisor": "222", + "homeassistant": "0.110.0", + "hassos": None, + }, ): async_fire_time_changed(hass, dt_util.now() + timedelta(hours=3)) await hass.async_block_till_done() - assert len(dev_reg.devices) == 5 + assert len(dev_reg.devices) == 4 async def test_coordinator_updates(hass, caplog): diff --git a/tests/components/hassio/test_sensor.py b/tests/components/hassio/test_sensor.py index 9dc620ba94f..382d804eaac 100644 --- a/tests/components/hassio/test_sensor.py +++ b/tests/components/hassio/test_sensor.py @@ -24,7 +24,11 @@ def mock_all(aioclient_mock, request): "http://127.0.0.1/info", json={ "result": "ok", - "data": {"supervisor": "222", "homeassistant": "0.110.0", "hassos": None}, + "data": { + "supervisor": "222", + "homeassistant": "0.110.0", + "hassos": "1.2.3", + }, }, ) aioclient_mock.get( diff --git a/tests/components/hassio/test_update.py b/tests/components/hassio/test_update.py index e682562297d..3407c26fc2f 100644 --- a/tests/components/hassio/test_update.py +++ b/tests/components/hassio/test_update.py @@ -25,7 +25,11 @@ def mock_all(aioclient_mock, request): "http://127.0.0.1/info", json={ "result": "ok", - "data": {"supervisor": "222", "homeassistant": "0.110.0", "hassos": None}, + "data": { + "supervisor": "222", + "homeassistant": "0.110.0", + "hassos": "1.2.3", + }, }, ) aioclient_mock.get( @@ -483,3 +487,25 @@ async def test_not_release_notes(hass, aioclient_mock, hass_ws_client): ) result = await client.receive_json() assert result["result"] is None + + +async def test_no_os_entity(hass): + """Test handling where there is no os entity.""" + with patch.dict(os.environ, MOCK_ENVIRON), patch( + "homeassistant.components.hassio.HassIO.get_info", + return_value={ + "supervisor": "222", + "homeassistant": "0.110.0", + "hassos": None, + }, + ): + result = await async_setup_component( + hass, + "hassio", + {"http": {"server_port": 9999, "server_host": "127.0.0.1"}, "hassio": {}}, + ) + assert result + await hass.async_block_till_done() + + # Verify that the entity does not exist + assert not hass.states.get("update.home_assistant_operating_system_update") From ceb8d86a7e78ead408788c11339e3dcdb785cec4 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Thu, 7 Apr 2022 01:46:41 -1000 Subject: [PATCH 162/238] Fix registered entities without a category not being exclude-able in the HomeKit UI (#69543) --- .../components/homekit/config_flow.py | 2 +- tests/components/homekit/test_config_flow.py | 24 +++++++++++++++++-- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/homekit/config_flow.py b/homeassistant/components/homekit/config_flow.py index 79193cd3dac..b7a00bc3ade 100644 --- a/homeassistant/components/homekit/config_flow.py +++ b/homeassistant/components/homekit/config_flow.py @@ -652,7 +652,7 @@ def _exclude_by_entity_registry( (entry := ent_reg.async_get(entity_id)) and ( entry.hidden_by is not None - or (not include_entity_category or entry.entity_category is not None) + or (not include_entity_category and entry.entity_category is not None) ) ) diff --git a/tests/components/homekit/test_config_flow.py b/tests/components/homekit/test_config_flow.py index fc3ef3e2710..42ce6779528 100644 --- a/tests/components/homekit/test_config_flow.py +++ b/tests/components/homekit/test_config_flow.py @@ -1347,6 +1347,16 @@ async def test_options_flow_exclude_mode_skips_category_entities( entity_category=EntityCategory.CONFIG, ) hass.states.async_set(sonos_config_switch.entity_id, "off") + + sonos_notconfig_switch: RegistryEntry = entity_reg.async_get_or_create( + "switch", + "sonos", + "notconfig", + device_id="1234", + entity_category=None, + ) + hass.states.async_set(sonos_notconfig_switch.entity_id, "off") + await hass.async_block_till_done() result = await hass.config_entries.options.async_init( @@ -1391,14 +1401,24 @@ async def test_options_flow_exclude_mode_skips_category_entities( result4 = await hass.config_entries.options.async_configure( result2["flow_id"], - user_input={"entities": ["media_player.tv", "switch.other"]}, + user_input={ + "entities": [ + "media_player.tv", + "switch.other", + sonos_notconfig_switch.entity_id, + ] + }, ) assert result4["type"] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY assert config_entry.options == { "mode": "bridge", "filter": { "exclude_domains": [], - "exclude_entities": ["media_player.tv", "switch.other"], + "exclude_entities": [ + "media_player.tv", + "switch.other", + sonos_notconfig_switch.entity_id, + ], "include_domains": ["media_player", "switch"], "include_entities": [], }, From 2dd3dc2d2d70197488608cce9ab16d45b9e97b9a Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Wed, 6 Apr 2022 23:50:49 -1000 Subject: [PATCH 163/238] Run energy db calls in the db executor (#69544) Fixes #69537 --- homeassistant/components/energy/validate.py | 2 +- homeassistant/components/energy/websocket_api.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/energy/validate.py b/homeassistant/components/energy/validate.py index d9cd9a73aa0..e48a576f44e 100644 --- a/homeassistant/components/energy/validate.py +++ b/homeassistant/components/energy/validate.py @@ -489,7 +489,7 @@ async def async_validate(hass: HomeAssistant) -> EnergyPreferencesValidation: # Fetch the needed statistics metadata statistics_metadata.update( - await hass.async_add_executor_job( + await recorder.get_instance(hass).async_add_executor_job( functools.partial( recorder.statistics.get_metadata, hass, diff --git a/homeassistant/components/energy/websocket_api.py b/homeassistant/components/energy/websocket_api.py index 3d47d6e894b..ad77308b410 100644 --- a/homeassistant/components/energy/websocket_api.py +++ b/homeassistant/components/energy/websocket_api.py @@ -260,7 +260,7 @@ async def ws_get_fossil_energy_consumption( statistic_ids.append(msg["co2_statistic_id"]) # Fetch energy + CO2 statistics - statistics = await hass.async_add_executor_job( + statistics = await recorder.get_instance(hass).async_add_executor_job( recorder.statistics.statistics_during_period, hass, start_time, From 7803845af1063c8ca16c72d7f4aa4803d668148f Mon Sep 17 00:00:00 2001 From: Dave T <17680170+davet2001@users.noreply.github.com> Date: Thu, 7 Apr 2022 23:01:29 +0100 Subject: [PATCH 164/238] Generic fix stream thumbnail (#69378) --- .../components/generic/config_flow.py | 115 ++++++++++++++---- homeassistant/components/generic/strings.json | 14 ++- .../components/generic/translations/en.json | 14 ++- tests/components/generic/test_config_flow.py | 63 +++++++++- 4 files changed, 173 insertions(+), 33 deletions(-) diff --git a/homeassistant/components/generic/config_flow.py b/homeassistant/components/generic/config_flow.py index ce8caa457ec..df8946ccbad 100644 --- a/homeassistant/components/generic/config_flow.py +++ b/homeassistant/components/generic/config_flow.py @@ -109,6 +109,20 @@ def build_schema( return vol.Schema(spec) +def build_schema_content_type(user_input: dict[str, Any] | MappingProxyType[str, Any]): + """Create schema for conditional 2nd page specifying stream content_type.""" + return vol.Schema( + { + vol.Required( + CONF_CONTENT_TYPE, + description={ + "suggested_value": user_input.get(CONF_CONTENT_TYPE, "image/jpeg") + }, + ): str, + } + ) + + def get_image_type(image): """Get the format of downloaded bytes that could be an image.""" fmt = None @@ -129,7 +143,7 @@ async def async_test_still(hass, info) -> tuple[dict[str, str], str | None]: """Verify that the still image is valid before we create an entity.""" fmt = None if not (url := info.get(CONF_STILL_IMAGE_URL)): - return {}, None + return {}, info.get(CONF_CONTENT_TYPE, "image/jpeg") if not isinstance(url, template_helper.Template) and url: url = cv.template(url) url.hass = hass @@ -228,6 +242,11 @@ class GenericIPCamConfigFlow(ConfigFlow, domain=DOMAIN): VERSION = 1 + def __init__(self): + """Initialize Generic ConfigFlow.""" + self.cached_user_input: dict[str, Any] = {} + self.cached_title = "" + @staticmethod def async_get_options_flow( config_entry: ConfigEntry, @@ -238,8 +257,8 @@ class GenericIPCamConfigFlow(ConfigFlow, domain=DOMAIN): def check_for_existing(self, options): """Check whether an existing entry is using the same URLs.""" return any( - entry.options[CONF_STILL_IMAGE_URL] == options[CONF_STILL_IMAGE_URL] - and entry.options[CONF_STREAM_SOURCE] == options[CONF_STREAM_SOURCE] + entry.options.get(CONF_STILL_IMAGE_URL) == options.get(CONF_STILL_IMAGE_URL) + and entry.options.get(CONF_STREAM_SOURCE) == options.get(CONF_STREAM_SOURCE) for entry in self._async_current_entries() ) @@ -264,10 +283,17 @@ class GenericIPCamConfigFlow(ConfigFlow, domain=DOMAIN): if not errors: user_input[CONF_CONTENT_TYPE] = still_format user_input[CONF_LIMIT_REFETCH_TO_URL_CHANGE] = False - await self.async_set_unique_id(self.flow_id) - return self.async_create_entry( - title=name, data={}, options=user_input - ) + if user_input.get(CONF_STILL_IMAGE_URL): + await self.async_set_unique_id(self.flow_id) + return self.async_create_entry( + title=name, data={}, options=user_input + ) + # If user didn't specify a still image URL, + # we can't (yet) autodetect it from the stream. + # Show a conditional 2nd page to ask them the content type. + self.cached_user_input = user_input + self.cached_title = name + return await self.async_step_content_type() else: user_input = DEFAULT_DATA.copy() @@ -277,6 +303,22 @@ class GenericIPCamConfigFlow(ConfigFlow, domain=DOMAIN): errors=errors, ) + async def async_step_content_type( + self, user_input: dict[str, Any] | None = None + ) -> FlowResult: + """Handle the user's choice for stream content_type.""" + if user_input is not None: + user_input = self.cached_user_input | user_input + await self.async_set_unique_id(self.flow_id) + return self.async_create_entry( + title=self.cached_title, data={}, options=user_input + ) + return self.async_show_form( + step_id="content_type", + data_schema=build_schema_content_type({}), + errors={}, + ) + async def async_step_import(self, import_config) -> FlowResult: """Handle config import from yaml.""" # abort if we've already got this one. @@ -316,6 +358,8 @@ class GenericOptionsFlowHandler(OptionsFlow): def __init__(self, config_entry: ConfigEntry) -> None: """Initialize Generic IP Camera options flow.""" self.config_entry = config_entry + self.cached_user_input: dict[str, Any] = {} + self.cached_title = "" async def async_step_init( self, user_input: dict[str, Any] | None = None @@ -324,29 +368,52 @@ class GenericOptionsFlowHandler(OptionsFlow): errors: dict[str, str] = {} if user_input is not None: - errors, still_format = await async_test_still(self.hass, user_input) + errors, still_format = await async_test_still( + self.hass, self.config_entry.options | user_input + ) errors = errors | await async_test_stream(self.hass, user_input) still_url = user_input.get(CONF_STILL_IMAGE_URL) stream_url = user_input.get(CONF_STREAM_SOURCE) if not errors: - return self.async_create_entry( - title=slug_url(still_url) or slug_url(stream_url) or DEFAULT_NAME, - data={ - CONF_AUTHENTICATION: user_input.get(CONF_AUTHENTICATION), - CONF_STREAM_SOURCE: user_input.get(CONF_STREAM_SOURCE), - CONF_PASSWORD: user_input.get(CONF_PASSWORD), - CONF_STILL_IMAGE_URL: user_input.get(CONF_STILL_IMAGE_URL), - CONF_CONTENT_TYPE: still_format, - CONF_USERNAME: user_input.get(CONF_USERNAME), - CONF_LIMIT_REFETCH_TO_URL_CHANGE: user_input[ - CONF_LIMIT_REFETCH_TO_URL_CHANGE - ], - CONF_FRAMERATE: user_input[CONF_FRAMERATE], - CONF_VERIFY_SSL: user_input[CONF_VERIFY_SSL], - }, - ) + title = slug_url(still_url) or slug_url(stream_url) or DEFAULT_NAME + data = { + CONF_AUTHENTICATION: user_input.get(CONF_AUTHENTICATION), + CONF_STREAM_SOURCE: user_input.get(CONF_STREAM_SOURCE), + CONF_PASSWORD: user_input.get(CONF_PASSWORD), + CONF_STILL_IMAGE_URL: user_input.get(CONF_STILL_IMAGE_URL), + CONF_CONTENT_TYPE: still_format + or self.config_entry.options.get(CONF_CONTENT_TYPE), + CONF_USERNAME: user_input.get(CONF_USERNAME), + CONF_LIMIT_REFETCH_TO_URL_CHANGE: user_input[ + CONF_LIMIT_REFETCH_TO_URL_CHANGE + ], + CONF_FRAMERATE: user_input[CONF_FRAMERATE], + CONF_VERIFY_SSL: user_input[CONF_VERIFY_SSL], + } + if still_url: + return self.async_create_entry( + title=title, + data=data, + ) + self.cached_title = title + self.cached_user_input = data + return await self.async_step_content_type() + return self.async_show_form( step_id="init", data_schema=build_schema(user_input or self.config_entry.options, True), errors=errors, ) + + async def async_step_content_type( + self, user_input: dict[str, Any] | None = None + ) -> FlowResult: + """Handle the user's choice for stream content_type.""" + if user_input is not None: + user_input = self.cached_user_input | user_input + return self.async_create_entry(title=self.cached_title, data=user_input) + return self.async_show_form( + step_id="content_type", + data_schema=build_schema_content_type(self.cached_user_input), + errors={}, + ) diff --git a/homeassistant/components/generic/strings.json b/homeassistant/components/generic/strings.json index eb1bfcc3c55..01b1fe48a82 100644 --- a/homeassistant/components/generic/strings.json +++ b/homeassistant/components/generic/strings.json @@ -30,11 +30,16 @@ "limit_refetch_to_url_change": "Limit refetch to url change", "password": "[%key:common::config_flow::data::password%]", "username": "[%key:common::config_flow::data::username%]", - "content_type": "Content Type", "framerate": "Frame Rate (Hz)", "verify_ssl": "[%key:common::config_flow::data::verify_ssl%]" } }, + "content_type": { + "description": "Specify the content type for the stream.", + "data": { + "content_type": "Content Type" + } + }, "confirm": { "description": "[%key:common::config_flow::description::confirm_setup%]" } @@ -51,10 +56,15 @@ "limit_refetch_to_url_change": "[%key:component::generic::config::step::user::data::limit_refetch_to_url_change%]", "password": "[%key:common::config_flow::data::password%]", "username": "[%key:common::config_flow::data::username%]", - "content_type": "[%key:component::generic::config::step::user::data::content_type%]", "framerate": "[%key:component::generic::config::step::user::data::framerate%]", "verify_ssl": "[%key:common::config_flow::data::verify_ssl%]" } + }, + "content_type": { + "description": "[%key:component::generic::config::step::content_type::description%]", + "data": { + "content_type": "[%key:component::generic::config::step::content_type::data::content_type%]" + } } }, "error": { diff --git a/homeassistant/components/generic/translations/en.json b/homeassistant/components/generic/translations/en.json index 5346c2b5106..478ea76b476 100644 --- a/homeassistant/components/generic/translations/en.json +++ b/homeassistant/components/generic/translations/en.json @@ -23,10 +23,15 @@ "confirm": { "description": "Do you want to start set up?" }, + "content_type": { + "data": { + "content_type": "Content Type" + }, + "description": "Specify the content type for the stream." + }, "user": { "data": { "authentication": "Authentication", - "content_type": "Content Type", "framerate": "Frame Rate (Hz)", "limit_refetch_to_url_change": "Limit refetch to url change", "password": "Password", @@ -57,10 +62,15 @@ "unknown": "Unexpected error" }, "step": { + "content_type": { + "data": { + "content_type": "Content Type" + }, + "description": "Specify the content type for the stream." + }, "init": { "data": { "authentication": "Authentication", - "content_type": "Content Type", "framerate": "Frame Rate (Hz)", "limit_refetch_to_url_change": "Limit refetch to url change", "password": "Password", diff --git a/tests/components/generic/test_config_flow.py b/tests/components/generic/test_config_flow.py index 7e6c55dafff..548b09cf0bb 100644 --- a/tests/components/generic/test_config_flow.py +++ b/tests/components/generic/test_config_flow.py @@ -10,6 +10,7 @@ import pytest import respx from homeassistant import config_entries, data_entry_flow, setup +from homeassistant.components.camera import async_get_image from homeassistant.components.generic.const import ( CONF_CONTENT_TYPE, CONF_FRAMERATE, @@ -191,7 +192,7 @@ async def test_form_rtsp_mode(hass, fakeimg_png, mock_av_open, user_flow): assert len(mock_setup.mock_calls) == 1 -async def test_form_only_stream(hass, mock_av_open): +async def test_form_only_stream(hass, mock_av_open, fakeimgbytes_jpg): """Test we complete ok if the user wants stream only.""" await setup.async_setup_component(hass, "persistent_notification", {}) result = await hass.config_entries.flow.async_init( @@ -204,21 +205,34 @@ async def test_form_only_stream(hass, mock_av_open): result["flow_id"], data, ) - assert result2["type"] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY - assert result2["title"] == "127_0_0_1_testurl_2" - assert result2["options"] == { + assert result2["type"] == data_entry_flow.RESULT_TYPE_FORM + result3 = await hass.config_entries.flow.async_configure( + result2["flow_id"], + {CONF_CONTENT_TYPE: "image/jpeg"}, + ) + + assert result3["type"] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY + assert result3["title"] == "127_0_0_1_testurl_2" + assert result3["options"] == { CONF_AUTHENTICATION: HTTP_BASIC_AUTHENTICATION, CONF_STREAM_SOURCE: "http://127.0.0.1/testurl/2", CONF_RTSP_TRANSPORT: "tcp", CONF_USERNAME: "fred_flintstone", CONF_PASSWORD: "bambam", CONF_LIMIT_REFETCH_TO_URL_CHANGE: False, - CONF_CONTENT_TYPE: None, + CONF_CONTENT_TYPE: "image/jpeg", CONF_FRAMERATE: 5, CONF_VERIFY_SSL: False, } await hass.async_block_till_done() + + with patch( + "homeassistant.components.generic.camera.GenericCamera.async_camera_image", + return_value=fakeimgbytes_jpg, + ): + image_obj = await async_get_image(hass, "camera.127_0_0_1_testurl_2") + assert image_obj.content == fakeimgbytes_jpg assert len(mock_setup.mock_calls) == 1 @@ -478,6 +492,45 @@ async def test_options_template_error(hass, fakeimgbytes_png, mock_av_open): assert result4["errors"] == {"still_image_url": "template_error"} +@respx.mock +async def test_options_only_stream(hass, fakeimgbytes_png, mock_av_open): + """Test the options flow without a still_image_url.""" + respx.get("http://127.0.0.1/testurl/2").respond(stream=fakeimgbytes_png) + data = TESTDATA.copy() + data.pop(CONF_STILL_IMAGE_URL) + + mock_entry = MockConfigEntry( + title="Test Camera", + domain=DOMAIN, + data={}, + options=data, + ) + with mock_av_open: + mock_entry.add_to_hass(hass) + await hass.config_entries.async_setup(mock_entry.entry_id) + await hass.async_block_till_done() + + result = await hass.config_entries.options.async_init(mock_entry.entry_id) + assert result["type"] == data_entry_flow.RESULT_TYPE_FORM + assert result["step_id"] == "init" + + # try updating the config options + result2 = await hass.config_entries.options.async_configure( + result["flow_id"], + user_input=data, + ) + # Should be shown a 2nd form + assert result2["type"] == data_entry_flow.RESULT_TYPE_FORM + assert result2["step_id"] == "content_type" + + result3 = await hass.config_entries.options.async_configure( + result2["flow_id"], + user_input={CONF_CONTENT_TYPE: "image/png"}, + ) + assert result3["type"] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY + assert result3["data"][CONF_CONTENT_TYPE] == "image/png" + + # These below can be deleted after deprecation period is finished. @respx.mock async def test_import(hass, fakeimg_png, mock_av_open): From 0b2f0a9f7c723923da9db2ca4c3a44f7eba1d396 Mon Sep 17 00:00:00 2001 From: Jason Hunter Date: Thu, 7 Apr 2022 12:04:09 -0400 Subject: [PATCH 165/238] Log which device has the time discrepancy (#69595) --- homeassistant/components/onvif/device.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/onvif/device.py b/homeassistant/components/onvif/device.py index 1d08ec04f46..f45362c6e6c 100644 --- a/homeassistant/components/onvif/device.py +++ b/homeassistant/components/onvif/device.py @@ -204,9 +204,10 @@ class ONVIFDevice: if self._dt_diff_seconds > 5: LOGGER.warning( - "The date/time on the device (UTC) is '%s', " + "The date/time on %s (UTC) is '%s', " "which is different from the system '%s', " "this could lead to authentication issues", + self.name, cam_date_utc, system_date, ) From 62d67a42875d0d7071269d4aef4dbbb7f8057687 Mon Sep 17 00:00:00 2001 From: Diogo Gomes Date: Thu, 7 Apr 2022 22:55:34 +0100 Subject: [PATCH 166/238] Fix utility_meter reset service (#69612) --- .../components/utility_meter/__init__.py | 27 +++++++++---------- .../components/utility_meter/services.yaml | 1 - tests/components/utility_meter/test_init.py | 13 +++++++-- 3 files changed, 23 insertions(+), 18 deletions(-) diff --git a/homeassistant/components/utility_meter/__init__.py b/homeassistant/components/utility_meter/__init__.py index ecc1110d7ff..5cb4d6f7abb 100644 --- a/homeassistant/components/utility_meter/__init__.py +++ b/homeassistant/components/utility_meter/__init__.py @@ -106,27 +106,24 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: async def async_reset_meters(service_call): """Reset all sensors of a meter.""" - entity_id = service_call.data["entity_id"] + meters = service_call.data["entity_id"] - domain = split_entity_id(entity_id)[0] - if domain == DOMAIN: - for entity in hass.data[DATA_LEGACY_COMPONENT].entities: - if entity_id == entity.entity_id: - _LOGGER.debug( - "forward reset meter from %s to %s", - entity_id, - entity.tracked_entity_id, - ) - entity_id = entity.tracked_entity_id - - _LOGGER.debug("reset meter %s", entity_id) - async_dispatcher_send(hass, SIGNAL_RESET_METER, entity_id) + for meter in meters: + _LOGGER.debug("resetting meter %s", meter) + domain, entity = split_entity_id(meter) + # backward compatibility up to 2022.07: + if domain == DOMAIN: + async_dispatcher_send( + hass, SIGNAL_RESET_METER, f"{SELECT_DOMAIN}.{entity}" + ) + else: + async_dispatcher_send(hass, SIGNAL_RESET_METER, meter) hass.services.async_register( DOMAIN, SERVICE_RESET, async_reset_meters, - vol.Schema({ATTR_ENTITY_ID: cv.entity_id}), + vol.Schema({ATTR_ENTITY_ID: vol.All(cv.ensure_list, [cv.entity_id])}), ) if DOMAIN not in config: diff --git a/homeassistant/components/utility_meter/services.yaml b/homeassistant/components/utility_meter/services.yaml index 32a6069d3bb..39f0c9056b5 100644 --- a/homeassistant/components/utility_meter/services.yaml +++ b/homeassistant/components/utility_meter/services.yaml @@ -6,7 +6,6 @@ reset: target: entity: domain: select - integration: utility_meter next_tariff: name: Next Tariff diff --git a/tests/components/utility_meter/test_init.py b/tests/components/utility_meter/test_init.py index 853fd827f0a..d90c8e17997 100644 --- a/tests/components/utility_meter/test_init.py +++ b/tests/components/utility_meter/test_init.py @@ -65,7 +65,16 @@ async def test_restore_state(hass): assert state.state == "midpeak" -async def test_services(hass): +@pytest.mark.parametrize( + "meter", + ( + ["select.energy_bill"], + "select.energy_bill", + ["utility_meter.energy_bill"], + "utility_meter.energy_bill", + ), +) +async def test_services(hass, meter): """Test energy sensor reset service.""" config = { "utility_meter": { @@ -159,7 +168,7 @@ async def test_services(hass): assert state.state == "1" # Reset meters - data = {ATTR_ENTITY_ID: "select.energy_bill"} + data = {ATTR_ENTITY_ID: meter} await hass.services.async_call(DOMAIN, SERVICE_RESET, data) await hass.async_block_till_done() From ee06b2a1b5afe27f76a64be68349e0f14b258c53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= Date: Thu, 31 Mar 2022 19:58:56 +0200 Subject: [PATCH 167/238] Update aioairzone to v0.3.1 (#68975) --- homeassistant/components/airzone/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- tests/components/airzone/test_config_flow.py | 8 +++++++- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/airzone/manifest.json b/homeassistant/components/airzone/manifest.json index 3f8fbc5647b..236d21c81dd 100644 --- a/homeassistant/components/airzone/manifest.json +++ b/homeassistant/components/airzone/manifest.json @@ -3,7 +3,7 @@ "name": "Airzone", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/airzone", - "requirements": ["aioairzone==0.2.3"], + "requirements": ["aioairzone==0.3.1"], "codeowners": ["@Noltari"], "iot_class": "local_polling", "loggers": ["aioairzone"] diff --git a/requirements_all.txt b/requirements_all.txt index 9cc99e033d1..bc95296ded4 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -110,7 +110,7 @@ aio_geojson_nsw_rfs_incidents==0.4 aio_georss_gdacs==0.5 # homeassistant.components.airzone -aioairzone==0.2.3 +aioairzone==0.3.1 # homeassistant.components.ambient_station aioambient==2021.11.0 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 10454fa58f7..82862d22946 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -94,7 +94,7 @@ aio_geojson_nsw_rfs_incidents==0.4 aio_georss_gdacs==0.5 # homeassistant.components.airzone -aioairzone==0.2.3 +aioairzone==0.3.1 # homeassistant.components.ambient_station aioambient==2021.11.0 diff --git a/tests/components/airzone/test_config_flow.py b/tests/components/airzone/test_config_flow.py index a6612d6de9c..08eb35ef52b 100644 --- a/tests/components/airzone/test_config_flow.py +++ b/tests/components/airzone/test_config_flow.py @@ -2,7 +2,7 @@ from unittest.mock import MagicMock, patch -from aiohttp.client_exceptions import ClientConnectorError +from aiohttp.client_exceptions import ClientConnectorError, ClientResponseError from homeassistant import data_entry_flow from homeassistant.components.airzone.const import DOMAIN @@ -23,6 +23,12 @@ async def test_form(hass): ) as mock_setup_entry, patch( "homeassistant.components.airzone.AirzoneLocalApi.get_hvac", return_value=HVAC_MOCK, + ), patch( + "homeassistant.components.airzone.AirzoneLocalApi.get_hvac_systems", + side_effect=ClientResponseError(MagicMock(), MagicMock()), + ), patch( + "homeassistant.components.airzone.AirzoneLocalApi.get_webserver", + side_effect=ClientResponseError(MagicMock(), MagicMock()), ): result = await hass.config_entries.flow.async_init( DOMAIN, context={"source": SOURCE_USER} From 906342835899998e14c5f02db59071c9eefb36c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= Date: Fri, 8 Apr 2022 00:00:29 +0200 Subject: [PATCH 168/238] Update aioairzone to v0.3.3 (#69615) --- homeassistant/components/airzone/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/airzone/manifest.json b/homeassistant/components/airzone/manifest.json index 236d21c81dd..821f564f176 100644 --- a/homeassistant/components/airzone/manifest.json +++ b/homeassistant/components/airzone/manifest.json @@ -3,7 +3,7 @@ "name": "Airzone", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/airzone", - "requirements": ["aioairzone==0.3.1"], + "requirements": ["aioairzone==0.3.3"], "codeowners": ["@Noltari"], "iot_class": "local_polling", "loggers": ["aioairzone"] diff --git a/requirements_all.txt b/requirements_all.txt index bc95296ded4..1290a9766db 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -110,7 +110,7 @@ aio_geojson_nsw_rfs_incidents==0.4 aio_georss_gdacs==0.5 # homeassistant.components.airzone -aioairzone==0.3.1 +aioairzone==0.3.3 # homeassistant.components.ambient_station aioambient==2021.11.0 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 82862d22946..f02e5f08740 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -94,7 +94,7 @@ aio_geojson_nsw_rfs_incidents==0.4 aio_georss_gdacs==0.5 # homeassistant.components.airzone -aioairzone==0.3.1 +aioairzone==0.3.3 # homeassistant.components.ambient_station aioambient==2021.11.0 From 3dd0ddb73ebb28749a41ce176c7344b3a77b6234 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Thu, 7 Apr 2022 11:19:17 -1000 Subject: [PATCH 169/238] Mark backgrounds optional for tplink random effects (#69622) --- homeassistant/components/tplink/light.py | 7 ++--- homeassistant/components/tplink/services.yaml | 2 +- tests/components/tplink/test_light.py | 27 +++++++++++++++++++ 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/tplink/light.py b/homeassistant/components/tplink/light.py index 9a67f8daf4b..32af7cf47be 100644 --- a/homeassistant/components/tplink/light.py +++ b/homeassistant/components/tplink/light.py @@ -103,7 +103,7 @@ RANDOM_EFFECT_DICT: Final = { vol.Optional("random_seed", default=100): vol.All( vol.Coerce(int), vol.Range(min=1, max=100) ), - vol.Required("backgrounds"): vol.All( + vol.Optional("backgrounds"): vol.All( cv.ensure_list, vol.Length(min=1, max=16), [vol.All(vol.Coerce(tuple), HSV_SEQUENCE)], @@ -366,7 +366,7 @@ class TPLinkSmartLightStrip(TPLinkSmartBulb): fadeoff: int, init_states: tuple[int, int, int], random_seed: int, - backgrounds: Sequence[tuple[int, int, int]], + backgrounds: Sequence[tuple[int, int, int]] | None = None, hue_range: tuple[int, int] | None = None, saturation_range: tuple[int, int] | None = None, brightness_range: tuple[int, int] | None = None, @@ -378,8 +378,9 @@ class TPLinkSmartLightStrip(TPLinkSmartBulb): "type": "random", "init_states": [init_states], "random_seed": random_seed, - "backgrounds": backgrounds, } + if backgrounds: + effect["backgrounds"] = backgrounds if fadeoff: effect["fadeoff"] = fadeoff if hue_range: diff --git a/homeassistant/components/tplink/services.yaml b/homeassistant/components/tplink/services.yaml index 26e002e0e30..6f2d9054b1e 100644 --- a/homeassistant/components/tplink/services.yaml +++ b/homeassistant/components/tplink/services.yaml @@ -93,7 +93,7 @@ random_effect: - [199, 89, 50] - [160, 50, 50] - [180, 100, 50] - required: true + required: false selector: object: segments: diff --git a/tests/components/tplink/test_light.py b/tests/components/tplink/test_light.py index 9975aa1c660..c56bb6399fb 100644 --- a/tests/components/tplink/test_light.py +++ b/tests/components/tplink/test_light.py @@ -517,6 +517,33 @@ async def test_smart_strip_custom_random_effect(hass: HomeAssistant) -> None: ) strip.set_custom_effect.reset_mock() + await hass.services.async_call( + DOMAIN, + "random_effect", + { + ATTR_ENTITY_ID: entity_id, + "init_states": [340, 20, 50], + }, + blocking=True, + ) + strip.set_custom_effect.assert_called_once_with( + { + "custom": 1, + "id": "yMwcNpLxijmoKamskHCvvravpbnIqAIN", + "brightness": 100, + "name": "Custom", + "segments": [0], + "expansion_strategy": 1, + "enable": 1, + "duration": 0, + "transition": 0, + "type": "random", + "init_states": [[340, 20, 50]], + "random_seed": 100, + } + ) + strip.set_custom_effect.reset_mock() + strip.effect = { "custom": 1, "id": "yMwcNpLxijmoKamskHCvvravpbnIqAIN", From 88a081be24eb51194f89c47361eb30ad9a41140f Mon Sep 17 00:00:00 2001 From: puddly <32534428+puddly@users.noreply.github.com> Date: Thu, 7 Apr 2022 18:02:14 -0400 Subject: [PATCH 170/238] Fix ZHA group creation (#69629) --- homeassistant/components/zha/api.py | 6 +++--- homeassistant/components/zha/core/device.py | 10 ++++++++-- homeassistant/components/zha/core/group.py | 10 ++++++---- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/homeassistant/components/zha/api.py b/homeassistant/components/zha/api.py index c42384682da..faf8ccc5053 100644 --- a/homeassistant/components/zha/api.py +++ b/homeassistant/components/zha/api.py @@ -232,7 +232,7 @@ GROUP_MEMBER_SCHEMA = vol.All( vol.Schema( { vol.Required(ATTR_IEEE): IEEE_SCHEMA, - vol.Required(ATTR_ENDPOINT_ID): int, + vol.Required(ATTR_ENDPOINT_ID): vol.Coerce(int), } ), _cv_group_member, @@ -244,8 +244,8 @@ CLUSTER_BINDING_SCHEMA = vol.All( { vol.Required(ATTR_NAME): cv.string, vol.Required(ATTR_TYPE): cv.string, - vol.Required(ATTR_ID): int, - vol.Required(ATTR_ENDPOINT_ID): int, + vol.Required(ATTR_ID): vol.Coerce(int), + vol.Required(ATTR_ENDPOINT_ID): vol.Coerce(int), } ), _cv_cluster_binding, diff --git a/homeassistant/components/zha/core/device.py b/homeassistant/components/zha/core/device.py index e80a0725cc1..41d90b48869 100644 --- a/homeassistant/components/zha/core/device.py +++ b/homeassistant/components/zha/core/device.py @@ -661,7 +661,11 @@ class ZHADevice(LogMixin): async def async_add_to_group(self, group_id: int) -> None: """Add this device to the provided zigbee group.""" try: - await self._zigpy_device.add_to_group(group_id) + # A group name is required. However, the spec also explicitly states that + # the group name can be ignored by the receiving device if a device cannot + # store it, so we cannot rely on it existing after being written. This is + # only done to make the ZCL command valid. + await self._zigpy_device.add_to_group(group_id, name=f"0x{group_id:04X}") except (zigpy.exceptions.ZigbeeException, asyncio.TimeoutError) as ex: self.debug( "Failed to add device '%s' to group: 0x%04x ex: %s", @@ -687,7 +691,9 @@ class ZHADevice(LogMixin): ) -> None: """Add the device endpoint to the provided zigbee group.""" try: - await self._zigpy_device.endpoints[endpoint_id].add_to_group(group_id) + await self._zigpy_device.endpoints[endpoint_id].add_to_group( + group_id, name=f"0x{group_id:04X}" + ) except (zigpy.exceptions.ZigbeeException, asyncio.TimeoutError) as ex: self.debug( "Failed to add endpoint: %s for device: '%s' to group: 0x%04x ex: %s", diff --git a/homeassistant/components/zha/core/group.py b/homeassistant/components/zha/core/group.py index af17f28e622..1392041c4d4 100644 --- a/homeassistant/components/zha/core/group.py +++ b/homeassistant/components/zha/core/group.py @@ -2,7 +2,6 @@ from __future__ import annotations import asyncio -import collections import logging from typing import TYPE_CHECKING, Any, NamedTuple @@ -30,9 +29,12 @@ class GroupMember(NamedTuple): endpoint_id: int -GroupEntityReference = collections.namedtuple( - "GroupEntityReference", "name original_name entity_id" -) +class GroupEntityReference(NamedTuple): + """Reference to a group entity.""" + + name: str + original_name: str + entity_id: int class ZHAGroupMember(LogMixin): From b50a78d1d9e4522feff9b9a6e8208cc226756481 Mon Sep 17 00:00:00 2001 From: north3221 Date: Thu, 7 Apr 2022 23:23:07 +0100 Subject: [PATCH 171/238] Fix tado default overlay for when set pre new overlay feature (#69584) --- homeassistant/components/tado/__init__.py | 16 ++++++++++++++-- homeassistant/components/tado/config_flow.py | 13 +++++++++++-- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/tado/__init__.py b/homeassistant/components/tado/__init__.py index 9a5e1eb9c1e..0029dbf8c89 100644 --- a/homeassistant/components/tado/__init__.py +++ b/homeassistant/components/tado/__init__.py @@ -18,7 +18,10 @@ from homeassistant.util import Throttle from .const import ( CONF_FALLBACK, + CONST_OVERLAY_MANUAL, + CONST_OVERLAY_TADO_DEFAULT, CONST_OVERLAY_TADO_MODE, + CONST_OVERLAY_TADO_OPTIONS, DATA, DOMAIN, INSIDE_TEMPERATURE_MEASUREMENT, @@ -51,7 +54,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: username = entry.data[CONF_USERNAME] password = entry.data[CONF_PASSWORD] - fallback = entry.options.get(CONF_FALLBACK, CONST_OVERLAY_TADO_MODE) + fallback = entry.options.get(CONF_FALLBACK, CONST_OVERLAY_TADO_DEFAULT) tadoconnector = TadoConnector(hass, username, password, fallback) @@ -99,7 +102,16 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: def _async_import_options_from_data_if_missing(hass: HomeAssistant, entry: ConfigEntry): options = dict(entry.options) if CONF_FALLBACK not in options: - options[CONF_FALLBACK] = entry.data.get(CONF_FALLBACK, CONST_OVERLAY_TADO_MODE) + options[CONF_FALLBACK] = entry.data.get( + CONF_FALLBACK, CONST_OVERLAY_TADO_DEFAULT + ) + hass.config_entries.async_update_entry(entry, options=options) + + if options[CONF_FALLBACK] not in CONST_OVERLAY_TADO_OPTIONS: + if options[CONF_FALLBACK]: + options[CONF_FALLBACK] = CONST_OVERLAY_TADO_MODE + else: + options[CONF_FALLBACK] = CONST_OVERLAY_MANUAL hass.config_entries.async_update_entry(entry, options=options) diff --git a/homeassistant/components/tado/config_flow.py b/homeassistant/components/tado/config_flow.py index 95b415c5acc..a03b370d0a3 100644 --- a/homeassistant/components/tado/config_flow.py +++ b/homeassistant/components/tado/config_flow.py @@ -11,7 +11,13 @@ from homeassistant.const import CONF_PASSWORD, CONF_USERNAME from homeassistant.core import callback from homeassistant.data_entry_flow import FlowResult -from .const import CONF_FALLBACK, CONST_OVERLAY_TADO_OPTIONS, DOMAIN, UNIQUE_ID +from .const import ( + CONF_FALLBACK, + CONST_OVERLAY_TADO_DEFAULT, + CONST_OVERLAY_TADO_OPTIONS, + DOMAIN, + UNIQUE_ID, +) _LOGGER = logging.getLogger(__name__) @@ -126,7 +132,10 @@ class OptionsFlowHandler(config_entries.OptionsFlow): data_schema = vol.Schema( { vol.Optional( - CONF_FALLBACK, default=self.config_entry.options.get(CONF_FALLBACK) + CONF_FALLBACK, + default=self.config_entry.options.get( + CONF_FALLBACK, CONST_OVERLAY_TADO_DEFAULT + ), ): vol.In(CONST_OVERLAY_TADO_OPTIONS), } ) From 1866e58ac5f82e1f8770fcdb965464e907e7844b Mon Sep 17 00:00:00 2001 From: puddly <32534428+puddly@users.noreply.github.com> Date: Thu, 7 Apr 2022 18:33:14 -0400 Subject: [PATCH 172/238] Move new `zha_event` command parameters into a `params` key to ensure backwards compatibility (#69631) --- .../components/zha/core/channels/base.py | 18 ++++++++++++++++-- homeassistant/components/zha/core/const.py | 1 + tests/components/zha/test_device_action.py | 10 ++++++++++ 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/zha/core/channels/base.py b/homeassistant/components/zha/core/channels/base.py index 0dd6169373b..50546b7720c 100644 --- a/homeassistant/components/zha/core/channels/base.py +++ b/homeassistant/components/zha/core/channels/base.py @@ -8,7 +8,7 @@ import logging from typing import Any import zigpy.exceptions -from zigpy.zcl.foundation import ConfigureReportingResponseRecord, Status +from zigpy.zcl.foundation import CommandSchema, ConfigureReportingResponseRecord, Status from homeassistant.const import ATTR_COMMAND from homeassistant.core import callback @@ -20,6 +20,7 @@ from ..const import ( ATTR_ATTRIBUTE_ID, ATTR_ATTRIBUTE_NAME, ATTR_CLUSTER_ID, + ATTR_PARAMS, ATTR_TYPE, ATTR_UNIQUE_ID, ATTR_VALUE, @@ -354,14 +355,27 @@ class ZigbeeChannel(LogMixin): """Handle ZDO commands on this cluster.""" @callback - def zha_send_event(self, command: str, args: int | dict) -> None: + def zha_send_event(self, command: str, arg: list | dict | CommandSchema) -> None: """Relay events to hass.""" + + if isinstance(arg, CommandSchema): + args = [a for a in arg if a is not None] + params = arg.as_dict() + elif isinstance(arg, (list, dict)): + # Quirks can directly send lists and dicts to ZHA this way + args = arg + params = {} + else: + raise TypeError(f"Unexpected zha_send_event {command!r} argument: {arg!r}") + self._ch_pool.zha_send_event( { ATTR_UNIQUE_ID: self.unique_id, ATTR_CLUSTER_ID: self.cluster.cluster_id, ATTR_COMMAND: command, + # Maintain backwards compatibility with the old zigpy response format ATTR_ARGS: args, + ATTR_PARAMS: params, } ) diff --git a/homeassistant/components/zha/core/const.py b/homeassistant/components/zha/core/const.py index b3f06b9eba6..1e249ebd52b 100644 --- a/homeassistant/components/zha/core/const.py +++ b/homeassistant/components/zha/core/const.py @@ -43,6 +43,7 @@ ATTR_NEIGHBORS = "neighbors" ATTR_NODE_DESCRIPTOR = "node_descriptor" ATTR_NWK = "nwk" ATTR_OUT_CLUSTERS = "out_clusters" +ATTR_PARAMS = "params" ATTR_POWER_SOURCE = "power_source" ATTR_PROFILE_ID = "profile_id" ATTR_QUIRK_APPLIED = "quirk_applied" diff --git a/tests/components/zha/test_device_action.py b/tests/components/zha/test_device_action.py index 9bc52a784f6..e31f6b50fb5 100644 --- a/tests/components/zha/test_device_action.py +++ b/tests/components/zha/test_device_action.py @@ -140,3 +140,13 @@ async def test_action(hass, device_ias): assert calls[0].domain == DOMAIN assert calls[0].service == "warning_device_warn" assert calls[0].data["ieee"] == ieee_address + + +async def test_invalid_zha_event_type(hass, device_ias): + """Test that unexpected types are not passed to `zha_send_event`.""" + zigpy_device, zha_device = device_ias + channel = zha_device.channels.pools[0].client_channels["1:0x0006"] + + # `zha_send_event` accepts only zigpy responses, lists, and dicts + with pytest.raises(TypeError): + channel.zha_send_event(COMMAND_SINGLE, 123) From 4d4eb5c8501ca37ea5a87720f62fdfeb8c2565ab Mon Sep 17 00:00:00 2001 From: "David F. Mulcahey" Date: Thu, 7 Apr 2022 20:16:36 -0400 Subject: [PATCH 173/238] Bump ZHA quirks to 0.0.71 (#69633) --- homeassistant/components/zha/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/zha/manifest.json b/homeassistant/components/zha/manifest.json index fcf6a126963..14000fac875 100644 --- a/homeassistant/components/zha/manifest.json +++ b/homeassistant/components/zha/manifest.json @@ -7,7 +7,7 @@ "bellows==0.29.0", "pyserial==3.5", "pyserial-asyncio==0.6", - "zha-quirks==0.0.69", + "zha-quirks==0.0.71", "zigpy-deconz==0.15.0", "zigpy==0.44.1", "zigpy-xbee==0.14.0", diff --git a/requirements_all.txt b/requirements_all.txt index 1290a9766db..425573c4c61 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -2473,7 +2473,7 @@ zengge==0.2 zeroconf==0.38.4 # homeassistant.components.zha -zha-quirks==0.0.69 +zha-quirks==0.0.71 # homeassistant.components.zhong_hong zhong_hong_hvac==1.0.9 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index f02e5f08740..e3baebd2e9d 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -1601,7 +1601,7 @@ youless-api==0.16 zeroconf==0.38.4 # homeassistant.components.zha -zha-quirks==0.0.69 +zha-quirks==0.0.71 # homeassistant.components.zha zigpy-deconz==0.15.0 From 8017cb274e3b22556185a14c9c556139b9823573 Mon Sep 17 00:00:00 2001 From: "David F. Mulcahey" Date: Thu, 7 Apr 2022 20:53:12 -0400 Subject: [PATCH 174/238] Fix Samjin Multi acceleration in ZHA (#69636) --- homeassistant/components/zha/core/channels/base.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/zha/core/channels/base.py b/homeassistant/components/zha/core/channels/base.py index 50546b7720c..b10209f45f4 100644 --- a/homeassistant/components/zha/core/channels/base.py +++ b/homeassistant/components/zha/core/channels/base.py @@ -8,7 +8,12 @@ import logging from typing import Any import zigpy.exceptions -from zigpy.zcl.foundation import CommandSchema, ConfigureReportingResponseRecord, Status +from zigpy.zcl.foundation import ( + CommandSchema, + ConfigureReportingResponseRecord, + Status, + ZCLAttributeDef, +) from homeassistant.const import ATTR_COMMAND from homeassistant.core import callback @@ -112,7 +117,11 @@ class ZigbeeChannel(LogMixin): if not hasattr(self, "_value_attribute") and self.REPORT_CONFIG: attr = self.REPORT_CONFIG[0].get("attr") if isinstance(attr, str): - self.value_attribute = self.cluster.attributes_by_name.get(attr) + attribute: ZCLAttributeDef = self.cluster.attributes_by_name.get(attr) + if attribute is not None: + self.value_attribute = attribute.id + else: + self.value_attribute = None else: self.value_attribute = attr self._status = ChannelStatus.CREATED From 7e317bed3e51a0c9d6581b7008639c1f522b8b73 Mon Sep 17 00:00:00 2001 From: Matt Zimmerman Date: Thu, 7 Apr 2022 20:34:00 -0700 Subject: [PATCH 175/238] [powerwall] Skip backup reserve sensor if data is unavailable (#69637) --- .../components/powerwall/__init__.py | 7 ++++- homeassistant/components/powerwall/models.py | 2 +- homeassistant/components/powerwall/sensor.py | 8 ++++-- tests/components/powerwall/test_sensor.py | 27 ++++++++++++++++++- 4 files changed, 39 insertions(+), 5 deletions(-) diff --git a/homeassistant/components/powerwall/__init__.py b/homeassistant/components/powerwall/__init__.py index d2850330b7a..6537ea249c1 100644 --- a/homeassistant/components/powerwall/__init__.py +++ b/homeassistant/components/powerwall/__init__.py @@ -223,13 +223,18 @@ def call_base_info(power_wall: Powerwall, host: str) -> PowerwallBaseInfo: def _fetch_powerwall_data(power_wall: Powerwall) -> PowerwallData: """Process and update powerwall data.""" + try: + backup_reserve = power_wall.get_backup_reserve_percentage() + except MissingAttributeError: + backup_reserve = None + return PowerwallData( charge=power_wall.get_charge(), site_master=power_wall.get_sitemaster(), meters=power_wall.get_meters(), grid_services_active=power_wall.is_grid_services_active(), grid_status=power_wall.get_grid_status(), - backup_reserve=power_wall.get_backup_reserve_percentage(), + backup_reserve=backup_reserve, ) diff --git a/homeassistant/components/powerwall/models.py b/homeassistant/components/powerwall/models.py index cb9b84be16a..6f8ccb98459 100644 --- a/homeassistant/components/powerwall/models.py +++ b/homeassistant/components/powerwall/models.py @@ -38,7 +38,7 @@ class PowerwallData: meters: MetersAggregates grid_services_active: bool grid_status: GridStatus - backup_reserve: float + backup_reserve: float | None class PowerwallRuntimeData(TypedDict): diff --git a/homeassistant/components/powerwall/sensor.py b/homeassistant/components/powerwall/sensor.py index 9e66c61a2bb..573dcab6bcc 100644 --- a/homeassistant/components/powerwall/sensor.py +++ b/homeassistant/components/powerwall/sensor.py @@ -117,9 +117,11 @@ async def async_setup_entry( data: PowerwallData = coordinator.data entities: list[PowerWallEntity] = [ PowerWallChargeSensor(powerwall_data), - PowerWallBackupReserveSensor(powerwall_data), ] + if data.backup_reserve is not None: + entities.append(PowerWallBackupReserveSensor(powerwall_data)) + for meter in data.meters.meters: entities.append(PowerWallExportSensor(powerwall_data, meter)) entities.append(PowerWallImportSensor(powerwall_data, meter)) @@ -190,8 +192,10 @@ class PowerWallBackupReserveSensor(PowerWallEntity, SensorEntity): return f"{self.base_unique_id}_backup_reserve" @property - def native_value(self) -> int: + def native_value(self) -> int | None: """Get the current value in percentage.""" + if self.data.backup_reserve is None: + return None return round(self.data.backup_reserve) diff --git a/tests/components/powerwall/test_sensor.py b/tests/components/powerwall/test_sensor.py index c40d88fb252..f904f587ed3 100644 --- a/tests/components/powerwall/test_sensor.py +++ b/tests/components/powerwall/test_sensor.py @@ -1,5 +1,7 @@ """The sensor tests for the powerwall platform.""" -from unittest.mock import patch +from unittest.mock import Mock, patch + +from tesla_powerwall.error import MissingAttributeError from homeassistant.components.powerwall.const import DOMAIN from homeassistant.components.sensor import ATTR_STATE_CLASS @@ -112,3 +114,26 @@ async def test_sensors(hass, entity_registry_enabled_by_default): # HA changes the implementation and a new one appears for key, value in expected_attributes.items(): assert state.attributes[key] == value + + +async def test_sensor_backup_reserve_unavailable(hass): + """Confirm that backup reserve sensor is not added if data is unavailable from the device.""" + + mock_powerwall = await _mock_powerwall_with_fixtures(hass) + mock_powerwall.get_backup_reserve_percentage = Mock( + side_effect=MissingAttributeError(Mock(), "backup_reserve_percent", "operation") + ) + + config_entry = MockConfigEntry(domain=DOMAIN, data={CONF_IP_ADDRESS: "1.2.3.4"}) + config_entry.add_to_hass(hass) + with patch( + "homeassistant.components.powerwall.config_flow.Powerwall", + return_value=mock_powerwall, + ), patch( + "homeassistant.components.powerwall.Powerwall", return_value=mock_powerwall + ): + assert await hass.config_entries.async_setup(config_entry.entry_id) + await hass.async_block_till_done() + + state = hass.states.get("sensor.powerwall_backup_reserve") + assert state is None From d9cbbd3b05d95e24acb61f3e946c5115af3b0cbd Mon Sep 17 00:00:00 2001 From: Allen Porter Date: Thu, 7 Apr 2022 21:53:30 -0700 Subject: [PATCH 176/238] Fix bugs calendar oauth token date handling (#69641) --- homeassistant/components/google/api.py | 9 +++++---- tests/components/google/test_config_flow.py | 6 ++++++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/google/api.py b/homeassistant/components/google/api.py index ea3d23dcb01..80c66d7af0c 100644 --- a/homeassistant/components/google/api.py +++ b/homeassistant/components/google/api.py @@ -5,6 +5,7 @@ from __future__ import annotations from collections.abc import Awaitable, Callable import datetime import logging +import time from typing import Any from googleapiclient import discovery as google_discovery @@ -58,7 +59,7 @@ class DeviceAuth(config_entry_oauth2_flow.LocalOAuth2Implementation): "refresh_token": creds.refresh_token, "scope": " ".join(creds.scopes), "token_type": "Bearer", - "expires_in": creds.token_expiry.timestamp(), + "expires_in": creds.token_expiry.timestamp() - time.time(), } @@ -157,16 +158,16 @@ def _async_google_creds(hass: HomeAssistant, token: dict[str, Any]) -> Credentia client_id=conf[CONF_CLIENT_ID], client_secret=conf[CONF_CLIENT_SECRET], refresh_token=token["refresh_token"], - token_expiry=token["expires_at"], + token_expiry=datetime.datetime.fromtimestamp(token["expires_at"]), token_uri=oauth2client.GOOGLE_TOKEN_URI, scopes=[conf[CONF_CALENDAR_ACCESS].scope], user_agent=None, ) -def _api_time_format(time: datetime.datetime | None) -> str | None: +def _api_time_format(date_time: datetime.datetime | None) -> str | None: """Convert a datetime to the api string format.""" - return time.isoformat("T") if time else None + return date_time.isoformat("T") if date_time else None class GoogleCalendarService: diff --git a/tests/components/google/test_config_flow.py b/tests/components/google/test_config_flow.py index a5467b95dcb..e96a4c3fd5f 100644 --- a/tests/components/google/test_config_flow.py +++ b/tests/components/google/test_config_flow.py @@ -97,6 +97,12 @@ async def test_full_flow( assert "data" in result data = result["data"] assert "token" in data + assert 0 < data["token"]["expires_in"] < 8 * 86400 + assert ( + datetime.datetime.now().timestamp() + <= data["token"]["expires_at"] + < (datetime.datetime.now() + datetime.timedelta(days=8)).timestamp() + ) data["token"].pop("expires_at") data["token"].pop("expires_in") assert data == { From 509d6ffcb2527e3ba12fdd2207e19dfa181e7894 Mon Sep 17 00:00:00 2001 From: azrdev Date: Sun, 10 Apr 2022 14:16:23 +0200 Subject: [PATCH 177/238] Update python-mpd2 to 3.0.5 (#69304) --- homeassistant/components/mpd/manifest.json | 2 +- requirements_all.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/mpd/manifest.json b/homeassistant/components/mpd/manifest.json index 880d32b5877..9bfeb8dad03 100644 --- a/homeassistant/components/mpd/manifest.json +++ b/homeassistant/components/mpd/manifest.json @@ -2,7 +2,7 @@ "domain": "mpd", "name": "Music Player Daemon (MPD)", "documentation": "https://www.home-assistant.io/integrations/mpd", - "requirements": ["python-mpd2==3.0.4"], + "requirements": ["python-mpd2==3.0.5"], "codeowners": ["@fabaff"], "iot_class": "local_polling", "loggers": ["mpd"] diff --git a/requirements_all.txt b/requirements_all.txt index 425573c4c61..3d5430d0f5f 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -1907,7 +1907,7 @@ python-kasa==0.4.3 python-miio==0.5.11 # homeassistant.components.mpd -python-mpd2==3.0.4 +python-mpd2==3.0.5 # homeassistant.components.mystrom python-mystrom==1.1.2 From 5a408d408393d600d3389a9246040e0e463f8986 Mon Sep 17 00:00:00 2001 From: starkillerOG Date: Sun, 10 Apr 2022 07:40:48 +0200 Subject: [PATCH 178/238] Fix Netgear switch state update (#69597) --- homeassistant/components/netgear/switch.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/homeassistant/components/netgear/switch.py b/homeassistant/components/netgear/switch.py index cf8cd835f89..b38179ccb2a 100644 --- a/homeassistant/components/netgear/switch.py +++ b/homeassistant/components/netgear/switch.py @@ -90,10 +90,12 @@ class NetgearAllowBlock(NetgearDeviceEntity, SwitchEntity): async def async_turn_on(self, **kwargs): """Turn the switch on.""" await self._router.async_allow_block_device(self._mac, ALLOW) + await self.coordinator.async_request_refresh() async def async_turn_off(self, **kwargs): """Turn the switch off.""" await self._router.async_allow_block_device(self._mac, BLOCK) + await self.coordinator.async_request_refresh() @callback def async_update_device(self) -> None: From 39e9270b7966631bcfb559603701bd5f7d8db0fb Mon Sep 17 00:00:00 2001 From: epenet <6771947+epenet@users.noreply.github.com> Date: Sat, 9 Apr 2022 08:05:00 +0200 Subject: [PATCH 179/238] Fix upnp subscription in SamsungTV (#69652) Co-authored-by: J. Nick Koston --- .../components/samsungtv/media_player.py | 8 ++++- tests/components/samsungtv/conftest.py | 15 ++++++++ .../components/samsungtv/test_media_player.py | 36 +++++++++++++++++++ 3 files changed, 58 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/samsungtv/media_player.py b/homeassistant/components/samsungtv/media_player.py index 47dae90d3e6..8b4214d8a76 100644 --- a/homeassistant/components/samsungtv/media_player.py +++ b/homeassistant/components/samsungtv/media_player.py @@ -214,13 +214,19 @@ class SamsungTVDevice(MediaPlayerEntity): ) if self._attr_state != STATE_ON: + if self._dmr_device and self._dmr_device.is_subscribed: + await self._dmr_device.async_unsubscribe_services() return - startup_tasks: list[Coroutine[Any, Any, None]] = [] + startup_tasks: list[Coroutine[Any, Any, Any]] = [] if not self._app_list_event.is_set(): startup_tasks.append(self._async_startup_app_list()) + if self._dmr_device and not self._dmr_device.is_subscribed: + startup_tasks.append( + self._dmr_device.async_subscribe_services(auto_resubscribe=True) + ) if not self._dmr_device and self._ssdp_rendering_control_location: startup_tasks.append(self._async_startup_dmr()) diff --git a/tests/components/samsungtv/conftest.py b/tests/components/samsungtv/conftest.py index 0f3bc53905a..d7f8ed0d1a1 100644 --- a/tests/components/samsungtv/conftest.py +++ b/tests/components/samsungtv/conftest.py @@ -101,12 +101,27 @@ async def dmr_device_fixture(upnp_device: Mock) -> Mock: dmr_device.volume_level = 0.44 dmr_device.is_volume_muted = False dmr_device.on_event = None + dmr_device.is_subscribed = False def _raise_event(service, state_variables): if dmr_device.on_event: dmr_device.on_event(service, state_variables) dmr_device.raise_event = _raise_event + + def _async_subscribe_services(auto_resubscribe: bool = False): + dmr_device.is_subscribed = True + + dmr_device.async_subscribe_services = AsyncMock( + side_effect=_async_subscribe_services + ) + + def _async_unsubscribe_services(): + dmr_device.is_subscribed = False + + dmr_device.async_unsubscribe_services = AsyncMock( + side_effect=_async_unsubscribe_services + ) yield dmr_device diff --git a/tests/components/samsungtv/test_media_player.py b/tests/components/samsungtv/test_media_player.py index 5d0ea5e6be0..e8407a86a3e 100644 --- a/tests/components/samsungtv/test_media_player.py +++ b/tests/components/samsungtv/test_media_player.py @@ -1469,3 +1469,39 @@ async def test_upnp_subscribe_events_upnpresponseerror( upnp_notify_server.async_stop_server.assert_not_called() assert "Device rejected subscription" in caplog.text + + +@pytest.mark.usefixtures("rest_api", "upnp_notify_server") +async def test_upnp_re_subscribe_events( + hass: HomeAssistant, remotews: Mock, dmr_device: Mock, mock_now: datetime +) -> None: + """Test for Upnp event feedback.""" + await setup_samsungtv_entry(hass, MOCK_ENTRY_WS) + + state = hass.states.get(ENTITY_ID) + assert state.state == STATE_ON + assert dmr_device.async_subscribe_services.call_count == 1 + assert dmr_device.async_unsubscribe_services.call_count == 0 + + with patch.object( + remotews, "start_listening", side_effect=WebSocketException("Boom") + ), patch.object(remotews, "is_alive", return_value=False): + next_update = mock_now + timedelta(minutes=5) + with patch("homeassistant.util.dt.utcnow", return_value=next_update): + async_fire_time_changed(hass, next_update) + await hass.async_block_till_done() + + state = hass.states.get(ENTITY_ID) + assert state.state == STATE_OFF + assert dmr_device.async_subscribe_services.call_count == 1 + assert dmr_device.async_unsubscribe_services.call_count == 1 + + next_update = mock_now + timedelta(minutes=10) + with patch("homeassistant.util.dt.utcnow", return_value=next_update): + async_fire_time_changed(hass, next_update) + await hass.async_block_till_done() + + state = hass.states.get(ENTITY_ID) + assert state.state == STATE_ON + assert dmr_device.async_subscribe_services.call_count == 2 + assert dmr_device.async_unsubscribe_services.call_count == 1 From b1eda25ca3832830d110723a3220b3c82c50202f Mon Sep 17 00:00:00 2001 From: KNXBroker Date: Sat, 9 Apr 2022 08:04:11 +0200 Subject: [PATCH 180/238] Fix soundtouch service calls (#69655) --- .../components/soundtouch/services.yaml | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/homeassistant/components/soundtouch/services.yaml b/homeassistant/components/soundtouch/services.yaml index 0de37c6daa2..8d255e5f069 100644 --- a/homeassistant/components/soundtouch/services.yaml +++ b/homeassistant/components/soundtouch/services.yaml @@ -28,10 +28,10 @@ create_zone: description: Name of slaves entities to add to the new zone. required: true selector: - target: - entity: - integration: soundtouch - domain: media_player + entity: + multiple: true + integration: soundtouch + domain: media_player add_zone_slave: name: Add zone slave @@ -50,10 +50,10 @@ add_zone_slave: description: Name of slaves entities to add to the existing zone. required: true selector: - target: - entity: - integration: soundtouch - domain: media_player + entity: + multiple: true + integration: soundtouch + domain: media_player remove_zone_slave: name: Remove zone slave @@ -72,7 +72,7 @@ remove_zone_slave: description: Name of slaves entities to remove from the existing zone. required: true selector: - target: - entity: - integration: soundtouch - domain: media_player + entity: + multiple: true + integration: soundtouch + domain: media_player From 269405aee05d015e2a8a62fa5f83ae3d930d20d6 Mon Sep 17 00:00:00 2001 From: epenet <6771947+epenet@users.noreply.github.com> Date: Fri, 8 Apr 2022 15:36:43 +0200 Subject: [PATCH 181/238] Suppress Upnp parsing errors in SamsungTV (#69664) --- homeassistant/components/samsungtv/media_player.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/samsungtv/media_player.py b/homeassistant/components/samsungtv/media_player.py index 8b4214d8a76..556294409d6 100644 --- a/homeassistant/components/samsungtv/media_player.py +++ b/homeassistant/components/samsungtv/media_player.py @@ -279,7 +279,10 @@ class SamsungTVDevice(MediaPlayerEntity): if self._dmr_device is None: session = async_get_clientsession(self.hass) upnp_requester = AiohttpSessionRequester(session) - upnp_factory = UpnpFactory(upnp_requester) + # Set non_strict to avoid invalid data sent by Samsung TV: + # Got invalid value for : + # NETWORK,NONE + upnp_factory = UpnpFactory(upnp_requester, non_strict=True) upnp_device: UpnpDevice | None = None with contextlib.suppress(UpnpConnectionError): upnp_device = await upnp_factory.async_create_device( From 39e4d3e63b5a2e2f0a7bfbc1c9a579230a41fcc9 Mon Sep 17 00:00:00 2001 From: Francois Chagnon Date: Fri, 8 Apr 2022 11:27:06 -0400 Subject: [PATCH 182/238] Add None guard for zwave_js humidifier entity (#69667) * Add None guard for humidifier entity is_on * Add guards in more places * Update homeassistant/components/zwave_js/humidifier.py Co-authored-by: Martin Hjelmare Co-authored-by: Martin Hjelmare --- homeassistant/components/zwave_js/humidifier.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/homeassistant/components/zwave_js/humidifier.py b/homeassistant/components/zwave_js/humidifier.py index b94c7a8e2a3..44d7bc19bbb 100644 --- a/homeassistant/components/zwave_js/humidifier.py +++ b/homeassistant/components/zwave_js/humidifier.py @@ -150,10 +150,9 @@ class ZWaveHumidifier(ZWaveBaseEntity, HumidifierEntity): @property def is_on(self) -> bool | None: """Return True if entity is on.""" - return int(self._current_mode.value) in [ - self.entity_description.on_mode, - HumidityControlMode.AUTO, - ] + if (value := self._current_mode.value) is None: + return None + return int(value) in [self.entity_description.on_mode, HumidityControlMode.AUTO] def _supports_inverse_mode(self) -> bool: return ( @@ -163,7 +162,9 @@ class ZWaveHumidifier(ZWaveBaseEntity, HumidifierEntity): async def async_turn_on(self, **kwargs: Any) -> None: """Turn on device.""" - mode = int(self._current_mode.value) + if (value := self._current_mode.value) is None: + return + mode = int(value) if mode == HumidityControlMode.OFF: new_mode = self.entity_description.on_mode elif mode == self.entity_description.inverse_mode: @@ -175,7 +176,9 @@ class ZWaveHumidifier(ZWaveBaseEntity, HumidifierEntity): async def async_turn_off(self, **kwargs: Any) -> None: """Turn off device.""" - mode = int(self._current_mode.value) + if (value := self._current_mode.value) is None: + return + mode = int(value) if mode == HumidityControlMode.AUTO: if self._supports_inverse_mode(): new_mode = self.entity_description.inverse_mode @@ -191,7 +194,7 @@ class ZWaveHumidifier(ZWaveBaseEntity, HumidifierEntity): @property def target_humidity(self) -> int | None: """Return the humidity we try to reach.""" - if not self._setpoint: + if not self._setpoint or self._setpoint.value is None: return None return int(self._setpoint.value) From 87ba8a56ee4d8e05e72ec5f39ffa13faea4f5e02 Mon Sep 17 00:00:00 2001 From: Shay Levy Date: Sat, 9 Apr 2022 08:54:42 +0300 Subject: [PATCH 183/238] Fix Shelly gen2 cover unavailable when not calibrated (#69671) --- homeassistant/components/shelly/cover.py | 3 --- tests/components/shelly/test_cover.py | 4 ++-- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/homeassistant/components/shelly/cover.py b/homeassistant/components/shelly/cover.py index 4885a2a0d2e..79ee15ee5ce 100644 --- a/homeassistant/components/shelly/cover.py +++ b/homeassistant/components/shelly/cover.py @@ -157,9 +157,6 @@ class RpcShellyCover(ShellyRpcEntity, CoverEntity): @property def is_closed(self) -> bool | None: """If cover is closed.""" - if not self.status["pos_control"]: - return None - return cast(bool, self.status["state"] == "closed") @property diff --git a/tests/components/shelly/test_cover.py b/tests/components/shelly/test_cover.py index 8813de200da..ab8c9a9a876 100644 --- a/tests/components/shelly/test_cover.py +++ b/tests/components/shelly/test_cover.py @@ -12,7 +12,7 @@ from homeassistant.components.cover import ( STATE_OPEN, STATE_OPENING, ) -from homeassistant.const import ATTR_ENTITY_ID, STATE_UNKNOWN +from homeassistant.const import ATTR_ENTITY_ID from homeassistant.helpers.entity_component import async_update_entity ROLLER_BLOCK_ID = 1 @@ -189,4 +189,4 @@ async def test_rpc_device_no_position_control(hass, rpc_wrapper, monkeypatch): await async_update_entity(hass, "cover.test_cover_0") await hass.async_block_till_done() - assert hass.states.get("cover.test_cover_0").state == STATE_UNKNOWN + assert hass.states.get("cover.test_cover_0").state == STATE_OPEN From 2298a1fa706d9fe49abdad7468d87f9acaea355c Mon Sep 17 00:00:00 2001 From: Allen Porter Date: Fri, 8 Apr 2022 20:27:58 -0700 Subject: [PATCH 184/238] Refresh google calendar tokens with invalid expiration times (#69679) * Refresh google calendar tokens with invalid expiration times * Update tests/components/google/conftest.py Co-authored-by: Martin Hjelmare * Remove unnecessary async methods in functions being touched already Co-authored-by: Martin Hjelmare --- homeassistant/components/google/__init__.py | 8 ++++- tests/components/google/conftest.py | 24 +++++++++++--- tests/components/google/test_init.py | 36 +++++++++++++++++++++ 3 files changed, 62 insertions(+), 6 deletions(-) diff --git a/homeassistant/components/google/__init__.py b/homeassistant/components/google/__init__.py index f158db884dc..3df1cf194f0 100644 --- a/homeassistant/components/google/__init__.py +++ b/homeassistant/components/google/__init__.py @@ -185,8 +185,14 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: hass, entry ) ) - assert isinstance(implementation, DeviceAuth) session = config_entry_oauth2_flow.OAuth2Session(hass, entry, implementation) + # Force a token refresh to fix a bug where tokens were persisted with + # expires_in (relative time delta) and expires_at (absolute time) swapped. + if session.token["expires_at"] >= datetime(2070, 1, 1).timestamp(): + session.token["expires_in"] = 0 + session.token["expires_at"] = datetime.now().timestamp() + await session.async_ensure_token_valid() + required_scope = hass.data[DOMAIN][DATA_CONFIG][CONF_CALENDAR_ACCESS].scope if required_scope not in session.token.get("scope", []): raise ConfigEntryAuthFailed( diff --git a/tests/components/google/conftest.py b/tests/components/google/conftest.py index 102b8a1ccc6..617590cb856 100644 --- a/tests/components/google/conftest.py +++ b/tests/components/google/conftest.py @@ -132,9 +132,16 @@ async def token_scopes() -> list[str]: @pytest.fixture -async def creds(token_scopes: list[str]) -> OAuth2Credentials: +def token_expiry() -> datetime.datetime: + """Expiration time for credentials used in the test.""" + return utcnow() + datetime.timedelta(days=7) + + +@pytest.fixture +def creds( + token_scopes: list[str], token_expiry: datetime.datetime +) -> OAuth2Credentials: """Fixture that defines creds used in the test.""" - token_expiry = utcnow() + datetime.timedelta(days=7) return OAuth2Credentials( access_token="ACCESS_TOKEN", client_id="client-id", @@ -156,9 +163,16 @@ async def storage() -> YieldFixture[FakeStorage]: @pytest.fixture -async def config_entry(token_scopes: list[str]) -> MockConfigEntry: +def config_entry_token_expiry(token_expiry: datetime.datetime) -> float: + """Fixture for token expiration value stored in the config entry.""" + return token_expiry.timestamp() + + +@pytest.fixture +async def config_entry( + token_scopes: list[str], config_entry_token_expiry: float +) -> MockConfigEntry: """Fixture to create a config entry for the integration.""" - token_expiry = utcnow() + datetime.timedelta(days=7) return MockConfigEntry( domain=DOMAIN, data={ @@ -168,7 +182,7 @@ async def config_entry(token_scopes: list[str]) -> MockConfigEntry: "refresh_token": "REFRESH_TOKEN", "scope": " ".join(token_scopes), "token_type": "Bearer", - "expires_at": token_expiry.timestamp(), + "expires_at": config_entry_token_expiry, }, }, ) diff --git a/tests/components/google/test_init.py b/tests/components/google/test_init.py index 49e10d137b6..67150de0bcd 100644 --- a/tests/components/google/test_init.py +++ b/tests/components/google/test_init.py @@ -3,6 +3,7 @@ from __future__ import annotations from collections.abc import Awaitable, Callable import datetime +import time from typing import Any from unittest.mock import Mock, call, patch @@ -29,6 +30,7 @@ from .conftest import ( ) from tests.common import MockConfigEntry +from tests.test_util.aiohttp import AiohttpClientMocker # Typing helpers HassApi = Callable[[], Awaitable[dict[str, Any]]] @@ -469,3 +471,37 @@ async def test_scan_calendars( assert state assert state.name == "Calendar 2" assert state.state == STATE_OFF + + +@pytest.mark.parametrize( + "config_entry_token_expiry", [datetime.datetime.max.timestamp() + 1] +) +async def test_invalid_token_expiry_in_config_entry( + hass: HomeAssistant, + component_setup: ComponentSetup, + setup_config_entry: MockConfigEntry, + aioclient_mock: AiohttpClientMocker, +) -> None: + """Exercise case in issue #69623 with invalid token expiration persisted.""" + + # The token is refreshed and new expiration values are returned + expires_in = 86400 + expires_at = time.time() + expires_in + aioclient_mock.post( + "https://oauth2.googleapis.com/token", + json={ + "refresh_token": "some-refresh-token", + "access_token": "some-updated-token", + "expires_at": expires_at, + "expires_in": expires_in, + }, + ) + + assert await component_setup() + + # Verify token expiration values are updated + entries = hass.config_entries.async_entries(DOMAIN) + assert len(entries) == 1 + assert entries[0].state is ConfigEntryState.LOADED + assert entries[0].data["token"]["access_token"] == "some-updated-token" + assert entries[0].data["token"]["expires_in"] == expires_in From 2c48f28f13e8758e212ec621a269a6f1670d8543 Mon Sep 17 00:00:00 2001 From: Dave T <17680170+davet2001@users.noreply.github.com> Date: Sat, 9 Apr 2022 07:06:34 +0100 Subject: [PATCH 185/238] Support webp still image format in generic camera (#69718) --- homeassistant/components/generic/config_flow.py | 2 +- tests/components/generic/sample5_webp.webp | Bin 0 -> 3222 bytes tests/components/generic/test_config_flow.py | 1 + 3 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 tests/components/generic/sample5_webp.webp diff --git a/homeassistant/components/generic/config_flow.py b/homeassistant/components/generic/config_flow.py index df8946ccbad..ac178e12956 100644 --- a/homeassistant/components/generic/config_flow.py +++ b/homeassistant/components/generic/config_flow.py @@ -58,7 +58,7 @@ DEFAULT_DATA = { CONF_VERIFY_SSL: True, } -SUPPORTED_IMAGE_TYPES = {"png", "jpeg", "gif", "svg+xml"} +SUPPORTED_IMAGE_TYPES = {"png", "jpeg", "gif", "svg+xml", "webp"} def build_schema( diff --git a/tests/components/generic/sample5_webp.webp b/tests/components/generic/sample5_webp.webp new file mode 100644 index 0000000000000000000000000000000000000000..0cf62db1844a5ad5bc583b794c8a774a987d17e6 GIT binary patch literal 3222 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 IUgKB*083*_D*ylh literal 0 HcmV?d00001 diff --git a/tests/components/generic/test_config_flow.py b/tests/components/generic/test_config_flow.py index 548b09cf0bb..feddb5f3fca 100644 --- a/tests/components/generic/test_config_flow.py +++ b/tests/components/generic/test_config_flow.py @@ -147,6 +147,7 @@ async def test_form_only_svg_whitespace(hass, fakeimgbytes_svg, user_flow): ("sample2_jpeg_odd_header.jpg"), ("sample3_jpeg_odd_header.jpg"), ("sample4_K5-60mileAnim-320x240.gif"), + ("sample5_webp.webp"), ], ) async def test_form_only_still_sample(hass, user_flow, image_file): From 2ca8a0ef4a87f2959f857469724719ed2900b628 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Fri, 8 Apr 2022 21:08:17 -1000 Subject: [PATCH 186/238] Increase tplink effects random seed allowed range to 1-600 (#69725) * Increase tplink effects random seed allowed range to 1-600 Reported https://community.home-assistant.io/t/tp-link-integration-support-for-kl430-led-light-strip/190635/62?u=bdraco * cover --- homeassistant/components/tplink/light.py | 2 +- homeassistant/components/tplink/services.yaml | 2 +- tests/components/tplink/test_light.py | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/tplink/light.py b/homeassistant/components/tplink/light.py index 32af7cf47be..ecbcb84d772 100644 --- a/homeassistant/components/tplink/light.py +++ b/homeassistant/components/tplink/light.py @@ -101,7 +101,7 @@ RANDOM_EFFECT_DICT: Final = { cv.ensure_list_csv, [vol.Coerce(int)], HSV_SEQUENCE ), vol.Optional("random_seed", default=100): vol.All( - vol.Coerce(int), vol.Range(min=1, max=100) + vol.Coerce(int), vol.Range(min=1, max=600) ), vol.Optional("backgrounds"): vol.All( cv.ensure_list, diff --git a/homeassistant/components/tplink/services.yaml b/homeassistant/components/tplink/services.yaml index 6f2d9054b1e..9b98018e771 100644 --- a/homeassistant/components/tplink/services.yaml +++ b/homeassistant/components/tplink/services.yaml @@ -180,4 +180,4 @@ random_effect: number: min: 1 step: 1 - max: 100 + max: 600 diff --git a/tests/components/tplink/test_light.py b/tests/components/tplink/test_light.py index c56bb6399fb..e5d20276490 100644 --- a/tests/components/tplink/test_light.py +++ b/tests/components/tplink/test_light.py @@ -523,6 +523,7 @@ async def test_smart_strip_custom_random_effect(hass: HomeAssistant) -> None: { ATTR_ENTITY_ID: entity_id, "init_states": [340, 20, 50], + "random_seed": 600, }, blocking=True, ) @@ -539,7 +540,7 @@ async def test_smart_strip_custom_random_effect(hass: HomeAssistant) -> None: "transition": 0, "type": "random", "init_states": [[340, 20, 50]], - "random_seed": 100, + "random_seed": 600, } ) strip.set_custom_effect.reset_mock() From 0d7cbb8266961315ff1d5daeeba357644b3974b9 Mon Sep 17 00:00:00 2001 From: Malte Franken Date: Sun, 10 Apr 2022 19:36:35 +1000 Subject: [PATCH 187/238] Bump aio_georss_gdacs to 0.7 (#69743) --- homeassistant/components/gdacs/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/gdacs/manifest.json b/homeassistant/components/gdacs/manifest.json index 65407e85848..57c275f2beb 100644 --- a/homeassistant/components/gdacs/manifest.json +++ b/homeassistant/components/gdacs/manifest.json @@ -3,7 +3,7 @@ "name": "Global Disaster Alert and Coordination System (GDACS)", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/gdacs", - "requirements": ["aio_georss_gdacs==0.5"], + "requirements": ["aio_georss_gdacs==0.7"], "codeowners": ["@exxamalte"], "quality_scale": "platinum", "iot_class": "cloud_polling" diff --git a/requirements_all.txt b/requirements_all.txt index 3d5430d0f5f..20838f9afd1 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -107,7 +107,7 @@ aio_geojson_geonetnz_volcano==0.6 aio_geojson_nsw_rfs_incidents==0.4 # homeassistant.components.gdacs -aio_georss_gdacs==0.5 +aio_georss_gdacs==0.7 # homeassistant.components.airzone aioairzone==0.3.3 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index e3baebd2e9d..30b4a344b64 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -91,7 +91,7 @@ aio_geojson_geonetnz_volcano==0.6 aio_geojson_nsw_rfs_incidents==0.4 # homeassistant.components.gdacs -aio_georss_gdacs==0.5 +aio_georss_gdacs==0.7 # homeassistant.components.airzone aioairzone==0.3.3 From d9253fd31086f114da848b52f4fe4627daf2bab7 Mon Sep 17 00:00:00 2001 From: Mike Fugate Date: Sat, 9 Apr 2022 15:46:58 -0400 Subject: [PATCH 188/238] Fix SleepIQ firmness number step and min values (#69757) * fix sleepiq firmness number step and min values * add asserts for min/max/step attributes --- homeassistant/components/sleepiq/number.py | 7 ++++--- tests/components/sleepiq/test_number.py | 23 +++++++++++++++++++++- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/sleepiq/number.py b/homeassistant/components/sleepiq/number.py index fb17336ccb3..b9aca69b3f4 100644 --- a/homeassistant/components/sleepiq/number.py +++ b/homeassistant/components/sleepiq/number.py @@ -130,6 +130,7 @@ async def async_setup_entry( class SleepIQNumberEntity(SleepIQBedEntity, NumberEntity): """Representation of a SleepIQ number entity.""" + entity_description: SleepIQNumberEntityDescription _attr_icon = "mdi:bed" def __init__( @@ -140,7 +141,7 @@ class SleepIQNumberEntity(SleepIQBedEntity, NumberEntity): description: SleepIQNumberEntityDescription, ) -> None: """Initialize the number.""" - self.description = description + self.entity_description = description self.device = device self._attr_name = description.get_name_fn(bed, device) @@ -151,10 +152,10 @@ class SleepIQNumberEntity(SleepIQBedEntity, NumberEntity): @callback def _async_update_attrs(self) -> None: """Update number attributes.""" - self._attr_value = float(self.description.value_fn(self.device)) + self._attr_value = float(self.entity_description.value_fn(self.device)) async def async_set_value(self, value: float) -> None: """Set the number value.""" - await self.description.set_value_fn(self.device, int(value)) + await self.entity_description.set_value_fn(self.device, int(value)) self._attr_value = value self.async_write_ha_state() diff --git a/tests/components/sleepiq/test_number.py b/tests/components/sleepiq/test_number.py index be9221f3b12..bf554b69499 100644 --- a/tests/components/sleepiq/test_number.py +++ b/tests/components/sleepiq/test_number.py @@ -1,6 +1,12 @@ """The tests for SleepIQ number platform.""" from homeassistant.components.number import DOMAIN -from homeassistant.components.number.const import ATTR_VALUE, SERVICE_SET_VALUE +from homeassistant.components.number.const import ( + ATTR_MAX, + ATTR_MIN, + ATTR_STEP, + ATTR_VALUE, + SERVICE_SET_VALUE, +) from homeassistant.const import ATTR_ENTITY_ID, ATTR_FRIENDLY_NAME, ATTR_ICON from homeassistant.helpers import entity_registry as er @@ -28,6 +34,9 @@ async def test_firmness(hass, mock_asyncsleepiq): ) assert state.state == "40.0" assert state.attributes.get(ATTR_ICON) == "mdi:bed" + assert state.attributes.get(ATTR_MIN) == 5 + assert state.attributes.get(ATTR_MAX) == 100 + assert state.attributes.get(ATTR_STEP) == 5 assert ( state.attributes.get(ATTR_FRIENDLY_NAME) == f"SleepNumber {BED_NAME} {SLEEPER_L_NAME} Firmness" @@ -44,6 +53,9 @@ async def test_firmness(hass, mock_asyncsleepiq): ) assert state.state == "80.0" assert state.attributes.get(ATTR_ICON) == "mdi:bed" + assert state.attributes.get(ATTR_MIN) == 5 + assert state.attributes.get(ATTR_MAX) == 100 + assert state.attributes.get(ATTR_STEP) == 5 assert ( state.attributes.get(ATTR_FRIENDLY_NAME) == f"SleepNumber {BED_NAME} {SLEEPER_R_NAME} Firmness" @@ -78,6 +90,9 @@ async def test_actuators(hass, mock_asyncsleepiq): state = hass.states.get(f"number.sleepnumber_{BED_NAME_LOWER}_right_head_position") assert state.state == "60.0" assert state.attributes.get(ATTR_ICON) == "mdi:bed" + assert state.attributes.get(ATTR_MIN) == 0 + assert state.attributes.get(ATTR_MAX) == 100 + assert state.attributes.get(ATTR_STEP) == 1 assert ( state.attributes.get(ATTR_FRIENDLY_NAME) == f"SleepNumber {BED_NAME} Right Head Position" @@ -92,6 +107,9 @@ async def test_actuators(hass, mock_asyncsleepiq): state = hass.states.get(f"number.sleepnumber_{BED_NAME_LOWER}_left_head_position") assert state.state == "50.0" assert state.attributes.get(ATTR_ICON) == "mdi:bed" + assert state.attributes.get(ATTR_MIN) == 0 + assert state.attributes.get(ATTR_MAX) == 100 + assert state.attributes.get(ATTR_STEP) == 1 assert ( state.attributes.get(ATTR_FRIENDLY_NAME) == f"SleepNumber {BED_NAME} Left Head Position" @@ -106,6 +124,9 @@ async def test_actuators(hass, mock_asyncsleepiq): state = hass.states.get(f"number.sleepnumber_{BED_NAME_LOWER}_foot_position") assert state.state == "10.0" assert state.attributes.get(ATTR_ICON) == "mdi:bed" + assert state.attributes.get(ATTR_MIN) == 0 + assert state.attributes.get(ATTR_MAX) == 100 + assert state.attributes.get(ATTR_STEP) == 1 assert ( state.attributes.get(ATTR_FRIENDLY_NAME) == f"SleepNumber {BED_NAME} Foot Position" From 0ebd9e093d32c12d6a6f3933f9ae1c0d3a52ead8 Mon Sep 17 00:00:00 2001 From: Christopher Bailey Date: Sat, 9 Apr 2022 17:34:48 -0400 Subject: [PATCH 189/238] Fix unifiprotect for 2.0.0-beta2 of UniFi Protect (#69762) --- .../components/unifiprotect/manifest.json | 2 +- .../components/unifiprotect/switch.py | 13 +++++++++++-- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- tests/components/unifiprotect/test_switch.py | 18 ++++++++++++------ 5 files changed, 26 insertions(+), 11 deletions(-) diff --git a/homeassistant/components/unifiprotect/manifest.json b/homeassistant/components/unifiprotect/manifest.json index a70d295fd74..e120e4ada4e 100644 --- a/homeassistant/components/unifiprotect/manifest.json +++ b/homeassistant/components/unifiprotect/manifest.json @@ -3,7 +3,7 @@ "name": "UniFi Protect", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/unifiprotect", - "requirements": ["pyunifiprotect==3.2.0", "unifi-discovery==1.1.2"], + "requirements": ["pyunifiprotect==3.3.0", "unifi-discovery==1.1.2"], "dependencies": ["http"], "codeowners": ["@briis", "@AngellusMortis", "@bdraco"], "quality_scale": "platinum", diff --git a/homeassistant/components/unifiprotect/switch.py b/homeassistant/components/unifiprotect/switch.py index 9271e87db50..a3626c3082e 100644 --- a/homeassistant/components/unifiprotect/switch.py +++ b/homeassistant/components/unifiprotect/switch.py @@ -137,7 +137,7 @@ CAMERA_SWITCHES: tuple[ProtectSwitchEntityDescription, ...] = ( name="Detections: Person", icon="mdi:walk", entity_category=EntityCategory.CONFIG, - ufp_required_field="feature_flags.has_smart_detect", + ufp_required_field="can_detect_person", ufp_value="is_person_detection_on", ufp_set_method="set_person_detection", ), @@ -146,10 +146,19 @@ CAMERA_SWITCHES: tuple[ProtectSwitchEntityDescription, ...] = ( name="Detections: Vehicle", icon="mdi:car", entity_category=EntityCategory.CONFIG, - ufp_required_field="feature_flags.has_smart_detect", + ufp_required_field="can_detect_vehicle", ufp_value="is_vehicle_detection_on", ufp_set_method="set_vehicle_detection", ), + ProtectSwitchEntityDescription( + key="smart_face", + name="Detections: Face", + icon="mdi:human-greeting", + entity_category=EntityCategory.CONFIG, + ufp_required_field="can_detect_face", + ufp_value="is_face_detection_on", + ufp_set_method="set_face_detection", + ), ) SENSE_SWITCHES: tuple[ProtectSwitchEntityDescription, ...] = ( diff --git a/requirements_all.txt b/requirements_all.txt index 20838f9afd1..e4b7cff5bd0 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -1971,7 +1971,7 @@ pytrafikverket==0.1.6.2 pyudev==0.22.0 # homeassistant.components.unifiprotect -pyunifiprotect==3.2.0 +pyunifiprotect==3.3.0 # homeassistant.components.uptimerobot pyuptimerobot==22.2.0 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 30b4a344b64..3f2c682296c 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -1285,7 +1285,7 @@ pytrafikverket==0.1.6.2 pyudev==0.22.0 # homeassistant.components.unifiprotect -pyunifiprotect==3.2.0 +pyunifiprotect==3.3.0 # homeassistant.components.uptimerobot pyuptimerobot==22.2.0 diff --git a/tests/components/unifiprotect/test_switch.py b/tests/components/unifiprotect/test_switch.py index 87ffc5683c0..0a3ac92076e 100644 --- a/tests/components/unifiprotect/test_switch.py +++ b/tests/components/unifiprotect/test_switch.py @@ -6,7 +6,7 @@ from unittest.mock import AsyncMock, Mock import pytest from pyunifiprotect.data import Camera, Light -from pyunifiprotect.data.types import RecordingMode, VideoMode +from pyunifiprotect.data.types import RecordingMode, SmartDetectObjectType, VideoMode from homeassistant.components.unifiprotect.const import DEFAULT_ATTRIBUTION from homeassistant.components.unifiprotect.switch import ( @@ -26,6 +26,11 @@ from .conftest import ( ids_from_device_description, ) +CAMERA_SWITCHES_NO_FACE = [d for d in CAMERA_SWITCHES if d.name != "Detections: Face"] +CAMERA_SWITCHES_NO_EXTRA = [ + d for d in CAMERA_SWITCHES_NO_FACE if d.name not in ("High FPS", "Privacy Mode") +] + @pytest.fixture(name="light") async def light_fixture( @@ -79,6 +84,10 @@ async def camera_fixture( camera_obj.feature_flags.has_privacy_mask = True camera_obj.feature_flags.has_speaker = True camera_obj.feature_flags.has_smart_detect = True + camera_obj.feature_flags.smart_detect_types = [ + SmartDetectObjectType.PERSON, + SmartDetectObjectType.VEHICLE, + ] camera_obj.is_ssh_enabled = False camera_obj.led_settings.is_enabled = False camera_obj.hdr_mode = False @@ -244,7 +253,7 @@ async def test_switch_setup_camera_all( entity_registry = er.async_get(hass) - for description in CAMERA_SWITCHES: + for description in CAMERA_SWITCHES_NO_FACE: unique_id, entity_id = ids_from_device_description( Platform.SWITCH, camera, description ) @@ -375,15 +384,12 @@ async def test_switch_camera_ssh( camera.set_ssh.assert_called_with(False) -@pytest.mark.parametrize("description", CAMERA_SWITCHES) +@pytest.mark.parametrize("description", CAMERA_SWITCHES_NO_EXTRA) async def test_switch_camera_simple( hass: HomeAssistant, camera: Camera, description: ProtectSwitchEntityDescription ): """Tests all simple switches for cameras.""" - if description.name in ("High FPS", "Privacy Mode"): - return - assert description.ufp_set_method is not None camera.__fields__[description.ufp_set_method] = Mock() From 7c06514bb4f98fa535356b328d77d2ecdb17d1cc Mon Sep 17 00:00:00 2001 From: Maximilian <43999966+DeerMaximum@users.noreply.github.com> Date: Sun, 10 Apr 2022 16:07:22 +0200 Subject: [PATCH 190/238] Upgrade pynina to 0.1.8 (#69771) --- homeassistant/components/nina/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/nina/manifest.json b/homeassistant/components/nina/manifest.json index 0797076917d..24a8eb7163a 100644 --- a/homeassistant/components/nina/manifest.json +++ b/homeassistant/components/nina/manifest.json @@ -3,7 +3,7 @@ "name": "NINA", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/nina", - "requirements": ["pynina==0.1.7"], + "requirements": ["pynina==0.1.8"], "dependencies": [], "codeowners": ["@DeerMaximum"], "iot_class": "cloud_polling", diff --git a/requirements_all.txt b/requirements_all.txt index e4b7cff5bd0..2c8e090e036 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -1661,7 +1661,7 @@ pynetgear==0.9.4 pynetio==0.1.9.1 # homeassistant.components.nina -pynina==0.1.7 +pynina==0.1.8 # homeassistant.components.nuki pynuki==1.5.2 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 3f2c682296c..245d6ec4bdb 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -1107,7 +1107,7 @@ pymysensors==0.22.1 pynetgear==0.9.4 # homeassistant.components.nina -pynina==0.1.7 +pynina==0.1.8 # homeassistant.components.nuki pynuki==1.5.2 From 16a1a9333288e5aaf2d580b8c1712f17254b3f51 Mon Sep 17 00:00:00 2001 From: Allen Porter Date: Sat, 9 Apr 2022 23:01:48 -0700 Subject: [PATCH 191/238] Handle expired credentials in reauth in google calendar initialization (#69772) Co-authored-by: Martin Hjelmare --- homeassistant/components/google/__init__.py | 14 ++++- .../components/google/config_flow.py | 2 +- homeassistant/components/google/strings.json | 2 +- .../components/google/translations/en.json | 4 +- tests/components/google/test_init.py | 52 +++++++++++++++++++ 5 files changed, 69 insertions(+), 5 deletions(-) diff --git a/homeassistant/components/google/__init__.py b/homeassistant/components/google/__init__.py index 3df1cf194f0..f6629cb3938 100644 --- a/homeassistant/components/google/__init__.py +++ b/homeassistant/components/google/__init__.py @@ -7,6 +7,7 @@ from datetime import datetime, timedelta import logging from typing import Any +import aiohttp from httplib2.error import ServerNotFoundError from oauth2client.file import Storage import voluptuous as vol @@ -24,7 +25,11 @@ from homeassistant.const import ( CONF_OFFSET, ) from homeassistant.core import HomeAssistant, ServiceCall -from homeassistant.exceptions import ConfigEntryAuthFailed, HomeAssistantError +from homeassistant.exceptions import ( + ConfigEntryAuthFailed, + ConfigEntryNotReady, + HomeAssistantError, +) from homeassistant.helpers import config_entry_oauth2_flow import homeassistant.helpers.config_validation as cv from homeassistant.helpers.dispatcher import async_dispatcher_send @@ -191,7 +196,14 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: if session.token["expires_at"] >= datetime(2070, 1, 1).timestamp(): session.token["expires_in"] = 0 session.token["expires_at"] = datetime.now().timestamp() + try: await session.async_ensure_token_valid() + except aiohttp.ClientResponseError as err: + if 400 <= err.status < 500: + raise ConfigEntryAuthFailed from err + raise ConfigEntryNotReady from err + except aiohttp.ClientError as err: + raise ConfigEntryNotReady from err required_scope = hass.data[DOMAIN][DATA_CONFIG][CONF_CALENDAR_ACCESS].scope if required_scope not in session.token.get("scope", []): diff --git a/homeassistant/components/google/config_flow.py b/homeassistant/components/google/config_flow.py index c70dd83fcae..8bbd2a6c2b1 100644 --- a/homeassistant/components/google/config_flow.py +++ b/homeassistant/components/google/config_flow.py @@ -34,7 +34,7 @@ class OAuth2FlowHandler( return logging.getLogger(__name__) async def async_step_import(self, info: dict[str, Any]) -> FlowResult: - """Import existing auth from Nest.""" + """Import existing auth into a new config entry.""" if self._async_current_entries(): return self.async_abort(reason="single_instance_allowed") implementations = await config_entry_oauth2_flow.async_get_implementations( diff --git a/homeassistant/components/google/strings.json b/homeassistant/components/google/strings.json index 14f020f08fd..e8ec7091030 100644 --- a/homeassistant/components/google/strings.json +++ b/homeassistant/components/google/strings.json @@ -6,7 +6,7 @@ }, "reauth_confirm": { "title": "[%key:common::config_flow::title::reauth%]", - "description": "The Nest integration needs to re-authenticate your account" + "description": "The Google Calendar integration needs to re-authenticate your account" }, "auth": { "title": "Link Google Account" diff --git a/homeassistant/components/google/translations/en.json b/homeassistant/components/google/translations/en.json index 51d1ad9aab8..02c8e6d7029 100644 --- a/homeassistant/components/google/translations/en.json +++ b/homeassistant/components/google/translations/en.json @@ -3,7 +3,7 @@ "abort": { "already_configured": "Account is already configured", "already_in_progress": "Configuration flow is already in progress", - "code_expired": "Authentication code expired, please try again.", + "code_expired": "Authentication code expired or credential setup is invalid, please try again.", "invalid_access_token": "Invalid access token", "missing_configuration": "The component is not configured. Please follow the documentation.", "oauth_error": "Received invalid token data.", @@ -23,7 +23,7 @@ "title": "Pick Authentication Method" }, "reauth_confirm": { - "description": "The Nest integration needs to re-authenticate your account", + "description": "The Google Calendar integration needs to re-authenticate your account", "title": "Reauthenticate Integration" } } diff --git a/tests/components/google/test_init.py b/tests/components/google/test_init.py index 67150de0bcd..85803c3958e 100644 --- a/tests/components/google/test_init.py +++ b/tests/components/google/test_init.py @@ -3,6 +3,7 @@ from __future__ import annotations from collections.abc import Awaitable, Callable import datetime +import http import time from typing import Any from unittest.mock import Mock, call, patch @@ -32,6 +33,8 @@ from .conftest import ( from tests.common import MockConfigEntry from tests.test_util.aiohttp import AiohttpClientMocker +EXPIRED_TOKEN_TIMESTAMP = datetime.datetime(2022, 4, 8).timestamp() + # Typing helpers HassApi = Callable[[], Awaitable[dict[str, Any]]] @@ -505,3 +508,52 @@ async def test_invalid_token_expiry_in_config_entry( assert entries[0].state is ConfigEntryState.LOADED assert entries[0].data["token"]["access_token"] == "some-updated-token" assert entries[0].data["token"]["expires_in"] == expires_in + + +@pytest.mark.parametrize("config_entry_token_expiry", [EXPIRED_TOKEN_TIMESTAMP]) +async def test_expired_token_refresh_internal_error( + hass: HomeAssistant, + component_setup: ComponentSetup, + setup_config_entry: MockConfigEntry, + aioclient_mock: AiohttpClientMocker, +) -> None: + """Generic errors on reauth are treated as a retryable setup error.""" + + aioclient_mock.post( + "https://oauth2.googleapis.com/token", + status=http.HTTPStatus.INTERNAL_SERVER_ERROR, + ) + + assert await component_setup() + + entries = hass.config_entries.async_entries(DOMAIN) + assert len(entries) == 1 + assert entries[0].state is ConfigEntryState.SETUP_RETRY + + +@pytest.mark.parametrize( + "config_entry_token_expiry", + [EXPIRED_TOKEN_TIMESTAMP], +) +async def test_expired_token_requires_reauth( + hass: HomeAssistant, + component_setup: ComponentSetup, + setup_config_entry: MockConfigEntry, + aioclient_mock: AiohttpClientMocker, +) -> None: + """Test case where reauth is required for token that cannot be refreshed.""" + + aioclient_mock.post( + "https://oauth2.googleapis.com/token", + status=http.HTTPStatus.BAD_REQUEST, + ) + + assert await component_setup() + + entries = hass.config_entries.async_entries(DOMAIN) + assert len(entries) == 1 + assert entries[0].state is ConfigEntryState.SETUP_ERROR + + flows = hass.config_entries.flow.async_progress() + assert len(flows) == 1 + assert flows[0]["step_id"] == "reauth_confirm" From 5c4df657b29d279273e4f3ddfe474777a764bf3e Mon Sep 17 00:00:00 2001 From: Allen Porter Date: Sat, 9 Apr 2022 22:41:18 -0700 Subject: [PATCH 192/238] Bump rtsp-to-webrtc to 0.5.1 (#69776) --- homeassistant/components/rtsp_to_webrtc/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/rtsp_to_webrtc/manifest.json b/homeassistant/components/rtsp_to_webrtc/manifest.json index bf11e7c00bc..4e077c74a83 100644 --- a/homeassistant/components/rtsp_to_webrtc/manifest.json +++ b/homeassistant/components/rtsp_to_webrtc/manifest.json @@ -3,7 +3,7 @@ "name": "RTSPtoWebRTC", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/rtsp_to_webrtc", - "requirements": ["rtsp-to-webrtc==0.5.0"], + "requirements": ["rtsp-to-webrtc==0.5.1"], "dependencies": ["camera"], "codeowners": ["@allenporter"], "iot_class": "local_push", diff --git a/requirements_all.txt b/requirements_all.txt index 2c8e090e036..311f4fa8c6b 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -2082,7 +2082,7 @@ rova==0.3.0 rpi-bad-power==0.1.0 # homeassistant.components.rtsp_to_webrtc -rtsp-to-webrtc==0.5.0 +rtsp-to-webrtc==0.5.1 # homeassistant.components.russound_rnet russound==0.1.9 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 245d6ec4bdb..ce95115282e 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -1351,7 +1351,7 @@ roonapi==0.0.38 rpi-bad-power==0.1.0 # homeassistant.components.rtsp_to_webrtc -rtsp-to-webrtc==0.5.0 +rtsp-to-webrtc==0.5.1 # homeassistant.components.yamaha rxv==0.7.0 From 506f8c1d94b3f16896ba44b5163139fdcb537955 Mon Sep 17 00:00:00 2001 From: Michael Davie Date: Sun, 10 Apr 2022 13:57:56 -0400 Subject: [PATCH 193/238] Bump slixmpp to 1.8.2 (#69794) --- homeassistant/components/xmpp/manifest.json | 2 +- requirements_all.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/xmpp/manifest.json b/homeassistant/components/xmpp/manifest.json index d5b08b6bc23..5fc8d6e50a2 100644 --- a/homeassistant/components/xmpp/manifest.json +++ b/homeassistant/components/xmpp/manifest.json @@ -2,7 +2,7 @@ "domain": "xmpp", "name": "Jabber (XMPP)", "documentation": "https://www.home-assistant.io/integrations/xmpp", - "requirements": ["slixmpp==1.8.0.1"], + "requirements": ["slixmpp==1.8.2"], "codeowners": ["@fabaff", "@flowolf"], "iot_class": "cloud_push", "loggers": ["pyasn1", "slixmpp"] diff --git a/requirements_all.txt b/requirements_all.txt index 311f4fa8c6b..cb1db2006e3 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -2155,7 +2155,7 @@ skybellpy==0.6.3 slackclient==2.5.0 # homeassistant.components.xmpp -slixmpp==1.8.0.1 +slixmpp==1.8.2 # homeassistant.components.smart_meter_texas smart-meter-texas==0.4.7 From 2871ac4f8fd8b97241a844751dc1851c66ae0f37 Mon Sep 17 00:00:00 2001 From: rikroe <42204099+rikroe@users.noreply.github.com> Date: Sun, 10 Apr 2022 18:40:03 +0200 Subject: [PATCH 194/238] Fix converting (value, unit) tuples if value is None (#69802) Co-authored-by: rikroe --- .../components/bmw_connected_drive/sensor.py | 31 ++++++++++--------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/homeassistant/components/bmw_connected_drive/sensor.py b/homeassistant/components/bmw_connected_drive/sensor.py index f21c1b851ca..8b21a10a39f 100644 --- a/homeassistant/components/bmw_connected_drive/sensor.py +++ b/homeassistant/components/bmw_connected_drive/sensor.py @@ -46,6 +46,17 @@ class BMWSensorEntityDescription(SensorEntityDescription): value: Callable = lambda x, y: x +def convert_and_round( + state: tuple, + converter: Callable[[float | None, str], float], + precision: int, +) -> float | None: + """Safely convert and round a value from a Tuple[value, unit].""" + if state[0] is None: + return None + return round(converter(state[0], UNIT_MAP.get(state[1], state[1])), precision) + + SENSOR_TYPES: dict[str, BMWSensorEntityDescription] = { # --- Generic --- "charging_start_time": BMWSensorEntityDescription( @@ -78,45 +89,35 @@ SENSOR_TYPES: dict[str, BMWSensorEntityDescription] = { icon="mdi:speedometer", unit_metric=LENGTH_KILOMETERS, unit_imperial=LENGTH_MILES, - value=lambda x, hass: round( - hass.config.units.length(x[0], UNIT_MAP.get(x[1], x[1])), 2 - ), + value=lambda x, hass: convert_and_round(x, hass.config.units.length, 2), ), "remaining_range_total": BMWSensorEntityDescription( key="remaining_range_total", icon="mdi:map-marker-distance", unit_metric=LENGTH_KILOMETERS, unit_imperial=LENGTH_MILES, - value=lambda x, hass: round( - hass.config.units.length(x[0], UNIT_MAP.get(x[1], x[1])), 2 - ), + value=lambda x, hass: convert_and_round(x, hass.config.units.length, 2), ), "remaining_range_electric": BMWSensorEntityDescription( key="remaining_range_electric", icon="mdi:map-marker-distance", unit_metric=LENGTH_KILOMETERS, unit_imperial=LENGTH_MILES, - value=lambda x, hass: round( - hass.config.units.length(x[0], UNIT_MAP.get(x[1], x[1])), 2 - ), + value=lambda x, hass: convert_and_round(x, hass.config.units.length, 2), ), "remaining_range_fuel": BMWSensorEntityDescription( key="remaining_range_fuel", icon="mdi:map-marker-distance", unit_metric=LENGTH_KILOMETERS, unit_imperial=LENGTH_MILES, - value=lambda x, hass: round( - hass.config.units.length(x[0], UNIT_MAP.get(x[1], x[1])), 2 - ), + value=lambda x, hass: convert_and_round(x, hass.config.units.length, 2), ), "remaining_fuel": BMWSensorEntityDescription( key="remaining_fuel", icon="mdi:gas-station", unit_metric=VOLUME_LITERS, unit_imperial=VOLUME_GALLONS, - value=lambda x, hass: round( - hass.config.units.volume(x[0], UNIT_MAP.get(x[1], x[1])), 2 - ), + value=lambda x, hass: convert_and_round(x, hass.config.units.volume, 2), ), "fuel_percent": BMWSensorEntityDescription( key="fuel_percent", From 5d4c1d9fe4e77705bb226a0a15f9b014bec5f69f Mon Sep 17 00:00:00 2001 From: Raman Gupta <7243222+raman325@users.noreply.github.com> Date: Sun, 10 Apr 2022 17:07:28 -0400 Subject: [PATCH 195/238] Reduce API limit for tomorrow.io (#69818) --- homeassistant/components/tomorrowio/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/components/tomorrowio/const.py b/homeassistant/components/tomorrowio/const.py index 5f49700e511..b09cbf8adc0 100644 --- a/homeassistant/components/tomorrowio/const.py +++ b/homeassistant/components/tomorrowio/const.py @@ -29,7 +29,7 @@ INTEGRATION_NAME = "Tomorrow.io" DEFAULT_NAME = INTEGRATION_NAME ATTRIBUTION = "Powered by Tomorrow.io" -MAX_REQUESTS_PER_DAY = 500 +MAX_REQUESTS_PER_DAY = 100 CLEAR_CONDITIONS = {"night": ATTR_CONDITION_CLEAR_NIGHT, "day": ATTR_CONDITION_SUNNY} From 8e3e6efb21747f6d70320dea4df77fe4cff43012 Mon Sep 17 00:00:00 2001 From: jjlawren Date: Mon, 11 Apr 2022 00:29:43 -0500 Subject: [PATCH 196/238] Speed up Plex playback for multiple videos (#69821) --- homeassistant/components/plex/services.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/plex/services.py b/homeassistant/components/plex/services.py index 8cf714b8823..06ecc081c9b 100644 --- a/homeassistant/components/plex/services.py +++ b/homeassistant/components/plex/services.py @@ -173,7 +173,9 @@ def process_plex_payload( media = plex_server.lookup_media(content_type, **search_query) if supports_playqueues and (isinstance(media, list) or shuffle): - playqueue = plex_server.create_playqueue(media, shuffle=shuffle) + playqueue = plex_server.create_playqueue( + media, includeRelated=0, shuffle=shuffle + ) return PlexMediaSearchResult(playqueue, content) return PlexMediaSearchResult(media, content) From 02eec73644c4460cd0979a1aa28a410a53215f7b Mon Sep 17 00:00:00 2001 From: jjlawren Date: Mon, 11 Apr 2022 00:25:19 -0500 Subject: [PATCH 197/238] Retry on more Plex connection failures during startup (#69822) --- homeassistant/components/plex/__init__.py | 3 ++- tests/components/plex/test_init.py | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/plex/__init__.py b/homeassistant/components/plex/__init__.py index e0a84ced16f..4ca83d98242 100644 --- a/homeassistant/components/plex/__init__.py +++ b/homeassistant/components/plex/__init__.py @@ -159,7 +159,8 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: entry.data[CONF_SERVER], error, ) - return False + # Retry as setups behind a proxy can return transient 404 or 502 errors + raise ConfigEntryNotReady from error _LOGGER.debug( "Connected to: %s (%s)", plex_server.friendly_name, plex_server.url_in_use diff --git a/tests/components/plex/test_init.py b/tests/components/plex/test_init.py index 8e09f702386..bbab50a7bbb 100644 --- a/tests/components/plex/test_init.py +++ b/tests/components/plex/test_init.py @@ -63,7 +63,7 @@ async def test_setup_config_entry_with_error(hass, entry): await hass.async_block_till_done() assert len(hass.config_entries.async_entries(const.DOMAIN)) == 1 - assert entry.state is ConfigEntryState.SETUP_ERROR + assert entry.state is ConfigEntryState.SETUP_RETRY async def test_setup_with_insecure_config_entry(hass, entry, setup_plex_server): From 3e926592607a4d16ada4eca981afd78a76c217d9 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Sun, 10 Apr 2022 19:58:30 -1000 Subject: [PATCH 198/238] Downgrade av to 8.1.0 to fix memory leak (#69833) --- homeassistant/components/generic/manifest.json | 2 +- homeassistant/components/stream/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/generic/manifest.json b/homeassistant/components/generic/manifest.json index 66efa0925c5..7d3841dcf47 100644 --- a/homeassistant/components/generic/manifest.json +++ b/homeassistant/components/generic/manifest.json @@ -2,7 +2,7 @@ "domain": "generic", "name": "Generic Camera", "config_flow": true, - "requirements": ["av==9.0.0", "pillow==9.0.1"], + "requirements": ["av==8.1.0", "pillow==9.0.1"], "documentation": "https://www.home-assistant.io/integrations/generic", "codeowners": ["@davet2001"], "iot_class": "local_push" diff --git a/homeassistant/components/stream/manifest.json b/homeassistant/components/stream/manifest.json index f2c56d0af80..d8fd035a5ab 100644 --- a/homeassistant/components/stream/manifest.json +++ b/homeassistant/components/stream/manifest.json @@ -2,7 +2,7 @@ "domain": "stream", "name": "Stream", "documentation": "https://www.home-assistant.io/integrations/stream", - "requirements": ["PyTurboJPEG==1.6.6", "av==9.0.0"], + "requirements": ["PyTurboJPEG==1.6.6", "av==8.1.0"], "dependencies": ["http"], "codeowners": ["@hunterjm", "@uvjustin", "@allenporter"], "quality_scale": "internal", diff --git a/requirements_all.txt b/requirements_all.txt index cb1db2006e3..44ede223ea9 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -349,7 +349,7 @@ aurorapy==0.2.6 # homeassistant.components.generic # homeassistant.components.stream -av==9.0.0 +av==8.1.0 # homeassistant.components.avea # avea==1.5.1 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index ce95115282e..9e2f826ae1e 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -279,7 +279,7 @@ aurorapy==0.2.6 # homeassistant.components.generic # homeassistant.components.stream -av==9.0.0 +av==8.1.0 # homeassistant.components.axis axis==44 From 2fad42ce06ed7913e8de86a39e729b1248c4edef Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 10 Apr 2022 22:59:28 -0700 Subject: [PATCH 199/238] Bumped version to 2022.4.2 --- homeassistant/const.py | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/const.py b/homeassistant/const.py index b84dee7274c..9007b681b7b 100644 --- a/homeassistant/const.py +++ b/homeassistant/const.py @@ -7,7 +7,7 @@ from .backports.enum import StrEnum MAJOR_VERSION: Final = 2022 MINOR_VERSION: Final = 4 -PATCH_VERSION: Final = "1" +PATCH_VERSION: Final = "2" __short_version__: Final = f"{MAJOR_VERSION}.{MINOR_VERSION}" __version__: Final = f"{__short_version__}.{PATCH_VERSION}" REQUIRED_PYTHON_VER: Final[tuple[int, int, int]] = (3, 9, 0) diff --git a/setup.cfg b/setup.cfg index 2420a7607d0..2959c5e4dee 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = homeassistant -version = 2022.4.1 +version = 2022.4.2 author = The Home Assistant Authors author_email = hello@home-assistant.io license = Apache-2.0 From f6aead6773bbbf135ab74391a816b7ae6832662b Mon Sep 17 00:00:00 2001 From: Dave T <17680170+davet2001@users.noreply.github.com> Date: Sat, 9 Apr 2022 06:59:54 +0100 Subject: [PATCH 200/238] Don't test config on yaml import for generic camera (#69714) --- .../components/generic/config_flow.py | 24 +++----------- tests/components/generic/test_camera.py | 24 +++++++------- tests/components/generic/test_config_flow.py | 31 ++----------------- 3 files changed, 20 insertions(+), 59 deletions(-) diff --git a/homeassistant/components/generic/config_flow.py b/homeassistant/components/generic/config_flow.py index ac178e12956..c6310d22dce 100644 --- a/homeassistant/components/generic/config_flow.py +++ b/homeassistant/components/generic/config_flow.py @@ -324,16 +324,7 @@ class GenericIPCamConfigFlow(ConfigFlow, domain=DOMAIN): # abort if we've already got this one. if self.check_for_existing(import_config): return self.async_abort(reason="already_exists") - errors, still_format = await async_test_still(self.hass, import_config) - if errors.get(CONF_STILL_IMAGE_URL) == "template_error": - _LOGGER.warning( - "Could not render template, but it could be that " - "referenced entities are still initialising. " - "Continuing assuming that imported YAML template is valid" - ) - errors.pop(CONF_STILL_IMAGE_URL) - still_format = import_config.get(CONF_CONTENT_TYPE, "image/jpeg") - errors = errors | await async_test_stream(self.hass, import_config) + # Don't bother testing the still or stream details on yaml import. still_url = import_config.get(CONF_STILL_IMAGE_URL) stream_url = import_config.get(CONF_STREAM_SOURCE) name = import_config.get( @@ -341,15 +332,10 @@ class GenericIPCamConfigFlow(ConfigFlow, domain=DOMAIN): ) if CONF_LIMIT_REFETCH_TO_URL_CHANGE not in import_config: import_config[CONF_LIMIT_REFETCH_TO_URL_CHANGE] = False - if not errors: - import_config[CONF_CONTENT_TYPE] = still_format - await self.async_set_unique_id(self.flow_id) - return self.async_create_entry(title=name, data={}, options=import_config) - _LOGGER.error( - "Error importing generic IP camera platform config: unexpected error '%s'", - list(errors.values()), - ) - return self.async_abort(reason="unknown") + still_format = import_config.get(CONF_CONTENT_TYPE, "image/jpeg") + import_config[CONF_CONTENT_TYPE] = still_format + await self.async_set_unique_id(self.flow_id) + return self.async_create_entry(title=name, data={}, options=import_config) class GenericOptionsFlowHandler(OptionsFlow): diff --git a/tests/components/generic/test_camera.py b/tests/components/generic/test_camera.py index 5a96391e10e..6e8b804f848 100644 --- a/tests/components/generic/test_camera.py +++ b/tests/components/generic/test_camera.py @@ -43,12 +43,12 @@ async def test_fetching_url(hass, hass_client, fakeimgbytes_png, mock_av_open): resp = await client.get("/api/camera_proxy/camera.config_test") assert resp.status == HTTPStatus.OK - assert respx.calls.call_count == 2 + assert respx.calls.call_count == 1 body = await resp.read() assert body == fakeimgbytes_png resp = await client.get("/api/camera_proxy/camera.config_test") - assert respx.calls.call_count == 3 + assert respx.calls.call_count == 2 @respx.mock @@ -143,19 +143,19 @@ async def test_limit_refetch(hass, hass_client, fakeimgbytes_png, fakeimgbytes_j ): resp = await client.get("/api/camera_proxy/camera.config_test") - assert respx.calls.call_count == 2 + assert respx.calls.call_count == 1 assert resp.status == HTTPStatus.OK hass.states.async_set("sensor.temp", "10") resp = await client.get("/api/camera_proxy/camera.config_test") - assert respx.calls.call_count == 3 + assert respx.calls.call_count == 2 assert resp.status == HTTPStatus.OK body = await resp.read() assert body == fakeimgbytes_png resp = await client.get("/api/camera_proxy/camera.config_test") - assert respx.calls.call_count == 3 + assert respx.calls.call_count == 2 assert resp.status == HTTPStatus.OK body = await resp.read() assert body == fakeimgbytes_png @@ -164,7 +164,7 @@ async def test_limit_refetch(hass, hass_client, fakeimgbytes_png, fakeimgbytes_j # Url change = fetch new image resp = await client.get("/api/camera_proxy/camera.config_test") - assert respx.calls.call_count == 4 + assert respx.calls.call_count == 3 assert resp.status == HTTPStatus.OK body = await resp.read() assert body == fakeimgbytes_jpg @@ -172,7 +172,7 @@ async def test_limit_refetch(hass, hass_client, fakeimgbytes_png, fakeimgbytes_j # Cause a template render error hass.states.async_remove("sensor.temp") resp = await client.get("/api/camera_proxy/camera.config_test") - assert respx.calls.call_count == 4 + assert respx.calls.call_count == 3 assert resp.status == HTTPStatus.OK body = await resp.read() assert body == fakeimgbytes_jpg @@ -392,14 +392,14 @@ async def test_camera_content_type( client = await hass_client() resp_1 = await client.get("/api/camera_proxy/camera.config_test_svg") - assert respx.calls.call_count == 3 + assert respx.calls.call_count == 1 assert resp_1.status == HTTPStatus.OK assert resp_1.content_type == "image/svg+xml" body = await resp_1.read() assert body == fakeimgbytes_svg resp_2 = await client.get("/api/camera_proxy/camera.config_test_jpg") - assert respx.calls.call_count == 4 + assert respx.calls.call_count == 2 assert resp_2.status == HTTPStatus.OK assert resp_2.content_type == "image/jpeg" body = await resp_2.read() @@ -432,7 +432,7 @@ async def test_timeout_cancelled(hass, hass_client, fakeimgbytes_png, fakeimgbyt resp = await client.get("/api/camera_proxy/camera.config_test") assert resp.status == HTTPStatus.OK - assert respx.calls.call_count == 2 + assert respx.calls.call_count == 1 assert await resp.read() == fakeimgbytes_png respx.get("http://example.com").respond(stream=fakeimgbytes_jpg) @@ -442,7 +442,7 @@ async def test_timeout_cancelled(hass, hass_client, fakeimgbytes_png, fakeimgbyt side_effect=asyncio.CancelledError(), ): resp = await client.get("/api/camera_proxy/camera.config_test") - assert respx.calls.call_count == 2 + assert respx.calls.call_count == 1 assert resp.status == HTTPStatus.INTERNAL_SERVER_ERROR respx.get("http://example.com").side_effect = [ @@ -450,7 +450,7 @@ async def test_timeout_cancelled(hass, hass_client, fakeimgbytes_png, fakeimgbyt httpx.TimeoutException, ] - for total_calls in range(3, 5): + for total_calls in range(2, 4): resp = await client.get("/api/camera_proxy/camera.config_test") assert respx.calls.call_count == total_calls assert resp.status == HTTPStatus.OK diff --git a/tests/components/generic/test_config_flow.py b/tests/components/generic/test_config_flow.py index feddb5f3fca..aab04dae203 100644 --- a/tests/components/generic/test_config_flow.py +++ b/tests/components/generic/test_config_flow.py @@ -168,8 +168,9 @@ async def test_form_only_still_sample(hass, user_flow, image_file): async def test_form_rtsp_mode(hass, fakeimg_png, mock_av_open, user_flow): """Test we complete ok if the user enters a stream url.""" with mock_av_open as mock_setup: - data = TESTDATA + data = TESTDATA.copy() data[CONF_RTSP_TRANSPORT] = "tcp" + data[CONF_STREAM_SOURCE] = "rtsp://127.0.0.1/testurl/2" result2 = await hass.config_entries.flow.async_configure( user_flow["flow_id"], data ) @@ -179,7 +180,7 @@ async def test_form_rtsp_mode(hass, fakeimg_png, mock_av_open, user_flow): assert result2["options"] == { CONF_STILL_IMAGE_URL: "http://127.0.0.1/testurl/1", CONF_AUTHENTICATION: HTTP_BASIC_AUTHENTICATION, - CONF_STREAM_SOURCE: "http://127.0.0.1/testurl/2", + CONF_STREAM_SOURCE: "rtsp://127.0.0.1/testurl/2", CONF_RTSP_TRANSPORT: "tcp", CONF_USERNAME: "fred_flintstone", CONF_PASSWORD: "bambam", @@ -217,7 +218,6 @@ async def test_form_only_stream(hass, mock_av_open, fakeimgbytes_jpg): assert result3["options"] == { CONF_AUTHENTICATION: HTTP_BASIC_AUTHENTICATION, CONF_STREAM_SOURCE: "http://127.0.0.1/testurl/2", - CONF_RTSP_TRANSPORT: "tcp", CONF_USERNAME: "fred_flintstone", CONF_PASSWORD: "bambam", CONF_LIMIT_REFETCH_TO_URL_CHANGE: False, @@ -552,31 +552,6 @@ async def test_import(hass, fakeimg_png, mock_av_open): assert result2["type"] == data_entry_flow.RESULT_TYPE_ABORT -@respx.mock -async def test_import_invalid_still_image(hass, mock_av_open): - """Test configuration.yaml import used during migration.""" - respx.get("http://127.0.0.1/testurl/1").respond(stream=b"invalid") - with mock_av_open: - result = await hass.config_entries.flow.async_init( - DOMAIN, context={"source": config_entries.SOURCE_IMPORT}, data=TESTDATA_YAML - ) - assert result["type"] == data_entry_flow.RESULT_TYPE_ABORT - assert result["reason"] == "unknown" - - -@respx.mock -async def test_import_other_error(hass, fakeimgbytes_png): - """Test that non-specific import errors are raised.""" - respx.get("http://127.0.0.1/testurl/1").respond(stream=fakeimgbytes_png) - with patch( - "homeassistant.components.generic.config_flow.av.open", - side_effect=OSError("other error"), - ), pytest.raises(OSError): - await hass.config_entries.flow.async_init( - DOMAIN, context={"source": config_entries.SOURCE_IMPORT}, data=TESTDATA_YAML - ) - - # These above can be deleted after deprecation period is finished. From 094c185dee48aca112b6ed3b3ded2337b0578fbd Mon Sep 17 00:00:00 2001 From: Marvin Wichmann Date: Mon, 11 Apr 2022 19:49:18 +0200 Subject: [PATCH 201/238] Update xknx to 0.20.2 (RC) (#69859) --- homeassistant/components/knx/climate.py | 6 ------ homeassistant/components/knx/knx_entity.py | 3 ++- homeassistant/components/knx/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 5 files changed, 5 insertions(+), 10 deletions(-) diff --git a/homeassistant/components/knx/climate.py b/homeassistant/components/knx/climate.py index 63fbb170ca7..c9ec825bebc 100644 --- a/homeassistant/components/knx/climate.py +++ b/homeassistant/components/knx/climate.py @@ -296,9 +296,3 @@ class KNXClimate(KnxEntity, ClimateEntity): await super().async_added_to_hass() if self._device.mode is not None: self._device.mode.register_device_updated_cb(self.after_update_callback) - - async def async_will_remove_from_hass(self) -> None: - """Disconnect device object when removed.""" - await super().async_will_remove_from_hass() - if self._device.mode is not None: - self._device.mode.unregister_device_updated_cb(self.after_update_callback) diff --git a/homeassistant/components/knx/knx_entity.py b/homeassistant/components/knx/knx_entity.py index 5f2e14d1466..bd5ae199ccc 100644 --- a/homeassistant/components/knx/knx_entity.py +++ b/homeassistant/components/knx/knx_entity.py @@ -45,4 +45,5 @@ class KnxEntity(Entity): async def async_will_remove_from_hass(self) -> None: """Disconnect device object when removed.""" - self._device.unregister_device_updated_cb(self.after_update_callback) + # will also remove callbacks + self._device.shutdown() diff --git a/homeassistant/components/knx/manifest.json b/homeassistant/components/knx/manifest.json index 604821ae275..0fdabcec9fb 100644 --- a/homeassistant/components/knx/manifest.json +++ b/homeassistant/components/knx/manifest.json @@ -3,7 +3,7 @@ "name": "KNX", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/knx", - "requirements": ["xknx==0.20.1"], + "requirements": ["xknx==0.20.2"], "codeowners": ["@Julius2342", "@farmio", "@marvin-w"], "quality_scale": "silver", "iot_class": "local_push", diff --git a/requirements_all.txt b/requirements_all.txt index 44ede223ea9..2a658b280f9 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -2435,7 +2435,7 @@ xbox-webapi==2.0.11 xboxapi==2.0.1 # homeassistant.components.knx -xknx==0.20.1 +xknx==0.20.2 # homeassistant.components.bluesound # homeassistant.components.fritz diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 9e2f826ae1e..7650bccd4ee 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -1575,7 +1575,7 @@ wolf_smartset==0.1.11 xbox-webapi==2.0.11 # homeassistant.components.knx -xknx==0.20.1 +xknx==0.20.2 # homeassistant.components.bluesound # homeassistant.components.fritz From 85bc863830ebc12fcff9b40e6a2db3d1766fa762 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Sun, 3 Apr 2022 12:39:47 -0600 Subject: [PATCH 202/238] Fix profiler object growth logging test (#69211) --- tests/components/profiler/test_init.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/tests/components/profiler/test_init.py b/tests/components/profiler/test_init.py index 4c88e6170c6..e4a1f5a5f1b 100644 --- a/tests/components/profiler/test_init.py +++ b/tests/components/profiler/test_init.py @@ -94,10 +94,11 @@ async def test_object_growth_logging(hass, caplog): assert hass.services.has_service(DOMAIN, SERVICE_START_LOG_OBJECTS) assert hass.services.has_service(DOMAIN, SERVICE_STOP_LOG_OBJECTS) - await hass.services.async_call( - DOMAIN, SERVICE_START_LOG_OBJECTS, {CONF_SCAN_INTERVAL: 10} - ) - await hass.async_block_till_done() + with patch("homeassistant.components.profiler.objgraph.growth"): + await hass.services.async_call( + DOMAIN, SERVICE_START_LOG_OBJECTS, {CONF_SCAN_INTERVAL: 10} + ) + await hass.async_block_till_done() assert "Growth" in caplog.text caplog.clear() From 8bd07bcff2733968622abcf622da96b4c31a792d Mon Sep 17 00:00:00 2001 From: Raj Laud <50647620+rajlaud@users.noreply.github.com> Date: Tue, 12 Apr 2022 13:08:54 -0400 Subject: [PATCH 203/238] Handle Squeezebox media ids that are not URLs (#69696) --- homeassistant/components/squeezebox/const.py | 1 + homeassistant/components/squeezebox/media_player.py | 12 ++++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/squeezebox/const.py b/homeassistant/components/squeezebox/const.py index 4664bbeaf43..d8b67504397 100644 --- a/homeassistant/components/squeezebox/const.py +++ b/homeassistant/components/squeezebox/const.py @@ -5,3 +5,4 @@ KNOWN_PLAYERS = "known_players" PLAYER_DISCOVERY_UNSUB = "player_discovery_unsub" DISCOVERY_TASK = "discovery_task" DEFAULT_PORT = 9000 +SQUEEZEBOX_SOURCE_STRINGS = ("source:", "wavin:", "spotify:") diff --git a/homeassistant/components/squeezebox/media_player.py b/homeassistant/components/squeezebox/media_player.py index d8a1c29b723..923af6c8c64 100644 --- a/homeassistant/components/squeezebox/media_player.py +++ b/homeassistant/components/squeezebox/media_player.py @@ -63,7 +63,13 @@ from .browse_media import ( library_payload, media_source_content_filter, ) -from .const import DISCOVERY_TASK, DOMAIN, KNOWN_PLAYERS, PLAYER_DISCOVERY_UNSUB +from .const import ( + DISCOVERY_TASK, + DOMAIN, + KNOWN_PLAYERS, + PLAYER_DISCOVERY_UNSUB, + SQUEEZEBOX_SOURCE_STRINGS, +) SERVICE_CALL_METHOD = "call_method" SERVICE_CALL_QUERY = "call_query" @@ -475,7 +481,9 @@ class SqueezeBoxEntity(MediaPlayerEntity): media_id = play_item.url if media_type in MEDIA_TYPE_MUSIC: - media_id = async_process_play_media_url(self.hass, media_id) + if not media_id.startswith(SQUEEZEBOX_SOURCE_STRINGS): + # do not process special squeezebox "source" media ids + media_id = async_process_play_media_url(self.hass, media_id) await self._player.async_load_url(media_id, cmd) return From 49bf1d6bff78e45abcbd8b64721edbe3c9e2b75b Mon Sep 17 00:00:00 2001 From: "David F. Mulcahey" Date: Tue, 12 Apr 2022 01:35:29 -0400 Subject: [PATCH 204/238] Add diagnostics support for ZHA (#69756) --- homeassistant/components/zha/diagnostics.py | 79 +++++++++++++++++++ tests/components/zha/conftest.py | 2 + tests/components/zha/test_diagnostics.py | 86 +++++++++++++++++++++ 3 files changed, 167 insertions(+) create mode 100644 homeassistant/components/zha/diagnostics.py create mode 100644 tests/components/zha/test_diagnostics.py diff --git a/homeassistant/components/zha/diagnostics.py b/homeassistant/components/zha/diagnostics.py new file mode 100644 index 00000000000..1a775723b0b --- /dev/null +++ b/homeassistant/components/zha/diagnostics.py @@ -0,0 +1,79 @@ +"""Provides diagnostics for ZHA.""" +from __future__ import annotations + +import dataclasses +from typing import Any + +import bellows +import pkg_resources +import zigpy +from zigpy.config import CONF_NWK_EXTENDED_PAN_ID +import zigpy_deconz +import zigpy_xbee +import zigpy_zigate +import zigpy_znp + +from homeassistant.components.diagnostics.util import async_redact_data +from homeassistant.config_entries import ConfigEntry +from homeassistant.const import CONF_UNIQUE_ID +from homeassistant.core import HomeAssistant +from homeassistant.helpers import device_registry as dr + +from .core.const import ATTR_IEEE, DATA_ZHA, DATA_ZHA_CONFIG, DATA_ZHA_GATEWAY +from .core.device import ZHADevice +from .core.gateway import ZHAGateway +from .core.helpers import async_get_zha_device + +KEYS_TO_REDACT = { + ATTR_IEEE, + CONF_UNIQUE_ID, + "network_key", + CONF_NWK_EXTENDED_PAN_ID, +} + + +def shallow_asdict(obj: Any) -> dict: + """Return a shallow copy of a dataclass as a dict.""" + if hasattr(obj, "__dataclass_fields__"): + result = {} + + for field in dataclasses.fields(obj): + result[field.name] = shallow_asdict(getattr(obj, field.name)) + + return result + if hasattr(obj, "as_dict"): + return obj.as_dict() + return obj + + +async def async_get_config_entry_diagnostics( + hass: HomeAssistant, config_entry: ConfigEntry +) -> dict: + """Return diagnostics for a config entry.""" + config: dict = hass.data[DATA_ZHA][DATA_ZHA_CONFIG] + gateway: ZHAGateway = hass.data[DATA_ZHA][DATA_ZHA_GATEWAY] + return async_redact_data( + { + "config": config, + "config_entry": config_entry.as_dict(), + "application_state": shallow_asdict(gateway.application_controller.state), + "versions": { + "bellows": bellows.__version__, + "zigpy": zigpy.__version__, + "zigpy_deconz": zigpy_deconz.__version__, + "zigpy_xbee": zigpy_xbee.__version__, + "zigpy_znp": zigpy_znp.__version__, + "zigpy_zigate": zigpy_zigate.__version__, + "zhaquirks": pkg_resources.get_distribution("zha-quirks").version, + }, + }, + KEYS_TO_REDACT, + ) + + +async def async_get_device_diagnostics( + hass: HomeAssistant, config_entry: ConfigEntry, device: dr.DeviceEntry +) -> dict: + """Return diagnostics for a device.""" + zha_device: ZHADevice = await async_get_zha_device(hass, device.id) + return async_redact_data(zha_device.zha_device_info, KEYS_TO_REDACT) diff --git a/tests/components/zha/conftest.py b/tests/components/zha/conftest.py index 0e969b1b0f3..cb562cd5eaa 100644 --- a/tests/components/zha/conftest.py +++ b/tests/components/zha/conftest.py @@ -11,6 +11,7 @@ from zigpy.const import SIG_EP_INPUT, SIG_EP_OUTPUT, SIG_EP_PROFILE, SIG_EP_TYPE import zigpy.device import zigpy.group import zigpy.profiles +from zigpy.state import State import zigpy.types import zigpy.zdo.types as zdo_t @@ -54,6 +55,7 @@ def zigpy_app_controller(): app.ieee.return_value = zigpy.types.EUI64.convert("00:15:8d:00:02:32:4f:32") type(app).nwk = PropertyMock(return_value=zigpy.types.NWK(0x0000)) type(app).devices = PropertyMock(return_value={}) + type(app).state = PropertyMock(return_value=State()) return app diff --git a/tests/components/zha/test_diagnostics.py b/tests/components/zha/test_diagnostics.py new file mode 100644 index 00000000000..804b6d73316 --- /dev/null +++ b/tests/components/zha/test_diagnostics.py @@ -0,0 +1,86 @@ +"""Tests for the diagnostics data provided by the ESPHome integration.""" + + +import pytest +import zigpy.profiles.zha as zha +import zigpy.zcl.clusters.security as security + +from homeassistant.components.diagnostics.const import REDACTED +from homeassistant.components.zha.core.device import ZHADevice +from homeassistant.components.zha.diagnostics import KEYS_TO_REDACT +from homeassistant.core import HomeAssistant +from homeassistant.helpers.device_registry import async_get + +from .conftest import SIG_EP_INPUT, SIG_EP_OUTPUT, SIG_EP_PROFILE, SIG_EP_TYPE + +from tests.components.diagnostics import ( + get_diagnostics_for_config_entry, + get_diagnostics_for_device, +) + +CONFIG_ENTRY_DIAGNOSTICS_KEYS = [ + "config", + "config_entry", + "application_state", + "versions", +] + + +@pytest.fixture +def zigpy_device(zigpy_device_mock): + """Device tracker zigpy device.""" + endpoints = { + 1: { + SIG_EP_INPUT: [security.IasAce.cluster_id], + SIG_EP_OUTPUT: [], + SIG_EP_TYPE: zha.DeviceType.IAS_ANCILLARY_CONTROL, + SIG_EP_PROFILE: zha.PROFILE_ID, + } + } + return zigpy_device_mock( + endpoints, node_descriptor=b"\x02@\x8c\x02\x10RR\x00\x00\x00R\x00\x00" + ) + + +async def test_diagnostics_for_config_entry( + hass: HomeAssistant, + hass_client, + config_entry, + zha_device_joined, + zigpy_device, +): + """Test diagnostics for config entry.""" + await zha_device_joined(zigpy_device) + diagnostics_data = await get_diagnostics_for_config_entry( + hass, hass_client, config_entry + ) + assert diagnostics_data + for key in CONFIG_ENTRY_DIAGNOSTICS_KEYS: + assert key in diagnostics_data + assert diagnostics_data[key] is not None + + +async def test_diagnostics_for_device( + hass: HomeAssistant, + hass_client, + config_entry, + zha_device_joined, + zigpy_device, +): + """Test diagnostics for device.""" + + zha_device: ZHADevice = await zha_device_joined(zigpy_device) + dev_reg = async_get(hass) + device = dev_reg.async_get_device({("zha", str(zha_device.ieee))}) + assert device + diagnostics_data = await get_diagnostics_for_device( + hass, hass_client, config_entry, device + ) + assert diagnostics_data + device_info: dict = zha_device.zha_device_info + for key, value in device_info.items(): + assert key in diagnostics_data + if key not in KEYS_TO_REDACT: + assert key in diagnostics_data + else: + assert diagnostics_data[key] == REDACTED From fd8fb59f7a2c323ee0a19cbb4457f255ee45f004 Mon Sep 17 00:00:00 2001 From: Guido Schmitz Date: Tue, 12 Apr 2022 19:07:17 +0200 Subject: [PATCH 205/238] Bump devolo-home-control-api to 0.18.1 (#69840) --- .../devolo_home_control/binary_sensor.py | 16 +++++++++------- .../components/devolo_home_control/cover.py | 2 +- .../devolo_home_control/devolo_device.py | 2 +- .../components/devolo_home_control/manifest.json | 2 +- .../components/devolo_home_control/sensor.py | 2 +- .../components/devolo_home_control/siren.py | 4 ++-- .../components/devolo_home_control/switch.py | 6 +++--- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 9 files changed, 20 insertions(+), 18 deletions(-) diff --git a/homeassistant/components/devolo_home_control/binary_sensor.py b/homeassistant/components/devolo_home_control/binary_sensor.py index 645850ee9d7..a6b18c2b312 100644 --- a/homeassistant/components/devolo_home_control/binary_sensor.py +++ b/homeassistant/components/devolo_home_control/binary_sensor.py @@ -66,9 +66,9 @@ class DevoloBinaryDeviceEntity(DevoloDeviceEntity, BinarySensorEntity): self, homecontrol: HomeControl, device_instance: Zwave, element_uid: str ) -> None: """Initialize a devolo binary sensor.""" - self._binary_sensor_property = device_instance.binary_sensor_property.get( + self._binary_sensor_property = device_instance.binary_sensor_property[ element_uid - ) + ] super().__init__( homecontrol=homecontrol, @@ -82,10 +82,12 @@ class DevoloBinaryDeviceEntity(DevoloDeviceEntity, BinarySensorEntity): ) if self._attr_device_class is None: - if device_instance.binary_sensor_property.get(element_uid).sub_type != "": - self._attr_name += f" {device_instance.binary_sensor_property.get(element_uid).sub_type}" + if device_instance.binary_sensor_property[element_uid].sub_type != "": + self._attr_name += ( + f" {device_instance.binary_sensor_property[element_uid].sub_type}" + ) else: - self._attr_name += f" {device_instance.binary_sensor_property.get(element_uid).sensor_type}" + self._attr_name += f" {device_instance.binary_sensor_property[element_uid].sensor_type}" self._value = self._binary_sensor_property.state @@ -114,9 +116,9 @@ class DevoloRemoteControl(DevoloDeviceEntity, BinarySensorEntity): key: int, ) -> None: """Initialize a devolo remote control.""" - self._remote_control_property = device_instance.remote_control_property.get( + self._remote_control_property = device_instance.remote_control_property[ element_uid - ) + ] super().__init__( homecontrol=homecontrol, diff --git a/homeassistant/components/devolo_home_control/cover.py b/homeassistant/components/devolo_home_control/cover.py index b8aec44133b..bdb42969a28 100644 --- a/homeassistant/components/devolo_home_control/cover.py +++ b/homeassistant/components/devolo_home_control/cover.py @@ -63,7 +63,7 @@ class DevoloCoverDeviceEntity(DevoloMultiLevelSwitchDeviceEntity, CoverEntity): @property def current_cover_position(self) -> int: """Return the current position. 0 is closed. 100 is open.""" - return self._value + return int(self._value) @property def is_closed(self) -> bool: diff --git a/homeassistant/components/devolo_home_control/devolo_device.py b/homeassistant/components/devolo_home_control/devolo_device.py index f4f2432aa6e..b3cb68098e1 100644 --- a/homeassistant/components/devolo_home_control/devolo_device.py +++ b/homeassistant/components/devolo_home_control/devolo_device.py @@ -46,7 +46,7 @@ class DevoloDeviceEntity(Entity): self.subscriber: Subscriber | None = None self.sync_callback = self._sync - self._value: int + self._value: float async def async_added_to_hass(self) -> None: """Call when entity is added to hass.""" diff --git a/homeassistant/components/devolo_home_control/manifest.json b/homeassistant/components/devolo_home_control/manifest.json index e9076e3d3da..75cca12d99e 100644 --- a/homeassistant/components/devolo_home_control/manifest.json +++ b/homeassistant/components/devolo_home_control/manifest.json @@ -2,7 +2,7 @@ "domain": "devolo_home_control", "name": "devolo Home Control", "documentation": "https://www.home-assistant.io/integrations/devolo_home_control", - "requirements": ["devolo-home-control-api==0.17.4"], + "requirements": ["devolo-home-control-api==0.18.1"], "after_dependencies": ["zeroconf"], "config_flow": true, "codeowners": ["@2Fake", "@Shutgun"], diff --git a/homeassistant/components/devolo_home_control/sensor.py b/homeassistant/components/devolo_home_control/sensor.py index 446f41a646b..2d023d23e2d 100644 --- a/homeassistant/components/devolo_home_control/sensor.py +++ b/homeassistant/components/devolo_home_control/sensor.py @@ -83,7 +83,7 @@ class DevoloMultiLevelDeviceEntity(DevoloDeviceEntity, SensorEntity): """Abstract representation of a multi level sensor within devolo Home Control.""" @property - def native_value(self) -> int: + def native_value(self) -> float: """Return the state of the sensor.""" return self._value diff --git a/homeassistant/components/devolo_home_control/siren.py b/homeassistant/components/devolo_home_control/siren.py index ab86dc78032..36a3f82ca5f 100644 --- a/homeassistant/components/devolo_home_control/siren.py +++ b/homeassistant/components/devolo_home_control/siren.py @@ -54,8 +54,8 @@ class DevoloSirenDeviceEntity(DevoloMultiLevelSwitchDeviceEntity, SirenEntity): ) self._attr_available_tones = [ *range( - self._multi_level_switch_property.min, - self._multi_level_switch_property.max + 1, + int(self._multi_level_switch_property.min), + int(self._multi_level_switch_property.max) + 1, ) ] self._attr_supported_features = ( diff --git a/homeassistant/components/devolo_home_control/switch.py b/homeassistant/components/devolo_home_control/switch.py index 4896d66b805..24b1d3545de 100644 --- a/homeassistant/components/devolo_home_control/switch.py +++ b/homeassistant/components/devolo_home_control/switch.py @@ -50,9 +50,9 @@ class DevoloSwitch(DevoloDeviceEntity, SwitchEntity): device_instance=device_instance, element_uid=element_uid, ) - self._binary_switch_property = self._device_instance.binary_switch_property.get( - self._attr_unique_id - ) + self._binary_switch_property = self._device_instance.binary_switch_property[ + self._attr_unique_id # type: ignore[index] + ] self._attr_is_on = self._binary_switch_property.state def turn_on(self, **kwargs: Any) -> None: diff --git a/requirements_all.txt b/requirements_all.txt index 2a658b280f9..94c8dafe435 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -530,7 +530,7 @@ deluge-client==1.7.1 denonavr==0.10.10 # homeassistant.components.devolo_home_control -devolo-home-control-api==0.17.4 +devolo-home-control-api==0.18.1 # homeassistant.components.devolo_home_network devolo-plc-api==0.7.1 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 7650bccd4ee..fe6bc5a5f16 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -385,7 +385,7 @@ deluge-client==1.7.1 denonavr==0.10.10 # homeassistant.components.devolo_home_control -devolo-home-control-api==0.17.4 +devolo-home-control-api==0.18.1 # homeassistant.components.devolo_home_network devolo-plc-api==0.7.1 From 71fb2d09b7f6120759bef00db5908d2961d32af0 Mon Sep 17 00:00:00 2001 From: Mick Vleeshouwer Date: Mon, 11 Apr 2022 12:18:31 -0700 Subject: [PATCH 206/238] Fix #69694 (#69850) --- homeassistant/components/overkiz/select.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/homeassistant/components/overkiz/select.py b/homeassistant/components/overkiz/select.py index c097b04d4eb..74d3b3ba282 100644 --- a/homeassistant/components/overkiz/select.py +++ b/homeassistant/components/overkiz/select.py @@ -39,8 +39,7 @@ def _select_option_open_closed_pedestrian( OverkizCommandParam.CLOSED: OverkizCommand.CLOSE, OverkizCommandParam.OPEN: OverkizCommand.OPEN, OverkizCommandParam.PEDESTRIAN: OverkizCommand.SET_PEDESTRIAN_POSITION, - }[OverkizCommandParam(option)], - None, + }[OverkizCommandParam(option)] ) From aeb8dc2c077d1e57bcc76daca33fb1a9fcc6a241 Mon Sep 17 00:00:00 2001 From: Allen Porter Date: Mon, 11 Apr 2022 11:02:22 -0700 Subject: [PATCH 207/238] Fix google calendar timestamp out of range (#69863) --- homeassistant/components/google/__init__.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/google/__init__.py b/homeassistant/components/google/__init__.py index f6629cb3938..80c6ce2b811 100644 --- a/homeassistant/components/google/__init__.py +++ b/homeassistant/components/google/__init__.py @@ -193,9 +193,11 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: session = config_entry_oauth2_flow.OAuth2Session(hass, entry, implementation) # Force a token refresh to fix a bug where tokens were persisted with # expires_in (relative time delta) and expires_at (absolute time) swapped. - if session.token["expires_at"] >= datetime(2070, 1, 1).timestamp(): + # A google session token typically only lasts a few days between refresh. + now = datetime.now() + if session.token["expires_at"] >= (now + timedelta(days=365)).timestamp(): session.token["expires_in"] = 0 - session.token["expires_at"] = datetime.now().timestamp() + session.token["expires_at"] = now.timestamp() try: await session.async_ensure_token_valid() except aiohttp.ClientResponseError as err: From 9607dfe57c055a10c11b042bbe4a96fb46ebae0d Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Tue, 12 Apr 2022 19:06:25 +0200 Subject: [PATCH 208/238] Use quickplay when casting splash for mediaplayer.turn_on (#69866) --- homeassistant/components/cast/media_player.py | 3 ++- tests/components/cast/test_media_player.py | 11 ++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/cast/media_player.py b/homeassistant/components/cast/media_player.py index 091bde53ae0..8d86edd7ebb 100644 --- a/homeassistant/components/cast/media_player.py +++ b/homeassistant/components/cast/media_player.py @@ -469,7 +469,8 @@ class CastMediaPlayerEntity(CastDevice, MediaPlayerEntity): # The only way we can turn the Chromecast is on is by launching an app if self._chromecast.cast_type == pychromecast.const.CAST_TYPE_CHROMECAST: - self._chromecast.play_media(CAST_SPLASH, "image/png") + app_data = {"media_id": CAST_SPLASH, "media_type": "image/png"} + quick_play(self._chromecast, "default_media_receiver", app_data) else: self._chromecast.start_app(pychromecast.config.APP_MEDIA_RECEIVER) diff --git a/tests/components/cast/test_media_player.py b/tests/components/cast/test_media_player.py index 2e6fafb0287..277acf849cf 100644 --- a/tests/components/cast/test_media_player.py +++ b/tests/components/cast/test_media_player.py @@ -1157,7 +1157,7 @@ async def test_entity_media_content_type(hass: HomeAssistant): assert state.attributes.get("media_content_type") == "movie" -async def test_entity_control(hass: HomeAssistant): +async def test_entity_control(hass: HomeAssistant, quick_play_mock): """Test various device and media controls.""" entity_id = "media_player.speaker" reg = er.async_get(hass) @@ -1200,8 +1200,13 @@ async def test_entity_control(hass: HomeAssistant): # Turn on await common.async_turn_on(hass, entity_id) - chromecast.play_media.assert_called_once_with( - "https://www.home-assistant.io/images/cast/splash.png", "image/png" + quick_play_mock.assert_called_once_with( + chromecast, + "default_media_receiver", + { + "media_id": "https://www.home-assistant.io/images/cast/splash.png", + "media_type": "image/png", + }, ) chromecast.quit_app.reset_mock() From 84d8a7857d58f309c149713c401a05d63a840b48 Mon Sep 17 00:00:00 2001 From: starkillerOG Date: Mon, 11 Apr 2022 18:52:16 +0200 Subject: [PATCH 209/238] Motion blinds fix set absolute position service (#69873) --- homeassistant/components/motion_blinds/cover.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/components/motion_blinds/cover.py b/homeassistant/components/motion_blinds/cover.py index 80f5b4d60c4..115a0e42e01 100644 --- a/homeassistant/components/motion_blinds/cover.py +++ b/homeassistant/components/motion_blinds/cover.py @@ -155,7 +155,7 @@ async def async_setup_entry( platform.async_register_entity_service( SERVICE_SET_ABSOLUTE_POSITION, SET_ABSOLUTE_POSITION_SCHEMA, - SERVICE_SET_ABSOLUTE_POSITION, + "async_set_absolute_position", ) From ba16156a79c4a3c322bd70528536c5deb91be00d Mon Sep 17 00:00:00 2001 From: puddly <32534428+puddly@users.noreply.github.com> Date: Mon, 11 Apr 2022 15:11:51 -0400 Subject: [PATCH 210/238] Bump zigpy to 0.44.2 and and zha-quirks to 0.0.72 (#69879) --- homeassistant/components/zha/manifest.json | 4 ++-- requirements_all.txt | 4 ++-- requirements_test_all.txt | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/homeassistant/components/zha/manifest.json b/homeassistant/components/zha/manifest.json index 14000fac875..da5cb5e4103 100644 --- a/homeassistant/components/zha/manifest.json +++ b/homeassistant/components/zha/manifest.json @@ -7,9 +7,9 @@ "bellows==0.29.0", "pyserial==3.5", "pyserial-asyncio==0.6", - "zha-quirks==0.0.71", + "zha-quirks==0.0.72", "zigpy-deconz==0.15.0", - "zigpy==0.44.1", + "zigpy==0.44.2", "zigpy-xbee==0.14.0", "zigpy-zigate==0.8.0", "zigpy-znp==0.7.0" diff --git a/requirements_all.txt b/requirements_all.txt index 94c8dafe435..a6acfca2798 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -2473,7 +2473,7 @@ zengge==0.2 zeroconf==0.38.4 # homeassistant.components.zha -zha-quirks==0.0.71 +zha-quirks==0.0.72 # homeassistant.components.zhong_hong zhong_hong_hvac==1.0.9 @@ -2494,7 +2494,7 @@ zigpy-zigate==0.8.0 zigpy-znp==0.7.0 # homeassistant.components.zha -zigpy==0.44.1 +zigpy==0.44.2 # homeassistant.components.zoneminder zm-py==0.5.2 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index fe6bc5a5f16..943304931bd 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -1601,7 +1601,7 @@ youless-api==0.16 zeroconf==0.38.4 # homeassistant.components.zha -zha-quirks==0.0.71 +zha-quirks==0.0.72 # homeassistant.components.zha zigpy-deconz==0.15.0 @@ -1616,7 +1616,7 @@ zigpy-zigate==0.8.0 zigpy-znp==0.7.0 # homeassistant.components.zha -zigpy==0.44.1 +zigpy==0.44.2 # homeassistant.components.zwave_js zwave-js-server-python==0.35.2 From 242bd921df44155b8458b5406fb26a6469261f99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20S=C3=B8rensen?= Date: Tue, 12 Apr 2022 11:00:55 +0200 Subject: [PATCH 211/238] Handle add-on issues (#69897) --- homeassistant/components/hassio/__init__.py | 30 ++++++++++++++------- tests/components/hassio/test_update.py | 27 +++++++++++++++++++ 2 files changed, 48 insertions(+), 9 deletions(-) diff --git a/homeassistant/components/hassio/__init__.py b/homeassistant/components/hassio/__init__.py index 5f2cc386a87..f3f6887570f 100644 --- a/homeassistant/components/hassio/__init__.py +++ b/homeassistant/components/hassio/__init__.py @@ -711,7 +711,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: dev_reg = await async_get_registry(hass) coordinator = HassioDataUpdateCoordinator(hass, entry, dev_reg) hass.data[ADDONS_COORDINATOR] = coordinator - await coordinator.async_refresh() + await coordinator.async_config_entry_first_refresh() hass.config_entries.async_setup_platforms(entry, PLATFORMS) @@ -848,8 +848,8 @@ class HassioDataUpdateCoordinator(DataUpdateCoordinator): new_data[DATA_KEY_ADDONS] = { addon[ATTR_SLUG]: { **addon, - **((addons_stats or {}).get(addon[ATTR_SLUG], {})), - ATTR_AUTO_UPDATE: addons_info.get(addon[ATTR_SLUG], {}).get( + **((addons_stats or {}).get(addon[ATTR_SLUG]) or {}), + ATTR_AUTO_UPDATE: (addons_info.get(addon[ATTR_SLUG]) or {}).get( ATTR_AUTO_UPDATE, False ), ATTR_CHANGELOG: (addons_changelogs or {}).get(addon[ATTR_SLUG]), @@ -952,15 +952,27 @@ class HassioDataUpdateCoordinator(DataUpdateCoordinator): async def _update_addon_stats(self, slug): """Update single addon stats.""" - stats = await self.hassio.get_addon_stats(slug) - return (slug, stats) + try: + stats = await self.hassio.get_addon_stats(slug) + return (slug, stats) + except HassioAPIError as err: + _LOGGER.warning("Could not fetch stats for %s: %s", slug, err) + return (slug, None) async def _update_addon_changelog(self, slug): """Return the changelog for an add-on.""" - changelog = await self.hassio.get_addon_changelog(slug) - return (slug, changelog) + try: + changelog = await self.hassio.get_addon_changelog(slug) + return (slug, changelog) + except HassioAPIError as err: + _LOGGER.warning("Could not fetch changelog for %s: %s", slug, err) + return (slug, None) async def _update_addon_info(self, slug): """Return the info for an add-on.""" - info = await self.hassio.get_addon_info(slug) - return (slug, info) + try: + info = await self.hassio.get_addon_info(slug) + return (slug, info) + except HassioAPIError as err: + _LOGGER.warning("Could not fetch info for %s: %s", slug, err) + return (slug, None) diff --git a/tests/components/hassio/test_update.py b/tests/components/hassio/test_update.py index 3407c26fc2f..14d1d06ef38 100644 --- a/tests/components/hassio/test_update.py +++ b/tests/components/hassio/test_update.py @@ -509,3 +509,30 @@ async def test_no_os_entity(hass): # Verify that the entity does not exist assert not hass.states.get("update.home_assistant_operating_system_update") + + +async def test_setting_up_core_update_when_addon_fails(hass, caplog): + """Test setting up core update when single addon fails.""" + with patch.dict(os.environ, MOCK_ENVIRON), patch( + "homeassistant.components.hassio.HassIO.get_addon_stats", + side_effect=HassioAPIError("add-on is not running"), + ), patch( + "homeassistant.components.hassio.HassIO.get_addon_changelog", + side_effect=HassioAPIError("add-on is not running"), + ), patch( + "homeassistant.components.hassio.HassIO.get_addon_info", + side_effect=HassioAPIError("add-on is not running"), + ): + result = await async_setup_component( + hass, + "hassio", + {"http": {"server_port": 9999, "server_host": "127.0.0.1"}, "hassio": {}}, + ) + assert result + await hass.async_block_till_done() + + # Verify that the core update entity does exist + state = hass.states.get("update.home_assistant_core_update") + assert state + assert state.state == "on" + assert "Could not fetch stats for test: add-on is not running" in caplog.text From f5bb9e6047f31ddcbdf9b593dea4a74601f023c2 Mon Sep 17 00:00:00 2001 From: epenet <6771947+epenet@users.noreply.github.com> Date: Tue, 12 Apr 2022 11:37:05 +0200 Subject: [PATCH 212/238] Fix unique id in SamsungTV config flow (#69899) * Fix unique id in SamsungTV config flow * coverage Co-authored-by: J. Nick Koston --- .../components/samsungtv/config_flow.py | 5 ++-- .../components/samsungtv/test_config_flow.py | 25 +++++++++++++++++++ 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/samsungtv/config_flow.py b/homeassistant/components/samsungtv/config_flow.py index f37020cb029..adcec0e8b2b 100644 --- a/homeassistant/components/samsungtv/config_flow.py +++ b/homeassistant/components/samsungtv/config_flow.py @@ -363,9 +363,8 @@ class SamsungTVConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): if not entry: return None entry_kw_args: dict = {} - if ( - self.unique_id - and entry.unique_id is None + if self.unique_id and ( + entry.unique_id is None or (is_unique_match and self.unique_id != entry.unique_id) ): entry_kw_args["unique_id"] = self.unique_id diff --git a/tests/components/samsungtv/test_config_flow.py b/tests/components/samsungtv/test_config_flow.py index 19169c20dd3..d2a9d10caf2 100644 --- a/tests/components/samsungtv/test_config_flow.py +++ b/tests/components/samsungtv/test_config_flow.py @@ -1451,6 +1451,31 @@ async def test_update_missing_mac_unique_id_ssdp_location_added_from_ssdp( assert entry.unique_id == "be9554b9-c9fb-41f4-8920-22da015376a4" +@pytest.mark.usefixtures( + "remote", "remotews", "remoteencws_failing", "rest_api_failing" +) +async def test_update_zeroconf_discovery_preserved_unique_id( + hass: HomeAssistant, +) -> None: + """Test zeroconf discovery preserves unique id.""" + entry = MockConfigEntry( + domain=DOMAIN, + data={**MOCK_OLD_ENTRY, CONF_MAC: "aa:bb:zz:ee:rr:oo"}, + unique_id="original", + ) + entry.add_to_hass(hass) + result = await hass.config_entries.flow.async_init( + DOMAIN, + context={"source": config_entries.SOURCE_ZEROCONF}, + data=MOCK_ZEROCONF_DATA, + ) + await hass.async_block_till_done() + assert result["type"] == "abort" + assert result["reason"] == "not_supported" + assert entry.data[CONF_MAC] == "aa:bb:zz:ee:rr:oo" + assert entry.unique_id == "original" + + @pytest.mark.usefixtures("remotews", "rest_api", "remoteencws_failing") async def test_update_missing_mac_unique_id_added_ssdp_location_updated_from_ssdp( hass: HomeAssistant, From ec541ca7edad2113af0dd31211d57ed9e13dbe30 Mon Sep 17 00:00:00 2001 From: epenet <6771947+epenet@users.noreply.github.com> Date: Tue, 12 Apr 2022 12:30:41 +0200 Subject: [PATCH 213/238] Bump renault-api to 0.1.11 (#69900) --- homeassistant/components/renault/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/renault/manifest.json b/homeassistant/components/renault/manifest.json index 807a694e39f..33dc8c3dc8d 100644 --- a/homeassistant/components/renault/manifest.json +++ b/homeassistant/components/renault/manifest.json @@ -3,7 +3,7 @@ "name": "Renault", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/renault", - "requirements": ["renault-api==0.1.10"], + "requirements": ["renault-api==0.1.11"], "codeowners": ["@epenet"], "iot_class": "cloud_polling", "loggers": ["renault_api"], diff --git a/requirements_all.txt b/requirements_all.txt index a6acfca2798..ac192766256 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -2043,7 +2043,7 @@ raspyrfm-client==1.2.8 regenmaschine==2022.01.0 # homeassistant.components.renault -renault-api==0.1.10 +renault-api==0.1.11 # homeassistant.components.python_script restrictedpython==5.2 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 943304931bd..b5980939574 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -1327,7 +1327,7 @@ radios==0.1.1 regenmaschine==2022.01.0 # homeassistant.components.renault -renault-api==0.1.10 +renault-api==0.1.11 # homeassistant.components.python_script restrictedpython==5.2 From e49da79d1b0798c03366b5a14490a1dda91e6e43 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Tue, 12 Apr 2022 15:31:59 +0200 Subject: [PATCH 214/238] Fix climate HVAC device condition (#69908) --- .../components/climate/device_condition.py | 16 +++++++----- .../climate/test_device_condition.py | 25 +++++++++++-------- 2 files changed, 24 insertions(+), 17 deletions(-) diff --git a/homeassistant/components/climate/device_condition.py b/homeassistant/components/climate/device_condition.py index 6252de6e491..dd5842cd2a8 100644 --- a/homeassistant/components/climate/device_condition.py +++ b/homeassistant/components/climate/device_condition.py @@ -75,15 +75,19 @@ def async_condition_from_config( hass: HomeAssistant, config: ConfigType ) -> condition.ConditionCheckerType: """Create a function to test a device condition.""" - if config[CONF_TYPE] == "is_hvac_mode": - attribute = const.ATTR_HVAC_MODE - else: - attribute = const.ATTR_PRESET_MODE def test_is_state(hass: HomeAssistant, variables: TemplateVarsType) -> bool: """Test if an entity is a certain state.""" - state = hass.states.get(config[ATTR_ENTITY_ID]) - return state.attributes.get(attribute) == config[attribute] if state else False + if (state := hass.states.get(config[ATTR_ENTITY_ID])) is None: + return False + + if config[CONF_TYPE] == "is_hvac_mode": + return state.state == config[const.ATTR_HVAC_MODE] + + return ( + state.attributes.get(const.ATTR_PRESET_MODE) + == config[const.ATTR_PRESET_MODE] + ) return test_is_state diff --git a/tests/components/climate/test_device_condition.py b/tests/components/climate/test_device_condition.py index 65c1e17048b..ca3f4388c0a 100644 --- a/tests/components/climate/test_device_condition.py +++ b/tests/components/climate/test_device_condition.py @@ -92,15 +92,6 @@ async def test_get_conditions( async def test_if_state(hass, calls): """Test for turn_on and turn_off conditions.""" - hass.states.async_set( - "climate.entity", - const.HVAC_MODE_COOL, - { - const.ATTR_HVAC_MODE: const.HVAC_MODE_COOL, - const.ATTR_PRESET_MODE: const.PRESET_AWAY, - }, - ) - assert await async_setup_component( hass, automation.DOMAIN, @@ -147,6 +138,20 @@ async def test_if_state(hass, calls): ] }, ) + + # Should not fire, entity doesn't exist yet + hass.bus.async_fire("test_event1") + await hass.async_block_till_done() + assert len(calls) == 0 + + hass.states.async_set( + "climate.entity", + const.HVAC_MODE_COOL, + { + const.ATTR_PRESET_MODE: const.PRESET_AWAY, + }, + ) + hass.bus.async_fire("test_event1") await hass.async_block_till_done() assert len(calls) == 1 @@ -156,7 +161,6 @@ async def test_if_state(hass, calls): "climate.entity", const.HVAC_MODE_AUTO, { - const.ATTR_HVAC_MODE: const.HVAC_MODE_AUTO, const.ATTR_PRESET_MODE: const.PRESET_AWAY, }, ) @@ -176,7 +180,6 @@ async def test_if_state(hass, calls): "climate.entity", const.HVAC_MODE_AUTO, { - const.ATTR_HVAC_MODE: const.HVAC_MODE_AUTO, const.ATTR_PRESET_MODE: const.PRESET_HOME, }, ) From fee80a9d4aad4015d665cd68fec1b05a955d3af1 Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Tue, 12 Apr 2022 18:10:17 +0200 Subject: [PATCH 215/238] Fix adjusting 5-minute statistics (#69921) --- .../components/recorder/statistics.py | 23 +++++++++++-------- tests/components/sensor/test_recorder.py | 10 ++++++++ 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/homeassistant/components/recorder/statistics.py b/homeassistant/components/recorder/statistics.py index f01190097df..ac2bf14c134 100644 --- a/homeassistant/components/recorder/statistics.py +++ b/homeassistant/components/recorder/statistics.py @@ -1323,17 +1323,20 @@ def adjust_statistics( if statistic_id not in metadata: return True - tables: tuple[type[Statistics | StatisticsShortTerm], ...] = ( - Statistics, + _adjust_sum_statistics( + session, StatisticsShortTerm, + metadata[statistic_id][0], + start_time, + sum_adjustment, + ) + + _adjust_sum_statistics( + session, + Statistics, + metadata[statistic_id][0], + start_time.replace(minute=0), + sum_adjustment, ) - for table in tables: - _adjust_sum_statistics( - session, - table, - metadata[statistic_id][0], - start_time, - sum_adjustment, - ) return True diff --git a/tests/components/sensor/test_recorder.py b/tests/components/sensor/test_recorder.py index 33550495589..825aec7904c 100644 --- a/tests/components/sensor/test_recorder.py +++ b/tests/components/sensor/test_recorder.py @@ -2464,6 +2464,16 @@ def test_compile_statistics_hourly_daily_monthly_summary( }, ] + # Adjust the inserted statistics + sum_adjustment = -10 + sum_adjustement_start = zero + timedelta(minutes=65) + for i in range(13, 24): + expected_sums["sensor.test4"][i] += sum_adjustment + recorder.async_adjust_statistics( + "sensor.test4", sum_adjustement_start, sum_adjustment + ) + wait_recording_done(hass) + stats = statistics_during_period(hass, zero, period="5minute") expected_stats = { "sensor.test1": [], From 27721d5b846ec87b2ffb0642edc7d23087f69e2c Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Tue, 12 Apr 2022 23:08:38 +0200 Subject: [PATCH 216/238] =?UTF-8?q?Fix=20adjusting=20statistics=20in=20ft?= =?UTF-8?q?=C2=B3=20(#69913)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Paulus Schoutsen --- .../components/recorder/statistics.py | 37 ++++++++++++++++--- tests/components/sensor/test_recorder.py | 35 +++++++++--------- 2 files changed, 49 insertions(+), 23 deletions(-) diff --git a/homeassistant/components/recorder/statistics.py b/homeassistant/components/recorder/statistics.py index ac2bf14c134..bf4108a87c1 100644 --- a/homeassistant/components/recorder/statistics.py +++ b/homeassistant/components/recorder/statistics.py @@ -12,7 +12,7 @@ import logging import os import re from statistics import mean -from typing import TYPE_CHECKING, Any, Literal +from typing import TYPE_CHECKING, Any, Literal, overload from sqlalchemy import bindparam, func from sqlalchemy.exc import SQLAlchemyError, StatementError @@ -125,9 +125,9 @@ STATISTICS_META_BAKERY = "recorder_statistics_meta_bakery" STATISTICS_SHORT_TERM_BAKERY = "recorder_statistics_short_term_bakery" -# Convert pressure and temperature statistics from the native unit used for statistics -# to the units configured by the user -UNIT_CONVERSIONS = { +# Convert pressure, temperature and volume statistics from the normalized unit used for +# statistics to the unit configured by the user +STATISTIC_UNIT_TO_DISPLAY_UNIT_CONVERSIONS = { PRESSURE_PA: lambda x, units: pressure_util.convert( x, PRESSURE_PA, units.pressure_unit ) @@ -145,6 +145,17 @@ UNIT_CONVERSIONS = { else None, } +# Convert volume statistics from the display unit configured by the user +# to the normalized unit used for statistics +# This is used to support adjusting statistics in the display unit +DISPLAY_UNIT_TO_STATISTIC_UNIT_CONVERSIONS: dict[ + str, Callable[[float, UnitSystem], float] +] = { + VOLUME_CUBIC_FEET: lambda x, units: volume_util.convert( + x, _configured_unit(VOLUME_CUBIC_METERS, units), VOLUME_CUBIC_METERS + ), +} + _LOGGER = logging.getLogger(__name__) @@ -721,7 +732,17 @@ def get_metadata( ) +@overload +def _configured_unit(unit: None, units: UnitSystem) -> None: + ... + + +@overload def _configured_unit(unit: str, units: UnitSystem) -> str: + ... + + +def _configured_unit(unit: str | None, units: UnitSystem) -> str | None: """Return the pressure and temperature units configured by the user.""" if unit == PRESSURE_PA: return units.pressure_unit @@ -1163,7 +1184,7 @@ def _sorted_statistics_to_dict( statistic_id = metadata[meta_id]["statistic_id"] convert: Callable[[Any, Any], float | None] if convert_units: - convert = UNIT_CONVERSIONS.get(unit, lambda x, units: x) # type: ignore[arg-type,no-any-return] + convert = STATISTIC_UNIT_TO_DISPLAY_UNIT_CONVERSIONS.get(unit, lambda x, units: x) # type: ignore[arg-type,no-any-return] else: convert = no_conversion ent_results = result[meta_id] @@ -1323,6 +1344,12 @@ def adjust_statistics( if statistic_id not in metadata: return True + units = instance.hass.config.units + statistic_unit = metadata[statistic_id][1]["unit_of_measurement"] + display_unit = _configured_unit(statistic_unit, units) + convert = DISPLAY_UNIT_TO_STATISTIC_UNIT_CONVERSIONS.get(display_unit, lambda x, units: x) # type: ignore[arg-type] + sum_adjustment = convert(sum_adjustment, units) + _adjust_sum_statistics( session, StatisticsShortTerm, diff --git a/tests/components/sensor/test_recorder.py b/tests/components/sensor/test_recorder.py index 825aec7904c..f9f1c058626 100644 --- a/tests/components/sensor/test_recorder.py +++ b/tests/components/sensor/test_recorder.py @@ -325,20 +325,20 @@ def test_compile_hourly_statistics_unsupported(hass_recorder, caplog, attributes @pytest.mark.parametrize("state_class", ["total"]) @pytest.mark.parametrize( - "units,device_class,unit,display_unit,factor,factor2", + "units,device_class,unit,display_unit,factor", [ - (IMPERIAL_SYSTEM, "energy", "kWh", "kWh", 1, 1), - (IMPERIAL_SYSTEM, "energy", "Wh", "kWh", 1 / 1000, 1), - (IMPERIAL_SYSTEM, "monetary", "EUR", "EUR", 1, 1), - (IMPERIAL_SYSTEM, "monetary", "SEK", "SEK", 1, 1), - (IMPERIAL_SYSTEM, "gas", "m³", "ft³", 35.314666711, 35.314666711), - (IMPERIAL_SYSTEM, "gas", "ft³", "ft³", 1, 35.314666711), - (METRIC_SYSTEM, "energy", "kWh", "kWh", 1, 1), - (METRIC_SYSTEM, "energy", "Wh", "kWh", 1 / 1000, 1), - (METRIC_SYSTEM, "monetary", "EUR", "EUR", 1, 1), - (METRIC_SYSTEM, "monetary", "SEK", "SEK", 1, 1), - (METRIC_SYSTEM, "gas", "m³", "m³", 1, 1), - (METRIC_SYSTEM, "gas", "ft³", "m³", 0.0283168466, 1), + (IMPERIAL_SYSTEM, "energy", "kWh", "kWh", 1), + (IMPERIAL_SYSTEM, "energy", "Wh", "kWh", 1 / 1000), + (IMPERIAL_SYSTEM, "monetary", "EUR", "EUR", 1), + (IMPERIAL_SYSTEM, "monetary", "SEK", "SEK", 1), + (IMPERIAL_SYSTEM, "gas", "m³", "ft³", 35.314666711), + (IMPERIAL_SYSTEM, "gas", "ft³", "ft³", 1), + (METRIC_SYSTEM, "energy", "kWh", "kWh", 1), + (METRIC_SYSTEM, "energy", "Wh", "kWh", 1 / 1000), + (METRIC_SYSTEM, "monetary", "EUR", "EUR", 1), + (METRIC_SYSTEM, "monetary", "SEK", "SEK", 1), + (METRIC_SYSTEM, "gas", "m³", "m³", 1), + (METRIC_SYSTEM, "gas", "ft³", "m³", 0.0283168466), ], ) async def test_compile_hourly_sum_statistics_amount( @@ -351,7 +351,6 @@ async def test_compile_hourly_sum_statistics_amount( unit, display_unit, factor, - factor2, ): """Test compiling hourly statistics.""" period0 = dt_util.utcnow() @@ -480,8 +479,8 @@ async def test_compile_hourly_sum_statistics_amount( assert response["success"] await async_wait_recording_done_without_instance(hass) - expected_stats["sensor.test1"][1]["sum"] = approx(factor * 40.0 + factor2 * 100) - expected_stats["sensor.test1"][2]["sum"] = approx(factor * 70.0 + factor2 * 100) + expected_stats["sensor.test1"][1]["sum"] = approx(factor * 40.0 + 100) + expected_stats["sensor.test1"][2]["sum"] = approx(factor * 70.0 + 100) stats = statistics_during_period(hass, period0, period="5minute") assert stats == expected_stats @@ -499,8 +498,8 @@ async def test_compile_hourly_sum_statistics_amount( assert response["success"] await async_wait_recording_done_without_instance(hass) - expected_stats["sensor.test1"][1]["sum"] = approx(factor * 40.0 + factor2 * 100) - expected_stats["sensor.test1"][2]["sum"] = approx(factor * 70.0 - factor2 * 300) + expected_stats["sensor.test1"][1]["sum"] = approx(factor * 40.0 + 100) + expected_stats["sensor.test1"][2]["sum"] = approx(factor * 70.0 - 300) stats = statistics_during_period(hass, period0, period="5minute") assert stats == expected_stats From 8a8ee3c732f5530a8ad5a08905717bb86999af7e Mon Sep 17 00:00:00 2001 From: puddly <32534428+puddly@users.noreply.github.com> Date: Tue, 12 Apr 2022 14:57:34 -0400 Subject: [PATCH 217/238] Downgrade ZHA dependency zigpy-deconz from 0.15.0 to 0.14.0 (#69927) --- homeassistant/components/zha/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/zha/manifest.json b/homeassistant/components/zha/manifest.json index da5cb5e4103..c780bdcb16f 100644 --- a/homeassistant/components/zha/manifest.json +++ b/homeassistant/components/zha/manifest.json @@ -8,7 +8,7 @@ "pyserial==3.5", "pyserial-asyncio==0.6", "zha-quirks==0.0.72", - "zigpy-deconz==0.15.0", + "zigpy-deconz==0.14.0", "zigpy==0.44.2", "zigpy-xbee==0.14.0", "zigpy-zigate==0.8.0", diff --git a/requirements_all.txt b/requirements_all.txt index ac192766256..79bab40278a 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -2482,7 +2482,7 @@ zhong_hong_hvac==1.0.9 ziggo-mediabox-xl==1.1.0 # homeassistant.components.zha -zigpy-deconz==0.15.0 +zigpy-deconz==0.14.0 # homeassistant.components.zha zigpy-xbee==0.14.0 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index b5980939574..6de908fd699 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -1604,7 +1604,7 @@ zeroconf==0.38.4 zha-quirks==0.0.72 # homeassistant.components.zha -zigpy-deconz==0.15.0 +zigpy-deconz==0.14.0 # homeassistant.components.zha zigpy-xbee==0.14.0 From cc6afdba3c9e07db799cbdf4ccf2dd7a584d7a6e Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 12 Apr 2022 14:14:13 -0700 Subject: [PATCH 218/238] Bumped version to 2022.4.3 --- homeassistant/const.py | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/const.py b/homeassistant/const.py index 9007b681b7b..ee1e7a65731 100644 --- a/homeassistant/const.py +++ b/homeassistant/const.py @@ -7,7 +7,7 @@ from .backports.enum import StrEnum MAJOR_VERSION: Final = 2022 MINOR_VERSION: Final = 4 -PATCH_VERSION: Final = "2" +PATCH_VERSION: Final = "3" __short_version__: Final = f"{MAJOR_VERSION}.{MINOR_VERSION}" __version__: Final = f"{__short_version__}.{PATCH_VERSION}" REQUIRED_PYTHON_VER: Final[tuple[int, int, int]] = (3, 9, 0) diff --git a/setup.cfg b/setup.cfg index 2959c5e4dee..b391172bd19 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = homeassistant -version = 2022.4.2 +version = 2022.4.3 author = The Home Assistant Authors author_email = hello@home-assistant.io license = Apache-2.0 From 51bfe5344428fcc0e094344525a18651742e553d Mon Sep 17 00:00:00 2001 From: rappenze Date: Tue, 12 Apr 2022 23:58:52 +0200 Subject: [PATCH 219/238] Fix fibaro light state for rgb lights and HC3 (#69884) --- homeassistant/components/fibaro/light.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/homeassistant/components/fibaro/light.py b/homeassistant/components/fibaro/light.py index 4d1c039f137..e117eac8a90 100644 --- a/homeassistant/components/fibaro/light.py +++ b/homeassistant/components/fibaro/light.py @@ -2,6 +2,7 @@ from __future__ import annotations import asyncio +from contextlib import suppress from functools import partial from homeassistant.components.light import ( @@ -198,16 +199,21 @@ class FibaroLight(FibaroDevice, LightEntity): Dimmable and RGB lights can be on based on different properties, so we need to check here several values. + + JSON for HC2 uses always string, HC3 uses int for integers. """ props = self.fibaro_device.properties if self.current_binary_state: return True - if "brightness" in props and props.brightness != "0": - return True - if "currentProgram" in props and props.currentProgram != "0": - return True - if "currentProgramID" in props and props.currentProgramID != "0": - return True + with suppress(ValueError, TypeError): + if "brightness" in props and int(props.brightness) != 0: + return True + with suppress(ValueError, TypeError): + if "currentProgram" in props and int(props.currentProgram) != 0: + return True + with suppress(ValueError, TypeError): + if "currentProgramID" in props and int(props.currentProgramID) != 0: + return True return False From a543160070db0e475a941675b1fd5cfe32f0e9c1 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 12 Apr 2022 14:50:07 -0700 Subject: [PATCH 220/238] Not all music are URLs (#69936) --- homeassistant/components/mpd/media_player.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/homeassistant/components/mpd/media_player.py b/homeassistant/components/mpd/media_player.py index fca3e8bec0d..509584a867f 100644 --- a/homeassistant/components/mpd/media_player.py +++ b/homeassistant/components/mpd/media_player.py @@ -463,7 +463,7 @@ class MpdDevice(MediaPlayerEntity): if media_source.is_media_source_id(media_id): media_type = MEDIA_TYPE_MUSIC play_item = await media_source.async_resolve_media(self.hass, media_id) - media_id = play_item.url + media_id = async_process_play_media_url(self.hass, play_item.url) if media_type == MEDIA_TYPE_PLAYLIST: _LOGGER.debug("Playing playlist: %s", media_id) @@ -476,8 +476,6 @@ class MpdDevice(MediaPlayerEntity): await self._client.load(media_id) await self._client.play() else: - media_id = async_process_play_media_url(self.hass, media_id) - await self._client.clear() self._currentplaylist = None await self._client.add(media_id) From 25fc64a9e02bb08dc43dcc0d4a321876dc32c51e Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 12 Apr 2022 15:27:20 -0700 Subject: [PATCH 221/238] Guard against non http schemes (#69938) --- homeassistant/components/media_player/browse_media.py | 3 +++ tests/components/media_player/test_browse_media.py | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/homeassistant/components/media_player/browse_media.py b/homeassistant/components/media_player/browse_media.py index e4cad5c3201..60234cd1b38 100644 --- a/homeassistant/components/media_player/browse_media.py +++ b/homeassistant/components/media_player/browse_media.py @@ -32,6 +32,9 @@ def async_process_play_media_url( """Update a media URL with authentication if it points at Home Assistant.""" parsed = yarl.URL(media_content_id) + if parsed.scheme and parsed.scheme not in ("http", "https"): + return media_content_id + if parsed.is_absolute(): if not is_hass_url(hass, media_content_id): return media_content_id diff --git a/tests/components/media_player/test_browse_media.py b/tests/components/media_player/test_browse_media.py index 6741432024e..ea1e3b4fc36 100644 --- a/tests/components/media_player/test_browse_media.py +++ b/tests/components/media_player/test_browse_media.py @@ -36,6 +36,11 @@ async def test_process_play_media_url(hass, mock_sign_path): async_process_play_media_url(hass, "https://not-hass.com/path") == "https://not-hass.com/path" ) + # Not changing a url that is not http/https + assert ( + async_process_play_media_url(hass, "file:///tmp/test.mp3") + == "file:///tmp/test.mp3" + ) # Testing signing hass URLs assert ( From 814cbcd13adc30a20ab7a4ff675fd1aed0266078 Mon Sep 17 00:00:00 2001 From: Sander Date: Thu, 14 Apr 2022 13:16:14 +0200 Subject: [PATCH 222/238] Remove duplicate program (#69734) --- homeassistant/components/home_connect/api.py | 1 - 1 file changed, 1 deletion(-) diff --git a/homeassistant/components/home_connect/api.py b/homeassistant/components/home_connect/api.py index bce3f5ece61..f3c98e618b8 100644 --- a/homeassistant/components/home_connect/api.py +++ b/homeassistant/components/home_connect/api.py @@ -312,7 +312,6 @@ class Dishwasher( """Dishwasher class.""" PROGRAMS = [ - {"name": "Dishcare.Dishwasher.Program.PreRinse"}, {"name": "Dishcare.Dishwasher.Program.Auto1"}, {"name": "Dishcare.Dishwasher.Program.Auto2"}, {"name": "Dishcare.Dishwasher.Program.Auto3"}, From 261ae2ef33afc852e494bda202af2a59062b7042 Mon Sep 17 00:00:00 2001 From: Diogo Gomes Date: Wed, 13 Apr 2022 19:29:13 +0100 Subject: [PATCH 223/238] Fix Prosegur availability through Alexa (#69941) --- homeassistant/components/prosegur/alarm_control_panel.py | 1 + 1 file changed, 1 insertion(+) diff --git a/homeassistant/components/prosegur/alarm_control_panel.py b/homeassistant/components/prosegur/alarm_control_panel.py index b773687c18c..1defc1624f1 100644 --- a/homeassistant/components/prosegur/alarm_control_panel.py +++ b/homeassistant/components/prosegur/alarm_control_panel.py @@ -51,6 +51,7 @@ class ProsegurAlarm(alarm.AlarmControlPanelEntity): self.contract = contract self._auth = auth + self._attr_code_arm_required = False self._attr_name = f"contract {self.contract}" self._attr_unique_id = self.contract self._attr_supported_features = SUPPORT_ALARM_ARM_AWAY | SUPPORT_ALARM_ARM_HOME From 69828da4bc76067e6c76228a828c20045b4c0af1 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Thu, 14 Apr 2022 06:57:36 -1000 Subject: [PATCH 224/238] Fix race during homekit controller pairing (#69948) --- .../homekit_controller/config_flow.py | 6 +- .../homekit_controller/test_config_flow.py | 77 +++++++++++++++++-- 2 files changed, 77 insertions(+), 6 deletions(-) diff --git a/homeassistant/components/homekit_controller/config_flow.py b/homeassistant/components/homekit_controller/config_flow.py index d41eb0ed220..c3bdfcc42ae 100644 --- a/homeassistant/components/homekit_controller/config_flow.py +++ b/homeassistant/components/homekit_controller/config_flow.py @@ -293,7 +293,10 @@ class HomekitControllerFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): self._abort_if_unique_id_configured(updates=updated_ip_port) for progress in self._async_in_progress(include_uninitialized=True): - if progress["context"].get("unique_id") == normalized_hkid: + context = progress["context"] + if context.get("unique_id") == normalized_hkid and not context.get( + "pairing" + ): if paired: # If the device gets paired, we want to dismiss # an existing discovery since we can no longer @@ -350,6 +353,7 @@ class HomekitControllerFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): await self._async_setup_controller() if pair_info and self.finish_pairing: + self.context["pairing"] = True code = pair_info["pairing_code"] try: code = ensure_pin_format( diff --git a/tests/components/homekit_controller/test_config_flow.py b/tests/components/homekit_controller/test_config_flow.py index a65d63b1af2..3b106dab186 100644 --- a/tests/components/homekit_controller/test_config_flow.py +++ b/tests/components/homekit_controller/test_config_flow.py @@ -1,4 +1,5 @@ """Tests for homekit_controller config flow.""" +import asyncio from unittest import mock import unittest.mock from unittest.mock import AsyncMock, patch @@ -14,6 +15,7 @@ from homeassistant import config_entries from homeassistant.components import zeroconf from homeassistant.components.homekit_controller import config_flow from homeassistant.components.homekit_controller.const import KNOWN_DEVICES +from homeassistant.data_entry_flow import RESULT_TYPE_ABORT, RESULT_TYPE_CREATE_ENTRY from homeassistant.helpers import device_registry from tests.common import MockConfigEntry, mock_device_registry @@ -133,7 +135,7 @@ def get_flow_context(hass, result): def get_device_discovery_info( - device, upper_case_props=False, missing_csharp=False + device, upper_case_props=False, missing_csharp=False, paired=False ) -> zeroconf.ZeroconfServiceInfo: """Turn a aiohomekit format zeroconf entry into a homeassistant one.""" result = zeroconf.ZeroconfServiceInfo( @@ -150,7 +152,7 @@ def get_device_discovery_info( "s#": device.description.state_num, "ff": "0", "ci": "0", - "sf": "1", + "sf": "0" if paired else "1", "sh": "", }, type="_hap._tcp.local.", @@ -250,10 +252,8 @@ async def test_abort_duplicate_flow(hass, controller): async def test_pair_already_paired_1(hass, controller): """Already paired.""" device = setup_mock_accessory(controller) - discovery_info = get_device_discovery_info(device) - # Flag device as already paired - discovery_info.properties["sf"] = 0x0 + discovery_info = get_device_discovery_info(device, paired=True) # Device is discovered result = await hass.config_entries.flow.async_init( @@ -692,6 +692,7 @@ async def test_pair_form_errors_on_finish(hass, controller, exception, expected) "title_placeholders": {"name": "TestDevice"}, "unique_id": "00:00:00:00:00:00", "source": config_entries.SOURCE_ZEROCONF, + "pairing": True, } @@ -883,3 +884,69 @@ async def test_discovery_dismiss_existing_flow_on_paired(hass, controller): len(hass.config_entries.flow.async_progress_by_handler("homekit_controller")) == 0 ) + + +async def test_mdns_update_to_paired_during_pairing(hass, controller): + """Test we do not abort pairing if mdns is updated to reflect paired during pairing.""" + device = setup_mock_accessory(controller) + discovery_info = get_device_discovery_info(device) + discovery_info_paired = get_device_discovery_info(device, paired=True) + + # Device is discovered + result = await hass.config_entries.flow.async_init( + "homekit_controller", + context={"source": config_entries.SOURCE_ZEROCONF}, + data=discovery_info, + ) + + assert get_flow_context(hass, result) == { + "title_placeholders": {"name": "TestDevice"}, + "unique_id": "00:00:00:00:00:00", + "source": config_entries.SOURCE_ZEROCONF, + } + + mdns_update_to_paired = asyncio.Event() + + original_async_start_pairing = device.async_start_pairing + + async def _async_start_pairing(*args, **kwargs): + finish_pairing = await original_async_start_pairing(*args, **kwargs) + + async def _finish_pairing(*args, **kwargs): + # Insert an event wait to make sure + # we trigger the mdns update in the middle of the pairing + await mdns_update_to_paired.wait() + return await finish_pairing(*args, **kwargs) + + return _finish_pairing + + with patch.object(device, "async_start_pairing", _async_start_pairing): + result = await hass.config_entries.flow.async_configure(result["flow_id"]) + + assert result["type"] == "form" + assert get_flow_context(hass, result) == { + "title_placeholders": {"name": "TestDevice"}, + "unique_id": "00:00:00:00:00:00", + "source": config_entries.SOURCE_ZEROCONF, + } + + # User enters pairing code + task = asyncio.create_task( + hass.config_entries.flow.async_configure( + result["flow_id"], user_input={"pairing_code": "111-22-333"} + ) + ) + # Make sure when the device is discovered as paired via mdns + # it does not abort pairing if it happens before pairing is finished + result2 = await hass.config_entries.flow.async_init( + "homekit_controller", + context={"source": config_entries.SOURCE_ZEROCONF}, + data=discovery_info_paired, + ) + assert result2["type"] == RESULT_TYPE_ABORT + assert result2["reason"] == "already_paired" + mdns_update_to_paired.set() + result = await task + assert result["type"] == RESULT_TYPE_CREATE_ENTRY + assert result["title"] == "Koogeek-LS1-20833F" + assert result["data"] == {} From 7bd60bf0fbcf03cf88ec2e270d57002e7db3dae1 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Tue, 12 Apr 2022 19:50:56 -1000 Subject: [PATCH 225/238] Fix HomeKit Controller device class for CO Sensors (#69949) --- homeassistant/components/homekit_controller/binary_sensor.py | 2 +- tests/components/homekit_controller/test_binary_sensor.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/homekit_controller/binary_sensor.py b/homeassistant/components/homekit_controller/binary_sensor.py index 91c1c47d47e..5efd0915cb0 100644 --- a/homeassistant/components/homekit_controller/binary_sensor.py +++ b/homeassistant/components/homekit_controller/binary_sensor.py @@ -63,7 +63,7 @@ class HomeKitSmokeSensor(HomeKitEntity, BinarySensorEntity): class HomeKitCarbonMonoxideSensor(HomeKitEntity, BinarySensorEntity): """Representation of a Homekit BO sensor.""" - _attr_device_class = BinarySensorDeviceClass.GAS + _attr_device_class = BinarySensorDeviceClass.CO def get_characteristic_types(self) -> list[str]: """Define the homekit characteristics the entity is tracking.""" diff --git a/tests/components/homekit_controller/test_binary_sensor.py b/tests/components/homekit_controller/test_binary_sensor.py index d83beb07df3..ff9877b2e44 100644 --- a/tests/components/homekit_controller/test_binary_sensor.py +++ b/tests/components/homekit_controller/test_binary_sensor.py @@ -114,7 +114,7 @@ async def test_carbon_monoxide_sensor_read_state(hass, utcnow): state = await helper.poll_and_get_state() assert state.state == "on" - assert state.attributes["device_class"] == BinarySensorDeviceClass.GAS + assert state.attributes["device_class"] == BinarySensorDeviceClass.CO def create_occupancy_sensor_service(accessory): From de0126c880515f34f4643ffa2bbb6f4464e8c15a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20S=C3=B8rensen?= Date: Wed, 13 Apr 2022 12:17:35 +0200 Subject: [PATCH 226/238] Fix available property in the base supervisor entity (#69966) --- homeassistant/components/hassio/entity.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/components/hassio/entity.py b/homeassistant/components/hassio/entity.py index fb9f70f1417..c6bec04123c 100644 --- a/homeassistant/components/hassio/entity.py +++ b/homeassistant/components/hassio/entity.py @@ -90,7 +90,7 @@ class HassioSupervisorEntity(CoordinatorEntity[HassioDataUpdateCoordinator]): """Return True if entity is available.""" return ( super().available - and DATA_KEY_OS in self.coordinator.data + and DATA_KEY_SUPERVISOR in self.coordinator.data and self.entity_description.key in self.coordinator.data[DATA_KEY_SUPERVISOR] ) From 4ce6b6dd22dc3c1ca167d4db7c65013d96c56803 Mon Sep 17 00:00:00 2001 From: uvjustin <46082645+uvjustin@users.noreply.github.com> Date: Wed, 13 Apr 2022 17:36:25 -1000 Subject: [PATCH 227/238] Use ha-av instead of av and bump to v9.1.1-3 (#69974) --- homeassistant/components/generic/manifest.json | 2 +- homeassistant/components/stream/manifest.json | 2 +- requirements_all.txt | 8 ++++---- requirements_test_all.txt | 8 ++++---- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/homeassistant/components/generic/manifest.json b/homeassistant/components/generic/manifest.json index 7d3841dcf47..0bb94f2b832 100644 --- a/homeassistant/components/generic/manifest.json +++ b/homeassistant/components/generic/manifest.json @@ -2,7 +2,7 @@ "domain": "generic", "name": "Generic Camera", "config_flow": true, - "requirements": ["av==8.1.0", "pillow==9.0.1"], + "requirements": ["ha-av==9.1.1-3", "pillow==9.0.1"], "documentation": "https://www.home-assistant.io/integrations/generic", "codeowners": ["@davet2001"], "iot_class": "local_push" diff --git a/homeassistant/components/stream/manifest.json b/homeassistant/components/stream/manifest.json index d8fd035a5ab..38194d60b3a 100644 --- a/homeassistant/components/stream/manifest.json +++ b/homeassistant/components/stream/manifest.json @@ -2,7 +2,7 @@ "domain": "stream", "name": "Stream", "documentation": "https://www.home-assistant.io/integrations/stream", - "requirements": ["PyTurboJPEG==1.6.6", "av==8.1.0"], + "requirements": ["PyTurboJPEG==1.6.6", "ha-av==9.1.1-3"], "dependencies": ["http"], "codeowners": ["@hunterjm", "@uvjustin", "@allenporter"], "quality_scale": "internal", diff --git a/requirements_all.txt b/requirements_all.txt index 79bab40278a..7b5d5d7ea03 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -347,10 +347,6 @@ auroranoaa==0.0.2 # homeassistant.components.aurora_abb_powerone aurorapy==0.2.6 -# homeassistant.components.generic -# homeassistant.components.stream -av==8.1.0 - # homeassistant.components.avea # avea==1.5.1 @@ -766,6 +762,10 @@ gstreamer-player==1.1.2 # homeassistant.components.profiler guppy3==3.1.2 +# homeassistant.components.generic +# homeassistant.components.stream +ha-av==9.1.1-3 + # homeassistant.components.ffmpeg ha-ffmpeg==3.0.2 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 6de908fd699..c669f014c39 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -277,10 +277,6 @@ auroranoaa==0.0.2 # homeassistant.components.aurora_abb_powerone aurorapy==0.2.6 -# homeassistant.components.generic -# homeassistant.components.stream -av==8.1.0 - # homeassistant.components.axis axis==44 @@ -536,6 +532,10 @@ growattServer==1.1.0 # homeassistant.components.profiler guppy3==3.1.2 +# homeassistant.components.generic +# homeassistant.components.stream +ha-av==9.1.1-3 + # homeassistant.components.ffmpeg ha-ffmpeg==3.0.2 From f8db38c0b6d9033e83e2455ab588dab3196ba604 Mon Sep 17 00:00:00 2001 From: Michael Chisholm Date: Thu, 14 Apr 2022 03:04:03 +1000 Subject: [PATCH 228/238] Fix config_flow error from dlna_dmr for UPnP discovery info containing a single service (#69977) --- .../components/dlna_dmr/config_flow.py | 14 +++++--- tests/components/dlna_dmr/test_config_flow.py | 36 ++++++++++++++++++- 2 files changed, 45 insertions(+), 5 deletions(-) diff --git a/homeassistant/components/dlna_dmr/config_flow.py b/homeassistant/components/dlna_dmr/config_flow.py index e8999c3ebb6..ac7e3c83253 100644 --- a/homeassistant/components/dlna_dmr/config_flow.py +++ b/homeassistant/components/dlna_dmr/config_flow.py @@ -134,10 +134,16 @@ class DlnaDmrFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): discovery_service_list = discovery_info.upnp.get(ssdp.ATTR_UPNP_SERVICE_LIST) if not discovery_service_list: return self.async_abort(reason="not_dmr") - discovery_service_ids = { - service.get("serviceId") - for service in discovery_service_list.get("service") or [] - } + + services = discovery_service_list.get("service") + if not services: + discovery_service_ids: set[str] = set() + elif isinstance(services, list): + discovery_service_ids = {service.get("serviceId") for service in services} + else: + # Only one service defined (etree_to_dict failed to make a list) + discovery_service_ids = {services.get("serviceId")} + if not DmrDevice.SERVICE_IDS.issubset(discovery_service_ids): return self.async_abort(reason="not_dmr") diff --git a/tests/components/dlna_dmr/test_config_flow.py b/tests/components/dlna_dmr/test_config_flow.py index 44ab4ea313f..6112c7c5ed5 100644 --- a/tests/components/dlna_dmr/test_config_flow.py +++ b/tests/components/dlna_dmr/test_config_flow.py @@ -388,7 +388,7 @@ async def test_ssdp_flow_upnp_udn( async def test_ssdp_missing_services(hass: HomeAssistant) -> None: """Test SSDP ignores devices that are missing required services.""" - # No services defined at all + # No service list at all discovery = dataclasses.replace(MOCK_DISCOVERY) discovery.upnp = discovery.upnp.copy() del discovery.upnp[ssdp.ATTR_UPNP_SERVICE_LIST] @@ -400,6 +400,18 @@ async def test_ssdp_missing_services(hass: HomeAssistant) -> None: assert result["type"] == data_entry_flow.RESULT_TYPE_ABORT assert result["reason"] == "not_dmr" + # Service list does not contain services + discovery = dataclasses.replace(MOCK_DISCOVERY) + discovery.upnp = discovery.upnp.copy() + discovery.upnp[ssdp.ATTR_UPNP_SERVICE_LIST] = {"bad_key": "bad_value"} + result = await hass.config_entries.flow.async_init( + DLNA_DOMAIN, + context={"source": config_entries.SOURCE_SSDP}, + data=discovery, + ) + assert result["type"] == data_entry_flow.RESULT_TYPE_ABORT + assert result["reason"] == "not_dmr" + # AVTransport service is missing discovery = dataclasses.replace(MOCK_DISCOVERY) discovery.upnp = discovery.upnp.copy() @@ -417,6 +429,28 @@ async def test_ssdp_missing_services(hass: HomeAssistant) -> None: assert result["reason"] == "not_dmr" +async def test_ssdp_single_service(hass: HomeAssistant) -> None: + """Test SSDP discovery info with only one service defined. + + THe etree_to_dict function turns multiple services into a list of dicts, but + a single service into only a dict. + """ + discovery = dataclasses.replace(MOCK_DISCOVERY) + discovery.upnp = discovery.upnp.copy() + service_list = discovery.upnp[ssdp.ATTR_UPNP_SERVICE_LIST].copy() + # Turn mock's list of service dicts into a single dict + service_list["service"] = service_list["service"][0] + discovery.upnp[ssdp.ATTR_UPNP_SERVICE_LIST] = service_list + + result = await hass.config_entries.flow.async_init( + DLNA_DOMAIN, + context={"source": config_entries.SOURCE_SSDP}, + data=discovery, + ) + assert result["type"] == data_entry_flow.RESULT_TYPE_ABORT + assert result["reason"] == "not_dmr" + + async def test_ssdp_ignore_device(hass: HomeAssistant) -> None: """Test SSDP discovery ignores certain devices.""" discovery = dataclasses.replace(MOCK_DISCOVERY) From 741252a32dc040de99b2265839d839ee8a2e6004 Mon Sep 17 00:00:00 2001 From: Michael Chisholm Date: Thu, 14 Apr 2022 06:53:04 +1000 Subject: [PATCH 229/238] Fix config_flow error for UPnP info with single service (#69979) --- .../components/dlna_dms/config_flow.py | 14 +++++--- tests/components/dlna_dms/test_config_flow.py | 36 ++++++++++++++++++- 2 files changed, 45 insertions(+), 5 deletions(-) diff --git a/homeassistant/components/dlna_dms/config_flow.py b/homeassistant/components/dlna_dms/config_flow.py index bf310f7b234..8cb34be927f 100644 --- a/homeassistant/components/dlna_dms/config_flow.py +++ b/homeassistant/components/dlna_dms/config_flow.py @@ -77,10 +77,16 @@ class DlnaDmsFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): discovery_service_list = discovery_info.upnp.get(ssdp.ATTR_UPNP_SERVICE_LIST) if not discovery_service_list: return self.async_abort(reason="not_dms") - discovery_service_ids = { - service.get("serviceId") - for service in discovery_service_list.get("service") or [] - } + + services = discovery_service_list.get("service") + if not services: + discovery_service_ids: set[str] = set() + elif isinstance(services, list): + discovery_service_ids = {service.get("serviceId") for service in services} + else: + # Only one service defined (etree_to_dict failed to make a list) + discovery_service_ids = {services.get("serviceId")} + if not DmsDevice.SERVICE_IDS.issubset(discovery_service_ids): return self.async_abort(reason="not_dms") diff --git a/tests/components/dlna_dms/test_config_flow.py b/tests/components/dlna_dms/test_config_flow.py index 521c3169aa5..591457b23c6 100644 --- a/tests/components/dlna_dms/test_config_flow.py +++ b/tests/components/dlna_dms/test_config_flow.py @@ -325,7 +325,7 @@ async def test_ssdp_flow_upnp_udn( async def test_ssdp_missing_services(hass: HomeAssistant) -> None: """Test SSDP ignores devices that are missing required services.""" - # No services defined at all + # No service list at all discovery = dataclasses.replace(MOCK_DISCOVERY) discovery.upnp = dict(discovery.upnp) del discovery.upnp[ssdp.ATTR_UPNP_SERVICE_LIST] @@ -337,6 +337,18 @@ async def test_ssdp_missing_services(hass: HomeAssistant) -> None: assert result["type"] == data_entry_flow.RESULT_TYPE_ABORT assert result["reason"] == "not_dms" + # Service list does not contain services + discovery = dataclasses.replace(MOCK_DISCOVERY) + discovery.upnp = dict(discovery.upnp) + discovery.upnp[ssdp.ATTR_UPNP_SERVICE_LIST] = {"bad_key": "bad_value"} + result = await hass.config_entries.flow.async_init( + DOMAIN, + context={"source": config_entries.SOURCE_SSDP}, + data=discovery, + ) + assert result["type"] == data_entry_flow.RESULT_TYPE_ABORT + assert result["reason"] == "not_dms" + # ContentDirectory service is missing discovery = dataclasses.replace(MOCK_DISCOVERY) discovery.upnp = dict(discovery.upnp) @@ -352,3 +364,25 @@ async def test_ssdp_missing_services(hass: HomeAssistant) -> None: ) assert result["type"] == data_entry_flow.RESULT_TYPE_ABORT assert result["reason"] == "not_dms" + + +async def test_ssdp_single_service(hass: HomeAssistant) -> None: + """Test SSDP discovery info with only one service defined. + + THe etree_to_dict function turns multiple services into a list of dicts, but + a single service into only a dict. + """ + discovery = dataclasses.replace(MOCK_DISCOVERY) + discovery.upnp = dict(discovery.upnp) + service_list = dict(discovery.upnp[ssdp.ATTR_UPNP_SERVICE_LIST]) + # Turn mock's list of service dicts into a single dict + service_list["service"] = service_list["service"][0] + discovery.upnp[ssdp.ATTR_UPNP_SERVICE_LIST] = service_list + + result = await hass.config_entries.flow.async_init( + DOMAIN, + context={"source": config_entries.SOURCE_SSDP}, + data=discovery, + ) + assert result["type"] == data_entry_flow.RESULT_TYPE_ABORT + assert result["reason"] == "not_dms" From 276e8f185be023ab1ab1c4ccdaed4d36ebf2851b Mon Sep 17 00:00:00 2001 From: epenet <6771947+epenet@users.noreply.github.com> Date: Wed, 13 Apr 2022 18:20:44 +0200 Subject: [PATCH 230/238] Suppress UpnpResponseError in SamsungTV (#69984) --- homeassistant/components/samsungtv/media_player.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/samsungtv/media_player.py b/homeassistant/components/samsungtv/media_player.py index 556294409d6..7ab12d1a76a 100644 --- a/homeassistant/components/samsungtv/media_player.py +++ b/homeassistant/components/samsungtv/media_player.py @@ -224,9 +224,7 @@ class SamsungTVDevice(MediaPlayerEntity): startup_tasks.append(self._async_startup_app_list()) if self._dmr_device and not self._dmr_device.is_subscribed: - startup_tasks.append( - self._dmr_device.async_subscribe_services(auto_resubscribe=True) - ) + startup_tasks.append(self._async_resubscribe_dmr()) if not self._dmr_device and self._ssdp_rendering_control_location: startup_tasks.append(self._async_startup_dmr()) @@ -284,7 +282,7 @@ class SamsungTVDevice(MediaPlayerEntity): # NETWORK,NONE upnp_factory = UpnpFactory(upnp_requester, non_strict=True) upnp_device: UpnpDevice | None = None - with contextlib.suppress(UpnpConnectionError): + with contextlib.suppress(UpnpConnectionError, UpnpResponseError): upnp_device = await upnp_factory.async_create_device( self._ssdp_rendering_control_location ) @@ -319,6 +317,11 @@ class SamsungTVDevice(MediaPlayerEntity): LOGGER.debug("Error while subscribing during device connect: %r", err) raise + async def _async_resubscribe_dmr(self) -> None: + assert self._dmr_device + with contextlib.suppress(UpnpConnectionError): + await self._dmr_device.async_subscribe_services(auto_resubscribe=True) + async def _async_shutdown_dmr(self) -> None: """Handle removal.""" if (dmr_device := self._dmr_device) is not None: From fe7c3a7ba5df774ffcd8191e61a2444564b4de10 Mon Sep 17 00:00:00 2001 From: Aaron Bach Date: Wed, 13 Apr 2022 12:30:19 -0600 Subject: [PATCH 231/238] Fix missing interior battery sensor for Ambient PWS (#69994) --- homeassistant/components/ambient_station/binary_sensor.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/homeassistant/components/ambient_station/binary_sensor.py b/homeassistant/components/ambient_station/binary_sensor.py index f9fcec6aa6a..5fecbce3ded 100644 --- a/homeassistant/components/ambient_station/binary_sensor.py +++ b/homeassistant/components/ambient_station/binary_sensor.py @@ -28,6 +28,7 @@ TYPE_BATT6 = "batt6" TYPE_BATT7 = "batt7" TYPE_BATT8 = "batt8" TYPE_BATT9 = "batt9" +TYPE_BATTIN = "battin" TYPE_BATTOUT = "battout" TYPE_BATT_CO2 = "batt_co2" TYPE_BATT_LIGHTNING = "batt_lightning" @@ -140,6 +141,13 @@ BINARY_SENSOR_DESCRIPTIONS = ( entity_category=EntityCategory.DIAGNOSTIC, on_state=0, ), + AmbientBinarySensorDescription( + key=TYPE_BATTIN, + name="Interior Battery", + device_class=BinarySensorDeviceClass.BATTERY, + entity_category=EntityCategory.DIAGNOSTIC, + on_state=0, + ), AmbientBinarySensorDescription( key=TYPE_BATT10, name="Soil Monitor Battery 10", From 31df67a4c19a8e592ac30e947d5720f597b4f9c1 Mon Sep 17 00:00:00 2001 From: "David F. Mulcahey" Date: Wed, 13 Apr 2022 17:02:57 -0400 Subject: [PATCH 232/238] ZHA diagnostics fixes (#70000) --- homeassistant/components/zha/diagnostics.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/zha/diagnostics.py b/homeassistant/components/zha/diagnostics.py index 1a775723b0b..ec8dab241de 100644 --- a/homeassistant/components/zha/diagnostics.py +++ b/homeassistant/components/zha/diagnostics.py @@ -29,6 +29,7 @@ KEYS_TO_REDACT = { CONF_UNIQUE_ID, "network_key", CONF_NWK_EXTENDED_PAN_ID, + "partner_ieee", } @@ -50,7 +51,7 @@ async def async_get_config_entry_diagnostics( hass: HomeAssistant, config_entry: ConfigEntry ) -> dict: """Return diagnostics for a config entry.""" - config: dict = hass.data[DATA_ZHA][DATA_ZHA_CONFIG] + config: dict = hass.data[DATA_ZHA].get(DATA_ZHA_CONFIG, {}) gateway: ZHAGateway = hass.data[DATA_ZHA][DATA_ZHA_GATEWAY] return async_redact_data( { From 8bdce8ef688652467a4e2909fc9023b7b5b02ed2 Mon Sep 17 00:00:00 2001 From: Barry Williams Date: Thu, 14 Apr 2022 17:56:25 +0100 Subject: [PATCH 233/238] use newer version of openhomedevice (#70022) --- homeassistant/components/openhome/manifest.json | 2 +- requirements_all.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/openhome/manifest.json b/homeassistant/components/openhome/manifest.json index 6b8815f9318..01dafe6f3f2 100644 --- a/homeassistant/components/openhome/manifest.json +++ b/homeassistant/components/openhome/manifest.json @@ -2,7 +2,7 @@ "domain": "openhome", "name": "Linn / OpenHome", "documentation": "https://www.home-assistant.io/integrations/openhome", - "requirements": ["openhomedevice==2.0.1"], + "requirements": ["openhomedevice==2.0.2"], "codeowners": ["@bazwilliams"], "iot_class": "local_polling", "loggers": ["async_upnp_client", "openhomedevice"] diff --git a/requirements_all.txt b/requirements_all.txt index 7b5d5d7ea03..a5b62691256 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -1141,7 +1141,7 @@ openerz-api==0.1.0 openevsewifi==1.1.0 # homeassistant.components.openhome -openhomedevice==2.0.1 +openhomedevice==2.0.2 # homeassistant.components.opensensemap opensensemap-api==0.2.0 From e01faa7a8ff97c0ea963bb8e95e85d9bac568618 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20S=C3=B8rensen?= Date: Thu, 14 Apr 2022 18:56:59 +0200 Subject: [PATCH 234/238] Handle KeyError when loading backups (#70028) --- homeassistant/components/backup/manager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/components/backup/manager.py b/homeassistant/components/backup/manager.py index eee9919e711..15fc4a7f648 100644 --- a/homeassistant/components/backup/manager.py +++ b/homeassistant/components/backup/manager.py @@ -108,7 +108,7 @@ class BackupManager: size=round(backup_path.stat().st_size / 1_048_576, 2), ) backups[backup.slug] = backup - except (OSError, TarError, json.JSONDecodeError) as err: + except (OSError, TarError, json.JSONDecodeError, KeyError) as err: LOGGER.warning("Unable to read backup %s: %s", backup_path, err) return backups From 74d38e00e4bfbe5d7c03e3d86a6ae4ae807990ac Mon Sep 17 00:00:00 2001 From: Raman Gupta <7243222+raman325@users.noreply.github.com> Date: Thu, 14 Apr 2022 12:58:16 -0400 Subject: [PATCH 235/238] Fix tomorrow.io units... again... (#70029) --- .../components/tomorrowio/__init__.py | 1 + homeassistant/components/tomorrowio/sensor.py | 43 ++++++++----------- tests/components/tomorrowio/test_sensor.py | 18 ++++---- 3 files changed, 28 insertions(+), 34 deletions(-) diff --git a/homeassistant/components/tomorrowio/__init__.py b/homeassistant/components/tomorrowio/__init__.py index f55ea4c16da..8074949a888 100644 --- a/homeassistant/components/tomorrowio/__init__.py +++ b/homeassistant/components/tomorrowio/__init__.py @@ -202,6 +202,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: entry.data[CONF_API_KEY], entry.data[CONF_LOCATION][CONF_LATITUDE], entry.data[CONF_LOCATION][CONF_LONGITUDE], + unit_system="metric", session=async_get_clientsession(hass), ) diff --git a/homeassistant/components/tomorrowio/sensor.py b/homeassistant/components/tomorrowio/sensor.py index 8361869c18a..d221922df54 100644 --- a/homeassistant/components/tomorrowio/sensor.py +++ b/homeassistant/components/tomorrowio/sensor.py @@ -31,16 +31,14 @@ from homeassistant.const import ( LENGTH_MILES, PERCENTAGE, PRESSURE_HPA, - PRESSURE_INHG, SPEED_METERS_PER_SECOND, SPEED_MILES_PER_HOUR, - TEMP_FAHRENHEIT, + TEMP_CELSIUS, ) from homeassistant.core import HomeAssistant from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.util import slugify from homeassistant.util.distance import convert as distance_convert -from homeassistant.util.pressure import convert as pressure_convert from . import TomorrowioDataUpdateCoordinator, TomorrowioEntity from .const import ( @@ -80,7 +78,7 @@ class TomorrowioSensorEntityDescription(SensorEntityDescription): unit_imperial: str | None = None unit_metric: str | None = None multiplication_factor: Callable[[float], float] | float | None = None - metric_conversion: Callable[[float], float] | float | None = None + imperial_conversion: Callable[[float], float] | float | None = None value_map: Any | None = None def __post_init__(self) -> None: @@ -105,13 +103,13 @@ SENSOR_TYPES = ( TomorrowioSensorEntityDescription( key=TMRW_ATTR_FEELS_LIKE, name="Feels Like", - native_unit_of_measurement=TEMP_FAHRENHEIT, + native_unit_of_measurement=TEMP_CELSIUS, device_class=SensorDeviceClass.TEMPERATURE, ), TomorrowioSensorEntityDescription( key=TMRW_ATTR_DEW_POINT, name="Dew Point", - native_unit_of_measurement=TEMP_FAHRENHEIT, + native_unit_of_measurement=TEMP_CELSIUS, device_class=SensorDeviceClass.TEMPERATURE, ), # Data comes in as inHg @@ -119,9 +117,6 @@ SENSOR_TYPES = ( key=TMRW_ATTR_PRESSURE_SURFACE_LEVEL, name="Pressure (Surface Level)", native_unit_of_measurement=PRESSURE_HPA, - multiplication_factor=lambda val: pressure_convert( - val, PRESSURE_INHG, PRESSURE_HPA - ), device_class=SensorDeviceClass.PRESSURE, ), # Data comes in as BTUs/(hr * ft^2) @@ -131,7 +126,7 @@ SENSOR_TYPES = ( name="Global Horizontal Irradiance", unit_imperial=IRRADIATION_BTUS_PER_HOUR_SQUARE_FOOT, unit_metric=IRRADIATION_WATTS_PER_SQUARE_METER, - metric_conversion=3.15459, + imperial_conversion=(1 / 3.15459), ), # Data comes in as miles TomorrowioSensorEntityDescription( @@ -139,8 +134,8 @@ SENSOR_TYPES = ( name="Cloud Base", unit_imperial=LENGTH_MILES, unit_metric=LENGTH_KILOMETERS, - metric_conversion=lambda val: distance_convert( - val, LENGTH_MILES, LENGTH_KILOMETERS + imperial_conversion=lambda val: distance_convert( + val, LENGTH_KILOMETERS, LENGTH_MILES ), ), # Data comes in as miles @@ -149,8 +144,8 @@ SENSOR_TYPES = ( name="Cloud Ceiling", unit_imperial=LENGTH_MILES, unit_metric=LENGTH_KILOMETERS, - metric_conversion=lambda val: distance_convert( - val, LENGTH_MILES, LENGTH_KILOMETERS + imperial_conversion=lambda val: distance_convert( + val, LENGTH_KILOMETERS, LENGTH_MILES ), ), TomorrowioSensorEntityDescription( @@ -164,8 +159,10 @@ SENSOR_TYPES = ( name="Wind Gust", unit_imperial=SPEED_MILES_PER_HOUR, unit_metric=SPEED_METERS_PER_SECOND, - metric_conversion=lambda val: distance_convert(val, LENGTH_MILES, LENGTH_METERS) - / 3600, + imperial_conversion=lambda val: distance_convert( + val, LENGTH_METERS, LENGTH_MILES + ) + * 3600, ), TomorrowioSensorEntityDescription( key=TMRW_ATTR_PRECIPITATION_TYPE, @@ -183,20 +180,16 @@ SENSOR_TYPES = ( multiplication_factor=convert_ppb_to_ugm3(48), device_class=SensorDeviceClass.OZONE, ), - # Data comes in as ug/ft^3 TomorrowioSensorEntityDescription( key=TMRW_ATTR_PARTICULATE_MATTER_25, name="Particulate Matter < 2.5 μm", native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER, - multiplication_factor=3.2808399**3, device_class=SensorDeviceClass.PM25, ), - # Data comes in as ug/ft^3 TomorrowioSensorEntityDescription( key=TMRW_ATTR_PARTICULATE_MATTER_10, name="Particulate Matter < 10 μm", native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER, - multiplication_factor=3.2808399**3, device_class=SensorDeviceClass.PM10, ), # Data comes in as ppb @@ -360,15 +353,15 @@ class BaseTomorrowioSensorEntity(TomorrowioEntity, SensorEntity): if desc.multiplication_factor is not None: state = handle_conversion(state, desc.multiplication_factor) - # If an imperial unit isn't provided, we always want to convert to metric since - # that is what the UI expects + # If there is an imperial conversion needed and the instance is using imperial, + # apply the conversion logic. if ( - desc.metric_conversion + desc.imperial_conversion and desc.unit_imperial is not None and desc.unit_imperial != desc.unit_metric - and self.hass.config.units.is_metric + and not self.hass.config.units.is_metric ): - return handle_conversion(state, desc.metric_conversion) + return handle_conversion(state, desc.imperial_conversion) return state diff --git a/tests/components/tomorrowio/test_sensor.py b/tests/components/tomorrowio/test_sensor.py index 91a4a2eabc5..ef025204ea6 100644 --- a/tests/components/tomorrowio/test_sensor.py +++ b/tests/components/tomorrowio/test_sensor.py @@ -146,8 +146,8 @@ async def test_v4_sensor(hass: HomeAssistant) -> None: check_sensor_state(hass, CO, "0.0") check_sensor_state(hass, NO2, "20.08") check_sensor_state(hass, SO2, "4.32") - check_sensor_state(hass, PM25, "5.3") - check_sensor_state(hass, PM10, "20.13") + check_sensor_state(hass, PM25, "0.15") + check_sensor_state(hass, PM10, "0.57") check_sensor_state(hass, MEP_AQI, "23") check_sensor_state(hass, MEP_HEALTH_CONCERN, "good") check_sensor_state(hass, MEP_PRIMARY_POLLUTANT, "pm10") @@ -158,14 +158,14 @@ async def test_v4_sensor(hass: HomeAssistant) -> None: check_sensor_state(hass, GRASS_POLLEN, "none") check_sensor_state(hass, WEED_POLLEN, "none") check_sensor_state(hass, TREE_POLLEN, "none") - check_sensor_state(hass, FEELS_LIKE, "38.5") - check_sensor_state(hass, DEW_POINT, "22.68") - check_sensor_state(hass, PRESSURE_SURFACE_LEVEL, "997.97") - check_sensor_state(hass, GHI, "0.0") - check_sensor_state(hass, CLOUD_BASE, "1.19") + check_sensor_state(hass, FEELS_LIKE, "101.3") + check_sensor_state(hass, DEW_POINT, "72.82") + check_sensor_state(hass, PRESSURE_SURFACE_LEVEL, "29.47") + check_sensor_state(hass, GHI, "0") + check_sensor_state(hass, CLOUD_BASE, "0.74") check_sensor_state(hass, CLOUD_COVER, "100") - check_sensor_state(hass, CLOUD_CEILING, "1.19") - check_sensor_state(hass, WIND_GUST, "5.65") + check_sensor_state(hass, CLOUD_CEILING, "0.74") + check_sensor_state(hass, WIND_GUST, "12.64") check_sensor_state(hass, PRECIPITATION_TYPE, "rain") From d244af6df12f8461402a3871832f1340802898e5 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 14 Apr 2022 10:09:26 -0700 Subject: [PATCH 236/238] Bumped version to 2022.4.4 --- homeassistant/const.py | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/const.py b/homeassistant/const.py index ee1e7a65731..8fa0b529c04 100644 --- a/homeassistant/const.py +++ b/homeassistant/const.py @@ -7,7 +7,7 @@ from .backports.enum import StrEnum MAJOR_VERSION: Final = 2022 MINOR_VERSION: Final = 4 -PATCH_VERSION: Final = "3" +PATCH_VERSION: Final = "4" __short_version__: Final = f"{MAJOR_VERSION}.{MINOR_VERSION}" __version__: Final = f"{__short_version__}.{PATCH_VERSION}" REQUIRED_PYTHON_VER: Final[tuple[int, int, int]] = (3, 9, 0) diff --git a/setup.cfg b/setup.cfg index b391172bd19..e0103f4657e 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = homeassistant -version = 2022.4.3 +version = 2022.4.4 author = The Home Assistant Authors author_email = hello@home-assistant.io license = Apache-2.0 From ea8ee02403ce304ffee5c2f81aa52b485aafd047 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 14 Apr 2022 12:44:41 -0700 Subject: [PATCH 237/238] Check supported features in media player reproduce state (#70055) --- .../media_player/reproduce_state.py | 65 ++++++++--- .../media_player/test_reproduce_state.py | 106 +++++++++++++++--- 2 files changed, 140 insertions(+), 31 deletions(-) diff --git a/homeassistant/components/media_player/reproduce_state.py b/homeassistant/components/media_player/reproduce_state.py index 79688130a36..47d365ff75a 100644 --- a/homeassistant/components/media_player/reproduce_state.py +++ b/homeassistant/components/media_player/reproduce_state.py @@ -6,6 +6,7 @@ from collections.abc import Iterable from typing import Any from homeassistant.const import ( + ATTR_SUPPORTED_FEATURES, SERVICE_MEDIA_PAUSE, SERVICE_MEDIA_PLAY, SERVICE_MEDIA_STOP, @@ -33,6 +34,7 @@ from .const import ( SERVICE_PLAY_MEDIA, SERVICE_SELECT_SOUND_MODE, SERVICE_SELECT_SOURCE, + MediaPlayerEntityFeature, ) # mypy: allow-untyped-defs @@ -46,6 +48,8 @@ async def _async_reproduce_states( reproduce_options: dict[str, Any] | None = None, ) -> None: """Reproduce component states.""" + cur_state = hass.states.get(state.entity_id) + features = cur_state.attributes[ATTR_SUPPORTED_FEATURES] if cur_state else 0 async def call_service(service: str, keys: Iterable) -> None: """Call service with set of attributes given.""" @@ -59,28 +63,48 @@ async def _async_reproduce_states( ) if state.state == STATE_OFF: - await call_service(SERVICE_TURN_OFF, []) + if features & MediaPlayerEntityFeature.TURN_OFF: + await call_service(SERVICE_TURN_OFF, []) # entities that are off have no other attributes to restore return - if state.state in ( - STATE_ON, - STATE_PLAYING, - STATE_IDLE, - STATE_PAUSED, + if ( + state.state + in ( + STATE_ON, + STATE_PLAYING, + STATE_IDLE, + STATE_PAUSED, + ) + and features & MediaPlayerEntityFeature.TURN_ON ): await call_service(SERVICE_TURN_ON, []) - if ATTR_MEDIA_VOLUME_LEVEL in state.attributes: + cur_state = hass.states.get(state.entity_id) + features = cur_state.attributes[ATTR_SUPPORTED_FEATURES] if cur_state else 0 + + if ( + ATTR_MEDIA_VOLUME_LEVEL in state.attributes + and features & MediaPlayerEntityFeature.VOLUME_SET + ): await call_service(SERVICE_VOLUME_SET, [ATTR_MEDIA_VOLUME_LEVEL]) - if ATTR_MEDIA_VOLUME_MUTED in state.attributes: + if ( + ATTR_MEDIA_VOLUME_MUTED in state.attributes + and features & MediaPlayerEntityFeature.VOLUME_MUTE + ): await call_service(SERVICE_VOLUME_MUTE, [ATTR_MEDIA_VOLUME_MUTED]) - if ATTR_INPUT_SOURCE in state.attributes: + if ( + ATTR_INPUT_SOURCE in state.attributes + and features & MediaPlayerEntityFeature.SELECT_SOURCE + ): await call_service(SERVICE_SELECT_SOURCE, [ATTR_INPUT_SOURCE]) - if ATTR_SOUND_MODE in state.attributes: + if ( + ATTR_SOUND_MODE in state.attributes + and features & MediaPlayerEntityFeature.SELECT_SOUND_MODE + ): await call_service(SERVICE_SELECT_SOUND_MODE, [ATTR_SOUND_MODE]) already_playing = False @@ -88,18 +112,25 @@ async def _async_reproduce_states( if (ATTR_MEDIA_CONTENT_TYPE in state.attributes) and ( ATTR_MEDIA_CONTENT_ID in state.attributes ): - await call_service( - SERVICE_PLAY_MEDIA, - [ATTR_MEDIA_CONTENT_TYPE, ATTR_MEDIA_CONTENT_ID, ATTR_MEDIA_ENQUEUE], - ) + if features & MediaPlayerEntityFeature.PLAY_MEDIA: + await call_service( + SERVICE_PLAY_MEDIA, + [ATTR_MEDIA_CONTENT_TYPE, ATTR_MEDIA_CONTENT_ID, ATTR_MEDIA_ENQUEUE], + ) already_playing = True - if state.state == STATE_PLAYING and not already_playing: + if ( + not already_playing + and state.state == STATE_PLAYING + and features & MediaPlayerEntityFeature.PLAY + ): await call_service(SERVICE_MEDIA_PLAY, []) elif state.state == STATE_IDLE: - await call_service(SERVICE_MEDIA_STOP, []) + if features & MediaPlayerEntityFeature.STOP: + await call_service(SERVICE_MEDIA_STOP, []) elif state.state == STATE_PAUSED: - await call_service(SERVICE_MEDIA_PAUSE, []) + if features & MediaPlayerEntityFeature.PAUSE: + await call_service(SERVICE_MEDIA_PAUSE, []) async def async_reproduce_states( diff --git a/tests/components/media_player/test_reproduce_state.py b/tests/components/media_player/test_reproduce_state.py index ba0072bc2f8..c2e454d1a04 100644 --- a/tests/components/media_player/test_reproduce_state.py +++ b/tests/components/media_player/test_reproduce_state.py @@ -14,9 +14,11 @@ from homeassistant.components.media_player.const import ( SERVICE_PLAY_MEDIA, SERVICE_SELECT_SOUND_MODE, SERVICE_SELECT_SOURCE, + MediaPlayerEntityFeature, ) from homeassistant.components.media_player.reproduce_state import async_reproduce_states from homeassistant.const import ( + ATTR_SUPPORTED_FEATURES, SERVICE_MEDIA_PAUSE, SERVICE_MEDIA_PLAY, SERVICE_MEDIA_STOP, @@ -39,31 +41,47 @@ ENTITY_2 = "media_player.test2" @pytest.mark.parametrize( - "service,state", + "service,state,supported_feature", [ - (SERVICE_TURN_ON, STATE_ON), - (SERVICE_TURN_OFF, STATE_OFF), - (SERVICE_MEDIA_PLAY, STATE_PLAYING), - (SERVICE_MEDIA_STOP, STATE_IDLE), - (SERVICE_MEDIA_PAUSE, STATE_PAUSED), + (SERVICE_TURN_ON, STATE_ON, MediaPlayerEntityFeature.TURN_ON), + (SERVICE_TURN_OFF, STATE_OFF, MediaPlayerEntityFeature.TURN_OFF), + (SERVICE_MEDIA_PLAY, STATE_PLAYING, MediaPlayerEntityFeature.PLAY), + (SERVICE_MEDIA_STOP, STATE_IDLE, MediaPlayerEntityFeature.STOP), + (SERVICE_MEDIA_PAUSE, STATE_PAUSED, MediaPlayerEntityFeature.PAUSE), ], ) -async def test_state(hass, service, state): +async def test_state(hass, service, state, supported_feature): """Test that we can turn a state into a service call.""" calls_1 = async_mock_service(hass, DOMAIN, service) if service != SERVICE_TURN_ON: async_mock_service(hass, DOMAIN, SERVICE_TURN_ON) + # Don't support the feature won't call the service + hass.states.async_set(ENTITY_1, "something", {ATTR_SUPPORTED_FEATURES: 0}) await async_reproduce_states(hass, [State(ENTITY_1, state)]) await hass.async_block_till_done() + assert len(calls_1) == 0 + hass.states.async_set( + ENTITY_1, "something", {ATTR_SUPPORTED_FEATURES: supported_feature} + ) + await async_reproduce_states(hass, [State(ENTITY_1, state)]) assert len(calls_1) == 1 assert calls_1[0].data == {"entity_id": ENTITY_1} async def test_turn_on_with_mode(hass): """Test that state with additional attributes call multiple services.""" + hass.states.async_set( + ENTITY_1, + "something", + { + ATTR_SUPPORTED_FEATURES: MediaPlayerEntityFeature.TURN_ON + | MediaPlayerEntityFeature.SELECT_SOUND_MODE + }, + ) + calls_1 = async_mock_service(hass, DOMAIN, SERVICE_TURN_ON) calls_2 = async_mock_service(hass, DOMAIN, SERVICE_SELECT_SOUND_MODE) @@ -82,6 +100,13 @@ async def test_turn_on_with_mode(hass): async def test_multiple_same_state(hass): """Test that multiple states with same state gets calls.""" + for entity in ENTITY_1, ENTITY_2: + hass.states.async_set( + entity, + "something", + {ATTR_SUPPORTED_FEATURES: MediaPlayerEntityFeature.TURN_ON}, + ) + calls_1 = async_mock_service(hass, DOMAIN, SERVICE_TURN_ON) await async_reproduce_states(hass, [State(ENTITY_1, "on"), State(ENTITY_2, "on")]) @@ -96,6 +121,16 @@ async def test_multiple_same_state(hass): async def test_multiple_different_state(hass): """Test that multiple states with different state gets calls.""" + for entity in ENTITY_1, ENTITY_2: + hass.states.async_set( + entity, + "something", + { + ATTR_SUPPORTED_FEATURES: MediaPlayerEntityFeature.TURN_ON + | MediaPlayerEntityFeature.TURN_OFF + }, + ) + calls_1 = async_mock_service(hass, DOMAIN, SERVICE_TURN_ON) calls_2 = async_mock_service(hass, DOMAIN, SERVICE_TURN_OFF) @@ -111,6 +146,12 @@ async def test_multiple_different_state(hass): async def test_state_with_context(hass): """Test that context is forwarded.""" + hass.states.async_set( + ENTITY_1, + "something", + {ATTR_SUPPORTED_FEATURES: MediaPlayerEntityFeature.TURN_ON}, + ) + calls = async_mock_service(hass, DOMAIN, SERVICE_TURN_ON) context = Context() @@ -126,6 +167,16 @@ async def test_state_with_context(hass): async def test_attribute_no_state(hass): """Test that no state service call is made with none state.""" + hass.states.async_set( + ENTITY_1, + "something", + { + ATTR_SUPPORTED_FEATURES: MediaPlayerEntityFeature.TURN_ON + | MediaPlayerEntityFeature.TURN_OFF + | MediaPlayerEntityFeature.SELECT_SOUND_MODE + }, + ) + calls_1 = async_mock_service(hass, DOMAIN, SERVICE_TURN_ON) calls_2 = async_mock_service(hass, DOMAIN, SERVICE_TURN_OFF) calls_3 = async_mock_service(hass, DOMAIN, SERVICE_SELECT_SOUND_MODE) @@ -145,16 +196,38 @@ async def test_attribute_no_state(hass): @pytest.mark.parametrize( - "service,attribute", + "service,attribute,supported_feature", [ - (SERVICE_VOLUME_SET, ATTR_MEDIA_VOLUME_LEVEL), - (SERVICE_VOLUME_MUTE, ATTR_MEDIA_VOLUME_MUTED), - (SERVICE_SELECT_SOURCE, ATTR_INPUT_SOURCE), - (SERVICE_SELECT_SOUND_MODE, ATTR_SOUND_MODE), + ( + SERVICE_VOLUME_SET, + ATTR_MEDIA_VOLUME_LEVEL, + MediaPlayerEntityFeature.VOLUME_SET, + ), + ( + SERVICE_VOLUME_MUTE, + ATTR_MEDIA_VOLUME_MUTED, + MediaPlayerEntityFeature.VOLUME_MUTE, + ), + ( + SERVICE_SELECT_SOURCE, + ATTR_INPUT_SOURCE, + MediaPlayerEntityFeature.SELECT_SOURCE, + ), + ( + SERVICE_SELECT_SOUND_MODE, + ATTR_SOUND_MODE, + MediaPlayerEntityFeature.SELECT_SOUND_MODE, + ), ], ) -async def test_attribute(hass, service, attribute): +async def test_attribute(hass, service, attribute, supported_feature): """Test that service call is made for each attribute.""" + hass.states.async_set( + ENTITY_1, + "something", + {ATTR_SUPPORTED_FEATURES: supported_feature}, + ) + calls_1 = async_mock_service(hass, DOMAIN, service) value = "dummy" @@ -168,7 +241,12 @@ async def test_attribute(hass, service, attribute): async def test_play_media(hass): - """Test that no state service call is made with none state.""" + """Test playing media.""" + hass.states.async_set( + ENTITY_1, + "something", + {ATTR_SUPPORTED_FEATURES: MediaPlayerEntityFeature.PLAY_MEDIA}, + ) calls_1 = async_mock_service(hass, DOMAIN, SERVICE_PLAY_MEDIA) value_1 = "dummy_1" From a537534880a8867d73c250dd83c542f945755970 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 14 Apr 2022 12:48:51 -0700 Subject: [PATCH 238/238] Add media player features enum --- .../components/media_player/const.py | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/homeassistant/components/media_player/const.py b/homeassistant/components/media_player/const.py index fec2cfb3d0a..c9f0742ea57 100644 --- a/homeassistant/components/media_player/const.py +++ b/homeassistant/components/media_player/const.py @@ -1,4 +1,6 @@ """Provides the constants needed for component.""" +from enum import IntEnum + # How long our auth signature on the content should be valid for CONTENT_AUTH_EXPIRY_TIME = 3600 * 24 @@ -90,6 +92,32 @@ REPEAT_MODE_OFF = "off" REPEAT_MODE_ONE = "one" REPEAT_MODES = [REPEAT_MODE_OFF, REPEAT_MODE_ALL, REPEAT_MODE_ONE] + +class MediaPlayerEntityFeature(IntEnum): + """Supported features of the media player entity.""" + + PAUSE = 1 + SEEK = 2 + VOLUME_SET = 4 + VOLUME_MUTE = 8 + PREVIOUS_TRACK = 16 + NEXT_TRACK = 32 + + TURN_ON = 128 + TURN_OFF = 256 + PLAY_MEDIA = 512 + VOLUME_STEP = 1024 + SELECT_SOURCE = 2048 + STOP = 4096 + CLEAR_PLAYLIST = 8192 + PLAY = 16384 + SHUFFLE_SET = 32768 + SELECT_SOUND_MODE = 65536 + BROWSE_MEDIA = 131072 + REPEAT_SET = 262144 + GROUPING = 524288 + + SUPPORT_PAUSE = 1 SUPPORT_SEEK = 2 SUPPORT_VOLUME_SET = 4