Home Assistant Unofficial Reference 2024.12.1
switch.py
Go to the documentation of this file.
1 """Support for Rflink switches."""
2 
3 from __future__ import annotations
4 
5 import voluptuous as vol
6 
8  PLATFORM_SCHEMA as SWITCH_PLATFORM_SCHEMA,
9  SwitchEntity,
10 )
11 from homeassistant.const import CONF_DEVICES, CONF_NAME
12 from homeassistant.core import HomeAssistant
14 from homeassistant.helpers.entity_platform import AddEntitiesCallback
15 from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
16 
17 from .const import (
18  CONF_ALIASES,
19  CONF_DEVICE_DEFAULTS,
20  CONF_FIRE_EVENT,
21  CONF_GROUP,
22  CONF_GROUP_ALIASES,
23  CONF_NOGROUP_ALIASES,
24  CONF_SIGNAL_REPETITIONS,
25  DEVICE_DEFAULTS_SCHEMA,
26 )
27 from .entity import SwitchableRflinkDevice
28 
29 PARALLEL_UPDATES = 0
30 
31 PLATFORM_SCHEMA = SWITCH_PLATFORM_SCHEMA.extend(
32  {
33  vol.Optional(
34  CONF_DEVICE_DEFAULTS, default=DEVICE_DEFAULTS_SCHEMA({})
35  ): DEVICE_DEFAULTS_SCHEMA,
36  vol.Optional(CONF_DEVICES, default={}): {
37  cv.string: vol.Schema(
38  {
39  vol.Optional(CONF_NAME): cv.string,
40  vol.Optional(CONF_ALIASES, default=[]): vol.All(
41  cv.ensure_list, [cv.string]
42  ),
43  vol.Optional(CONF_GROUP_ALIASES, default=[]): vol.All(
44  cv.ensure_list, [cv.string]
45  ),
46  vol.Optional(CONF_NOGROUP_ALIASES, default=[]): vol.All(
47  cv.ensure_list, [cv.string]
48  ),
49  vol.Optional(CONF_FIRE_EVENT): cv.boolean,
50  vol.Optional(CONF_SIGNAL_REPETITIONS): vol.Coerce(int),
51  vol.Optional(CONF_GROUP, default=True): cv.boolean,
52  }
53  )
54  },
55  },
56  extra=vol.ALLOW_EXTRA,
57 )
58 
59 
60 def devices_from_config(domain_config):
61  """Parse configuration and add Rflink switch devices."""
62  devices = []
63  for device_id, config in domain_config[CONF_DEVICES].items():
64  device_config = dict(domain_config[CONF_DEVICE_DEFAULTS], **config)
65  device = RflinkSwitch(device_id, **device_config)
66  devices.append(device)
67 
68  return devices
69 
70 
72  hass: HomeAssistant,
73  config: ConfigType,
74  async_add_entities: AddEntitiesCallback,
75  discovery_info: DiscoveryInfoType | None = None,
76 ) -> None:
77  """Set up the Rflink platform."""
79 
80 
82  """Representation of a Rflink switch."""