I can't get my ZST39 working

I decided I wanted a Z-Wave network and I got a ZST39, a couple smart plugs, and a couple of outdoor sensors. I thought the touted long range would be useful considering the size of my property.

The ZST39 LR is detected but I couldn’t seem to get anything included.

I am on a Raspberry Pi 3 b+ raised from the RPi imaging tool.
I am reading some documentation and it suggests I should edit /boot/config.txt to add the line dtoverlay=disable-bt.

So I connected a keyboard and monitor and I see this CLI but I try nano /boot/config.txt and ha says no.

How do I proceed?

If I were to add this would it disable bluetooth or something? Maybe I don’t want to disable bluetooth.

BTW HA first complained my ZST39 firmware needed to be updated. I resisted but finally started that process. HA reported the firmware as 1.20. I installed Simplicity Studio on my PC and it was such a hog I had to uninstall Adobe Creative Cloud and Corel Draw and move some large personal files off the C: partition to get SS5 and all the SDKs installed. I finally got the latest firmware on the stick and HA reports it as 1.50 now, but that didn’t make the thing work any better.

I’m actually suspecting it works but Z-Wave JS isn’t really working with it properly. I was using QR codes to add devices and it looked successful but devices were not appearing in the UI. I enabled debug logging and I’m not sure but I think it showed successful inclusions.

Sorry for the long post. At least this is keeping my mind off other upsetting things.

How can I edit /boot/config.txt?

I don’t think the home assistant CLI has a text editor. Also according to the documentation you need to connect your raspberry pi SD CARD/drive to another computer and edit your config file that way.

For both processes below you will need to insert your SD card into your PC and open the configuration file with your favorite text editor.

1 Like

This requirement is for GPIO-based controllers like the Zooz ZAC93 or Razberry 7. The ZST39 is a USB controller, thus disabling bluetooth is not required.

FYI, HA (via Z-Wave integration) and Z-Wave JS UI are also capable of upgrading the controller firmware.

When you add the QR codes (SmartStart) make sure you also activate the entry if it’s not already enabled. LR-capable devices will not be enabled by default, to allow you to configure LR or Mesh mode. Post the logs if you want any feedback. If the SmartStart entries are enabled, try excluding the devices.

Follow the first steps for trouble shooting. A USB extension cable is basically a requirement. https://zwave-js.github.io/node-zwave-js/#/troubleshooting/first-steps

Also make sure the controller frequency is set to your region. If you’re in the US this is probably already correct, but if you were in the EU and purchased from Amazon, you’d probably get a US version.

1 Like

Thank you.
Since posting this I came to the conclusion that the RPi was not going to work for me and I set up HAOS in my Beelink Mini.

I have a USB hub hanging off of it and the Zooz ZST39 id in line of sight with a Minoston smart plug. I followed the instructions to break the smart plug’s binding to any network it might have had. Tried to add it using the QR code again, and today my phone tells me I can’t do that when I an nut using https! Who has a site certificate for their home network device?

I tried the other rout and initiated a scan, and presses the button 3 tines fist and the lights on the smartplug were flashing but HA didn’t detect anything.

Below is the diagnostics dump:

