Home Assistant Unofficial Reference 2024.12.1
light.py
Go to the documentation of this file.
1 """Support for lights."""
2 
3 from __future__ import annotations
4 
5 from typing import Any
6 
7 from fjaraskupan import COMMAND_LIGHT_ON_OFF
8 
9 from homeassistant.components.light import ATTR_BRIGHTNESS, ColorMode, LightEntity
10 from homeassistant.config_entries import ConfigEntry
11 from homeassistant.core import HomeAssistant
12 from homeassistant.helpers.device_registry import DeviceInfo
13 from homeassistant.helpers.entity import Entity
14 from homeassistant.helpers.entity_platform import AddEntitiesCallback
15 from homeassistant.helpers.update_coordinator import CoordinatorEntity
16 
17 from . import async_setup_entry_platform
18 from .coordinator import FjaraskupanCoordinator
19 
20 
22  hass: HomeAssistant,
23  config_entry: ConfigEntry,
24  async_add_entities: AddEntitiesCallback,
25 ) -> None:
26  """Set up tuya sensors dynamically through tuya discovery."""
27 
28  def _constructor(coordinator: FjaraskupanCoordinator) -> list[Entity]:
29  return [Light(coordinator, coordinator.device_info)]
30 
31  async_setup_entry_platform(hass, config_entry, async_add_entities, _constructor)
32 
33 
34 class Light(CoordinatorEntity[FjaraskupanCoordinator], LightEntity):
35  """Light device."""
36 
37  _attr_has_entity_name = True
38  _attr_name = None
39 
40  def __init__(
41  self,
42  coordinator: FjaraskupanCoordinator,
43  device_info: DeviceInfo,
44  ) -> None:
45  """Init light entity."""
46  super().__init__(coordinator)
47  self._attr_color_mode_attr_color_mode = ColorMode.BRIGHTNESS
48  self._attr_supported_color_modes_attr_supported_color_modes = {ColorMode.BRIGHTNESS}
49  self._attr_unique_id_attr_unique_id = coordinator.device.address
50  self._attr_device_info_attr_device_info = device_info
51 
52  async def async_turn_on(self, **kwargs: Any) -> None:
53  """Turn the light on."""
54  async with self.coordinator.async_connect_and_update() as device:
55  if ATTR_BRIGHTNESS in kwargs:
56  await device.send_dim(int(kwargs[ATTR_BRIGHTNESS] * (100.0 / 255.0)))
57  else:
58  await device.send_dim(100)
59 
60  async def async_turn_off(self, **kwargs: Any) -> None:
61  """Turn the entity off."""
62  if self.is_onis_onis_on:
63  async with self.coordinator.async_connect_and_update() as device:
64  await device.send_dim(0)
65  await device.send_command(COMMAND_LIGHT_ON_OFF)
66 
67  @property
68  def is_on(self) -> bool:
69  """Return True if entity is on."""
70  if data := self.coordinator.data:
71  return data.light_on
72  return False
73 
74  @property
75  def brightness(self) -> int | None:
76  """Return the brightness of this light between 0..255."""
77  if data := self.coordinator.data:
78  return int(data.dim_level * (255.0 / 100.0))
79  return None
None async_turn_off(self, **Any kwargs)
Definition: light.py:60
None async_turn_on(self, **Any kwargs)
Definition: light.py:52
None __init__(self, FjaraskupanCoordinator coordinator, DeviceInfo device_info)
Definition: light.py:44
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)
Definition: light.py:25
None async_setup_entry_platform(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities, Callable[[FjaraskupanCoordinator], list[Entity]] constructor)
Definition: __init__.py:111