From c3353e472633b7b7464942a78892210393547cbe Mon Sep 17 00:00:00 2001 From: epenet <6771947+epenet@users.noreply.github.com> Date: Tue, 26 Apr 2022 09:58:30 +0200 Subject: [PATCH] Use climate enums in esphome (#70638) --- homeassistant/components/esphome/climate.py | 56 +++++++++------------ 1 file changed, 24 insertions(+), 32 deletions(-) diff --git a/homeassistant/components/esphome/climate.py b/homeassistant/components/esphome/climate.py index a1fed8a50b7..3c0a80e780f 100644 --- a/homeassistant/components/esphome/climate.py +++ b/homeassistant/components/esphome/climate.py @@ -13,17 +13,11 @@ from aioesphomeapi import ( ClimateSwingMode, ) -from homeassistant.components.climate import ClimateEntity, ClimateEntityFeature +from homeassistant.components.climate import ClimateEntity from homeassistant.components.climate.const import ( ATTR_HVAC_MODE, ATTR_TARGET_TEMP_HIGH, ATTR_TARGET_TEMP_LOW, - CURRENT_HVAC_COOL, - CURRENT_HVAC_DRY, - CURRENT_HVAC_FAN, - CURRENT_HVAC_HEAT, - CURRENT_HVAC_IDLE, - CURRENT_HVAC_OFF, FAN_AUTO, FAN_DIFFUSE, FAN_FOCUS, @@ -33,13 +27,6 @@ from homeassistant.components.climate.const import ( FAN_MIDDLE, FAN_OFF, FAN_ON, - HVAC_MODE_AUTO, - HVAC_MODE_COOL, - HVAC_MODE_DRY, - HVAC_MODE_FAN_ONLY, - HVAC_MODE_HEAT, - HVAC_MODE_HEAT_COOL, - HVAC_MODE_OFF, PRESET_ACTIVITY, PRESET_AWAY, PRESET_BOOST, @@ -52,6 +39,9 @@ from homeassistant.components.climate.const import ( SWING_HORIZONTAL, SWING_OFF, SWING_VERTICAL, + ClimateEntityFeature, + HVACAction, + HVACMode, ) from homeassistant.config_entries import ConfigEntry from homeassistant.const import ( @@ -87,25 +77,25 @@ async def async_setup_entry( ) -_CLIMATE_MODES: EsphomeEnumMapper[ClimateMode, str] = EsphomeEnumMapper( +_CLIMATE_MODES: EsphomeEnumMapper[ClimateMode, HVACMode] = EsphomeEnumMapper( { - ClimateMode.OFF: HVAC_MODE_OFF, - ClimateMode.HEAT_COOL: HVAC_MODE_HEAT_COOL, - ClimateMode.COOL: HVAC_MODE_COOL, - ClimateMode.HEAT: HVAC_MODE_HEAT, - ClimateMode.FAN_ONLY: HVAC_MODE_FAN_ONLY, - ClimateMode.DRY: HVAC_MODE_DRY, - ClimateMode.AUTO: HVAC_MODE_AUTO, + ClimateMode.OFF: HVACMode.OFF, + ClimateMode.HEAT_COOL: HVACMode.HEAT_COOL, + ClimateMode.COOL: HVACMode.COOL, + ClimateMode.HEAT: HVACMode.HEAT, + ClimateMode.FAN_ONLY: HVACMode.FAN_ONLY, + ClimateMode.DRY: HVACMode.DRY, + ClimateMode.AUTO: HVACMode.AUTO, } ) -_CLIMATE_ACTIONS: EsphomeEnumMapper[ClimateAction, str] = EsphomeEnumMapper( +_CLIMATE_ACTIONS: EsphomeEnumMapper[ClimateAction, HVACAction] = EsphomeEnumMapper( { - ClimateAction.OFF: CURRENT_HVAC_OFF, - ClimateAction.COOLING: CURRENT_HVAC_COOL, - ClimateAction.HEATING: CURRENT_HVAC_HEAT, - ClimateAction.IDLE: CURRENT_HVAC_IDLE, - ClimateAction.DRYING: CURRENT_HVAC_DRY, - ClimateAction.FAN: CURRENT_HVAC_FAN, + ClimateAction.OFF: HVACAction.OFF, + ClimateAction.COOLING: HVACAction.COOLING, + ClimateAction.HEATING: HVACAction.HEATING, + ClimateAction.IDLE: HVACAction.IDLE, + ClimateAction.DRYING: HVACAction.DRYING, + ClimateAction.FAN: HVACAction.FAN, } ) _FAN_MODES: EsphomeEnumMapper[ClimateFanMode, str] = EsphomeEnumMapper( @@ -281,11 +271,13 @@ class EsphomeClimateEntity(EsphomeEntity[ClimateInfo, ClimateState], ClimateEnti """Return the highbound target temperature we try to reach.""" return self._state.target_temperature_high - async def async_set_temperature(self, **kwargs: float | str) -> None: + async def async_set_temperature(self, **kwargs: Any) -> None: """Set new target temperature (and operation mode if set).""" data: dict[str, Any] = {"key": self._static_info.key} if ATTR_HVAC_MODE in kwargs: - data["mode"] = _CLIMATE_MODES.from_hass(cast(str, kwargs[ATTR_HVAC_MODE])) + data["mode"] = _CLIMATE_MODES.from_hass( + cast(HVACMode, kwargs[ATTR_HVAC_MODE]) + ) if ATTR_TEMPERATURE in kwargs: data["target_temperature"] = kwargs[ATTR_TEMPERATURE] if ATTR_TARGET_TEMP_LOW in kwargs: @@ -294,7 +286,7 @@ class EsphomeClimateEntity(EsphomeEntity[ClimateInfo, ClimateState], ClimateEnti data["target_temperature_high"] = kwargs[ATTR_TARGET_TEMP_HIGH] await self._client.climate_command(**data) - async def async_set_hvac_mode(self, hvac_mode: str) -> None: + async def async_set_hvac_mode(self, hvac_mode: HVACMode) -> None: """Set new target operation mode.""" await self._client.climate_command( key=self._static_info.key, mode=_CLIMATE_MODES.from_hass(hvac_mode)