diff --git a/custom_components/tasmota_irhvac/climate.py b/custom_components/tasmota_irhvac/climate.py index daec09b..4a15b85 100644 --- a/custom_components/tasmota_irhvac/climate.py +++ b/custom_components/tasmota_irhvac/climate.py @@ -546,12 +546,11 @@ def __init__( self._attr_target_temperature_step = config[CONF_TEMP_STEP] self._attr_hvac_modes = config[CONF_MODES_LIST] self._attr_fan_modes = config.get(CONF_FAN_LIST) - self._quirk_fan_max_high = all([ - isinstance(self._attr_fan_modes, list), - HVAC_FAN_MAX_HIGH in self._attr_fan_modes, - HVAC_FAN_AUTO_MAX in self._attr_fan_modes, - ]) - if self._quirk_fan_max_high: + if ( + isinstance(self._attr_fan_modes, list) + and HVAC_FAN_MAX_HIGH in self._attr_fan_modes + and HVAC_FAN_AUTO_MAX in self._attr_fan_modes + ): new_fan_list = [] for val in self._attr_fan_modes: if val == HVAC_FAN_MAX_HIGH: @@ -561,9 +560,6 @@ def __init__( else: new_fan_list.append(val) self._attr_fan_modes = new_fan_list if len(new_fan_list) else None - self._quirk_fan_prettify = all(mode not in (self._attr_fan_modes or []) for mode in [FAN_LOW, FAN_HIGH]) - if self._quirk_fan_prettify and self._attr_fan_modes: - self._attr_fan_modes = [self.fan_prettify(mode) for mode in self._attr_fan_modes] self._attr_fan_mode = ( self._attr_fan_modes[0] if isinstance(self._attr_fan_modes, list) and len(self._attr_fan_modes) @@ -589,24 +585,6 @@ def __init__( if self._attr_swing_mode is not None: self._support_flags = self._support_flags | ClimateEntityFeature.SWING_MODE - def fan_prettify(self, mode): - if not self._quirk_fan_prettify: - return mode - if mode == HVAC_FAN_MIN: - return FAN_LOW - if mode == HVAC_FAN_MAX: - return FAN_HIGH - return mode - - def fan_unprettify(self, mode): - if not self._quirk_fan_prettify: - return mode - if mode == FAN_LOW: - return HVAC_FAN_MIN - if mode == FAN_HIGH: - return HVAC_FAN_MAX - return mode - async def async_added_to_hass(self): # Replacing `async_track_state_change` with `async_track_state_change_event` # See, https://developers.home-assistant.io/blog/2024/04/13/deprecate_async_track_state_change/ @@ -814,15 +792,17 @@ async def state_message_received(message: mqtt.ReceiveMessage) -> None: if "FanSpeed" in payload: fan_mode = payload["FanSpeed"].lower() # ELECTRA_AC fan modes fix - if self._quirk_fan_max_high: + if HVAC_FAN_MAX_HIGH in ( + self._attr_fan_modes or [] + ) and HVAC_FAN_AUTO_MAX in (self._attr_fan_modes or []): if fan_mode == HVAC_FAN_MAX: self._attr_fan_mode = FAN_HIGH elif fan_mode == HVAC_FAN_AUTO: self._attr_fan_mode = HVAC_FAN_MAX else: - self._attr_fan_mode = self.fan_prettify(fan_mode) + self._attr_fan_mode = fan_mode else: - self._attr_fan_mode = self.fan_prettify(fan_mode) + self._attr_fan_mode = fan_mode _LOGGER.debug(self._attr_fan_mode) if self._attr_hvac_mode is not HVACMode.OFF: @@ -953,12 +933,24 @@ async def async_set_temperature(self, **kwargs): async def async_set_fan_mode(self, fan_mode): """Set new target fan mode.""" if fan_mode not in (self._attr_fan_modes or []): - _LOGGER.error( - "Invalid fan mode selected. Got '%s'. Allowed modes are:", - fan_mode, - ) - _LOGGER.error(self._attr_fan_modes) - return + # tweak for some ELECTRA_AC devices + if HVAC_FAN_MAX_HIGH in ( + self._attr_fan_modes or [] + ) and HVAC_FAN_AUTO_MAX in (self._attr_fan_modes or []): + if fan_mode != FAN_HIGH and fan_mode != HVAC_FAN_MAX: + _LOGGER.error( + "Invalid swing mode selected. Got '%s'. Allowed modes are:", + fan_mode, + ) + _LOGGER.error(self._attr_fan_modes) + return + else: + _LOGGER.error( + "Invalid swing mode selected. Got '%s'. Allowed modes are:", + fan_mode, + ) + _LOGGER.error(self._attr_fan_modes) + return self._attr_fan_mode = fan_mode if not self._attr_hvac_mode == HVACMode.OFF: self.power_mode = STATE_ON @@ -1201,12 +1193,14 @@ async def set_mode(self, hvac_mode): async def send_ir(self): """Send the payload to tasmota mqtt topic.""" - fan_speed = self.fan_unprettify(self._attr_fan_mode) + fan_speed = self.fan_mode # tweak for some ELECTRA_AC devices - if self._quirk_fan_max_high: - if fan_speed == FAN_HIGH: + if HVAC_FAN_MAX_HIGH in (self._attr_fan_modes or []) and HVAC_FAN_AUTO_MAX in ( + self._attr_fan_modes or [] + ): + if self.fan_mode == FAN_HIGH: fan_speed = HVAC_FAN_MAX - elif fan_speed == HVAC_FAN_MAX: + if self.fan_mode == HVAC_FAN_MAX: fan_speed = HVAC_FAN_AUTO # Set the swing mode - default off