Use climate enums in isy994 (#70678)

This commit is contained in:
epenet 2022-04-26 06:28:56 +02:00 committed by GitHub
parent 62c8687a86
commit d288c569fa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 57 additions and 70 deletions

View File

@ -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))

View File

@ -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"}