Honeywell auto mode invalid attribute (#86728)

fixes undefined
This commit is contained in:
mkmer 2023-01-30 18:04:00 -05:00 committed by GitHub
parent 28affe91be
commit 365ce55d77
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -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: