Z-Wave dongle not recognized

Hello,

the “sonoff z-wave 800 dongle plus” dongle, model: dongle-PZG23, is not recognized by Gladys in Z-WAVE JS UI.

Thanks

Hello @Frederic_Trehoux and welcome to the Gladys forum!

So your remark is perfectly normal because Gladys does not manage Z-Wave USB sticks, zwave-js-ui handles that as indicated in the doc.

So you need to create a VM or a Docker container to install zwave-js and zwave-js-ui.
From there, that virtual machine will manage your USB stick which is very well supported according to the zwave-js documentation.
You connect to your zwave-js-ui instance, then Settingset Z-Wave and there you select your USB stick.
Then in the MQTT Gateway section, you can follow the doc.

The doc indicates that you need to connect to an MQTT broker from zwave-js-ui and from the Z-Wave JS UI integration in Gladys.
Either you use the internal MQTT Docker of the MQTT integration in Gladys (to enable), or you can create your own external MQTT Docker.

If you tell us a bit more about your hardware and software setup, we will be able to guide you better.
Don’t hesitate to ask if you need more info.

Ok, but how do I install this Z-Wave JS UI Docker container? Everything is done from the command line on an Ubuntu server, I assume.

At the moment, no — there isn’t any automation like you can have for the MQTT, Z2M, or Node-RED integrations.

From what I could see for the docker compose, it would look something like this (source) :

version: '3.7'
services:
    zwave-js-ui:
        container_name: zwave-js-ui
        image: zwavejs/zwave-js-ui:latest
        restart: always
        tty: true
        stop_signal: SIGINT
        environment:
            - SESSION_SECRET=mysupersecretkey
            - TZ=Europe/Paris
        networks:
            - zwave
        devices:
            # Do not use /dev/ttyUSBX serial devices, as those mappings can change over time.
            # Instead, use the /dev/serial/by-id/X serial device for your Z-Wave stick.
            - '/dev/serial/by-id/insert_stick_reference_here:/dev/zwave'
        volumes:
            - zwave-config:/usr/src/app/store
        # Or by using local folder
        # - ./store:/usr/src/app/store
        ports:
            - '8091:8091' # port for web interface
            - '3000:3000' # port for Z-Wave JS websocket server
networks:
    zwave:
volumes:
    zwave-config:
        name: zwave-config

I’m not sure whether the network should be zwave (dedicated network) or host so you can access the UI — that remains to be tested.

Thanks, but it’s all Greek to me. I’m not at all familiar with Docker. It’s a shame the integration doesn’t handle that.

Oops, sorry I rushed in headfirst without thinking about your level of knowledge in Linux :frowning:

I can try to guide you if you want, with simpler commands.
How did you install Gladys?

That’s kind of you. I know basic Linux commands, but Docker is completely new to me. I used it on Jeedom, but it was an integrated plugin. So I installed Gladys on a mini PC with Docker and on a Linux server. From what I understand, it downloads the Z-Wave JS container from the command line and then activates it.

@pierre-gilles Is it possible to have better ZwaveJS integration in Gladys like Z2M?

