-
Notifications
You must be signed in to change notification settings - Fork 10
700 series Controller Firmware Updates (Linux)
This guide describes how to perform Over-The-Wire (OTW) firmware upgrades for Z-Wave 700-series (or later) controllers in a Linux environment, using freely available tools.
If using command line tools does not appeal to you, stop now and follow your vendor's official instructions, or contact them directly for support. See Disclaimer.
Confirmed working with:
- Debian 11 amd64
- Virtualized amd64 Home Assistant OS (HAOS) 9.0 / VirtualBox 6.1.36 / Windows 10 hypervisor
- Raspberry Pi4 and Raspberry Pi OS 64-bit (Debian 10)
- Raspberry Pi4 and Ubuntu 20.04 64-bit [*]
- Raspberry Pi2 Model B and Raspberry Pi OS 32-bit
- Synology NAS with a Debian 10.9 Docker container [*]
- Apple Silicon and MacOS, using homebrew installed lrzsz and minicom. Update seems to have no effect [*].
The latest certified release is 7.18.2. Not all manufacturers support the latest version at this time.
Most controllers use stock firmware images distributed by Silicon Labs via the Z-Wave SDKs. Some vendors also distribute their own files, but usually these are identical to the Silicon Labs versions. Links to both files are provided when available. If in doubt, choose the vendor's file.
Select your product to continue:
- Aeotec Z-Stick 7 or Z-Pi 7
- Everspring SA370
- HomeSeer SmartStick+ G3
- Silicon Labs UZB-7
- Z-Wave.Me RaZberry 7
- Zooz ZST10 700
For alternative download options, see other downloads.
Missing a product? Let us know by submitting an issue.
The Z-Stick 7 and Z-Pi 7 controllers are a BRD4206A radio board (EFR32ZG14 chipset).
See Update Z-Stick 7 with Windows or Update Z-Stick 7 with Raspian OS / RPi for the official Aeotec update instructions.
Supported version: 7.18.1
MD5 checksum: abbc9a40ab1eaaef0b3cc4fa1daed366
Latest version: 7.18.2
- Download from Silicon Labs
MD5 checksum: 4dc969289671e24169adf0b04a7a1336
The Zooz Everspring SA370 controller is the ZGM130S module but the radio board is currently unknown. It may be a BRD4202A or BRD4207A. Use those files at your own risk.
There are no official update instructions or downloads.
This section will be updated when the correct firmware files are known, and/or Everspring produces official instructions and downloads.
Known working version: 7.17.2
- Download from Silicon Labs
MD5 checksum: 6cc0961168d209221869bdfd64d5a138
The SmartStick+ G3 controller is a BRD4202A radio board (ZGM130S module).
See Updating SmartStick+ Firmware for the official HomeSeer update instructions. The latest versions are always available at Firmware Downloads.
Supported version: 7.18.2
MD5 checksum: a39fe3dbe638e1d021c2049d9f450e4a
A bundle containing the latest firmware file and the PC Controller software is also available for download. This is an easy alternative for Windows.
The UZB-7 controller is a BRD4206A radio board (EFR32ZG14 chipset).
See Z-Wave 700: OTW of Controller or Z-Wave 700: Programming UZB7 Controller Stick for official Silicon Labs update instructions.
Latest version: 7.18.2
- Download from Silicon Labs
MD5 checksum: 4dc969289671e24169adf0b04a7a1336
The Zooz ZST10 700 controller is the ZGM130S module but the radio board is currently unknown. It may be a BRD4202A or BRD4207A. Use those files at your own risk.
See How to Perform an OTA Firmware Update on Your ZST10 700 Z-Wave Stick for the official Zooz update instructions.
Supported version: 7.17.2
MD5 checksum: 6cc0961168d209221869bdfd64d5a138
If you know your device's radio board identifier you can download the file directory from Silicon Labs files on GitHub, from the gbl directory.
With the 7.18 SDK, firmware files are no longer designated by chipset or module identifiers. Instead, the files are specific to radio boards. There are a variety of chipsets and radio boards a manufacturer can choose from. Verify with the vendor which radio board and firmware file is correct for your controller.
Download the demo-applications.zip archive to download all firmware files at once.
The firmware can be updated using a Docker container or manually on the controller host. Choose an update method:
If you use Home Assistant OS (HAOS), see the special instructions.
Or skip directly to the bootloader upload instructions.
The kpine/zwave-js-server Docker image provides a configuration-free method to update the controller firmware.
-
Download or copy the controller firmware file into the
/tmp/fwdirectory on the host, or any other preferred location. -
Stop any running Z-Wave JS application so it doesn't interfere with the update process. Some users have reported that this step isn't necessary.
-
Run the
update-firmwarecommand via Docker:docker pull ghcr.io/kpine/zwave-js-server:latest docker run --rm -it \ --device /dev/ttyUSB0:/dev/zwave \ --volume /tmp/fw:/fw \ ghcr.io/kpine/zwave-js-server:latest \ update-firmware
-
Approximately 10 seconds after the container starts, the bootloader menu will display. After it is displayed, continue to the bootloader update process instructions.
Notes:
- The USB controller host device path must be mapped to
/dev/zwavein the container (--device /dev/ttyUSB0:/dev/zwave). - The directory that contains the firmware file should be mapped to the
/fwdirectory in the container (--volume /tmp/fw:/fw). - The
update-firmwarecommand uses minicom to connect to the controller's bootloader console - The
docker runcommand must be interactive (-it) in order to interact with minicom and upload the firmware file. - The
--rmargument deletes the container after the process is finished.
The update can be performed with a script on the controller host using locally installed minicom and lrzsz packages. The script requires Bash.
-
Download the firmware update script.
curl -sLO https://github.com/kpine/zwave-js-server-docker/raw/d46d19f9088a11f739a35f30968c7c466d54445d/scripts/zfw-update.sh
-
Download or copy the controller firmware file to the
/tmp/fwdirectory, or any other preferred location. -
Run the
zfw-update.shscript with the appropriate options. Usebash zfw-update.sh -hfor help.# update /dev/ttyUSB0 with upload path /tmp/fw bash zfw-update.sh # update /dev/ttyACM0 with upload path $HOME/fw bash zfw-update.sh -d /dev/ttyACM0 -f $HOME/fw
-
Approximately 10 seconds after the script starts, the bootloader menu will display. After it is displayed, continue to the bootloader update process instructions.
Notes:
-
minicomandlrzszpackags are required and must be installed first. For example:Debian or Ubuntu:
apt install -y minicom lrzsz
Alpine:
apk add minicom --no-cache && \ apk add lrzsz --no-cache --repository=https://dl-cdn.alpinelinux.org/alpine/edge/testing -
The script must be run as the root user, or a regular user that has read/write access to the serial device (e.g. a member of the
dialoutgroup). -
The script generates a minicom configuration file and saves it as
$HOME/.minirc.zwave. This file is re-created everytime the script is run. minicom does not support non-file configurations, so it is required to use this file. -
The xmodem binary (provided by lrzsz) is named differently depending on the OS. On Debian and Ubuntu it is called
sx. On Alpine Linux and MacOS it is calledlsx. The script attempts auto-detect one of these binaries and if not found, will report an error. In that case, be sure to installlrzsz, and provide one ofsxorlsxin yourPATH.
If you are using Home Assistant OS (HAOS) with one of the Z-Wave JS add-ons you will still be able to update the firmware. To do so requires installing the SSH & Web Terminal community add-on (not to be confused with the Core Terminal add-on). This add-on allows access to USB serial devices and installing packages, but in order to do these you must disable Protection mode.
- Install and configure the SSH & Web Terminal add-on
- Disable Protection mode
- Start the add-on
- SSH into the add-on or use the Web UI
- Stop the Core Z-Wave JS or community Z-Wave JS UI add-ons
CTRL-A to send commands. If you are updating inside tmux, you must send CTRL-A CTRL-A to execute any minicom commands. When you SSH from an external client, tmux is not started.
Once logged in, you should see your USB controller's device path, usually /dev/ttyUSB0. If not, you'll need to troubleshoot and determine why. Ensure protection mode is disabled.
Go back to the host update instructions to continue, the instructions are the same. Note that when the SSH add-on restarts, any file outside of the /config directory is lost. If you want the script or firmware files to persist, save them in /config.
It is recommended to re-enable Protection mode once you are done with the update.
Notes:
- The update script automatically detects when it is running inside the community add-on and will silently install the necessary software (minicom and lrzsz)
Once the bootloader menu is displayed it is time to upload the firmware file. If the menu is not visible, try pressing Enter a few times. The menu will look something like this:
Gecko Bootloader v1.5.1
1. upload gbl
2. run
3. ebl info
BL >
-
Press
1to upload the firmware. The textbegin uploadwill be printed followed by the letterCrepeatedly, which indicates that the controller is waiting for an upload. Pressing any key will abort the upload. -
Press
CTRL-A sto open the file upload dialog. Selectxmodemand press Enter. Navigate the file selector so that firmware file is highlighted and select it with Spacebar, then press Enter to upload. -
When the upload finishes, Press
2in the bootloader menu to run the new firmware. Some garbage characters will appear, meaning the firmware is running. Exit minicom withCTRL-A qand selectYesto exit. -
Start the Z-Wave-JS application. Confirm the controller firmware version has changed to the expected version, either in the application UI or driver logs.