Home Assistant ZWave JS and Firmware Update

I just migrated from ST to HA and am using Zwave JS. I have a number of Inovelli switches that I have been wanting to upgrade the firmware on and was wondering how I would go about this.

I dont see a way to update firmware with Zwave JS. Am i missing it somewhere? If not, how would i go about doing so?

Thanks in advance!!

You need to use ZwaveJS2MQTT to accomplish this. The good news is that if you disable MQTT and enable socket connection on port 3000, HA will behave the exact same!

Look up zwavejs2mqtt firmware updating, and you’ll be on your way!

Thanks so much for the reply!

Is MQTT enabled as part of the zwave js? Or is this if i have MQTT in my HA instance separate from zwave JS?

Separate add on. “zwavejs2qmtt”

Edit: disable the zwave-js addon and enable zwavejs2mqtt


So i may be slightly confused.

Does this replace the native zwavejs integration that i currently have setup?
Do i have to completely disable the zwave js integration thats in Home Assistant now?
Do i do that in the supervisor?

Are there any negatives to this? Is the zwave mqtt setup kept up to date like the official integration is that i installed from the supervisor?

Yes, this replaces the native zwavejs integration. It is slightly behind but it regularly updated (currently a couple weeks behind) l. The big advantage is the front-end.

Side note, you can stop zwavejs, start zwavejs2mqtt, setup associations, stop zwavejs2mqtt, and restart zwavejs if you really want.

Thanks for the info!

I wanted to keep zwave js as the main platform since its kept up to date more often so i disabled the add on, added the zwave2mqtt add on, updated the firmware, and flipped back.

Unfortunately when i did this, all the devices were showing up as new devices :frowning:

It was late, so i reverted back to a backup i took before the implementation of zwave2mqtt and all my devices came back where they were before i played with anything.

Not sure if this is expected or if i did something wrong. I have zooz devices id like to update (waiting on firmware files) but dont want to break the setup again.

I didn’t expect the devices to show up as new.

Wait, no. It doesn’t replace the INTEGRATION, it replaces the SERVER. No need to delete the integration, just stop the zwaveJS add-on and start the zwaveJS2mqtt add-on.

HA uses the same integration, the server using websockets on 3000 is different between the two. But since the USB stick holds all of the device info, it should equally pass on the node information just as the zwavejs server add-on does.

1 Like

This is expected if you replaced the integration (I think stu might be confused on this one).

  1. Stop the zwaveJS add-on, devices should go unavailable.
  2. Copy the zwave key from the zwaveJS integration configuration.
  3. Add the zwaveJS2mqtt add-on.
  4. Enable the websockets server on 3000 (in config tab, not UI).
  5. Start zjs2m.
  6. In the ZJS2M UI, disable MQTT, and add the key into your settings. It should connect to the stick and get all of the network information. Anything it doesn’t recognize we can deal with later.
  7. Go back to HA and confirm all of the devices are now showing their proper state.

Hopefully that helps.


Doh. Yes the server not the integration. At least I screenshot the right thing.

1 Like


I went to supervisor\add ons and stopped zwavejs and started mqtt. I enabled 3000 on the configuration tab, added the key (i found the settings in the nodejs integration configuration - that had me stumped for a bit lol).

When i went to the zwave2mqtt i did see all the devices show up but they were all generic names and locations vs what was in zwavejs. I think that is where it may have gone sideways… and possibly something i did incorrectly. Not sure :frowning:

The restore worked fine other than blowing up my smartthings integration. Just had to remove that and re-add it with a api key and the devices all came back with the same names etc.

The names you gave everything in zwaveJS wouldn’t transfer to zwaveJSMQTT unless you copied them somehow. Basically, both are docker containers so they both setup their own configurations. I’m not sure how, but I think you could just copy the zwave config files over to the other container. I only use zwaveJSMQTT because I wanted the interface that didn’t exist at all in zwaveJS when I started using the zwaveJS integration.

But then, I run HA core as a docker container on unRAID. I’m not a fan of using any of the HA OS versions because that just adds the complexity of another OS layer that can break and which I don’t need.

1 Like

That makes complete sense now.

I am purely a windows guy so this linux stuff is a new world for me. That makes the HA OS a perfect fit haha. Im hoping that zwavejs will just add firmware to it at some point. I will say that parts of that zwave2mqtt interface were really nice.

Thanks for the info!

ZwaveJS2MQTT and HA see the same entity, but they can be called different things between the two as they are only used for their own software. The only thing they SHARE is node id and states/controls.

