I am still having this issue and realized that in addition to the switch_mode described above, it also applies to the switch_type parameter (#22) for any of the switches that are set to 0x03, a.k.a. Single Pole Full Sine which gets reset to the default of Single Pole. (And perhaps to 0x01 and 0x02 as well, but I don’t have any switches configured with those settings at the moment.)
These seem to change back to their default values more frequently after a restart of Home Assistant. (Part of the reason here could be that the ZHA initialization sequence is reading these attributes when initializing instead of just getting a cached value. So it updates right after startup even though it may have changed sometime before & just never been reported back to the coordinator/ZHA/Home Assistant. Is this all suggesting a bug somewhere in the switch firmware?)
I enabled ZHA logging and found that my older switches are getting the v12 quirks due to not having the endpoint #3:
2025-03-30 16:03:30.106 DEBUG (MainThread) [zigpy.quirks.registry] Checking quirks for Inovelli VZM31-SN (8a:7f:12:72:ae:21:b2:13)
2025-03-30 16:03:30.106 DEBUG (MainThread) [zigpy.quirks.registry] Considering <class 'zhaquirks.inovelli.VZM31SN.InovelliVZM31SN'>
2025-03-30 16:03:30.106 DEBUG (MainThread) [zigpy.quirks] Fail because endpoint list mismatch: {1, 2} {1, 2, 242}
2025-03-30 16:03:30.106 DEBUG (MainThread) [zigpy.quirks.registry] Considering <class 'zhaquirks.inovelli.VZM31SN.InovelliVZM31SNv9'>
2025-03-30 16:03:30.106 DEBUG (MainThread) [zigpy.quirks] Fail because endpoint list mismatch: {1, 2} {1, 2, 242}
2025-03-30 16:03:30.106 DEBUG (MainThread) [zigpy.quirks.registry] Considering <class 'zhaquirks.inovelli.VZM31SN.InovelliVZM31SNv10'>
2025-03-30 16:03:30.107 DEBUG (MainThread) [zigpy.quirks] Fail because endpoint list mismatch: {1, 2} {1, 2, 242}
2025-03-30 16:03:30.107 DEBUG (MainThread) [zigpy.quirks.registry] Considering <class 'zhaquirks.inovelli.VZM31SN.InovelliVZM31SNv11'>
2025-03-30 16:03:30.108 DEBUG (MainThread) [zigpy.quirks] Fail because input cluster mismatch on at least one endpoint
2025-03-30 16:03:30.108 DEBUG (MainThread) [zigpy.quirks.registry] Considering <class 'zhaquirks.inovelli.VZM31SN.InovelliVZM31SNv12'>
2025-03-30 16:03:30.108 DEBUG (MainThread) [zigpy.quirks] Device matches filter signature - device ieee[8a:7f:12:72:ae:21:b2:13]: filter signature[{
'models_info': [('Inovelli', 'VZM31-SN')],
'endpoints': {
1: {
'profile_id': 260,
'device_type': <DeviceType.DIMMABLE_LIGHT: 257>,
'input_clusters': [0, 3, 4, 5, 6, 8, 1794, 2820, 2821, 64561, 64599],
'output_clusters': [25]
},
2: {
'profile_id': 260,
'device_type': <DeviceType.DIMMER_SWITCH: 260>,
'input_clusters': [0, 3, 4, 5],
'output_clusters': [3, 6, 8, 64561]},
242: {
'profile_id': 41440,
'device_type': <DeviceType.PROXY_BASIC: 97>,
'input_clusters': [],
'output_clusters': [33]
}
}
}]
2025-03-30 16:03:30.108 DEBUG (MainThread) [zigpy.quirks.registry] Found custom device replacement for 8a:7f:12:72:ae:21:b2:13: <class 'zhaquirks.inovelli.VZM31SN.InovelliVZM31SNv12'>
And my newer switches are getting v13 because they do define endpoint #3:
2025-03-30 16:03:30.230 DEBUG (MainThread) [zigpy.quirks.registry] Checking quirks for Inovelli VZM31-SN (8e:b1:33:f1:cf:c9:35:8a)
2025-03-30 16:03:30.230 DEBUG (MainThread) [zigpy.quirks.registry] Considering <class 'zhaquirks.inovelli.VZM31SN.InovelliVZM31SN'>
2025-03-30 16:03:30.230 DEBUG (MainThread) [zigpy.quirks] Fail because endpoint list mismatch: {1, 2} {242, 1, 2, 3}
2025-03-30 16:03:30.230 DEBUG (MainThread) [zigpy.quirks.registry] Considering <class 'zhaquirks.inovelli.VZM31SN.InovelliVZM31SNv9'>
2025-03-30 16:03:30.230 DEBUG (MainThread) [zigpy.quirks] Fail because endpoint list mismatch: {1, 2} {242, 1, 2, 3}
2025-03-30 16:03:30.230 DEBUG (MainThread) [zigpy.quirks.registry] Considering <class 'zhaquirks.inovelli.VZM31SN.InovelliVZM31SNv10'>
2025-03-30 16:03:30.231 DEBUG (MainThread) [zigpy.quirks] Fail because endpoint list mismatch: {1, 2} {242, 1, 2, 3}
2025-03-30 16:03:30.231 DEBUG (MainThread) [zigpy.quirks.registry] Considering <class 'zhaquirks.inovelli.VZM31SN.InovelliVZM31SNv11'>
2025-03-30 16:03:30.231 DEBUG (MainThread) [zigpy.quirks] Fail because endpoint list mismatch: {1, 2, 242} {242, 1, 2, 3}
2025-03-30 16:03:30.231 DEBUG (MainThread) [zigpy.quirks.registry] Considering <class 'zhaquirks.inovelli.VZM31SN.InovelliVZM31SNv12'>
2025-03-30 16:03:30.231 DEBUG (MainThread) [zigpy.quirks] Fail because endpoint list mismatch: {1, 2, 242} {242, 1, 2, 3}
2025-03-30 16:03:30.231 DEBUG (MainThread) [zigpy.quirks.registry] Considering <class 'zhaquirks.inovelli.VZM31SN.InovelliVZM31SNv13'>
2025-03-30 16:03:30.231 DEBUG (MainThread) [zigpy.quirks] Device matches filter signature - device ieee[8e:b1:33:f1:cf:c9:35:8a]: filter signature[{
'models_info': [('Inovelli', 'VZM31-SN')],
'endpoints': {
1: {
'profile_id': 260,
'device_type': <DeviceType.DIMMABLE_LIGHT: 257>,
'input_clusters': [0, 3, 4, 5, 6, 8, 1794, 2820, 2821, 64561, 64599],
'output_clusters': [25]
},
2: {
'profile_id': 260,
'device_type': <DeviceType.DIMMER_SWITCH: 260>,
'input_clusters': [0, 3, 4, 5],
'output_clusters': [3, 6, 8, 64561]},
3: {
'profile_id': 260,
'device_type': <DeviceType.DIMMER_SWITCH: 260>,
'input_clusters': [0, 3, 4, 5],
'output_clusters': [3, 6, 8, 64561]
},
242: {
'profile_id': 41440,
'device_type': <DeviceType.PROXY_BASIC: 97>,
'input_clusters': [],
'output_clusters': [33]
}
}
}]
2025-03-30 16:03:30.231 DEBUG (MainThread) [zigpy.quirks.registry] Found custom device replacement for 8e:b1:33:f1:cf:c9:35:8a: <class 'zhaquirks.inovelli.VZM31SN.InovelliVZM31SNv13'>
Both the old and new switches are on the same firmware version, v2.18 / 0x01020212. Shouldn’t the older switches also have the new endpoint #3 as well?