Home Assistant Unofficial Reference 2024.12.1
device_trigger.py
Go to the documentation of this file.
1 """Provides device triggers for Nanoleaf."""
2 
3 from __future__ import annotations
4 
5 import voluptuous as vol
6 
8  DEVICE_TRIGGER_BASE_SCHEMA,
9  DeviceNotFound,
10 )
11 from homeassistant.components.homeassistant.triggers import event as event_trigger
12 from homeassistant.const import (
13  CONF_DEVICE_ID,
14  CONF_DOMAIN,
15  CONF_EVENT,
16  CONF_PLATFORM,
17  CONF_TYPE,
18 )
19 from homeassistant.core import CALLBACK_TYPE, HomeAssistant
20 from homeassistant.helpers import device_registry as dr
21 from homeassistant.helpers.issue_registry import IssueSeverity, async_create_issue
22 from homeassistant.helpers.trigger import TriggerActionType, TriggerInfo
23 from homeassistant.helpers.typing import ConfigType
24 
25 from .const import DOMAIN, NANOLEAF_EVENT, TOUCH_GESTURE_TRIGGER_MAP, TOUCH_MODELS
26 
27 TRIGGER_TYPES = TOUCH_GESTURE_TRIGGER_MAP.values()
28 
29 TRIGGER_SCHEMA = DEVICE_TRIGGER_BASE_SCHEMA.extend(
30  {
31  vol.Required(CONF_DOMAIN): DOMAIN,
32  vol.Required(CONF_DEVICE_ID): str,
33  vol.Required(CONF_TYPE): vol.In(TRIGGER_TYPES),
34  }
35 )
36 
37 
39  hass: HomeAssistant, device_id: str
40 ) -> list[dict[str, str]]:
41  """List device triggers for Nanoleaf devices."""
42  device_registry = dr.async_get(hass)
43  device_entry = device_registry.async_get(device_id)
44  if device_entry is None:
45  raise DeviceNotFound(f"Device ID {device_id} is not valid")
46  if device_entry.model not in TOUCH_MODELS:
47  return []
48  return [
49  {
50  CONF_PLATFORM: "device",
51  CONF_DOMAIN: DOMAIN,
52  CONF_DEVICE_ID: device_id,
53  CONF_TYPE: trigger_type,
54  }
55  for trigger_type in TRIGGER_TYPES
56  ]
57 
58 
60  hass: HomeAssistant,
61  config: ConfigType,
62  action: TriggerActionType,
63  trigger_info: TriggerInfo,
64 ) -> CALLBACK_TYPE:
65  """Attach a trigger."""
67  hass,
68  DOMAIN,
69  "deprecated_device_trigger_nanoleaf",
70  is_fixable=False,
71  breaks_in_ha_version="2025.1.0",
72  severity=IssueSeverity.WARNING,
73  translation_key="deprecated_device_trigger",
74  )
75  event_config = event_trigger.TRIGGER_SCHEMA(
76  {
77  event_trigger.CONF_PLATFORM: CONF_EVENT,
78  event_trigger.CONF_EVENT_TYPE: NANOLEAF_EVENT,
79  event_trigger.CONF_EVENT_DATA: {
80  CONF_TYPE: config[CONF_TYPE],
81  CONF_DEVICE_ID: config[CONF_DEVICE_ID],
82  },
83  }
84  )
85  return await event_trigger.async_attach_trigger(
86  hass, event_config, action, trigger_info, platform_type="device"
87  )
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)
None async_create_issue(HomeAssistant hass, str entry_id)
Definition: repairs.py:69