OK, so I was able to get this to work.
!!! THIS IS ADVANCED, AND YOU CAN BREAK YOUR ZHA FUNCTIONALITY IF YOU DON’T KNOW WHAT YOU’RE DOING; ONLY ATTEMPT THE FOLLOWING IF YOU UNDERSTAND WHAT THIS IS DOING, HOW TO UNDO IT, AND THAT LATER HA INSTALLS WILL OVERWRITE THIS ON ITS OWN - WAITING FOR OFFICIAL ZHA UPDATE IS PREFERRED !!!
OK, disclaimer out of the way… if you add the following patch to zigpy (/usr/local/lib/python3.12/site-packages/zigpy/ota/provider.py
), it’ll find the latest firmware (only the line starting with fw_lst
, this is in the Inovelli::refresh_firmware_list(...)
func):
self._cache.clear()
fw_lst['VZM31-SN'].append({"version": "16908815","channel": "beta","firmware": "https://github.com/InovelliUSA/Firmware/raw/main/Blue-Series/Zigbee/VZM31-SN-2-1-Switch/Production/2.15/VZM31-SN_2.15-Production.ota","manufacturer_id": 4655,"image_type": 257})
for _model, firmwares in fw_lst.items():
This injects the 2.15 firmware JSON into the ZHA upgrade checker, so it’ll find it once you trigger the upgrade. I then restarted HA and manually triggered the firmware upgrade on the device (I used ZHA Toolkit
). The switch found the firmware and flashed successfully (the ZHA updater UI actually worked fine at this point).
The better short-term fix would be for Inovelli to update the JSON at https://files.inovelli.com/firmware/firmware-zha.json to just include the 2.15 firmware (all this patch does is add that into the payload from that URL). Medium/longer term fix will be for ZHA to update (like chack mentioned) to hopefully fix manual_ota updates via the zigpy_ota directory again.
Anyway, if someone NEEDS to upgrade their switches meanwhile, you should be able to do the above… but avoid unless you know what you’re doing.