|
2 | 2 |
|
3 | 3 | from typing import Any, Optional, Union |
4 | 4 |
|
5 | | -from zigpy.profiles import zha |
6 | | -from zigpy.quirks import CustomDevice |
| 5 | +from zigpy.quirks.v2 import CustomDeviceV2, QuirkBuilder |
7 | 6 | import zigpy.types as t |
8 | | -from zigpy.zcl import foundation |
9 | | -from zigpy.zcl.clusters.general import ( |
10 | | - Basic, |
11 | | - Groups, |
12 | | - Identify, |
13 | | - LevelControl, |
14 | | - OnOff, |
15 | | - Ota, |
16 | | - PowerConfiguration, |
17 | | - Scenes, |
18 | | -) |
19 | | -from zigpy.zcl.clusters.homeautomation import Diagnostic |
20 | | -from zigpy.zcl.clusters.lighting import Color |
21 | | -from zigpy.zcl.clusters.lightlink import LightLink |
| 7 | +from zigpy.zcl import ClusterType, foundation |
| 8 | +from zigpy.zcl.clusters.general import Scenes |
22 | 9 | from zigpy.zcl.foundation import BaseCommandDefs |
23 | 10 |
|
24 | 11 | from zhaquirks import Bus, EventableCluster |
|
36 | 23 | COMMAND_STEP_COLOR_TEMP, |
37 | 24 | COMMAND_STEP_HUE, |
38 | 25 | COMMAND_STEP_SATURATION, |
39 | | - DEVICE_TYPE, |
40 | 26 | DIM_DOWN, |
41 | 27 | DIM_UP, |
42 | 28 | ENDPOINT_ID, |
43 | | - ENDPOINTS, |
44 | | - INPUT_CLUSTERS, |
45 | | - MODELS_INFO, |
46 | | - OUTPUT_CLUSTERS, |
47 | 29 | PARAMS, |
48 | | - PROFILE_ID, |
49 | 30 | SHORT_PRESS, |
50 | 31 | TURN_OFF, |
51 | 32 | TURN_ON, |
@@ -106,168 +87,120 @@ def __init__(self, *args, **kwargs): |
106 | 87 | self.endpoint.device.scenes_bus.add_listener(self) |
107 | 88 |
|
108 | 89 |
|
109 | | -class AdeoColorController(CustomDevice): |
| 90 | +class AdeoColorController(CustomDeviceV2): |
110 | 91 | """Custom device representing ADEO color controller.""" |
111 | 92 |
|
112 | 93 | def __init__(self, *args, **kwargs): |
113 | 94 | """Init.""" |
114 | 95 | self.scenes_bus = Bus() |
115 | 96 | super().__init__(*args, **kwargs) |
116 | 97 |
|
117 | | - signature = { |
118 | | - # <SimpleDescriptor endpoint=1 profile=260 device_type=2048 |
119 | | - # device_version=1 |
120 | | - # input_clusters=[0, 1, 3, 2821, 4096, 64769] |
121 | | - # output_clusters=[3, 4, 6, 8, 25, 768, 4096]> |
122 | | - MODELS_INFO: [("ADEO", "LXEK-5"), ("ADEO", "ZBEK-26")], |
123 | | - ENDPOINTS: { |
124 | | - 1: { |
125 | | - PROFILE_ID: zha.PROFILE_ID, # 260 |
126 | | - DEVICE_TYPE: zha.DeviceType.COLOR_CONTROLLER, # 2048 |
127 | | - INPUT_CLUSTERS: [ |
128 | | - Basic.cluster_id, # 0 |
129 | | - PowerConfiguration.cluster_id, # 1 |
130 | | - Identify.cluster_id, # 3 |
131 | | - Diagnostic.cluster_id, # 2821 |
132 | | - LightLink.cluster_id, # 4096 |
133 | | - 0xFD01, # 64769 |
134 | | - ], |
135 | | - OUTPUT_CLUSTERS: [ |
136 | | - Identify.cluster_id, # 3 |
137 | | - Groups.cluster_id, # 4 |
138 | | - OnOff.cluster_id, # 6 |
139 | | - LevelControl.cluster_id, # 8 |
140 | | - Ota.cluster_id, # 25 |
141 | | - Color.cluster_id, # 768 |
142 | | - LightLink.cluster_id, # 4096 |
143 | | - ], |
144 | | - } |
145 | | - }, |
146 | | - } |
147 | | - |
148 | | - replacement = { |
149 | | - ENDPOINTS: { |
150 | | - 1: { |
151 | | - PROFILE_ID: zha.PROFILE_ID, |
152 | | - DEVICE_TYPE: zha.DeviceType.COLOR_CONTROLLER, |
153 | | - INPUT_CLUSTERS: [ |
154 | | - Basic.cluster_id, # 0 |
155 | | - PowerConfiguration.cluster_id, # 1 |
156 | | - Identify.cluster_id, # 3 |
157 | | - Diagnostic.cluster_id, # 2821 |
158 | | - LightLink.cluster_id, # 4096 |
159 | | - 0xFD01, # 64769 |
160 | | - ], |
161 | | - OUTPUT_CLUSTERS: [ |
162 | | - Identify.cluster_id, # 3 |
163 | | - Groups.cluster_id, # 4 |
164 | | - AdeoScenesCluster, # 5 |
165 | | - OnOff.cluster_id, # 6 |
166 | | - LevelControl.cluster_id, # 8 |
167 | | - Ota.cluster_id, # 25 |
168 | | - Color.cluster_id, # 768 |
169 | | - LightLink.cluster_id, # 4096 |
170 | | - AdeoManufacturerCluster, # 65024 |
171 | | - ], |
172 | | - } |
173 | | - }, |
174 | | - } |
175 | 98 |
|
176 | | - device_automation_triggers = { |
177 | | - (SHORT_PRESS, TURN_ON): { |
178 | | - COMMAND: COMMAND_ON, |
179 | | - CLUSTER_ID: 6, # OnOff.cluster_id |
180 | | - ENDPOINT_ID: 1, |
181 | | - ARGS: [], |
182 | | - }, |
183 | | - (SHORT_PRESS, TURN_OFF): { |
184 | | - COMMAND: COMMAND_OFF, |
185 | | - CLUSTER_ID: 6, # OnOff.cluster_id |
186 | | - ENDPOINT_ID: 1, |
187 | | - ARGS: [], |
188 | | - }, |
189 | | - (SHORT_PRESS, DIM_UP): { |
190 | | - COMMAND: COMMAND_STEP, |
191 | | - CLUSTER_ID: 8, # LevelControl.cluster_id |
192 | | - ENDPOINT_ID: 1, |
193 | | - PARAMS: {"step_mode": 0}, |
194 | | - }, |
195 | | - (SHORT_PRESS, DIM_DOWN): { |
196 | | - COMMAND: COMMAND_STEP, |
197 | | - CLUSTER_ID: 8, # LevelControl.cluster_id |
198 | | - ENDPOINT_ID: 1, |
199 | | - PARAMS: {"step_mode": 1}, |
200 | | - }, |
201 | | - (SHORT_PRESS, COLOR_UP): { |
202 | | - COMMAND: COMMAND_STEP_COLOR_TEMP, |
203 | | - CLUSTER_ID: 768, # Color.cluster_id |
204 | | - ENDPOINT_ID: 1, |
205 | | - PARAMS: { |
206 | | - "step_mode": 3, |
207 | | - "step_size": 22, |
208 | | - "transition_time": 5, |
209 | | - "color_temp_min_mireds": 153, |
210 | | - "color_temp_max_mireds": 370, |
| 99 | +( |
| 100 | + QuirkBuilder("ADEO", "LXEK-5") |
| 101 | + .applies_to("ADEO", "ZBEK-26") |
| 102 | + .device_class(AdeoColorController) |
| 103 | + .replaces(AdeoScenesCluster, cluster_type=ClusterType.Client, endpoint_id=1) |
| 104 | + .adds(AdeoManufacturerCluster, cluster_type=ClusterType.Client, endpoint_id=1) |
| 105 | + .device_automation_triggers( |
| 106 | + { |
| 107 | + (SHORT_PRESS, TURN_ON): { |
| 108 | + COMMAND: COMMAND_ON, |
| 109 | + CLUSTER_ID: 6, # OnOff.cluster_id |
| 110 | + ENDPOINT_ID: 1, |
| 111 | + ARGS: [], |
| 112 | + }, |
| 113 | + (SHORT_PRESS, TURN_OFF): { |
| 114 | + COMMAND: COMMAND_OFF, |
| 115 | + CLUSTER_ID: 6, # OnOff.cluster_id |
| 116 | + ENDPOINT_ID: 1, |
| 117 | + ARGS: [], |
| 118 | + }, |
| 119 | + (SHORT_PRESS, DIM_UP): { |
| 120 | + COMMAND: COMMAND_STEP, |
| 121 | + CLUSTER_ID: 8, # LevelControl.cluster_id |
| 122 | + ENDPOINT_ID: 1, |
| 123 | + PARAMS: {"step_mode": 0}, |
| 124 | + }, |
| 125 | + (SHORT_PRESS, DIM_DOWN): { |
| 126 | + COMMAND: COMMAND_STEP, |
| 127 | + CLUSTER_ID: 8, # LevelControl.cluster_id |
| 128 | + ENDPOINT_ID: 1, |
| 129 | + PARAMS: {"step_mode": 1}, |
| 130 | + }, |
| 131 | + (SHORT_PRESS, COLOR_UP): { |
| 132 | + COMMAND: COMMAND_STEP_COLOR_TEMP, |
| 133 | + CLUSTER_ID: 768, # Color.cluster_id |
| 134 | + ENDPOINT_ID: 1, |
| 135 | + PARAMS: { |
| 136 | + "step_mode": 3, |
| 137 | + "step_size": 22, |
| 138 | + "transition_time": 5, |
| 139 | + "color_temp_min_mireds": 153, |
| 140 | + "color_temp_max_mireds": 370, |
| 141 | + }, |
| 142 | + }, |
| 143 | + (SHORT_PRESS, COLOR_DOWN): { |
| 144 | + COMMAND: COMMAND_STEP_COLOR_TEMP, |
| 145 | + CLUSTER_ID: 768, # Color.cluster_id |
| 146 | + ENDPOINT_ID: 1, |
| 147 | + PARAMS: { |
| 148 | + "step_mode": 1, |
| 149 | + "step_size": 22, |
| 150 | + "transition_time": 5, |
| 151 | + "color_temp_min_mireds": 153, |
| 152 | + "color_temp_max_mireds": 370, |
| 153 | + }, |
| 154 | + }, |
| 155 | + (SHORT_PRESS, SATURATION_UP): { |
| 156 | + COMMAND: COMMAND_STEP_SATURATION, |
| 157 | + CLUSTER_ID: 768, # Color.cluster_id |
| 158 | + ENDPOINT_ID: 1, |
| 159 | + PARAMS: {"step_mode": 1}, |
211 | 160 | }, |
212 | | - }, |
213 | | - (SHORT_PRESS, COLOR_DOWN): { |
214 | | - COMMAND: COMMAND_STEP_COLOR_TEMP, |
215 | | - CLUSTER_ID: 768, # Color.cluster_id |
216 | | - ENDPOINT_ID: 1, |
217 | | - PARAMS: { |
218 | | - "step_mode": 1, |
219 | | - "step_size": 22, |
220 | | - "transition_time": 5, |
221 | | - "color_temp_min_mireds": 153, |
222 | | - "color_temp_max_mireds": 370, |
| 161 | + (SHORT_PRESS, SATURATION_DOWN): { |
| 162 | + COMMAND: COMMAND_STEP_SATURATION, |
| 163 | + CLUSTER_ID: 768, # Color.cluster_id |
| 164 | + ENDPOINT_ID: 1, |
| 165 | + PARAMS: {"step_mode": 3}, |
223 | 166 | }, |
224 | | - }, |
225 | | - (SHORT_PRESS, SATURATION_UP): { |
226 | | - COMMAND: COMMAND_STEP_SATURATION, |
227 | | - CLUSTER_ID: 768, # Color.cluster_id |
228 | | - ENDPOINT_ID: 1, |
229 | | - PARAMS: {"step_mode": 1}, |
230 | | - }, |
231 | | - (SHORT_PRESS, SATURATION_DOWN): { |
232 | | - COMMAND: COMMAND_STEP_SATURATION, |
233 | | - CLUSTER_ID: 768, # Color.cluster_id |
234 | | - ENDPOINT_ID: 1, |
235 | | - PARAMS: {"step_mode": 3}, |
236 | | - }, |
237 | | - (SHORT_PRESS, HUE_LEFT): { |
238 | | - COMMAND: COMMAND_STEP_HUE, |
239 | | - CLUSTER_ID: 768, # Color.cluster_id |
240 | | - ENDPOINT_ID: 1, |
241 | | - PARAMS: {"step_mode": 3}, |
242 | | - }, |
243 | | - (SHORT_PRESS, HUE_RIGHT): { |
244 | | - COMMAND: COMMAND_STEP_HUE, |
245 | | - CLUSTER_ID: 768, # Color.cluster_id |
246 | | - ENDPOINT_ID: 1, |
247 | | - PARAMS: {"step_mode": 1}, |
248 | | - }, |
249 | | - (SHORT_PRESS, BUTTON_1): { |
250 | | - COMMAND: "view", |
251 | | - CLUSTER_ID: 5, # Scenes.cluster_id |
252 | | - ENDPOINT_ID: 1, |
253 | | - ARGS: [0, 0xA], |
254 | | - }, |
255 | | - (SHORT_PRESS, BUTTON_2): { |
256 | | - COMMAND: "view", |
257 | | - CLUSTER_ID: 5, # Scenes.cluster_id |
258 | | - ENDPOINT_ID: 1, |
259 | | - ARGS: [0, 0xB], |
260 | | - }, |
261 | | - (SHORT_PRESS, BUTTON_3): { |
262 | | - COMMAND: "view", |
263 | | - CLUSTER_ID: 5, # Scenes.cluster_id |
264 | | - ENDPOINT_ID: 1, |
265 | | - ARGS: [0, 0xC], |
266 | | - }, |
267 | | - (SHORT_PRESS, BUTTON_4): { |
268 | | - COMMAND: "view", |
269 | | - CLUSTER_ID: 5, # Scenes.cluster_id |
270 | | - ENDPOINT_ID: 1, |
271 | | - ARGS: [0, 0xD], |
272 | | - }, |
273 | | - } |
| 167 | + (SHORT_PRESS, HUE_LEFT): { |
| 168 | + COMMAND: COMMAND_STEP_HUE, |
| 169 | + CLUSTER_ID: 768, # Color.cluster_id |
| 170 | + ENDPOINT_ID: 1, |
| 171 | + PARAMS: {"step_mode": 3}, |
| 172 | + }, |
| 173 | + (SHORT_PRESS, HUE_RIGHT): { |
| 174 | + COMMAND: COMMAND_STEP_HUE, |
| 175 | + CLUSTER_ID: 768, # Color.cluster_id |
| 176 | + ENDPOINT_ID: 1, |
| 177 | + PARAMS: {"step_mode": 1}, |
| 178 | + }, |
| 179 | + (SHORT_PRESS, BUTTON_1): { |
| 180 | + COMMAND: "view", |
| 181 | + CLUSTER_ID: 5, # Scenes.cluster_id |
| 182 | + ENDPOINT_ID: 1, |
| 183 | + ARGS: [0, 0xA], |
| 184 | + }, |
| 185 | + (SHORT_PRESS, BUTTON_2): { |
| 186 | + COMMAND: "view", |
| 187 | + CLUSTER_ID: 5, # Scenes.cluster_id |
| 188 | + ENDPOINT_ID: 1, |
| 189 | + ARGS: [0, 0xB], |
| 190 | + }, |
| 191 | + (SHORT_PRESS, BUTTON_3): { |
| 192 | + COMMAND: "view", |
| 193 | + CLUSTER_ID: 5, # Scenes.cluster_id |
| 194 | + ENDPOINT_ID: 1, |
| 195 | + ARGS: [0, 0xC], |
| 196 | + }, |
| 197 | + (SHORT_PRESS, BUTTON_4): { |
| 198 | + COMMAND: "view", |
| 199 | + CLUSTER_ID: 5, # Scenes.cluster_id |
| 200 | + ENDPOINT_ID: 1, |
| 201 | + ARGS: [0, 0xD], |
| 202 | + }, |
| 203 | + } |
| 204 | + ) |
| 205 | + .add_to_registry() |
| 206 | +) |
0 commit comments