Use climate enums in tado (#70742)

This commit is contained in:
epenet 2022-04-26 08:35:49 +02:00 committed by GitHub
parent 6df53d7c1f
commit f68eda97bc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 34 additions and 43 deletions

View File

@ -1,16 +1,18 @@
"""Support for Tado thermostats.""" """Support for Tado thermostats."""
from __future__ import annotations
import logging import logging
import voluptuous as vol import voluptuous as vol
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 (
CURRENT_HVAC_OFF,
FAN_AUTO, FAN_AUTO,
HVAC_MODE_HEAT,
HVAC_MODE_OFF,
PRESET_AWAY, PRESET_AWAY,
PRESET_HOME, PRESET_HOME,
ClimateEntityFeature,
HVACAction,
HVACMode,
) )
from homeassistant.config_entries import ConfigEntry from homeassistant.config_entries import ConfigEntry
from homeassistant.const import ATTR_TEMPERATURE, PRECISION_TENTHS, TEMP_CELSIUS from homeassistant.const import ATTR_TEMPERATURE, PRECISION_TENTHS, TEMP_CELSIUS
@ -160,7 +162,7 @@ def create_climate_entity(tado, name: str, zone_id: int, device_info: dict):
cool_temperatures = capabilities[CONST_MODE_COOL]["temperatures"] cool_temperatures = capabilities[CONST_MODE_COOL]["temperatures"]
else: else:
supported_hvac_modes.append(HVAC_MODE_HEAT) supported_hvac_modes.append(HVACMode.HEAT)
if CONST_MODE_HEAT in capabilities: if CONST_MODE_HEAT in capabilities:
heat_temperatures = capabilities[CONST_MODE_HEAT]["temperatures"] heat_temperatures = capabilities[CONST_MODE_HEAT]["temperatures"]
@ -260,7 +262,7 @@ class TadoClimate(TadoZoneEntity, ClimateEntity):
self._current_tado_fan_speed = CONST_FAN_OFF self._current_tado_fan_speed = CONST_FAN_OFF
self._current_tado_hvac_mode = CONST_MODE_OFF self._current_tado_hvac_mode = CONST_MODE_OFF
self._current_tado_hvac_action = CURRENT_HVAC_OFF self._current_tado_hvac_action = HVACAction.OFF
self._current_tado_swing_mode = TADO_SWING_OFF self._current_tado_swing_mode = TADO_SWING_OFF
self._tado_zone_data = None self._tado_zone_data = None
@ -308,15 +310,15 @@ class TadoClimate(TadoZoneEntity, ClimateEntity):
return self._tado_zone_data.current_temp return self._tado_zone_data.current_temp
@property @property
def hvac_mode(self): def hvac_mode(self) -> HVACMode:
"""Return hvac operation ie. heat, cool mode. """Return hvac operation ie. heat, cool mode.
Need to be one of HVAC_MODE_*. Need to be one of HVAC_MODE_*.
""" """
return TADO_TO_HA_HVAC_MODE_MAP.get(self._current_tado_hvac_mode, HVAC_MODE_OFF) return TADO_TO_HA_HVAC_MODE_MAP.get(self._current_tado_hvac_mode, HVACMode.OFF)
@property @property
def hvac_modes(self): def hvac_modes(self) -> list[HVACMode]:
"""Return the list of available hvac operation modes. """Return the list of available hvac operation modes.
Need to be a subset of HVAC_MODES. Need to be a subset of HVAC_MODES.
@ -324,13 +326,13 @@ class TadoClimate(TadoZoneEntity, ClimateEntity):
return self._supported_hvac_modes return self._supported_hvac_modes
@property @property
def hvac_action(self): def hvac_action(self) -> HVACAction:
"""Return the current running hvac operation if supported. """Return the current running hvac operation if supported.
Need to be one of CURRENT_HVAC_*. Need to be one of CURRENT_HVAC_*.
""" """
return TADO_HVAC_ACTION_TO_HA_HVAC_ACTION.get( return TADO_HVAC_ACTION_TO_HA_HVAC_ACTION.get(
self._tado_zone_data.current_hvac_action, CURRENT_HVAC_OFF self._tado_zone_data.current_hvac_action, HVACAction.OFF
) )
@property @property
@ -423,7 +425,7 @@ class TadoClimate(TadoZoneEntity, ClimateEntity):
new_hvac_mode = CONST_MODE_COOL if self._ac_device else CONST_MODE_HEAT new_hvac_mode = CONST_MODE_COOL if self._ac_device else CONST_MODE_HEAT
self._control_hvac(target_temp=temperature, hvac_mode=new_hvac_mode) self._control_hvac(target_temp=temperature, hvac_mode=new_hvac_mode)
def set_hvac_mode(self, hvac_mode): def set_hvac_mode(self, hvac_mode: HVACMode) -> None:
"""Set new target hvac mode.""" """Set new target hvac mode."""
self._control_hvac(hvac_mode=HA_TO_TADO_HVAC_MODE_MAP[hvac_mode]) self._control_hvac(hvac_mode=HA_TO_TADO_HVAC_MODE_MAP[hvac_mode])

