1 """Support for fan entities."""
3 from __future__
import annotations
8 from thinqconnect
import DeviceType
9 from thinqconnect.integration
import ExtendedProperty
19 ordered_list_item_to_percentage,
20 percentage_to_ordered_list_item,
23 from .
import ThinqConfigEntry
24 from .coordinator
import DeviceDataUpdateCoordinator
25 from .entity
import ThinQEntity
27 DEVICE_TYPE_FAN_MAP: dict[DeviceType, tuple[FanEntityDescription, ...]] = {
28 DeviceType.CEILING_FAN: (
30 key=ExtendedProperty.FAN,
36 FOUR_STEP_SPEEDS = [
"low",
"mid",
"high",
"turbo"]
38 _LOGGER = logging.getLogger(__name__)
43 entry: ThinqConfigEntry,
44 async_add_entities: AddEntitiesCallback,
46 """Set up an entry for fan platform."""
47 entities: list[ThinQFanEntity] = []
48 for coordinator
in entry.runtime_data.coordinators.values():
50 descriptions := DEVICE_TYPE_FAN_MAP.get(coordinator.api.device.device_type)
52 for description
in descriptions:
55 for property_id
in coordinator.api.get_active_idx(description.key)
63 """Represent a thinq fan platform."""
67 coordinator: DeviceDataUpdateCoordinator,
68 entity_description: FanEntityDescription,
71 """Initialize fan platform."""
72 super().
__init__(coordinator, entity_description, property_id)
76 FanEntityFeature.SET_SPEED
77 | FanEntityFeature.TURN_ON
78 | FanEntityFeature.TURN_OFF
80 if (fan_modes := self.
datadatadatadata.fan_modes)
is not None:
86 """Update status itself."""
104 "[%s:%s] update status: %s -> %s (percentage=%s)",
105 self.coordinator.device_name,
113 """Set the speed percentage of the fan."""
118 value = percentage_to_ordered_list_item(
122 _LOGGER.exception(
"Failed to async_set_percentage")
126 "[%s:%s] async_set_percentage. percentage=%s, value=%s",
127 self.coordinator.device_name,
133 self.coordinator.api.async_set_fan_mode(self.
property_idproperty_id, value)
138 percentage: int |
None =
None,
139 preset_mode: str |
None =
None,
142 """Turn on the fan."""
144 "[%s:%s] async_turn_on", self.coordinator.device_name, self.
property_idproperty_id
149 """Turn the fan off."""
151 "[%s:%s] async_turn_off", self.coordinator.device_name, self.
property_idproperty_id
int|None percentage(self)
None async_call_api(self, Coroutine[Any, Any, Any] target, Callable[[], None]|None on_fail_method=None)
_ordered_named_fan_speeds
None async_set_percentage(self, int percentage)
None __init__(self, DeviceDataUpdateCoordinator coordinator, FanEntityDescription entity_description, str property_id)
None _update_status(self)
None async_turn_on(self, int|None percentage=None, str|None preset_mode=None, **Any kwargs)
None async_turn_off(self, **Any kwargs)
None async_turn_off(self, **Any kwargs)
None async_setup_entry(HomeAssistant hass, ThinqConfigEntry entry, AddEntitiesCallback async_add_entities)