[RELEASE] Z-Wave Firmware Updater

@bcopeland knows how to extract the drivers from the Aeotec executable.

@Root @dJOS If you have the .exe of the firmware you need you can follow this post to extract the .hex.

7 Likes

Possible to find via the Wayback Machine?

1 Like

Thank you for that, I went looking for this but had never found the detailed version you linked to.

4 Likes

One of the firmware files I found by viewing an older commit at GitHub and compared it to what I extracted using the posted guide, verifying what I extracted matched. While on macOS I was having more difficulty ascertaining equivalent steps. I ultimately found success by just using a computer with Windows 10 and HxD Hex Editor. At some point I'd like to go through a few different hex editors on macOS to find which may offer an identical export option as it was the HxD export options I was having a harder time finding direct equivalents for via macOS counterparts.

2 Likes

Looking for some help with a Leviton DZ6HD. I've read through this thread and I'm not sure if I'm missing something but here's where I'm stuck.

Having turned on debug mode, and using the RAW github url for the 1.20 firmware version this is what I get in the logs:

dev:12022-05-14 11:53:53.996 am infoVersionReport- applicationVersion:0.7
dev:12022-05-14 11:53:53.988 am infoVersionReport- zWaveProtocolVersion:3.52
dev:12022-05-14 11:53:53.958 am debugparse:zw device: 02, command: 8612, payload: 03 03 34 00 07 , isMulticast: false
dev:12022-05-14 11:53:53.870 am infoFirmwareUpdateMd version:0
dev:12022-05-14 11:53:53.731 am debugparse:zw device: 02, command: 8614, payload: 7A 00 , isMulticast: false

The Application downloads the firmware and then just reports

Please wake up your sleep device

This isn't a sleepy device and I'm not seeing any error messages. My Hub is a C5 and the device is reporting firmware version 0.7 which seems pretty old if that's even accurate.

I'm not sure where to proceed from here. Without any errors. I've tried air gap the switch right before the update or during the firmware download with no change to the results.

Anyone have recommended next steps? Do I need to look at either a C7 device or a USB stick? Is it possible this switch is to old to update at all?

You may want a usb stick and the silabs simplicity studio. Run exclude on hubitat for the switch, Pair the switch to the stick then update the firmware to that and then exclude from the stick and re pair to hubitat. I have found that is the easiest solution and it goes much faster.

1 Like

Thanks for the Dropbox hint! I was struggling big time with finding a solution. My Zooz ZEN17 Relay Switch firmware file was available online only within a .zip file, which would cause potential bricking issues if I pointed the Z-wave Firmware Updater towards the zip file URL. The updater requires a URL webserver. Pointing to a local file on a PC isn't a solution since the updater was looking for a webserver URL. Trying to setup a local webserver was painful and unsuccessful.

I had to download the zip file and extract and store the .gbl file on a webserver somewhere to allow the Z-Wave Firmware Updater to download it. I discovered I needed Bryan's second version of the Z-Wave Firmware Updater which is compatible with my C5 hub and the gbl firmware file.

I changed the copied Dropbox link from dl=0 to dl=1. The Dropbox solution had me up and running in less than 45 minutes!!!!

If you have a C7, there's a built-in firmware updater app that will let you store and push the firmware files locally on the hub...for future reference.

1 Like

Besides the above, all models of hub also have Settings > File Manager, which you can use for this purpose. You'll want to add port 8080 to the path instead of the default/port 80 to avoid conflicts (e.g., http://YourHubIP:8080/filePath rather than just http://YourHubIP/filePathwhen feeding the path to the updater driver).

3 Likes

Thanks for pointing out File Manager can be used. I gave this a try and it is the way to go. Very easy to use. To put a bow on this solution for files uploaded into File Manager, this is the format one would use in the Z-wave Firmware Updater: http://YourHubIP:8080/local/FileNameThatYouUploadedIntoFileManager. In addition to "8080", "local" is key here. Also, firmwareTarget field is "0". For example: http://192.168.1.7:8080/local/zen17-ver-1.20.gbl

Yes, this is what I meant with filePath. :smiley: File Manager can give you the URL (right-click, long-tap, or whatever you have to do in your OS/browser to get it) -- no need to put it together yourself. Some devices have multiple firmware targets, and the vendor will normally provide documentation for this. The Inovelli LZW31-SN and LZW30-SN (Red Series switches and dimmers) are the only popular devices I can think of that do, but there may be others. Otherwise, most have a single target, 0, as you discovered.

Glad you got it working!

Need help updating Zooz Zen77 with Z-Wave Firmware Updater

I'm sure I'm missing something simple or not understanding something, because I cannot seem to update my Zen77.

My setup:

