From e9705364a80fff9c18e2e24b0c0dceff0a71df6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= Date: Fri, 12 May 2023 09:07:29 +0200 Subject: [PATCH] Fix Airzone Auto operation mode (#92796) --- homeassistant/components/airzone/climate.py | 30 +++++++------- .../components/airzone/test_binary_sensor.py | 6 +++ tests/components/airzone/test_climate.py | 18 ++++++++ tests/components/airzone/test_sensor.py | 6 +++ tests/components/airzone/util.py | 41 +++++++++++++++++++ 5 files changed, 86 insertions(+), 15 deletions(-) diff --git a/homeassistant/components/airzone/climate.py b/homeassistant/components/airzone/climate.py index c344b1ff49c..1a167f49f78 100644 --- a/homeassistant/components/airzone/climate.py +++ b/homeassistant/components/airzone/climate.py @@ -3,12 +3,12 @@ from __future__ import annotations from typing import Any, Final -from aioairzone.common import OperationMode +from aioairzone.common import OperationAction, OperationMode from aioairzone.const import ( API_MODE, API_ON, API_SET_POINT, - AZD_DEMAND, + AZD_ACTION, AZD_HUMIDITY, AZD_MASTER, AZD_MODE, @@ -39,12 +39,13 @@ from .const import API_TEMPERATURE_STEP, DOMAIN, TEMP_UNIT_LIB_TO_HASS from .coordinator import AirzoneUpdateCoordinator from .entity import AirzoneZoneEntity -HVAC_ACTION_LIB_TO_HASS: Final[dict[OperationMode, HVACAction]] = { - OperationMode.STOP: HVACAction.OFF, - OperationMode.COOLING: HVACAction.COOLING, - OperationMode.HEATING: HVACAction.HEATING, - OperationMode.FAN: HVACAction.FAN, - OperationMode.DRY: HVACAction.DRYING, +HVAC_ACTION_LIB_TO_HASS: Final[dict[OperationAction, HVACAction]] = { + OperationAction.COOLING: HVACAction.COOLING, + OperationAction.DRYING: HVACAction.DRYING, + OperationAction.FAN: HVACAction.FAN, + OperationAction.HEATING: HVACAction.HEATING, + OperationAction.IDLE: HVACAction.IDLE, + OperationAction.OFF: HVACAction.OFF, } HVAC_MODE_LIB_TO_HASS: Final[dict[OperationMode, HVACMode]] = { OperationMode.STOP: HVACMode.OFF, @@ -156,14 +157,13 @@ class AirzoneClimate(AirzoneZoneEntity, ClimateEntity): """Update climate attributes.""" self._attr_current_temperature = self.get_airzone_value(AZD_TEMP) self._attr_current_humidity = self.get_airzone_value(AZD_HUMIDITY) + self._attr_hvac_action = HVAC_ACTION_LIB_TO_HASS[ + self.get_airzone_value(AZD_ACTION) + ] if self.get_airzone_value(AZD_ON): - mode = self.get_airzone_value(AZD_MODE) - self._attr_hvac_mode = HVAC_MODE_LIB_TO_HASS[mode] - if self.get_airzone_value(AZD_DEMAND): - self._attr_hvac_action = HVAC_ACTION_LIB_TO_HASS[mode] - else: - self._attr_hvac_action = HVACAction.IDLE + self._attr_hvac_mode = HVAC_MODE_LIB_TO_HASS[ + self.get_airzone_value(AZD_MODE) + ] else: - self._attr_hvac_action = HVACAction.OFF self._attr_hvac_mode = HVACMode.OFF self._attr_target_temperature = self.get_airzone_value(AZD_TEMP_SET) diff --git a/tests/components/airzone/test_binary_sensor.py b/tests/components/airzone/test_binary_sensor.py index 860bc50e93c..8033871f5c3 100644 --- a/tests/components/airzone/test_binary_sensor.py +++ b/tests/components/airzone/test_binary_sensor.py @@ -84,3 +84,9 @@ async def test_airzone_create_binary_sensors(hass: HomeAssistant) -> None: state = hass.states.get("binary_sensor.airzone_2_1_problem") assert state.state == STATE_OFF + + state = hass.states.get("binary_sensor.dkn_plus_battery_low") + assert state is None + + state = hass.states.get("binary_sensor.dkn_plus_problem") + assert state.state == STATE_OFF diff --git a/tests/components/airzone/test_climate.py b/tests/components/airzone/test_climate.py index 640826bb30f..caf8cfe13bd 100644 --- a/tests/components/airzone/test_climate.py +++ b/tests/components/airzone/test_climate.py @@ -145,6 +145,24 @@ async def test_airzone_create_climates(hass: HomeAssistant) -> None: assert state.attributes.get(ATTR_TARGET_TEMP_STEP) == API_TEMPERATURE_STEP assert state.attributes.get(ATTR_TEMPERATURE) == 19.0 + state = hass.states.get("climate.dkn_plus") + assert state.state == HVACMode.HEAT_COOL + assert state.attributes.get(ATTR_CURRENT_HUMIDITY) is None + assert state.attributes.get(ATTR_CURRENT_TEMPERATURE) == 21.7 + assert state.attributes.get(ATTR_HVAC_ACTION) == HVACAction.COOLING + assert state.attributes.get(ATTR_HVAC_MODES) == [ + HVACMode.FAN_ONLY, + HVACMode.COOL, + HVACMode.HEAT, + HVACMode.DRY, + HVACMode.HEAT_COOL, + HVACMode.OFF, + ] + assert state.attributes.get(ATTR_MAX_TEMP) == 32.2 + assert state.attributes.get(ATTR_MIN_TEMP) == 17.8 + assert state.attributes.get(ATTR_TARGET_TEMP_STEP) == API_TEMPERATURE_STEP + assert state.attributes.get(ATTR_TEMPERATURE) == 22.8 + async def test_airzone_climate_turn_on_off(hass: HomeAssistant) -> None: """Test turning on.""" diff --git a/tests/components/airzone/test_sensor.py b/tests/components/airzone/test_sensor.py index 1e7d335a46f..c72c083039e 100644 --- a/tests/components/airzone/test_sensor.py +++ b/tests/components/airzone/test_sensor.py @@ -52,3 +52,9 @@ async def test_airzone_create_sensors( state = hass.states.get("sensor.airzone_2_1_humidity") assert state.state == "62" + + state = hass.states.get("sensor.dkn_plus_temperature") + assert state.state == "21.7" + + state = hass.states.get("sensor.dkn_plus_humidity") + assert state is None diff --git a/tests/components/airzone/util.py b/tests/components/airzone/util.py index 6277c077c00..bbbe00a431b 100644 --- a/tests/components/airzone/util.py +++ b/tests/components/airzone/util.py @@ -7,10 +7,16 @@ from aioairzone.const import ( API_COLD_ANGLE, API_COLD_STAGE, API_COLD_STAGES, + API_COOL_MAX_TEMP, + API_COOL_MIN_TEMP, + API_COOL_SET_POINT, API_DATA, API_ERRORS, API_FLOOR_DEMAND, API_HEAT_ANGLE, + API_HEAT_MAX_TEMP, + API_HEAT_MIN_TEMP, + API_HEAT_SET_POINT, API_HEAT_STAGE, API_HEAT_STAGES, API_HUMIDITY, @@ -25,6 +31,8 @@ from aioairzone.const import ( API_ROOM_TEMP, API_SET_POINT, API_SLEEP, + API_SPEED, + API_SPEEDS, API_SYSTEM_FIRMWARE, API_SYSTEM_ID, API_SYSTEM_TYPE, @@ -216,6 +224,39 @@ HVAC_MOCK = { }, ] }, + { + API_DATA: [ + { + API_SYSTEM_ID: 3, + API_ZONE_ID: 1, + API_NAME: "DKN Plus", + API_ON: 1, + API_COOL_SET_POINT: 73, + API_COOL_MAX_TEMP: 90, + API_COOL_MIN_TEMP: 64, + API_HEAT_SET_POINT: 77, + API_HEAT_MAX_TEMP: 86, + API_HEAT_MIN_TEMP: 50, + API_MAX_TEMP: 90, + API_MIN_TEMP: 64, + API_SET_POINT: 73, + API_ROOM_TEMP: 71, + API_MODES: [4, 2, 3, 5, 7], + API_MODE: 7, + API_SPEEDS: 5, + API_SPEED: 2, + API_COLD_STAGES: 0, + API_COLD_STAGE: 0, + API_HEAT_STAGES: 0, + API_HEAT_STAGE: 0, + API_HUMIDITY: 0, + API_UNITS: 1, + API_ERRORS: [], + API_AIR_DEMAND: 1, + API_FLOOR_DEMAND: 0, + }, + ] + }, ] }