Handle all three operating modes in Advantage Air climate (#91107)

Co-authored-by: J. Nick Koston <nick@koston.org>
This commit is contained in:
Brett Adams 2023-04-09 09:50:26 +10:00 committed by GitHub
parent 5e2b0b23c9
commit 667a00e7f9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 225 additions and 93 deletions

View file

@ -5,6 +5,8 @@ import logging
from typing import Any
from homeassistant.components.climate import (
ATTR_TARGET_TEMP_HIGH,
ATTR_TARGET_TEMP_LOW,
FAN_AUTO,
FAN_HIGH,
FAN_LOW,
@ -32,18 +34,10 @@ ADVANTAGE_AIR_HVAC_MODES = {
"cool": HVACMode.COOL,
"vent": HVACMode.FAN_ONLY,
"dry": HVACMode.DRY,
"myauto": HVACMode.AUTO,
"myauto": HVACMode.HEAT_COOL,
}
HASS_HVAC_MODES = {v: k for k, v in ADVANTAGE_AIR_HVAC_MODES.items()}
AC_HVAC_MODES = [
HVACMode.OFF,
HVACMode.COOL,
HVACMode.HEAT,
HVACMode.FAN_ONLY,
HVACMode.DRY,
]
ADVANTAGE_AIR_FAN_MODES = {
"autoAA": FAN_AUTO,
"low": FAN_LOW,
@ -53,7 +47,14 @@ ADVANTAGE_AIR_FAN_MODES = {
HASS_FAN_MODES = {v: k for k, v in ADVANTAGE_AIR_FAN_MODES.items()}
FAN_SPEEDS = {FAN_LOW: 30, FAN_MEDIUM: 60, FAN_HIGH: 100}
ZONE_HVAC_MODES = [HVACMode.OFF, HVACMode.HEAT_COOL]
ADVANTAGE_AIR_AUTOFAN = "aaAutoFanModeEnabled"
ADVANTAGE_AIR_MYZONE = "MyZone"
ADVANTAGE_AIR_MYAUTO = "MyAuto"
ADVANTAGE_AIR_MYAUTO_ENABLED = "myAutoModeEnabled"
ADVANTAGE_AIR_MYTEMP = "MyTemp"
ADVANTAGE_AIR_MYTEMP_ENABLED = "climateControlModeEnabled"
ADVANTAGE_AIR_HEAT_TARGET = "myAutoHeatTargetTemp"
ADVANTAGE_AIR_COOL_TARGET = "myAutoCoolTargetTemp"
PARALLEL_UPDATES = 0
@ -75,7 +76,7 @@ async def async_setup_entry(
entities.append(AdvantageAirAC(instance, ac_key))
for zone_key, zone in ac_device["zones"].items():
# Only add zone climate control when zone is in temperature control
if zone["type"] != 0:
if zone["type"] > 0:
entities.append(AdvantageAirZone(instance, ac_key, zone_key))
async_add_entities(entities)
@ -83,24 +84,56 @@ async def async_setup_entry(
class AdvantageAirAC(AdvantageAirAcEntity, ClimateEntity):
"""AdvantageAir AC unit."""
_attr_fan_modes = [FAN_LOW, FAN_MEDIUM, FAN_HIGH]
_attr_temperature_unit = UnitOfTemperature.CELSIUS
_attr_target_temperature_step = PRECISION_WHOLE
_attr_max_temp = 32
_attr_min_temp = 16
_attr_fan_modes = [FAN_AUTO, FAN_LOW, FAN_MEDIUM, FAN_HIGH]
_attr_hvac_modes = AC_HVAC_MODES
_attr_supported_features = (
ClimateEntityFeature.TARGET_TEMPERATURE | ClimateEntityFeature.FAN_MODE
)
def __init__(self, instance: dict[str, Any], ac_key: str) -> None:
"""Initialize an AdvantageAir AC unit."""
super().__init__(instance, ac_key)
if self._ac.get("myAutoModeEnabled"):
self._attr_hvac_modes = AC_HVAC_MODES + [HVACMode.AUTO]
# Set supported features and HVAC modes based on current operating mode
if self._ac.get(ADVANTAGE_AIR_MYAUTO_ENABLED):
# MyAuto
self._attr_supported_features = (
ClimateEntityFeature.FAN_MODE
| ClimateEntityFeature.TARGET_TEMPERATURE
| ClimateEntityFeature.TARGET_TEMPERATURE_RANGE
)
self._attr_hvac_modes = [
HVACMode.OFF,
HVACMode.COOL,
HVACMode.HEAT,
HVACMode.FAN_ONLY,
HVACMode.DRY,
HVACMode.HEAT_COOL,
]
elif self._ac.get(ADVANTAGE_AIR_MYTEMP_ENABLED):
# MyTemp
self._attr_supported_features = ClimateEntityFeature.FAN_MODE
self._attr_hvac_modes = [HVACMode.OFF, HVACMode.COOL, HVACMode.HEAT]
else:
# MyZone
self._attr_supported_features = (
ClimateEntityFeature.FAN_MODE | ClimateEntityFeature.TARGET_TEMPERATURE
)
self._attr_hvac_modes = [
HVACMode.OFF,
HVACMode.COOL,
HVACMode.HEAT,
HVACMode.FAN_ONLY,
HVACMode.DRY,
]
# Add "ezfan" mode if supported
if self._ac.get(ADVANTAGE_AIR_AUTOFAN):
self._attr_fan_modes += [FAN_AUTO]
@property
def target_temperature(self) -> float:
def target_temperature(self) -> float | None:
"""Return the current target temperature."""
return self._ac["setTemp"]
@ -116,6 +149,16 @@ class AdvantageAirAC(AdvantageAirAcEntity, ClimateEntity):
"""Return the current fan modes."""
return ADVANTAGE_AIR_FAN_MODES.get(self._ac["fan"])
@property
def target_temperature_high(self) -> float | None:
"""Return the temperature cool mode is enabled."""
return self._ac.get(ADVANTAGE_AIR_COOL_TARGET)
@property
def target_temperature_low(self) -> float | None:
"""Return the temperature heat mode is enabled."""
return self._ac.get(ADVANTAGE_AIR_HEAT_TARGET)
async def async_turn_on(self) -> None:
"""Set the HVAC State to on."""
await self.aircon(
@ -166,27 +209,37 @@ class AdvantageAirAC(AdvantageAirAcEntity, ClimateEntity):
async def async_set_temperature(self, **kwargs: Any) -> None:
"""Set the Temperature."""
temp = kwargs.get(ATTR_TEMPERATURE)
await self.aircon({self.ac_key: {"info": {"setTemp": temp}}})
if ATTR_TEMPERATURE in kwargs:
await self.aircon(
{self.ac_key: {"info": {"setTemp": kwargs[ATTR_TEMPERATURE]}}}
)
if ATTR_TARGET_TEMP_LOW in kwargs and ATTR_TARGET_TEMP_HIGH in kwargs:
await self.aircon(
{
self.ac_key: {
"info": {
ADVANTAGE_AIR_COOL_TARGET: kwargs[ATTR_TARGET_TEMP_HIGH],
ADVANTAGE_AIR_HEAT_TARGET: kwargs[ATTR_TARGET_TEMP_LOW],
}
}
}
)
class AdvantageAirZone(AdvantageAirZoneEntity, ClimateEntity):
"""AdvantageAir Zone control."""
"""AdvantageAir MyTemp Zone control."""
_attr_hvac_modes = [HVACMode.OFF, HVACMode.HEAT_COOL]
_attr_supported_features = ClimateEntityFeature.TARGET_TEMPERATURE
_attr_temperature_unit = UnitOfTemperature.CELSIUS
_attr_target_temperature_step = PRECISION_WHOLE
_attr_max_temp = 32
_attr_min_temp = 16
_attr_hvac_modes = ZONE_HVAC_MODES
_attr_supported_features = ClimateEntityFeature.TARGET_TEMPERATURE
def __init__(self, instance: dict[str, Any], ac_key: str, zone_key: str) -> None:
"""Initialize an AdvantageAir Zone control."""
super().__init__(instance, ac_key, zone_key)
self._attr_name = self._zone["name"]
self._attr_unique_id = (
f'{self.coordinator.data["system"]["rid"]}-{ac_key}-{zone_key}'
)
@property
def hvac_mode(self) -> HVACMode:
@ -196,7 +249,7 @@ class AdvantageAirZone(AdvantageAirZoneEntity, ClimateEntity):
return HVACMode.OFF
@property
def current_temperature(self) -> float:
def current_temperature(self) -> float | None:
"""Return the current temperature."""
return self._zone["measuredTemp"]

View file

@ -2,6 +2,8 @@
"aircons": {
"ac1": {
"info": {
"aaAutoFanModeEnabled": false,
"climateControlModeEnabled": false,
"climateControlModeIsRunning": false,
"countDownToOff": 10,
"countDownToOn": 0,
@ -9,8 +11,10 @@
"filterCleanStatus": 0,
"freshAirStatus": "off",
"mode": "vent",
"myAutoModeEnabled": false,
"myAutoModeIsRunning": false,
"myZone": 1,
"name": "AC One",
"name": "myzone",
"setTemp": 24,
"state": "on"
},
@ -94,20 +98,76 @@
},
"ac2": {
"info": {
"aaAutoFanModeEnabled": true,
"climateControlModeEnabled": true,
"climateControlModeIsRunning": false,
"countDownToOff": 0,
"countDownToOn": 20,
"fan": "low",
"fan": "autoAA",
"filterCleanStatus": 1,
"freshAirStatus": "none",
"mode": "cool",
"myAutoModeCurrentSetMode": "cool",
"myAutoModeEnabled": false,
"myAutoModeIsRunning": false,
"myZone": 1,
"name": "mytemp",
"setTemp": 24,
"state": "off"
},
"zones": {
"z01": {
"error": 0,
"maxDamper": 100,
"measuredTemp": 25,
"minDamper": 0,
"motion": 20,
"motionConfig": 2,
"name": "Zone A",
"number": 1,
"rssi": 40,
"setTemp": 24,
"state": "open",
"type": 1,
"value": 100
},
"z02": {
"error": 0,
"maxDamper": 100,
"measuredTemp": 26,
"minDamper": 0,
"motion": 21,
"motionConfig": 2,
"name": "Zone B",
"number": 2,
"rssi": 10,
"setTemp": 23,
"state": "open",
"type": 1,
"value": 50
}
}
},
"ac3": {
"info": {
"aaAutoFanModeEnabled": true,
"climateControlModeEnabled": false,
"climateControlModeIsRunning": false,
"countDownToOff": 0,
"countDownToOn": 0,
"fan": "autoAA",
"filterCleanStatus": 1,
"freshAirStatus": "none",
"mode": "myauto",
"myAutoModeCurrentSetMode": "cool",
"myAutoModeEnabled": true,
"myAutoModeIsRunning": true,
"myAutoCoolTargetTemp": 24,
"myAutoHeatTargetTemp": 20,
"myZone": 0,
"name": "AC Two",
"name": "myauto",
"setTemp": 24,
"state": "off"
"state": "on"
},
"zones": {
"z01": {
@ -117,7 +177,7 @@
"minDamper": 0,
"motion": 0,
"motionConfig": 0,
"name": "Zone open without sensor",
"name": "Zone Y",
"number": 1,
"rssi": 0,
"setTemp": 24,
@ -132,7 +192,7 @@
"minDamper": 0,
"motion": 0,
"motionConfig": 0,
"name": "Zone closed without sensor",
"name": "Zone Z",
"number": 2,
"rssi": 0,
"setTemp": 24,

View file

@ -39,7 +39,7 @@ async def test_binary_sensor_async_setup_entry(
assert len(aioclient_mock.mock_calls) == 1
# Test First Air Filter
entity_id = "binary_sensor.ac_one_filter"
entity_id = "binary_sensor.myzone_filter"
state = hass.states.get(entity_id)
assert state
assert state.state == STATE_OFF
@ -49,7 +49,7 @@ async def test_binary_sensor_async_setup_entry(
assert entry.unique_id == "uniqueid-ac1-filter"
# Test Second Air Filter
entity_id = "binary_sensor.ac_two_filter"
entity_id = "binary_sensor.mytemp_filter"
state = hass.states.get(entity_id)
assert state
assert state.state == STATE_ON
@ -59,7 +59,7 @@ async def test_binary_sensor_async_setup_entry(
assert entry.unique_id == "uniqueid-ac2-filter"
# Test First Motion Sensor
entity_id = "binary_sensor.ac_one_zone_open_with_sensor_motion"
entity_id = "binary_sensor.myzone_zone_open_with_sensor_motion"
state = hass.states.get(entity_id)
assert state
assert state.state == STATE_ON
@ -69,7 +69,7 @@ async def test_binary_sensor_async_setup_entry(
assert entry.unique_id == "uniqueid-ac1-z01-motion"
# Test Second Motion Sensor
entity_id = "binary_sensor.ac_one_zone_closed_with_sensor_motion"
entity_id = "binary_sensor.myzone_zone_closed_with_sensor_motion"
state = hass.states.get(entity_id)
assert state
assert state.state == STATE_OFF
@ -79,7 +79,7 @@ async def test_binary_sensor_async_setup_entry(
assert entry.unique_id == "uniqueid-ac1-z02-motion"
# Test First MyZone Sensor (disabled by default)
entity_id = "binary_sensor.ac_one_zone_open_with_sensor_myzone"
entity_id = "binary_sensor.myzone_zone_open_with_sensor_myzone"
assert not hass.states.get(entity_id)
@ -101,7 +101,7 @@ async def test_binary_sensor_async_setup_entry(
assert entry.unique_id == "uniqueid-ac1-z01-myzone"
# Test Second Motion Sensor (disabled by default)
entity_id = "binary_sensor.ac_one_zone_closed_with_sensor_myzone"
entity_id = "binary_sensor.myzone_zone_closed_with_sensor_myzone"
assert not hass.states.get(entity_id)

View file

@ -4,6 +4,8 @@ from json import loads
import pytest
from homeassistant.components.advantage_air.climate import (
ADVANTAGE_AIR_COOL_TARGET,
ADVANTAGE_AIR_HEAT_TARGET,
HASS_FAN_MODES,
HASS_HVAC_MODES,
)
@ -14,8 +16,13 @@ from homeassistant.components.advantage_air.const import (
ADVANTAGE_AIR_STATE_OPEN,
)
from homeassistant.components.climate import (
ATTR_CURRENT_TEMPERATURE,
ATTR_FAN_MODE,
ATTR_HVAC_MODE,
ATTR_MAX_TEMP,
ATTR_MIN_TEMP,
ATTR_TARGET_TEMP_HIGH,
ATTR_TARGET_TEMP_LOW,
DOMAIN as CLIMATE_DOMAIN,
FAN_LOW,
SERVICE_SET_FAN_MODE,
@ -58,20 +65,21 @@ async def test_climate_async_setup_entry(
registry = er.async_get(hass)
# Test Main Climate Entity
entity_id = "climate.ac_one"
# Test MyZone Climate Entity
entity_id = "climate.myzone"
state = hass.states.get(entity_id)
assert state
assert state.state == HVACMode.FAN_ONLY
assert state.attributes.get("min_temp") == 16
assert state.attributes.get("max_temp") == 32
assert state.attributes.get("temperature") == 24
assert state.attributes.get("current_temperature") is None
assert state.attributes.get(ATTR_MIN_TEMP) == 16
assert state.attributes.get(ATTR_MAX_TEMP) == 32
assert state.attributes.get(ATTR_TEMPERATURE) == 24
assert state.attributes.get(ATTR_CURRENT_TEMPERATURE) is None
entry = registry.async_get(entity_id)
assert entry
assert entry.unique_id == "uniqueid-ac1"
# Test setting HVAC Mode
await hass.services.async_call(
CLIMATE_DOMAIN,
SERVICE_SET_HVAC_MODE,
@ -86,6 +94,7 @@ async def test_climate_async_setup_entry(
assert aioclient_mock.mock_calls[-1][0] == "GET"
assert aioclient_mock.mock_calls[-1][1].path == "/getSystemData"
# Test Turning Off with HVAC Mode
await hass.services.async_call(
CLIMATE_DOMAIN,
SERVICE_SET_HVAC_MODE,
@ -99,6 +108,7 @@ async def test_climate_async_setup_entry(
assert aioclient_mock.mock_calls[-1][0] == "GET"
assert aioclient_mock.mock_calls[-1][1].path == "/getSystemData"
# Test changing Fan Mode
await hass.services.async_call(
CLIMATE_DOMAIN,
SERVICE_SET_FAN_MODE,
@ -112,6 +122,7 @@ async def test_climate_async_setup_entry(
assert aioclient_mock.mock_calls[-1][0] == "GET"
assert aioclient_mock.mock_calls[-1][1].path == "/getSystemData"
# Test changing Temperature
await hass.services.async_call(
CLIMATE_DOMAIN,
SERVICE_SET_TEMPERATURE,
@ -125,6 +136,7 @@ async def test_climate_async_setup_entry(
assert aioclient_mock.mock_calls[-1][0] == "GET"
assert aioclient_mock.mock_calls[-1][1].path == "/getSystemData"
# Test Turning On
await hass.services.async_call(
CLIMATE_DOMAIN,
SERVICE_TURN_OFF,
@ -138,6 +150,7 @@ async def test_climate_async_setup_entry(
assert aioclient_mock.mock_calls[-1][0] == "GET"
assert aioclient_mock.mock_calls[-1][1].path == "/getSystemData"
# Test Turning Off
await hass.services.async_call(
CLIMATE_DOMAIN,
SERVICE_TURN_ON,
@ -152,24 +165,26 @@ async def test_climate_async_setup_entry(
assert aioclient_mock.mock_calls[-1][1].path == "/getSystemData"
# Test Climate Zone Entity
entity_id = "climate.ac_one_zone_open_with_sensor"
entity_id = "climate.myzone_zone_open_with_sensor"
state = hass.states.get(entity_id)
assert state
assert state.attributes.get("min_temp") == 16
assert state.attributes.get("max_temp") == 32
assert state.attributes.get("temperature") == 24
assert state.attributes.get("current_temperature") == 25
assert state.attributes.get(ATTR_MIN_TEMP) == 16
assert state.attributes.get(ATTR_MAX_TEMP) == 32
assert state.attributes.get(ATTR_TEMPERATURE) == 24
assert state.attributes.get(ATTR_CURRENT_TEMPERATURE) == 25
entry = registry.async_get(entity_id)
assert entry
assert entry.unique_id == "uniqueid-ac1-z01"
# Test Climate Zone On
await hass.services.async_call(
CLIMATE_DOMAIN,
SERVICE_SET_HVAC_MODE,
{ATTR_ENTITY_ID: [entity_id], ATTR_HVAC_MODE: HVACMode.FAN_ONLY},
blocking=True,
)
assert aioclient_mock.mock_calls[-2][0] == "GET"
assert aioclient_mock.mock_calls[-2][1].path == "/setAircon"
data = loads(aioclient_mock.mock_calls[-2][1].query["json"])
@ -178,12 +193,14 @@ async def test_climate_async_setup_entry(
assert aioclient_mock.mock_calls[-1][0] == "GET"
assert aioclient_mock.mock_calls[-1][1].path == "/getSystemData"
# Test Climate Zone Off
await hass.services.async_call(
CLIMATE_DOMAIN,
SERVICE_SET_HVAC_MODE,
{ATTR_ENTITY_ID: [entity_id], ATTR_HVAC_MODE: HVACMode.OFF},
blocking=True,
)
assert aioclient_mock.mock_calls[-2][0] == "GET"
assert aioclient_mock.mock_calls[-2][1].path == "/setAircon"
data = loads(aioclient_mock.mock_calls[-2][1].query["json"])
@ -197,36 +214,38 @@ async def test_climate_async_setup_entry(
{ATTR_ENTITY_ID: [entity_id], ATTR_TEMPERATURE: 25},
blocking=True,
)
assert aioclient_mock.mock_calls[-2][0] == "GET"
assert aioclient_mock.mock_calls[-2][1].path == "/setAircon"
assert aioclient_mock.mock_calls[-1][0] == "GET"
assert aioclient_mock.mock_calls[-1][1].path == "/getSystemData"
await hass.services.async_call(
CLIMATE_DOMAIN,
SERVICE_TURN_OFF,
{ATTR_ENTITY_ID: [entity_id]},
blocking=True,
)
assert aioclient_mock.mock_calls[-2][0] == "GET"
assert aioclient_mock.mock_calls[-2][1].path == "/setAircon"
data = loads(aioclient_mock.mock_calls[-2][1].query["json"])
assert data["ac1"]["zones"]["z01"]["state"] == ADVANTAGE_AIR_STATE_CLOSE
assert aioclient_mock.mock_calls[-1][0] == "GET"
assert aioclient_mock.mock_calls[-1][1].path == "/getSystemData"
# Test MyAuto Climate Entity
entity_id = "climate.myauto"
state = hass.states.get(entity_id)
assert state
assert state.attributes.get(ATTR_TARGET_TEMP_LOW) == 20
assert state.attributes.get(ATTR_TARGET_TEMP_HIGH) == 24
entry = registry.async_get(entity_id)
assert entry
assert entry.unique_id == "uniqueid-ac3"
await hass.services.async_call(
CLIMATE_DOMAIN,
SERVICE_TURN_ON,
{ATTR_ENTITY_ID: [entity_id]},
SERVICE_SET_TEMPERATURE,
{
ATTR_ENTITY_ID: [entity_id],
ATTR_TARGET_TEMP_LOW: 21,
ATTR_TARGET_TEMP_HIGH: 23,
},
blocking=True,
)
assert aioclient_mock.mock_calls[-2][0] == "GET"
assert aioclient_mock.mock_calls[-2][1].path == "/setAircon"
data = loads(aioclient_mock.mock_calls[-2][1].query["json"])
assert data["ac1"]["zones"]["z01"]["state"] == ADVANTAGE_AIR_STATE_OPEN
assert aioclient_mock.mock_calls[-1][0] == "GET"
assert aioclient_mock.mock_calls[-1][1].path == "/getSystemData"
assert data["ac3"]["info"][ADVANTAGE_AIR_HEAT_TARGET] == 21
assert data["ac3"]["info"][ADVANTAGE_AIR_COOL_TARGET] == 23
async def test_climate_async_failed_update(
@ -248,7 +267,7 @@ async def test_climate_async_failed_update(
await hass.services.async_call(
CLIMATE_DOMAIN,
SERVICE_SET_TEMPERATURE,
{ATTR_ENTITY_ID: ["climate.ac_one"], ATTR_TEMPERATURE: 25},
{ATTR_ENTITY_ID: ["climate.myzone"], ATTR_TEMPERATURE: 25},
blocking=True,
)
assert aioclient_mock.mock_calls[-1][0] == "GET"

View file

@ -49,7 +49,7 @@ async def test_cover_async_setup_entry(
assert len(aioclient_mock.mock_calls) == 1
# Test Cover Zone Entity
entity_id = "cover.ac_two_zone_open_without_sensor"
entity_id = "cover.myauto_zone_y"
state = hass.states.get(entity_id)
assert state
assert state.state == STATE_OPEN
@ -58,7 +58,7 @@ async def test_cover_async_setup_entry(
entry = registry.async_get(entity_id)
assert entry
assert entry.unique_id == "uniqueid-ac2-z01"
assert entry.unique_id == "uniqueid-ac3-z01"
await hass.services.async_call(
COVER_DOMAIN,
@ -70,7 +70,7 @@ async def test_cover_async_setup_entry(
assert aioclient_mock.mock_calls[-2][0] == "GET"
assert aioclient_mock.mock_calls[-2][1].path == "/setAircon"
data = loads(aioclient_mock.mock_calls[-2][1].query["json"])
assert data["ac2"]["zones"]["z01"]["state"] == ADVANTAGE_AIR_STATE_CLOSE
assert data["ac3"]["zones"]["z01"]["state"] == ADVANTAGE_AIR_STATE_CLOSE
assert aioclient_mock.mock_calls[-1][0] == "GET"
assert aioclient_mock.mock_calls[-1][1].path == "/getSystemData"
@ -84,8 +84,8 @@ async def test_cover_async_setup_entry(
assert aioclient_mock.mock_calls[-2][0] == "GET"
assert aioclient_mock.mock_calls[-2][1].path == "/setAircon"
data = loads(aioclient_mock.mock_calls[-2][1].query["json"])
assert data["ac2"]["zones"]["z01"]["state"] == ADVANTAGE_AIR_STATE_OPEN
assert data["ac2"]["zones"]["z01"]["value"] == 100
assert data["ac3"]["zones"]["z01"]["state"] == ADVANTAGE_AIR_STATE_OPEN
assert data["ac3"]["zones"]["z01"]["value"] == 100
assert aioclient_mock.mock_calls[-1][0] == "GET"
assert aioclient_mock.mock_calls[-1][1].path == "/getSystemData"
@ -99,7 +99,7 @@ async def test_cover_async_setup_entry(
assert aioclient_mock.mock_calls[-2][0] == "GET"
assert aioclient_mock.mock_calls[-2][1].path == "/setAircon"
data = loads(aioclient_mock.mock_calls[-2][1].query["json"])
assert data["ac2"]["zones"]["z01"]["value"] == 50
assert data["ac3"]["zones"]["z01"]["value"] == 50
assert aioclient_mock.mock_calls[-1][0] == "GET"
assert aioclient_mock.mock_calls[-1][1].path == "/getSystemData"
@ -113,7 +113,7 @@ async def test_cover_async_setup_entry(
assert aioclient_mock.mock_calls[-2][0] == "GET"
assert aioclient_mock.mock_calls[-2][1].path == "/setAircon"
data = loads(aioclient_mock.mock_calls[-2][1].query["json"])
assert data["ac2"]["zones"]["z01"]["state"] == ADVANTAGE_AIR_STATE_CLOSE
assert data["ac3"]["zones"]["z01"]["state"] == ADVANTAGE_AIR_STATE_CLOSE
assert aioclient_mock.mock_calls[-1][0] == "GET"
assert aioclient_mock.mock_calls[-1][1].path == "/getSystemData"
@ -123,28 +123,28 @@ async def test_cover_async_setup_entry(
SERVICE_CLOSE_COVER,
{
ATTR_ENTITY_ID: [
"cover.ac_two_zone_open_without_sensor",
"cover.ac_two_zone_closed_without_sensor",
"cover.myauto_zone_y",
"cover.myauto_zone_z",
]
},
blocking=True,
)
assert len(aioclient_mock.mock_calls) == 11
data = loads(aioclient_mock.mock_calls[-2][1].query["json"])
assert data["ac2"]["zones"]["z01"]["state"] == ADVANTAGE_AIR_STATE_CLOSE
assert data["ac2"]["zones"]["z02"]["state"] == ADVANTAGE_AIR_STATE_CLOSE
assert data["ac3"]["zones"]["z01"]["state"] == ADVANTAGE_AIR_STATE_CLOSE
assert data["ac3"]["zones"]["z02"]["state"] == ADVANTAGE_AIR_STATE_CLOSE
await hass.services.async_call(
COVER_DOMAIN,
SERVICE_OPEN_COVER,
{
ATTR_ENTITY_ID: [
"cover.ac_two_zone_open_without_sensor",
"cover.ac_two_zone_closed_without_sensor",
"cover.myauto_zone_y",
"cover.myauto_zone_z",
]
},
blocking=True,
)
assert len(aioclient_mock.mock_calls) == 13
data = loads(aioclient_mock.mock_calls[-2][1].query["json"])
assert data["ac2"]["zones"]["z01"]["state"] == ADVANTAGE_AIR_STATE_OPEN
assert data["ac2"]["zones"]["z02"]["state"] == ADVANTAGE_AIR_STATE_OPEN
assert data["ac3"]["zones"]["z01"]["state"] == ADVANTAGE_AIR_STATE_OPEN
assert data["ac3"]["zones"]["z02"]["state"] == ADVANTAGE_AIR_STATE_OPEN

View file

@ -42,7 +42,7 @@ async def test_select_async_setup_entry(
assert len(aioclient_mock.mock_calls) == 1
# Test MyZone Select Entity
entity_id = "select.ac_one_myzone"
entity_id = "select.myzone_myzone"
state = hass.states.get(entity_id)
assert state
assert state.state == "Zone open with Sensor"

View file

@ -45,7 +45,7 @@ async def test_sensor_platform(
assert len(aioclient_mock.mock_calls) == 1
# Test First TimeToOn Sensor
entity_id = "sensor.ac_one_time_to_on"
entity_id = "sensor.myzone_time_to_on"
state = hass.states.get(entity_id)
assert state
assert int(state.state) == 0
@ -70,7 +70,7 @@ async def test_sensor_platform(
assert aioclient_mock.mock_calls[-1][1].path == "/getSystemData"
# Test First TimeToOff Sensor
entity_id = "sensor.ac_one_time_to_off"
entity_id = "sensor.myzone_time_to_off"
state = hass.states.get(entity_id)
assert state
assert int(state.state) == 10
@ -95,7 +95,7 @@ async def test_sensor_platform(
assert aioclient_mock.mock_calls[-1][1].path == "/getSystemData"
# Test First Zone Vent Sensor
entity_id = "sensor.ac_one_zone_open_with_sensor_vent"
entity_id = "sensor.myzone_zone_open_with_sensor_vent"
state = hass.states.get(entity_id)
assert state
assert int(state.state) == 100
@ -105,7 +105,7 @@ async def test_sensor_platform(
assert entry.unique_id == "uniqueid-ac1-z01-vent"
# Test Second Zone Vent Sensor
entity_id = "sensor.ac_one_zone_closed_with_sensor_vent"
entity_id = "sensor.myzone_zone_closed_with_sensor_vent"
state = hass.states.get(entity_id)
assert state
assert int(state.state) == 0
@ -115,7 +115,7 @@ async def test_sensor_platform(
assert entry.unique_id == "uniqueid-ac1-z02-vent"
# Test First Zone Signal Sensor
entity_id = "sensor.ac_one_zone_open_with_sensor_signal"
entity_id = "sensor.myzone_zone_open_with_sensor_signal"
state = hass.states.get(entity_id)
assert state
assert int(state.state) == 40
@ -125,7 +125,7 @@ async def test_sensor_platform(
assert entry.unique_id == "uniqueid-ac1-z01-signal"
# Test Second Zone Signal Sensor
entity_id = "sensor.ac_one_zone_closed_with_sensor_signal"
entity_id = "sensor.myzone_zone_closed_with_sensor_signal"
state = hass.states.get(entity_id)
assert state
assert int(state.state) == 10
@ -135,7 +135,7 @@ async def test_sensor_platform(
assert entry.unique_id == "uniqueid-ac1-z02-signal"
# Test First Zone Temp Sensor (disabled by default)
entity_id = "sensor.ac_one_zone_open_with_sensor_temperature"
entity_id = "sensor.myzone_zone_open_with_sensor_temperature"
assert not hass.states.get(entity_id)

View file

@ -46,7 +46,7 @@ async def test_cover_async_setup_entry(
assert len(aioclient_mock.mock_calls) == 1
# Test Switch Entity
entity_id = "switch.ac_one_fresh_air"
entity_id = "switch.myzone_fresh_air"
state = hass.states.get(entity_id)
assert state
assert state.state == STATE_OFF