Home Assistant Z-Wave Network Viewer (using Docker)

Docker to view the Z-Wave network based on the concept of ZWave graph,
Motivation was the error - HTML custom panels have been deprecated.

Adjustment for OZW and ZHA should be very simple and will begin working on that soon.

Home Assistant Z-Wave Network Viewer


Presents the nodes available in Z-Wave network

Once docker is up and running, it’s accessible in http://{IP or hostname}:6123 ,

Click on a node to get more details on the sidebar.


Environment Variables

HA_URL:            Format PROTOCOL://IP:PORT
HA_TOKEN:          Long-live token from Home Assistant
SSL_KEY:           SSL Key Path (Optional)
SSL_CERTIFICATE:   SSL Certificate Path (Optional)

Docker Compose

version: '2'
    image: "eladbar/ha-zwave-network:latest"
    container_name: "ha-zwave-network"
    hostname: "ha-zwave-network"
    restart: unless-stopped
      - 6123:6123
      - HA_URL=
      - HA_TOKEN=token
      - SSL_KEY=/ssl/ssl.key
      - SSL_CERTIFICATE=/ssl/ssl.pem
      - /ssl/ssl.key:/ssl/ssl.key:ro
      - /ssl/ssl.pem:/ssl/ssl.pem:ro

SSL Support

To enable SSL support (HTTPS), fill in the environment variables SSL_KEY and SSL_CERTIFICATE , Use the volume to share the SSL key and certificate with the container.


Where do you find that info?

Is it the docker network ip address of the container?

Port by default is 6123, so it should be http://ip:6123, or the hostname instead of the ip or domain name if you have

now I see why you are asking, forgot to mention it in readme, will add it later

Sorry, I’m still not sure I understand.

does the IP address need to be of the host machine running the container or the docker network IP address? and does it need the “http://” portion or just the IP:PORT portion?

so is it:

    - # IP of docker network
    - # IP address of host running docker

and when it’s up and running where do you find the zwave graph? is it at the IP-of-the-host-machine:6123?

3rd option, but first try to access it in the browser to see that it works for you

Can this be used with zwave2mqtt running on docker?

Doesn’t seem to be working.

here is the docker run command that installed the container:

docker run -itd --name=ha-zwave-network --hostname=ha-zwave-network -e HA_URL= -e HA_TOKEN=eyJ0eXAiOiJKV1QiLC.etc... --restart unless-stopped eladbar/ha-zwave-network:latest

the container gets installed successfully but the container log says:

Serving HTTP on port 6123 ( ...

and I can’t reach the webpage from the browser at any IP address port 6123.

do I need to add a network variable to the docker run command (–network=host)?

Please add port 6123 to be opened -p 6123:6123 instead of -network=host

Not sure how the entities are being generated, need examples of hub and related entity - state + attributes,
Can you please provide it so I’ll be able to check?


I’m making progress…

port 6123 was already in use for ESPHome so I changed the external port to 6124 (-p 6124:6123) and now the webpage kind of works.

it displays the legend at the bottom of a black screen similar to yours but it doesn’t display the actual HA zwave map. Kind of like it’s not communicating to HA to get the node information

Is there an error in browser’s console?

Updated readme to include that important part of ports, how to access and use the page

zwave2mqtt uses OpenZwave and converts the zwave nodes and devices into MQTT topics which are discovered by HA. I’ll point you to their docs here: https://github.com/OpenZWave/Zwave2Mqtt#robot-home-assistant-integration-beta
There is no HA entity created for the Zwave controller. Here’s a zwave wall switch in HA:

did you set both environment variables HA_URL and HA_TOKEN?


what are the attributes of one of the entities, for instance Basement Steps Light?


Here are some of the entities for the “basement steps light” device:

In order to create the graph, there must be neighbors attribute, in the states you’ve sent there is no such attribute , therefore, I can’t build the graph,
Maybe with ozw it will work


See my docker run command a few posts up.


So, a couple of things I learned in getting this up and running (and one remaining problem for @bar):

  • If you are using SSL on your HA server, you have to have a valid cert. For me for example, using the IP didn’t work as I don’t have the IP as a SAN on my SSL cert. This also means that using the IP won’t work in the HA_URL environment variable, as the certificate validation fails.
  • Because of the above, you need working DNS in your HA installation. If, like me, you have an internal DNS server, you may need to run ha dns options --servers dns://aaa.bbb.ccc.ddd as the age-old DNS bug in HA still hasn’t been fixed (hassio-dns doesn’t always get the DNS from DHCP and wants to use and
  • You can’t have trailing slashes on the values in cor_allowed_origins. If you do you will find an error like this in your browser console: Action to fetch ... has been blocked by CORS policy. You probably can’t have them on HA_URL as well. I tend to put them on my URLs by default, so was surprised by this one.

Now I’m getting the following error. Apparently neither of my two controllers is identifying itself as primary.

TypeError: Cannot read property 'indexOf' of undefined
    at networkViewer.js:309
    at Array.forEach (<anonymous>)
    at setInitialHop (networkViewer.js:298)
    at initialize (networkViewer.js:412)
    at (index):88

Here are my two Z-Wave controllers. The ISY is primary, the Z-Stick is a secondary:

Entity State Attributes
zwave.isy ready node_id: 7
node_name: Universal Devices Unknown: type=0001, id=0001
manufacturer_name: Universal Devices
product_name: Unknown: type=0001, id=0001
query_stage: Complete
is_awake: true
is_ready: true
is_failed: false
is_info_received: true
max_baud_rate: 40000
is_zwave_plus: false
capabilities: listening, beaming
neighbors: 8, 57
sentCnt: 2
sentFailed: 0
retries: 0
receivedCnt: 0
receivedDups: 0
receivedUnsolicited: 0
sentTS: 2020-07-25 19:00:33:335
receivedTS: 2020-07-25 18:59:54:777
lastRequestRTT: 27
averageRequestRTT: 27
lastResponseRTT: 0
averageResponseRTT: 0
friendly_name: Universal Devices ISY994i
zwave.aeon_labs_zw090_z_stick_gen5_us_2 ready node_id: 8
node_name: AEON Labs ZW090 Z-Stick Gen5 US
manufacturer_name: AEON Labs
product_name: ZW090 Z-Stick Gen5 US
query_stage: Complete
is_awake: true is_ready: true
is_failed: false
is_info_received: true
max_baud_rate: 40000
is_zwave_plus: false
capabilities: listening, staticUpdateController, beaming, primaryController
neighbors: 3, 4, 5, 6, 7, 61
sentCnt: 1
sentFailed: 0
retries: 0
receivedCnt: 0
receivedDups: 0
receivedUnsolicited: 0
sentTS: 2020-07-25 19:00:01:265
receivedTS: 2020-07-25 18:59:54:777
lastRequestRTT: 0
averageRequestRTT: 0
lastResponseRTT: 0
averageResponseRTT: 0
friendly_name: AEON Labs ZW090 Z-Stick Gen5 US