From 850703824b8bf8a74abb89e29e0e58465775b6b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= Date: Fri, 26 Jul 2024 14:15:48 +0200 Subject: [PATCH] Update aioairzone-cloud to v0.6.0 (#122647) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Álvaro Fernández Rojas --- .../components/airzone_cloud/entity.py | 12 ++++++ .../components/airzone_cloud/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- .../snapshots/test_diagnostics.ambr | 11 ++++++ .../airzone_cloud/test_config_flow.py | 9 +++++ .../airzone_cloud/test_coordinator.py | 7 ++++ tests/components/airzone_cloud/util.py | 38 ++++++++++++++++++- 8 files changed, 79 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/airzone_cloud/entity.py b/homeassistant/components/airzone_cloud/entity.py index 8e8a7aff1bc..b8ab464d20c 100644 --- a/homeassistant/components/airzone_cloud/entity.py +++ b/homeassistant/components/airzone_cloud/entity.py @@ -13,9 +13,12 @@ from aioairzone_cloud.const import ( AZD_GROUPS, AZD_HOT_WATERS, AZD_INSTALLATIONS, + AZD_MODEL, AZD_NAME, AZD_SYSTEM_ID, AZD_SYSTEMS, + AZD_THERMOSTAT_FW, + AZD_THERMOSTAT_MODEL, AZD_WEBSERVER, AZD_WEBSERVERS, AZD_ZONES, @@ -69,6 +72,7 @@ class AirzoneAidooEntity(AirzoneEntity): self._attr_device_info = DeviceInfo( identifiers={(DOMAIN, aidoo_id)}, manufacturer=MANUFACTURER, + model=aidoo_data[AZD_MODEL], name=aidoo_data[AZD_NAME], via_device=(DOMAIN, aidoo_data[AZD_WEBSERVER]), ) @@ -111,6 +115,7 @@ class AirzoneGroupEntity(AirzoneEntity): self._attr_device_info = DeviceInfo( identifiers={(DOMAIN, group_id)}, + model="Group", manufacturer=MANUFACTURER, name=group_data[AZD_NAME], ) @@ -154,6 +159,7 @@ class AirzoneHotWaterEntity(AirzoneEntity): self._attr_device_info = DeviceInfo( identifiers={(DOMAIN, dhw_id)}, manufacturer=MANUFACTURER, + model="Hot Water", name=dhw_data[AZD_NAME], via_device=(DOMAIN, dhw_data[AZD_WEBSERVER]), ) @@ -195,6 +201,7 @@ class AirzoneInstallationEntity(AirzoneEntity): self._attr_device_info = DeviceInfo( identifiers={(DOMAIN, inst_id)}, manufacturer=MANUFACTURER, + model="Installation", name=inst_data[AZD_NAME], ) @@ -240,9 +247,11 @@ class AirzoneSystemEntity(AirzoneEntity): self._attr_device_info = DeviceInfo( identifiers={(DOMAIN, system_id)}, + model=system_data.get(AZD_MODEL), manufacturer=MANUFACTURER, name=system_data[AZD_NAME], via_device=(DOMAIN, system_data[AZD_WEBSERVER]), + sw_version=system_data.get(AZD_FIRMWARE), ) def get_airzone_value(self, key: str) -> Any: @@ -270,6 +279,7 @@ class AirzoneWebServerEntity(AirzoneEntity): self._attr_device_info = DeviceInfo( connections={(dr.CONNECTION_NETWORK_MAC, ws_id)}, identifiers={(DOMAIN, ws_id)}, + model="WebServer", manufacturer=MANUFACTURER, name=ws_data[AZD_NAME], sw_version=ws_data[AZD_FIRMWARE], @@ -300,9 +310,11 @@ class AirzoneZoneEntity(AirzoneEntity): self._attr_device_info = DeviceInfo( identifiers={(DOMAIN, zone_id)}, + model=zone_data.get(AZD_THERMOSTAT_MODEL), manufacturer=MANUFACTURER, name=zone_data[AZD_NAME], via_device=(DOMAIN, self.system_id), + sw_version=zone_data.get(AZD_THERMOSTAT_FW), ) def get_airzone_value(self, key: str) -> Any: diff --git a/homeassistant/components/airzone_cloud/manifest.json b/homeassistant/components/airzone_cloud/manifest.json index 38d50cb02c8..a47aeb6c886 100644 --- a/homeassistant/components/airzone_cloud/manifest.json +++ b/homeassistant/components/airzone_cloud/manifest.json @@ -6,5 +6,5 @@ "documentation": "https://www.home-assistant.io/integrations/airzone_cloud", "iot_class": "cloud_push", "loggers": ["aioairzone_cloud"], - "requirements": ["aioairzone-cloud==0.5.5"] + "requirements": ["aioairzone-cloud==0.6.0"] } diff --git a/requirements_all.txt b/requirements_all.txt index 80c3834db5a..d2e62bb9dc5 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -176,7 +176,7 @@ aio-georss-gdacs==0.9 aioairq==0.3.2 # homeassistant.components.airzone_cloud -aioairzone-cloud==0.5.5 +aioairzone-cloud==0.6.0 # homeassistant.components.airzone aioairzone==0.8.1 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 79aa747b117..762353676a1 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -161,7 +161,7 @@ aio-georss-gdacs==0.9 aioairq==0.3.2 # homeassistant.components.airzone_cloud -aioairzone-cloud==0.5.5 +aioairzone-cloud==0.6.0 # homeassistant.components.airzone aioairzone==0.8.1 diff --git a/tests/components/airzone_cloud/snapshots/test_diagnostics.ambr b/tests/components/airzone_cloud/snapshots/test_diagnostics.ambr index 31065d68a47..004769a55cb 100644 --- a/tests/components/airzone_cloud/snapshots/test_diagnostics.ambr +++ b/tests/components/airzone_cloud/snapshots/test_diagnostics.ambr @@ -114,6 +114,7 @@ 'installation': 'installation1', 'is-connected': True, 'mode': 3, + 'model': 'Aidoo', 'modes': list([ 1, 2, @@ -156,6 +157,7 @@ 'installation': 'installation1', 'is-connected': True, 'mode': 2, + 'model': 'Aidoo Pro', 'modes': list([ 1, 2, @@ -345,6 +347,7 @@ 'temperature-setpoint-max': 30.0, 'temperature-setpoint-min': 15.0, 'temperature-step': 0.5, + 'user-access': 'admin', 'web-servers': list([ 'webserver1', 'webserver2', @@ -370,10 +373,12 @@ '_id': 'error-id', }), ]), + 'firmware': '3.35', 'id': 'system1', 'installation': 'installation1', 'is-connected': True, 'mode': 2, + 'model': 'c6', 'modes': list([ 2, 3, @@ -494,6 +499,8 @@ 'temperature-setpoint-stop-air': 24.0, 'temperature-setpoint-vent-air': 24.0, 'temperature-step': 0.5, + 'thermostat-fw': '3.52', + 'thermostat-model': 'blueface', 'web-server': 'webserver1', 'ws-connected': True, 'zone': 1, @@ -557,6 +564,10 @@ 'temperature-setpoint-stop-air': 24.0, 'temperature-setpoint-vent-air': 24.0, 'temperature-step': 0.5, + 'thermostat-battery': 54, + 'thermostat-coverage': 76, + 'thermostat-fw': '3.33', + 'thermostat-model': 'thinkradio', 'web-server': 'webserver1', 'ws-connected': True, 'zone': 2, diff --git a/tests/components/airzone_cloud/test_config_flow.py b/tests/components/airzone_cloud/test_config_flow.py index 86a70ced51a..04e253eb494 100644 --- a/tests/components/airzone_cloud/test_config_flow.py +++ b/tests/components/airzone_cloud/test_config_flow.py @@ -15,6 +15,7 @@ from .util import ( GET_INSTALLATION_MOCK, GET_INSTALLATIONS_MOCK, WS_ID, + mock_get_device_config, mock_get_device_status, mock_get_webserver, ) @@ -28,6 +29,10 @@ async def test_form(hass: HomeAssistant) -> None: "homeassistant.components.airzone_cloud.async_setup_entry", return_value=True, ) as mock_setup_entry, + patch( + "homeassistant.components.airzone_cloud.AirzoneCloudApi.api_get_device_config", + side_effect=mock_get_device_config, + ), patch( "homeassistant.components.airzone_cloud.AirzoneCloudApi.api_get_device_status", side_effect=mock_get_device_status, @@ -99,6 +104,10 @@ async def test_installations_list_error(hass: HomeAssistant) -> None: "homeassistant.components.airzone_cloud.async_setup_entry", return_value=True, ), + patch( + "homeassistant.components.airzone_cloud.AirzoneCloudApi.api_get_device_config", + side_effect=mock_get_device_config, + ), patch( "homeassistant.components.airzone_cloud.AirzoneCloudApi.api_get_device_status", side_effect=mock_get_device_status, diff --git a/tests/components/airzone_cloud/test_coordinator.py b/tests/components/airzone_cloud/test_coordinator.py index b4b7afd6086..e2b80e66672 100644 --- a/tests/components/airzone_cloud/test_coordinator.py +++ b/tests/components/airzone_cloud/test_coordinator.py @@ -14,6 +14,7 @@ from .util import ( CONFIG, GET_INSTALLATION_MOCK, GET_INSTALLATIONS_MOCK, + mock_get_device_config, mock_get_device_status, mock_get_webserver, ) @@ -32,6 +33,10 @@ async def test_coordinator_client_connector_error(hass: HomeAssistant) -> None: config_entry.add_to_hass(hass) with ( + patch( + "homeassistant.components.airzone_cloud.AirzoneCloudApi.api_get_device_config", + side_effect=mock_get_device_config, + ) as mock_device_config, patch( "homeassistant.components.airzone_cloud.AirzoneCloudApi.api_get_device_status", side_effect=mock_get_device_status, @@ -56,11 +61,13 @@ async def test_coordinator_client_connector_error(hass: HomeAssistant) -> None: await hass.config_entries.async_setup(config_entry.entry_id) await hass.async_block_till_done() + mock_device_config.assert_called() mock_device_status.assert_called() mock_installation.assert_awaited_once() mock_installations.assert_called_once() mock_webserver.assert_called() + mock_device_config.reset_mock() mock_device_status.reset_mock() mock_installation.reset_mock() mock_installations.reset_mock() diff --git a/tests/components/airzone_cloud/util.py b/tests/components/airzone_cloud/util.py index 6e7dad707f1..3bc10537907 100644 --- a/tests/components/airzone_cloud/util.py +++ b/tests/components/airzone_cloud/util.py @@ -3,8 +3,9 @@ from typing import Any from unittest.mock import patch -from aioairzone_cloud.common import OperationMode +from aioairzone_cloud.common import OperationMode, UserAccessType from aioairzone_cloud.const import ( + API_ACCESS_TYPE, API_ACTIVE, API_AIR_ACTIVE, API_AQ_ACTIVE, @@ -44,6 +45,8 @@ from aioairzone_cloud.const import ( API_POWER, API_POWERFUL_MODE, API_RAD_ACTIVE, + API_RADIO_BATTERY_PERCENT, + API_RADIO_COVERAGE_PERCENT, API_RANGE_MAX_AIR, API_RANGE_MIN_AIR, API_RANGE_SP_MAX_ACS, @@ -79,8 +82,12 @@ from aioairzone_cloud.const import ( API_STAT_SSID, API_STATUS, API_STEP, + API_SYSTEM_FW, API_SYSTEM_NUMBER, + API_SYSTEM_TYPE, API_TANK_TEMP, + API_THERMOSTAT_FW, + API_THERMOSTAT_TYPE, API_TYPE, API_WARNINGS, API_WS_CONNECTED, @@ -184,6 +191,7 @@ GET_INSTALLATIONS_MOCK = { { API_INSTALLATION_ID: CONFIG[CONF_ID], API_NAME: "House", + API_ACCESS_TYPE: UserAccessType.ADMIN, API_WS_IDS: [ WS_ID, WS_ID_AIDOO, @@ -245,6 +253,30 @@ GET_WEBSERVER_MOCK_AIDOO_PRO = { } +def mock_get_device_config(device: Device) -> dict[str, Any]: + """Mock API device config.""" + + if device.get_id() == "system1": + return { + API_SYSTEM_FW: "3.35", + API_SYSTEM_TYPE: "c6", + } + if device.get_id() == "zone1": + return { + API_THERMOSTAT_FW: "3.52", + API_THERMOSTAT_TYPE: "blueface", + } + if device.get_id() == "zone2": + return { + API_THERMOSTAT_FW: "3.33", + API_THERMOSTAT_TYPE: "thinkradio", + API_RADIO_BATTERY_PERCENT: 54, + API_RADIO_COVERAGE_PERCENT: 76, + } + + return {} + + def mock_get_device_status(device: Device) -> dict[str, Any]: """Mock API device status.""" @@ -470,6 +502,10 @@ async def async_init_integration( config_entry.add_to_hass(hass) with ( + patch( + "homeassistant.components.airzone_cloud.AirzoneCloudApi.api_get_device_config", + side_effect=mock_get_device_config, + ), patch( "homeassistant.components.airzone_cloud.AirzoneCloudApi.api_get_device_status", side_effect=mock_get_device_status,