Home Assistant Unofficial Reference 2024.12.1
scene.py
Go to the documentation of this file.
1 """Support for LiteJet scenes."""
2 
3 import logging
4 from typing import Any
5 
6 from pylitejet import LiteJet, LiteJetError
7 
8 from homeassistant.components.scene import Scene
9 from homeassistant.config_entries import ConfigEntry
10 from homeassistant.core import HomeAssistant
11 from homeassistant.exceptions import HomeAssistantError
12 from homeassistant.helpers.device_registry import DeviceInfo
13 from homeassistant.helpers.entity_platform import AddEntitiesCallback
14 
15 from .const import DOMAIN
16 
17 _LOGGER = logging.getLogger(__name__)
18 
19 ATTR_NUMBER = "number"
20 
21 
23  hass: HomeAssistant,
24  config_entry: ConfigEntry,
25  async_add_entities: AddEntitiesCallback,
26 ) -> None:
27  """Set up entry."""
28 
29  system: LiteJet = hass.data[DOMAIN]
30 
31  entities = []
32  for i in system.scenes():
33  name = await system.get_scene_name(i)
34  entities.append(LiteJetScene(config_entry.entry_id, system, i, name))
35 
36  async_add_entities(entities, True)
37 
38 
40  """Representation of a single LiteJet scene."""
41 
42  _attr_has_entity_name = True
43  _attr_entity_registry_enabled_default = False
44 
45  def __init__(self, entry_id: str, system: LiteJet, i: int, name: str) -> None:
46  """Initialize the scene."""
47  self._lj_lj = system
48  self._index_index = i
49  self._attr_unique_id_attr_unique_id = f"{entry_id}_{i}"
50  self._attr_name_attr_name = name
51  self._attr_device_info_attr_device_info = DeviceInfo(
52  identifiers={(DOMAIN, f"{entry_id}_mcp")},
53  name="LiteJet",
54  manufacturer="Centralite",
55  model=system.model_name,
56  )
57 
58  async def async_added_to_hass(self) -> None:
59  """Run when this Entity has been added to HA."""
60  self._lj_lj.on_connected_changed(self._on_connected_changed_on_connected_changed)
61 
62  async def async_will_remove_from_hass(self) -> None:
63  """Entity being removed from hass."""
64  self._lj_lj.unsubscribe(self._on_connected_changed_on_connected_changed)
65 
66  def _on_connected_changed(self, connected: bool, reason: str) -> None:
67  self._attr_available_attr_available = connected
68  self.async_write_ha_stateasync_write_ha_state()
69 
70  @property
71  def extra_state_attributes(self) -> dict[str, Any]:
72  """Return the device-specific state attributes."""
73  return {ATTR_NUMBER: self._index_index}
74 
75  async def async_activate(self, **kwargs: Any) -> None:
76  """Activate the scene."""
77  try:
78  await self._lj_lj.activate_scene(self._index_index)
79  except LiteJetError as exc:
80  raise HomeAssistantError from exc
None __init__(self, str entry_id, LiteJet system, int i, str name)
Definition: scene.py:45
None _on_connected_changed(self, bool connected, str reason)
Definition: scene.py:66
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)
Definition: scene.py:26