{
  "home_assistant": {
    "installation_type": "Home Assistant OS",
    "version": "2024.11.2",
    "dev": false,
    "hassio": true,
    "virtualenv": false,
    "python_version": "3.12.4",
    "docker": true,
    "arch": "x86_64",
    "timezone": "America/Los_Angeles",
    "os_name": "Linux",
    "os_version": "6.6.54-haos",
    "supervisor": "2024.11.2",
    "host_os": "Home Assistant OS 13.2",
    "docker_version": "27.2.0",
    "chassis": "embedded",
    "run_as_root": true
  },
  "custom_components": {},
  "integration_manifest": {
    "domain": "zwave_js",
    "name": "Z-Wave",
    "after_dependencies": [
      "hassio"
    ],
    "codeowners": [
      "home-assistant/z-wave"
    ],
    "config_flow": true,
    "dependencies": [
      "http",
      "repairs",
      "usb",
      "websocket_api"
    ],
    "documentation": "https://www.home-assistant.io/integrations/zwave_js",
    "integration_type": "hub",
    "iot_class": "local_push",
    "loggers": [
      "zwave_js_server"
    ],
    "quality_scale": "platinum",
    "requirements": [
      "pyserial==3.5",
      "zwave-js-server-python==0.58.1"
    ],
    "usb": [
      {
        "vid": "0658",
        "pid": "0200",
        "known_devices": [
          "Aeotec Z-Stick Gen5+",
          "Z-WaveMe UZB"
        ]
      },
      {
        "vid": "10C4",
        "pid": "8A2A",
        "description": "*z-wave*",
        "known_devices": [
          "Nortek HUSBZB-1"
        ]
      }
    ],
    "zeroconf": [
      "_zwave-js-server._tcp.local."
    ],
    "is_built_in": true,
    "overwrites_built_in": false
  },
  "setup_times": {
    "null": {
      "setup": 0.00433222200081218
    },
    "01JCXN6CJ44XWHKP2AJZQRR817": {
      "config_entry_setup": 0.03390807899995707,
      "config_entry_platform_setup": 0.000737083002604777
    }
  },
  "data": {
    "versionInfo": {
      "driverVersion": "13.10.3",
      "serverVersion": "1.39.0",
      "minSchemaVersion": 0,
      "maxSchemaVersion": 39
    },
    "entities": [],
    "state": {
      "nodeId": 1,
      "index": 0,
      "status": 4,
      "ready": true,
      "isListening": true,
      "isRouting": true,
      "manufacturerId": 634,
      "productId": 1552,
      "productType": 4,
      "firmwareVersion": "1.50",
      "deviceConfig": {
        "filename": "/data/db/devices/0x027a/zst39lr.json",
        "isEmbedded": true,
        "manufacturer": "Zooz",
        "manufacturerId": 634,
        "label": "ZST39 LR",
        "description": "800 Series Long Range USB Controller",
        "devices": [
          {
            "productType": 4,
            "productId": 1552
          }
        ],
        "firmwareVersion": {
          "min": "0.0",
          "max": "255.255"
        },
        "preferred": false,
        "metadata": {
          "comments": []
        }
      },
      "label": "ZST39 LR",
      "interviewAttempts": 1,
      "isFrequentListening": false,
      "maxDataRate": 100000,
      "supportedDataRates": [
        40000,
        100000
      ],
      "protocolVersion": 3,
      "supportsBeaming": true,
      "supportsSecurity": false,
      "nodeType": 0,
      "deviceClass": {
        "basic": {
          "key": 2,
          "label": "Static Controller"
        },
        "generic": {
          "key": 2,
          "label": "Static Controller"
        },
        "specific": {
          "key": 1,
          "label": "PC Controller"
        }
      },
      "interviewStage": "Complete",
      "deviceDatabaseUrl": "https://devices.zwave-js.io/?jumpTo=0x027a:0x0004:0x0610:1.50",
      "statistics": {
        "commandsTX": 0,
        "commandsRX": 0,
        "commandsDroppedRX": 0,
        "commandsDroppedTX": 0,
        "timeoutResponse": 0
      },
      "isControllerNode": true,
      "keepAwake": false,
      "protocol": 0,
      "values": {},
      "endpoints": {
        "0": {
          "nodeId": 1,
          "index": 0,
          "deviceClass": {
            "basic": {
              "key": 2,
              "label": "Static Controller"
            },
            "generic": {
              "key": 2,
              "label": "Static Controller"
            },
            "specific": {
              "key": 1,
              "label": "PC Controller"
            }
          },
          "commandClasses": []
        }
      }
    }
  }
}

I made an ID 10 T error. You use the mobile app when trying to include a device by its QR code.

Add a Z-Wave device

The device has been added. Once you power it on, it will become available.

Close

Since the smart plug is in it socket I assume it is powered on.

Please correct me if I’m wrong but from this diagnostics dump I conclude the controller has not successfully paired with anything.

Today I have the device on a USB extension cable and it is plugged into a USB2 port rather than USB3. I will try again to pair it with the plug that is plugged in about 4 feet away…

That diagnostic is of the controller. It wouldn’t show anything related to included nodes. If you had nodes included, they’d show up on the device page.

Unfortunately the diagnostic does not also include the configured region. If you want to confirm that, you’ll either need to enable driver debug logging (via hidden options in the add-on), or switch to Z-Wave JS UI look in the control panel.

