Implement Airzone Cloud Zone climate support (#100792)

* Implement Airzone Cloud Zone climate support

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>

* airzone_cloud: add entity naming

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>

* airzone_cloud: implement requested changes

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>

---------

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
This commit is contained in:
Álvaro Fernández Rojas 2023-09-27 17:20:21 +02:00 committed by GitHub
parent c59404b5bc
commit 3178eac9cc
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 669 additions and 27 deletions

View file

@ -3,6 +3,7 @@
from typing import Any
from unittest.mock import patch
from aioairzone_cloud.common import OperationMode
from aioairzone_cloud.const import (
API_ACTIVE,
API_AZ_AIDOO,
@ -24,8 +25,33 @@ from aioairzone_cloud.const import (
API_IS_CONNECTED,
API_LOCAL_TEMP,
API_META,
API_MODE,
API_MODE_AVAIL,
API_NAME,
API_OLD_ID,
API_POWER,
API_RANGE_MAX_AIR,
API_RANGE_MIN_AIR,
API_RANGE_SP_MAX_AUTO_AIR,
API_RANGE_SP_MAX_COOL_AIR,
API_RANGE_SP_MAX_DRY_AIR,
API_RANGE_SP_MAX_EMERHEAT_AIR,
API_RANGE_SP_MAX_HOT_AIR,
API_RANGE_SP_MAX_STOP_AIR,
API_RANGE_SP_MAX_VENT_AIR,
API_RANGE_SP_MIN_AUTO_AIR,
API_RANGE_SP_MIN_COOL_AIR,
API_RANGE_SP_MIN_DRY_AIR,
API_RANGE_SP_MIN_EMERHEAT_AIR,
API_RANGE_SP_MIN_HOT_AIR,
API_RANGE_SP_MIN_STOP_AIR,
API_RANGE_SP_MIN_VENT_AIR,
API_SP_AIR_AUTO,
API_SP_AIR_COOL,
API_SP_AIR_DRY,
API_SP_AIR_HEAT,
API_SP_AIR_STOP,
API_SP_AIR_VENT,
API_STAT_AP_MAC,
API_STAT_CHANNEL,
API_STAT_QUALITY,
@ -166,12 +192,29 @@ def mock_get_device_status(device: Device) -> dict[str, Any]:
return {
API_ACTIVE: False,
API_ERRORS: [],
API_MODE: OperationMode.HEATING.value,
API_MODE_AVAIL: [
OperationMode.AUTO.value,
OperationMode.COOLING.value,
OperationMode.HEATING.value,
OperationMode.VENTILATION.value,
OperationMode.DRY.value,
],
API_SP_AIR_AUTO: {API_CELSIUS: 22, API_FAH: 72},
API_SP_AIR_COOL: {API_CELSIUS: 22, API_FAH: 72},
API_SP_AIR_HEAT: {API_CELSIUS: 22, API_FAH: 72},
API_RANGE_MAX_AIR: {API_CELSIUS: 30, API_FAH: 86},
API_RANGE_SP_MAX_AUTO_AIR: {API_CELSIUS: 30, API_FAH: 86},
API_RANGE_SP_MAX_COOL_AIR: {API_CELSIUS: 30, API_FAH: 86},
API_RANGE_SP_MAX_HOT_AIR: {API_CELSIUS: 30, API_FAH: 86},
API_RANGE_MIN_AIR: {API_CELSIUS: 15, API_FAH: 59},
API_RANGE_SP_MIN_AUTO_AIR: {API_CELSIUS: 18, API_FAH: 64},
API_RANGE_SP_MIN_COOL_AIR: {API_CELSIUS: 18, API_FAH: 64},
API_RANGE_SP_MIN_HOT_AIR: {API_CELSIUS: 16, API_FAH: 61},
API_POWER: False,
API_IS_CONNECTED: True,
API_WS_CONNECTED: True,
API_LOCAL_TEMP: {
API_CELSIUS: 21,
API_FAH: 70,
},
API_LOCAL_TEMP: {API_CELSIUS: 21, API_FAH: 70},
API_WARNINGS: [],
}
if device.get_id() == "system1":
@ -181,6 +224,13 @@ def mock_get_device_status(device: Device) -> dict[str, Any]:
API_OLD_ID: "error-id",
},
],
API_MODE: OperationMode.COOLING.value,
API_MODE_AVAIL: [
OperationMode.COOLING.value,
OperationMode.HEATING.value,
OperationMode.VENTILATION.value,
OperationMode.DRY.value,
],
API_IS_CONNECTED: True,
API_WS_CONNECTED: True,
API_WARNINGS: [],
@ -189,24 +239,67 @@ def mock_get_device_status(device: Device) -> dict[str, Any]:
return {
API_ACTIVE: True,
API_HUMIDITY: 30,
API_MODE: OperationMode.COOLING.value,
API_MODE_AVAIL: [
OperationMode.COOLING.value,
OperationMode.HEATING.value,
OperationMode.VENTILATION.value,
OperationMode.DRY.value,
],
API_RANGE_MAX_AIR: {API_CELSIUS: 30, API_FAH: 86},
API_RANGE_SP_MAX_COOL_AIR: {API_FAH: 86, API_CELSIUS: 30},
API_RANGE_SP_MAX_DRY_AIR: {API_FAH: 86, API_CELSIUS: 30},
API_RANGE_SP_MAX_EMERHEAT_AIR: {API_CELSIUS: 30, API_FAH: 86},
API_RANGE_SP_MAX_HOT_AIR: {API_CELSIUS: 30, API_FAH: 86},
API_RANGE_SP_MAX_STOP_AIR: {API_FAH: 86, API_CELSIUS: 30},
API_RANGE_SP_MAX_VENT_AIR: {API_FAH: 86, API_CELSIUS: 30},
API_RANGE_MIN_AIR: {API_CELSIUS: 15, API_FAH: 59},
API_RANGE_SP_MIN_COOL_AIR: {API_CELSIUS: 18, API_FAH: 64},
API_RANGE_SP_MIN_DRY_AIR: {API_CELSIUS: 18, API_FAH: 64},
API_RANGE_SP_MIN_EMERHEAT_AIR: {API_FAH: 59, API_CELSIUS: 15},
API_RANGE_SP_MIN_HOT_AIR: {API_FAH: 59, API_CELSIUS: 15},
API_RANGE_SP_MIN_STOP_AIR: {API_FAH: 59, API_CELSIUS: 15},
API_RANGE_SP_MIN_VENT_AIR: {API_FAH: 59, API_CELSIUS: 15},
API_SP_AIR_COOL: {API_CELSIUS: 24, API_FAH: 75},
API_SP_AIR_DRY: {API_CELSIUS: 24, API_FAH: 75},
API_SP_AIR_HEAT: {API_CELSIUS: 20, API_FAH: 68},
API_SP_AIR_VENT: {API_CELSIUS: 24, API_FAH: 75},
API_SP_AIR_STOP: {API_CELSIUS: 24, API_FAH: 75},
API_POWER: True,
API_IS_CONNECTED: True,
API_WS_CONNECTED: True,
API_LOCAL_TEMP: {
API_FAH: 68,
API_CELSIUS: 20,
},
API_LOCAL_TEMP: {API_FAH: 68, API_CELSIUS: 20},
API_WARNINGS: [],
}
if device.get_id() == "zone2":
return {
API_ACTIVE: False,
API_HUMIDITY: 24,
API_MODE: OperationMode.COOLING.value,
API_MODE_AVAIL: [],
API_RANGE_MAX_AIR: {API_CELSIUS: 30, API_FAH: 86},
API_RANGE_SP_MAX_COOL_AIR: {API_FAH: 86, API_CELSIUS: 30},
API_RANGE_SP_MAX_DRY_AIR: {API_FAH: 86, API_CELSIUS: 30},
API_RANGE_SP_MAX_EMERHEAT_AIR: {API_CELSIUS: 30, API_FAH: 86},
API_RANGE_SP_MAX_HOT_AIR: {API_CELSIUS: 30, API_FAH: 86},
API_RANGE_SP_MAX_STOP_AIR: {API_FAH: 86, API_CELSIUS: 30},
API_RANGE_SP_MAX_VENT_AIR: {API_FAH: 86, API_CELSIUS: 30},
API_RANGE_MIN_AIR: {API_CELSIUS: 15, API_FAH: 59},
API_RANGE_SP_MIN_COOL_AIR: {API_CELSIUS: 18, API_FAH: 64},
API_RANGE_SP_MIN_DRY_AIR: {API_CELSIUS: 18, API_FAH: 64},
API_RANGE_SP_MIN_EMERHEAT_AIR: {API_FAH: 59, API_CELSIUS: 15},
API_RANGE_SP_MIN_HOT_AIR: {API_FAH: 59, API_CELSIUS: 15},
API_RANGE_SP_MIN_STOP_AIR: {API_FAH: 59, API_CELSIUS: 15},
API_RANGE_SP_MIN_VENT_AIR: {API_FAH: 59, API_CELSIUS: 15},
API_SP_AIR_COOL: {API_CELSIUS: 24, API_FAH: 75},
API_SP_AIR_DRY: {API_CELSIUS: 24, API_FAH: 75},
API_SP_AIR_HEAT: {API_CELSIUS: 20, API_FAH: 68},
API_SP_AIR_VENT: {API_CELSIUS: 24, API_FAH: 75},
API_SP_AIR_STOP: {API_CELSIUS: 24, API_FAH: 75},
API_POWER: False,
API_IS_CONNECTED: True,
API_WS_CONNECTED: True,
API_LOCAL_TEMP: {
API_FAH: 77,
API_CELSIUS: 25,
},
API_LOCAL_TEMP: {API_FAH: 77, API_CELSIUS: 25},
API_WARNINGS: [],
}
return None