Swap ZWave Sticks without removing/adding all devices?

I’m working on following 🚧 META-Issue: Problems with 700 series (healing, delays, neighbors, ...) 🚧 · Issue #3906 · zwave-js/node-zwave-js · GitHub to downgrade to a 500 series controller. On an earlier attempt I did:

  1. NVM Backup of 700 series controller
  2. Switch ZWaveJS2MQTT to point to 500 series controller
  3. NVM Restore on 500 series controller

The problem I ran into is right after I did step 2 the ZwaveJS integration removed all the devices, which is understandable since the new controller doesn’t have any devices yet.

Is there a way I can pause the integration/sync logic while I’m doing this dance?

1 Like

Do you have somewhere you can create an image and temporarily install ZwJS2Mqtt to pull the pre convert 500 series backup? Seems many doing it that way so they never need to do your step 2 above, and the process I intend to follow.

You can disable the integration while you perform the process. Or temporarily disable the websocket server in z2m settings.

You might be able to use the Aeotec backup tool to copy the NVM backup to the Gen 5 stick. The backup tool is a Windows application.

You cannot, which is why the OP is using zwavejs2mqtt.

Thanks. Is that because the backup tool doesn’t work with Gen 7 Z-sticks?

The Aeotec tool probably does not work with Gen 7. For Gen 7 they tell you to use the Silicon Labs PC Controller software, which does work. The Aeotec tools is just an old customized version of PC Controller.

Besides that, the NVM formats are different between SDK versions, so there’s a conversion step required when moving between versions. The Aeotec tool and the PC Controller software do not do any conversion.

I could do this but it is a fair bit more work and I’m lazy :smiley:

I’ll see if disabling the web socket is enough to avoid the mass-removal of entities.

1 Like

Disabling the websocket in the zwavejs2mqtt addon let me do the swap without removing all of my zwave devices from home assistant. Thank you!

1 Like

Also for anyone following along I migrated from an Aeotec Z-Stick 7 to an Aeotec Z-Stick Gen5+. I plugged the Gen5+ into a windows machine and did their firmware update first and then used ZwaveJS2MQTT to do the NVM backups/restores and the tool linked in that GitHub thread to convert the 700 series backup to a file usable by the 500 series stick.

1 Like

Eric:

So does it look like this then?

Flash gen 5 stick to current firmware
Turn off websocket in Zwavejs2mqtt
Nvm backup 700 stick
Shut down Zwavejs2mqtt
Swap sticks, determine ByID path for 500 stick
Update configuration for Zwavejs2mqtt
Restart Zwavejs2mqtt
Dont freak out at blank console
Nvm backup 500 stick
Use tool to transfer config to copy of 500 stick backup
Restore ‘new’ file to 500 stick
Verify devices come back
Restart Zwavejs2mqtt (to clear the display bug on incorrect stick)
Turn Websocket back on

Look about right?

1 Like

My VERY specific steps were:

  1. In ZWaveJS2MQTT: Do NVM backup of Z-Stick 7
  2. Plug in Gen5+ usb stick
  3. In ZWaveJS2MQTT Settings: Turn off WebSocket
  4. In ZWaveJS2MQTT Settings: Switch to Gen5+ stick USB device (I use /dev/serial/by-id/ paths for my config)
  5. In ZWaveJS2MQTT: Do NVM backup of Gen5+
  6. Use conversion tool to convert 700 export to 500 config
    • npx @zwave-js/nvmedit convert --source NVM_2022-01-06_700.bin --target NVM_2022-01-06_500.bin --out NVM_2022-01-06_700_to_500.bin
  7. In ZWaveJS2MQTT: Do NVM restore of Gen5+
  8. In ZWaveJS2MQTT Settings: Turn on WebSocket
  9. Restart ZWaveJS2MQTT Add On
  10. Restart Home Assistant (I was too lazy to wait for the zwave devices to move out of “disabled” state)
3 Likes

Done. Successfully running on a 500 stick.

Issues encountered:

Serial Connection
JS2MQTT add-on initially refused to start. (failed to connect to serial) changed to connect to /dev/ttyACM1 instead of by-id. Fired right up (suspect typo in by ID but out of scope for this)

Entity names.
I had used the MQTT add-on to name all devices and areas. During initial connection, Some of my devices added before they named some didnt, so I had a mix of names like

light.ge_inwall_dimmer_2 (Default name)
and
light.living_room_light (Entity changed)

Between the time I added JS2MQTT the first time and now I went through all devices in my setup and added Names and Areas in the MQTT console.

When everything repopulated in HA - the ‘FIXED’ entity names came through instead of the defaults. Now I still have some scene fixing and entity renaming to do now. BUT at least I don’t have to rejoin 70-80 devices. I’ll still call it a win.

1 Like

I had a problem figuring out how to use the conversion tool. I am a home user with no experiance in any kind of coding . I have always used Windows and premade programs. In reality it is very simple. I used this guide to install Node.js and NPM on my Windows 10 desktop. Then did the following.

  1. Place your NVM backups into the root folder on your windows pc. Mine was C:>users>Bill (I also renamed the backups to 1.bin for the Z-7 stick. 2.bin for the Gen5 stick.)
  2. Open a command prompt on you windows pc
  3. Enter the following code without qutoes "npx @zwave-js/nvmedit convert --source --target --out ". Don’t hit enter yet…
  4. Change source to the Z-7 backup bin
  5. Change target to the Gen5 backup bin
  6. Change output to what you want to call the output bin.
    Mine looked like npx @zwave-js/nvmedit convert --source 1.bin --target 2.bin --out 3.bin
  7. Hit enter

Simple and worked. Converted all my 700 series nvm to work with my Gen5+ stick. Didn’t loose any naming or break any automations…

Thanks for all the hard work it took to write this program to convert these. #AlCalzone

Edit: A explanation on what happens. the “npx @zwave-js/nvmedit” pulls the what I am going to call code from the github (this stuff I am guessing) and then runs them locally to convert your file for you.

If I am wrong please correct me…

1 Like

Hi everyone,

Most everyone has been focusing on downgrading from 700 to 500 due to the firmware bugs, but my problem has been the opposite. I’ve been banging my head trying to upgrade from 500 to 700 series with no success (all nodes dead after restore).

Thanks to the amazing Z2M community, it turns out it’s even easier!

I’m glad to report it’s working with the following steps:

  1. Make sure your 500 series stick is on Z-Wave SDK v6.61. In the case of Aeotec zstick 5, this means you need to be on at least firmware 1.2
  2. In Z2M UI, do an NVM backup for both your sticks.
  3. Restore 500 series NVM bin DIRECTLY onto 700 series (bypass nvmedit)
  4. Z2M will automatically reinterview all nodes.

I thought that the instructions on hubitat said that you did not need to update the firmware on the HUSBZB-1 if you wanted only to backup NVM? It claims that only Z-Stick Gen5 Backup Tool is needed. Is that not correct?

I just popped in to say massive thank you for the instructions and the work done to write the conversion. Worked like a charm.

Does it matter which 500 stick I try and downgrade to? I migrated from SmartThings straight to a ZST10-700.

Mainly wondering if I can cross brands since there doesn’t look to be a recommended 500 series Zooz branded stick.

Kind of feel the HA documentation should be updated to not recommend 700 series for new installs even on the new firmware.

wow is the 700 stick that bad? what happened to you exactly…?

Without a 17.2 firmware or better it’s quite horrid…