Skip to content

Commit 2070f3a

Browse files
Update Inovelli VZM35-SN fan switch for firmware 1.05 (#2937)
Co-authored-by: TheJulianJES <[email protected]>
1 parent 6b75c27 commit 2070f3a

File tree

2 files changed

+139
-1
lines changed

2 files changed

+139
-1
lines changed

zhaquirks/inovelli/VZM35SN.py

Lines changed: 131 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
Scenes,
1515
)
1616
from zigpy.zcl.clusters.homeautomation import Diagnostic
17+
from zigpy.zcl.clusters.hvac import Fan
1718

1819
from zhaquirks.const import (
1920
DEVICE_TYPE,
@@ -30,7 +31,7 @@
3031

3132

3233
class InovelliVZM35SN(CustomDevice):
33-
"""VZM35-SN Fan Switch"""
34+
"""VZM35-SN Fan Switch."""
3435

3536
signature = {
3637
MODELS_INFO: [("Inovelli", "VZM35-SN")],
@@ -123,3 +124,132 @@ class InovelliVZM35SN(CustomDevice):
123124
}
124125

125126
device_automation_triggers = INOVELLI_AUTOMATION_TRIGGERS
127+
128+
129+
class InovelliVZM35SNv5(CustomDevice):
130+
"""VZM35-SN Fan Switch with v1.05 firmware."""
131+
132+
signature = {
133+
MODELS_INFO: [("Inovelli", "VZM35-SN")],
134+
ENDPOINTS: {
135+
1: {
136+
PROFILE_ID: zha.PROFILE_ID,
137+
DEVICE_TYPE: DeviceType.DIMMABLE_LIGHT,
138+
INPUT_CLUSTERS: [
139+
Basic.cluster_id,
140+
Identify.cluster_id,
141+
Groups.cluster_id,
142+
Scenes.cluster_id,
143+
OnOff.cluster_id,
144+
LevelControl.cluster_id,
145+
Fan.cluster_id,
146+
Diagnostic.cluster_id,
147+
INOVELLI_VZM35SN_CLUSTER_ID,
148+
WWAH_CLUSTER_ID,
149+
],
150+
OUTPUT_CLUSTERS: [
151+
Ota.cluster_id,
152+
],
153+
},
154+
2: {
155+
PROFILE_ID: zha.PROFILE_ID,
156+
DEVICE_TYPE: DeviceType.DIMMER_SWITCH,
157+
INPUT_CLUSTERS: [
158+
Basic.cluster_id,
159+
Identify.cluster_id,
160+
Groups.cluster_id,
161+
Scenes.cluster_id,
162+
],
163+
OUTPUT_CLUSTERS: [
164+
Identify.cluster_id,
165+
OnOff.cluster_id,
166+
LevelControl.cluster_id,
167+
],
168+
},
169+
3: {
170+
PROFILE_ID: zha.PROFILE_ID,
171+
DEVICE_TYPE: DeviceType.DIMMER_SWITCH,
172+
INPUT_CLUSTERS: [
173+
Basic.cluster_id,
174+
Identify.cluster_id,
175+
Groups.cluster_id,
176+
Scenes.cluster_id,
177+
],
178+
OUTPUT_CLUSTERS: [
179+
Identify.cluster_id,
180+
OnOff.cluster_id,
181+
LevelControl.cluster_id,
182+
],
183+
},
184+
242: {
185+
PROFILE_ID: zgp.PROFILE_ID,
186+
DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,
187+
INPUT_CLUSTERS: [],
188+
OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],
189+
},
190+
},
191+
}
192+
193+
replacement = {
194+
ENDPOINTS: {
195+
1: {
196+
PROFILE_ID: zha.PROFILE_ID,
197+
DEVICE_TYPE: DeviceType.DIMMABLE_LIGHT,
198+
INPUT_CLUSTERS: [
199+
Basic.cluster_id,
200+
Identify.cluster_id,
201+
Groups.cluster_id,
202+
Scenes.cluster_id,
203+
OnOff.cluster_id,
204+
LevelControl.cluster_id,
205+
Fan.cluster_id,
206+
Diagnostic.cluster_id,
207+
Inovelli_VZM35SN_Cluster,
208+
WWAH_CLUSTER_ID,
209+
],
210+
OUTPUT_CLUSTERS: [
211+
Ota.cluster_id,
212+
],
213+
},
214+
2: {
215+
PROFILE_ID: zha.PROFILE_ID,
216+
DEVICE_TYPE: DeviceType.DIMMER_SWITCH,
217+
INPUT_CLUSTERS: [
218+
Basic.cluster_id,
219+
Identify.cluster_id,
220+
Groups.cluster_id,
221+
Scenes.cluster_id,
222+
],
223+
OUTPUT_CLUSTERS: [
224+
Identify.cluster_id,
225+
OnOff.cluster_id,
226+
LevelControl.cluster_id,
227+
Inovelli_VZM35SN_Cluster,
228+
],
229+
},
230+
3: {
231+
PROFILE_ID: zha.PROFILE_ID,
232+
DEVICE_TYPE: DeviceType.DIMMER_SWITCH,
233+
INPUT_CLUSTERS: [
234+
Basic.cluster_id,
235+
Identify.cluster_id,
236+
Groups.cluster_id,
237+
Scenes.cluster_id,
238+
],
239+
OUTPUT_CLUSTERS: [
240+
Identify.cluster_id,
241+
OnOff.cluster_id,
242+
LevelControl.cluster_id,
243+
Inovelli_VZM35SN_Cluster,
244+
],
245+
},
246+
242: {
247+
PROFILE_ID: zgp.PROFILE_ID,
248+
DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,
249+
INPUT_CLUSTERS: [],
250+
OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],
251+
},
252+
},
253+
}
254+
255+
device_automation_triggers = INOVELLI_AUTOMATION_TRIGGERS

zhaquirks/inovelli/__init__.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,14 @@ class Inovelli_VZM35SN_Cluster(Inovelli_VZM31SN_Cluster):
272272
0x001E: ("non_neutral_aux_med_gear_learn_value", t.uint8_t, True),
273273
0x001F: ("non_neutral_aux_low_gear_learn_value", t.uint8_t, True),
274274
0x0034: ("smart_fan_mode", t.Bool, True),
275+
0x0078: ("fan_single_tap_behavior", t.uint8_t, True),
276+
0x0079: ("fan_timer_display", t.Bool, True),
277+
0x0081: ("fan_breeze_mode", t.uint32_t, True),
278+
0x0082: ("fan_module_binding_control", t.uint8_t, True),
279+
0x0083: ("low_for_bound_control", t.uint8_t, True),
280+
0x0084: ("medium_for_bound_control", t.uint8_t, True),
281+
0x0085: ("high_for_bound_control", t.uint8_t, True),
282+
0x0086: ("led_color_for_bound_control", t.uint8_t, True),
275283
0x0107: ("smart_fan_led_display_levels", t.uint8_t, True),
276284
}
277285
)

0 commit comments

Comments
 (0)