Switching Z-Wave JS Addons with Minimal Downtime! Z-Wave JS (Official) to Z-Wave JS UI (Community)

Thanks for this guide! Great help!

1 Like

Stupid question but is all this work JUST to prevent down time? It seems like using the official method you just copy over your network keys and you can flip flop between the UIs if you want. Only 1 can be on at a time but they make it seems like the backend database stays the same…

Mostly, but some people also need additional screenshots and step-by-step directions. I thought I was pretty clear about the purpose of this guide in the intro:

Many people have a lot of battery devices that would require manual wake ups. Do you want to open up tens of devices and push buttons? Sometimes those are in hard to access locations like attics. As mentioned in that intro section, without re-interviews those devices would be non-functional in HA. If that’s not a problem for you, then definitely skip this.

What UIs exactly? The core add-on doesn’t have a UI, the UI is Home Assistant. It serves no purpose to switch back and forth between add-ons, just pick one of them. You can use HA exclusively if you want with the ZUI add-on once it’s installed. If you mean switch back and forth between HA and ZUI, well yeah that’s how people use it.

Only 1 can be on at a time but they make it seems like the backend database stays the same…

Each add-on has it’s own storage directories, thus they need their own copies of the database files. Unlike the core add-on, users do not have direct access to the ZUI add-on storage directory, otherwise the cache migration process would be a simple copy and paste. This process migrates the database from one add-on to the other using ZUI’s restore process, which is unfortunately more complicated than needed for this use case.

Although, after thinking about it, the restoration process can be simplified with a simple docker command. I might consider updating the guide with that approach instead of dealing with the ZIP file. E.g. something like:

docker cp /addon_configs/core_zwave_js/cache/. addon_a0d7b954_zwavejs2mqtt:/data/store

should replace the entire backup and restore process, however this is only supported by the Community Terminal add-on.

Please don’t take this as a slam at all just curious because I have no clue… Yeah I guess its a relative term to say large network. I did the other way around (using FAQ of the HA help page) and took about 15 min to reinterview my network and all my devices seem to have the same entity IDs for all my automations…

All i had to do was grab my keys form the page… disable Zwave intagration, stop the old JS install the new one and configure it with the keys and i was good to go! quite simple to be honest

I do seem to have a lot of unknown nodes and I am wondering if that was failed includes form the past… as all my devices are showing up!

Thanks for the write up on this!

1 Like

I didn’t at all. If my response seemed that way, well it wasn’t meant to.

I’ve been involved supporting Z-Wave JS in various ways on this community forum on Discord for the 4 years it’s existed. During that time, switching add-ons has been (unfortunately) probably the number one question or issue I’ve seen in both places. That’s basically the genesis of the guide, it was obvious the official docs were not clear enough for typical users.

3 Likes

One heart stopping moment when Control Panel reported that the stick device port could not be opened due the port being locked. Consequently no nodes were listed. I rebooted the host which resolved that and my nodes came flooding in. Very grateful for the clear and comprehensive instructions.

Minor comment. In Step 1.1

  {%- set name = device_attr(dev_id, 'name_by_user') %}

not all of my devices had a name_by_user, so I used:

  {%- 
    set name = 
    device_attr(dev_id, 'name_by_user')
    or device_attr(dev_id, 'name')
  %}

Simple instructions to follow and everything is back up and running with JS UI, many thanks!

1 Like

Hi everyone,

just some quick questions as I did the migration before finding this thread.

Does it make sense (does it work) to go back to ZWAVE JS to get all the required information?

I would then do Step 1.0 and 1.1 to get the important ZWAVE JS settings and the name / location stuff.
OR: Is this information retrievable in a different way (where to find it?).

(As for the cache files I have been able to get the jsonl files after the migration)

Any suggestion is greatly appreciated.

My main problem is that even after a re-interview many devices are unknown manufacturer

Is there any way to get the right IDs (manufacturer and device) in place?

Thanks for this guide, extremely helpful. I noticed one mistake, which is that blue button at the bottom of the page in this step is a hamburger menu, not a gear. I’m on ZUI 5.0.0 – it’s possible this changed recently.

Fixed thanks. Was just an error from the re-write.

Fantastic - Worked like a charm and completed in less than 30 minutes with 37 devices. I was while being extra careful so just blindly following the steps would have been even quicker. Thank you!

Hi guys,
I need to ask an additional question.

I have done the entire process and it worked like a charm.
All devices we recognized and shown properly in ZWAVE JS UI.

However, after a few weeks one device (window sensor) went to unknown manufacturer.

I have many of these devices (ring window contact Gen 2) and wonder how ZWAVE JS UI can loose this information.

Any idea?
And if so, do I need to exclude and re-include the device or what would be the smartes way?
thanks

I got an error about -J command during the zip.
Chatgpt:
Your command is malformed. The -j flag you typed got interpreted as a command, not an option to zip.

Explanation

  • zip → program to create the archive
  • -j → ā€œjunk pathsā€ (don’t store folder structure, just the file names)
  • /homeassistant/zjs.zip → output file
  • /addon_configs/core_zwave_js/cache/*.jsonl → input files to include

Corrected command:
apk add zip && zip -j /homeassistant/zjs.zip /addon_configs/core_zwave_js/cache/*.jsonl

I have the advanced SSH & Web term. maybe thats why? Just posting incase this helps anyone else.

Your so-called ā€œcorrected commandā€ is the exact one used in the guide. Just copy and paste next time.

I’m very new to HA and this worked perfectly. I spent hours working with Grok and Chat and got nowhere. Thank you

1 Like

First, this is a Very well done Guide. Thank you!

Trying to move from Z-Wave JS to Z-Wave JS UI. I’ve followed the instructions to the letter, actually several times based on restoring a backup prior to the migration. It all goes pretty smoothly, and after it’s completed, some Z-Wave devices work, others don’t (about half). The error I get for the ones that don’t is this:

Failed to perform the action switch/turn_on. Unable to set value 34-37-0-targetValue: zwave_error: Z-Wave error 1405 - The node failed to decode the message. (ZW1405)

For devices that I receive that error on, if I try to reInterview the device, I loose all connectivity to it in my HA dashboard(s). I’m running HAOS in a Proxmox VM and while Z-Wave JS has been working perfectly for me, I’d really like the additional Z-Wave JS UI functionality.

@freshcoast Any ideas or recommendations?
Thanks in advance.

@freshcoast I may have found an issue - potentially. In Step 6: Import cache files into ZUI, you mention the import of 3 files (from zjs.zip). Here is the contents of my /addon_configs/core_zwave_js/cache directory:
2025-09-24 08_45_18-Greenshot

You’ll see two sets of three files along with three .lock directories associated with one set of files. When I created the .zip file, it included all six .jsonl files.

That won’t matter. You migrated or switched controllers.

However, the existence of lock directories either means the Z-Wave JS add-on was not stopped gracefully and the directories are stale, or it is still running. The latter would be bad and means you missed Step 2. It would depend on whether cf3 is your currently controller or if c2e is your current one.