Home Assistant Unofficial Reference 2024.12.1
switch.py
Go to the documentation of this file.
1 """Support for a ScreenLogic 'circuit' switch."""
2 
3 from dataclasses import dataclass
4 
5 from screenlogicpy.const.data import ATTR, DEVICE
6 from screenlogicpy.const.msg import CODE
7 from screenlogicpy.device_const.circuit import GENERIC_CIRCUIT_NAMES, INTERFACE
8 
9 from homeassistant.components.switch import SwitchEntity, SwitchEntityDescription
10 from homeassistant.core import HomeAssistant
11 from homeassistant.helpers.entity_platform import AddEntitiesCallback
12 
13 from .const import LIGHT_CIRCUIT_FUNCTIONS
14 from .entity import (
15  ScreenLogicCircuitEntity,
16  ScreenLogicPushEntityDescription,
17  ScreenLogicSwitchingEntity,
18 )
19 from .types import ScreenLogicConfigEntry
20 
21 
22 @dataclass(frozen=True, kw_only=True)
24  SwitchEntityDescription, ScreenLogicPushEntityDescription
25 ):
26  """Describes a ScreenLogic switch entity."""
27 
28 
30  hass: HomeAssistant,
31  config_entry: ScreenLogicConfigEntry,
32  async_add_entities: AddEntitiesCallback,
33 ) -> None:
34  """Set up entry."""
35  entities: list[ScreenLogicSwitchingEntity] = []
36  coordinator = config_entry.runtime_data
37  gateway = coordinator.gateway
38  for circuit_index, circuit_data in gateway.get_data(DEVICE.CIRCUIT).items():
39  if (
40  not circuit_data
41  or ((circuit_function := circuit_data.get(ATTR.FUNCTION)) is None)
42  or circuit_function in LIGHT_CIRCUIT_FUNCTIONS
43  ):
44  continue
45  circuit_name = circuit_data[ATTR.NAME]
46  circuit_interface = INTERFACE(circuit_data[ATTR.INTERFACE])
47  entities.append(
49  coordinator,
51  subscription_code=CODE.STATUS_CHANGED,
52  data_root=(DEVICE.CIRCUIT,),
53  key=circuit_index,
54  entity_registry_enabled_default=(
55  circuit_name not in GENERIC_CIRCUIT_NAMES
56  and circuit_interface != INTERFACE.DONT_SHOW
57  ),
58  ),
59  )
60  )
61 
62  async_add_entities(entities)
63 
64 
66  """Class to represent a ScreenLogic Switch."""
67 
68  entity_description: ScreenLogicCircuitSwitchDescription
None async_setup_entry(HomeAssistant hass, ScreenLogicConfigEntry config_entry, AddEntitiesCallback async_add_entities)
Definition: switch.py:33