344 lines
9.9 KiB
Python
344 lines
9.9 KiB
Python
"""The climate tests for the Airzone platform."""
|
|
|
|
from unittest.mock import patch
|
|
|
|
from aioairzone.common import OperationMode
|
|
from aioairzone.const import (
|
|
API_DATA,
|
|
API_MODE,
|
|
API_ON,
|
|
API_SET_POINT,
|
|
API_SYSTEM_ID,
|
|
API_ZONE_ID,
|
|
)
|
|
from aioairzone.exceptions import AirzoneError
|
|
import pytest
|
|
|
|
from homeassistant.components.airzone.const import API_TEMPERATURE_STEP
|
|
from homeassistant.components.climate.const import (
|
|
ATTR_CURRENT_HUMIDITY,
|
|
ATTR_CURRENT_TEMPERATURE,
|
|
ATTR_HVAC_ACTION,
|
|
ATTR_HVAC_MODE,
|
|
ATTR_HVAC_MODES,
|
|
ATTR_MAX_TEMP,
|
|
ATTR_MIN_TEMP,
|
|
ATTR_TARGET_TEMP_STEP,
|
|
CURRENT_HVAC_HEAT,
|
|
CURRENT_HVAC_IDLE,
|
|
CURRENT_HVAC_OFF,
|
|
DOMAIN as CLIMATE_DOMAIN,
|
|
HVAC_MODE_COOL,
|
|
HVAC_MODE_DRY,
|
|
HVAC_MODE_FAN_ONLY,
|
|
HVAC_MODE_HEAT,
|
|
HVAC_MODE_OFF,
|
|
SERVICE_SET_HVAC_MODE,
|
|
SERVICE_SET_TEMPERATURE,
|
|
)
|
|
from homeassistant.const import (
|
|
ATTR_ENTITY_ID,
|
|
ATTR_TEMPERATURE,
|
|
SERVICE_TURN_OFF,
|
|
SERVICE_TURN_ON,
|
|
)
|
|
from homeassistant.core import HomeAssistant
|
|
from homeassistant.exceptions import HomeAssistantError
|
|
|
|
from .util import async_init_integration
|
|
|
|
|
|
async def test_airzone_create_climates(hass: HomeAssistant) -> None:
|
|
"""Test creation of climates."""
|
|
|
|
await async_init_integration(hass)
|
|
|
|
state = hass.states.get("climate.despacho")
|
|
assert state.state == HVAC_MODE_OFF
|
|
assert state.attributes.get(ATTR_CURRENT_HUMIDITY) == 36
|
|
assert state.attributes.get(ATTR_CURRENT_TEMPERATURE) == 21.2
|
|
assert state.attributes.get(ATTR_HVAC_ACTION) == CURRENT_HVAC_OFF
|
|
assert state.attributes.get(ATTR_HVAC_MODES) == [
|
|
HVAC_MODE_OFF,
|
|
HVAC_MODE_FAN_ONLY,
|
|
HVAC_MODE_COOL,
|
|
HVAC_MODE_HEAT,
|
|
HVAC_MODE_DRY,
|
|
]
|
|
assert state.attributes.get(ATTR_MAX_TEMP) == 30
|
|
assert state.attributes.get(ATTR_MIN_TEMP) == 15
|
|
assert state.attributes.get(ATTR_TARGET_TEMP_STEP) == API_TEMPERATURE_STEP
|
|
assert state.attributes.get(ATTR_TEMPERATURE) == 19.4
|
|
|
|
state = hass.states.get("climate.dorm_1")
|
|
assert state.state == HVAC_MODE_HEAT
|
|
assert state.attributes.get(ATTR_CURRENT_HUMIDITY) == 35
|
|
assert state.attributes.get(ATTR_CURRENT_TEMPERATURE) == 20.8
|
|
assert state.attributes.get(ATTR_HVAC_ACTION) == CURRENT_HVAC_IDLE
|
|
assert state.attributes.get(ATTR_HVAC_MODES) == [
|
|
HVAC_MODE_OFF,
|
|
HVAC_MODE_FAN_ONLY,
|
|
HVAC_MODE_COOL,
|
|
HVAC_MODE_HEAT,
|
|
HVAC_MODE_DRY,
|
|
]
|
|
assert state.attributes.get(ATTR_MAX_TEMP) == 30
|
|
assert state.attributes.get(ATTR_MIN_TEMP) == 15
|
|
assert state.attributes.get(ATTR_TARGET_TEMP_STEP) == API_TEMPERATURE_STEP
|
|
assert state.attributes.get(ATTR_TEMPERATURE) == 19.3
|
|
|
|
state = hass.states.get("climate.dorm_2")
|
|
assert state.state == HVAC_MODE_OFF
|
|
assert state.attributes.get(ATTR_CURRENT_HUMIDITY) == 40
|
|
assert state.attributes.get(ATTR_CURRENT_TEMPERATURE) == 20.5
|
|
assert state.attributes.get(ATTR_HVAC_ACTION) == CURRENT_HVAC_OFF
|
|
assert state.attributes.get(ATTR_HVAC_MODES) == [
|
|
HVAC_MODE_OFF,
|
|
HVAC_MODE_FAN_ONLY,
|
|
HVAC_MODE_COOL,
|
|
HVAC_MODE_HEAT,
|
|
HVAC_MODE_DRY,
|
|
]
|
|
assert state.attributes.get(ATTR_MAX_TEMP) == 30
|
|
assert state.attributes.get(ATTR_MIN_TEMP) == 15
|
|
assert state.attributes.get(ATTR_TARGET_TEMP_STEP) == API_TEMPERATURE_STEP
|
|
assert state.attributes.get(ATTR_TEMPERATURE) == 19.5
|
|
|
|
state = hass.states.get("climate.dorm_ppal")
|
|
assert state.state == HVAC_MODE_HEAT
|
|
assert state.attributes.get(ATTR_CURRENT_HUMIDITY) == 39
|
|
assert state.attributes.get(ATTR_CURRENT_TEMPERATURE) == 21.1
|
|
assert state.attributes.get(ATTR_HVAC_ACTION) == CURRENT_HVAC_HEAT
|
|
assert state.attributes.get(ATTR_HVAC_MODES) == [
|
|
HVAC_MODE_OFF,
|
|
HVAC_MODE_FAN_ONLY,
|
|
HVAC_MODE_COOL,
|
|
HVAC_MODE_HEAT,
|
|
HVAC_MODE_DRY,
|
|
]
|
|
assert state.attributes.get(ATTR_MAX_TEMP) == 30
|
|
assert state.attributes.get(ATTR_MIN_TEMP) == 15
|
|
assert state.attributes.get(ATTR_TARGET_TEMP_STEP) == API_TEMPERATURE_STEP
|
|
assert state.attributes.get(ATTR_TEMPERATURE) == 19.2
|
|
|
|
state = hass.states.get("climate.salon")
|
|
assert state.state == HVAC_MODE_OFF
|
|
assert state.attributes.get(ATTR_CURRENT_HUMIDITY) == 34
|
|
assert state.attributes.get(ATTR_CURRENT_TEMPERATURE) == 19.6
|
|
assert state.attributes.get(ATTR_HVAC_ACTION) == CURRENT_HVAC_OFF
|
|
assert state.attributes.get(ATTR_HVAC_MODES) == [
|
|
HVAC_MODE_OFF,
|
|
HVAC_MODE_FAN_ONLY,
|
|
HVAC_MODE_COOL,
|
|
HVAC_MODE_HEAT,
|
|
HVAC_MODE_DRY,
|
|
]
|
|
assert state.attributes.get(ATTR_MAX_TEMP) == 30
|
|
assert state.attributes.get(ATTR_MIN_TEMP) == 15
|
|
assert state.attributes.get(ATTR_TARGET_TEMP_STEP) == API_TEMPERATURE_STEP
|
|
assert state.attributes.get(ATTR_TEMPERATURE) == 19.1
|
|
|
|
|
|
async def test_airzone_climate_turn_on_off(hass: HomeAssistant) -> None:
|
|
"""Test turning on."""
|
|
|
|
await async_init_integration(hass)
|
|
|
|
HVAC_MOCK = {
|
|
API_DATA: [
|
|
{
|
|
API_SYSTEM_ID: 1,
|
|
API_ZONE_ID: 1,
|
|
API_ON: 1,
|
|
}
|
|
]
|
|
}
|
|
with patch(
|
|
"homeassistant.components.airzone.AirzoneLocalApi.http_request",
|
|
return_value=HVAC_MOCK,
|
|
):
|
|
await hass.services.async_call(
|
|
CLIMATE_DOMAIN,
|
|
SERVICE_TURN_ON,
|
|
{
|
|
ATTR_ENTITY_ID: "climate.salon",
|
|
},
|
|
blocking=True,
|
|
)
|
|
|
|
state = hass.states.get("climate.salon")
|
|
assert state.state == HVAC_MODE_HEAT
|
|
|
|
HVAC_MOCK = {
|
|
API_DATA: [
|
|
{
|
|
API_SYSTEM_ID: 1,
|
|
API_ZONE_ID: 1,
|
|
API_ON: 0,
|
|
}
|
|
]
|
|
}
|
|
with patch(
|
|
"homeassistant.components.airzone.AirzoneLocalApi.http_request",
|
|
return_value=HVAC_MOCK,
|
|
):
|
|
await hass.services.async_call(
|
|
CLIMATE_DOMAIN,
|
|
SERVICE_TURN_OFF,
|
|
{
|
|
ATTR_ENTITY_ID: "climate.salon",
|
|
},
|
|
blocking=True,
|
|
)
|
|
|
|
state = hass.states.get("climate.salon")
|
|
assert state.state == HVAC_MODE_OFF
|
|
|
|
|
|
async def test_airzone_climate_set_hvac_mode(hass: HomeAssistant) -> None:
|
|
"""Test setting the HVAC mode."""
|
|
|
|
await async_init_integration(hass)
|
|
|
|
HVAC_MOCK = {
|
|
API_DATA: [
|
|
{
|
|
API_SYSTEM_ID: 1,
|
|
API_ZONE_ID: 1,
|
|
API_MODE: OperationMode.COOLING.value,
|
|
API_ON: 1,
|
|
}
|
|
]
|
|
}
|
|
with patch(
|
|
"homeassistant.components.airzone.AirzoneLocalApi.http_request",
|
|
return_value=HVAC_MOCK,
|
|
):
|
|
await hass.services.async_call(
|
|
CLIMATE_DOMAIN,
|
|
SERVICE_SET_HVAC_MODE,
|
|
{
|
|
ATTR_ENTITY_ID: "climate.salon",
|
|
ATTR_HVAC_MODE: HVAC_MODE_COOL,
|
|
},
|
|
blocking=True,
|
|
)
|
|
|
|
state = hass.states.get("climate.salon")
|
|
assert state.state == HVAC_MODE_COOL
|
|
|
|
HVAC_MOCK_2 = {
|
|
API_DATA: [
|
|
{
|
|
API_SYSTEM_ID: 1,
|
|
API_ZONE_ID: 1,
|
|
API_ON: 0,
|
|
}
|
|
]
|
|
}
|
|
with patch(
|
|
"homeassistant.components.airzone.AirzoneLocalApi.http_request",
|
|
return_value=HVAC_MOCK_2,
|
|
):
|
|
await hass.services.async_call(
|
|
CLIMATE_DOMAIN,
|
|
SERVICE_SET_HVAC_MODE,
|
|
{
|
|
ATTR_ENTITY_ID: "climate.salon",
|
|
ATTR_HVAC_MODE: HVAC_MODE_OFF,
|
|
},
|
|
blocking=True,
|
|
)
|
|
|
|
state = hass.states.get("climate.salon")
|
|
assert state.state == HVAC_MODE_OFF
|
|
|
|
|
|
async def test_airzone_climate_set_hvac_slave_error(hass: HomeAssistant) -> None:
|
|
"""Test setting the HVAC mode for a slave zone."""
|
|
|
|
HVAC_MOCK = {
|
|
API_DATA: [
|
|
{
|
|
API_SYSTEM_ID: 1,
|
|
API_ZONE_ID: 5,
|
|
API_ON: 1,
|
|
}
|
|
]
|
|
}
|
|
|
|
await async_init_integration(hass)
|
|
|
|
with patch(
|
|
"homeassistant.components.airzone.AirzoneLocalApi.http_request",
|
|
return_value=HVAC_MOCK,
|
|
), pytest.raises(HomeAssistantError):
|
|
await hass.services.async_call(
|
|
CLIMATE_DOMAIN,
|
|
SERVICE_SET_HVAC_MODE,
|
|
{
|
|
ATTR_ENTITY_ID: "climate.dorm_2",
|
|
ATTR_HVAC_MODE: HVAC_MODE_COOL,
|
|
},
|
|
blocking=True,
|
|
)
|
|
|
|
state = hass.states.get("climate.dorm_2")
|
|
assert state.state == HVAC_MODE_OFF
|
|
|
|
|
|
async def test_airzone_climate_set_temp(hass: HomeAssistant) -> None:
|
|
"""Test setting the target temperature."""
|
|
|
|
HVAC_MOCK = {
|
|
API_DATA: [
|
|
{
|
|
API_SYSTEM_ID: 1,
|
|
API_ZONE_ID: 5,
|
|
API_SET_POINT: 20.5,
|
|
}
|
|
]
|
|
}
|
|
|
|
await async_init_integration(hass)
|
|
|
|
with patch(
|
|
"homeassistant.components.airzone.AirzoneLocalApi.http_request",
|
|
return_value=HVAC_MOCK,
|
|
):
|
|
await hass.services.async_call(
|
|
CLIMATE_DOMAIN,
|
|
SERVICE_SET_TEMPERATURE,
|
|
{
|
|
ATTR_ENTITY_ID: "climate.dorm_2",
|
|
ATTR_TEMPERATURE: 20.5,
|
|
},
|
|
blocking=True,
|
|
)
|
|
|
|
state = hass.states.get("climate.dorm_2")
|
|
assert state.attributes.get(ATTR_TEMPERATURE) == 20.5
|
|
|
|
|
|
async def test_airzone_climate_set_temp_error(hass: HomeAssistant) -> None:
|
|
"""Test error when setting the target temperature."""
|
|
|
|
await async_init_integration(hass)
|
|
|
|
with patch(
|
|
"homeassistant.components.airzone.AirzoneLocalApi.put_hvac",
|
|
side_effect=AirzoneError,
|
|
), pytest.raises(HomeAssistantError):
|
|
await hass.services.async_call(
|
|
CLIMATE_DOMAIN,
|
|
SERVICE_SET_TEMPERATURE,
|
|
{
|
|
ATTR_ENTITY_ID: "climate.dorm_2",
|
|
ATTR_TEMPERATURE: 20.5,
|
|
},
|
|
blocking=True,
|
|
)
|
|
|
|
state = hass.states.get("climate.dorm_2")
|
|
assert state.attributes.get(ATTR_TEMPERATURE) == 19.5
|