[RELEASE] Z-Wave Firmware Updater

The video used an OTA file which is a different format than a hex file.. hex files can contain large gaps where there should be filler 0xFF.. That's what that means.. it is filling memory any gaps in the firmware update file has with 0xFF which is what the standard calls for

3 Likes

Thanks for the explanation.

1 Like

anytime..

It been over an hour and it is still on the padding hex bytes? is there anything else I need to do or just wait??

2 Likes

Ok.. no.. it shouldn't take that long.. a minute tops.. Hit abort and start over.. I'm thinking it didn't get something right.. Maybe the hex download was missing something..

1 Like

Just tried this and got the same hang at padding hex bytes. Log shows:

2020-04-19 11:09:51.977 errorjava.lang.NullPointerException: Cannot invoke method and() on null object on line 461 (firmwareStore)

Wondering if maybe this is due to me trying to host on Dropbox and their share URLs can have "special" characters?

like "?dl=0" at the end...

1 Like

ahhh .. dropbox.. Special characters should not be an issue.. In fact my early testing all had httpget variables.. But it may be similar to the issue that another user had with google drive..

As I am not familiar with dropbox (as I don't use it) .. I'm not sure here..

What are you trying to update?

it acts like it downloaded. But I imagine given the output... it didn't. Zooz ZEN27. So an otz file.

Full log entries:

dev:14412020-04-19 11:15:08.596 errorjava.lang.NullPointerException: Cannot invoke method and() on null object on line 461 (firmwareStore)
dev:14412020-04-19 11:15:08.547 infofirmware total bytes: 0
dev:14412020-04-19 11:15:08.543 infoSorted all the bytes. cleaning up some memory...
dev:14412020-04-19 11:15:05.073 infoVersionReport- applicationVersion:2.1
dev:14412020-04-19 11:15:05.070 infoVersionReport- zWaveProtocolVersion:5.3
dev:14412020-04-19 11:15:04.670 infoFirmwareUpdateMd version:4

1 Like

Yep.. Right there.. It didn't receive the firmware image correctly..

I just searched on google.. and Looks like you need to change dl=0 to dl=1

How to force a Dropbox link to download

To force a browser to download the contents of a link rather than display it, you can use dl=1 as a query parameter in your URL. For example:

https://www.dropbox.com/s/a1b2c3d4ef5gh6/example.docx?dl=1

Note : The original shared link URL may contain query string parameters already (for example, dl=0). App developers should be sure to properly parse the URL and add or modify parameters as needed. The links may also redirect to *.dropbox.com/s/dl

2 Likes

Or raw=1

How to force render a file in a browser

Some browsers aren't configured to correctly preview files. While certain file types can be downloaded instead of opened, others—like HTML—are not supported.

To bypass the preview page and allow your browser to directly render your files, use raw=1 as a query parameter in your URL. Adding raw=1 to a URL will cause an HTTP redirect. If you're an app developer using such a URL in your own code, please make sure your app can follow redirects.

Note: Shared links don’t render HTML content in a web browser. If you created a website that directly displays HTML content from your Dropbox, it won’t render in the browser. The HTML content itself remains in your Dropbox and can be shared. The links may also redirect to *.dropbox.com/s/raw

1 Like

Thanks! I just threw the file up on my website and looks like it's working now. But yeah, that's good info for future reference! =)

1 Like

Seems to have hung at 3%... =/ Might need to try this again when there's minimal other z-wave traffic. I think I've had instances where motion sensors interrupt z-wave network traffic (querying all the codes from a z-wave lock would hang if anyone moved in a room). =/

Oh... just increased to 5%... How long should an update take? Looks like the update file is 90K...

infofirmware total bytes: 90393

1 Like

It is a pretty drastic change from device to device on how long.. It depends on many factors..

  • Distance from hub
  • Number of hops
  • Legacy z-wave repeaters in route
  • Z-Wave network activity - This is a big one as the firmware update process is designed to pause if it detects a good bit of traffic.. Because the firmware update packets are so big it tries to not totally monopolize the network time.
3 Likes

Fair. It's still progressing, and definitely pausing now and again. Up to 12%. lol. And it's about as far from the hub as possible. I don't have a recent map of the network... yeah, probably not a good number of hops.

1 Like

Boo. Finally failed at 13%. Probably just too much other traffic. =/

