Use climate enums in nexia (#70725)

This commit is contained in:
epenet 2022-04-26 09:06:33 +02:00 committed by GitHub
parent dbf567d664
commit 7fb8bb7769
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 29 additions and 36 deletions

View File

@ -18,21 +18,15 @@ from nexia.util import find_humidity_setpoint
from nexia.zone import NexiaThermostatZone from nexia.zone import NexiaThermostatZone
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 (
ATTR_HUMIDITY, ATTR_HUMIDITY,
ATTR_HVAC_MODE, ATTR_HVAC_MODE,
ATTR_TARGET_TEMP_HIGH, ATTR_TARGET_TEMP_HIGH,
ATTR_TARGET_TEMP_LOW, ATTR_TARGET_TEMP_LOW,
CURRENT_HVAC_COOL, ClimateEntityFeature,
CURRENT_HVAC_HEAT, HVACAction,
CURRENT_HVAC_IDLE, HVACMode,
CURRENT_HVAC_OFF,
HVAC_MODE_AUTO,
HVAC_MODE_COOL,
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 ATTR_TEMPERATURE, TEMP_CELSIUS, TEMP_FAHRENHEIT from homeassistant.const import ATTR_TEMPERATURE, TEMP_CELSIUS, TEMP_FAHRENHEIT
@ -75,7 +69,7 @@ SET_HVAC_RUN_MODE_SCHEMA = vol.All(
{ {
vol.Optional(ATTR_RUN_MODE): vol.In([HOLD_PERMANENT, HOLD_RESUME_SCHEDULE]), vol.Optional(ATTR_RUN_MODE): vol.In([HOLD_PERMANENT, HOLD_RESUME_SCHEDULE]),
vol.Optional(ATTR_HVAC_MODE): vol.In( vol.Optional(ATTR_HVAC_MODE): vol.In(
[HVAC_MODE_HEAT, HVAC_MODE_COOL, HVAC_MODE_AUTO] [HVACMode.HEAT, HVACMode.COOL, HVACMode.AUTO]
), ),
} }
), ),
@ -91,22 +85,22 @@ SET_HVAC_RUN_MODE_SCHEMA = vol.All(
# #
# #
HA_TO_NEXIA_HVAC_MODE_MAP = { HA_TO_NEXIA_HVAC_MODE_MAP = {
HVAC_MODE_HEAT: OPERATION_MODE_HEAT, HVACMode.HEAT: OPERATION_MODE_HEAT,
HVAC_MODE_COOL: OPERATION_MODE_COOL, HVACMode.COOL: OPERATION_MODE_COOL,
HVAC_MODE_HEAT_COOL: OPERATION_MODE_AUTO, HVACMode.HEAT_COOL: OPERATION_MODE_AUTO,
HVAC_MODE_AUTO: OPERATION_MODE_AUTO, HVACMode.AUTO: OPERATION_MODE_AUTO,
HVAC_MODE_OFF: OPERATION_MODE_OFF, HVACMode.OFF: OPERATION_MODE_OFF,
} }
NEXIA_TO_HA_HVAC_MODE_MAP = { NEXIA_TO_HA_HVAC_MODE_MAP = {
value: key for key, value in HA_TO_NEXIA_HVAC_MODE_MAP.items() value: key for key, value in HA_TO_NEXIA_HVAC_MODE_MAP.items()
} }
HVAC_MODES = [ HVAC_MODES = [
HVAC_MODE_OFF, HVACMode.OFF,
HVAC_MODE_AUTO, HVACMode.AUTO,
HVAC_MODE_HEAT_COOL, HVACMode.HEAT_COOL,
HVAC_MODE_HEAT, HVACMode.HEAT,
HVAC_MODE_COOL, HVACMode.COOL,
] ]
NEXIA_SUPPORTED = ( NEXIA_SUPPORTED = (
@ -275,25 +269,25 @@ class NexiaZone(NexiaThermostatZoneEntity, ClimateEntity):
return self._zone.get_heating_setpoint() return self._zone.get_heating_setpoint()
@property @property
def hvac_action(self) -> str: def hvac_action(self) -> HVACAction:
"""Operation ie. heat, cool, idle.""" """Operation ie. heat, cool, idle."""
system_status = self._thermostat.get_system_status() system_status = self._thermostat.get_system_status()
zone_called = self._zone.is_calling() zone_called = self._zone.is_calling()
if self._zone.get_requested_mode() == OPERATION_MODE_OFF: if self._zone.get_requested_mode() == OPERATION_MODE_OFF:
return CURRENT_HVAC_OFF return HVACAction.OFF
if not zone_called: if not zone_called:
return CURRENT_HVAC_IDLE return HVACAction.IDLE
if system_status == SYSTEM_STATUS_COOL: if system_status == SYSTEM_STATUS_COOL:
return CURRENT_HVAC_COOL return HVACAction.COOLING
if system_status == SYSTEM_STATUS_HEAT: if system_status == SYSTEM_STATUS_HEAT:
return CURRENT_HVAC_HEAT return HVACAction.HEATING
if system_status == SYSTEM_STATUS_IDLE: if system_status == SYSTEM_STATUS_IDLE:
return CURRENT_HVAC_IDLE return HVACAction.IDLE
return CURRENT_HVAC_IDLE return HVACAction.IDLE
@property @property
def hvac_mode(self): def hvac_mode(self) -> HVACMode:
"""Return current mode, as the user-visible name.""" """Return current mode, as the user-visible name."""
mode = self._zone.get_requested_mode() mode = self._zone.get_requested_mode()
hold = self._zone.is_in_permanent_hold() hold = self._zone.is_in_permanent_hold()
@ -304,7 +298,7 @@ class NexiaZone(NexiaThermostatZoneEntity, ClimateEntity):
# heating and cooling to the # heating and cooling to the
# temp range. # temp range.
if hold and mode == OPERATION_MODE_AUTO: if hold and mode == OPERATION_MODE_AUTO:
return HVAC_MODE_HEAT_COOL return HVACMode.HEAT_COOL
return NEXIA_TO_HA_HVAC_MODE_MAP[mode] return NEXIA_TO_HA_HVAC_MODE_MAP[mode]
@ -406,9 +400,9 @@ class NexiaZone(NexiaThermostatZoneEntity, ClimateEntity):
self.set_hvac_mode(OPERATION_MODE_AUTO) self.set_hvac_mode(OPERATION_MODE_AUTO)
self._signal_zone_update() self._signal_zone_update()
def set_hvac_mode(self, hvac_mode: str) -> None: def set_hvac_mode(self, hvac_mode: HVACMode) -> None:
"""Set the system mode (Auto, Heat_Cool, Cool, Heat, etc).""" """Set the system mode (Auto, Heat_Cool, Cool, Heat, etc)."""
if hvac_mode == HVAC_MODE_AUTO: if hvac_mode == HVACMode.AUTO:
self._zone.call_return_to_schedule() self._zone.call_return_to_schedule()
self._zone.set_mode(mode=OPERATION_MODE_AUTO) self._zone.set_mode(mode=OPERATION_MODE_AUTO)
else: else:

View File

@ -1,6 +1,5 @@
"""The lock tests for the august platform.""" """The lock tests for the august platform."""
from homeassistant.components.climate.const import HVACMode
from homeassistant.components.climate.const import HVAC_MODE_HEAT_COOL
from .util import async_init_integration from .util import async_init_integration
@ -11,7 +10,7 @@ async def test_climate_zones(hass):
await async_init_integration(hass) await async_init_integration(hass)
state = hass.states.get("climate.nick_office") state = hass.states.get("climate.nick_office")
assert state.state == HVAC_MODE_HEAT_COOL assert state.state == HVACMode.HEAT_COOL
expected_attributes = { expected_attributes = {
"attribution": "Data provided by mynexia.com", "attribution": "Data provided by mynexia.com",
"current_humidity": 52.0, "current_humidity": 52.0,
@ -45,7 +44,7 @@ async def test_climate_zones(hass):
) )
state = hass.states.get("climate.kitchen") state = hass.states.get("climate.kitchen")
assert state.state == HVAC_MODE_HEAT_COOL assert state.state == HVACMode.HEAT_COOL
expected_attributes = { expected_attributes = {
"attribution": "Data provided by mynexia.com", "attribution": "Data provided by mynexia.com",