Home Assistant Unofficial Reference 2024.12.1
fan.py
Go to the documentation of this file.
1 """Lutron fan platform."""
2 
3 from __future__ import annotations
4 
5 import logging
6 from typing import Any
7 
8 from pylutron import Output
9 
10 from homeassistant.components.fan import FanEntity, FanEntityFeature
11 from homeassistant.config_entries import ConfigEntry
12 from homeassistant.core import HomeAssistant
13 from homeassistant.helpers.entity_platform import AddEntitiesCallback
14 
15 from . import DOMAIN, LutronData
16 from .entity import LutronDevice
17 
18 _LOGGER = logging.getLogger(__name__)
19 
20 
22  hass: HomeAssistant,
23  config_entry: ConfigEntry,
24  async_add_entities: AddEntitiesCallback,
25 ) -> None:
26  """Set up the Lutron fan platform.
27 
28  Adds fan controls from the Main Repeater associated with the config_entry as
29  fan entities.
30  """
31  entry_data: LutronData = hass.data[DOMAIN][config_entry.entry_id]
33  [
34  LutronFan(area_name, device, entry_data.client)
35  for area_name, device in entry_data.fans
36  ],
37  True,
38  )
39 
40 
42  """Representation of a Lutron fan."""
43 
44  _attr_name = None
45  _attr_should_poll = False
46  _attr_speed_count = 3
47  _attr_supported_features = (
48  FanEntityFeature.SET_SPEED
49  | FanEntityFeature.TURN_OFF
50  | FanEntityFeature.TURN_ON
51  )
52  _lutron_device: Output
53  _prev_percentage: int | None = None
54  _enable_turn_on_off_backwards_compatibility = False
55 
56  def set_percentage(self, percentage: int) -> None:
57  """Set the speed of the fan, as a percentage."""
58  if percentage > 0:
59  self._prev_percentage_prev_percentage = percentage
60  self._lutron_device_lutron_device.level = percentage
61  self.schedule_update_ha_stateschedule_update_ha_state()
62 
63  def turn_on(
64  self,
65  percentage: int | None = None,
66  preset_mode: str | None = None,
67  **kwargs: Any,
68  ) -> None:
69  """Turn the fan on."""
70  new_percentage: int | None = None
71 
72  if percentage is not None:
73  new_percentage = percentage
74  elif not self._prev_percentage_prev_percentage:
75  # Default to medium speed
76  new_percentage = 67
77  else:
78  new_percentage = self._prev_percentage_prev_percentage
79  self.set_percentageset_percentageset_percentage(new_percentage)
80 
81  def turn_off(self, **kwargs: Any) -> None:
82  """Turn the fan off."""
83  self.set_percentageset_percentageset_percentage(0)
84 
85  def _request_state(self) -> None:
86  """Request the state from the device."""
87  _ = self._lutron_device_lutron_device.level
88 
89  def _update_attrs(self) -> None:
90  """Update the state attributes."""
91  level = self._lutron_device_lutron_device.last_level()
92  self._attr_is_on_attr_is_on = level > 0
93  self._attr_percentage_attr_percentage = level
94  if self._prev_percentage_prev_percentage is None or level != 0:
95  self._prev_percentage_prev_percentage = level
None set_percentage(self, int percentage)
Definition: __init__.py:336
None turn_off(self, **Any kwargs)
Definition: fan.py:81
None set_percentage(self, int percentage)
Definition: fan.py:56
None turn_on(self, int|None percentage=None, str|None preset_mode=None, **Any kwargs)
Definition: fan.py:68
None schedule_update_ha_state(self, bool force_refresh=False)
Definition: entity.py:1244
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)
Definition: fan.py:25