dev:14412020-04-19 11:35:30.131 debuglocked by:
dev:14412020-04-19 11:35:30.110 warnThe device was unable to receive the requested firmware data
dev:14412020-04-19 11:35:18.032 errorgroovy.lang.GroovyRuntimeException: Ambiguous method overloading for method java.lang.Integer#multiply.
Cannot resolve which method to invoke for [null] due to overlapping prototypes between:
[class java.lang.Character]
[class java.lang.Number] on line 148 (parse)
dev:14412020-04-19 11:35:06.033 errorgroovy.lang.GroovyRuntimeException: Ambiguous method overloading for method java.lang.Integer#multiply.
Cannot resolve which method to invoke for [null] due to overlapping prototypes between:
[class java.lang.Character]
[class java.lang.Number] on line 148 (parse)
dev:14412020-04-19 11:34:54.061 errorgroovy.lang.GroovyRuntimeException: Ambiguous method overloading for method java.lang.Integer#multiply.
Cannot resolve which method to invoke for [null] due to overlapping prototypes between:
[class java.lang.Character]
[class java.lang.Number] on line 148 (parse)
dev:14412020-04-19 11:34:42.111 errorgroovy.lang.GroovyRuntimeException: Ambiguous method overloading for method java.lang.Integer#multiply.
Cannot resolve which method to invoke for [null] due to overlapping prototypes between:
[class java.lang.Character]
[class java.lang.Number] on line 148 (parse)
dev:14412020-04-19 11:34:30.004 errorgroovy.lang.GroovyRuntimeException: Ambiguous method overloading for method java.lang.Integer#multiply.
Cannot resolve which method to invoke for [null] due to overlapping prototypes between:
[class java.lang.Character]
[class java.lang.Number] on line 148 (parse)
dev:14412020-04-19 11:34:23.932 errorgroovy.lang.GroovyRuntimeException: Ambiguous method overloading for method java.lang.Integer#multiply.
Cannot resolve which method to invoke for [null] due to overlapping prototypes between:
[class java.lang.Character]
[class java.lang.Number] on line 148 (parse)
dev:14412020-04-19 11:34:23.725 errorgroovy.lang.GroovyRuntimeException: Ambiguous method overloading for method java.lang.Integer#multiply.
Cannot resolve which method to invoke for [null] due to overlapping prototypes between:
[class java.lang.Character]
[class java.lang.Number] on line 148 (parse)
dev:14412020-04-19 11:34:22.118 errorgroovy.lang.GroovyRuntimeException: Ambiguous method overloading for method java.lang.Integer#multiply.
Cannot resolve which method to invoke for [null] due to overlapping prototypes between:
[class java.lang.Character]
[class java.lang.Number] on line 148 (parse)
dev:14412020-04-19 11:34:18.675 errorgroovy.lang.GroovyRuntimeException: Ambiguous method overloading for method java.lang.Integer#multiply.
Cannot resolve which method to invoke for [null] due to overlapping prototypes between:
[class java.lang.Character]
[class java.lang.Number] on line 148 (parse)
dev:14412020-04-19 11:34:18.407 errorgroovy.lang.GroovyRuntimeException: Ambiguous method overloading for method java.lang.Integer#multiply.
Cannot resolve which method to invoke for [null] due to overlapping prototypes between:
[class java.lang.Character]
[class java.lang.Number] on line 148 (parse)
dev:14412020-04-19 11:34:18.235 errorgroovy.lang.GroovyRuntimeException: Ambiguous method overloading for method java.lang.Integer#multiply.
Cannot resolve which method to invoke for [null] due to overlapping prototypes between:
[class java.lang.Character]
[class java.lang.Number] on line 148 (parse)
dev:14412020-04-19 11:34:18.145 errorgroovy.lang.GroovyRuntimeException: Ambiguous method overloading for method java.lang.Integer#multiply.
Cannot resolve which method to invoke for [null] due to overlapping prototypes between:
[class java.lang.Character]
[class java.lang.Number] on line 148 (parse)
dev:14412020-04-19 11:34:18.138 errorgroovy.lang.GroovyRuntimeException: Ambiguous method overloading for method java.lang.Integer#multiply.
Cannot resolve which method to invoke for [null] due to overlapping prototypes between:
[class java.lang.Character]
[class java.lang.Number] on line 148 (parse)
dev:14412020-04-19 11:34:06.033 errorgroovy.lang.GroovyRuntimeException: Ambiguous method overloading for method java.lang.Integer#multiply.
Cannot resolve which method to invoke for [null] due to overlapping prototypes between:
[class java.lang.Character]
[class java.lang.Number] on line 148 (parse)
dev:14412020-04-19 11:33:54.072 errorgroovy.lang.GroovyRuntimeException: Ambiguous method overloading for method java.lang.Integer#multiply.
Cannot resolve which method to invoke for [null] due to overlapping prototypes between:
[class java.lang.Character]
[class java.lang.Number] on line 148 (parse)
dev:14412020-04-19 11:33:44.720 errorgroovy.lang.GroovyRuntimeException: Ambiguous method overloading for method java.lang.Integer#multiply.
Cannot resolve which method to invoke for [null] due to overlapping prototypes between:
[class java.lang.Character]
[class java.lang.Number] on line 148 (parse)
dev:14412020-04-19 11:33:43.953 errorgroovy.lang.GroovyRuntimeException: Ambiguous method overloading for method java.lang.Integer#multiply.
Cannot resolve which method to invoke for [null] due to overlapping prototypes between:
[class java.lang.Character]
[class java.lang.Number] on line 148 (parse)
dev:14412020-04-19 11:33:42.224 errorgroovy.lang.GroovyRuntimeException: Ambiguous method overloading for method java.lang.Integer#multiply.
Cannot resolve which method to invoke for [null] due to overlapping prototypes between:
[class java.lang.Character]
[class java.lang.Number] on line 148 (parse)
dev:14412020-04-19 11:33:32.663 debuglocked by:
dev:14412020-04-19 11:33:32.642 warnERROR. Device expected an authentication event to enable firmware update
dev:14412020-04-19 11:21:19.234 infoOK. The device will initiate the firmware update of the target specified in the Firmware Update Meta Data Request Get Command
dev:14412020-04-19 11:21:16.191 infocalculating crc...
dev:14412020-04-19 11:21:10.161 infogot otz compressed image reading compression header
dev:14412020-04-19 11:21:10.158 infofirmware total bytes: 90393
dev:14412020-04-19 11:21:10.155 infoSorted all the bytes. cleaning up some memory...
dev:14412020-04-19 11:20:28.451 infoVersionReport- applicationVersion:2.1
dev:14412020-04-19 11:20:28.448 infoVersionReport- zWaveProtocolVersion:5.3
dev:14412020-04-19 11:20:28.082 infoFirmwareUpdateMd version:4

