1 """Provides device automations for ZHA devices that emit events."""
3 import voluptuous
as vol
4 from zha.application.const
import ZHA_EVENT
7 DEVICE_TRIGGER_BASE_SCHEMA,
8 InvalidDeviceAutomationConfig,
17 from .const
import DOMAIN
as ZHA_DOMAIN
18 from .helpers
import async_get_zha_device_proxy, get_zha_data
20 CONF_SUBTYPE =
"subtype"
22 DEVICE_IEEE =
"device_ieee"
24 TRIGGER_SCHEMA = DEVICE_TRIGGER_BASE_SCHEMA.extend(
25 {vol.Required(CONF_TYPE): str, vol.Required(CONF_SUBTYPE): str}
30 """Get device trigger data for a device, falling back to the cache if possible."""
38 return str(zha_device.ieee), zha_device.device_automation_triggers
41 return get_zha_data(hass).device_trigger_cache[device_id]
45 hass: HomeAssistant, config: ConfigType
47 """Validate config."""
53 trigger = (config[CONF_TYPE], config[CONF_SUBTYPE])
54 if trigger
not in triggers:
63 action: TriggerActionType,
64 trigger_info: TriggerInfo,
66 """Listen for state changes based on configuration."""
70 except KeyError
as err:
72 f
"Unable to get zha device {config[CONF_DEVICE_ID]}"
75 trigger_key: tuple[str, str] = (config[CONF_TYPE], config[CONF_SUBTYPE])
77 if trigger_key
not in triggers:
80 event_config = event_trigger.TRIGGER_SCHEMA(
82 event_trigger.CONF_PLATFORM:
"event",
83 event_trigger.CONF_EVENT_TYPE: ZHA_EVENT,
84 event_trigger.CONF_EVENT_DATA: {DEVICE_IEEE: ieee, **triggers[trigger_key]},
87 return await event_trigger.async_attach_trigger(
88 hass, event_config, action, trigger_info, platform_type=
"device"
93 hass: HomeAssistant, device_id: str
94 ) -> list[dict[str, str]]:
95 """List device triggers.
97 Make sure the device supports device automations and return the trigger list.
101 except KeyError
as err:
102 raise InvalidDeviceAutomationConfig
from err
106 CONF_DEVICE_ID: device_id,
107 CONF_DOMAIN: ZHA_DOMAIN,
108 CONF_PLATFORM: DEVICE,
110 CONF_SUBTYPE: subtype,
112 for trigger, subtype
in triggers
list[dict[str, str]] async_get_triggers(HomeAssistant hass, str device_id)
CALLBACK_TYPE async_attach_trigger(HomeAssistant hass, ConfigType config, TriggerActionType action, TriggerInfo trigger_info)
ConfigType async_validate_trigger_config(HomeAssistant hass, ConfigType config)
tuple[str, dict] _get_device_trigger_data(HomeAssistant hass, str device_id)
ZHADeviceProxy async_get_zha_device_proxy(HomeAssistant hass, str device_id)
HAZHAData get_zha_data(HomeAssistant hass)