Home Assistant Unofficial Reference 2024.12.1
light.py
Go to the documentation of this file.
1 """Support for SCSGate lights."""
2 
3 from __future__ import annotations
4 
5 import logging
6 from typing import Any
7 
8 from scsgate.tasks import ToggleStatusTask
9 import voluptuous as vol
10 
12  PLATFORM_SCHEMA as LIGHT_PLATFORM_SCHEMA,
13  ColorMode,
14  LightEntity,
15 )
16 from homeassistant.const import ATTR_ENTITY_ID, ATTR_STATE, CONF_DEVICES, 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 . import CONF_SCS_ID, DOMAIN, SCSGATE_SCHEMA
23 
24 PLATFORM_SCHEMA = LIGHT_PLATFORM_SCHEMA.extend(
25  {vol.Required(CONF_DEVICES): cv.schema_with_slug_keys(SCSGATE_SCHEMA)}
26 )
27 
28 
30  hass: HomeAssistant,
31  config: ConfigType,
32  add_entities: AddEntitiesCallback,
33  discovery_info: DiscoveryInfoType | None = None,
34 ) -> None:
35  """Set up the SCSGate switches."""
36  devices = config.get(CONF_DEVICES)
37  lights = []
38  logger = logging.getLogger(__name__)
39  scsgate = hass.data[DOMAIN]
40 
41  if devices:
42  for entity_info in devices.values():
43  if entity_info[CONF_SCS_ID] in scsgate.devices:
44  continue
45 
46  name = entity_info[CONF_NAME]
47  scs_id = entity_info[CONF_SCS_ID]
48 
49  logger.info("Adding %s scsgate.light", name)
50 
51  light = SCSGateLight(
52  name=name, scs_id=scs_id, logger=logger, scsgate=scsgate
53  )
54  lights.append(light)
55 
56  add_entities(lights)
57  scsgate.add_devices_to_register(lights)
58 
59 
61  """Representation of a SCSGate light."""
62 
63  _attr_color_mode = ColorMode.ONOFF
64  _attr_supported_color_modes = {ColorMode.ONOFF}
65  _attr_should_poll = False
66 
67  def __init__(self, scs_id, name, logger, scsgate):
68  """Initialize the light."""
69  self._attr_name_attr_name = name
70  self._scs_id_scs_id = scs_id
71  self._toggled_toggled = False
72  self._logger_logger = logger
73  self._scsgate_scsgate = scsgate
74 
75  @property
76  def scs_id(self):
77  """Return the SCS ID."""
78  return self._scs_id_scs_id
79 
80  @property
81  def is_on(self):
82  """Return true if light is on."""
83  return self._toggled_toggled
84 
85  def turn_on(self, **kwargs: Any) -> None:
86  """Turn the device on."""
87 
88  self._scsgate_scsgate.append_task(ToggleStatusTask(target=self._scs_id_scs_id, toggled=True))
89 
90  self._toggled_toggled = True
91  self.schedule_update_ha_stateschedule_update_ha_state()
92 
93  def turn_off(self, **kwargs: Any) -> None:
94  """Turn the device off."""
95 
96  self._scsgate_scsgate.append_task(ToggleStatusTask(target=self._scs_id_scs_id, toggled=False))
97 
98  self._toggled_toggled = False
99  self.schedule_update_ha_stateschedule_update_ha_state()
100 
101  def process_event(self, message):
102  """Handle a SCSGate message related with this light."""
103  if self._toggled_toggled == message.toggled:
104  self._logger_logger.info(
105  "Light %s, ignoring message %s because state already active",
106  self._scs_id_scs_id,
107  message,
108  )
109  # Nothing changed, ignoring
110  return
111 
112  self._toggled_toggled = message.toggled
113  self.schedule_update_ha_stateschedule_update_ha_state()
114 
115  command = "off"
116  if self._toggled_toggled:
117  command = "on"
118 
119  self.hasshass.bus.fire(
120  "button_pressed", {ATTR_ENTITY_ID: self._scs_id_scs_id, ATTR_STATE: command}
121  )
def __init__(self, scs_id, name, logger, scsgate)
Definition: light.py:67
None schedule_update_ha_state(self, bool force_refresh=False)
Definition: entity.py:1244
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:34