1 Like

I think I bricked a invelli red switch (gen 2). I started it last night and it got stuck at 26% and now the switch is unresponsive. Here is the log.

dev:1012020-04-19 08:09:46.024 am errorjava.lang.NullPointerException: Cannot invoke method split() on null object on line 427 (childOff)
dev:1012020-04-19 08:08:14.147 am debuglocked by: 
dev:1012020-04-19 08:05:39.027 am infocalculating crc...
dev:1012020-04-19 08:05:38.479 am infogot otz compressed image reading compression header
dev:1012020-04-19 08:05:38.476 am infofirmware total bytes: 97555
dev:1012020-04-19 08:05:38.473 am infoSorted all the bytes. cleaning up some memory...
dev:1012020-04-19 08:05:12.974 am infoVersionReport- applicationVersion:1.9
dev:1012020-04-19 08:05:12.966 am infoVersionReport- zWaveProtocolVersion:6.4
dev:1012020-04-19 08:05:11.923 am infoVersionReport- applicationVersion:1.9
dev:1012020-04-19 08:05:11.921 am infoVersionReport- zWaveProtocolVersion:6.4
dev:1012020-04-19 08:05:11.589 am infoVersionReport- applicationVersion:1.9
dev:1012020-04-19 08:05:11.573 am infoVersionReport- zWaveProtocolVersion:6.4
dev:1012020-04-19 08:05:11.550 am infoVersionReport- applicationVersion:1.9
dev:1012020-04-19 08:05:11.547 am infoVersionReport- zWaveProtocolVersion:6.4
dev:1012020-04-19 08:05:02.841 am infoFirmwareUpdateMd version:4
dev:1012020-04-19 08:04:58.150 am infoFirmwareUpdateMd version:4
dev:1012020-04-19 08:04:58.147 am infoFirmwareUpdateMd version:4
dev:1012020-04-19 08:04:41.517 am debuglocked by: 
dev:1012020-04-19 08:04:37.335 am debuglocked by: 
dev:1012020-04-18 11:20:40.413 pm infoOK. The device will initiate the firmware update of the target specified in the Firmware Update Meta Data Request Get Command
dev:1012020-04-18 11:20:34.499 pm infoOK. The device will initiate the firmware update of the target specified in the Firmware Update Meta Data Request Get Command
dev:1012020-04-18 11:20:33.911 pm infoOK. The device will initiate the firmware update of the target specified in the Firmware Update Meta Data Request Get Command
dev:1012020-04-18 11:20:26.197 pm infocalculating crc...
dev:1012020-04-18 11:20:25.896 pm infogot otz compressed image reading compression header
dev:1012020-04-18 11:20:25.893 pm infofirmware total bytes: 97555
dev:1012020-04-18 11:20:25.890 pm infoSorted all the bytes. cleaning up some memory...
dev:1012020-04-18 11:20:24.415 pm infocalculating crc...
dev:1012020-04-18 11:20:24.034 pm infogot otz compressed image reading compression header
dev:1012020-04-18 11:20:24.031 pm infofirmware total bytes: 97555
dev:1012020-04-18 11:20:24.028 pm infoSorted all the bytes. cleaning up some memory...
dev:1012020-04-18 11:20:21.922 pm errororg.apache.http.client.ClientProtocolException: null on line 374 (firmwareStore)
dev:1012020-04-18 11:20:20.952 pm infocalculating crc...
dev:1012020-04-18 11:20:20.186 pm infogot otz compressed image reading compression header
dev:1012020-04-18 11:20:20.180 pm infofirmware total bytes: 97555
dev:1012020-04-18 11:20:20.175 pm infoSorted all the bytes. cleaning up some memory...
dev:1012020-04-18 11:20:19.013 pm infocalculating crc...
dev:1012020-04-18 11:20:18.690 pm infocalculating crc...
dev:1012020-04-18 11:20:18.263 pm infogot otz compressed image reading compression header
dev:1012020-04-18 11:20:18.251 pm infofirmware total bytes: 97555
dev:1012020-04-18 11:20:18.247 pm infoSorted all the bytes. cleaning up some memory...
dev:1012020-04-18 11:20:17.248 pm infogot otz compressed image reading compression header
dev:1012020-04-18 11:20:17.245 pm infofirmware total bytes: 97555
dev:1012020-04-18 11:20:17.241 pm infoSorted all the bytes. cleaning up some memory...
dev:1012020-04-18 11:20:16.662 pm errororg.apache.http.client.ClientProtocolException: null on line 374 (firmwareStore)
dev:1012020-04-18 11:20:14.586 pm infocalculating crc...
dev:1012020-04-18 11:20:11.882 pm infogot otz compressed image reading compression header
dev:1012020-04-18 11:20:11.875 pm infofirmware total bytes: 97555
dev:1012020-04-18 11:20:11.869 pm infoSorted all the bytes. cleaning up some memory...
1 Like

