1 """Describe deCONZ logbook events."""
3 from __future__
import annotations
5 from collections.abc
import Callable
12 from .const
import CONF_GESTURE, DOMAIN
as DECONZ_DOMAIN
13 from .deconz_event
import CONF_DECONZ_ALARM_EVENT, CONF_DECONZ_EVENT
14 from .device_trigger
import (
38 CONF_ROTATE_FROM_SIDE_1,
39 CONF_ROTATE_FROM_SIDE_2,
40 CONF_ROTATE_FROM_SIDE_3,
41 CONF_ROTATE_FROM_SIDE_4,
42 CONF_ROTATE_FROM_SIDE_5,
43 CONF_ROTATE_FROM_SIDE_6,
46 CONF_ROTATION_STOPPED,
61 _get_deconz_event_from_device,
65 CONF_SHORT_PRESS:
"Short press",
66 CONF_SHORT_RELEASE:
"Short release",
67 CONF_LONG_PRESS:
"Long press",
68 CONF_LONG_RELEASE:
"Long release",
69 CONF_DOUBLE_PRESS:
"Double press",
70 CONF_TRIPLE_PRESS:
"Triple press",
71 CONF_QUADRUPLE_PRESS:
"Quadruple press",
72 CONF_QUINTUPLE_PRESS:
"Quintuple press",
73 CONF_ROTATED:
"Rotated",
74 CONF_ROTATED_FAST:
"Rotated fast",
75 CONF_ROTATION_STOPPED:
"Rotated stopped",
77 CONF_DOUBLE_TAP:
"Double tap",
79 CONF_ROTATE_FROM_SIDE_1:
"Rotate from side 1",
80 CONF_ROTATE_FROM_SIDE_2:
"Rotate from side 2",
81 CONF_ROTATE_FROM_SIDE_3:
"Rotate from side 3",
82 CONF_ROTATE_FROM_SIDE_4:
"Rotate from side 4",
83 CONF_ROTATE_FROM_SIDE_5:
"Rotate from side 5",
84 CONF_ROTATE_FROM_SIDE_6:
"Rotate from side 6",
88 CONF_TURN_ON:
"Turn on",
89 CONF_TURN_OFF:
"Turn off",
90 CONF_DIM_UP:
"Dim up",
91 CONF_DIM_DOWN:
"Dim down",
96 CONF_BOTH_BUTTONS:
"Both buttons",
97 CONF_TOP_BUTTONS:
"Top buttons",
98 CONF_BOTTOM_BUTTONS:
"Bottom buttons",
99 CONF_BUTTON_1:
"Button 1",
100 CONF_BUTTON_2:
"Button 2",
101 CONF_BUTTON_3:
"Button 3",
102 CONF_BUTTON_4:
"Button 4",
103 CONF_BUTTON_5:
"Button 5",
104 CONF_BUTTON_6:
"Button 6",
105 CONF_BUTTON_7:
"Button 7",
106 CONF_BUTTON_8:
"Button 8",
107 CONF_SIDE_1:
"Side 1",
108 CONF_SIDE_2:
"Side 2",
109 CONF_SIDE_3:
"Side 3",
110 CONF_SIDE_4:
"Side 4",
111 CONF_SIDE_5:
"Side 5",
112 CONF_SIDE_6:
"Side 6",
117 modelid: str, event: int
118 ) -> tuple[str |
None, str |
None]:
119 """Get device event description."""
120 device_event_descriptions = REMOTES[modelid]
122 for event_type_tuple, event_dict
in device_event_descriptions.items():
123 if event == event_dict.get(CONF_EVENT):
124 return event_type_tuple
125 if event == event_dict.get(CONF_GESTURE):
126 return event_type_tuple
134 async_describe_event: Callable[[str, str, Callable[[Event], dict[str, str]]],
None],
136 """Describe logbook events."""
137 device_registry = dr.async_get(hass)
140 def async_describe_deconz_alarm_event(event: Event) -> dict[str, str]:
141 """Describe deCONZ logbook alarm event."""
142 if device := device_registry.devices.get(event.data[ATTR_DEVICE_ID]):
144 name = deconz_alarm_event.device.name
146 name = event.data[CONF_ID]
148 data = event.data[CONF_EVENT]
151 LOGBOOK_ENTRY_NAME: name,
152 LOGBOOK_ENTRY_MESSAGE: f
"fired event '{data}'",
156 def async_describe_deconz_event(event: Event) -> dict[str, str]:
157 """Describe deCONZ logbook event."""
158 if device := device_registry.devices.get(event.data[ATTR_DEVICE_ID]):
160 name = deconz_event.device.name
163 name = event.data[CONF_ID]
167 data = event.data.get(CONF_EVENT)
or event.data.get(CONF_GESTURE,
"")
169 if data
and deconz_event
and deconz_event.device.model_id
in REMOTES:
171 deconz_event.device.model_id, data
177 LOGBOOK_ENTRY_NAME: name,
178 LOGBOOK_ENTRY_MESSAGE:
"fired an unknown event",
184 LOGBOOK_ENTRY_NAME: name,
185 LOGBOOK_ENTRY_MESSAGE: f
"fired event '{data}'",
191 LOGBOOK_ENTRY_NAME: name,
192 LOGBOOK_ENTRY_MESSAGE: f
"fired event '{ACTIONS[action]}'",
196 LOGBOOK_ENTRY_NAME: name,
197 LOGBOOK_ENTRY_MESSAGE: (
198 f
"'{ACTIONS[action]}' event for '{INTERFACES[interface]}' was fired"
202 async_describe_event(
203 DECONZ_DOMAIN, CONF_DECONZ_ALARM_EVENT, async_describe_deconz_alarm_event
205 async_describe_event(DECONZ_DOMAIN, CONF_DECONZ_EVENT, async_describe_deconz_event)
DeconzAlarmEvent|DeconzEvent|DeconzPresenceEvent|DeconzRelativeRotaryEvent _get_deconz_event_from_device(HomeAssistant hass, dr.DeviceEntry device)
tuple[str|None, str|None] _get_device_event_description(str modelid, int event)
None async_describe_events(HomeAssistant hass, Callable[[str, str, Callable[[Event], dict[str, str]]], None] async_describe_event)