Use climate enums in elkm1 (#70635)

This commit is contained in:
epenet 2022-04-26 06:27:17 +02:00 committed by GitHub
parent 8d71595f31
commit e235926037
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -8,17 +8,14 @@ from elkm1_lib.elements import Element
from elkm1_lib.elk import Elk from elkm1_lib.elk import Elk
from elkm1_lib.thermostats import Thermostat from elkm1_lib.thermostats import Thermostat
from homeassistant.components.climate import ClimateEntity, ClimateEntityFeature from homeassistant.components.climate import ClimateEntity
from homeassistant.components.climate.const import ( from homeassistant.components.climate.const import (
ATTR_TARGET_TEMP_HIGH, ATTR_TARGET_TEMP_HIGH,
ATTR_TARGET_TEMP_LOW, ATTR_TARGET_TEMP_LOW,
FAN_AUTO, FAN_AUTO,
FAN_ON, FAN_ON,
HVAC_MODE_COOL, ClimateEntityFeature,
HVAC_MODE_FAN_ONLY, HVACMode,
HVAC_MODE_HEAT,
HVAC_MODE_HEAT_COOL,
HVAC_MODE_OFF,
) )
from homeassistant.config_entries import ConfigEntry from homeassistant.config_entries import ConfigEntry
from homeassistant.const import PRECISION_WHOLE from homeassistant.const import PRECISION_WHOLE
@ -29,25 +26,25 @@ from . import ElkEntity, create_elk_entities
from .const import DOMAIN from .const import DOMAIN
SUPPORT_HVAC = [ SUPPORT_HVAC = [
HVAC_MODE_OFF, HVACMode.OFF,
HVAC_MODE_HEAT, HVACMode.HEAT,
HVAC_MODE_COOL, HVACMode.COOL,
HVAC_MODE_HEAT_COOL, HVACMode.HEAT_COOL,
HVAC_MODE_FAN_ONLY, HVACMode.FAN_ONLY,
] ]
HASS_TO_ELK_HVAC_MODES = { HASS_TO_ELK_HVAC_MODES = {
HVAC_MODE_OFF: (ThermostatMode.OFF.value, ThermostatFan.AUTO.value), HVACMode.OFF: (ThermostatMode.OFF.value, ThermostatFan.AUTO.value),
HVAC_MODE_HEAT: (ThermostatMode.HEAT.value, None), HVACMode.HEAT: (ThermostatMode.HEAT.value, None),
HVAC_MODE_COOL: (ThermostatMode.COOL.value, None), HVACMode.COOL: (ThermostatMode.COOL.value, None),
HVAC_MODE_HEAT_COOL: (ThermostatMode.AUTO.value, None), HVACMode.HEAT_COOL: (ThermostatMode.AUTO.value, None),
HVAC_MODE_FAN_ONLY: (ThermostatMode.OFF.value, ThermostatFan.ON.value), HVACMode.FAN_ONLY: (ThermostatMode.OFF.value, ThermostatFan.ON.value),
} }
ELK_TO_HASS_HVAC_MODES = { ELK_TO_HASS_HVAC_MODES = {
ThermostatMode.OFF.value: HVAC_MODE_OFF, ThermostatMode.OFF.value: HVACMode.OFF,
ThermostatMode.COOL.value: HVAC_MODE_COOL, ThermostatMode.COOL.value: HVACMode.COOL,
ThermostatMode.HEAT.value: HVAC_MODE_HEAT, ThermostatMode.HEAT.value: HVACMode.HEAT,
ThermostatMode.EMERGENCY_HEAT.value: HVAC_MODE_HEAT, ThermostatMode.EMERGENCY_HEAT.value: HVACMode.HEAT,
ThermostatMode.AUTO.value: HVAC_MODE_HEAT_COOL, ThermostatMode.AUTO.value: HVACMode.HEAT_COOL,
} }
HASS_TO_ELK_FAN_MODES = { HASS_TO_ELK_FAN_MODES = {
FAN_AUTO: (None, ThermostatFan.AUTO.value), FAN_AUTO: (None, ThermostatFan.AUTO.value),
@ -87,7 +84,7 @@ class ElkThermostat(ElkEntity, ClimateEntity):
def __init__(self, element: Element, elk: Elk, elk_data: dict[str, Any]) -> None: def __init__(self, element: Element, elk: Elk, elk_data: dict[str, Any]) -> None:
"""Initialize climate entity.""" """Initialize climate entity."""
super().__init__(element, elk, elk_data) super().__init__(element, elk, elk_data)
self._state: str = HVAC_MODE_OFF self._state: str = HVACMode.OFF
@property @property
def temperature_unit(self) -> str: def temperature_unit(self) -> str:
@ -137,7 +134,7 @@ class ElkThermostat(ElkEntity, ClimateEntity):
return self._state return self._state
@property @property
def hvac_modes(self) -> list[str]: def hvac_modes(self) -> list[HVACMode]:
"""Return the list of available operation modes.""" """Return the list of available operation modes."""
return SUPPORT_HVAC return SUPPORT_HVAC
@ -172,7 +169,7 @@ class ElkThermostat(ElkEntity, ClimateEntity):
if fan is not None: if fan is not None:
self._element.set(ThermostatSetting.FAN.value, fan) self._element.set(ThermostatSetting.FAN.value, fan)
async def async_set_hvac_mode(self, hvac_mode: str) -> None: async def async_set_hvac_mode(self, hvac_mode: HVACMode) -> None:
"""Set thermostat operation mode.""" """Set thermostat operation mode."""
thermostat_mode, fan_mode = HASS_TO_ELK_HVAC_MODES[hvac_mode] thermostat_mode, fan_mode = HASS_TO_ELK_HVAC_MODES[hvac_mode]
self._elk_set(thermostat_mode, fan_mode) self._elk_set(thermostat_mode, fan_mode)
@ -192,7 +189,7 @@ class ElkThermostat(ElkEntity, ClimateEntity):
async def async_set_fan_mode(self, fan_mode: str) -> None: async def async_set_fan_mode(self, fan_mode: str) -> None:
"""Set new target fan mode.""" """Set new target fan mode."""
thermostat_mode, elk_fan_mode = HASS_TO_ELK_HVAC_MODES[fan_mode] thermostat_mode, elk_fan_mode = HASS_TO_ELK_FAN_MODES[fan_mode]
self._elk_set(thermostat_mode, elk_fan_mode) self._elk_set(thermostat_mode, elk_fan_mode)
async def async_set_temperature(self, **kwargs: Any) -> None: async def async_set_temperature(self, **kwargs: Any) -> None:
@ -206,5 +203,5 @@ class ElkThermostat(ElkEntity, ClimateEntity):
def _element_changed(self, element: Element, changeset: Any) -> None: def _element_changed(self, element: Element, changeset: Any) -> None:
self._state = ELK_TO_HASS_HVAC_MODES[self._element.mode] self._state = ELK_TO_HASS_HVAC_MODES[self._element.mode]
if self._state == HVAC_MODE_OFF and self._element.fan == ThermostatFan.ON.value: if self._state == HVACMode.OFF and self._element.fan == ThermostatFan.ON.value:
self._state = HVAC_MODE_FAN_ONLY self._state = HVACMode.FAN_ONLY