Fix Airzone Auto operation mode (#92796)
This commit is contained in:
parent
809f394ff5
commit
e9705364a8
5 changed files with 86 additions and 15 deletions
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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."""
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
},
|
||||
]
|
||||
},
|
||||
]
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue