mirror of
https://github.com/home-assistant/core.git
synced 2025-07-27 15:17:35 +00:00
Add izone control zone (#43984)
This commit is contained in:
parent
0b63510cab
commit
91a54eecb3
@ -110,6 +110,8 @@ class ControllerDevice(ClimateEntity):
|
|||||||
|
|
||||||
self._supported_features = SUPPORT_FAN_MODE
|
self._supported_features = SUPPORT_FAN_MODE
|
||||||
|
|
||||||
|
# If mode RAS, or mode master with CtrlZone 13 then can set master temperature,
|
||||||
|
# otherwise the unit determines which zone to use as target. See interface manual p. 8
|
||||||
if (
|
if (
|
||||||
controller.ras_mode == "master" and controller.zone_ctrl == 13
|
controller.ras_mode == "master" and controller.zone_ctrl == 13
|
||||||
) or controller.ras_mode == "RAS":
|
) or controller.ras_mode == "RAS":
|
||||||
@ -269,6 +271,16 @@ class ControllerDevice(ClimateEntity):
|
|||||||
self.temperature_unit,
|
self.temperature_unit,
|
||||||
PRECISION_HALVES,
|
PRECISION_HALVES,
|
||||||
),
|
),
|
||||||
|
"control_zone": self._controller.zone_ctrl,
|
||||||
|
"control_zone_name": self.control_zone_name,
|
||||||
|
# Feature SUPPORT_TARGET_TEMPERATURE controls both displaying target temp & setting it
|
||||||
|
# As the feature is turned off for zone control, report target temp as extra state attribute
|
||||||
|
"control_zone_setpoint": show_temp(
|
||||||
|
self.hass,
|
||||||
|
self.control_zone_setpoint,
|
||||||
|
self.temperature_unit,
|
||||||
|
PRECISION_HALVES,
|
||||||
|
),
|
||||||
}
|
}
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@ -314,13 +326,35 @@ class ControllerDevice(ClimateEntity):
|
|||||||
return self._controller.temp_supply
|
return self._controller.temp_supply
|
||||||
return self._controller.temp_return
|
return self._controller.temp_return
|
||||||
|
|
||||||
|
@property
|
||||||
|
def control_zone_name(self):
|
||||||
|
"""Return the zone that currently controls the AC unit (if target temp not set by controller)."""
|
||||||
|
if self._supported_features & SUPPORT_TARGET_TEMPERATURE:
|
||||||
|
return None
|
||||||
|
zone_ctrl = self._controller.zone_ctrl
|
||||||
|
zone = next((z for z in self.zones.values() if z.zone_index == zone_ctrl), None)
|
||||||
|
if zone is None:
|
||||||
|
return None
|
||||||
|
return zone.name
|
||||||
|
|
||||||
|
@property
|
||||||
|
def control_zone_setpoint(self) -> Optional[float]:
|
||||||
|
"""Return the temperature setpoint of the zone that currently controls the AC unit (if target temp not set by controller)."""
|
||||||
|
if self._supported_features & SUPPORT_TARGET_TEMPERATURE:
|
||||||
|
return None
|
||||||
|
zone_ctrl = self._controller.zone_ctrl
|
||||||
|
zone = next((z for z in self.zones.values() if z.zone_index == zone_ctrl), None)
|
||||||
|
if zone is None:
|
||||||
|
return None
|
||||||
|
return zone.target_temperature
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@_return_on_connection_error()
|
@_return_on_connection_error()
|
||||||
def target_temperature(self) -> Optional[float]:
|
def target_temperature(self) -> Optional[float]:
|
||||||
"""Return the temperature we try to reach."""
|
"""Return the temperature we try to reach (either from control zone or master unit)."""
|
||||||
if not self._supported_features & SUPPORT_TARGET_TEMPERATURE:
|
if self._supported_features & SUPPORT_TARGET_TEMPERATURE:
|
||||||
return None
|
return self._controller.temp_setpoint
|
||||||
return self._controller.temp_setpoint
|
return self.control_zone_setpoint
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def supply_temperature(self) -> float:
|
def supply_temperature(self) -> float:
|
||||||
@ -569,3 +603,15 @@ class ZoneDevice(ClimateEntity):
|
|||||||
"""Turn device off (close zone)."""
|
"""Turn device off (close zone)."""
|
||||||
await self._controller.wrap_and_catch(self._zone.set_mode(Zone.Mode.CLOSE))
|
await self._controller.wrap_and_catch(self._zone.set_mode(Zone.Mode.CLOSE))
|
||||||
self.async_write_ha_state()
|
self.async_write_ha_state()
|
||||||
|
|
||||||
|
@property
|
||||||
|
def zone_index(self):
|
||||||
|
"""Return the zone index for matching to CtrlZone."""
|
||||||
|
return self._zone.index
|
||||||
|
|
||||||
|
@property
|
||||||
|
def device_state_attributes(self):
|
||||||
|
"""Return the optional state attributes."""
|
||||||
|
return {
|
||||||
|
"zone_index": self.zone_index,
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user