Logging options for core add-on:

Logs are then available from Samba add-on or File Explorer in the addons directory.

Gotta love those :rofl:

Sorry, I was actually being unfair in this case. The log settings are clearly visible, not hidden. There are some other options that are hidden.

1 Like

HA hasn’t discovered my plug yet. Maybe my expectations are not set correctly. Maybe it’s just not meant to cause new devices to suddenly show up like when HA was first installed.

I just noticed a link while mousing around.
Provisioned devices
image
When I click it I see 2 lines. Are these the devices I have been trying to get up and running on my Z-Wave network?


Is one of these my plug? If so, how do I use it to control a legacy light?

Sorry to be such a noob. This is not obvious to me.

That’s the provisioning list for SmartStart. It’s the QR codes you have registered for inclusion, but the first column shows they aren’t included yet.

I enabled a few minutes of debug logging. I see this repeatedly:

2024-11-21 12:38:22.409 DEBUG (MainThread) [zwave_js_server.server] 2024-11-21T20:38:22.408Z:
2024-11-21T20:38:22.408Z DRIVER « [RES] [GetBackgroundRSSI]
                                    channel 0: -87 dBm
                                    channel 1: -98 dBm
                                    channel 2: -98 dBm
                                    channel 3: N/A
2024-11-21 12:38:22.409 DEBUG (MainThread) [zwave_js_server.server] 2024-11-21T20:38:22.409Z:
2024-11-21T20:38:22.409Z DRIVER   all queues idle
2024-11-21 12:38:22.658 DEBUG (MainThread) [zwave_js_server] Received message:
WSMessage(type=<WSMsgType.TEXT: 1>, data='{"type":"event","event":{"source":"controller","event":"statistics updated","statistics":{"messagesTX":2688,"messagesRX":2684,"messagesDroppedRX":0,"NAK":0,"CAN":0,"timeoutACK":0,"timeoutResponse":0,"timeoutCallback":0,"messagesDroppedTX":0,"backgroundRSSI":{"channel0":{"current":-87,"average":-86},"channel1":{"current":-98,"average":-100},"channel2":{"current":-98,"average":-100},"channel3":{"current":127,"average":0},"timestamp":1732221502408}}}}', extra='')

Is that enough to figure out the configured region?

Nope, that’s printed on startup. You’d need to restart the add-on.

Also, your background RSSI is terrible. Should be closer to -105 dBm. That might be the problem. You have a lot of interference for some reason. Also missing channel 3, which I believe is usually on for Long Range support.

I would suggest switching to Z-Wave JS UI at this point. You have no devices added and answering my questions about region would be trivial. You could also confirm your power levels.

Wow! There’s more to the configuration than I thought! :smiley:
I generated a bunch of keys and so forth.

After going through the configuration I get an error about being unable to open the serial port. (Cannot lock port)

I left ZWave JS enabled because it seems ZWave JS UI uses it or is an extension to it. Do I need to remove ZWave JS or something?

I really appreciate your help. :slight_smile:

No, you can’t run both of the add-ons at the same time. You should remove the core add-on and integration and make sure you re-install the integration according to the ZUI add-on documentation. https://github.com/hassio-addons/addon-zwave-js-ui/blob/669fe696d1d421a04161180fdfbb7c83634eaa9e/zwave-js-ui/DOCS.md#setting-up-the-home-assistant-z-wave-js-integration

Super! I uninstalled the base integration and now Z-Wave JS UI has added my controller!

I’m still looking for confirmation that the firmware is intended for the US market.

Maybe the background RSSI is lousy because the Beelink is mounted on the back of my 32 inch monitor. But the extension cable puts the dongle down near the floor beside my desk.

I tried to scan a QR code from the phone app and from the PC. In both cases it does not seem to be able to open the camera.

I took a photo of the barcode with my phone and tried importing that photo but it couldn’t seem to read it.