Anything is possible. If a developer is up for submitting a pull request (

Ah yeah, that would be cool, especially since Z-Wave is a very widely used protocol because of its mesh networking, like Thread and Matter. But I’m aware that Gladys is still young compared to others like Jeedom.

I think that for some users a simple little tutorial like the one online for installing Gladys would be sufficient. I only had to copy and paste the commands to install the Docker container without understanding them all, but I understood some. I’m not a programmer but a network admin, so I can only write small scripts to automate certain tasks. I have a test box where I would like to put Z-Wave, RFX and EnOcean, so I can test things if someone develops.

Thanks to you all

1 Like

hello everyone,

so this morning while searching a bit on the net I managed to install a zwavejs2mqtt container and it is running but in the integration I still don’t see a settings section and my Aeotec key is not detected. I also tried an Aeotec key (Gen5) and it’s the same thing.

I don’t see what’s wrong.

I’ll give you the follow-up of my investigations in case someone reads and has an idea. Looking at the Logs I see this:

2026-03-01 09:22:39.446 WARN STORE: settings.json not found

2026-03-01 09:22:39.454 WARN STORE: scenes.json not found

2026-03-01 09:22:39.456 WARN STORE: nodes.json not found

2026-03-01 09:22:39.464 INFO APP: Listening on port 8091 protocol HTTP

2026-03-01 09:22:39.471 WARN BACKUP: Store backup is disabled

2026-03-01 09:22:39.471 WARN BACKUP: Nvm backup is disabled

2026-03-01 09:22:39.473 WARN Z-WAVE: Z-Wave driver not inited, no port configured

however the Z-Wave key is indeed on /dev/ttyUISB0 because I checked, and for the other errors I thought the installation would create those files.

@scoobidou83 can you give us the command line you used to run the Docker container for zwave-js-ui?

The logs show that the config files were not found but, more importantly, in my opinion they were not created, and consequently everything else won’t work as is.

Hello,

here is the command line I ran:

sudo docker run -d \\\\\n
\n–name=zwavejsui \\\\\n
\n–network=host \\\\\n
\n\\-v /chemin/vers/vos/configs:/home/gladys/zwavejs \\\\\n
\n\\-e TZ=Europe/Paris \\\\\n
\n–device=/dev/ttyUSB0 \\\\\n
\nzwavejs/zwavejs2mqtt:latest\n
\n43fa30ab06a2584ba68e6ca5976bca690addb32786422961ea5674b910736265\n

I’ve done a lot of research using AI and the Internet

indeed I can open the page and I can see the settings there. I configured it as specified in the documentation, but nothing works.

Did you change the /path/to/your/configs?
Does that directory actually exist?

For me your command line is a bit minimal, I suggest running the following commands.

  1. change to your user’s directory:
cd
  1. create a directory to store the zwave-js files:
mkdir data-zwave-js-ui
  1. run the docker run:
docker run --rm -it -p 8091:8091 -p 3000:3000 --name=zwavejsui -e TZ=Europe/Paris --network=host --device=/dev/ttyUSB0:/dev/zwave -v $(pwd)/data-zwave-js-ui:/usr/src/app/store zwavejs/zwave-js-ui:latest

I prefer to use docker compose rather than docker run so I haven’t tested this command yet; tell me if it works or not and we’ll adjust.

what is that?

For copy/pasting code, you can use Preformatted Text; it makes it easier to read:
image

Indeed, I hadn’t understood the command; I reran this one

docker run -d \\
  --name=zwavejsui \\
  --network=host \\
  -v \~/zwavejsui_config:/usr/src/app/store \\ 
  -e TZ=Europe/Paris \\
  --device=/dev/ttyUSB0 \\ 
  zwavejs/zwavejs2mqtt:latest

I checked the files present and I can see files inside:

ls \~/zwavejsui_config/ -al
total 28
drwxr-xr-x 5 root   root   4096 mars   1 10:30 **.**
drwxr-x--- 5 gladys gladys 4096 mars   1 10:20 **..**
drwxr-xr-x 2 root   root   4096 mars   1 10:29 **logs**
drwxr-xr-x 2 root   root   4096 mars   1 10:29 **sessions**
\-rw-r--r-- 1 root   root    246 mars   1 10:30 settings.json
drwxr-xr-x 2 root   root   4096 mars   1 10:29 **snippets**
\-rw-r--r-- 1 root   root    186 mars   1 10:29 users.json

and my logs show:

2026-03-01 11:29:41.989 WARN **STORE**: settings.json not found
2026-03-01 11:29:41.996 WARN **STORE**: scenes.json not found
2026-03-01 11:29:41.998 WARN **STORE**: nodes.json not found
2026-03-01 11:29:41.998 WARN **STORE**: users.json not found
2026-03-01 11:29:42.004 INFO **APP**: Listening on port 8091 protocol HTTP
2026-03-01 11:29:42.083 WARN **BACKUP**: Store backup is disabled
2026-03-01 11:29:42.084 WARN **BACKUP**: Nvm backup is disabled
2026-03-01 11:29:42.085 WARN **Z-WAVE**: Z-Wave driver not inited, no port configured
2026-03-01 11:30:20.640 INFO **APP**: ::ffff:192.168.1.63 GET / 200 - - 15.021 ms
2026-03-01 11:30:20.692 INFO **APP**: ::ffff:192.168.1.63 GET /manifest.webmanifest 200 504 - 4.647 ms
2026-03-01 11:30:20.695 INFO **APP**: ::ffff:192.168.1.63 GET /assets/index-CNaszFFP.js 304 - - 5.081 ms
2026-03-01 11:30:20.699 INFO **APP**: ::ffff:192.168.1.63 GET /assets/index-Bv4Vn0Cm.css 304 - - 1.377 ms
2026-03-01 11:30:20.827 INFO **APP**: ::ffff:192.168.1.63 GET /api/auth-enabled 304 - - 25.214 ms
2026-03-01 11:30:20.884 INFO **APP**: ::ffff:192.168.1.63 GET /assets/VExpansionPanels-4YP_LGPZ.js 304 - - 2.431 ms
2026-03-01 11:30:20.887 INFO **APP**: ::ffff:192.168.1.63 GET /assets/VTable-BsI6FsWH.css 304 - - 4.459 ms
2026-03-01 11:30:20.888 INFO **APP**: ::ffff:192.168.1.63 GET /assets/Settings-26_qgVl3.js 304 - - 2.644 ms
2026-03-01 11:30:20.894 INFO **APP**: ::ffff:192.168.1.63 GET /assets/VExpansionPanels-Dyw0hWW-.css 304 - - 2.122 ms
2026-03-01 11:30:20.897 INFO **APP**: ::ffff:192.168.1.63 GET /assets/VDataTable-CLcLRj9B.css 304 - - 1.381 ms
2026-03-01 11:30:20.901 INFO **APP**: ::ffff:192.168.1.63 GET /assets/Settings-CP_TZtGE.css 304 - - 2.610 ms
2026-03-01 11:30:20.915 INFO **APP**: ::ffff:192.168.1.63 GET /assets/Settings-26_qgVl3.js 304 - - 1.142 ms
2026-03-01 11:30:20.922 INFO **APP**: ::ffff:192.168.1.63 GET /assets/VExpansionPanels-4YP_LGPZ.js 304 - - 0.963 ms
2026-03-01 11:30:20.953 INFO **APP**: ::ffff:192.168.1.63 GET /logo.svg 304 - - 0.978 ms
2026-03-01 11:30:21.072 INFO **APP**: ::ffff:192.168.1.63 GET /assets/MaterialIcons-Regular-DOtZ65Va.woff2 304 - - 0.945 ms
2026-03-01 11:30:21.094 INFO **APP**: ::ffff:192.168.1.63 GET /api/settings 200 - - 6.037 ms
2026-03-01 11:30:21.139 INFO **APP**: ::ffff:192.168.1.63 GET /api/auth-enabled 304 - - 2.112 ms
2026-03-01 11:30:21.173 INFO **APP**: ::ffff:192.168.1.63 GET /assets/index-CNaszFFP.js 304 - - 0.890 ms
2026-03-01 11:30:21.175 INFO **APP**: ::ffff:192.168.1.63 GET /assets/InvertedCheckbox-RDU4mTUT.js 304 - - 0.870 ms
2026-03-01 11:30:21.199 INFO **APP**: ::ffff:192.168.1.63 GET /assets/DialogGatewayValue-D4W0vBRW.css 304 - - 1.020 ms
2026-03-01 11:30:21.202 INFO **APP**: ::ffff:192.168.1.63 GET /assets/DialogGatewayValue-CFgSzVP7.js 304 - - 0.802 ms
2026-03-01 11:30:21.263 INFO **APP**: ::ffff:192.168.1.63 GET /api/settings 304 - - 3.123 ms
2026-03-01 11:30:21.288 INFO **APP**: ::ffff:192.168.1.63 GET /api/auth-enabled 304 - - 1.655 ms
2026-03-01 11:30:21.380 INFO **APP**: ::ffff:192.168.1.63 GET /assets/DialogGatewayValue-CFgSzVP7.js 304 - - 0.506 ms
2026-03-01 11:30:25.769 WARN **Z-WAVE**: Zwavejs driver is not ready yet, statistics will be enabled on driver initialization
2026-03-01 11:30:25.771 INFO **APP**: ::ffff:192.168.1.63 POST /api/statistics 200 89 - 23.031 ms
2026-03-01 11:30:26.001 INFO **APP**: ::ffff:192.168.1.63 GET /assets/index-Blr6EMNg.js 304 - - 0.967 ms
2026-03-01 11:30:30.572 INFO **APP**: ::ffff:192.168.1.63 POST /api/versions 200 58 - 4.416 ms
2026-03-01 11:30:47.839 INFO **APP**: ::ffff:192.168.1.63 GET /assets/ControlPanel-YmA8THz5.js 304 - - 0.541 ms
2026-03-01 11:30:47.870 INFO **APP**: ::ffff:192.168.1.63 GET /assets/index-CJ89FoNi.js 304 - - 0.918 ms
2026-03-01 11:30:47.882 INFO **APP**: ::ffff:192.168.1.63 GET /assets/BaseFab-CCixA4el.js 304 - - 2.208 ms
2026-03-01 11:30:47.886 INFO **APP**: ::ffff:192.168.1.63 GET /assets/VFab-DjF3rOkJ.js 304 - - 1.646 ms
2026-03-01 11:30:47.887 INFO **APP**: ::ffff:192.168.1.63 GET /assets/colors-DoZdCu1D.js 304 - - 2.709 ms
2026-03-01 11:30:47.892 INFO **APP**: ::ffff:192.168.1.63 GET /assets/index-DwLHofmu.css 304 - - 3.253 ms
2026-03-01 11:30:47.894 INFO **APP**: ::ffff:192.168.1.63 GET /assets/VFab-ByB_rPoF.css 304 - - 3.683 ms
2026-03-01 11:30:47.895 INFO **APP**: ::ffff:192.168.1.63 GET /assets/BaseFab-BUyXt8fM.css 304 - - 4.475 ms
2026-03-01 11:30:47.896 INFO **APP**: ::ffff:192.168.1.63 GET /assets/vuedraggable.umd-V0tNSFsP.js 304 - - 5.228 ms
2026-03-01 11:30:47.900 INFO **APP**: ::ffff:192.168.1.63 GET /assets/DialogAdvanced-DDU9DPqQ.js 304 - - 2.232 ms
2026-03-01 11:30:47.901 INFO **APP**: ::ffff:192.168.1.63 GET /assets/BaseFab-CCixA4el.js 304 - - 2.809 ms
2026-03-01 11:30:47.904 INFO **APP**: ::ffff:192.168.1.63 GET /assets/DialogAdvanced-D5h3KQey.css 304 - - 4.901 ms
2026-03-01 11:30:47.932 INFO **APP**: ::ffff:192.168.1.63 GET /assets/ColumnFilter-C0wWxFOe.js 304 - - 0.832 ms
2026-03-01 11:30:47.958 INFO **APP**: ::ffff:192.168.1.63 GET /assets/VFab-DjF3rOkJ.js 304 - - 0.764 ms
2026-03-01 11:36:50.512 INFO **APP**: ::ffff:192.168.1.63 GET /assets/SmartStart-DTXuN_dr.js 304 - - 0.925 ms
2026-03-01 11:36:50.572 INFO **APP**: ::ffff:192.168.1.63 GET /assets/MissingKeysAlert-CQSPBdZa.js 304 - - 1.106 ms
2026-03-01 11:36:50.634 INFO **Z-WAVE**: Calling api getProvisioningEntries with args: \[ \[length\]: 0 \]
2026-03-01 11:36:50.635 INFO **Z-WAVE**: Z-Wave client not connected getProvisioningEntries undefined

I took the liberty of editing your post and preformatting the text because it was becoming unreadable.

OK for the docker run but you didn’t expose ports 8091 and 3000, and you didn’t map the USB port:

docker run -d \
  --name=zwavejsui \
  --network=host \
  -p 8091:8091 \
  -p 3000:3000 \
  -v ~/zwavejsui_config:/usr/src/app/store \
  -e TZ=Europe/Paris \
  --device=/dev/ttyUSB0:/dev/zwave \
  zwavejs/zwavejs2mqtt:latest

Can you connect to http:192.168.1.63:8091 ?
Once connected you need

Ok, yes, I can connect to port 8091 and I have entered the Z-Wave and MQTT settings as mentioned in the documentation.

Very good news if zwave-js-ui works with your dongle!
One problem solved :wink:

OK, we’ll look at the MQTT part now because that’s how Gladys will retrieve the zwave info.

Can you post a screenshot of your zwave-js-ui MQTT Gateway configuration?
And one of the Gladys zigbee2mqtt integration?
You can hide the passwords, of course.

Thank you

![Screenshot 2026-03-01 at 13.44.17|690x308](upload://iSbUmRkvCMD3