Home Assistant Unofficial Reference 2024.12.1
light.py
Go to the documentation of this file.
1 """Support for Unifi Led lights."""
2 
3 from __future__ import annotations
4 
5 import logging
6 from typing import Any
7 
8 from unifiled import unifiled
9 import voluptuous as vol
10 
12  ATTR_BRIGHTNESS,
13  PLATFORM_SCHEMA as LIGHT_PLATFORM_SCHEMA,
14  ColorMode,
15  LightEntity,
16 )
17 from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_PORT, CONF_USERNAME
18 from homeassistant.core import HomeAssistant
20 from homeassistant.helpers.entity_platform import AddEntitiesCallback
21 from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
22 
23 _LOGGER = logging.getLogger(__name__)
24 
25 # Validation of the user's configuration
26 PLATFORM_SCHEMA = LIGHT_PLATFORM_SCHEMA.extend(
27  {
28  vol.Required(CONF_HOST): cv.string,
29  vol.Required(CONF_USERNAME): cv.string,
30  vol.Required(CONF_PASSWORD): cv.string,
31  vol.Optional(CONF_PORT, default=20443): vol.All(cv.port, cv.string),
32  }
33 )
34 
35 
37  hass: HomeAssistant,
38  config: ConfigType,
39  add_entities: AddEntitiesCallback,
40  discovery_info: DiscoveryInfoType | None = None,
41 ) -> None:
42  """Set up the Unifi LED platform."""
43 
44  # Assign configuration variables.
45  # The configuration check takes care they are present.
46  host = config[CONF_HOST]
47  port = config[CONF_PORT]
48  username = config[CONF_USERNAME]
49  password = config[CONF_PASSWORD]
50 
51  api = unifiled(host, port, username=username, password=password)
52 
53  # Verify that passed in configuration works
54  if not api.getloginstate():
55  _LOGGER.error("Could not connect to unifiled controller")
56  return
57 
58  add_entities(UnifiLedLight(light, api) for light in api.getlights())
59 
60 
62  """Representation of an unifiled Light."""
63 
64  _attr_color_mode = ColorMode.BRIGHTNESS
65  _attr_supported_color_modes = {ColorMode.BRIGHTNESS}
66 
67  def __init__(self, light: dict[str, Any], api: unifiled) -> None:
68  """Init Unifi LED Light."""
69 
70  self._api_api = api
71  self._light_light = light
72  self._attr_name_attr_name = light["name"]
73  self._light_id_light_id = light["id"]
74  self._attr_unique_id_attr_unique_id = light["id"]
75  self._attr_is_on_attr_is_on = light["status"]["output"]
76  self._attr_available_attr_available = light["isOnline"]
77  self._attr_brightness_attr_brightness = self._api_api.convertfrom100to255(light["status"]["led"])
78 
79  def turn_on(self, **kwargs: Any) -> None:
80  """Instruct the light to turn on."""
81  self._api_api.setdevicebrightness(
82  self._light_id_light_id,
83  str(self._api_api.convertfrom255to100(kwargs.get(ATTR_BRIGHTNESS, 255))),
84  )
85  self._api_api.setdeviceoutput(self._light_id_light_id, 1)
86 
87  def turn_off(self, **kwargs: Any) -> None:
88  """Instruct the light to turn off."""
89  self._api_api.setdeviceoutput(self._light_id_light_id, 0)
90 
91  def update(self) -> None:
92  """Update the light states."""
93  self._attr_is_on_attr_is_on = self._api_api.getlightstate(self._light_id_light_id)
94  self._attr_brightness_attr_brightness = self._api_api.convertfrom100to255(
95  self._api_api.getlightbrightness(self._light_id_light_id)
96  )
97  self._attr_available_attr_available = self._api_api.getlightavailable(self._light_id_light_id)
None __init__(self, dict[str, Any] light, unifiled api)
Definition: light.py:67
None add_entities(AsusWrtRouter router, AddEntitiesCallback async_add_entities, set[str] tracked)
None setup_platform(HomeAssistant hass, ConfigType config, AddEntitiesCallback add_entities, DiscoveryInfoType|None discovery_info=None)
Definition: light.py:41