Large Z-Wave Network multiple controllers? Z-Sticks Possible?

Hi,

I have a large network, currently using Homeseer HS3 and would like to move away from it. I played around with HA for a long time and would like to move everything to it.
My network currently consists of 4x znet devices in 4 areas of the house, otherwise z-wave devices become unreachable (tons of stuff in walls, ducts etc…)
It’s a 7000sqft home 2 stories and I have 2x zwave controllers on the first floor and 2x in the basement.
From zwave stuff I have:
~100 inovelli dimmers
~ 75 hardwired z-wave blinds (appear as battery operated using 24v psus)
~ 50 aeotec sensors using POE USB adaptors

Is there a way to have 4x zwave networks configured using 4x zwave controllers? in HAssio ? I am thinking maybe using something like ser2net or remote raspberry pis with aeotec sticks?

any input is welcome.

The new beta qt-openzwave integration supports multiple controllers. Essentially you can put each stick on its own raspberrypi or other computer of your choice and you run a seperate instance of the openzwave daemon for each stick. Every daemon communicates via MQTT to a centralized MQTT server. Home assistant will then use MQTT to communicate to the zwave network. Only one instance of home assistant is needed. You just have to remember to set the OZW_INSTANCE of every openzwave daemon in the docker configuration to something unique and have them each use the same MQTT server. The remote rpis with the zwave sticks won’t necessarily need homeassistant running on them, just the docker container that runs the openzwave daemon. I’m not sure if there is a option in hassio to just run the openzwave daemon without hass. Running Raspbian with docker should be sufficient.

1 Like

Thank you, I will look into this solution. This is also something that was mentioned to me in HA discord channel.

Have you done this? If so, are you using docker-compose? I’m looking for a sample docker-compose file of the openzwave daemon docker container running on the pi. Anything in that direction would be helpful!

There are examples on the project page. https://github.com/OpenZWave/qt-openzwave/blob/master/README.md

I didn’t have a chance to get this done yet. I am looking to try this out within a month.

I am having issues getting the docker container to talk to my Mosquitto server running on a different docker server. I keep getting this error Could not connect to the MQTT broker after 30 seconds. Any ideas? I tried the allinone as well as the standalone docker conatiner. Relevant docker-config lines below. Additional info can be found at the issue I created on the GitHub repo

version: '3'
services:
  # Standalone Image
  ozwd:
    image: openzwave/ozwdaemon:latest
    container_name: "ozwd"
    #     security_opt:
    #      - seccomp:unconfined
    devices:
      - "/dev/ttyUSB0"
    volumes:
      - "~/docker/openzwave/ozw:/opt/ozw/config"
    ports:
      - "1983:1983" #ozw-admin port
      - "1883:1883" #MQTT Comms Port
    environment:
      MQTT_SERVER: "CattHouse-Mini.local"
      #      MQTT_USERNAME: "my-username"
      #      MQTT_PASSWORD: "my-password"
      #      USB_PATH: "/dev/zwave"
      USB_PATH: "/dev/ttyUSB0"
      #      OZW_NETWORK_KEY: "0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00"
    restart: unless-stopped

  #All-In-One Container
  ozwd-all:
    image: openzwave/ozwdaemon:allinone-latest
    container_name: "ozwd-all"
    #     security_opt:
    #      - seccomp:unconfined
    devices:
      - "/dev/ttyUSB0"
    volumes:
      - "~/docker/openzwave/ozw:/opt/ozw/config"
    ports:
      - "1983:1983" #ozw-admin port
      - "5901:5901" #VLC Port for remote client
      - "7800:7800" #Web Based VLC Port
      # - "1883:1883" #MQTT Comms Port
    environment:
      MQTT_SERVER: "CattHouse-Mini.local"
      #      MQTT_USERNAME: "my-username"
      #      MQTT_PASSWORD: "my-password"
      #      USB_PATH: "/dev/zwave"
      USB_PATH: "/dev/ttyUSB0"
      #      OZW_NETWORK_KEY: "0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00"
    restart: unless-stopped

Perhaps you have a DNS problem? Have you tried accessing that name inside of a docker container manually? Have you tried using an IP address?

