Home Assistant Unofficial Reference 2024.12.1
light.py
Go to the documentation of this file.
1 """Support for Lagute LW-12 WiFi LED Controller."""
2 
3 from __future__ import annotations
4 
5 import logging
6 from typing import Any
7 
8 import lw12
9 import voluptuous as vol
10 
12  ATTR_BRIGHTNESS,
13  ATTR_EFFECT,
14  ATTR_HS_COLOR,
15  ATTR_TRANSITION,
16  PLATFORM_SCHEMA as LIGHT_PLATFORM_SCHEMA,
17  ColorMode,
18  LightEntity,
19  LightEntityFeature,
20 )
21 from homeassistant.const import CONF_HOST, CONF_NAME, CONF_PORT
22 from homeassistant.core import HomeAssistant
24 from homeassistant.helpers.entity_platform import AddEntitiesCallback
25 from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
26 import homeassistant.util.color as color_util
27 
28 _LOGGER = logging.getLogger(__name__)
29 
30 
31 DEFAULT_NAME = "LW-12 FC"
32 DEFAULT_PORT = 5000
33 
34 PLATFORM_SCHEMA = LIGHT_PLATFORM_SCHEMA.extend(
35  {
36  vol.Required(CONF_HOST): cv.string,
37  vol.Optional(CONF_PORT, default=DEFAULT_PORT): cv.port,
38  vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
39  }
40 )
41 
42 
44  hass: HomeAssistant,
45  config: ConfigType,
46  add_entities: AddEntitiesCallback,
47  discovery_info: DiscoveryInfoType | None = None,
48 ) -> None:
49  """Set up LW-12 WiFi LED Controller platform."""
50  # Assign configuration variables.
51  name = config.get(CONF_NAME)
52  host = config.get(CONF_HOST)
53  port = config.get(CONF_PORT)
54  # Add devices
55  lw12_light = lw12.LW12Controller(host, port)
56  add_entities([LW12WiFi(name, lw12_light)])
57 
58 
60  """LW-12 WiFi LED Controller."""
61 
62  _attr_color_mode = ColorMode.HS
63  _attr_should_poll = False
64  _attr_supported_color_modes = {ColorMode.HS}
65  _attr_supported_features = LightEntityFeature.EFFECT | LightEntityFeature.TRANSITION
66 
67  def __init__(self, name, lw12_light):
68  """Initialise LW-12 WiFi LED Controller.
69 
70  :param name: Friendly name for this platform to use.
71  :param lw12_light: Instance of the LW12 controller.
72  """
73  self._light_light = lw12_light
74  self._name_name = name
75  self._state_state = None
76  self._effect_effect = None
77  self._rgb_color_rgb_color = [255, 255, 255]
78  self._brightness_brightness = 255
79 
80  @property
81  def name(self):
82  """Return the display name of the controlled light."""
83  return self._name_name
84 
85  @property
86  def brightness(self):
87  """Return the brightness of the light."""
88  return self._brightness_brightness
89 
90  @property
91  def hs_color(self):
92  """Read back the hue-saturation of the light."""
93  return color_util.color_RGB_to_hs(*self._rgb_color_rgb_color)
94 
95  @property
96  def effect(self):
97  """Return current light effect."""
98  if self._effect_effect is None:
99  return None
100  return self._effect_effect.replace("_", " ").title()
101 
102  @property
103  def is_on(self):
104  """Return true if light is on."""
105  return self._state_state
106 
107  @property
108  def effect_list(self):
109  """Return a list of available effects.
110 
111  Use the Enum element name for display.
112  """
113  return [effect.name.replace("_", " ").title() for effect in lw12.LW12_EFFECT]
114 
115  @property
116  def assumed_state(self) -> bool:
117  """Return True if unable to access real state of the entity."""
118  return True
119 
120  def turn_on(self, **kwargs: Any) -> None:
121  """Instruct the light to turn on."""
122  self._light_light.light_on()
123  if ATTR_HS_COLOR in kwargs:
124  self._rgb_color_rgb_color = color_util.color_hs_to_RGB(*kwargs[ATTR_HS_COLOR])
125  self._light_light.set_color(*self._rgb_color_rgb_color)
126  self._effect_effect = None
127  if ATTR_BRIGHTNESS in kwargs:
128  self._brightness_brightness = kwargs[ATTR_BRIGHTNESS]
129  brightness = int(self._brightness_brightness / 255 * 100)
130  self._light_light.set_light_option(lw12.LW12_LIGHT.BRIGHTNESS, brightness)
131  if ATTR_EFFECT in kwargs:
132  self._effect_effect = kwargs[ATTR_EFFECT].replace(" ", "_").upper()
133  # Check if a known and supported effect was selected.
134  if self._effect_effect in [eff.name for eff in lw12.LW12_EFFECT]:
135  # Selected effect is supported and will be applied.
136  self._light_light.set_effect(lw12.LW12_EFFECT[self._effect_effect])
137  else:
138  # Unknown effect was set, recover by disabling the effect
139  # mode and log an error.
140  _LOGGER.error("Unknown effect selected: %s", self._effect_effect)
141  self._effect_effect = None
142  if ATTR_TRANSITION in kwargs:
143  transition_speed = int(kwargs[ATTR_TRANSITION])
144  self._light_light.set_light_option(lw12.LW12_LIGHT.FLASH, transition_speed)
145  self._state_state = True
146 
147  def turn_off(self, **kwargs: Any) -> None:
148  """Instruct the light to turn off."""
149  self._light_light.light_off()
150  self._state_state = False
def __init__(self, name, lw12_light)
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:48