Skip to content

Commit 0df6f2b

Browse files
authored
Add Inovelli VZM36 support and rework manufacturer clusters (#2960)
1 parent 6cddacc commit 0df6f2b

File tree

4 files changed

+344
-99
lines changed

4 files changed

+344
-99
lines changed

zhaquirks/inovelli/VZM31SN.py

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
OUTPUT_CLUSTERS,
2525
PROFILE_ID,
2626
)
27-
from zhaquirks.inovelli import INOVELLI_AUTOMATION_TRIGGERS, Inovelli_VZM31SN_Cluster
27+
from zhaquirks.inovelli import INOVELLI_AUTOMATION_TRIGGERS, InovelliVZM31SNCluster
2828

2929
INOVELLI_VZM31SN_CLUSTER_ID = 64561
3030
WWAH_CLUSTER_ID = 64599
@@ -94,7 +94,7 @@ class InovelliVZM31SNv12(CustomDevice):
9494
Metering.cluster_id,
9595
ElectricalMeasurement.cluster_id,
9696
Diagnostic.cluster_id,
97-
Inovelli_VZM31SN_Cluster,
97+
InovelliVZM31SNCluster,
9898
WWAH_CLUSTER_ID,
9999
],
100100
OUTPUT_CLUSTERS: [
@@ -109,7 +109,7 @@ class InovelliVZM31SNv12(CustomDevice):
109109
Identify.cluster_id,
110110
OnOff.cluster_id,
111111
LevelControl.cluster_id,
112-
Inovelli_VZM31SN_Cluster,
112+
InovelliVZM31SNCluster,
113113
],
114114
},
115115
242: {
@@ -183,15 +183,15 @@ class InovelliVZM31SNv11(CustomDevice):
183183
Metering.cluster_id,
184184
ElectricalMeasurement.cluster_id,
185185
Diagnostic.cluster_id,
186-
Inovelli_VZM31SN_Cluster,
186+
InovelliVZM31SNCluster,
187187
WWAH_CLUSTER_ID,
188188
],
189189
OUTPUT_CLUSTERS: [
190190
Identify.cluster_id,
191191
OnOff.cluster_id,
192192
LevelControl.cluster_id,
193193
Ota.cluster_id,
194-
Inovelli_VZM31SN_Cluster,
194+
InovelliVZM31SNCluster,
195195
],
196196
},
197197
2: {
@@ -202,7 +202,7 @@ class InovelliVZM31SNv11(CustomDevice):
202202
Identify.cluster_id,
203203
OnOff.cluster_id,
204204
LevelControl.cluster_id,
205-
Inovelli_VZM31SN_Cluster,
205+
InovelliVZM31SNCluster,
206206
],
207207
},
208208
242: {
@@ -270,15 +270,15 @@ class InovelliVZM31SNv10(CustomDevice):
270270
Metering.cluster_id,
271271
ElectricalMeasurement.cluster_id,
272272
Diagnostic.cluster_id,
273-
Inovelli_VZM31SN_Cluster,
273+
InovelliVZM31SNCluster,
274274
WWAH_CLUSTER_ID,
275275
],
276276
OUTPUT_CLUSTERS: [
277277
Identify.cluster_id,
278278
OnOff.cluster_id,
279279
LevelControl.cluster_id,
280280
Ota.cluster_id,
281-
Inovelli_VZM31SN_Cluster,
281+
InovelliVZM31SNCluster,
282282
],
283283
},
284284
2: {
@@ -289,7 +289,7 @@ class InovelliVZM31SNv10(CustomDevice):
289289
Identify.cluster_id,
290290
OnOff.cluster_id,
291291
LevelControl.cluster_id,
292-
Inovelli_VZM31SN_Cluster,
292+
InovelliVZM31SNCluster,
293293
],
294294
},
295295
},
@@ -351,15 +351,15 @@ class InovelliVZM31SNv9(CustomDevice):
351351
Metering.cluster_id,
352352
ElectricalMeasurement.cluster_id,
353353
Diagnostic.cluster_id,
354-
Inovelli_VZM31SN_Cluster,
354+
InovelliVZM31SNCluster,
355355
WWAH_CLUSTER_ID,
356356
],
357357
OUTPUT_CLUSTERS: [
358358
Identify.cluster_id,
359359
OnOff.cluster_id,
360360
LevelControl.cluster_id,
361361
Ota.cluster_id,
362-
Inovelli_VZM31SN_Cluster,
362+
InovelliVZM31SNCluster,
363363
],
364364
},
365365
2: {
@@ -370,7 +370,7 @@ class InovelliVZM31SNv9(CustomDevice):
370370
Identify.cluster_id,
371371
OnOff.cluster_id,
372372
LevelControl.cluster_id,
373-
Inovelli_VZM31SN_Cluster,
373+
InovelliVZM31SNCluster,
374374
],
375375
},
376376
},
@@ -430,14 +430,14 @@ class InovelliVZM31SN(CustomDevice):
430430
Metering.cluster_id,
431431
ElectricalMeasurement.cluster_id,
432432
Diagnostic.cluster_id,
433-
Inovelli_VZM31SN_Cluster,
433+
InovelliVZM31SNCluster,
434434
],
435435
OUTPUT_CLUSTERS: [
436436
Identify.cluster_id,
437437
OnOff.cluster_id,
438438
LevelControl.cluster_id,
439439
Ota.cluster_id,
440-
Inovelli_VZM31SN_Cluster,
440+
InovelliVZM31SNCluster,
441441
],
442442
},
443443
2: {
@@ -448,7 +448,7 @@ class InovelliVZM31SN(CustomDevice):
448448
Identify.cluster_id,
449449
OnOff.cluster_id,
450450
LevelControl.cluster_id,
451-
Inovelli_VZM31SN_Cluster,
451+
InovelliVZM31SNCluster,
452452
],
453453
},
454454
},

