Home Assistant Unofficial Reference 2024.12.1
light.py
Go to the documentation of this file.
1 """Support for Blinkstick lights."""
2 
3 # mypy: ignore-errors
4 from __future__ import annotations
5 
6 from typing import Any
7 
8 # from blinkstick import blinkstick
9 import voluptuous as vol
10 
12  ATTR_BRIGHTNESS,
13  ATTR_HS_COLOR,
14  PLATFORM_SCHEMA as LIGHT_PLATFORM_SCHEMA,
15  ColorMode,
16  LightEntity,
17 )
18 from homeassistant.const import CONF_NAME
19 from homeassistant.core import HomeAssistant
21 from homeassistant.helpers.entity_platform import AddEntitiesCallback
22 from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
23 import homeassistant.util.color as color_util
24 
25 CONF_SERIAL = "serial"
26 
27 DEFAULT_NAME = "Blinkstick"
28 
29 PLATFORM_SCHEMA = LIGHT_PLATFORM_SCHEMA.extend(
30  {
31  vol.Required(CONF_SERIAL): cv.string,
32  vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
33  }
34 )
35 
36 
38  hass: HomeAssistant,
39  config: ConfigType,
40  add_entities: AddEntitiesCallback,
41  discovery_info: DiscoveryInfoType | None = None,
42 ) -> None:
43  """Set up Blinkstick device specified by serial number."""
44 
45  name = config[CONF_NAME]
46  serial = config[CONF_SERIAL]
47 
48  stick = blinkstick.find_by_serial(serial)
49 
50  add_entities([BlinkStickLight(stick, name)], True)
51 
52 
54  """Representation of a BlinkStick light."""
55 
56  _attr_color_mode = ColorMode.HS
57  _attr_supported_color_modes = {ColorMode.HS}
58 
59  def __init__(self, stick, name):
60  """Initialize the light."""
61  self._stick_stick = stick
62  self._attr_name_attr_name = name
63 
64  def update(self) -> None:
65  """Read back the device state."""
66  rgb_color = self._stick_stick.get_color()
67  hsv = color_util.color_RGB_to_hsv(*rgb_color)
68  self._attr_hs_color_attr_hs_color = hsv[:2]
69  self._attr_brightness_attr_brightness = int(hsv[2])
70  self._attr_is_on_attr_is_on = self.brightnessbrightness is not None and self.brightnessbrightness > 0
71 
72  def turn_on(self, **kwargs: Any) -> None:
73  """Turn the device on."""
74  if ATTR_HS_COLOR in kwargs:
75  self._attr_hs_color_attr_hs_color = kwargs[ATTR_HS_COLOR]
76 
77  brightness: int = kwargs.get(ATTR_BRIGHTNESS, 255)
78  self._attr_brightness_attr_brightness = brightness
79  self._attr_is_on_attr_is_on = bool(brightness)
80 
81  assert self.hs_colorhs_color
82  rgb_color = color_util.color_hsv_to_RGB(
83  self.hs_colorhs_color[0], self.hs_colorhs_color[1], brightness / 255 * 100
84  )
85  self._stick_stick.set_color(red=rgb_color[0], green=rgb_color[1], blue=rgb_color[2])
86 
87  def turn_off(self, **kwargs: Any) -> None:
88  """Turn the device off."""
89  self._stick_stick.turn_off()
tuple[float, float]|None hs_color(self)
Definition: __init__.py:947
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:42