mirror of
https://github.com/home-assistant/core.git
synced 2025-07-14 16:57:10 +00:00
initial commit (#30968)
This commit is contained in:
parent
ecef0f6e93
commit
a40a5a754b
@ -93,20 +93,6 @@ async def async_setup_platform(
|
|||||||
broker.params[CONF_LOCATION_IDX],
|
broker.params[CONF_LOCATION_IDX],
|
||||||
)
|
)
|
||||||
|
|
||||||
# special case of RoundModulation/RoundWireless as a single zone system
|
|
||||||
if len(broker.tcs.zones) == 1 and list(broker.tcs.zones.keys())[0] == "Thermostat":
|
|
||||||
zone = list(broker.tcs.zones.values())[0]
|
|
||||||
_LOGGER.debug(
|
|
||||||
"Found the Thermostat (%s), id=%s, name=%s",
|
|
||||||
zone.modelType,
|
|
||||||
zone.zoneId,
|
|
||||||
zone.name,
|
|
||||||
)
|
|
||||||
new_entity = EvoThermostat(broker, zone)
|
|
||||||
|
|
||||||
async_add_entities([new_entity], update_before_add=True)
|
|
||||||
return
|
|
||||||
|
|
||||||
controller = EvoController(broker, broker.tcs)
|
controller = EvoController(broker, broker.tcs)
|
||||||
|
|
||||||
zones = []
|
zones = []
|
||||||
@ -134,32 +120,6 @@ class EvoClimateDevice(EvoDevice, ClimateDevice):
|
|||||||
|
|
||||||
self._preset_modes = None
|
self._preset_modes = None
|
||||||
|
|
||||||
async def async_tcs_svc_request(self, service: dict, data: dict) -> None:
|
|
||||||
"""Process a service request (system mode) for a controller.
|
|
||||||
|
|
||||||
Data validation is not required, it will have been done upstream.
|
|
||||||
"""
|
|
||||||
if service == SVC_SET_SYSTEM_MODE:
|
|
||||||
mode = data[ATTR_SYSTEM_MODE]
|
|
||||||
else: # otherwise it is SVC_RESET_SYSTEM
|
|
||||||
mode = EVO_RESET
|
|
||||||
|
|
||||||
if ATTR_DURATION_DAYS in data:
|
|
||||||
until = dt.combine(dt.now().date(), dt.min.time())
|
|
||||||
until += data[ATTR_DURATION_DAYS]
|
|
||||||
|
|
||||||
elif ATTR_DURATION_HOURS in data:
|
|
||||||
until = dt.now() + data[ATTR_DURATION_HOURS]
|
|
||||||
|
|
||||||
else:
|
|
||||||
until = None
|
|
||||||
|
|
||||||
await self._set_tcs_mode(mode, until=until)
|
|
||||||
|
|
||||||
async def _set_tcs_mode(self, mode: str, until: Optional[dt] = None) -> None:
|
|
||||||
"""Set a Controller to any of its native EVO_* operating modes."""
|
|
||||||
await self._evo_broker.call_client_api(self._evo_tcs.set_status(mode))
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def hvac_modes(self) -> List[str]:
|
def hvac_modes(self) -> List[str]:
|
||||||
"""Return a list of available hvac operation modes."""
|
"""Return a list of available hvac operation modes."""
|
||||||
@ -355,7 +315,38 @@ class EvoController(EvoClimateDevice):
|
|||||||
|
|
||||||
self._precision = PRECISION_TENTHS
|
self._precision = PRECISION_TENTHS
|
||||||
self._supported_features = SUPPORT_PRESET_MODE
|
self._supported_features = SUPPORT_PRESET_MODE
|
||||||
self._preset_modes = list(HA_PRESET_TO_TCS)
|
|
||||||
|
modes = [m["systemMode"] for m in evo_broker.config["allowedSystemModes"]]
|
||||||
|
self._preset_modes = [
|
||||||
|
TCS_PRESET_TO_HA[m] for m in modes if m in list(TCS_PRESET_TO_HA)
|
||||||
|
]
|
||||||
|
self._supported_features = SUPPORT_PRESET_MODE if self._preset_modes else 0
|
||||||
|
|
||||||
|
async def async_tcs_svc_request(self, service: dict, data: dict) -> None:
|
||||||
|
"""Process a service request (system mode) for a controller.
|
||||||
|
|
||||||
|
Data validation is not required, it will have been done upstream.
|
||||||
|
"""
|
||||||
|
if service == SVC_SET_SYSTEM_MODE:
|
||||||
|
mode = data[ATTR_SYSTEM_MODE]
|
||||||
|
else: # otherwise it is SVC_RESET_SYSTEM
|
||||||
|
mode = EVO_RESET
|
||||||
|
|
||||||
|
if ATTR_DURATION_DAYS in data:
|
||||||
|
until = dt.combine(dt.now().date(), dt.min.time())
|
||||||
|
until += data[ATTR_DURATION_DAYS]
|
||||||
|
|
||||||
|
elif ATTR_DURATION_HOURS in data:
|
||||||
|
until = dt.now() + data[ATTR_DURATION_HOURS]
|
||||||
|
|
||||||
|
else:
|
||||||
|
until = None
|
||||||
|
|
||||||
|
await self._set_tcs_mode(mode, until=until)
|
||||||
|
|
||||||
|
async def _set_tcs_mode(self, mode: str, until: Optional[dt] = None) -> None:
|
||||||
|
"""Set a Controller to any of its native EVO_* operating modes."""
|
||||||
|
await self._evo_broker.call_client_api(self._evo_tcs.set_status(mode))
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def hvac_mode(self) -> str:
|
def hvac_mode(self) -> str:
|
||||||
@ -413,58 +404,3 @@ class EvoController(EvoClimateDevice):
|
|||||||
attrs["activeSystemFaults"] = getattr(self._evo_tcs, attr)
|
attrs["activeSystemFaults"] = getattr(self._evo_tcs, attr)
|
||||||
else:
|
else:
|
||||||
attrs[attr] = getattr(self._evo_tcs, attr)
|
attrs[attr] = getattr(self._evo_tcs, attr)
|
||||||
|
|
||||||
|
|
||||||
class EvoThermostat(EvoZone):
|
|
||||||
"""Base for a Honeywell TCC Round Thermostat.
|
|
||||||
|
|
||||||
These are implemented as a combined Controller/Zone.
|
|
||||||
"""
|
|
||||||
|
|
||||||
def __init__(self, evo_broker, evo_device) -> None:
|
|
||||||
"""Initialize the Thermostat."""
|
|
||||||
super().__init__(evo_broker, evo_device)
|
|
||||||
|
|
||||||
self._name = evo_broker.tcs.location.name
|
|
||||||
self._preset_modes = [PRESET_AWAY, PRESET_ECO]
|
|
||||||
|
|
||||||
@property
|
|
||||||
def hvac_mode(self) -> str:
|
|
||||||
"""Return the current operating mode."""
|
|
||||||
if self._evo_tcs.systemModeStatus["mode"] == EVO_HEATOFF:
|
|
||||||
return HVAC_MODE_OFF
|
|
||||||
|
|
||||||
return super().hvac_mode
|
|
||||||
|
|
||||||
@property
|
|
||||||
def preset_mode(self) -> Optional[str]:
|
|
||||||
"""Return the current preset mode, e.g., home, away, temp."""
|
|
||||||
if (
|
|
||||||
self._evo_tcs.systemModeStatus["mode"] == EVO_AUTOECO
|
|
||||||
and self._evo_device.setpointStatus["setpointMode"] == EVO_FOLLOW
|
|
||||||
):
|
|
||||||
return PRESET_ECO
|
|
||||||
|
|
||||||
return super().preset_mode
|
|
||||||
|
|
||||||
async def async_set_hvac_mode(self, hvac_mode: str) -> None:
|
|
||||||
"""Set an operating mode."""
|
|
||||||
await self._set_tcs_mode(HA_HVAC_TO_TCS.get(hvac_mode))
|
|
||||||
|
|
||||||
async def async_set_preset_mode(self, preset_mode: Optional[str]) -> None:
|
|
||||||
"""Set the preset mode; if None, then revert to following the schedule."""
|
|
||||||
if preset_mode in list(HA_PRESET_TO_TCS):
|
|
||||||
await self._set_tcs_mode(HA_PRESET_TO_TCS.get(preset_mode))
|
|
||||||
else:
|
|
||||||
await super().async_set_hvac_mode(preset_mode)
|
|
||||||
|
|
||||||
async def async_update(self) -> None:
|
|
||||||
"""Get the latest state data for the Thermostat."""
|
|
||||||
await super().async_update()
|
|
||||||
|
|
||||||
attrs = self._device_state_attrs
|
|
||||||
for attr in STATE_ATTRS_TCS:
|
|
||||||
if attr == "activeFaults": # self._evo_device also has "activeFaults"
|
|
||||||
attrs["activeSystemFaults"] = getattr(self._evo_tcs, attr)
|
|
||||||
else:
|
|
||||||
attrs[attr] = getattr(self._evo_tcs, attr)
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user