diff --git a/homeassistant/components/lyric/climate.py b/homeassistant/components/lyric/climate.py index 332ef3fec16..90d9e407cb2 100644 --- a/homeassistant/components/lyric/climate.py +++ b/homeassistant/components/lyric/climate.py @@ -182,6 +182,12 @@ class LyricClimate(LyricDeviceEntity, ClimateEntity): device: LyricDevice, ) -> None: """Initialize Honeywell Lyric climate entity.""" + # Define thermostat type (TCC - e.g., Lyric round; LCC - e.g., T5,6) + if device.changeableValues.thermostatSetpointStatus: + self._attr_thermostat_type = LyricThermostatType.LCC + else: + self._attr_thermostat_type = LyricThermostatType.TCC + # Use the native temperature unit from the device settings if device.units == "Fahrenheit": self._attr_temperature_unit = UnitOfTemperature.FAHRENHEIT @@ -207,12 +213,10 @@ class LyricClimate(LyricDeviceEntity, ClimateEntity): self._attr_hvac_modes.append(HVACMode.HEAT_COOL) # Setup supported features - if device.changeableValues.thermostatSetpointStatus: + if self._attr_thermostat_type is LyricThermostatType.LCC: self._attr_supported_features = SUPPORT_FLAGS_LCC - self._attr_thermostat_type = LyricThermostatType.LCC else: self._attr_supported_features = SUPPORT_FLAGS_TCC - self._attr_thermostat_type = LyricThermostatType.TCC # Setup supported fan modes if device_fan_modes := device.settings.attributes.get("fan", {}).get( @@ -328,20 +332,19 @@ class LyricClimate(LyricDeviceEntity, ClimateEntity): target_temp_low = kwargs.get(ATTR_TARGET_TEMP_LOW) target_temp_high = kwargs.get(ATTR_TARGET_TEMP_HIGH) - if device.changeableValues.autoChangeoverActive: + if device.changeableValues.mode == LYRIC_HVAC_MODE_HEAT_COOL: if target_temp_low is None or target_temp_high is None: raise HomeAssistantError( "Could not find target_temp_low and/or target_temp_high in" " arguments" ) - # If the device supports "Auto" mode, don't pass the mode when setting the - # temperature - mode = ( - None - if device.changeableValues.mode == LYRIC_HVAC_MODE_HEAT_COOL - else HVAC_MODES[device.changeableValues.heatCoolMode] - ) + # If TCC device pass the heatCoolMode value, otherwise + # if LCC device can skip the mode altogether + if self._attr_thermostat_type is LyricThermostatType.TCC: + mode = HVAC_MODES[device.changeableValues.heatCoolMode] + else: + mode = None _LOGGER.debug("Set temperature: %s - %s", target_temp_low, target_temp_high) try: @@ -385,12 +388,12 @@ class LyricClimate(LyricDeviceEntity, ClimateEntity): await self.coordinator.async_refresh() async def _async_set_hvac_mode_tcc(self, hvac_mode: HVACMode) -> None: + """Set hvac mode for TCC devices (e.g., Lyric round).""" if LYRIC_HVAC_MODES[hvac_mode] == LYRIC_HVAC_MODE_HEAT_COOL: # If the system is off, turn it to Heat first then to Auto, - # otherwise it turns to. - # Auto briefly and then reverts to Off (perhaps related to - # heatCoolMode). This is the behavior that happens with the - # native app as well, so likely a bug in the api itself + # otherwise it turns to Auto briefly and then reverts to Off. + # This is the behavior that happens with the native app as well, + # so likely a bug in the api itself. if HVAC_MODES[self.device.changeableValues.mode] == HVACMode.OFF: _LOGGER.debug( "HVAC mode passed to lyric: %s",