parent
28affe91be
commit
365ce55d77
1 changed files with 42 additions and 27 deletions
|
@ -178,10 +178,17 @@ class HoneywellUSThermostat(ClimateEntity):
|
|||
@property
|
||||
def min_temp(self) -> float:
|
||||
"""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"]
|
||||
if self.hvac_mode == HVACMode.HEAT:
|
||||
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
|
||||
|
||||
@property
|
||||
|
@ -189,8 +196,15 @@ class HoneywellUSThermostat(ClimateEntity):
|
|||
"""Return the maximum temperature."""
|
||||
if self.hvac_mode == HVACMode.COOL:
|
||||
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"]
|
||||
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
|
||||
|
||||
@property
|
||||
|
@ -266,42 +280,43 @@ class HoneywellUSThermostat(ClimateEntity):
|
|||
# Get current mode
|
||||
mode = self._device.system_mode
|
||||
# Set hold if this is not the case
|
||||
if getattr(self._device, f"hold_{mode}", None) 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)
|
||||
if self._device.hold_heat is False and self._device.hold_cool is False:
|
||||
# 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
|
||||
if mode in COOLING_MODES:
|
||||
await self._device.set_hold_cool(datetime.time(hour, minute))
|
||||
elif mode in HEATING_MODES:
|
||||
await self._device.set_hold_heat(datetime.time(hour, minute))
|
||||
await self._device.set_hold_cool(
|
||||
datetime.time(hour_cool, minute_cool)
|
||||
)
|
||||
if mode in HEATING_MODES:
|
||||
await self._device.set_hold_heat(
|
||||
datetime.time(hour_heat, minute_heat)
|
||||
)
|
||||
|
||||
# Set temperature
|
||||
if mode in COOLING_MODES:
|
||||
# Set temperature if not in auto
|
||||
elif mode == "cool":
|
||||
await self._device.set_setpoint_cool(temperature)
|
||||
elif mode in HEATING_MODES:
|
||||
elif mode == "heat":
|
||||
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:
|
||||
_LOGGER.error("Temperature %.1f out of range", temperature)
|
||||
except AIOSomecomfort.SomeComfortError as err:
|
||||
_LOGGER.error("Invalid temperature %.1f: %s", temperature, err)
|
||||
|
||||
async def async_set_temperature(self, **kwargs: Any) -> None:
|
||||
"""Set new target temperature."""
|
||||
if {HVACMode.COOL, HVACMode.HEAT} & set(self._hvac_mode_map):
|
||||
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:
|
||||
"""Set new target 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:
|
||||
await self._device.set_hold_cool(True)
|
||||
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_setpoint_heat(self._heat_away_temp)
|
||||
|
||||
|
@ -357,7 +372,7 @@ class HoneywellUSThermostat(ClimateEntity):
|
|||
# Set permanent hold
|
||||
if mode in COOLING_MODES:
|
||||
await self._device.set_hold_cool(True)
|
||||
elif mode in HEATING_MODES:
|
||||
if mode in HEATING_MODES:
|
||||
await self._device.set_hold_heat(True)
|
||||
|
||||
except AIOSomecomfort.SomeComfortError:
|
||||
|
|
Loading…
Add table
Reference in a new issue