1 """Support for Rabbit Air fan entity."""
3 from __future__
import annotations
7 from rabbitair
import Mode, Model, Speed
14 ordered_list_item_to_percentage,
15 percentage_to_ordered_list_item,
18 from .const
import DOMAIN
19 from .coordinator
import RabbitAirDataUpdateCoordinator
20 from .entity
import RabbitAirBaseEntity
30 PRESET_MODE_AUTO =
"Auto"
31 PRESET_MODE_MANUAL =
"Manual"
32 PRESET_MODE_POLLEN =
"Pollen"
35 PRESET_MODE_AUTO: Mode.Auto,
36 PRESET_MODE_MANUAL: Mode.Manual,
37 PRESET_MODE_POLLEN: Mode.Pollen,
42 hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
44 """Set up a config entry."""
45 coordinator: RabbitAirDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
50 """Fan control functions of the Rabbit Air air purifier."""
52 _attr_supported_features = (
53 FanEntityFeature.PRESET_MODE
54 | FanEntityFeature.SET_SPEED
55 | FanEntityFeature.TURN_ON
56 | FanEntityFeature.TURN_OFF
58 _enable_turn_on_off_backwards_compatibility =
False
62 coordinator: RabbitAirDataUpdateCoordinator,
65 """Initialize the entity."""
68 if self.
_is_model_is_model(Model.MinusA2):
73 k
for k
in PRESET_MODES
if k != PRESET_MODE_POLLEN
82 """Handle updated data from the coordinator."""
87 """Populate the entity fields with values from the coordinator data."""
88 data = self.coordinator.data
93 elif data.speed
is None:
95 elif data.speed
is Speed.SuperSilent:
99 SPEED_LIST, data.speed
103 if not data.power
or data.mode
is None:
108 k
for k, v
in PRESET_MODES.items()
if v == data.mode
112 """Set new preset mode."""
113 await self.
_set_state_set_state(power=
True, mode=PRESET_MODES[preset_mode])
118 """Set the speed of the fan, as a percentage."""
120 value = percentage_to_ordered_list_item(SPEED_LIST, percentage)
121 await self.
_set_state_set_state(power=
True, speed=value)
131 percentage: int |
None =
None,
132 preset_mode: str |
None =
None,
135 """Turn on the fan."""
136 mode_value: Mode |
None =
None
137 if preset_mode
is not None:
138 mode_value = PRESET_MODES[preset_mode]
139 speed_value: Speed |
None =
None
140 if percentage
is not None:
141 speed_value = percentage_to_ordered_list_item(SPEED_LIST, percentage)
142 await self.
_set_state_set_state(power=
True, mode=mode_value, speed=speed_value)
143 if percentage
is not None:
145 if preset_mode
is not None:
150 """Turn the fan off."""
bool _is_model(self, Model|list[Model] model)
None _set_state(self, **Any kwargs)
None async_turn_on(self, int|None percentage=None, str|None preset_mode=None, **Any kwargs)
None __init__(self, RabbitAirDataUpdateCoordinator coordinator, ConfigEntry entry)
None async_set_preset_mode(self, str preset_mode)
None _handle_coordinator_update(self)
None async_set_percentage(self, int percentage)
None _get_state_from_coordinator_data(self)
None async_turn_off(self, **Any kwargs)
None async_write_ha_state(self)
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)