That's a new one ..

ERROR. Device expected an authentication event to enable firmware update

Also this one is concerning:

groovy.lang.GroovyRuntimeException: Ambiguous method overloading for method java.lang.Integer#multiply.
Cannot resolve which method to invoke for [null] due to overlapping prototypes between:
[class java.lang.Character]
[class java.lang.Number] on line 148 (parse)

The device was unable to receive the requested firmware data

Give me a few minutes to digest this ...

1 Like

Wow.. Ok.. No you shouldn't have bricked it..

But it appears as though you had 2 processes running at the same time.. I have no idea how this happened.. did you rapidly double click on the UpdateFirmware button? ..

I have provisions to prevent this but if it happens too fast it may not catch it..

But when your device starts firmware updating it is in a different mode .. Since it didn't finish, rebooting the switch should make it work again.. Pull the air-gap tab and then re-insert it.

1 Like

But it appears as though you had 2 processes running at the same time.. I have no idea how this happened.. did you rapidly double click on the UpdateFirmware button? ..

Good question - I don't think so. But what I did do was press the get version report button - which took forever... so I decided to move ahead with the firmware update and pressed the update button.

I'm not sure what the air-gap tab is... let me google it. Thanks for the tip!

Once we get these kinks worked out, this is going to be such a great tool - thanks for working on it!

2 Likes