I contacted Zooz support and got access to the update files and downloaded ZEN77_V02R10P01.zip and extracted it to ZEN77_MOSFET_V02R10P01_slave_enhanced_232_US_027A7000A007_20220727.gbl

I was a bit confused if the updater would work with the .gbl, because in some places I thought it just said OTZ or HEX but then later I thought I saw it could do GBL.. but I'm unsure.

Anyway, I uploaded the .gbl file to the Device Firmware Updater app (Apps -> Add Built In App -> Device Firmware Updater -> Firmware File Manager -> Choose -> Upload).
I then copied the link for the .gbl file I uploaded.

I then went to my Zen77 device and change it's Type to be User -> "Device Firmware Updater" and clicked Save Device.
The page refreshed showing the device with the new commands: abortProcess, clearLock , getVersionReport, and updateFirmware.
I click the "Get Version Report" button and the logs show:

VersionReport- applicationVersion:2.0
infoVersionReport- zWaveProtocolVersion:7.13

So I paste the URL from the link I copied earlier into the firmwareUrl section and add ":8080" after the IP address and click the "Update Firmware" button.

The logs show this:

error java.lang.NullPointerException: Cannot invoke method and() on null object on line 461 (method firmwareStore)
info firmware total bytes: 0
info Sorted all the bytes. cleaning up some memory...
debug packing all the bytes...
debug firmwareMdReport: checksum 0 firmwareId: 40967 manufacturerId: 634 maxFragmentSize: 40 firmwareTargets: 0
debug FirmwareMDReport: FirmwareMdReport(manufacturerId:634, firmwareId:40967, checksum:0, firmwareUpgradable:false, numberOfTargets:0, maxFragmentSize:40, firmwareIds:[])
debug parse:zw device: 29, command: 7A02, payload: 02 7A A0 07 00 00 FF 00 00 28 01 , isMulticast: false
info VersionReport- applicationVersion:2.0
info VersionReport- zWaveProtocolVersion:7.13
debug parse:zw device: 29, command: 8612, payload: 03 07 0D 02 00 01 00 , isMulticast: false
info FirmwareUpdateMd version:5
debug parse:zw device: 29, command: 8614, payload: 7A 05 , isMulticast: false
debug locked by: 

The device page shows this:


Current States

    assocDNI2 : none
    assocDNI3 : none
    assocDNI4 : none
    currentFirmwareVersion : 2.0
    firmwareFragmentSize : 40
    firmwareUpdateProgress : Padding hex bytes...
    level : 0
    lockedBy : None
    numberOfButtons : 10
    released : 3
    switch : off
    syncStatus : Synced
    firmwareUploadPercent : null
    firmwareTarget : null
    manufacturerId : null

It seems to get stuck on that Null Pointer.... So I'm thinking maybe GBLs don't work with this or I completely missed something else...

Any help would be greatly appreciated.

Thanks so much!

For a GBL file, try the binary firmware updater instead.

https://raw.githubusercontent.com/djdizzyd/hubitat/master/Drivers/Z-Wave-Firmware-Updater/zwaveBinaryUpdater.groovy

1 Like

Thank you @aaiyar, I'll give it a try.

2 Likes

That was what I needed. Thanks so much!

1 Like

Hi - I have a couple questions about zwave firmware updates, using a C7 hub. First - there are two apps for this now -- this one and the Device Firmware Updater. It's not clear to me if either is obviously better or why to choose one or the other.

I'm also wondering whether it's always necessary to exclude/re-include the device after the firmware update and recreate any apps, button controllers ,etc.
This can be a LOT of work - so curious whether it's every possible to update firmware without going through that process.

Thanks,

I don't know that either is better than the other, but I've personally had better success with the built-in firmware updater app.

Not all devices will require a re-inclusion...just depends on how the manufacturer implemented the firmware upgrade process. Some devices factory reset during the update...some don't. What's worked for me is:

  1. Manually manipulate the device (e.g., turn switch on/off)
  2. See if the status updates in Hubitat and/or if I can manipulate the device from the device page.
  3. If not, then I'll go to the Z-Wave details page, find the device, and click on refresh (if available) until I get the "replace" option. If the replace option doesn't appear, I factory reset the device, and try again.
  4. Use the replace option to include the device again. The replace options keeps everything intact.

I've updated over a dozen or so Zooz devices (varying models) following this process with pretty good success. Nothing else that I own has a firmware update available that's worthwhile (looking at you Jasco).

5 Likes

Thanks for this - very helpful!

2 Likes

So, you could update a Zooz device with a GBL using that 2-year-old version of the binary updater? I ask because I need to update a Zooz Zen 17 via my C5, and support had this line in their email: "gbl files are not supported by HE C5 or older"