zhaquirks/inovelli/VZM35SN.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
OUTPUT_CLUSTERS,
2525
PROFILE_ID,
2626
)
27-
from zhaquirks.inovelli import INOVELLI_AUTOMATION_TRIGGERS, Inovelli_VZM35SN_Cluster
27+
from zhaquirks.inovelli import INOVELLI_AUTOMATION_TRIGGERS, InovelliVZM35SNCluster
2828

2929
INOVELLI_VZM35SN_CLUSTER_ID = 64561
3030
WWAH_CLUSTER_ID = 64599
@@ -91,7 +91,7 @@ class InovelliVZM35SN(CustomDevice):
9191
OnOff.cluster_id,
9292
LevelControl.cluster_id,
9393
Diagnostic.cluster_id,
94-
Inovelli_VZM35SN_Cluster,
94+
InovelliVZM35SNCluster,
9595
WWAH_CLUSTER_ID,
9696
],
9797
OUTPUT_CLUSTERS: [
@@ -111,7 +111,7 @@ class InovelliVZM35SN(CustomDevice):
111111
Identify.cluster_id,
112112
OnOff.cluster_id,
113113
LevelControl.cluster_id,
114-
Inovelli_VZM35SN_Cluster,
114+
InovelliVZM35SNCluster,
115115
],
116116
},
117117
242: {
@@ -204,7 +204,7 @@ class InovelliVZM35SNv5(CustomDevice):
204204
LevelControl.cluster_id,
205205
Fan.cluster_id,
206206
Diagnostic.cluster_id,
207-
Inovelli_VZM35SN_Cluster,
207+
InovelliVZM35SNCluster,
208208
WWAH_CLUSTER_ID,
209209
],
210210
OUTPUT_CLUSTERS: [
@@ -224,7 +224,7 @@ class InovelliVZM35SNv5(CustomDevice):
224224
Identify.cluster_id,
225225
OnOff.cluster_id,
226226
LevelControl.cluster_id,
227-
Inovelli_VZM35SN_Cluster,
227+
InovelliVZM35SNCluster,
228228
],
229229
},
230230
3: {
@@ -240,7 +240,7 @@ class InovelliVZM35SNv5(CustomDevice):
240240
Identify.cluster_id,
241241
OnOff.cluster_id,
242242
LevelControl.cluster_id,
243-
Inovelli_VZM35SN_Cluster,
243+
InovelliVZM35SNCluster,
244244
],
245245
},
246246
242: {

zhaquirks/inovelli/VZM36.py

Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
"""VZM36 Canopy Module."""
2+
3+
from zigpy.profiles import zgp, zha
4+
from zigpy.profiles.zha import DeviceType
5+
from zigpy.quirks import CustomDevice
6+
from zigpy.zcl.clusters.general import (
7+
Basic,
8+
GreenPowerProxy,
9+
Groups,
10+
Identify,
11+
LevelControl,
12+
OnOff,
13+
Ota,
14+
Scenes,
15+
)
16+
from zigpy.zcl.clusters.homeautomation import Diagnostic
17+
from zigpy.zcl.clusters.hvac import Fan
18+
from zigpy.zcl.clusters.lightlink import LightLink
19+
20+
from zhaquirks.const import (
21+
DEVICE_TYPE,
22+
ENDPOINTS,
23+
INPUT_CLUSTERS,
24+
MODELS_INFO,
25+
OUTPUT_CLUSTERS,
26+
PROFILE_ID,
27+
)
28+
from zhaquirks.inovelli import (
29+
INOVELLI_AUTOMATION_TRIGGERS,
30+
InovelliVZM36FanCluster,
31+
InovelliVZM36LightCluster,
32+
)
33+
34+
INOVELLI_VZM36_CLUSTER_ID = 64561
35+
WWAH_CLUSTER_ID = 64599
36+
37+
38+
class InovelliVZM36(CustomDevice):
39+
"""VZM36 Canopy Module"""
40+
41+
signature = {
42+
MODELS_INFO: [("Inovelli", "VZM36")],
43+
ENDPOINTS: {
44+
1: {
45+
PROFILE_ID: zha.PROFILE_ID,
46+
DEVICE_TYPE: DeviceType.DIMMABLE_LIGHT,
47+
INPUT_CLUSTERS: [
48+
Basic.cluster_id,
49+
Identify.cluster_id,
50+
Groups.cluster_id,
51+
Scenes.cluster_id,
52+
OnOff.cluster_id,
53+
LevelControl.cluster_id,
54+
Diagnostic.cluster_id,
55+
LightLink.cluster_id,
56+
INOVELLI_VZM36_CLUSTER_ID,
57+
WWAH_CLUSTER_ID,
58+
],
59+
OUTPUT_CLUSTERS: [
60+
Ota.cluster_id,
61+
],
62+
},
63+
2: {
64+
PROFILE_ID: zha.PROFILE_ID,
65+
DEVICE_TYPE: DeviceType.DIMMABLE_LIGHT,
66+
INPUT_CLUSTERS: [
67+
Basic.cluster_id,
68+
Identify.cluster_id,
69+
Groups.cluster_id,
70+
Scenes.cluster_id,
71+
OnOff.cluster_id,
72+
LevelControl.cluster_id,
73+
Fan.cluster_id,
74+
Diagnostic.cluster_id,
75+
LightLink.cluster_id,
76+
INOVELLI_VZM36_CLUSTER_ID,
77+
],
78+
OUTPUT_CLUSTERS: [
79+
Ota.cluster_id,
80+
],
81+
},
82+
242: {
83+
PROFILE_ID: zgp.PROFILE_ID,
84+
DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,
85+
INPUT_CLUSTERS: [],
86+
OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],
87+
},
88+
},
89+
}
90+
91+
replacement = {
92+
ENDPOINTS: {
93+
1: {
94+
PROFILE_ID: zha.PROFILE_ID,
95+
DEVICE_TYPE: DeviceType.DIMMABLE_LIGHT,
96+
INPUT_CLUSTERS: [
97+
Basic.cluster_id,
98+
Identify.cluster_id,
99+
Groups.cluster_id,
100+
Scenes.cluster_id,
101+
OnOff.cluster_id,
102+
LevelControl.cluster_id,
103+
Diagnostic.cluster_id,
104+
LightLink.cluster_id,
105+
InovelliVZM36LightCluster,
106+
WWAH_CLUSTER_ID,
107+
],
108+
OUTPUT_CLUSTERS: [
109+
Ota.cluster_id,
110+
],
111+
},
112+
2: {
113+
PROFILE_ID: zha.PROFILE_ID,
114+
DEVICE_TYPE: DeviceType.DIMMABLE_LIGHT,
115+
INPUT_CLUSTERS: [
116+
Basic.cluster_id,
117+
Identify.cluster_id,
118+
Groups.cluster_id,
119+
Scenes.cluster_id,
120+
OnOff.cluster_id,
121+
LevelControl.cluster_id,
122+
Fan.cluster_id,
123+
Diagnostic.cluster_id,
124+
LightLink.cluster_id,
125+
InovelliVZM36FanCluster,
126+
],
127+
OUTPUT_CLUSTERS: [
128+
Ota.cluster_id,
129+
],
130+
},
131+
242: {
132+
PROFILE_ID: zgp.PROFILE_ID,
133+
DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,
134+
INPUT_CLUSTERS: [],
135+
OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],
136+
},
137+
},
138+
}
139+
140+
device_automation_triggers = INOVELLI_AUTOMATION_TRIGGERS

0 commit comments

Comments
 (0)