Use climate enums in homekit (#70770)

This commit is contained in:
epenet 2022-04-26 11:27:38 +02:00 committed by GitHub
parent c44b7cc4c0
commit 9dfc2636a9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -20,12 +20,6 @@ from homeassistant.components.climate.const import (
ATTR_SWING_MODES, ATTR_SWING_MODES,
ATTR_TARGET_TEMP_HIGH, ATTR_TARGET_TEMP_HIGH,
ATTR_TARGET_TEMP_LOW, ATTR_TARGET_TEMP_LOW,
CURRENT_HVAC_COOL,
CURRENT_HVAC_DRY,
CURRENT_HVAC_FAN,
CURRENT_HVAC_HEAT,
CURRENT_HVAC_IDLE,
CURRENT_HVAC_OFF,
DEFAULT_MAX_TEMP, DEFAULT_MAX_TEMP,
DEFAULT_MIN_HUMIDITY, DEFAULT_MIN_HUMIDITY,
DEFAULT_MIN_TEMP, DEFAULT_MIN_TEMP,
@ -37,13 +31,6 @@ from homeassistant.components.climate.const import (
FAN_MIDDLE, FAN_MIDDLE,
FAN_OFF, FAN_OFF,
FAN_ON, 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,
SERVICE_SET_FAN_MODE, SERVICE_SET_FAN_MODE,
SERVICE_SET_HUMIDITY, SERVICE_SET_HUMIDITY,
SERVICE_SET_HVAC_MODE as SERVICE_SET_HVAC_MODE_THERMOSTAT, SERVICE_SET_HVAC_MODE as SERVICE_SET_HVAC_MODE_THERMOSTAT,
@ -54,6 +41,8 @@ from homeassistant.components.climate.const import (
SWING_OFF, SWING_OFF,
SWING_ON, SWING_ON,
SWING_VERTICAL, SWING_VERTICAL,
HVACAction,
HVACMode,
) )
from homeassistant.components.water_heater import ( from homeassistant.components.water_heater import (
DOMAIN as DOMAIN_WATER_HEATER, DOMAIN as DOMAIN_WATER_HEATER,
@ -102,10 +91,10 @@ from .util import temperature_to_homekit, temperature_to_states
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
DEFAULT_HVAC_MODES = [ DEFAULT_HVAC_MODES = [
HVAC_MODE_HEAT, HVACMode.HEAT,
HVAC_MODE_COOL, HVACMode.COOL,
HVAC_MODE_HEAT_COOL, HVACMode.HEAT_COOL,
HVAC_MODE_OFF, HVACMode.OFF,
] ]
HC_HOMEKIT_VALID_MODES_WATER_HEATER = {"Heat": 1} HC_HOMEKIT_VALID_MODES_WATER_HEATER = {"Heat": 1}
@ -140,23 +129,23 @@ HC_MAX_TEMP = 38
UNIT_HOMEKIT_TO_HASS = {c: s for s, c in UNIT_HASS_TO_HOMEKIT.items()} UNIT_HOMEKIT_TO_HASS = {c: s for s, c in UNIT_HASS_TO_HOMEKIT.items()}
HC_HASS_TO_HOMEKIT = { HC_HASS_TO_HOMEKIT = {
HVAC_MODE_OFF: HC_HEAT_COOL_OFF, HVACMode.OFF: HC_HEAT_COOL_OFF,
HVAC_MODE_HEAT: HC_HEAT_COOL_HEAT, HVACMode.HEAT: HC_HEAT_COOL_HEAT,
HVAC_MODE_COOL: HC_HEAT_COOL_COOL, HVACMode.COOL: HC_HEAT_COOL_COOL,
HVAC_MODE_AUTO: HC_HEAT_COOL_AUTO, HVACMode.AUTO: HC_HEAT_COOL_AUTO,
HVAC_MODE_HEAT_COOL: HC_HEAT_COOL_AUTO, HVACMode.HEAT_COOL: HC_HEAT_COOL_AUTO,
HVAC_MODE_DRY: HC_HEAT_COOL_COOL, HVACMode.DRY: HC_HEAT_COOL_COOL,
HVAC_MODE_FAN_ONLY: HC_HEAT_COOL_COOL, HVACMode.FAN_ONLY: HC_HEAT_COOL_COOL,
} }
HC_HOMEKIT_TO_HASS = {c: s for s, c in HC_HASS_TO_HOMEKIT.items()} HC_HOMEKIT_TO_HASS = {c: s for s, c in HC_HASS_TO_HOMEKIT.items()}
HC_HASS_TO_HOMEKIT_ACTION = { HC_HASS_TO_HOMEKIT_ACTION = {
CURRENT_HVAC_OFF: HC_HEAT_COOL_OFF, HVACAction.OFF: HC_HEAT_COOL_OFF,
CURRENT_HVAC_IDLE: HC_HEAT_COOL_OFF, HVACAction.IDLE: HC_HEAT_COOL_OFF,
CURRENT_HVAC_HEAT: HC_HEAT_COOL_HEAT, HVACAction.HEATING: HC_HEAT_COOL_HEAT,
CURRENT_HVAC_COOL: HC_HEAT_COOL_COOL, HVACAction.COOLING: HC_HEAT_COOL_COOL,
CURRENT_HVAC_DRY: HC_HEAT_COOL_COOL, HVACAction.DRYING: HC_HEAT_COOL_COOL,
CURRENT_HVAC_FAN: HC_HEAT_COOL_COOL, HVACAction.FAN: HC_HEAT_COOL_COOL,
} }
FAN_STATE_INACTIVE = 0 FAN_STATE_INACTIVE = 0
@ -164,12 +153,12 @@ FAN_STATE_IDLE = 1
FAN_STATE_ACTIVE = 2 FAN_STATE_ACTIVE = 2
HC_HASS_TO_HOMEKIT_FAN_STATE = { HC_HASS_TO_HOMEKIT_FAN_STATE = {
CURRENT_HVAC_OFF: FAN_STATE_INACTIVE, HVACAction.OFF: FAN_STATE_INACTIVE,
CURRENT_HVAC_IDLE: FAN_STATE_IDLE, HVACAction.IDLE: FAN_STATE_IDLE,
CURRENT_HVAC_HEAT: FAN_STATE_ACTIVE, HVACAction.HEATING: FAN_STATE_ACTIVE,
CURRENT_HVAC_COOL: FAN_STATE_ACTIVE, HVACAction.COOLING: FAN_STATE_ACTIVE,
CURRENT_HVAC_DRY: FAN_STATE_ACTIVE, HVACAction.DRYING: FAN_STATE_ACTIVE,
CURRENT_HVAC_FAN: FAN_STATE_ACTIVE, HVACAction.FAN: FAN_STATE_ACTIVE,
} }
HEAT_COOL_DEADBAND = 5 HEAT_COOL_DEADBAND = 5
@ -539,17 +528,17 @@ class Thermostat(HomeAccessory):
# heating or cooling comes on to maintain a target temp which is closest to # heating or cooling comes on to maintain a target temp which is closest to
# the Home Assistant spec # the Home Assistant spec
# #
# HVAC_MODE_HEAT_COOL: The device supports heating/cooling to a range # HVACMode.HEAT_COOL: The device supports heating/cooling to a range
self.hc_homekit_to_hass = { self.hc_homekit_to_hass = {
c: s c: s
for s, c in HC_HASS_TO_HOMEKIT.items() for s, c in HC_HASS_TO_HOMEKIT.items()
if ( if (
s in hc_modes s in hc_modes
and not ( and not (
(s == HVAC_MODE_AUTO and HVAC_MODE_HEAT_COOL in hc_modes) (s == HVACMode.AUTO and HVACMode.HEAT_COOL in hc_modes)
or ( or (
s in (HVAC_MODE_DRY, HVAC_MODE_FAN_ONLY) s in (HVACMode.DRY, HVACMode.FAN_ONLY)
and HVAC_MODE_COOL in hc_modes and HVACMode.COOL in hc_modes
) )
) )
) )
@ -711,7 +700,7 @@ class Thermostat(HomeAccessory):
) )
self.char_active.set_value( self.char_active.set_value(
int(new_state.state != HVAC_MODE_OFF and fan_mode_lower != FAN_OFF) int(new_state.state != HVACMode.OFF and fan_mode_lower != FAN_OFF)
) )
@ -769,7 +758,7 @@ class WaterHeater(HomeAccessory):
def set_heat_cool(self, value): def set_heat_cool(self, value):
"""Change operation mode to value if call came from HomeKit.""" """Change operation mode to value if call came from HomeKit."""
_LOGGER.debug("%s: Set heat-cool to %d", self.entity_id, value) _LOGGER.debug("%s: Set heat-cool to %d", self.entity_id, value)
if HC_HOMEKIT_TO_HASS[value] != HVAC_MODE_HEAT: if HC_HOMEKIT_TO_HASS[value] != HVACMode.HEAT:
self.char_target_heat_cool.set_value(1) # Heat self.char_target_heat_cool.set_value(1) # Heat
def set_target_temperature(self, value): def set_target_temperature(self, value):