Fix Vesync set_percentage error (#147751)

This commit is contained in:
cdnninja 2025-06-28 23:22:04 -06:00 committed by GitHub
parent 6d28b99344
commit 8bacab4f9c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -165,28 +165,36 @@ class VeSyncFanHA(VeSyncBaseEntity, FanEntity):
return attr return attr
def set_percentage(self, percentage: int) -> None: def set_percentage(self, percentage: int) -> None:
"""Set the speed of the device.""" """Set the speed of the device.
If percentage is 0, turn off the fan. Otherwise, ensure the fan is on,
set manual mode if needed, and set the speed.
"""
device_type = SKU_TO_BASE_DEVICE[self.device.device_type]
speed_range = SPEED_RANGE[device_type]
if percentage == 0: if percentage == 0:
success = self.device.turn_off() # Turning off is a special case: do not set speed or mode
if not success: if not self.device.turn_off():
raise HomeAssistantError("An error occurred while turning off.") raise HomeAssistantError("An error occurred while turning off.")
elif not self.device.is_on: self.schedule_update_ha_state()
success = self.device.turn_on() return
if not success:
# If the fan is off, turn it on first
if not self.device.is_on:
if not self.device.turn_on():
raise HomeAssistantError("An error occurred while turning on.") raise HomeAssistantError("An error occurred while turning on.")
success = self.device.manual_mode() # Switch to manual mode if not already set
if not success: if self.device.mode != VS_FAN_MODE_MANUAL:
raise HomeAssistantError("An error occurred while manual mode.") if not self.device.manual_mode():
success = self.device.change_fan_speed( raise HomeAssistantError("An error occurred while setting manual mode.")
math.ceil(
percentage_to_ranged_value( # Calculate the speed level and set it
SPEED_RANGE[SKU_TO_BASE_DEVICE[self.device.device_type]], percentage speed_level = math.ceil(percentage_to_ranged_value(speed_range, percentage))
) if not self.device.change_fan_speed(speed_level):
)
)
if not success:
raise HomeAssistantError("An error occurred while changing fan speed.") raise HomeAssistantError("An error occurred while changing fan speed.")
self.schedule_update_ha_state() self.schedule_update_ha_state()
def set_preset_mode(self, preset_mode: str) -> None: def set_preset_mode(self, preset_mode: str) -> None: