mirror of
https://github.com/home-assistant/core.git
synced 2025-07-19 11:17:21 +00:00
parent
28affe91be
commit
365ce55d77
@ -178,10 +178,17 @@ class HoneywellUSThermostat(ClimateEntity):
|
|||||||
@property
|
@property
|
||||||
def min_temp(self) -> float:
|
def min_temp(self) -> float:
|
||||||
"""Return the minimum temperature."""
|
"""Return the minimum temperature."""
|
||||||
if self.hvac_mode in [HVACMode.COOL, HVACMode.HEAT_COOL]:
|
if self.hvac_mode == HVACMode.COOL:
|
||||||
return self._device.raw_ui_data["CoolLowerSetptLimit"]
|
return self._device.raw_ui_data["CoolLowerSetptLimit"]
|
||||||
if self.hvac_mode == HVACMode.HEAT:
|
if self.hvac_mode == HVACMode.HEAT:
|
||||||
return self._device.raw_ui_data["HeatLowerSetptLimit"]
|
return self._device.raw_ui_data["HeatLowerSetptLimit"]
|
||||||
|
if self.hvac_mode == HVACMode.HEAT_COOL:
|
||||||
|
return min(
|
||||||
|
[
|
||||||
|
self._device.raw_ui_data["CoolLowerSetptLimit"],
|
||||||
|
self._device.raw_ui_data["HeatLowerSetptLimit"],
|
||||||
|
]
|
||||||
|
)
|
||||||
return DEFAULT_MIN_TEMP
|
return DEFAULT_MIN_TEMP
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@ -189,8 +196,15 @@ class HoneywellUSThermostat(ClimateEntity):
|
|||||||
"""Return the maximum temperature."""
|
"""Return the maximum temperature."""
|
||||||
if self.hvac_mode == HVACMode.COOL:
|
if self.hvac_mode == HVACMode.COOL:
|
||||||
return self._device.raw_ui_data["CoolUpperSetptLimit"]
|
return self._device.raw_ui_data["CoolUpperSetptLimit"]
|
||||||
if self.hvac_mode in [HVACMode.HEAT, HVACMode.HEAT_COOL]:
|
if self.hvac_mode == HVACMode.HEAT:
|
||||||
return self._device.raw_ui_data["HeatUpperSetptLimit"]
|
return self._device.raw_ui_data["HeatUpperSetptLimit"]
|
||||||
|
if self.hvac_mode == HVACMode.HEAT_COOL:
|
||||||
|
return max(
|
||||||
|
[
|
||||||
|
self._device.raw_ui_data["CoolUpperSetptLimit"],
|
||||||
|
self._device.raw_ui_data["HeatUpperSetptLimit"],
|
||||||
|
]
|
||||||
|
)
|
||||||
return DEFAULT_MAX_TEMP
|
return DEFAULT_MAX_TEMP
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@ -266,42 +280,43 @@ class HoneywellUSThermostat(ClimateEntity):
|
|||||||
# Get current mode
|
# Get current mode
|
||||||
mode = self._device.system_mode
|
mode = self._device.system_mode
|
||||||
# Set hold if this is not the case
|
# Set hold if this is not the case
|
||||||
if getattr(self._device, f"hold_{mode}", None) is False:
|
if self._device.hold_heat is False and self._device.hold_cool is False:
|
||||||
# Get next period key
|
|
||||||
next_period_key = f"{mode.capitalize()}NextPeriod"
|
|
||||||
# Get next period raw value
|
|
||||||
next_period = self._device.raw_ui_data.get(next_period_key)
|
|
||||||
# Get next period time
|
# Get next period time
|
||||||
hour, minute = divmod(next_period * 15, 60)
|
hour_heat, minute_heat = divmod(
|
||||||
|
self._device.raw_ui_data["HEATNextPeriod"] * 15, 60
|
||||||
|
)
|
||||||
|
hour_cool, minute_cool = divmod(
|
||||||
|
self._device.raw_ui_data["COOLNextPeriod"] * 15, 60
|
||||||
|
)
|
||||||
# Set hold time
|
# Set hold time
|
||||||
if mode in COOLING_MODES:
|
if mode in COOLING_MODES:
|
||||||
await self._device.set_hold_cool(datetime.time(hour, minute))
|
await self._device.set_hold_cool(
|
||||||
elif mode in HEATING_MODES:
|
datetime.time(hour_cool, minute_cool)
|
||||||
await self._device.set_hold_heat(datetime.time(hour, minute))
|
)
|
||||||
|
if mode in HEATING_MODES:
|
||||||
|
await self._device.set_hold_heat(
|
||||||
|
datetime.time(hour_heat, minute_heat)
|
||||||
|
)
|
||||||
|
|
||||||
# Set temperature
|
# Set temperature if not in auto
|
||||||
if mode in COOLING_MODES:
|
elif mode == "cool":
|
||||||
await self._device.set_setpoint_cool(temperature)
|
await self._device.set_setpoint_cool(temperature)
|
||||||
elif mode in HEATING_MODES:
|
elif mode == "heat":
|
||||||
await self._device.set_setpoint_heat(temperature)
|
await self._device.set_setpoint_heat(temperature)
|
||||||
|
elif mode == "auto":
|
||||||
|
if temperature := kwargs.get(ATTR_TARGET_TEMP_HIGH):
|
||||||
|
await self._device.set_setpoint_cool(temperature)
|
||||||
|
if temperature := kwargs.get(ATTR_TARGET_TEMP_LOW):
|
||||||
|
await self._device.set_setpoint_heat(temperature)
|
||||||
|
|
||||||
except AIOSomecomfort.SomeComfortError:
|
except AIOSomecomfort.SomeComfortError as err:
|
||||||
_LOGGER.error("Temperature %.1f out of range", temperature)
|
_LOGGER.error("Invalid temperature %.1f: %s", temperature, err)
|
||||||
|
|
||||||
async def async_set_temperature(self, **kwargs: Any) -> None:
|
async def async_set_temperature(self, **kwargs: Any) -> None:
|
||||||
"""Set new target temperature."""
|
"""Set new target temperature."""
|
||||||
if {HVACMode.COOL, HVACMode.HEAT} & set(self._hvac_mode_map):
|
if {HVACMode.COOL, HVACMode.HEAT} & set(self._hvac_mode_map):
|
||||||
await self._set_temperature(**kwargs)
|
await self._set_temperature(**kwargs)
|
||||||
|
|
||||||
try:
|
|
||||||
if HVACMode.HEAT_COOL in self._hvac_mode_map:
|
|
||||||
if temperature := kwargs.get(ATTR_TARGET_TEMP_HIGH):
|
|
||||||
await self._device.set_setpoint_cool(temperature)
|
|
||||||
if temperature := kwargs.get(ATTR_TARGET_TEMP_LOW):
|
|
||||||
await self._device.set_setpoint_heat(temperature)
|
|
||||||
except AIOSomecomfort.SomeComfortError as err:
|
|
||||||
_LOGGER.error("Invalid temperature %s: %s", temperature, err)
|
|
||||||
|
|
||||||
async def async_set_fan_mode(self, fan_mode: str) -> None:
|
async def async_set_fan_mode(self, fan_mode: str) -> None:
|
||||||
"""Set new target fan mode."""
|
"""Set new target fan mode."""
|
||||||
await self._device.set_fan_mode(self._fan_mode_map[fan_mode])
|
await self._device.set_fan_mode(self._fan_mode_map[fan_mode])
|
||||||
@ -331,7 +346,7 @@ class HoneywellUSThermostat(ClimateEntity):
|
|||||||
if mode in COOLING_MODES:
|
if mode in COOLING_MODES:
|
||||||
await self._device.set_hold_cool(True)
|
await self._device.set_hold_cool(True)
|
||||||
await self._device.set_setpoint_cool(self._cool_away_temp)
|
await self._device.set_setpoint_cool(self._cool_away_temp)
|
||||||
elif mode in HEATING_MODES:
|
if mode in HEATING_MODES:
|
||||||
await self._device.set_hold_heat(True)
|
await self._device.set_hold_heat(True)
|
||||||
await self._device.set_setpoint_heat(self._heat_away_temp)
|
await self._device.set_setpoint_heat(self._heat_away_temp)
|
||||||
|
|
||||||
@ -357,7 +372,7 @@ class HoneywellUSThermostat(ClimateEntity):
|
|||||||
# Set permanent hold
|
# Set permanent hold
|
||||||
if mode in COOLING_MODES:
|
if mode in COOLING_MODES:
|
||||||
await self._device.set_hold_cool(True)
|
await self._device.set_hold_cool(True)
|
||||||
elif mode in HEATING_MODES:
|
if mode in HEATING_MODES:
|
||||||
await self._device.set_hold_heat(True)
|
await self._device.set_hold_heat(True)
|
||||||
|
|
||||||
except AIOSomecomfort.SomeComfortError:
|
except AIOSomecomfort.SomeComfortError:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user