Thanks for this guide! Great help!
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!
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.
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!
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
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:
![]()
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.

