Home Assistant Unofficial Reference 2024.12.1
device_trigger.py
Go to the documentation of this file.
1 """Provides device automations for deconz events."""
2 
3 from __future__ import annotations
4 
5 import voluptuous as vol
6 
8  DEVICE_TRIGGER_BASE_SCHEMA,
9  InvalidDeviceAutomationConfig,
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  CONF_UNIQUE_ID,
19 )
20 from homeassistant.core import CALLBACK_TYPE, HomeAssistant
21 from homeassistant.helpers import device_registry as dr
22 from homeassistant.helpers.trigger import TriggerActionType, TriggerInfo
23 from homeassistant.helpers.typing import ConfigType
24 
25 from . import DOMAIN
26 from .deconz_event import (
27  CONF_DECONZ_EVENT,
28  CONF_GESTURE,
29  DeconzAlarmEvent,
30  DeconzEvent,
31  DeconzPresenceEvent,
32  DeconzRelativeRotaryEvent,
33 )
34 from .hub import DeconzHub
35 
36 CONF_SUBTYPE = "subtype"
37 
38 CONF_SHORT_PRESS = "remote_button_short_press"
39 CONF_SHORT_RELEASE = "remote_button_short_release"
40 CONF_LONG_PRESS = "remote_button_long_press"
41 CONF_LONG_RELEASE = "remote_button_long_release"
42 CONF_DOUBLE_PRESS = "remote_button_double_press"
43 CONF_TRIPLE_PRESS = "remote_button_triple_press"
44 CONF_QUADRUPLE_PRESS = "remote_button_quadruple_press"
45 CONF_QUINTUPLE_PRESS = "remote_button_quintuple_press"
46 CONF_ROTATED = "remote_button_rotated"
47 CONF_ROTATED_FAST = "remote_button_rotated_fast"
48 CONF_ROTATION_STOPPED = "remote_button_rotation_stopped"
49 CONF_AWAKE = "remote_awakened"
50 CONF_MOVE = "remote_moved"
51 CONF_DOUBLE_TAP = "remote_double_tap"
52 CONF_SHAKE = "remote_gyro_activated"
53 CONF_FREE_FALL = "remote_falling"
54 CONF_FLIP_90 = "remote_flip_90_degrees"
55 CONF_FLIP_180 = "remote_flip_180_degrees"
56 CONF_MOVE_ANY = "remote_moved_any_side"
57 CONF_DOUBLE_TAP_ANY = "remote_double_tap_any_side"
58 CONF_TURN_CW = "remote_turned_clockwise"
59 CONF_TURN_CCW = "remote_turned_counter_clockwise"
60 CONF_ROTATE_FROM_SIDE_1 = "remote_rotate_from_side_1"
61 CONF_ROTATE_FROM_SIDE_2 = "remote_rotate_from_side_2"
62 CONF_ROTATE_FROM_SIDE_3 = "remote_rotate_from_side_3"
63 CONF_ROTATE_FROM_SIDE_4 = "remote_rotate_from_side_4"
64 CONF_ROTATE_FROM_SIDE_5 = "remote_rotate_from_side_5"
65 CONF_ROTATE_FROM_SIDE_6 = "remote_rotate_from_side_6"
66 
67 CONF_TURN_ON = "turn_on"
68 CONF_TURN_OFF = "turn_off"
69 CONF_DIM_UP = "dim_up"
70 CONF_DIM_DOWN = "dim_down"
71 CONF_LEFT = "left"
72 CONF_RIGHT = "right"
73 CONF_OPEN = "open"
74 CONF_CLOSE = "close"
75 CONF_BOTH_BUTTONS = "both_buttons"
76 CONF_TOP_BUTTONS = "top_buttons"
77 CONF_BOTTOM_BUTTONS = "bottom_buttons"
78 CONF_BUTTON_1 = "button_1"
79 CONF_BUTTON_2 = "button_2"
80 CONF_BUTTON_3 = "button_3"
81 CONF_BUTTON_4 = "button_4"
82 CONF_BUTTON_5 = "button_5"
83 CONF_BUTTON_6 = "button_6"
84 CONF_BUTTON_7 = "button_7"
85 CONF_BUTTON_8 = "button_8"
86 CONF_SIDE_1 = "side_1"
87 CONF_SIDE_2 = "side_2"
88 CONF_SIDE_3 = "side_3"
89 CONF_SIDE_4 = "side_4"
90 CONF_SIDE_5 = "side_5"
91 CONF_SIDE_6 = "side_6"
92 
93 
94 HUE_DIMMER_REMOTE_MODEL_GEN1 = "RWL020"
95 HUE_DIMMER_REMOTE_MODEL_GEN2 = "RWL021"
96 HUE_DIMMER_REMOTE_MODEL_GEN3 = "RWL022"
97 HUE_DIMMER_REMOTE = {
98  (CONF_SHORT_PRESS, CONF_TURN_ON): {CONF_EVENT: 1000},
99  (CONF_SHORT_RELEASE, CONF_TURN_ON): {CONF_EVENT: 1002},
100  (CONF_LONG_PRESS, CONF_TURN_ON): {CONF_EVENT: 1001},
101  (CONF_LONG_RELEASE, CONF_TURN_ON): {CONF_EVENT: 1003},
102  (CONF_SHORT_PRESS, CONF_DIM_UP): {CONF_EVENT: 2000},
103  (CONF_SHORT_RELEASE, CONF_DIM_UP): {CONF_EVENT: 2002},
104  (CONF_LONG_PRESS, CONF_DIM_UP): {CONF_EVENT: 2001},
105  (CONF_LONG_RELEASE, CONF_DIM_UP): {CONF_EVENT: 2003},
106  (CONF_SHORT_PRESS, CONF_DIM_DOWN): {CONF_EVENT: 3000},
107  (CONF_SHORT_RELEASE, CONF_DIM_DOWN): {CONF_EVENT: 3002},
108  (CONF_LONG_PRESS, CONF_DIM_DOWN): {CONF_EVENT: 3001},
109  (CONF_LONG_RELEASE, CONF_DIM_DOWN): {CONF_EVENT: 3003},
110  (CONF_SHORT_PRESS, CONF_TURN_OFF): {CONF_EVENT: 4000},
111  (CONF_SHORT_RELEASE, CONF_TURN_OFF): {CONF_EVENT: 4002},
112  (CONF_LONG_PRESS, CONF_TURN_OFF): {CONF_EVENT: 4001},
113  (CONF_LONG_RELEASE, CONF_TURN_OFF): {CONF_EVENT: 4003},
114 }
115 
116 HUE_BUTTON_REMOTE_MODEL = "ROM001" # Hue smart button
117 HUE_BUTTON_REMOTE = {
118  (CONF_SHORT_PRESS, CONF_TURN_ON): {CONF_EVENT: 1000},
119  (CONF_SHORT_RELEASE, CONF_TURN_ON): {CONF_EVENT: 1002},
120  (CONF_LONG_PRESS, CONF_TURN_ON): {CONF_EVENT: 1001},
121  (CONF_LONG_RELEASE, CONF_TURN_ON): {CONF_EVENT: 1003},
122 }
123 
124 HUE_TAP_REMOTE_MODEL = "ZGPSWITCH"
125 HUE_TAP_REMOTE = {
126  (CONF_SHORT_PRESS, CONF_BUTTON_1): {CONF_EVENT: 34},
127  (CONF_SHORT_PRESS, CONF_BUTTON_2): {CONF_EVENT: 16},
128  (CONF_SHORT_PRESS, CONF_BUTTON_3): {CONF_EVENT: 17},
129  (CONF_SHORT_PRESS, CONF_BUTTON_4): {CONF_EVENT: 18},
130 }
131 
132 HUE_WALL_REMOTE_MODEL = "RDM001" # Hue wall switch
133 HUE_WALL_REMOTE = {
134  (CONF_SHORT_PRESS, CONF_BUTTON_1): {CONF_EVENT: 1000},
135  (CONF_SHORT_RELEASE, CONF_BUTTON_1): {CONF_EVENT: 1002},
136  (CONF_LONG_PRESS, CONF_BUTTON_1): {CONF_EVENT: 1001},
137  (CONF_LONG_RELEASE, CONF_BUTTON_1): {CONF_EVENT: 1003},
138  (CONF_SHORT_PRESS, CONF_BUTTON_2): {CONF_EVENT: 2000},
139  (CONF_SHORT_RELEASE, CONF_BUTTON_2): {CONF_EVENT: 2002},
140  (CONF_LONG_PRESS, CONF_BUTTON_2): {CONF_EVENT: 2001},
141  (CONF_LONG_RELEASE, CONF_BUTTON_2): {CONF_EVENT: 2003},
142 }
143 
144 FRIENDS_OF_HUE_SWITCH_MODEL = "FOHSWITCH"
145 FRIENDS_OF_HUE_SWITCH = {
146  (CONF_SHORT_PRESS, CONF_BUTTON_1): {CONF_EVENT: 1000},
147  (CONF_SHORT_RELEASE, CONF_BUTTON_1): {CONF_EVENT: 1002},
148  (CONF_LONG_PRESS, CONF_BUTTON_1): {CONF_EVENT: 1001},
149  (CONF_LONG_RELEASE, CONF_BUTTON_1): {CONF_EVENT: 1003},
150  (CONF_SHORT_PRESS, CONF_BUTTON_2): {CONF_EVENT: 2000},
151  (CONF_SHORT_RELEASE, CONF_BUTTON_2): {CONF_EVENT: 2002},
152  (CONF_LONG_PRESS, CONF_BUTTON_2): {CONF_EVENT: 2001},
153  (CONF_LONG_RELEASE, CONF_BUTTON_2): {CONF_EVENT: 2003},
154  (CONF_SHORT_PRESS, CONF_BUTTON_3): {CONF_EVENT: 3000},
155  (CONF_SHORT_RELEASE, CONF_BUTTON_3): {CONF_EVENT: 3002},
156  (CONF_LONG_PRESS, CONF_BUTTON_3): {CONF_EVENT: 3001},
157  (CONF_LONG_RELEASE, CONF_BUTTON_3): {CONF_EVENT: 3003},
158  (CONF_SHORT_PRESS, CONF_BUTTON_4): {CONF_EVENT: 4000},
159  (CONF_SHORT_RELEASE, CONF_BUTTON_4): {CONF_EVENT: 4002},
160  (CONF_LONG_PRESS, CONF_BUTTON_4): {CONF_EVENT: 4001},
161  (CONF_LONG_RELEASE, CONF_BUTTON_4): {CONF_EVENT: 4003},
162  (CONF_SHORT_PRESS, CONF_TOP_BUTTONS): {CONF_EVENT: 5000},
163  (CONF_SHORT_RELEASE, CONF_TOP_BUTTONS): {CONF_EVENT: 5002},
164  (CONF_LONG_PRESS, CONF_TOP_BUTTONS): {CONF_EVENT: 5001},
165  (CONF_LONG_RELEASE, CONF_TOP_BUTTONS): {CONF_EVENT: 5003},
166  (CONF_SHORT_PRESS, CONF_BOTTOM_BUTTONS): {CONF_EVENT: 6000},
167  (CONF_SHORT_RELEASE, CONF_BOTTOM_BUTTONS): {CONF_EVENT: 6002},
168  (CONF_LONG_PRESS, CONF_BOTTOM_BUTTONS): {CONF_EVENT: 6001},
169  (CONF_LONG_RELEASE, CONF_BOTTOM_BUTTONS): {CONF_EVENT: 6003},
170 }
171 
172 RODRET_REMOTE_MODEL = "RODRET Dimmer"
173 RODRET_REMOTE = {
174  (CONF_SHORT_RELEASE, CONF_TURN_ON): {CONF_EVENT: 1002},
175  (CONF_LONG_PRESS, CONF_TURN_ON): {CONF_EVENT: 1001},
176  (CONF_LONG_RELEASE, CONF_TURN_ON): {CONF_EVENT: 1003},
177  (CONF_SHORT_RELEASE, CONF_TURN_OFF): {CONF_EVENT: 2002},
178  (CONF_LONG_PRESS, CONF_TURN_OFF): {CONF_EVENT: 2001},
179  (CONF_LONG_RELEASE, CONF_TURN_OFF): {CONF_EVENT: 2003},
180 }
181 
182 SOMRIG_REMOTE_MODEL = "SOMRIG shortcut button"
183 SOMRIG_REMOTE = {
184  (CONF_SHORT_PRESS, CONF_BUTTON_1): {CONF_EVENT: 1000},
185  (CONF_SHORT_RELEASE, CONF_BUTTON_1): {CONF_EVENT: 1002},
186  (CONF_LONG_PRESS, CONF_BUTTON_1): {CONF_EVENT: 1001},
187  (CONF_LONG_RELEASE, CONF_BUTTON_1): {CONF_EVENT: 1003},
188  (CONF_DOUBLE_PRESS, CONF_BUTTON_1): {CONF_EVENT: 1004},
189  (CONF_SHORT_PRESS, CONF_BUTTON_2): {CONF_EVENT: 2000},
190  (CONF_SHORT_RELEASE, CONF_BUTTON_2): {CONF_EVENT: 2002},
191  (CONF_LONG_PRESS, CONF_BUTTON_2): {CONF_EVENT: 2001},
192  (CONF_LONG_RELEASE, CONF_BUTTON_2): {CONF_EVENT: 2003},
193  (CONF_DOUBLE_PRESS, CONF_BUTTON_2): {CONF_EVENT: 2004},
194 }
195 
196 STYRBAR_REMOTE_MODEL = "Remote Control N2"
197 STYRBAR_REMOTE = {
198  (CONF_SHORT_RELEASE, CONF_DIM_UP): {CONF_EVENT: 1002},
199  (CONF_LONG_PRESS, CONF_DIM_UP): {CONF_EVENT: 1001},
200  (CONF_LONG_RELEASE, CONF_DIM_UP): {CONF_EVENT: 1003},
201  (CONF_SHORT_RELEASE, CONF_DIM_DOWN): {CONF_EVENT: 2002},
202  (CONF_LONG_PRESS, CONF_DIM_DOWN): {CONF_EVENT: 2001},
203  (CONF_LONG_RELEASE, CONF_DIM_DOWN): {CONF_EVENT: 2003},
204  (CONF_SHORT_RELEASE, CONF_LEFT): {CONF_EVENT: 3002},
205  (CONF_LONG_PRESS, CONF_LEFT): {CONF_EVENT: 3001},
206  (CONF_LONG_RELEASE, CONF_LEFT): {CONF_EVENT: 3003},
207  (CONF_SHORT_RELEASE, CONF_RIGHT): {CONF_EVENT: 4002},
208  (CONF_LONG_PRESS, CONF_RIGHT): {CONF_EVENT: 4001},
209  (CONF_LONG_RELEASE, CONF_RIGHT): {CONF_EVENT: 4003},
210 }
211 
212 SYMFONISK_SOUND_CONTROLLER_MODEL = "SYMFONISK Sound Controller"
213 SYMFONISK_SOUND_CONTROLLER = {
214  (CONF_SHORT_PRESS, CONF_TURN_ON): {CONF_EVENT: 1002},
215  (CONF_DOUBLE_PRESS, CONF_TURN_ON): {CONF_EVENT: 1004},
216  (CONF_TRIPLE_PRESS, CONF_TURN_ON): {CONF_EVENT: 1005},
217  (CONF_ROTATED, CONF_LEFT): {CONF_EVENT: 2001},
218  (CONF_ROTATION_STOPPED, CONF_LEFT): {CONF_EVENT: 2003},
219  (CONF_ROTATED, CONF_RIGHT): {CONF_EVENT: 3001},
220  (CONF_ROTATION_STOPPED, CONF_RIGHT): {CONF_EVENT: 3003},
221 }
222 
223 TRADFRI_ON_OFF_SWITCH_MODEL = "TRADFRI on/off switch"
224 TRADFRI_ON_OFF_SWITCH = {
225  (CONF_SHORT_PRESS, CONF_TURN_ON): {CONF_EVENT: 1002},
226  (CONF_LONG_PRESS, CONF_TURN_ON): {CONF_EVENT: 1001},
227  (CONF_LONG_RELEASE, CONF_TURN_ON): {CONF_EVENT: 1003},
228  (CONF_SHORT_PRESS, CONF_TURN_OFF): {CONF_EVENT: 2002},
229  (CONF_LONG_PRESS, CONF_TURN_OFF): {CONF_EVENT: 2001},
230  (CONF_LONG_RELEASE, CONF_TURN_OFF): {CONF_EVENT: 2003},
231 }
232 
233 TRADFRI_OPEN_CLOSE_REMOTE_MODEL = "TRADFRI open/close remote"
234 TRADFRI_OPEN_CLOSE_REMOTE = {
235  (CONF_SHORT_PRESS, CONF_OPEN): {CONF_EVENT: 1002},
236  (CONF_LONG_PRESS, CONF_OPEN): {CONF_EVENT: 1003},
237  (CONF_SHORT_PRESS, CONF_CLOSE): {CONF_EVENT: 2002},
238  (CONF_LONG_PRESS, CONF_CLOSE): {CONF_EVENT: 2003},
239 }
240 
241 TRADFRI_REMOTE_MODEL = "TRADFRI remote control"
242 TRADFRI_REMOTE = {
243  (CONF_SHORT_PRESS, CONF_TURN_ON): {CONF_EVENT: 1002},
244  (CONF_LONG_PRESS, CONF_TURN_ON): {CONF_EVENT: 1001},
245  (CONF_SHORT_PRESS, CONF_DIM_UP): {CONF_EVENT: 2002},
246  (CONF_LONG_PRESS, CONF_DIM_UP): {CONF_EVENT: 2001},
247  (CONF_LONG_RELEASE, CONF_DIM_UP): {CONF_EVENT: 2003},
248  (CONF_SHORT_PRESS, CONF_DIM_DOWN): {CONF_EVENT: 3002},
249  (CONF_LONG_PRESS, CONF_DIM_DOWN): {CONF_EVENT: 3001},
250  (CONF_LONG_RELEASE, CONF_DIM_DOWN): {CONF_EVENT: 3003},
251  (CONF_SHORT_PRESS, CONF_LEFT): {CONF_EVENT: 4002},
252  (CONF_LONG_PRESS, CONF_LEFT): {CONF_EVENT: 4001},
253  (CONF_LONG_RELEASE, CONF_LEFT): {CONF_EVENT: 4003},
254  (CONF_SHORT_PRESS, CONF_RIGHT): {CONF_EVENT: 5002},
255  (CONF_LONG_PRESS, CONF_RIGHT): {CONF_EVENT: 5001},
256  (CONF_LONG_RELEASE, CONF_RIGHT): {CONF_EVENT: 5003},
257 }
258 
259 TRADFRI_SHORTCUT_REMOTE_MODEL = "TRADFRI SHORTCUT Button"
260 TRADFRI_SHORTCUT_REMOTE = {
261  (CONF_SHORT_PRESS, ""): {CONF_EVENT: 1002},
262  (CONF_LONG_PRESS, ""): {CONF_EVENT: 1001},
263  (CONF_LONG_RELEASE, ""): {CONF_EVENT: 1003},
264 }
265 
266 TRADFRI_WIRELESS_DIMMER_MODEL = "TRADFRI wireless dimmer"
267 TRADFRI_WIRELESS_DIMMER = {
268  (CONF_ROTATED_FAST, CONF_LEFT): {CONF_EVENT: 4002},
269  (CONF_ROTATED, CONF_LEFT): {CONF_EVENT: 3002},
270  (CONF_ROTATED, CONF_RIGHT): {CONF_EVENT: 2002},
271  (CONF_ROTATED_FAST, CONF_RIGHT): {CONF_EVENT: 1002},
272 }
273 
274 AQARA_CUBE_MODEL = "lumi.sensor_cube"
275 AQARA_CUBE_MODEL_ALT1 = "lumi.sensor_cube.aqgl01"
276 AQARA_CUBE = {
277  (CONF_ROTATE_FROM_SIDE_1, CONF_SIDE_2): {CONF_EVENT: 2001},
278  (CONF_ROTATE_FROM_SIDE_1, CONF_SIDE_3): {CONF_EVENT: 3001},
279  (CONF_ROTATE_FROM_SIDE_1, CONF_SIDE_4): {CONF_EVENT: 4001},
280  (CONF_ROTATE_FROM_SIDE_1, CONF_SIDE_5): {CONF_EVENT: 5001},
281  (CONF_ROTATE_FROM_SIDE_1, CONF_SIDE_6): {CONF_EVENT: 6001},
282  (CONF_ROTATE_FROM_SIDE_2, CONF_SIDE_1): {CONF_EVENT: 1002},
283  (CONF_ROTATE_FROM_SIDE_2, CONF_SIDE_3): {CONF_EVENT: 3002},
284  (CONF_ROTATE_FROM_SIDE_2, CONF_SIDE_4): {CONF_EVENT: 4002},
285  (CONF_ROTATE_FROM_SIDE_2, CONF_SIDE_5): {CONF_EVENT: 5002},
286  (CONF_ROTATE_FROM_SIDE_2, CONF_SIDE_6): {CONF_EVENT: 6002},
287  (CONF_ROTATE_FROM_SIDE_3, CONF_SIDE_1): {CONF_EVENT: 1003},
288  (CONF_ROTATE_FROM_SIDE_3, CONF_SIDE_2): {CONF_EVENT: 2003},
289  (CONF_ROTATE_FROM_SIDE_3, CONF_SIDE_4): {CONF_EVENT: 4003},
290  (CONF_ROTATE_FROM_SIDE_3, CONF_SIDE_5): {CONF_EVENT: 5003},
291  (CONF_ROTATE_FROM_SIDE_3, CONF_SIDE_6): {CONF_EVENT: 6003},
292  (CONF_ROTATE_FROM_SIDE_4, CONF_SIDE_1): {CONF_EVENT: 1004},
293  (CONF_ROTATE_FROM_SIDE_4, CONF_SIDE_2): {CONF_EVENT: 2004},
294  (CONF_ROTATE_FROM_SIDE_4, CONF_SIDE_3): {CONF_EVENT: 3004},
295  (CONF_ROTATE_FROM_SIDE_4, CONF_SIDE_5): {CONF_EVENT: 5004},
296  (CONF_ROTATE_FROM_SIDE_4, CONF_SIDE_6): {CONF_EVENT: 6004},
297  (CONF_ROTATE_FROM_SIDE_5, CONF_SIDE_1): {CONF_EVENT: 1005},
298  (CONF_ROTATE_FROM_SIDE_5, CONF_SIDE_2): {CONF_EVENT: 2005},
299  (CONF_ROTATE_FROM_SIDE_5, CONF_SIDE_3): {CONF_EVENT: 3005},
300  (CONF_ROTATE_FROM_SIDE_5, CONF_SIDE_4): {CONF_EVENT: 4005},
301  (CONF_ROTATE_FROM_SIDE_5, CONF_SIDE_6): {CONF_EVENT: 6005},
302  (CONF_ROTATE_FROM_SIDE_6, CONF_SIDE_1): {CONF_EVENT: 1006},
303  (CONF_ROTATE_FROM_SIDE_6, CONF_SIDE_2): {CONF_EVENT: 2006},
304  (CONF_ROTATE_FROM_SIDE_6, CONF_SIDE_3): {CONF_EVENT: 3006},
305  (CONF_ROTATE_FROM_SIDE_6, CONF_SIDE_4): {CONF_EVENT: 4006},
306  (CONF_ROTATE_FROM_SIDE_6, CONF_SIDE_5): {CONF_EVENT: 5006},
307  (CONF_MOVE, CONF_SIDE_1): {CONF_EVENT: 1000},
308  (CONF_MOVE, CONF_SIDE_2): {CONF_EVENT: 2000},
309  (CONF_MOVE, CONF_SIDE_3): {CONF_EVENT: 3000},
310  (CONF_MOVE, CONF_SIDE_4): {CONF_EVENT: 4000},
311  (CONF_MOVE, CONF_SIDE_5): {CONF_EVENT: 5000},
312  (CONF_MOVE, CONF_SIDE_6): {CONF_EVENT: 6000},
313  (CONF_DOUBLE_TAP, CONF_SIDE_1): {CONF_EVENT: 1001},
314  (CONF_DOUBLE_TAP, CONF_SIDE_2): {CONF_EVENT: 2002},
315  (CONF_DOUBLE_TAP, CONF_SIDE_3): {CONF_EVENT: 3003},
316  (CONF_DOUBLE_TAP, CONF_SIDE_4): {CONF_EVENT: 4004},
317  (CONF_DOUBLE_TAP, CONF_SIDE_5): {CONF_EVENT: 5005},
318  (CONF_DOUBLE_TAP, CONF_SIDE_6): {CONF_EVENT: 6006},
319  (CONF_AWAKE, ""): {CONF_GESTURE: 0},
320  (CONF_SHAKE, ""): {CONF_GESTURE: 1},
321  (CONF_FREE_FALL, ""): {CONF_GESTURE: 2},
322  (CONF_FLIP_90, ""): {CONF_GESTURE: 3},
323  (CONF_FLIP_180, ""): {CONF_GESTURE: 4},
324  (CONF_MOVE_ANY, ""): {CONF_GESTURE: 5},
325  (CONF_DOUBLE_TAP_ANY, ""): {CONF_GESTURE: 6},
326  (CONF_TURN_CW, ""): {CONF_GESTURE: 7},
327  (CONF_TURN_CCW, ""): {CONF_GESTURE: 8},
328 }
329 
330 AQARA_DOUBLE_WALL_SWITCH_MODEL = "lumi.remote.b286acn01"
331 AQARA_DOUBLE_WALL_SWITCH_MODEL_2020 = "lumi.remote.b286acn02"
332 AQARA_DOUBLE_WALL_SWITCH = {
333  (CONF_SHORT_PRESS, CONF_LEFT): {CONF_EVENT: 1002},
334  (CONF_LONG_PRESS, CONF_LEFT): {CONF_EVENT: 1001},
335  (CONF_DOUBLE_PRESS, CONF_LEFT): {CONF_EVENT: 1004},
336  (CONF_SHORT_PRESS, CONF_RIGHT): {CONF_EVENT: 2002},
337  (CONF_LONG_PRESS, CONF_RIGHT): {CONF_EVENT: 2001},
338  (CONF_DOUBLE_PRESS, CONF_RIGHT): {CONF_EVENT: 2004},
339  (CONF_SHORT_PRESS, CONF_BOTH_BUTTONS): {CONF_EVENT: 3002},
340  (CONF_LONG_PRESS, CONF_BOTH_BUTTONS): {CONF_EVENT: 3001},
341  (CONF_DOUBLE_PRESS, CONF_BOTH_BUTTONS): {CONF_EVENT: 3004},
342 }
343 
344 AQARA_DOUBLE_WALL_SWITCH_WXKG02LM_MODEL = "lumi.sensor_86sw2"
345 AQARA_DOUBLE_WALL_SWITCH_WXKG02LM = {
346  (CONF_SHORT_PRESS, CONF_LEFT): {CONF_EVENT: 1002},
347  (CONF_SHORT_PRESS, CONF_RIGHT): {CONF_EVENT: 2002},
348  (CONF_SHORT_PRESS, CONF_BOTH_BUTTONS): {CONF_EVENT: 3002},
349 }
350 
351 AQARA_DOUBLE_WALL_SWITCH_QBKG12LM_MODEL = "lumi.ctrl_ln2.aq1"
352 AQARA_DOUBLE_WALL_SWITCH_QBKG12LM = {
353  (CONF_SHORT_PRESS, CONF_LEFT): {CONF_EVENT: 1002},
354  (CONF_DOUBLE_PRESS, CONF_LEFT): {CONF_EVENT: 1004},
355  (CONF_SHORT_PRESS, CONF_RIGHT): {CONF_EVENT: 2002},
356  (CONF_DOUBLE_PRESS, CONF_RIGHT): {CONF_EVENT: 2004},
357  (CONF_SHORT_PRESS, CONF_BOTH_BUTTONS): {CONF_EVENT: 3002},
358 }
359 
360 AQARA_SINGLE_WALL_SWITCH_QBKG11LM_MODEL = "lumi.ctrl_ln1.aq1"
361 AQARA_SINGLE_WALL_SWITCH_QBKG11LM = {
362  (CONF_SHORT_PRESS, CONF_TURN_ON): {CONF_EVENT: 1002},
363  (CONF_DOUBLE_PRESS, CONF_TURN_ON): {CONF_EVENT: 1004},
364 }
365 
366 AQARA_SINGLE_WALL_SWITCH_WXKG03LM_MODEL = "lumi.remote.b186acn01"
367 AQARA_SINGLE_WALL_SWITCH_WXKG06LM_MODEL = "lumi.remote.b186acn02"
368 AQARA_SINGLE_WALL_SWITCH = {
369  (CONF_SHORT_PRESS, CONF_TURN_ON): {CONF_EVENT: 1002},
370  (CONF_LONG_PRESS, CONF_TURN_ON): {CONF_EVENT: 1001},
371  (CONF_DOUBLE_PRESS, CONF_TURN_ON): {CONF_EVENT: 1004},
372 }
373 
374 AQARA_MINI_SWITCH_WXKG11LM_MODEL = "lumi.remote.b1acn01"
375 AQARA_MINI_SWITCH_WBR02D_MODEL = "lumi.remote.b1acn02"
376 AQARA_MINI_SWITCH = {
377  (CONF_SHORT_PRESS, CONF_TURN_ON): {CONF_EVENT: 1002},
378  (CONF_DOUBLE_PRESS, CONF_TURN_ON): {CONF_EVENT: 1004},
379  (CONF_LONG_PRESS, CONF_TURN_ON): {CONF_EVENT: 1001},
380  (CONF_LONG_RELEASE, CONF_TURN_ON): {CONF_EVENT: 1003},
381 }
382 
383 
384 AQARA_ROUND_SWITCH_MODEL = "lumi.sensor_switch"
385 AQARA_ROUND_SWITCH = {
386  (CONF_SHORT_PRESS, CONF_TURN_ON): {CONF_EVENT: 1000},
387  (CONF_SHORT_RELEASE, CONF_TURN_ON): {CONF_EVENT: 1002},
388  (CONF_DOUBLE_PRESS, CONF_TURN_ON): {CONF_EVENT: 1004},
389  (CONF_TRIPLE_PRESS, CONF_TURN_ON): {CONF_EVENT: 1005},
390  (CONF_QUADRUPLE_PRESS, CONF_TURN_ON): {CONF_EVENT: 1006},
391  (CONF_QUINTUPLE_PRESS, CONF_TURN_ON): {CONF_EVENT: 1010},
392  (CONF_LONG_PRESS, CONF_TURN_ON): {CONF_EVENT: 1001},
393  (CONF_LONG_RELEASE, CONF_TURN_ON): {CONF_EVENT: 1003},
394 }
395 
396 AQARA_SQUARE_SWITCH_MODEL = "lumi.sensor_switch.aq3"
397 AQARA_SQUARE_SWITCH = {
398  (CONF_SHORT_PRESS, CONF_TURN_ON): {CONF_EVENT: 1002},
399  (CONF_DOUBLE_PRESS, CONF_TURN_ON): {CONF_EVENT: 1004},
400  (CONF_LONG_PRESS, CONF_TURN_ON): {CONF_EVENT: 1001},
401  (CONF_LONG_RELEASE, CONF_TURN_ON): {CONF_EVENT: 1003},
402  (CONF_SHAKE, ""): {CONF_EVENT: 1007},
403 }
404 
405 AQARA_SQUARE_SWITCH_WXKG11LM_2016_MODEL = "lumi.sensor_switch.aq2"
406 AQARA_SQUARE_SWITCH_WXKG11LM_2016 = {
407  (CONF_SHORT_PRESS, CONF_TURN_ON): {CONF_EVENT: 1002},
408  (CONF_DOUBLE_PRESS, CONF_TURN_ON): {CONF_EVENT: 1004},
409  (CONF_TRIPLE_PRESS, CONF_TURN_ON): {CONF_EVENT: 1005},
410  (CONF_QUADRUPLE_PRESS, CONF_TURN_ON): {CONF_EVENT: 1006},
411 }
412 
413 AQARA_OPPLE_2_BUTTONS_MODEL = "lumi.remote.b286opcn01"
414 AQARA_OPPLE_2_BUTTONS = {
415  (CONF_LONG_PRESS, CONF_TURN_OFF): {CONF_EVENT: 1001},
416  (CONF_SHORT_RELEASE, CONF_TURN_OFF): {CONF_EVENT: 1002},
417  (CONF_LONG_RELEASE, CONF_TURN_OFF): {CONF_EVENT: 1003},
418  (CONF_DOUBLE_PRESS, CONF_TURN_OFF): {CONF_EVENT: 1004},
419  (CONF_TRIPLE_PRESS, CONF_TURN_OFF): {CONF_EVENT: 1005},
420  (CONF_LONG_PRESS, CONF_TURN_ON): {CONF_EVENT: 2001},
421  (CONF_SHORT_RELEASE, CONF_TURN_ON): {CONF_EVENT: 2002},
422  (CONF_LONG_RELEASE, CONF_TURN_ON): {CONF_EVENT: 2003},
423  (CONF_DOUBLE_PRESS, CONF_TURN_ON): {CONF_EVENT: 2004},
424  (CONF_TRIPLE_PRESS, CONF_TURN_ON): {CONF_EVENT: 2005},
425 }
426 
427 AQARA_OPPLE_4_BUTTONS_MODEL = "lumi.remote.b486opcn01"
428 AQARA_OPPLE_4_BUTTONS = {
429  **AQARA_OPPLE_2_BUTTONS,
430  (CONF_LONG_PRESS, CONF_DIM_DOWN): {CONF_EVENT: 3001},
431  (CONF_SHORT_RELEASE, CONF_DIM_DOWN): {CONF_EVENT: 3002},
432  (CONF_LONG_RELEASE, CONF_DIM_DOWN): {CONF_EVENT: 3003},
433  (CONF_DOUBLE_PRESS, CONF_DIM_DOWN): {CONF_EVENT: 3004},
434  (CONF_TRIPLE_PRESS, CONF_DIM_DOWN): {CONF_EVENT: 3005},
435  (CONF_LONG_PRESS, CONF_DIM_UP): {CONF_EVENT: 4001},
436  (CONF_SHORT_RELEASE, CONF_DIM_UP): {CONF_EVENT: 4002},
437  (CONF_LONG_RELEASE, CONF_DIM_UP): {CONF_EVENT: 4003},
438  (CONF_DOUBLE_PRESS, CONF_DIM_UP): {CONF_EVENT: 4004},
439  (CONF_TRIPLE_PRESS, CONF_DIM_UP): {CONF_EVENT: 4005},
440 }
441 
442 AQARA_OPPLE_6_BUTTONS_MODEL = "lumi.remote.b686opcn01"
443 AQARA_OPPLE_6_BUTTONS = {
444  **AQARA_OPPLE_4_BUTTONS,
445  (CONF_LONG_PRESS, CONF_LEFT): {CONF_EVENT: 5001},
446  (CONF_SHORT_RELEASE, CONF_LEFT): {CONF_EVENT: 5002},
447  (CONF_LONG_RELEASE, CONF_LEFT): {CONF_EVENT: 5003},
448  (CONF_DOUBLE_PRESS, CONF_LEFT): {CONF_EVENT: 5004},
449  (CONF_TRIPLE_PRESS, CONF_LEFT): {CONF_EVENT: 5005},
450  (CONF_LONG_PRESS, CONF_RIGHT): {CONF_EVENT: 6001},
451  (CONF_SHORT_RELEASE, CONF_RIGHT): {CONF_EVENT: 6002},
452  (CONF_LONG_RELEASE, CONF_RIGHT): {CONF_EVENT: 6003},
453  (CONF_DOUBLE_PRESS, CONF_RIGHT): {CONF_EVENT: 6004},
454  (CONF_TRIPLE_PRESS, CONF_RIGHT): {CONF_EVENT: 6005},
455 }
456 
457 DRESDEN_ELEKTRONIK_LIGHTING_SWITCH_MODEL = "Lighting Switch"
458 DRESDEN_ELEKTRONIK_LIGHTING_SWITCH = {
459  (CONF_SHORT_RELEASE, CONF_TURN_ON): {CONF_EVENT: 1002},
460  (CONF_LONG_PRESS, CONF_TURN_ON): {CONF_EVENT: 1001},
461  (CONF_LONG_RELEASE, CONF_TURN_ON): {CONF_EVENT: 1003},
462  (CONF_SHORT_RELEASE, CONF_DIM_UP): {CONF_EVENT: 2002},
463  (CONF_LONG_PRESS, CONF_DIM_UP): {CONF_EVENT: 2001},
464  (CONF_LONG_RELEASE, CONF_DIM_UP): {CONF_EVENT: 2003},
465  (CONF_SHORT_RELEASE, CONF_DIM_DOWN): {CONF_EVENT: 3002},
466  (CONF_LONG_PRESS, CONF_DIM_DOWN): {CONF_EVENT: 3001},
467  (CONF_LONG_RELEASE, CONF_DIM_DOWN): {CONF_EVENT: 3003},
468  (CONF_SHORT_RELEASE, CONF_TURN_OFF): {CONF_EVENT: 4002},
469  (CONF_LONG_PRESS, CONF_TURN_OFF): {CONF_EVENT: 4001},
470  (CONF_LONG_RELEASE, CONF_TURN_OFF): {CONF_EVENT: 4003},
471 }
472 
473 DRESDEN_ELEKTRONIK_SCENE_SWITCH_MODEL = "Scene Switch"
474 DRESDEN_ELEKTRONIK_SCENE_SWITCH = {
475  (CONF_SHORT_RELEASE, CONF_TURN_ON): {CONF_EVENT: 1002},
476  (CONF_LONG_PRESS, CONF_TURN_ON): {CONF_EVENT: 1001},
477  (CONF_LONG_RELEASE, CONF_TURN_ON): {CONF_EVENT: 1003},
478  (CONF_SHORT_RELEASE, CONF_DIM_UP): {CONF_EVENT: 2002},
479  (CONF_LONG_PRESS, CONF_DIM_UP): {CONF_EVENT: 2001},
480  (CONF_LONG_RELEASE, CONF_DIM_UP): {CONF_EVENT: 2003},
481  (CONF_SHORT_RELEASE, CONF_BUTTON_1): {CONF_EVENT: 3002},
482  (CONF_SHORT_RELEASE, CONF_BUTTON_2): {CONF_EVENT: 4002},
483  (CONF_SHORT_RELEASE, CONF_BUTTON_3): {CONF_EVENT: 5002},
484  (CONF_SHORT_RELEASE, CONF_BUTTON_4): {CONF_EVENT: 6002},
485 }
486 
487 GIRA_JUNG_SWITCH_MODEL = "HS_4f_GJ_1"
488 GIRA_SWITCH_MODEL = "WS_4f_J_1"
489 JUNG_SWITCH_MODEL = "WS_3f_G_1"
490 GIRA_JUNG_SWITCH = {
491  (CONF_SHORT_RELEASE, CONF_TURN_ON): {CONF_EVENT: 1002},
492  (CONF_LONG_PRESS, CONF_TURN_ON): {CONF_EVENT: 1001},
493  (CONF_LONG_RELEASE, CONF_TURN_ON): {CONF_EVENT: 1003},
494  (CONF_SHORT_RELEASE, CONF_DIM_UP): {CONF_EVENT: 2002},
495  (CONF_LONG_PRESS, CONF_DIM_UP): {CONF_EVENT: 2001},
496  (CONF_LONG_RELEASE, CONF_DIM_UP): {CONF_EVENT: 2003},
497  (CONF_SHORT_RELEASE, CONF_BUTTON_3): {CONF_EVENT: 3002},
498  (CONF_SHORT_RELEASE, CONF_BUTTON_4): {CONF_EVENT: 4002},
499  (CONF_SHORT_RELEASE, CONF_BUTTON_5): {CONF_EVENT: 5002},
500  (CONF_SHORT_RELEASE, CONF_BUTTON_6): {CONF_EVENT: 6002},
501  (CONF_SHORT_RELEASE, CONF_BUTTON_7): {CONF_EVENT: 7002},
502  (CONF_SHORT_RELEASE, CONF_BUTTON_8): {CONF_EVENT: 8002},
503 }
504 
505 LEGRAND_ZGP_TOGGLE_SWITCH_MODEL = "LEGRANDZGPTOGGLESWITCH"
506 LEGRAND_ZGP_TOGGLE_SWITCH = {
507  (CONF_SHORT_PRESS, CONF_TURN_ON): {CONF_EVENT: 1002},
508  (CONF_DOUBLE_PRESS, CONF_TURN_ON): {CONF_EVENT: 1004},
509 }
510 
511 LEGRAND_ZGP_SCENE_SWITCH_MODEL = "LEGRANDZGPSCENESWITCH"
512 LEGRAND_ZGP_SCENE_SWITCH = {
513  (CONF_SHORT_PRESS, CONF_BUTTON_1): {CONF_EVENT: 1002},
514  (CONF_SHORT_PRESS, CONF_BUTTON_2): {CONF_EVENT: 2002},
515  (CONF_SHORT_PRESS, CONF_BUTTON_3): {CONF_EVENT: 3002},
516  (CONF_SHORT_PRESS, CONF_BUTTON_4): {CONF_EVENT: 4002},
517 }
518 
519 LIDL_SILVERCREST_DOORBELL_MODEL = "HG06668"
520 LIDL_SILVERCREST_DOORBELL_MODEL_2 = "TS0211"
521 LIDL_SILVERCREST_DOORBELL = {
522  (CONF_SHORT_PRESS, ""): {CONF_EVENT: 1002},
523 }
524 
525 LIDL_SILVERCREST_BUTTON_REMOTE_MODEL = "TS004F"
526 LIDL_SILVERCREST_BUTTON_REMOTE = {
527  (CONF_SHORT_PRESS, ""): {CONF_EVENT: 1002},
528  (CONF_DOUBLE_PRESS, ""): {CONF_EVENT: 1004},
529 }
530 
531 LIGHTIFIY_FOUR_BUTTON_REMOTE_MODEL = "Switch-LIGHTIFY"
532 LIGHTIFIY_FOUR_BUTTON_REMOTE_4X_MODEL = "Switch 4x-LIGHTIFY"
533 LIGHTIFIY_FOUR_BUTTON_REMOTE_4X_EU_MODEL = "Switch 4x EU-LIGHTIFY"
534 LIGHTIFIY_FOUR_BUTTON_REMOTE = {
535  (CONF_SHORT_RELEASE, CONF_TURN_ON): {CONF_EVENT: 1002},
536  (CONF_LONG_PRESS, CONF_TURN_ON): {CONF_EVENT: 1001},
537  (CONF_LONG_RELEASE, CONF_TURN_ON): {CONF_EVENT: 1003},
538  (CONF_SHORT_RELEASE, CONF_DIM_UP): {CONF_EVENT: 2002},
539  (CONF_LONG_PRESS, CONF_DIM_UP): {CONF_EVENT: 2001},
540  (CONF_LONG_RELEASE, CONF_DIM_UP): {CONF_EVENT: 2003},
541  (CONF_SHORT_RELEASE, CONF_DIM_DOWN): {CONF_EVENT: 3002},
542  (CONF_LONG_PRESS, CONF_DIM_DOWN): {CONF_EVENT: 3001},
543  (CONF_LONG_RELEASE, CONF_DIM_DOWN): {CONF_EVENT: 3003},
544  (CONF_SHORT_RELEASE, CONF_TURN_OFF): {CONF_EVENT: 4002},
545  (CONF_LONG_PRESS, CONF_TURN_OFF): {CONF_EVENT: 4001},
546  (CONF_LONG_RELEASE, CONF_TURN_OFF): {CONF_EVENT: 4003},
547 }
548 
549 BUSCH_JAEGER_REMOTE_1_MODEL = "RB01"
550 BUSCH_JAEGER_REMOTE_2_MODEL = "RM01"
551 BUSCH_JAEGER_REMOTE = {
552  (CONF_SHORT_RELEASE, CONF_BUTTON_1): {CONF_EVENT: 1002},
553  (CONF_LONG_PRESS, CONF_BUTTON_1): {CONF_EVENT: 1001},
554  (CONF_LONG_RELEASE, CONF_BUTTON_1): {CONF_EVENT: 1003},
555  (CONF_SHORT_RELEASE, CONF_BUTTON_2): {CONF_EVENT: 2002},
556  (CONF_LONG_PRESS, CONF_BUTTON_2): {CONF_EVENT: 2001},
557  (CONF_LONG_RELEASE, CONF_BUTTON_2): {CONF_EVENT: 2003},
558  (CONF_SHORT_RELEASE, CONF_BUTTON_3): {CONF_EVENT: 3002},
559  (CONF_LONG_PRESS, CONF_BUTTON_3): {CONF_EVENT: 3001},
560  (CONF_LONG_RELEASE, CONF_BUTTON_3): {CONF_EVENT: 3003},
561  (CONF_SHORT_RELEASE, CONF_BUTTON_4): {CONF_EVENT: 4002},
562  (CONF_LONG_PRESS, CONF_BUTTON_4): {CONF_EVENT: 4001},
563  (CONF_LONG_RELEASE, CONF_BUTTON_4): {CONF_EVENT: 4003},
564  (CONF_SHORT_RELEASE, CONF_BUTTON_5): {CONF_EVENT: 5002},
565  (CONF_LONG_PRESS, CONF_BUTTON_5): {CONF_EVENT: 5001},
566  (CONF_LONG_RELEASE, CONF_BUTTON_5): {CONF_EVENT: 5003},
567  (CONF_SHORT_RELEASE, CONF_BUTTON_6): {CONF_EVENT: 6002},
568  (CONF_LONG_PRESS, CONF_BUTTON_6): {CONF_EVENT: 6001},
569  (CONF_LONG_RELEASE, CONF_BUTTON_6): {CONF_EVENT: 6003},
570  (CONF_SHORT_RELEASE, CONF_BUTTON_7): {CONF_EVENT: 7002},
571  (CONF_LONG_PRESS, CONF_BUTTON_7): {CONF_EVENT: 7001},
572  (CONF_LONG_RELEASE, CONF_BUTTON_7): {CONF_EVENT: 7003},
573  (CONF_SHORT_RELEASE, CONF_BUTTON_8): {CONF_EVENT: 8002},
574  (CONF_LONG_PRESS, CONF_BUTTON_8): {CONF_EVENT: 8001},
575  (CONF_LONG_RELEASE, CONF_BUTTON_8): {CONF_EVENT: 8003},
576 }
577 
578 SONOFF_SNZB_01_1_MODEL = "WB01"
579 SONOFF_SNZB_01_2_MODEL = "WB-01"
580 SONOFF_SNZB_01P_MODEL = "SNZB-01P"
581 SONOFF_SNZB_01_SWITCH = {
582  (CONF_SHORT_RELEASE, CONF_BUTTON_1): {CONF_EVENT: 1002},
583  (CONF_LONG_RELEASE, CONF_BUTTON_1): {CONF_EVENT: 1003},
584  (CONF_DOUBLE_PRESS, CONF_BUTTON_1): {CONF_EVENT: 1004},
585 }
586 
587 TRUST_ZYCT_202_MODEL = "ZYCT-202"
588 TRUST_ZYCT_202_ZLL_MODEL = "ZLL-NonColorController"
589 TRUST_ZYCT_202 = {
590  (CONF_SHORT_RELEASE, CONF_BUTTON_1): {CONF_EVENT: 1002},
591  (CONF_LONG_PRESS, CONF_BUTTON_2): {CONF_EVENT: 2001},
592  (CONF_LONG_RELEASE, CONF_BUTTON_2): {CONF_EVENT: 2003},
593  (CONF_LONG_PRESS, CONF_BUTTON_3): {CONF_EVENT: 3001},
594  (CONF_LONG_RELEASE, CONF_BUTTON_3): {CONF_EVENT: 3003},
595  (CONF_SHORT_RELEASE, CONF_BUTTON_4): {CONF_EVENT: 4002},
596 }
597 
598 UBISYS_POWER_SWITCH_S2_MODEL = "S2"
599 UBISYS_POWER_SWITCH_S2 = {
600  (CONF_SHORT_RELEASE, CONF_BUTTON_1): {CONF_EVENT: 1002},
601  (CONF_LONG_PRESS, CONF_BUTTON_1): {CONF_EVENT: 1001},
602  (CONF_LONG_RELEASE, CONF_BUTTON_1): {CONF_EVENT: 1003},
603  (CONF_SHORT_RELEASE, CONF_BUTTON_2): {CONF_EVENT: 2002},
604  (CONF_LONG_PRESS, CONF_BUTTON_2): {CONF_EVENT: 2001},
605  (CONF_LONG_RELEASE, CONF_BUTTON_2): {CONF_EVENT: 2003},
606 }
607 
608 UBISYS_CONTROL_UNIT_C4_MODEL = "C4"
609 UBISYS_CONTROL_UNIT_C4 = {
610  **UBISYS_POWER_SWITCH_S2,
611  (CONF_SHORT_RELEASE, CONF_BUTTON_3): {CONF_EVENT: 3002},
612  (CONF_LONG_PRESS, CONF_BUTTON_3): {CONF_EVENT: 3001},
613  (CONF_LONG_RELEASE, CONF_BUTTON_3): {CONF_EVENT: 3003},
614  (CONF_SHORT_RELEASE, CONF_BUTTON_4): {CONF_EVENT: 4002},
615  (CONF_LONG_PRESS, CONF_BUTTON_4): {CONF_EVENT: 4001},
616  (CONF_LONG_RELEASE, CONF_BUTTON_4): {CONF_EVENT: 4003},
617 }
618 
619 REMOTES = {
620  HUE_DIMMER_REMOTE_MODEL_GEN1: HUE_DIMMER_REMOTE,
621  HUE_DIMMER_REMOTE_MODEL_GEN2: HUE_DIMMER_REMOTE,
622  HUE_DIMMER_REMOTE_MODEL_GEN3: HUE_DIMMER_REMOTE,
623  HUE_BUTTON_REMOTE_MODEL: HUE_BUTTON_REMOTE,
624  HUE_TAP_REMOTE_MODEL: HUE_TAP_REMOTE,
625  HUE_WALL_REMOTE_MODEL: HUE_WALL_REMOTE,
626  FRIENDS_OF_HUE_SWITCH_MODEL: FRIENDS_OF_HUE_SWITCH,
627  RODRET_REMOTE_MODEL: RODRET_REMOTE,
628  SOMRIG_REMOTE_MODEL: SOMRIG_REMOTE,
629  STYRBAR_REMOTE_MODEL: STYRBAR_REMOTE,
630  SYMFONISK_SOUND_CONTROLLER_MODEL: SYMFONISK_SOUND_CONTROLLER,
631  TRADFRI_ON_OFF_SWITCH_MODEL: TRADFRI_ON_OFF_SWITCH,
632  TRADFRI_OPEN_CLOSE_REMOTE_MODEL: TRADFRI_OPEN_CLOSE_REMOTE,
633  TRADFRI_REMOTE_MODEL: TRADFRI_REMOTE,
634  TRADFRI_SHORTCUT_REMOTE_MODEL: TRADFRI_SHORTCUT_REMOTE,
635  TRADFRI_WIRELESS_DIMMER_MODEL: TRADFRI_WIRELESS_DIMMER,
636  AQARA_CUBE_MODEL: AQARA_CUBE,
637  AQARA_CUBE_MODEL_ALT1: AQARA_CUBE,
638  AQARA_DOUBLE_WALL_SWITCH_MODEL: AQARA_DOUBLE_WALL_SWITCH,
639  AQARA_DOUBLE_WALL_SWITCH_MODEL_2020: AQARA_DOUBLE_WALL_SWITCH,
640  AQARA_DOUBLE_WALL_SWITCH_WXKG02LM_MODEL: AQARA_DOUBLE_WALL_SWITCH_WXKG02LM,
641  AQARA_DOUBLE_WALL_SWITCH_QBKG12LM_MODEL: AQARA_DOUBLE_WALL_SWITCH_QBKG12LM,
642  AQARA_SINGLE_WALL_SWITCH_QBKG11LM_MODEL: AQARA_SINGLE_WALL_SWITCH_QBKG11LM,
643  AQARA_SINGLE_WALL_SWITCH_WXKG03LM_MODEL: AQARA_SINGLE_WALL_SWITCH,
644  AQARA_SINGLE_WALL_SWITCH_WXKG06LM_MODEL: AQARA_SINGLE_WALL_SWITCH,
645  AQARA_MINI_SWITCH_WXKG11LM_MODEL: AQARA_MINI_SWITCH,
646  AQARA_MINI_SWITCH_WBR02D_MODEL: AQARA_MINI_SWITCH,
647  AQARA_ROUND_SWITCH_MODEL: AQARA_ROUND_SWITCH,
648  AQARA_SQUARE_SWITCH_MODEL: AQARA_SQUARE_SWITCH,
649  AQARA_SQUARE_SWITCH_WXKG11LM_2016_MODEL: AQARA_SQUARE_SWITCH_WXKG11LM_2016,
650  AQARA_OPPLE_2_BUTTONS_MODEL: AQARA_OPPLE_2_BUTTONS,
651  AQARA_OPPLE_4_BUTTONS_MODEL: AQARA_OPPLE_4_BUTTONS,
652  AQARA_OPPLE_6_BUTTONS_MODEL: AQARA_OPPLE_6_BUTTONS,
653  DRESDEN_ELEKTRONIK_LIGHTING_SWITCH_MODEL: DRESDEN_ELEKTRONIK_LIGHTING_SWITCH,
654  DRESDEN_ELEKTRONIK_SCENE_SWITCH_MODEL: DRESDEN_ELEKTRONIK_SCENE_SWITCH,
655  GIRA_JUNG_SWITCH_MODEL: GIRA_JUNG_SWITCH,
656  GIRA_SWITCH_MODEL: GIRA_JUNG_SWITCH,
657  JUNG_SWITCH_MODEL: GIRA_JUNG_SWITCH,
658  LEGRAND_ZGP_TOGGLE_SWITCH_MODEL: LEGRAND_ZGP_TOGGLE_SWITCH,
659  LEGRAND_ZGP_SCENE_SWITCH_MODEL: LEGRAND_ZGP_SCENE_SWITCH,
660  LIDL_SILVERCREST_DOORBELL_MODEL: LIDL_SILVERCREST_DOORBELL,
661  LIDL_SILVERCREST_DOORBELL_MODEL_2: LIDL_SILVERCREST_DOORBELL,
662  LIDL_SILVERCREST_BUTTON_REMOTE_MODEL: LIDL_SILVERCREST_BUTTON_REMOTE,
663  LIGHTIFIY_FOUR_BUTTON_REMOTE_MODEL: LIGHTIFIY_FOUR_BUTTON_REMOTE,
664  LIGHTIFIY_FOUR_BUTTON_REMOTE_4X_MODEL: LIGHTIFIY_FOUR_BUTTON_REMOTE,
665  LIGHTIFIY_FOUR_BUTTON_REMOTE_4X_EU_MODEL: LIGHTIFIY_FOUR_BUTTON_REMOTE,
666  BUSCH_JAEGER_REMOTE_1_MODEL: BUSCH_JAEGER_REMOTE,
667  BUSCH_JAEGER_REMOTE_2_MODEL: BUSCH_JAEGER_REMOTE,
668  TRUST_ZYCT_202_MODEL: TRUST_ZYCT_202,
669  TRUST_ZYCT_202_ZLL_MODEL: TRUST_ZYCT_202,
670  UBISYS_POWER_SWITCH_S2_MODEL: UBISYS_POWER_SWITCH_S2,
671  UBISYS_CONTROL_UNIT_C4_MODEL: UBISYS_CONTROL_UNIT_C4,
672  SONOFF_SNZB_01_1_MODEL: SONOFF_SNZB_01_SWITCH,
673  SONOFF_SNZB_01_2_MODEL: SONOFF_SNZB_01_SWITCH,
674  SONOFF_SNZB_01P_MODEL: SONOFF_SNZB_01_SWITCH,
675 }
676 
677 TRIGGER_SCHEMA = DEVICE_TRIGGER_BASE_SCHEMA.extend(
678  {vol.Required(CONF_TYPE): str, vol.Required(CONF_SUBTYPE): str}
679 )
680 
681 
683  hass: HomeAssistant,
684  device: dr.DeviceEntry,
685 ) -> DeconzAlarmEvent | DeconzEvent | DeconzPresenceEvent | DeconzRelativeRotaryEvent:
686  """Resolve deconz event from device."""
687  hubs: dict[str, DeconzHub] = hass.data.get(DOMAIN, {})
688  for hub in hubs.values():
689  for deconz_event in hub.events:
690  if device.id == deconz_event.device_id:
691  return deconz_event
692 
693  raise InvalidDeviceAutomationConfig(
694  f'No deconz_event tied to device "{device.name}" found'
695  )
696 
697 
699  hass: HomeAssistant,
700  config: ConfigType,
701 ) -> ConfigType:
702  """Validate config."""
703  config = TRIGGER_SCHEMA(config)
704 
705  device_registry = dr.async_get(hass)
706  device = device_registry.async_get(config[CONF_DEVICE_ID])
707 
708  trigger = (config[CONF_TYPE], config[CONF_SUBTYPE])
709 
710  if not device:
711  raise InvalidDeviceAutomationConfig(
712  f"deCONZ trigger {trigger} device with ID "
713  f"{config[CONF_DEVICE_ID]} not found"
714  )
715 
716  if device.model not in REMOTES or trigger not in REMOTES[device.model]:
717  raise InvalidDeviceAutomationConfig(
718  f"deCONZ trigger {trigger} is not valid for device "
719  f"{device} ({config[CONF_DEVICE_ID]})"
720  )
721 
722  return config
723 
724 
726  hass: HomeAssistant,
727  config: ConfigType,
728  action: TriggerActionType,
729  trigger_info: TriggerInfo,
730 ) -> CALLBACK_TYPE:
731  """Listen for state changes based on configuration."""
732  event_data: dict[str, int | str] = {}
733 
734  device_registry = dr.async_get(hass)
735  device = device_registry.devices[config[CONF_DEVICE_ID]]
736 
737  deconz_event = _get_deconz_event_from_device(hass, device)
738  if event_id := deconz_event.serial:
739  event_data[CONF_UNIQUE_ID] = event_id
740 
741  if device_model := device.model:
742  config_trigger = (config[CONF_TYPE], config[CONF_SUBTYPE])
743  event_data |= REMOTES[device_model][config_trigger]
744 
745  raw_event_config = {
746  event_trigger.CONF_PLATFORM: "event",
747  event_trigger.CONF_EVENT_TYPE: CONF_DECONZ_EVENT,
748  event_trigger.CONF_EVENT_DATA: event_data,
749  }
750 
751  event_config = event_trigger.TRIGGER_SCHEMA(raw_event_config)
752  return await event_trigger.async_attach_trigger(
753  hass, event_config, action, trigger_info, platform_type="device"
754  )
755 
756 
758  hass: HomeAssistant,
759  device_id: str,
760 ) -> list[dict[str, str]]:
761  """List device triggers.
762 
763  Make sure device is a supported remote model.
764  Retrieve the deconz event object matching device entry.
765  Generate device trigger list.
766  """
767  device_registry = dr.async_get(hass)
768  device = device_registry.devices[device_id]
769 
770  if device.model not in REMOTES:
771  return []
772 
773  triggers = []
774  for trigger, subtype in REMOTES[device.model]:
775  triggers.append(
776  {
777  CONF_DEVICE_ID: device_id,
778  CONF_DOMAIN: DOMAIN,
779  CONF_PLATFORM: "device",
780  CONF_TYPE: trigger,
781  CONF_SUBTYPE: subtype,
782  }
783  )
784 
785  return 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)
DeconzAlarmEvent|DeconzEvent|DeconzPresenceEvent|DeconzRelativeRotaryEvent _get_deconz_event_from_device(HomeAssistant hass, dr.DeviceEntry device)
ConfigType async_validate_trigger_config(HomeAssistant hass, ConfigType config)