1 """Provides device triggers for LCN."""
3 from __future__
import annotations
5 import voluptuous
as vol
15 from .const
import DOMAIN, KEY_ACTIONS, SENDKEYS
17 TRIGGER_TYPES = {
"transmitter",
"transponder",
"fingerprint",
"codelock",
"send_keys"}
19 LCN_DEVICE_TRIGGER_BASE_SCHEMA = DEVICE_TRIGGER_BASE_SCHEMA.extend(
20 {vol.Required(CONF_TYPE): vol.In(TRIGGER_TYPES)}
23 ACCESS_CONTROL_SCHEMA = {vol.Optional(
"code"): vol.All(vol.Lower, cv.string)}
25 TRANSMITTER_SCHEMA = {
26 **ACCESS_CONTROL_SCHEMA,
27 vol.Optional(
"level"): cv.positive_int,
28 vol.Optional(
"key"): cv.positive_int,
29 vol.Optional(
"action"): vol.In([action.lower()
for action
in KEY_ACTIONS]),
33 vol.Optional(
"key"): vol.In([key.lower()
for key
in SENDKEYS]),
34 vol.Optional(
"action"): vol.In([action.lower()
for action
in KEY_ACTIONS]),
37 TRIGGER_SCHEMA = vol.Any(
38 LCN_DEVICE_TRIGGER_BASE_SCHEMA.extend(ACCESS_CONTROL_SCHEMA),
39 LCN_DEVICE_TRIGGER_BASE_SCHEMA.extend(TRANSMITTER_SCHEMA),
40 LCN_DEVICE_TRIGGER_BASE_SCHEMA.extend(SENDKEYS_SCHEMA),
44 "transmitter": {
"extra_fields": vol.Schema(TRANSMITTER_SCHEMA)},
45 "transponder": {
"extra_fields": vol.Schema(ACCESS_CONTROL_SCHEMA)},
46 "fingerprint": {
"extra_fields": vol.Schema(ACCESS_CONTROL_SCHEMA)},
47 "codelock": {
"extra_fields": vol.Schema(ACCESS_CONTROL_SCHEMA)},
48 "send_keys": {
"extra_fields": vol.Schema(SENDKEYS_SCHEMA)},
53 hass: HomeAssistant, device_id: str
54 ) -> list[dict[str, str]]:
55 """List device triggers for LCN devices."""
56 device_registry = dr.async_get(hass)
57 if (device := device_registry.async_get(device_id))
is None:
60 identifier = next(iter(device.identifiers))
61 if (identifier[1].count(
"-") != 1)
or device.model.startswith(
"LCN group"):
65 CONF_PLATFORM:
"device",
67 CONF_DEVICE_ID: device_id,
70 return [{**base_trigger, CONF_TYPE: type_}
for type_
in TRIGGER_TYPES]
76 action: TriggerActionType,
77 trigger_info: TriggerInfo,
79 """Attach a trigger."""
81 CONF_DEVICE_ID: config[CONF_DEVICE_ID],
84 for key
in (
"code",
"level",
"key",
"action")
89 event_config = event.TRIGGER_SCHEMA(
91 event.CONF_PLATFORM:
"event",
92 event.CONF_EVENT_TYPE: f
"lcn_{config[CONF_TYPE]}",
93 event.CONF_EVENT_DATA: event_data,
97 return await event.async_attach_trigger(
98 hass, event_config, action, trigger_info, platform_type=
"device"
103 hass: HomeAssistant, config: ConfigType
104 ) -> dict[str, vol.Schema]:
105 """List trigger capabilities."""
106 return TYPE_SCHEMAS.get(config[CONF_TYPE], {})
CALLBACK_TYPE async_attach_trigger(HomeAssistant hass, ConfigType config, TriggerActionType action, TriggerInfo trigger_info)
dict[str, vol.Schema] async_get_trigger_capabilities(HomeAssistant hass, ConfigType config)
list[dict[str, str]] async_get_triggers(HomeAssistant hass, str device_id)