Home Assistant Unofficial Reference 2024.12.1
scene.py
Go to the documentation of this file.
1 """Support for LCN scenes."""
2 
3 from collections.abc import Iterable
4 from functools import partial
5 from typing import Any
6 
7 import pypck
8 
9 from homeassistant.components.scene import DOMAIN as DOMAIN_SCENE, Scene
10 from homeassistant.config_entries import ConfigEntry
11 from homeassistant.const import CONF_DOMAIN, CONF_ENTITIES, CONF_SCENE
12 from homeassistant.core import HomeAssistant
13 from homeassistant.helpers.entity_platform import AddEntitiesCallback
14 from homeassistant.helpers.typing import ConfigType
15 
16 from .const import (
17  ADD_ENTITIES_CALLBACKS,
18  CONF_DOMAIN_DATA,
19  CONF_OUTPUTS,
20  CONF_REGISTER,
21  CONF_TRANSITION,
22  DOMAIN,
23  OUTPUT_PORTS,
24 )
25 from .entity import LcnEntity
26 
27 PARALLEL_UPDATES = 0
28 
29 
31  config_entry: ConfigEntry,
32  async_add_entities: AddEntitiesCallback,
33  entity_configs: Iterable[ConfigType],
34 ) -> None:
35  """Add entities for this domain."""
36  entities = [
37  LcnScene(entity_config, config_entry) for entity_config in entity_configs
38  ]
39 
40  async_add_entities(entities)
41 
42 
44  hass: HomeAssistant,
45  config_entry: ConfigEntry,
46  async_add_entities: AddEntitiesCallback,
47 ) -> None:
48  """Set up LCN switch entities from a config entry."""
49  add_entities = partial(
50  add_lcn_entities,
51  config_entry,
52  async_add_entities,
53  )
54 
55  hass.data[DOMAIN][config_entry.entry_id][ADD_ENTITIES_CALLBACKS].update(
56  {DOMAIN_SCENE: add_entities}
57  )
58 
60  (
61  entity_config
62  for entity_config in config_entry.data[CONF_ENTITIES]
63  if entity_config[CONF_DOMAIN] == DOMAIN_SCENE
64  ),
65  )
66 
67 
68 class LcnScene(LcnEntity, Scene):
69  """Representation of a LCN scene."""
70 
71  def __init__(self, config: ConfigType, config_entry: ConfigEntry) -> None:
72  """Initialize the LCN scene."""
73  super().__init__(config, config_entry)
74 
75  self.register_idregister_id = config[CONF_DOMAIN_DATA][CONF_REGISTER]
76  self.scene_idscene_id = config[CONF_DOMAIN_DATA][CONF_SCENE]
77  self.output_portsoutput_ports = []
78  self.relay_portsrelay_ports = []
79 
80  for port in config[CONF_DOMAIN_DATA][CONF_OUTPUTS]:
81  if port in OUTPUT_PORTS:
82  self.output_portsoutput_ports.append(pypck.lcn_defs.OutputPort[port])
83  else: # in RELEAY_PORTS
84  self.relay_portsrelay_ports.append(pypck.lcn_defs.RelayPort[port])
85 
86  if config[CONF_DOMAIN_DATA][CONF_TRANSITION] is None:
87  self.transitiontransition = None
88  else:
89  self.transitiontransition = pypck.lcn_defs.time_to_ramp_value(
90  config[CONF_DOMAIN_DATA][CONF_TRANSITION] * 1000.0
91  )
92 
93  async def async_activate(self, **kwargs: Any) -> None:
94  """Activate scene."""
95  await self.device_connectiondevice_connection.activate_scene(
96  self.register_idregister_id,
97  self.scene_idscene_id,
98  self.output_portsoutput_ports,
99  self.relay_portsrelay_ports,
100  self.transitiontransition,
101  )
None async_activate(self, **Any kwargs)
Definition: scene.py:93
None __init__(self, ConfigType config, ConfigEntry config_entry)
Definition: scene.py:71
None add_entities(AsusWrtRouter router, AddEntitiesCallback async_add_entities, set[str] tracked)
IssData update(pyiss.ISS iss)
Definition: __init__.py:33
None add_lcn_entities(ConfigEntry config_entry, AddEntitiesCallback async_add_entities, Iterable[ConfigType] entity_configs)
Definition: scene.py:34
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)
Definition: scene.py:47