Allow setting the nexia run mode with the hvac mode (#57940)
parent
f9d985553c
commit
d27ee4c1a4
|
@ -1,5 +1,7 @@
|
||||||
"""Support for Nexia / Trane XL thermostats."""
|
"""Support for Nexia / Trane XL thermostats."""
|
||||||
from nexia.const import (
|
from nexia.const import (
|
||||||
|
HOLD_PERMANENT,
|
||||||
|
HOLD_RESUME_SCHEDULE,
|
||||||
OPERATION_MODE_AUTO,
|
OPERATION_MODE_AUTO,
|
||||||
OPERATION_MODE_COOL,
|
OPERATION_MODE_COOL,
|
||||||
OPERATION_MODE_HEAT,
|
OPERATION_MODE_HEAT,
|
||||||
|
@ -14,6 +16,7 @@ import voluptuous as vol
|
||||||
from homeassistant.components.climate import ClimateEntity
|
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_MAX_HUMIDITY,
|
ATTR_MAX_HUMIDITY,
|
||||||
ATTR_MIN_HUMIDITY,
|
ATTR_MIN_HUMIDITY,
|
||||||
ATTR_TARGET_TEMP_HIGH,
|
ATTR_TARGET_TEMP_HIGH,
|
||||||
|
@ -45,6 +48,7 @@ from .const import (
|
||||||
ATTR_DEHUMIDIFY_SUPPORTED,
|
ATTR_DEHUMIDIFY_SUPPORTED,
|
||||||
ATTR_HUMIDIFY_SETPOINT,
|
ATTR_HUMIDIFY_SETPOINT,
|
||||||
ATTR_HUMIDIFY_SUPPORTED,
|
ATTR_HUMIDIFY_SUPPORTED,
|
||||||
|
ATTR_RUN_MODE,
|
||||||
ATTR_ZONE_STATUS,
|
ATTR_ZONE_STATUS,
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
SIGNAL_THERMOSTAT_UPDATE,
|
SIGNAL_THERMOSTAT_UPDATE,
|
||||||
|
@ -56,6 +60,7 @@ from .util import percent_conv
|
||||||
|
|
||||||
SERVICE_SET_AIRCLEANER_MODE = "set_aircleaner_mode"
|
SERVICE_SET_AIRCLEANER_MODE = "set_aircleaner_mode"
|
||||||
SERVICE_SET_HUMIDIFY_SETPOINT = "set_humidify_setpoint"
|
SERVICE_SET_HUMIDIFY_SETPOINT = "set_humidify_setpoint"
|
||||||
|
SERVICE_SET_HVAC_RUN_MODE = "set_hvac_run_mode"
|
||||||
|
|
||||||
SET_AIRCLEANER_SCHEMA = {
|
SET_AIRCLEANER_SCHEMA = {
|
||||||
vol.Required(ATTR_AIRCLEANER_MODE): cv.string,
|
vol.Required(ATTR_AIRCLEANER_MODE): cv.string,
|
||||||
|
@ -65,6 +70,17 @@ SET_HUMIDITY_SCHEMA = {
|
||||||
vol.Required(ATTR_HUMIDITY): vol.All(vol.Coerce(int), vol.Range(min=35, max=65)),
|
vol.Required(ATTR_HUMIDITY): vol.All(vol.Coerce(int), vol.Range(min=35, max=65)),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SET_HVAC_RUN_MODE_SCHEMA = vol.All(
|
||||||
|
cv.has_at_least_one_key(ATTR_RUN_MODE, ATTR_HVAC_MODE),
|
||||||
|
cv.make_entity_service_schema(
|
||||||
|
{
|
||||||
|
vol.Optional(ATTR_RUN_MODE): vol.In([HOLD_PERMANENT, HOLD_RESUME_SCHEDULE]),
|
||||||
|
vol.Optional(ATTR_HVAC_MODE): vol.In(
|
||||||
|
[HVAC_MODE_HEAT, HVAC_MODE_COOL, HVAC_MODE_AUTO]
|
||||||
|
),
|
||||||
|
}
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
#
|
#
|
||||||
# Nexia has two bits to determine hvac mode
|
# Nexia has two bits to determine hvac mode
|
||||||
|
@ -102,6 +118,9 @@ async def async_setup_entry(hass, config_entry, async_add_entities):
|
||||||
platform.async_register_entity_service(
|
platform.async_register_entity_service(
|
||||||
SERVICE_SET_AIRCLEANER_MODE, SET_AIRCLEANER_SCHEMA, SERVICE_SET_AIRCLEANER_MODE
|
SERVICE_SET_AIRCLEANER_MODE, SET_AIRCLEANER_SCHEMA, SERVICE_SET_AIRCLEANER_MODE
|
||||||
)
|
)
|
||||||
|
platform.async_register_entity_service(
|
||||||
|
SERVICE_SET_HVAC_RUN_MODE, SET_HVAC_RUN_MODE_SCHEMA, SERVICE_SET_HVAC_RUN_MODE
|
||||||
|
)
|
||||||
|
|
||||||
entities = []
|
entities = []
|
||||||
for thermostat_id in nexia_home.get_thermostat_ids():
|
for thermostat_id in nexia_home.get_thermostat_ids():
|
||||||
|
@ -188,6 +207,17 @@ class NexiaZone(NexiaThermostatZoneEntity, ClimateEntity):
|
||||||
self._thermostat.set_fan_mode(fan_mode)
|
self._thermostat.set_fan_mode(fan_mode)
|
||||||
self._signal_thermostat_update()
|
self._signal_thermostat_update()
|
||||||
|
|
||||||
|
def set_hvac_run_mode(self, run_mode, hvac_mode):
|
||||||
|
"""Set the hvac run mode."""
|
||||||
|
if run_mode is not None:
|
||||||
|
if run_mode == HOLD_PERMANENT:
|
||||||
|
self._zone.call_permanent_hold()
|
||||||
|
else:
|
||||||
|
self._zone.call_return_to_schedule()
|
||||||
|
if hvac_mode is not None:
|
||||||
|
self._zone.set_mode(mode=HA_TO_NEXIA_HVAC_MODE_MAP[hvac_mode])
|
||||||
|
self._signal_thermostat_update()
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def preset_mode(self):
|
def preset_mode(self):
|
||||||
"""Preset that is active."""
|
"""Preset that is active."""
|
||||||
|
|
|
@ -18,6 +18,8 @@ ATTR_DESCRIPTION = "description"
|
||||||
|
|
||||||
ATTR_AIRCLEANER_MODE = "aircleaner_mode"
|
ATTR_AIRCLEANER_MODE = "aircleaner_mode"
|
||||||
|
|
||||||
|
ATTR_RUN_MODE = "run_mode"
|
||||||
|
|
||||||
ATTR_ZONE_STATUS = "zone_status"
|
ATTR_ZONE_STATUS = "zone_status"
|
||||||
ATTR_HUMIDIFY_SUPPORTED = "humidify_supported"
|
ATTR_HUMIDIFY_SUPPORTED = "humidify_supported"
|
||||||
ATTR_DEHUMIDIFY_SUPPORTED = "dehumidify_supported"
|
ATTR_DEHUMIDIFY_SUPPORTED = "dehumidify_supported"
|
||||||
|
|
|
@ -34,3 +34,31 @@ set_humidify_setpoint:
|
||||||
min: 35
|
min: 35
|
||||||
max: 65
|
max: 65
|
||||||
unit_of_measurement: '%'
|
unit_of_measurement: '%'
|
||||||
|
|
||||||
|
set_hvac_run_mode:
|
||||||
|
name: Set hvac run mode
|
||||||
|
description: "The hvac run mode."
|
||||||
|
target:
|
||||||
|
entity:
|
||||||
|
integration: nexia
|
||||||
|
domain: climate
|
||||||
|
fields:
|
||||||
|
run_mode:
|
||||||
|
name: Run mode
|
||||||
|
description: 'Run the schedule or hold. If not specified, the current run mode will be used.'
|
||||||
|
required: false
|
||||||
|
selector:
|
||||||
|
select:
|
||||||
|
options:
|
||||||
|
- 'permanent_hold'
|
||||||
|
- 'run_schedule'
|
||||||
|
hvac_mode:
|
||||||
|
name: Hvac mode
|
||||||
|
description: 'The hvac mode to use for the schedule or hold. If not specified, the current hvac mode will be used.'
|
||||||
|
required: false
|
||||||
|
selector:
|
||||||
|
select:
|
||||||
|
options:
|
||||||
|
- 'auto'
|
||||||
|
- 'cool'
|
||||||
|
- 'heat'
|
||||||
|
|
Loading…
Reference in New Issue