I was almost in the same boat except i was using a raspberry 3+ and i wanted to run zifbee2mqtt and zwave2mqtt both in a seperate docker.
This is the proces i folowed to get a working system
Working environment:
Raspberry Pi 3 Model B Plus Rev 1.3 IP: 10.0.0.218
Sysinfo: Linux USBGW04 6.1.77-v8+ #1730 SMP PREEMPT Thu Feb 8 15:26:11 GMT 2024 aarch64 GNU/Linux
OS version: Raspberry Pi OS Lite 6.12 downgraded to 6.1.77-v8+ for compatibility issues
PRETTY_NAME: “Debian GNU/Linux 12 (bookworm)”
NAME: “Debian GNU/Linux”
VERSION_ID: “12”
VERSION: “12 (bookworm)”
VERSION_CODENAME: bookworm
ID: debian
32/64: aarch64
Home assistant: http://10.0.0.218:8123/
Installatiemethode: Home Assistant OS
Core: 2025.6.1
Supervisor: 2025.06.2
Operating System: 15.2
Frontend: 20250531.3
Zwave controller: http://10.0.0.218:8091/#/control-panel
zwave-js-ui: 10.7.0.766b673
zwave-js: 15.7.0
home id: 3791343079
home hex: 0xe1fb4de7
Z-Wave.Me ZMEEUZBB
fw: v5.39
SDK: v6.82.1
Zigbee controller: http://10.0.0.218:8080/#/
Zigbee2MQTT versie: 2.4.0 commit: bdb94da46e0461337f4a61b4f2a6bfa5172f608f
Coördinator type: EmberZNet
Coordinator revisie: 7.4.4 [GA]
Coordinator IEEE adres: 0xe8e07efffeef1a52
Versie frontend: 0.9.13
zigbee_herdsman_converters_version: 23.53.0
zigbee_herdsman_version: 4.1.0
Sonoff ZBDongle-E / EFR32MG21 / ember / Sn. 30621039F9
fw 7.4.4.0 (coming from fw 6.10.3.0b297)
fw upgrade via Chrome: Silabs Firmware Flasher | Web based flasher for ZB-GW04 and ZBDongle-E. MultiPAN RCP firmware enables these devices to be used with Silabs Multiprotocol Addon in Home Assistant. Allow Zigbee and Thread to co-exist on the same dongle. Get ahead of the tech an experiment with Matter!
Access Web Interfaces:
Z-Wave JS UI: http://<raspberrypi_ip>:8091
Zigbee2MQTT: http://<raspberrypi_ip>:8080
Mosquitto (MQTT broker) is running on port 1883
Preparation:
Download Pi OS 64b Lite and Raspberry Pi Imager from https://www.raspberrypi.com/software
Create SD card with Raspberry Pi Imager with own settings like user, hostname, ssh etc
Set in your router /DHCP server a fixed IP adress on MAC of pi
Put SD card in pi en boot
Use putty to get SSH access
Update pi:
Log in via ssh
change password via passwd indien nodig
sudo apt update
sudo apt upgrade
sudo apt dist-upgrade
Check root: id -u (0=root en 1000 = user dan gebruik sudo)
check config: sudo raspi-config en update tool als eerste, daarna check hostname en timezone
reboot: sudo reboot
Downgrade kernel because of compatibily issues with z-wave:
This is because kernel 6.12 crashes Zwave
source: Raspberry Pi 3B+ Upgrades breaks ZwaveJS-UI Container · Issue #3639 · zwave-js/zwave-js-ui · GitHub
source: Raspberry Pi 3B+ Upgrades breaks ZwaveJS-UI Container · zwave-js/zwave-js-ui · Discussion #3880 · GitHub
How to set up ZWavejs2MQTT on a Raspberry Pi and integrate it with Home-Assistant - #27 by edwin-2023
check OS version: cat /etc/os-release
check kernel version: uname -a
Downgrade to kernel 6.1.77-v8+ #1730 SMP PREEMPT Thu Feb 8 15:26:11: sudo rpi-update af3ab905d42
Sudo reboot now
Install Docker en Docker Compose:
curl -sSL https://get.docker.com | sh
sudo usermod -aG docker $USER
sudo apt-get install docker-compose-plugin -y
sudo reboot
check docker version: docker version
@June28, 2025 Version: 28.2.2
Identify Your USB Devices:
ls /dev/serial/by-id/
usb-0658_0200-if00 (Z-Wave-Plus)
usb-ITEAD_SONOFF_Zigbee_3.0_USB_Dongle_Plus_V2_20240217160818-if00 (Zigbee)
Create folder structure:
cd ~
mkdir -p ~/docker
mkdir -p ~/docker/zwave-plus2mqtt
mkdir -p ~/docker/zwave-plus2mqtt/store
mkdir -p ~/docker/zigbee2mqtt
mkdir -p ~/docker/zigbee2mqtt/data
Create Your docker-compose.yml:
first create the SESSION_SECRET with openssl rand -base64 32
note the answer: xxxxYYYxxxxx
cd ~/docker
nano docker-compose.yml
-------- start---------
version: “3.8” # Obsolete attribute but was used to point “Use Docker Compose file format version 3.8”
services:
zwave2mqtt:
image: zwavejs/zwave-js-ui:latest # Official Docker image for Z-Wave JS UI (formerly zwave2mqtt) = 2.4.0 on june 28, 2025
container_name: zwave-plus2mqtt # identical to folder name but ongelijk aan standaard, maar logisch en duidelijk
ports:
- “8091:8091” # Z-Wave JS UI web interface
- “3000:3000” # WebSocket interface (used by Home Assistant integration)
devices:
- “/dev/serial/by-id/usb-0658_0200-if00:/dev/zwave” # Adjust to your actual Z-Wave stick path = ZMEEUZBB www.z-wave.me Sn. 29.21.01
environment:
- SESSION_SECRET=xxxxYYYxxxxx # Random secret for session cookies (generate securely)
volumes:
- ./zwave-plus2mqtt/store:/usr/src/app/store # Persist Z-Wave configuration data
restart: unless-stopped # Auto-restart unless you manually stop it
zigbee2mqtt:
image: koenkk/zigbee2mqtt:latest # Official Zigbee2MQTT Docker image = 2.4.0 on june 28, 2025
container_name: zigbee2mqtt # Friendly container name identical to folder name.
ports:
- “8080:8080” # Zigbee2MQTT frontend web UI
devices:
- “/dev/serial/by-id/usb-ITEAD_SONOFF_Zigbee_3.0_USB_Dongle_Plus_V2_20240217160818-if00:/dev/ttyZigbee” # Replace with your Zigbee stick’s ID
volumes:
- ./zigbee2mqtt/data:/app/data # Persist Zigbee2MQTT configuration and data
- /run/udev:/run/udev:ro # Required for device access inside the container
environment:
- TZ=Europe/Amsterdam # Timezone setting (adjust for your location)
restart: unless-stopped # Same restart policy as above
-------- end ---------------
exit nano met CNTRL-X and press Y
Start Docker:
cd ~/docker
docker compose up -d
Docker containers info:
check docker status: sudo systemctl status docker
list dockers: docker ps -a
Stop alle docker’s met: docker stop $(docker ps -q)
docker start/stop/restart zwave-plus2mqtt
docker start/stop/restart zigbee2mqtt
HomeAssistant preparation:
ga naar instellingen\personen en maak een mqtt user aan, bv mqttuser met wachtwoord en inloggen toestaan
ga naar instellingen\apparaten en diensten en installeer integratie MQTT en vul credentials van mqtt user in
Go to Supervisor\Add-ons
Select Mosquitto broker under Official add-ons
Click INSTALL
Click START
Go to Configuration → Integrations.
MQTT will show as “Discovered” (If not add a new integration and search for “MQTT”).
Select CONFIGURE
restart HAOS
Done.
After First Launch:
Stop dockers: docker stop $(docker ps -q)
edit zigbee config file sudo nano ./zigbee2mqtt/data/configuration.yaml
-----start-------
version: 4
mqtt:
base_topic: zigbee2mqtt
server: mqtt://10.0.0.227:1883
user: user
password: xxxxx
serial:
port: /dev/ttyZigbee
adapter: ember
baudrate: 115200
rtscts: false
advanced:
log_level: info
channel: 20
network_key:
- 53
- 132
- 206
- 109
- 87
- 67
- 58
- 48
- 132
- 49
- 53
- 22
- 163
- 244
- 19
- 86
pan_id: 15728
ext_pan_id:
- 22
- 242
- 156
- 228
- 209
- 176
- 66
- 12
frontend:
enabled: true
port: 8080
homeassistant:
enabled: true
----einde----
open Z-Wave JS UI: http://10.0.0.218:8091
>> Goto Settings\Z-Wave and fill out:
Disable "soft reset" at Startup and recovery behavior section.
Serial Port
/dev/zwave
Network Key
If you are migrating from another controller with secure nodes insert your network key her, if not generate a new key with the refresh-symbol.
Migrating non-secure nodes does not require a Network Key.
Optional Expand Zwave\Driver logs and (to reduce I/O on SD-Card);
disable "Enable driver logs"
disable "Log to file"
Expand Zwave\Misc settings and check if "Enclusion/Exclusion timeout" is set to 30 seconds
>> Go To Control Panel to see the Z-Wave Network Nodes (If you have nodes yet, else you will just see the controller). It can take some time for the information to be visible.
Here you can select Start inclusion under Actions, and then > to include new nodes.
If you select a node you can scroll down to the bottom and view/control it, you can also change Node Name and Location. I recommend giving them a meaningful name.
In my system I rename all my nodes to zwave_.and document what is what in a separate spreadsheet.
You should rename all your nodes before going to the next step.
If you want to give them a location you can, but “Location” will be inserted before “Name” in the Home-Assistant entities later, so I prefer leaving “Location” empty here.
Make sure settings\MQTT Gateway is disabled
>> Goto Settings\HomeAssistant
Enable "WS Server” on "Server Port" 3000
"Server Host" 0.0.0.0
Disable "DNS Discover"
Restart container (upper right)
Test open ports:
Open ssh en test of poort 3000 open staat met sudo netstat -tulpna | grep 3000 als het goed is krijg je dan zoiets;
tcp 0 0 0.0.0.0:3000 0.0.0.0:* LISTEN 935/docker-proxy
tcp6 0 0 :::3000 :::* LISTEN 941/docker-proxy
zwave configuration in Home Assistant:
Goto Settings\Devices&Services en klick on + (add)
Search for Z-Wave en select manual config
fill in ws://<IP-ADRESS_OF_RASPBERRYPI):3000
Now it will find the Z-wave stick and nodes (if present). Fill in rooms etc
Of nodes are present, entities wil be found.
New nodes via the “Z-Wave JS UI”: http://<raspberrypi_ip>:8091
Yes, z-wave is working
Zigbee configuration
Zigbee2MQTT: http://10.0.0.218:8080
Run onboarding proces.
Enable “Frontend enabled?”
Enable “Home Assistant enabled?”
Klik op submit
Yes gateway werkt.
Zigbee configuration in HomeAssistant:
Go to Settings\Add-ons
Select Mosquitto broker under Official add-ons
Click INSTALL
Click START
Go to Settings\Configuration → Integrations.
MQTT will show as “Discovered” (If not add a new integration and search for “MQTT”).
Select CONFIGURE
Done
Optional:
Remove interfering programs (unsure if this is still needed):
sudo apt-get purge modemmanager
sudo systemctl disable hciuart
Manuals:
zwave2mqtt: Z-Wave JS UI
forum: forum - Z-Wave.Me forum
zigbee2mqtt: Getting started | Zigbee2MQTT
supported devices: Zigbee2MQTT
Check logs:
docker logs zigbee2mqtt
docker logs zwavejs2mqtt