Home Assistant Unofficial Reference 2024.12.1
light.py
Go to the documentation of this file.
1 """Support for ADS light sources."""
2 
3 from __future__ import annotations
4 
5 from typing import Any
6 
7 import pyads
8 import voluptuous as vol
9 
11  ATTR_BRIGHTNESS,
12  PLATFORM_SCHEMA as LIGHT_PLATFORM_SCHEMA,
13  ColorMode,
14  LightEntity,
15 )
16 from homeassistant.const import CONF_NAME
17 from homeassistant.core import HomeAssistant
19 from homeassistant.helpers.entity_platform import AddEntitiesCallback
20 from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
21 
22 from .const import CONF_ADS_VAR, DATA_ADS, STATE_KEY_STATE
23 from .entity import AdsEntity
24 from .hub import AdsHub
25 
26 CONF_ADS_VAR_BRIGHTNESS = "adsvar_brightness"
27 STATE_KEY_BRIGHTNESS = "brightness"
28 
29 DEFAULT_NAME = "ADS Light"
30 PLATFORM_SCHEMA = LIGHT_PLATFORM_SCHEMA.extend(
31  {
32  vol.Required(CONF_ADS_VAR): cv.string,
33  vol.Optional(CONF_ADS_VAR_BRIGHTNESS): cv.string,
34  vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
35  }
36 )
37 
38 
40  hass: HomeAssistant,
41  config: ConfigType,
42  add_entities: AddEntitiesCallback,
43  discovery_info: DiscoveryInfoType | None = None,
44 ) -> None:
45  """Set up the light platform for ADS."""
46  ads_hub = hass.data[DATA_ADS]
47 
48  ads_var_enable: str = config[CONF_ADS_VAR]
49  ads_var_brightness: str | None = config.get(CONF_ADS_VAR_BRIGHTNESS)
50  name: str = config[CONF_NAME]
51 
52  add_entities([AdsLight(ads_hub, ads_var_enable, ads_var_brightness, name)])
53 
54 
56  """Representation of ADS light."""
57 
58  def __init__(
59  self,
60  ads_hub: AdsHub,
61  ads_var_enable: str,
62  ads_var_brightness: str | None,
63  name: str,
64  ) -> None:
65  """Initialize AdsLight entity."""
66  super().__init__(ads_hub, name, ads_var_enable)
67  self._state_dict[STATE_KEY_BRIGHTNESS] = None
68  self._ads_var_brightness_ads_var_brightness = ads_var_brightness
69  if ads_var_brightness is not None:
70  self._attr_color_mode_attr_color_mode = ColorMode.BRIGHTNESS
71  self._attr_supported_color_modes_attr_supported_color_modes = {ColorMode.BRIGHTNESS}
72  else:
73  self._attr_color_mode_attr_color_mode = ColorMode.ONOFF
74  self._attr_supported_color_modes_attr_supported_color_modes = {ColorMode.ONOFF}
75 
76  async def async_added_to_hass(self) -> None:
77  """Register device notification."""
78  await self.async_initialize_deviceasync_initialize_device(self._ads_var_ads_var, pyads.PLCTYPE_BOOL)
79 
80  if self._ads_var_brightness_ads_var_brightness is not None:
81  await self.async_initialize_deviceasync_initialize_device(
82  self._ads_var_brightness_ads_var_brightness,
83  pyads.PLCTYPE_UINT,
84  STATE_KEY_BRIGHTNESS,
85  )
86 
87  @property
88  def brightness(self) -> int | None:
89  """Return the brightness of the light (0..255)."""
90  return self._state_dict[STATE_KEY_BRIGHTNESS]
91 
92  @property
93  def is_on(self) -> bool:
94  """Return True if the entity is on."""
95  return self._state_dict[STATE_KEY_STATE]
96 
97  def turn_on(self, **kwargs: Any) -> None:
98  """Turn the light on or set a specific dimmer value."""
99  brightness = kwargs.get(ATTR_BRIGHTNESS)
100  self._ads_hub_ads_hub.write_by_name(self._ads_var_ads_var, True, pyads.PLCTYPE_BOOL)
101 
102  if self._ads_var_brightness_ads_var_brightness is not None and brightness is not None:
103  self._ads_hub_ads_hub.write_by_name(
104  self._ads_var_brightness_ads_var_brightness, brightness, pyads.PLCTYPE_UINT
105  )
106 
107  def turn_off(self, **kwargs: Any) -> None:
108  """Turn the light off."""
109  self._ads_hub_ads_hub.write_by_name(self._ads_var_ads_var, False, pyads.PLCTYPE_BOOL)
None async_initialize_device(self, str ads_var, type plctype, str state_key=STATE_KEY_STATE, int|None factor=None)
Definition: entity.py:37
None __init__(self, AdsHub ads_hub, str ads_var_enable, str|None ads_var_brightness, str name)
Definition: light.py:64
None turn_on(self, **Any kwargs)
Definition: light.py:97
None turn_off(self, **Any kwargs)
Definition: light.py:107
None setup_platform(HomeAssistant hass, ConfigType config, AddEntitiesCallback add_entities, DiscoveryInfoType|None discovery_info=None)
Definition: light.py:44
None add_entities(AsusWrtRouter router, AddEntitiesCallback async_add_entities, set[str] tracked)