1 """Provides device triggers for YoLink."""
3 from __future__
import annotations
7 import voluptuous
as vol
8 from yolink.const
import ATTR_DEVICE_SMART_REMOTER
18 from .
import DOMAIN, YOLINK_EVENT
20 DEV_MODEL_FLEX_FOB_YS3604_EC,
21 DEV_MODEL_FLEX_FOB_YS3604_UC,
22 DEV_MODEL_FLEX_FOB_YS3614_EC,
23 DEV_MODEL_FLEX_FOB_YS3614_UC,
26 CONF_BUTTON_1 =
"button_1"
27 CONF_BUTTON_2 =
"button_2"
28 CONF_BUTTON_3 =
"button_3"
29 CONF_BUTTON_4 =
"button_4"
30 CONF_SHORT_PRESS =
"short_press"
31 CONF_LONG_PRESS =
"long_press"
33 FLEX_FOB_4_BUTTONS = {
34 f
"{CONF_BUTTON_1}_{CONF_SHORT_PRESS}",
35 f
"{CONF_BUTTON_1}_{CONF_LONG_PRESS}",
36 f
"{CONF_BUTTON_2}_{CONF_SHORT_PRESS}",
37 f
"{CONF_BUTTON_2}_{CONF_LONG_PRESS}",
38 f
"{CONF_BUTTON_3}_{CONF_SHORT_PRESS}",
39 f
"{CONF_BUTTON_3}_{CONF_LONG_PRESS}",
40 f
"{CONF_BUTTON_4}_{CONF_SHORT_PRESS}",
41 f
"{CONF_BUTTON_4}_{CONF_LONG_PRESS}",
44 FLEX_FOB_2_BUTTONS = {
45 f
"{CONF_BUTTON_1}_{CONF_SHORT_PRESS}",
46 f
"{CONF_BUTTON_1}_{CONF_LONG_PRESS}",
47 f
"{CONF_BUTTON_2}_{CONF_SHORT_PRESS}",
48 f
"{CONF_BUTTON_2}_{CONF_LONG_PRESS}",
51 TRIGGER_SCHEMA = DEVICE_TRIGGER_BASE_SCHEMA.extend(
52 {vol.Required(CONF_TYPE): vol.In(FLEX_FOB_4_BUTTONS)}
57 FLEX_FOB_TRIGGER_TYPES: dict[str, set[str]] = {
58 DEV_MODEL_FLEX_FOB_YS3604_EC: FLEX_FOB_4_BUTTONS,
59 DEV_MODEL_FLEX_FOB_YS3604_UC: FLEX_FOB_4_BUTTONS,
60 DEV_MODEL_FLEX_FOB_YS3614_UC: FLEX_FOB_2_BUTTONS,
61 DEV_MODEL_FLEX_FOB_YS3614_EC: FLEX_FOB_2_BUTTONS,
66 hass: HomeAssistant, device_id: str
67 ) -> list[dict[str, Any]]:
68 """List device triggers for YoLink devices."""
69 device_registry = dr.async_get(hass)
70 registry_device = device_registry.async_get(device_id)
71 if not registry_device
or registry_device.model != ATTR_DEVICE_SMART_REMOTER:
73 if registry_device.model_id
not in list(FLEX_FOB_TRIGGER_TYPES.keys()):
77 CONF_DEVICE_ID: device_id,
79 CONF_PLATFORM:
"device",
82 for trigger
in FLEX_FOB_TRIGGER_TYPES[registry_device.model_id]
89 action: TriggerActionType,
90 trigger_info: TriggerInfo,
92 """Listen for state changes based on configuration."""
94 event_trigger.CONF_PLATFORM:
"event",
95 event_trigger.CONF_EVENT_TYPE: YOLINK_EVENT,
96 event_trigger.CONF_EVENT_DATA: {
97 CONF_DEVICE_ID: config[CONF_DEVICE_ID],
98 CONF_TYPE: config[CONF_TYPE],
101 event_config = event_trigger.TRIGGER_SCHEMA(event_config)
102 return await event_trigger.async_attach_trigger(
103 hass, event_config, action, trigger_info, platform_type=
"device"
CALLBACK_TYPE async_attach_trigger(HomeAssistant hass, ConfigType config, TriggerActionType action, TriggerInfo trigger_info)
list[dict[str, Any]] async_get_triggers(HomeAssistant hass, str device_id)