diff --git a/homeassistant/components/isy994/climate.py b/homeassistant/components/isy994/climate.py index 486d4ae7928..1276207f23c 100644 --- a/homeassistant/components/isy994/climate.py +++ b/homeassistant/components/isy994/climate.py @@ -15,7 +15,7 @@ from pyisy.constants import ( ) from pyisy.nodes import Node -from homeassistant.components.climate import ClimateEntity, ClimateEntityFeature +from homeassistant.components.climate import ClimateEntity from homeassistant.components.climate.const import ( ATTR_TARGET_TEMP_HIGH, ATTR_TARGET_TEMP_LOW, @@ -23,9 +23,9 @@ from homeassistant.components.climate.const import ( FAN_AUTO, FAN_OFF, FAN_ON, - HVAC_MODE_COOL, - HVAC_MODE_HEAT, - HVAC_MODE_OFF, + ClimateEntityFeature, + HVACAction, + HVACMode, ) from homeassistant.config_entries import ConfigEntry from homeassistant.const import ( @@ -74,6 +74,7 @@ async def async_setup_entry( class ISYThermostatEntity(ISYNodeEntity, ClimateEntity): """Representation of an ISY994 thermostat entity.""" + _attr_hvac_modes = ISY_HVAC_MODES _attr_supported_features = ( ClimateEntityFeature.FAN_MODE | ClimateEntityFeature.TARGET_TEMPERATURE @@ -118,10 +119,10 @@ class ISYThermostatEntity(ISYNodeEntity, ClimateEntity): return int(humidity.value) @property - def hvac_mode(self) -> str: + def hvac_mode(self) -> HVACMode: """Return hvac operation ie. heat, cool mode.""" if not (hvac_mode := self._node.aux_properties.get(CMD_CLIMATE_MODE)): - return HVAC_MODE_OFF + return HVACMode.OFF # Which state values used depends on the mode property's UOM: uom = hvac_mode.uom @@ -132,15 +133,10 @@ class ISYThermostatEntity(ISYNodeEntity, ClimateEntity): if self._node.protocol == PROTO_INSTEON else UOM_HVAC_MODE_GENERIC ) - return UOM_TO_STATES[uom].get(hvac_mode.value, HVAC_MODE_OFF) + return UOM_TO_STATES[uom].get(hvac_mode.value, HVACMode.OFF) @property - def hvac_modes(self) -> list[str]: - """Return the list of available hvac operation modes.""" - return ISY_HVAC_MODES - - @property - def hvac_action(self) -> str | None: + def hvac_action(self) -> HVACAction | None: """Return the current running hvac operation if supported.""" hvac_action = self._node.aux_properties.get(PROP_HEAT_COOL_STATE) if not hvac_action: @@ -162,9 +158,9 @@ class ISYThermostatEntity(ISYNodeEntity, ClimateEntity): @property def target_temperature(self) -> float | None: """Return the temperature we try to reach.""" - if self.hvac_mode == HVAC_MODE_COOL: + if self.hvac_mode == HVACMode.COOL: return self.target_temperature_high - if self.hvac_mode == HVAC_MODE_HEAT: + if self.hvac_mode == HVACMode.HEAT: return self.target_temperature_low return None @@ -203,9 +199,9 @@ class ISYThermostatEntity(ISYNodeEntity, ClimateEntity): target_temp_low = kwargs.get(ATTR_TARGET_TEMP_LOW) target_temp_high = kwargs.get(ATTR_TARGET_TEMP_HIGH) if target_temp is not None: - if self.hvac_mode == HVAC_MODE_COOL: + if self.hvac_mode == HVACMode.COOL: target_temp_high = target_temp - if self.hvac_mode == HVAC_MODE_HEAT: + if self.hvac_mode == HVACMode.HEAT: target_temp_low = target_temp if target_temp_low is not None: await self._node.set_climate_setpoint_heat(int(target_temp_low)) @@ -225,7 +221,7 @@ class ISYThermostatEntity(ISYNodeEntity, ClimateEntity): self._fan_mode = fan_mode self.async_write_ha_state() - 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 hvac mode.""" _LOGGER.debug("Requested operation mode %s", hvac_mode) await self._node.set_climate_mode(HA_HVAC_TO_ISY.get(hvac_mode)) diff --git a/homeassistant/components/isy994/const.py b/homeassistant/components/isy994/const.py index 8ca1ac786f8..bc463655f27 100644 --- a/homeassistant/components/isy994/const.py +++ b/homeassistant/components/isy994/const.py @@ -3,23 +3,14 @@ import logging from homeassistant.components.binary_sensor import BinarySensorDeviceClass from homeassistant.components.climate.const import ( - CURRENT_HVAC_COOL, - CURRENT_HVAC_FAN, - CURRENT_HVAC_HEAT, - CURRENT_HVAC_IDLE, FAN_AUTO, FAN_HIGH, FAN_MEDIUM, 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_AWAY, PRESET_BOOST, + HVACAction, + HVACMode, ) from homeassistant.const import ( CONCENTRATION_PARTS_PER_MILLION, @@ -465,38 +456,38 @@ UOM_TO_STATES = { 27: "factory reset", }, UOM_HVAC_ACTIONS: { # Thermostat Heat/Cool State - 0: CURRENT_HVAC_IDLE, - 1: CURRENT_HVAC_HEAT, - 2: CURRENT_HVAC_COOL, - 3: CURRENT_HVAC_FAN, - 4: CURRENT_HVAC_HEAT, # Pending Heat - 5: CURRENT_HVAC_COOL, # Pending Cool + 0: HVACAction.IDLE.value, + 1: HVACAction.HEATING.value, + 2: HVACAction.COOLING.value, + 3: HVACAction.FAN.value, + 4: HVACAction.HEATING.value, # Pending Heat + 5: HVACAction.COOLING.value, # Pending Cool # >6 defined in ISY but not implemented, leaving for future expanision. - 6: CURRENT_HVAC_IDLE, - 7: CURRENT_HVAC_HEAT, - 8: CURRENT_HVAC_HEAT, - 9: CURRENT_HVAC_COOL, - 10: CURRENT_HVAC_HEAT, - 11: CURRENT_HVAC_HEAT, + 6: HVACAction.IDLE.value, + 7: HVACAction.HEATING.value, + 8: HVACAction.HEATING.value, + 9: HVACAction.COOLING.value, + 10: HVACAction.HEATING.value, + 11: HVACAction.HEATING.value, }, UOM_HVAC_MODE_GENERIC: { # Thermostat Mode - 0: HVAC_MODE_OFF, - 1: HVAC_MODE_HEAT, - 2: HVAC_MODE_COOL, - 3: HVAC_MODE_AUTO, + 0: HVACMode.OFF.value, + 1: HVACMode.HEAT.value, + 2: HVACMode.COOL.value, + 3: HVACMode.AUTO.value, 4: PRESET_BOOST, 5: "resume", - 6: HVAC_MODE_FAN_ONLY, + 6: HVACMode.FAN_ONLY.value, 7: "furnace", - 8: HVAC_MODE_DRY, + 8: HVACMode.DRY.value, 9: "moist air", 10: "auto changeover", 11: "energy save heat", 12: "energy save cool", 13: PRESET_AWAY, - 14: HVAC_MODE_AUTO, - 15: HVAC_MODE_AUTO, - 16: HVAC_MODE_AUTO, + 14: HVACMode.AUTO.value, + 15: HVACMode.AUTO.value, + 16: HVACMode.AUTO.value, }, "68": { # Thermostat Fan Mode 0: FAN_AUTO, @@ -589,14 +580,14 @@ UOM_TO_STATES = { }, # 1-99 are percentage open }, UOM_HVAC_MODE_INSTEON: { # Insteon Thermostat Mode - 0: HVAC_MODE_OFF, - 1: HVAC_MODE_HEAT, - 2: HVAC_MODE_COOL, - 3: HVAC_MODE_HEAT_COOL, - 4: HVAC_MODE_FAN_ONLY, - 5: HVAC_MODE_AUTO, # Program Auto - 6: HVAC_MODE_AUTO, # Program Heat-Set @ Local Device Only - 7: HVAC_MODE_AUTO, # Program Cool-Set @ Local Device Only + 0: HVACMode.OFF.value, + 1: HVACMode.HEAT.value, + 2: HVACMode.COOL.value, + 3: HVACMode.HEAT_COOL.value, + 4: HVACMode.FAN_ONLY.value, + 5: HVACMode.AUTO.value, # Program Auto + 6: HVACMode.AUTO.value, # Program Heat-Set @ Local Device Only + 7: HVACMode.AUTO.value, # Program Cool-Set @ Local Device Only }, UOM_FAN_MODES: {7: FAN_ON, 8: FAN_AUTO}, # Insteon Thermostat Fan Mode "115": { # Most recent On style action taken for lamp control @@ -617,21 +608,21 @@ UOM_TO_STATES = { } ISY_HVAC_MODES = [ - HVAC_MODE_OFF, - HVAC_MODE_HEAT, - HVAC_MODE_COOL, - HVAC_MODE_HEAT_COOL, - HVAC_MODE_AUTO, - HVAC_MODE_FAN_ONLY, + HVACMode.OFF, + HVACMode.HEAT, + HVACMode.COOL, + HVACMode.HEAT_COOL, + HVACMode.AUTO, + HVACMode.FAN_ONLY, ] HA_HVAC_TO_ISY = { - HVAC_MODE_OFF: "off", - HVAC_MODE_HEAT: "heat", - HVAC_MODE_COOL: "cool", - HVAC_MODE_HEAT_COOL: "auto", - HVAC_MODE_FAN_ONLY: "fan_only", - HVAC_MODE_AUTO: "program_auto", + HVACMode.OFF: "off", + HVACMode.HEAT: "heat", + HVACMode.COOL: "cool", + HVACMode.HEAT_COOL: "auto", + HVACMode.FAN_ONLY: "fan_only", + HVACMode.AUTO: "program_auto", } HA_FAN_TO_ISY = {FAN_ON: "on", FAN_AUTO: "auto"}