Introduction
This guide describes how to switch from the Z-Wave JS official add-on to the Z-Wave JS UI community add-on, without losing any downtime caused by the re-interviewing of nodes.
The only requirement outside of HAOS is the ability to extract and modify tar files, using a file archive tool like 7-Zip.
The idea of using modified backups to restore the Z-Wave driver cache files was inspired by Mark#1028 on Discord.
In this guide, Z-Wave JS UI will henceforth be abbreviated as ZUI.
Who is this guide for?
This guide is for HAOS add-on users who have already installed the official Z-Wave JS add-on and Z-Wave integration, and would like more functionality that isn’t yet provided by HA, such as:
- Adding and remove node associations
- Testing device config firmware files
- 7-Days of downloadable debug logs
- An alternate configuration UI
- Advanced driver code execution
- etc.
If you are not using HAOS, this guide is not for you.
When to use this guide?
The official instructions for switching add-ons are available in the integration documentation and are good enough for most people. This guide is a step-by-step version of that with an additional benefit of preserving the network information to avoid re-interviewing devices.
This guide is helpful when your network is very large, or you have many battery devices. If your network is small or you have very few battery devices, you can probably skip this.
It helps to know a little bit about how the Z-Wave JS driver works. When you add a device to your network, the driver interviews the device for its identity and functionality. This information is permanently stored in a set of cache files that are loaded each time the driver restarts. Without these cache files, the identity and functionality of the devices are lost until they are re-interviewed, and during that time HA is unable to control or observe the devices.
If you simply uninstall the official add-on and install ZUI, those cache files are lost. In most cases this isn’t a big deal, re-interviewing can be painless. Mains-powered devices are always interviewed automatically, but battery devices are only interviewed when they wake up. That could be hours or days depending on their configuration. You might have a battery device in the attic that is difficult to access. Or your lock might be unreliable and fail interviews if the distance is too far. Etc.
These official add-ons does not provide a convenient way to export or import only the cache files, so this guide exists to cover that gap. If you don’t want to re-interview the devices when switching add-ons, this guide is for you. When completed, from the perspective of HA there will be no difference.
Prerequisites
- Home Assistant OS 9.5
- Home Assistant 2023.4.4
- Any file archive program, such as 7-Zip.
- You have read the How do I switch between the Official Z-Wave JS add-on and the Z-Wave JS UI add-on? instructions in the official docs
- You have read the ZUI add-on installation instructions
The guide should work roughly the same on earlier or later versions of HAOS and HA, however screenshots and the locations of things may change. The versions are noted here simply to mark when this guide was written.
If you do not understand the difference between integration and add-on, please read their entries in the HA glossary.
Guide
Step 0: Make a full backup
Make a full backup before you do anything, just in case.
Step 1: Save important Z-Wave JS configuration
Go to: Settings → Add-ons → Z-Wave JS → Configuration
Copy the USB path and S0 and S2 keys from the Z-Wave JS add-on configuration into a text file.
Step 2: Disable the Z-Wave JS Integration
Go to: Settings → Devices & Services → Z-Wave JS ...
→ Disable.
Click DISABLE in the prompt.
The Z-Wave JS add-on is automatically stopped as a result. Confirm this by going back to the add-on page and make sure it’s stopped, as indicated by the Red dot. If it’s still running, click STOP.
Step 3: Make a partial backup of the official add-on
Go to: Settings → System → Backups
Click “+ CREATE BACKUP”
Set Backup name: ZJS
Set Backup type: Partial backup
Select Add-ons / Z-Wave JS
Click CREATE
Step 4: Download the partial backup
We are going to extract the important cache files from the add-on backup to import into ZUI later.
Go to: Settings → System → Backups
Click the previously created “ZJS” backup
Click ...
Click Download backup
Save the file and open with your archive program.
The filename will be ZJS.tar
. Make note of the download folder.
Step 5: Extract the Z-Wave JS driver cache files from the partial backup
Open the ZJS.tar
backup file from the download folder.
The cache files are located in the directory .\core_zwave_js.tar.gz\core_zwave_js.tar\data\cache\
within the tar file, as seen here with 7-Zip:
Extract all three .jsonl
files to a temporary directory, I’m using C:\temp\ha
. You should have the following files extracted:
xxxxxxxx.jsonl
xxxxxxxx.metadata.jsonl
xxxxxxxx.values.jsonl
The xxxxxxxx
filename prefix is the Z-Wave network ID, which is unique for your network.
Step 6: Install ZUI add-on
Install the add-on but do not configure it yet.
Go to: Settings → Add-ons → ADD-ON STORE
Search for Z-Wave JS UI and select it.
Click INSTALL to install it, and wait some time.
Click START. You might need to refresh the add-on page to see it started.
Click “OPEN WEB UI” to open the ZUI page.
Do not configure any settings yet!
Step 7: Upload cache files to ZUI
We will import the ZUI cache files we extracted in step 5. This step restores the Z-Wave network information in order to avoid re-interviewing devices. Make sure you are already at the ZUI page from step 6.
Click the hamburger button at the top to the left of Control Panel
Click the Store tab (folder icon) to go to Store browser. It will look like a file browser.
Click the large blue gear button at the bottom of the page
Click the orange Upload button
Click the “File” field and choose the first .jsonl
cache file.
Click the UPLOAD button.
Repeat the upload steps for the two remaining .jsonl
cache files. When finished, you should immediately see all three .jsonl
files in the Store browser.
Make sure this is the case before proceeding.
Step 8: Configure ZUI
Make sure you are already in the ZUI web UI from steps 6 and 7.
Click the hamburger button at the top to the left of Store
Click the Settings tab (Gear icon)
Expand the Z-Wave panel
- Set Serial Port by copying and pasting the path from step 1. Tip: you should always use a
/dev/device/by-id
path to avoid issues with path changes. - Set all the S0 and S2 keys via copy and paste from step 1
- Set Log Level to Debug
- Set Log to file to On
The log settings are optional and not required, but I recommend them for future troubleshooting uses.
Scroll to the bottom of the web UI and click SAVE. This will restart ZUI. This may take up to a minute or longer.
Navigate to the Control Panel via the same hamburger menu. Eventually the rows will start filling up with nodes.
If all went well, all of the nodes should have valid manufacturer, product, and product id fields, and there should be no “Unknown” ones. The interview status should also be “Complete”.
Note that ZUI will switch to a Compact mode if the window width is to narrow. Expand the window width to see the table view as above.
If you have some devices that are unknown or not Complete, then they were in that state before the migration. To fix that, you’ll need to wake up battery devices to complete the interviews, or try manually re-interviewing. While not required, it’s best if you have all the nodes in the expected state before proceeding to the next step, as this is the main point of the guide.
Step 9: Reconfigure the Z-Wave JS Integration
This process is done exactly as described in the official docs.
Go to Settings → Devices & Services
Click “+ ADD INTEGRATION”
Search for Z-Wave and choose Z-Wave. Avoid “Add Z-Wave device” and choose Z-Wave if prompted a second time.
UNCHECK “Use the Z-Wave JS Supervisor add-on” (!!!VERY IMPORTANT!!!)
Click SUBMIT
Enter ws://a0d7b954-zwavejs2mqtt:3000
as the URL (exactly as listed here!)
Click SUBMIT
If successful the dialog will say “Device is already configured”. This is not an error, it means the existing Z-Wave network has been found.
Click CLOSE
Click SHOW at the top right to show the disabled Z-Wave integration.
Click ENABLE within the Z-Wave card to re-enable it.
Wait for the integration to load, but it should be nearly instant. If not, try reloading the page.
Click CONFIGURE in the Z-Wave integration card. Check for “Network Connected” and the ensure the Server URL is set to the correct ZUI URL.
If you view your devices and entities, you’ll notice nothing has changed. As expected.
Step 10: Uninstall the Z-Wave JS add-on
The final step is to remove the official add-on, so it doesn’t accidentally startup and fight for control over the Z-Wave controller.
Go to Settings → Add-ons
Click Z-Wave JS
Click UNINSTALL
The official add-on is now removed and you are left with the ZUI add-on only.
The End
Congratulations for making it to the end of this guide! You should now have a functioning ZUI add-on, with the ability to perform all the extra things you wanted to do, and nothing should have changed in HA.
If you notice any errors in this guide, please let me know with a comment.