Home Assistant Unofficial Reference 2024.12.1
light.py
Go to the documentation of this file.
1 """Support for switching devices via Pilight to on and off."""
2 
3 from __future__ import annotations
4 
5 from typing import Any
6 
7 import voluptuous as vol
8 
10  ATTR_BRIGHTNESS,
11  PLATFORM_SCHEMA as LIGHT_PLATFORM_SCHEMA,
12  ColorMode,
13  LightEntity,
14 )
15 from homeassistant.const import CONF_LIGHTS
16 from homeassistant.core import HomeAssistant
18 from homeassistant.helpers.entity_platform import AddEntitiesCallback
19 from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
20 
21 from .const import CONF_DIMLEVEL_MAX, CONF_DIMLEVEL_MIN
22 from .entity import SWITCHES_SCHEMA, PilightBaseDevice
23 
24 LIGHTS_SCHEMA = SWITCHES_SCHEMA.extend(
25  {
26  vol.Optional(CONF_DIMLEVEL_MIN, default=0): cv.positive_int,
27  vol.Optional(CONF_DIMLEVEL_MAX, default=15): cv.positive_int,
28  }
29 )
30 
31 PLATFORM_SCHEMA = LIGHT_PLATFORM_SCHEMA.extend(
32  {vol.Required(CONF_LIGHTS): vol.Schema({cv.string: LIGHTS_SCHEMA})}
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 Pilight platform."""
43  switches = config[CONF_LIGHTS]
44  devices = []
45 
46  for dev_name, dev_config in switches.items():
47  devices.append(PilightLight(hass, dev_name, dev_config))
48 
49  add_entities(devices)
50 
51 
53  """Representation of a Pilight switch."""
54 
55  _attr_color_mode = ColorMode.BRIGHTNESS
56  _attr_supported_color_modes = {ColorMode.BRIGHTNESS}
57 
58  def __init__(self, hass, name, config):
59  """Initialize a switch."""
60  super().__init__(hass, name, config)
61  self._dimlevel_min_dimlevel_min = config.get(CONF_DIMLEVEL_MIN)
62  self._dimlevel_max_dimlevel_max = config.get(CONF_DIMLEVEL_MAX)
63 
64  @property
65  def brightness(self):
66  """Return the brightness."""
67  return self._brightness_brightness_brightness
68 
69  def turn_on(self, **kwargs: Any) -> None:
70  """Turn the switch on by calling pilight.send service with on code."""
71  # Update brightness only if provided as an argument.
72  # This will allow the switch to keep its previous brightness level.
73  dimlevel = None
74 
75  if ATTR_BRIGHTNESS in kwargs:
76  self._brightness_brightness_brightness = kwargs[ATTR_BRIGHTNESS]
77 
78  # Calculate pilight brightness (as a range of 0 to 15)
79  # By creating a percentage
80  percentage = self._brightness_brightness_brightness / 255
81  # Then calculate the dimmer range (aka amount
82  # of available brightness steps).
83  dimrange = self._dimlevel_max_dimlevel_max - self._dimlevel_min_dimlevel_min
84  # Finally calculate the pilight brightness.
85  # We add dimlevel_min back in to ensure the minimum is always reached.
86  dimlevel = int(percentage * dimrange + self._dimlevel_min_dimlevel_min)
87 
88  self.set_stateset_state(turn_on=True, dimlevel=dimlevel)
def set_state(self, turn_on, send_code=True, dimlevel=None)
Definition: entity.py:132
def __init__(self, hass, name, config)
Definition: light.py:58
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