Skip to content

Commit 13974b2

Browse files
InovelliUSAlgraf
authored andcommitted
Add Inovelli VZM31-SN firmware 2.17 support (zigpy#3076)
1 parent 136435b commit 13974b2

File tree

2 files changed

+126
-0
lines changed

2 files changed

+126
-0
lines changed

zhaquirks/inovelli/VZM31SN.py

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,125 @@
2929
INOVELLI_VZM31SN_CLUSTER_ID = 64561
3030
WWAH_CLUSTER_ID = 64599
3131

32+
class InovelliVZM31SNv13(CustomDevice):
33+
"""VZM31-SN 2 in 1 Switch/Dimmer Module Firmware version 2.17 and above."""
34+
35+
signature = {
36+
MODELS_INFO: [("Inovelli", "VZM31-SN")],
37+
ENDPOINTS: {
38+
1: {
39+
PROFILE_ID: zha.PROFILE_ID,
40+
DEVICE_TYPE: DeviceType.DIMMABLE_LIGHT,
41+
INPUT_CLUSTERS: [
42+
Basic.cluster_id,
43+
Identify.cluster_id,
44+
Groups.cluster_id,
45+
Scenes.cluster_id,
46+
OnOff.cluster_id,
47+
LevelControl.cluster_id,
48+
Metering.cluster_id,
49+
ElectricalMeasurement.cluster_id,
50+
Diagnostic.cluster_id,
51+
INOVELLI_VZM31SN_CLUSTER_ID,
52+
WWAH_CLUSTER_ID,
53+
],
54+
OUTPUT_CLUSTERS: [Ota.cluster_id],
55+
},
56+
2: {
57+
PROFILE_ID: zha.PROFILE_ID,
58+
DEVICE_TYPE: DeviceType.DIMMER_SWITCH,
59+
INPUT_CLUSTERS: [
60+
Basic.cluster_id,
61+
Identify.cluster_id,
62+
Groups.cluster_id,
63+
Scenes.cluster_id,
64+
],
65+
OUTPUT_CLUSTERS: [
66+
Identify.cluster_id,
67+
OnOff.cluster_id,
68+
LevelControl.cluster_id,
69+
INOVELLI_VZM31SN_CLUSTER_ID,
70+
],
71+
},
72+
3: {
73+
PROFILE_ID: zha.PROFILE_ID,
74+
DEVICE_TYPE: DeviceType.DIMMER_SWITCH,
75+
INPUT_CLUSTERS: [
76+
Basic.cluster_id,
77+
Identify.cluster_id,
78+
Groups.cluster_id,
79+
Scenes.cluster_id,
80+
],
81+
OUTPUT_CLUSTERS: [
82+
Identify.cluster_id,
83+
OnOff.cluster_id,
84+
LevelControl.cluster_id,
85+
INOVELLI_VZM31SN_CLUSTER_ID,
86+
],
87+
},
88+
242: {
89+
PROFILE_ID: zgp.PROFILE_ID,
90+
DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,
91+
INPUT_CLUSTERS: [],
92+
OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],
93+
},
94+
},
95+
}
96+
97+
replacement = {
98+
ENDPOINTS: {
99+
1: {
100+
PROFILE_ID: zha.PROFILE_ID,
101+
DEVICE_TYPE: DeviceType.DIMMABLE_LIGHT,
102+
INPUT_CLUSTERS: [
103+
Basic.cluster_id,
104+
Identify.cluster_id,
105+
Groups.cluster_id,
106+
Scenes.cluster_id,
107+
OnOff.cluster_id,
108+
LevelControl.cluster_id,
109+
Metering.cluster_id,
110+
ElectricalMeasurement.cluster_id,
111+
Diagnostic.cluster_id,
112+
InovelliVZM31SNCluster,
113+
WWAH_CLUSTER_ID,
114+
],
115+
OUTPUT_CLUSTERS: [
116+
Ota.cluster_id,
117+
],
118+
},
119+
2: {
120+
PROFILE_ID: zha.PROFILE_ID,
121+
DEVICE_TYPE: DeviceType.DIMMER_SWITCH,
122+
INPUT_CLUSTERS: [Basic.cluster_id, Identify.cluster_id],
123+
OUTPUT_CLUSTERS: [
124+
Identify.cluster_id,
125+
OnOff.cluster_id,
126+
LevelControl.cluster_id,
127+
InovelliVZM31SNCluster,
128+
],
129+
},
130+
3: {
131+
PROFILE_ID: zha.PROFILE_ID,
132+
DEVICE_TYPE: DeviceType.DIMMER_SWITCH,
133+
INPUT_CLUSTERS: [Basic.cluster_id, Identify.cluster_id],
134+
OUTPUT_CLUSTERS: [
135+
Identify.cluster_id,
136+
OnOff.cluster_id,
137+
LevelControl.cluster_id,
138+
InovelliVZM31SNCluster,
139+
],
140+
},
141+
242: {
142+
PROFILE_ID: zgp.PROFILE_ID,
143+
DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,
144+
INPUT_CLUSTERS: [],
145+
OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],
146+
},
147+
},
148+
}
149+
150+
device_automation_triggers = INOVELLI_AUTOMATION_TRIGGERS
32151

33152
class InovelliVZM31SNv12(CustomDevice):
34153
"""VZM31-SN 2 in 1 Switch/Dimmer Module Firmware version 2.08 and above."""

zhaquirks/inovelli/__init__.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,8 +254,15 @@ class InovelliVZM31SNCluster(InovelliCluster):
254254
0x0060: ("led_color_when_off", t.uint8_t, True),
255255
0x0062: ("led_intensity_when_off", t.uint8_t, True),
256256
0x0064: ("led_scaling_mode", t.Bool, True),
257+
0x0078: ("fan_single_tap_behavior", t.uint8_t, True),
258+
0x0079: ("fan_timer_display", t.Bool, True),
257259
0x007B: ("aux_switch_scenes", t.Bool, True),
258260
0x007D: ("binding_off_to_on_sync_level", t.Bool, True),
261+
0x0082: ("fan_module_binding_control", t.uint8_t, True),
262+
0x0083: ("low_for_bound_control", t.uint8_t, True),
263+
0x0084: ("medium_for_bound_control", t.uint8_t, True),
264+
0x0085: ("high_for_bound_control", t.uint8_t, True),
265+
0x0086: ("led_color_for_bound_control", t.uint8_t, True),
259266
0x0100: ("local_protection", t.Bool, True),
260267
0x0103: ("on_off_led_mode", t.Bool, True),
261268
0x0104: ("firmware_progress_led", t.Bool, True),

0 commit comments

Comments
 (0)