From 98d757b2b28f7ba0cf95a13450ddbdcc19241d84 Mon Sep 17 00:00:00 2001 From: epenet <6771947+epenet@users.noreply.github.com> Date: Tue, 26 Apr 2022 09:12:54 +0200 Subject: [PATCH] Use climate enums in smartthings (#70737) --- .../components/smartthings/climate.py | 116 +++++++-------- tests/components/smartthings/test_climate.py | 134 +++++++++--------- 2 files changed, 116 insertions(+), 134 deletions(-) diff --git a/homeassistant/components/smartthings/climate.py b/homeassistant/components/smartthings/climate.py index 4797974768d..9bc287b054c 100644 --- a/homeassistant/components/smartthings/climate.py +++ b/homeassistant/components/smartthings/climate.py @@ -7,26 +7,14 @@ import logging from pysmartthings import Attribute, Capability -from homeassistant.components.climate import ( - DOMAIN as CLIMATE_DOMAIN, - ClimateEntity, - ClimateEntityFeature, -) +from homeassistant.components.climate import DOMAIN as CLIMATE_DOMAIN, ClimateEntity from homeassistant.components.climate.const import ( ATTR_HVAC_MODE, ATTR_TARGET_TEMP_HIGH, ATTR_TARGET_TEMP_LOW, - CURRENT_HVAC_COOL, - CURRENT_HVAC_FAN, - CURRENT_HVAC_HEAT, - CURRENT_HVAC_IDLE, - HVAC_MODE_AUTO, - HVAC_MODE_COOL, - HVAC_MODE_DRY, - HVAC_MODE_FAN_ONLY, - HVAC_MODE_HEAT, - HVAC_MODE_HEAT_COOL, - HVAC_MODE_OFF, + ClimateEntityFeature, + HVACAction, + HVACMode, ) from homeassistant.config_entries import ConfigEntry from homeassistant.const import ATTR_TEMPERATURE, TEMP_CELSIUS, TEMP_FAHRENHEIT @@ -38,47 +26,47 @@ from .const import DATA_BROKERS, DOMAIN ATTR_OPERATION_STATE = "operation_state" MODE_TO_STATE = { - "auto": HVAC_MODE_HEAT_COOL, - "cool": HVAC_MODE_COOL, - "eco": HVAC_MODE_AUTO, - "rush hour": HVAC_MODE_AUTO, - "emergency heat": HVAC_MODE_HEAT, - "heat": HVAC_MODE_HEAT, - "off": HVAC_MODE_OFF, + "auto": HVACMode.HEAT_COOL, + "cool": HVACMode.COOL, + "eco": HVACMode.AUTO, + "rush hour": HVACMode.AUTO, + "emergency heat": HVACMode.HEAT, + "heat": HVACMode.HEAT, + "off": HVACMode.OFF, } STATE_TO_MODE = { - HVAC_MODE_HEAT_COOL: "auto", - HVAC_MODE_COOL: "cool", - HVAC_MODE_HEAT: "heat", - HVAC_MODE_OFF: "off", + HVACMode.HEAT_COOL: "auto", + HVACMode.COOL: "cool", + HVACMode.HEAT: "heat", + HVACMode.OFF: "off", } OPERATING_STATE_TO_ACTION = { - "cooling": CURRENT_HVAC_COOL, - "fan only": CURRENT_HVAC_FAN, - "heating": CURRENT_HVAC_HEAT, - "idle": CURRENT_HVAC_IDLE, - "pending cool": CURRENT_HVAC_COOL, - "pending heat": CURRENT_HVAC_HEAT, - "vent economizer": CURRENT_HVAC_FAN, + "cooling": HVACAction.COOLING, + "fan only": HVACAction.FAN, + "heating": HVACAction.HEATING, + "idle": HVACAction.IDLE, + "pending cool": HVACAction.COOLING, + "pending heat": HVACAction.HEATING, + "vent economizer": HVACAction.FAN, } AC_MODE_TO_STATE = { - "auto": HVAC_MODE_HEAT_COOL, - "cool": HVAC_MODE_COOL, - "dry": HVAC_MODE_DRY, - "coolClean": HVAC_MODE_COOL, - "dryClean": HVAC_MODE_DRY, - "heat": HVAC_MODE_HEAT, - "heatClean": HVAC_MODE_HEAT, - "fanOnly": HVAC_MODE_FAN_ONLY, + "auto": HVACMode.HEAT_COOL, + "cool": HVACMode.COOL, + "dry": HVACMode.DRY, + "coolClean": HVACMode.COOL, + "dryClean": HVACMode.DRY, + "heat": HVACMode.HEAT, + "heatClean": HVACMode.HEAT, + "fanOnly": HVACMode.FAN_ONLY, } STATE_TO_AC_MODE = { - HVAC_MODE_HEAT_COOL: "auto", - HVAC_MODE_COOL: "cool", - HVAC_MODE_DRY: "dry", - HVAC_MODE_HEAT: "heat", - HVAC_MODE_FAN_ONLY: "fanOnly", + HVACMode.HEAT_COOL: "auto", + HVACMode.COOL: "cool", + HVACMode.DRY: "dry", + HVACMode.HEAT: "heat", + HVACMode.FAN_ONLY: "fanOnly", } UNIT_MAP = {"C": TEMP_CELSIUS, "F": TEMP_FAHRENHEIT} @@ -183,7 +171,7 @@ class SmartThingsThermostat(SmartThingsEntity, ClimateEntity): # the entity state ahead of receiving the confirming push updates self.async_schedule_update_ha_state(True) - async def async_set_hvac_mode(self, hvac_mode): + async def async_set_hvac_mode(self, hvac_mode: HVACMode) -> None: """Set new target operation mode.""" mode = STATE_TO_MODE[hvac_mode] await self._device.set_thermostat_mode(mode, set_status=True) @@ -203,9 +191,9 @@ class SmartThingsThermostat(SmartThingsEntity, ClimateEntity): # Heat/cool setpoint heating_setpoint = None cooling_setpoint = None - if self.hvac_mode == HVAC_MODE_HEAT: + if self.hvac_mode == HVACMode.HEAT: heating_setpoint = kwargs.get(ATTR_TEMPERATURE) - elif self.hvac_mode == HVAC_MODE_COOL: + elif self.hvac_mode == HVACMode.COOL: cooling_setpoint = kwargs.get(ATTR_TEMPERATURE) else: heating_setpoint = kwargs.get(ATTR_TARGET_TEMP_LOW) @@ -284,42 +272,42 @@ class SmartThingsThermostat(SmartThingsEntity, ClimateEntity): return self._device.status.supported_thermostat_fan_modes @property - def hvac_action(self) -> str | None: + def hvac_action(self) -> HVACAction | None: """Return the current running hvac operation if supported.""" return OPERATING_STATE_TO_ACTION.get( self._device.status.thermostat_operating_state ) @property - def hvac_mode(self): + def hvac_mode(self) -> HVACMode: """Return current operation ie. heat, cool, idle.""" return self._hvac_mode @property - def hvac_modes(self): + def hvac_modes(self) -> list[HVACMode]: """Return the list of available operation modes.""" return self._hvac_modes @property def target_temperature(self): """Return the temperature we try to reach.""" - if self.hvac_mode == HVAC_MODE_COOL: + if self.hvac_mode == HVACMode.COOL: return self._device.status.cooling_setpoint - if self.hvac_mode == HVAC_MODE_HEAT: + if self.hvac_mode == HVACMode.HEAT: return self._device.status.heating_setpoint return None @property def target_temperature_high(self): """Return the highbound target temperature we try to reach.""" - if self.hvac_mode == HVAC_MODE_HEAT_COOL: + if self.hvac_mode == HVACMode.HEAT_COOL: return self._device.status.cooling_setpoint return None @property def target_temperature_low(self): """Return the lowbound target temperature we try to reach.""" - if self.hvac_mode == HVAC_MODE_HEAT_COOL: + if self.hvac_mode == HVACMode.HEAT_COOL: return self._device.status.heating_setpoint return None @@ -348,9 +336,9 @@ class SmartThingsAirConditioner(SmartThingsEntity, ClimateEntity): # the entity state ahead of receiving the confirming push updates self.async_write_ha_state() - async def async_set_hvac_mode(self, hvac_mode): + async def async_set_hvac_mode(self, hvac_mode: HVACMode) -> None: """Set new target operation mode.""" - if hvac_mode == HVAC_MODE_OFF: + if hvac_mode == HVACMode.OFF: await self.async_turn_off() return tasks = [] @@ -372,7 +360,7 @@ class SmartThingsAirConditioner(SmartThingsEntity, ClimateEntity): tasks = [] # operation mode if operation_mode := kwargs.get(ATTR_HVAC_MODE): - if operation_mode == HVAC_MODE_OFF: + if operation_mode == HVACMode.OFF: tasks.append(self._device.switch_off(set_status=True)) else: if not self._device.status.switch: @@ -403,7 +391,7 @@ class SmartThingsAirConditioner(SmartThingsEntity, ClimateEntity): async def async_update(self): """Update the calculated fields of the AC.""" - modes = {HVAC_MODE_OFF} + modes = {HVACMode.OFF} for mode in self._device.status.supported_ac_modes: if (state := AC_MODE_TO_STATE.get(mode)) is not None: modes.add(state) @@ -457,14 +445,14 @@ class SmartThingsAirConditioner(SmartThingsEntity, ClimateEntity): return self._device.status.supported_ac_fan_modes @property - def hvac_mode(self): + def hvac_mode(self) -> HVACMode | None: """Return current operation ie. heat, cool, idle.""" if not self._device.status.switch: - return HVAC_MODE_OFF + return HVACMode.OFF return AC_MODE_TO_STATE.get(self._device.status.air_conditioner_mode) @property - def hvac_modes(self): + def hvac_modes(self) -> list[HVACMode]: """Return the list of available operation modes.""" return self._hvac_modes diff --git a/tests/components/smartthings/test_climate.py b/tests/components/smartthings/test_climate.py index 17443b72029..5c3d61d8b41 100644 --- a/tests/components/smartthings/test_climate.py +++ b/tests/components/smartthings/test_climate.py @@ -18,21 +18,13 @@ from homeassistant.components.climate.const import ( ATTR_HVAC_MODES, ATTR_TARGET_TEMP_HIGH, ATTR_TARGET_TEMP_LOW, - CURRENT_HVAC_IDLE, DOMAIN as CLIMATE_DOMAIN, - HVAC_MODE_AUTO, - HVAC_MODE_COOL, - HVAC_MODE_DRY, - HVAC_MODE_FAN_ONLY, - HVAC_MODE_HEAT, - HVAC_MODE_HEAT_COOL, - HVAC_MODE_OFF, SERVICE_SET_FAN_MODE, SERVICE_SET_HVAC_MODE, SERVICE_SET_TEMPERATURE, - SUPPORT_FAN_MODE, - SUPPORT_TARGET_TEMPERATURE, - SUPPORT_TARGET_TEMPERATURE_RANGE, + ClimateEntityFeature, + HVACAction, + HVACMode, ) from homeassistant.components.smartthings import climate from homeassistant.components.smartthings.const import DOMAIN @@ -203,20 +195,20 @@ async def test_legacy_thermostat_entity_state(hass, legacy_thermostat): """Tests the state attributes properly match the thermostat type.""" await setup_platform(hass, CLIMATE_DOMAIN, devices=[legacy_thermostat]) state = hass.states.get("climate.legacy_thermostat") - assert state.state == HVAC_MODE_HEAT_COOL + assert state.state == HVACMode.HEAT_COOL assert ( state.attributes[ATTR_SUPPORTED_FEATURES] - == SUPPORT_FAN_MODE - | SUPPORT_TARGET_TEMPERATURE_RANGE - | SUPPORT_TARGET_TEMPERATURE + == ClimateEntityFeature.FAN_MODE + | ClimateEntityFeature.TARGET_TEMPERATURE_RANGE + | ClimateEntityFeature.TARGET_TEMPERATURE ) - assert state.attributes[ATTR_HVAC_ACTION] == CURRENT_HVAC_IDLE + assert state.attributes[ATTR_HVAC_ACTION] == HVACAction.IDLE assert sorted(state.attributes[ATTR_HVAC_MODES]) == [ - HVAC_MODE_AUTO, - HVAC_MODE_COOL, - HVAC_MODE_HEAT, - HVAC_MODE_HEAT_COOL, - HVAC_MODE_OFF, + HVACMode.AUTO, + HVACMode.COOL, + HVACMode.HEAT, + HVACMode.HEAT_COOL, + HVACMode.OFF, ] assert state.attributes[ATTR_FAN_MODE] == "auto" assert state.attributes[ATTR_FAN_MODES] == ["auto", "on"] @@ -229,17 +221,18 @@ async def test_basic_thermostat_entity_state(hass, basic_thermostat): """Tests the state attributes properly match the thermostat type.""" await setup_platform(hass, CLIMATE_DOMAIN, devices=[basic_thermostat]) state = hass.states.get("climate.basic_thermostat") - assert state.state == HVAC_MODE_OFF + assert state.state == HVACMode.OFF assert ( state.attributes[ATTR_SUPPORTED_FEATURES] - == SUPPORT_TARGET_TEMPERATURE_RANGE | SUPPORT_TARGET_TEMPERATURE + == ClimateEntityFeature.TARGET_TEMPERATURE_RANGE + | ClimateEntityFeature.TARGET_TEMPERATURE ) assert ATTR_HVAC_ACTION not in state.attributes assert sorted(state.attributes[ATTR_HVAC_MODES]) == [ - HVAC_MODE_COOL, - HVAC_MODE_HEAT, - HVAC_MODE_HEAT_COOL, - HVAC_MODE_OFF, + HVACMode.COOL, + HVACMode.HEAT, + HVACMode.HEAT_COOL, + HVACMode.OFF, ] assert state.attributes[ATTR_CURRENT_TEMPERATURE] == 21.1 # celsius @@ -248,20 +241,20 @@ async def test_thermostat_entity_state(hass, thermostat): """Tests the state attributes properly match the thermostat type.""" await setup_platform(hass, CLIMATE_DOMAIN, devices=[thermostat]) state = hass.states.get("climate.thermostat") - assert state.state == HVAC_MODE_HEAT + assert state.state == HVACMode.HEAT assert ( state.attributes[ATTR_SUPPORTED_FEATURES] - == SUPPORT_FAN_MODE - | SUPPORT_TARGET_TEMPERATURE_RANGE - | SUPPORT_TARGET_TEMPERATURE + == ClimateEntityFeature.FAN_MODE + | ClimateEntityFeature.TARGET_TEMPERATURE_RANGE + | ClimateEntityFeature.TARGET_TEMPERATURE ) - assert state.attributes[ATTR_HVAC_ACTION] == CURRENT_HVAC_IDLE + assert state.attributes[ATTR_HVAC_ACTION] == HVACAction.IDLE assert sorted(state.attributes[ATTR_HVAC_MODES]) == [ - HVAC_MODE_AUTO, - HVAC_MODE_COOL, - HVAC_MODE_HEAT, - HVAC_MODE_HEAT_COOL, - HVAC_MODE_OFF, + HVACMode.AUTO, + HVACMode.COOL, + HVACMode.HEAT, + HVACMode.HEAT_COOL, + HVACMode.OFF, ] assert state.attributes[ATTR_FAN_MODE] == "on" assert state.attributes[ATTR_FAN_MODES] == ["auto", "on"] @@ -277,7 +270,8 @@ async def test_buggy_thermostat_entity_state(hass, buggy_thermostat): assert state.state == STATE_UNKNOWN assert ( state.attributes[ATTR_SUPPORTED_FEATURES] - == SUPPORT_TARGET_TEMPERATURE_RANGE | SUPPORT_TARGET_TEMPERATURE + == ClimateEntityFeature.TARGET_TEMPERATURE_RANGE + | ClimateEntityFeature.TARGET_TEMPERATURE ) assert state.state is STATE_UNKNOWN assert state.attributes[ATTR_TEMPERATURE] is None @@ -292,25 +286,25 @@ async def test_buggy_thermostat_invalid_mode(hass, buggy_thermostat): ) await setup_platform(hass, CLIMATE_DOMAIN, devices=[buggy_thermostat]) state = hass.states.get("climate.buggy_thermostat") - assert state.attributes[ATTR_HVAC_MODES] == [HVAC_MODE_HEAT] + assert state.attributes[ATTR_HVAC_MODES] == [HVACMode.HEAT] async def test_air_conditioner_entity_state(hass, air_conditioner): """Tests when an invalid operation mode is included.""" await setup_platform(hass, CLIMATE_DOMAIN, devices=[air_conditioner]) state = hass.states.get("climate.air_conditioner") - assert state.state == HVAC_MODE_HEAT_COOL + assert state.state == HVACMode.HEAT_COOL assert ( state.attributes[ATTR_SUPPORTED_FEATURES] - == SUPPORT_FAN_MODE | SUPPORT_TARGET_TEMPERATURE + == ClimateEntityFeature.FAN_MODE | ClimateEntityFeature.TARGET_TEMPERATURE ) assert sorted(state.attributes[ATTR_HVAC_MODES]) == [ - HVAC_MODE_COOL, - HVAC_MODE_DRY, - HVAC_MODE_FAN_ONLY, - HVAC_MODE_HEAT, - HVAC_MODE_HEAT_COOL, - HVAC_MODE_OFF, + HVACMode.COOL, + HVACMode.DRY, + HVACMode.FAN_ONLY, + HVACMode.HEAT, + HVACMode.HEAT_COOL, + HVACMode.OFF, ] assert state.attributes[ATTR_FAN_MODE] == "medium" assert sorted(state.attributes[ATTR_FAN_MODES]) == [ @@ -354,13 +348,13 @@ async def test_set_hvac_mode(hass, thermostat, air_conditioner): await hass.services.async_call( CLIMATE_DOMAIN, SERVICE_SET_HVAC_MODE, - {ATTR_ENTITY_ID: entity_ids, ATTR_HVAC_MODE: HVAC_MODE_COOL}, + {ATTR_ENTITY_ID: entity_ids, ATTR_HVAC_MODE: HVACMode.COOL}, blocking=True, ) for entity_id in entity_ids: state = hass.states.get(entity_id) - assert state.state == HVAC_MODE_COOL, entity_id + assert state.state == HVACMode.COOL, entity_id async def test_ac_set_hvac_mode_from_off(hass, air_conditioner): @@ -371,33 +365,33 @@ async def test_ac_set_hvac_mode_from_off(hass, air_conditioner): air_conditioner.status.update_attribute_value(Attribute.switch, "off") await setup_platform(hass, CLIMATE_DOMAIN, devices=[air_conditioner]) state = hass.states.get("climate.air_conditioner") - assert state.state == HVAC_MODE_OFF + assert state.state == HVACMode.OFF await hass.services.async_call( CLIMATE_DOMAIN, SERVICE_SET_HVAC_MODE, { ATTR_ENTITY_ID: "climate.air_conditioner", - ATTR_HVAC_MODE: HVAC_MODE_HEAT_COOL, + ATTR_HVAC_MODE: HVACMode.HEAT_COOL, }, blocking=True, ) state = hass.states.get("climate.air_conditioner") - assert state.state == HVAC_MODE_HEAT_COOL + assert state.state == HVACMode.HEAT_COOL async def test_ac_set_hvac_mode_off(hass, air_conditioner): """Test the AC HVAC mode can be turned off set successfully.""" await setup_platform(hass, CLIMATE_DOMAIN, devices=[air_conditioner]) state = hass.states.get("climate.air_conditioner") - assert state.state != HVAC_MODE_OFF + assert state.state != HVACMode.OFF await hass.services.async_call( CLIMATE_DOMAIN, SERVICE_SET_HVAC_MODE, - {ATTR_ENTITY_ID: "climate.air_conditioner", ATTR_HVAC_MODE: HVAC_MODE_OFF}, + {ATTR_ENTITY_ID: "climate.air_conditioner", ATTR_HVAC_MODE: HVACMode.OFF}, blocking=True, ) state = hass.states.get("climate.air_conditioner") - assert state.state == HVAC_MODE_OFF + assert state.state == HVACMode.OFF async def test_set_temperature_heat_mode(hass, thermostat): @@ -411,7 +405,7 @@ async def test_set_temperature_heat_mode(hass, thermostat): blocking=True, ) state = hass.states.get("climate.thermostat") - assert state.state == HVAC_MODE_HEAT + assert state.state == HVACMode.HEAT assert state.attributes[ATTR_TEMPERATURE] == 21 assert thermostat.status.heating_setpoint == 69.8 @@ -471,13 +465,13 @@ async def test_set_temperature_ac_with_mode(hass, air_conditioner): { ATTR_ENTITY_ID: "climate.air_conditioner", ATTR_TEMPERATURE: 27, - ATTR_HVAC_MODE: HVAC_MODE_COOL, + ATTR_HVAC_MODE: HVACMode.COOL, }, blocking=True, ) state = hass.states.get("climate.air_conditioner") assert state.attributes[ATTR_TEMPERATURE] == 27 - assert state.state == HVAC_MODE_COOL + assert state.state == HVACMode.COOL async def test_set_temperature_ac_with_mode_from_off(hass, air_conditioner): @@ -487,39 +481,39 @@ async def test_set_temperature_ac_with_mode_from_off(hass, air_conditioner): ) air_conditioner.status.update_attribute_value(Attribute.switch, "off") await setup_platform(hass, CLIMATE_DOMAIN, devices=[air_conditioner]) - assert hass.states.get("climate.air_conditioner").state == HVAC_MODE_OFF + assert hass.states.get("climate.air_conditioner").state == HVACMode.OFF await hass.services.async_call( CLIMATE_DOMAIN, SERVICE_SET_TEMPERATURE, { ATTR_ENTITY_ID: "climate.air_conditioner", ATTR_TEMPERATURE: 27, - ATTR_HVAC_MODE: HVAC_MODE_COOL, + ATTR_HVAC_MODE: HVACMode.COOL, }, blocking=True, ) state = hass.states.get("climate.air_conditioner") assert state.attributes[ATTR_TEMPERATURE] == 27 - assert state.state == HVAC_MODE_COOL + assert state.state == HVACMode.COOL async def test_set_temperature_ac_with_mode_to_off(hass, air_conditioner): """Test the temp and mode is set successfully to turn off the unit.""" await setup_platform(hass, CLIMATE_DOMAIN, devices=[air_conditioner]) - assert hass.states.get("climate.air_conditioner").state != HVAC_MODE_OFF + assert hass.states.get("climate.air_conditioner").state != HVACMode.OFF await hass.services.async_call( CLIMATE_DOMAIN, SERVICE_SET_TEMPERATURE, { ATTR_ENTITY_ID: "climate.air_conditioner", ATTR_TEMPERATURE: 27, - ATTR_HVAC_MODE: HVAC_MODE_OFF, + ATTR_HVAC_MODE: HVACMode.OFF, }, blocking=True, ) state = hass.states.get("climate.air_conditioner") assert state.attributes[ATTR_TEMPERATURE] == 27 - assert state.state == HVAC_MODE_OFF + assert state.state == HVACMode.OFF async def test_set_temperature_with_mode(hass, thermostat): @@ -532,26 +526,26 @@ async def test_set_temperature_with_mode(hass, thermostat): ATTR_ENTITY_ID: "climate.thermostat", ATTR_TARGET_TEMP_HIGH: 25.5, ATTR_TARGET_TEMP_LOW: 22.2, - ATTR_HVAC_MODE: HVAC_MODE_HEAT_COOL, + ATTR_HVAC_MODE: HVACMode.HEAT_COOL, }, blocking=True, ) state = hass.states.get("climate.thermostat") assert state.attributes[ATTR_TARGET_TEMP_HIGH] == 25.5 assert state.attributes[ATTR_TARGET_TEMP_LOW] == 22.2 - assert state.state == HVAC_MODE_HEAT_COOL + assert state.state == HVACMode.HEAT_COOL async def test_set_turn_off(hass, air_conditioner): """Test the a/c is turned off successfully.""" await setup_platform(hass, CLIMATE_DOMAIN, devices=[air_conditioner]) state = hass.states.get("climate.air_conditioner") - assert state.state == HVAC_MODE_HEAT_COOL + assert state.state == HVACMode.HEAT_COOL await hass.services.async_call( CLIMATE_DOMAIN, SERVICE_TURN_OFF, {"entity_id": "all"}, blocking=True ) state = hass.states.get("climate.air_conditioner") - assert state.state == HVAC_MODE_OFF + assert state.state == HVACMode.OFF async def test_set_turn_on(hass, air_conditioner): @@ -559,12 +553,12 @@ async def test_set_turn_on(hass, air_conditioner): air_conditioner.status.update_attribute_value(Attribute.switch, "off") await setup_platform(hass, CLIMATE_DOMAIN, devices=[air_conditioner]) state = hass.states.get("climate.air_conditioner") - assert state.state == HVAC_MODE_OFF + assert state.state == HVACMode.OFF await hass.services.async_call( CLIMATE_DOMAIN, SERVICE_TURN_ON, {"entity_id": "all"}, blocking=True ) state = hass.states.get("climate.air_conditioner") - assert state.state == HVAC_MODE_HEAT_COOL + assert state.state == HVACMode.HEAT_COOL async def test_entity_and_device_attributes(hass, thermostat):