View File

@ -11,36 +11,25 @@ from PyTado.const import (
) )
from homeassistant.components.climate.const import ( from homeassistant.components.climate.const import (
CURRENT_HVAC_COOL,
CURRENT_HVAC_DRY,
CURRENT_HVAC_FAN,
CURRENT_HVAC_HEAT,
CURRENT_HVAC_IDLE,
CURRENT_HVAC_OFF,
FAN_AUTO, FAN_AUTO,
FAN_HIGH, FAN_HIGH,
FAN_LOW, FAN_LOW,
FAN_MEDIUM, FAN_MEDIUM,
FAN_OFF, FAN_OFF,
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_AWAY,
PRESET_HOME, PRESET_HOME,
HVACAction,
HVACMode,
) )
TADO_HVAC_ACTION_TO_HA_HVAC_ACTION = { TADO_HVAC_ACTION_TO_HA_HVAC_ACTION = {
CONST_HVAC_HEAT: CURRENT_HVAC_HEAT, CONST_HVAC_HEAT: HVACAction.HEATING,
CONST_HVAC_DRY: CURRENT_HVAC_DRY, CONST_HVAC_DRY: HVACAction.DRYING,
CONST_HVAC_FAN: CURRENT_HVAC_FAN, CONST_HVAC_FAN: HVACAction.FAN,
CONST_HVAC_COOL: CURRENT_HVAC_COOL, CONST_HVAC_COOL: HVACAction.COOLING,
CONST_HVAC_IDLE: CURRENT_HVAC_IDLE, CONST_HVAC_IDLE: HVACAction.IDLE,
CONST_HVAC_OFF: CURRENT_HVAC_OFF, CONST_HVAC_OFF: HVACAction.OFF,
CONST_HVAC_HOT_WATER: CURRENT_HVAC_HEAT, CONST_HVAC_HOT_WATER: HVACAction.HEATING,
} }
# Configuration # Configuration
@ -121,10 +110,10 @@ ORDERED_KNOWN_TADO_MODES = [
] ]
TADO_MODES_TO_HA_CURRENT_HVAC_ACTION = { TADO_MODES_TO_HA_CURRENT_HVAC_ACTION = {
CONST_MODE_HEAT: CURRENT_HVAC_HEAT, CONST_MODE_HEAT: HVACAction.HEATING,
CONST_MODE_DRY: CURRENT_HVAC_DRY, CONST_MODE_DRY: HVACAction.DRYING,
CONST_MODE_FAN: CURRENT_HVAC_FAN, CONST_MODE_FAN: HVACAction.FAN,
CONST_MODE_COOL: CURRENT_HVAC_COOL, CONST_MODE_COOL: HVACAction.COOLING,
} }
# These modes will not allow a temp to be set # These modes will not allow a temp to be set
@ -137,13 +126,13 @@ TADO_MODES_WITH_NO_TEMP_SETTING = [CONST_MODE_AUTO, CONST_MODE_DRY, CONST_MODE_F
# This runs the smart schedule # This runs the smart schedule
# #
HA_TO_TADO_HVAC_MODE_MAP = { HA_TO_TADO_HVAC_MODE_MAP = {
HVAC_MODE_OFF: CONST_MODE_OFF, HVACMode.OFF: CONST_MODE_OFF,
HVAC_MODE_HEAT_COOL: CONST_MODE_AUTO, HVACMode.HEAT_COOL: CONST_MODE_AUTO,
HVAC_MODE_AUTO: CONST_MODE_SMART_SCHEDULE, HVACMode.AUTO: CONST_MODE_SMART_SCHEDULE,
HVAC_MODE_HEAT: CONST_MODE_HEAT, HVACMode.HEAT: CONST_MODE_HEAT,
HVAC_MODE_COOL: CONST_MODE_COOL, HVACMode.COOL: CONST_MODE_COOL,
HVAC_MODE_DRY: CONST_MODE_DRY, HVACMode.DRY: CONST_MODE_DRY,
HVAC_MODE_FAN_ONLY: CONST_MODE_FAN, HVACMode.FAN_ONLY: CONST_MODE_FAN,
} }
HA_TO_TADO_FAN_MODE_MAP = { HA_TO_TADO_FAN_MODE_MAP = {