You don’t need to specify port 1883 because the container is not listening for connections, it is making outgoing connections.

That makes sense about port 1883. I didn’t realize that was an inbound only port mapping. I tried using the IP address earlier in my troubleshooting process and it didn’t seem to work but that seems like it has fixed things this go around… Thanks for the tip!

The .local domain uses a special multicast dns lookup process that is not a standard DNS request. The docker container is deliberately kept in it’s own separate IP subnet behind a firewall as part of docker’s security model so multicast DNS isn’t going to work.

If you are running multiple zwave controllers then be sure to set the OZW_INSTANCE: key in environment: to a different number for each raspberrypi.

Thanks for that info. I’m still new to the docker world. It’s weird to me that I was able to telnet to the mqtt server port via the hostname.local based on your description of how things work.

In your Github issue you said you used telnet from the host. The host network would support the use of mDNS. That’s why I had suggested trying to connect by name from inside a container, since the container has its own separate network (by default).

Using the host term there was incorrect of me. My main docker server is not a pi, my owz container is running on the pi. I was able to telnet from the pi to the mosquitto MQTT container running on a different device using the docker hostname (catthouse-mini.local

Sorry, I don’t understand what was wrong with what you said. “pi” == host.

1 Like

Thank you for stressing the point, now I think I understand the docker networking you were explaining. I was thinking only of the MQTT server sides docker networking, not the ozw docker side.

@bunkmate-powder

I am new to the community. I have searched for a method to direct message you. I have also looked for/searched out forum discussions regarding what you have established regarding multiple z-wave controllers for a large home. Can you point me in the right direction regarding how to set up multiple controllers using a single home assistant entity similar to a wifi with access points?

Thank you so much for your patience and guidance

Yeah it’s super easy to do now!
Basically get a bunch of Raspberry Pis with Z-Sticks

Install Zwave JS on them using Ansible (automate it)
Make sure that you mount zstick by id so on reboot it doesn’t disappear

- name: Install ZwaveJS2MQTT
  docker_container:
    name: zwavejs
    image: zwavejs/zwave-js-ui:latest
    # image: zwavejs/zwavejs2mqtt:latest
    pull: yes
    restart_policy: always
    recreate: yes
    security_opts:
      - "seccomp:unconfined"
    devices:
      - "/dev/serial/by-id/usb-0658_0200-if00:/dev/zwave"
    volumes:
      - "{{data_directory}}/zwavejs/store:/usr/src/app/store"
    ports:
      - "8091:8091" # port for web interface
      - "3000:3000" # port for zwave-js websocket server

In homeassistant point zwave plugin to your remote PIs

1 Like

I do not have the need to do this, but to help, and as a start, looks like there’s a way:
In Home Assistant, when you go to Settings → Devices & services → Z-Wave, looks like one could already add multiple hubs to the same HA.
image
See above, one likely can click the blue “ADD HUB” link and add extra Z-Wave hub.

So when it comes to the “hub”, what you likely coud do is to get a Pi 3 or 4 (or equivalent), plug your 2nd z-wave usb stick to the Pi, and run Z-Wave JS UI as an interface between your z-wave usb stick and the ethernet.

So, your HA would talk to the Z-wave JS UI on the Pi, via LAN and via WebSocket (likely ws://ip-of-your-pi-with-zwave-usb-stick-and-zwaveJSui:3000). I hope this makes sense.

1 Like

That said, doing so would mean you would have multiple z-wave mesh networks.
So while this can be done, I am just curious: is there a reason why you cannot cover the whole home with one bigger z-wave mesh?

Or let me ask this differently: how “large” is large we are talking about? Is this the kind of scenario with 2 buildings that are 2 km apart?

Zwave mesh is unreliable over 50 devices or so.

In some large houses with multiple floors, thick walls, triple layers of Sheetrock, soundproofing, loads of HVAC stuff in floors and walls… Zwave signal won’t go through or won’t be reliable. Devices will be going dead, dropout etc…

There is a same reason people install multiple WiFi access points in businesses:)

But that’s just my experience.