Here is part of a json dump.

  {
        "time": "2024-11-22T16:35:12.450Z",
        "event": "interview completed",
        "args": []
      },
      {
        "time": "2024-11-22T16:35:12.451Z",
        "event": "alive",
        "args": [
          0
        ]
      }
    ],
    "status": "Alive",
    "interviewStage": "Complete",
    "priorityReturnRoute": {},
    "customReturnRoute": {},
    "customSUCReturnRoutes": [],
    "applicationRoute": false,
    "hexId": "0x027a 0x0004-0x0610",
    "dbLink": "https://devices.zwave-js.io/?jumpTo=0x027a:0x0004:0x0610:1.50",
    "manufacturerId": 634,
    "productId": 1552,
    "productType": 4,
    "deviceConfig": {
      "filename": "/data/db/devices/0x027a/zst39lr.json",
      "isEmbedded": true,
      "manufacturer": "Zooz",
      "manufacturerId": 634,
      "label": "ZST39 LR",
      "description": "800 Series Long Range USB Controller",
      "devices": [
        {
          "productType": 4,
          "productId": 1552
        }
      ],
      "firmwareVersion": {
        "min": "0.0",
        "max": "255.255"
      },
      "preferred": false,
      "metadata": {
        "comments": []
      }
    },
    "productLabel": "ZST39 LR",
    "productDescription": "800 Series Long Range USB Controller",
    "manufacturer": "Zooz",
    "firmwareVersion": "1.50",
    "sdkVersion": "7.22.1",
    "protocolVersion": 3,
    "nodeType": 0,
    "endpointsCount": 0,
    "endpoints": [
      {
        "index": 0,
        "label": "Root Endpoint",
        "deviceClass": {
          "basic": 2,
          "generic": 2,
          "specific": 1
        }
      }
    ],
    "supportsSecurity": false,
    "supportsBeaming": true,
    "isControllerNode": true,
    "isListening": true,
    "isFrequentListening": false,
    "isRouting": true,
    "keepAwake": false,
    "maxDataRate": 100000,
    "deviceClass": {
      "basic": 2,
      "generic": 2,
      "specific": 1
    },
    "lastActive": 1732294817550,
    "firmwareCapabilities": {
      "firmwareUpgradable": false
    },
    "protocol": 0,
    "deviceId": "634-1552-4",
    "hasDeviceConfigChanged": false,
    "rfRegions": [
      {
        "value": 2,
        "text": "Australia/New Zealand"
      },
      {
        "value": 8,
        "text": "China"
      },
      {
        "value": 255,
        "text": "Default (EU)"
      },
      {
        "value": 11,
        "text": "Europe (Long Range)"
      },
      {
        "value": 3,
        "text": "Hong Kong"
      },
      {
        "value": 5,
        "text": "India"
      },
      {
        "value": 6,
        "text": "Israel"
      },
      {
        "value": 32,
        "text": "Japan"
      },
      {
        "value": 33,
        "text": "Korea"
      },
      {
        "value": 7,
        "text": "Russia"
      },
      {
        "value": 9,
        "text": "USA (Long Range)"
      }
    ],
    "supportsLongRange": true,
    "supportsTime": false,
    "statistics": {
      "messagesTX": 77,
      "messagesRX": 76,
      "messagesDroppedRX": 0,
      "NAK": 0,
      "CAN": 0,
      "timeoutACK": 0,
      "timeoutResponse": 0,
      "timeoutCallback": 0,
      "messagesDroppedTX": 0,
      "backgroundRSSI": {
        "channel0": {
          "current": -102,
          "average": -102
        },
        "channel1": {
          "current": -105,
          "average": -106
        },
        "channel2": {
          "current": -105,
          "average": -106
        },
        "channel3": {
          "current": -97,
          "average": -95
        },
        "timestamp": 1732294817552
      }

Quite clear if you go to the right place:

It will still require HTTPS.

I took a photo of the barcode with my phone and tried importing that photo but it couldn’t seem to read it.

Is there an error or any kind of log?

You conveniently truncated the dump right before it shows the configured region, e.g.:

  "powerlevel": 6,
  "measured0dBm": 0,
  "RFRegion": 9,

Sorry.
Well it seems I’m OK in terms of my region.

I don’t have SSL set up. I will try to get a better photo of the QR code.

Well it looks like I’m back to the other problem I have been having. While working from home it was impossible to get HA properly installed. I took it to my office across the valley and was able to complete the setup. There were some add-ins that required being at the office to install. Apparently my ISP blocks some downloads from GH? Now Z-Wave JS UI won’t start until HA Supervisor is updated, and that isn’t happening.