So essentially you will have to duplicate names/areas in MQTT if you want it to be easier. But you should be able to find the node id in HA, then update the firmware via ZJS2MQTT firmware updater.

For anyone reading this in 2022, if you have Z-Wave JS to MQTT installed, and want to know how to easily update your switches:

  • Open the J-Wave JS to MQTT interface in Home Assistant (if you have just the J-Wave JS addon installed, you can uninstall and install the MQTT version, which provides the separate interface)

  • Select the node you wish to update by clicking on it

  • Click the green Advanced button, then select Firmware update

  • For the first Target, 0, select the downloaded *.otz file

  • Watch the light switch itself, which is flashing, to know when it has completed (Target 0 will take a while)

  • Repeat the process, entering 1 for the Target this time, and select the downloaded *.bin file

  • Watch the light switch to know when it is complete (this target will be much quicker)

  • If you discover some of the data about the switch is missing “Unknowndevice” or similar appearing as the ID, use the same Advanced menu to select Re-interview Node, which will update the data.

Hope this helps someone,


Thanks for this!
A few tips and tricks …

  • On a high-traffic network it takes longer. You can open the debug window and see the actual progress of it sending the firmware.
  • Don’t send any commands to your switch. I had automation/notifications set up that got executed and that stopped the update process.

Here is a quick step-by-step for those of you who want to switch from Zwave JS to Zwavejs2mqtt…

The ZwaveJS “integration” in HA consists of 2 parts:

  1. The server part; it is what actually creates the zwave network and handles all communications (you can see it in the configurations > addons as Zwave Js)
  2. The integration part (you can see it under Configurations > “Devices and Services” as “Zwave js”). It connects to the server part and pulls all the data into Home Assistant. It also stores all the names of your Nodes.

All we have to do is disable ZwaveJS server part in the addons and install Zwavejs2mqtt server part instead. Since we are not doing anything with the 2nd part all names will stay the same. We are just swapping out the servers, it takes only a few minutes. The longest part is waiting for your network to come back online (if you got a lot of devices)

Here is a guide on how to switch from ZwaveJS to Zwavejs2mqtt. :

  1. Do a backup just in case
  2. go to configuration > add-ons, press add new add-on and search for Zwavejs2mqtt. Install it but don’t run it.
  3. go to configuration > add-ons, click on your current Zwave Js addon and stop it (it should be running). Make sure to turn off Watch Dog if you have it enabled or it will start right back up.
  4. Click on the configuration tab on your stopped Zwave-js addon. You should see all the keys and device settings. Copy them down (or keep it open in a tab).
  5. Go to your newly installed Zwavejs2mqtt addon and start it up. Then click Open Web UI button to bring the UI
  6. Click on the gear on the left side, then click on Zwave bar/tab at the top. Copy all the keys and device path from your stopped Zwave Js addon. Make sure Disable MQTT Gateway is checked. On the Home Assistant tab make sure the “WS Server” is checked and port is 3000. Click save at the bottom. Zwavejs2mqtt will now try to bring your Zwave network online. If you get a message at the top right saying that the device cant be locked it’s probably because your old Zwave JS add-on decided to start back up. Go back to it and press stop again. Since Zwavejs2mqtt will keep retrying to connect it should connect to it quickly. If you are still having issues you can try to reboot your whole PI or whatever you are running your HA on. Just make sure start on boot is enabled for Zwavejs2mqtt addon and disabled for your Zwave JS addon. You can only have one of them running at the same time.

If all went well you should see nodes starting to populate when you click on the Control Panel icon in the Zwavejs2mqtt UI. Don’t worry about the names here as those are just what is seen by the server. It may take some time for the whole network to come online if you have a big network. You can now go back to HA and you should see devices becoming available again as nodes are coming back online.

I would wait to update any firmware until the network is fully working. Follow @LongDono 's flash guide above on how to flash the firmware.

To switch back to Zwave JS
To switch back to Zwave JS you can just stop the Zwavejs2mqtt (disable auto-start and watchdog again) and then just turn the Zwave JS back on. Now you can switch between the two by just start / stoping whichever one you want to use.

I didn’t see much difference in performance between the two (I got 48 devices) … so I might just leave the Zwavejs2mqtt as the server. Does anyone else notice the difference?


Server backend is identical, so no, it worked basically identically with a pretty front end for me. I stuck with ZJS2M.

1 Like

Earlier this year I made the switch from ST to HA. As part of that I have not updated my firmware in quite a while and have been holding off with the instructions above.

Today I noticed that the July Release of HA has a firmware update build into ZWave JS now.

Has anyone attempted it or had any experience with it?