HA Yellow - ZAC93 - Total Loss

Lost post for 2 days during a snow storm. Once we got it back I lost connection to all my zwave devices. I’m not an expert by any means but was using ChatGPT to help diag it. Looking for some additional help as I still cant get it to work.

I’m running:

  • Home Assistant Yellow
  • Zooz ZAC93 800 Series GPIO Z-Wave module
  • Originally powered via PoE (UniFi USW Pro Max 16 PoE)

Original Issue

After a 48-hour power outage, Z-Wave became unstable.

Symptoms:

  • Controller initializes normally
  • Interviews complete
  • After ~30–40 seconds:
    • “Controller is unresponsive”
    • Soft reset fails (ZW0200 – timeout waiting for ACK)
    • Serial port reopens
    • Works briefly
    • Fails again
  • Repeats continuously

What I Tested

:one: Restored Previous Home Assistant Backups

No change.


:two: Replaced ZAC93 Controller

Installed brand new ZAC93.

Same exact behavior.

This ruled out:

  • Bad controller hardware
  • Corrupt Z-Wave firmware
  • Network RF congestion
  • Bad NVM

:three: Tested Serial Port Conflicts

Checked:

  • /dev/ttyAMA0
  • /dev/ttyAMA1
  • /dev/ttyAMA2
  • fuser
  • lsof
  • ps -ef

No other processes using the UART.


:four: Verified Boot Config

cmdline.txt:

console=tty0 console=ttyAMA2,115200n8

config.txt:

dtoverlay=disable-bt
enable_uart=1

UART correctly configured.


:five: Switched Power Sources

  • Different PoE port
  • Different Ethernet cable
  • Switched from PoE to 12V barrel adapter (1A supply)

Same behavior on all power methods.


:six: Reduced Network Load

Tested with only Node 1 (controller) active.

Still becomes unresponsive after ~30–40 seconds.

So not RF traffic.


:seven: Tested Z-Wave JS vs Z-Wave JS UI

Both show same pattern:

  • Driver ready
  • Controller alive
  • Periodic ZW0200 timeout
  • Serial reopen cycle

Current Behavior Pattern

  • Controller fully initializes
  • Reports correct RF region (USA LR)
  • Node 1 alive
  • After ~30–40 seconds:
    • No ACK from controller
    • Soft reset fails
    • Serial port reopened
    • Works briefly
    • Fails again

Repeats consistently.


What This Points To

Since:

  • Two separate ZAC93 modules show identical behavior
  • PoE vs barrel power makes no difference
  • No UART conflicts
  • Minimal network load
  • Happens even with brand new controller

The only common component left is:

:point_right: Home Assistant Yellow board (UART/GPIO path)

Likely possibilities:

  • UART hardware instability
  • GPIO voltage rail issue
  • CM4 serial peripheral instability
  • Damage from extended power outage

Next Step

I have a SONOFF 800 USB Z-Wave stick arriving next week.

This will bypass:

  • GPIO
  • UART
  • Yellow board serial path

If USB stick is stable, that confirms UART hardware issue on Yellow.

Anyone have a HA yellow board go bad in just over a year?

First having the AI create a response for you is very annoying, I almost skipped helping here…

You can only have one of these runnung or installed at a time. If you are switching back and forth it is a prime culprit to you loosing contact with the controller.

I would never use a tty prefaced URL like this. They can switch hardware during boot, especially during a long outage, and mess you up like you have explained as well.
The TTY ports can sometimes change internally, so it is suggested to use the /serial/by-id/ URL that always talks to your dongle by serial so it is always right.
You can find out what that is by using:

and looking for it under all hardware, something like this:

Once you have the long URL use that instead of the ttyxxx one.

If you have a power USB hub, then try to insert that between the antenna and the HA box.

RPis and their variants (HA boxes are such variants) are know for having a very stretched power circuit, so even if the power supply is perfect ly stable then the internal power circuit are not designed to provide enough power to externally connected devices, like USB sticks and the like.

We’ve had this conversation before. The ZAC93 is a GPIO Z-wave module and uses the RPI onboard UART. GPIO Z-wave controllers don’t support the device paths you are suggesting, it’s not a USB device.

I appreciate the help. Sorry for the AI write up but it made a lot more sense to summarize the 3 days of testing through it than what I could speak of as I still dont quite understand all of it.

I have not tried a USB device other than the Sonoff one that showed up today and it maybe what @WallyR mentioned is correct about the HA Yellow not having the power to use the dongle as it would not register any USB device plugged in. (I did switch the jumper from UART to USB as well).

I’d love to find a solution to keep the ZAC93 in use internally vs the USB dongle. I am looking into trying to understand how to do the serial vs tty that @Sir_Goodenough mentioned

Maybe the logical virtual serial port assignments being allocated as they have been discovered during power-up has changed, and they don’t match up with the configuration any more?
Example: serial port 1 is now 2, and 2 now 1. Try swapping the devices plugged into the USB ports and do a cold restart (full power off). Any change?

To clarify. I’ve been using a ZAC93 that is not USB, it plugs directing onto the Yellows board. Worked great for a little over a year.

Try AMA1, but will only run on AMA0. I don’t see anything to add a serial path?

Here is a section of the log when I start the Z-Wave JS. It works for about 40 seconds then goes into this cycle of unresponsiveness.

Blockquote
2026-03-04 17:39:36.110 CNTRLR « [Node 040] ping successful
2026-03-04 17:39:36.305 CNTRLR [Node 012] The node is alive.
2026-03-04 17:39:36.308 CNTRLR [Node 012] The node is ready to be used
2026-03-04 17:39:36.311 CNTRLR Retrieving priority route to node 12…
2026-03-04 17:39:36.314 CNTRLR « [Node 012] ping successful
2026-03-04 17:39:36.423 CNTRLR [Node 003] The node did not respond after 1 attempts, it is presumed dead
2026-03-04 17:39:36.426 CNTRLR [Node 003] The node is dead.
2026-03-04 17:39:36.435 CNTRLR [Node 003] ping failed: The node did not acknowledge the command (ZW0204)
2026-03-04 17:40:06.448 CNTRLR The controller is unresponsive
2026-03-04 17:40:06.450 DRIVER Controller missed Send Data callback. Attempting to recover…
2026-03-04 17:40:06.450 CNTRLR Performing soft reset…
2026-03-04 17:40:11.256 CNTRLR Soft reset failed: Timeout while waiting for an ACK from the controller (ZW020
0)
2026-03-04 17:40:11.258 DRIVER Automatic controller recovery failed. Returning to normal operation and hoping
for the best.
2026-03-04 17:40:11.259 CNTRLR The controller is no longer unresponsive
2026-03-04 17:40:11.260 CNTRLR [Node 053] ping failed: Timeout while waiting for a callback from the controll
er (ZW0200)
2026-03-04 17:40:16.064 CNTRLR The controller is unresponsive
2026-03-04 17:40:16.066 DRIVER Attempting to recover unresponsive controller by restarting it…
2026-03-04 17:40:16.068 CNTRLR Performing soft reset…
2026-03-04 17:40:20.874 CNTRLR Soft reset failed: Timeout while waiting for an ACK from the controller (ZW020
0)
2026-03-04 17:40:20.876 DRIVER Attempting to recover unresponsive controller by reopening the serial port…
2026-03-04 17:40:20.899 CNTRLR [Node 052] ping failed: Timeout while waiting for an ACK from the controller (
ZW0200)
2026-03-04 17:40:22.168 DRIVER Serial port reopened. Returning to normal operation and hoping for the best…
2026-03-04 17:40:22.168 CNTRLR The controller is no longer unresponsive

Blockquote
2026-03-04 17:45:56.553 DRIVER Attempting to recover unresponsive controller by reopening the serial port…
2026-03-04 17:45:57.815 DRIVER Serial port reopened. Returning to normal operation and hoping for the best…
2026-03-04 17:45:57.816 CNTRLR The controller is no longer unresponsive
2026-03-04 17:46:21.731 CNTRLR The controller is unresponsive
2026-03-04 17:46:21.734 DRIVER Attempting to recover unresponsive controller by restarting it…
2026-03-04 17:46:21.736 CNTRLR Performing soft reset…
2026-03-04 17:46:26.542 CNTRLR Soft reset failed: Timeout while waiting for an ACK from the controller (ZW020
0)
2026-03-04 17:46:26.544 DRIVER Attempting to recover unresponsive controller by reopening the serial port…
2026-03-04 17:46:27.802 DRIVER Serial port reopened. Returning to normal operation and hoping for the best…
2026-03-04 17:46:27.803 CNTRLR The controller is no longer unresponsive
ValidationError: The ‘X-Forwarded-For’ header is set but the Express ‘trust proxy’ setting is false (default). This could indicate a misconfiguration which would prevent express-rate-limit from accurately identifying users. See Page Redirection for more information.
at Object.xForwardedForHeader (file:///usr/local/lib/node_modules/zwave-js-ui/node_modules/express-rate-limit/dist/index.mjs:157:13)
at Object.wrappedValidations. [as xForwardedForHeader] (file:///usr/local/lib/node_modules/zwave-js-ui/node_modules/express-rate-limit/dist/index.mjs:369:22)
at Object.keyGenerator (file:///usr/local/lib/node_modules/zwave-js-ui/node_modules/express-rate-limit/dist/index.mjs:630:20)
at file:///usr/local/lib/node_modules/zwave-js-ui/node_modules/express-rate-limit/dist/index.mjs:682:32
at file:///usr/local/lib/node_modules/zwave-js-ui/node_modules/express-rate-limit/dist/index.mjs:663:5 {
code: ‘ERR_ERL_UNEXPECTED_X_FORWARDED_FOR’,
help: ‘Page Redirection
}
2026-03-04 17:46:51.735 CNTRLR The controller is unresponsive
2026-03-04 17:46:51.739 DRIVER Attempting to recover unresponsive controller by restarting it…
2026-03-04 17:46:51.741 CNTRLR Performing soft reset…
2026-03-04 17:46:56.550 CNTRLR Soft reset failed: Timeout while waiting for an ACK from the controller (ZW020
0)
2026-03-04 17:46:56.552 DRIVER Attempting to recover unresponsive controller by reopening the serial port…
2026-03-04 17:46:57.811 DRIVER Serial port reopened. Returning to normal operation and hoping for the best…
2026-03-04 17:46:57.813 CNTRLR The controller is no longer unresponsive
2026-03-04 17:47:21.736 CNTRLR The controller is unresponsive
2026-03-04 17:47:21.741 DRIVER Attempting to recover unresponsive controller by restarting it…
2026-03-04 17:47:21.742 CNTRLR Performing soft reset…
2026-03-04 17:47:26.552 CNTRLR Soft reset failed: Timeout while waiting for an ACK from the controller (ZW020
0)
2026-03-04 17:47:26.554 DRIVER Attempting to recover unresponsive controller by reopening the serial port…
2026-03-04 17:47:27.814 DRIVER Serial port reopened. Returning to normal operation and hoping for the best…
2026-03-04 17:47:27.815 CNTRLR The controller is no longer unresponsive
s6-rc: info: service legacy-services: stopping
2026-03-04 17:47:34.893 CNTRLR [Node 074] Error during node interview: driver instance destroyed (ZW0102)
2026-03-04 17:47:34.895 CNTRLR [Node 066] Error during node interview: driver instance destroyed (ZW0102)
2026-03-04 17:47:34.896 CNTRLR [Node 060] Error during node interview: driver instance destroyed (ZW0102)
2026-03-04 17:47:34.898 CNTRLR [Node 061] Error during node interview: driver instance destroyed (ZW0102)
2026-03-04 17:47:34.899 CNTRLR [Node 065] Error during node interview: driver instance destroyed (ZW0102)
2026-03-04 17:47:34.901 CNTRLR [Node 075] Error during node interview: driver instance destroyed (ZW0102)
2026-03-04 17:47:34.908 CNTRLR [Node 077] Error during node interview: driver instance destroyed (ZW0102)

I did figure out how to point it to /dev/serial0; however that is having the same issue. Restart JS UI and watch the logs. Controller goes into a responsive state and restarts numerous times until this:

2026-03-04 18:51:09.116 INFO Z-WAVE: Controller status: Controller is unresponsive
2026-03-04 18:51:09.118 DRIVER Attempting to recover unresponsive controller by restarting it…
2026-03-04 18:51:09.119 CNTRLR Performing soft reset…
2026-03-04 18:51:13.927 CNTRLR Soft reset failed: Timeout while waiting for an ACK from the controller (ZW020
0)
2026-03-04 18:51:13.931 DRIVER Attempting to recover unresponsive controller by reopening the serial port…
2026-03-04 18:51:15.192 DRIVER Serial port reopened. Returning to normal operation and hoping for the best…
2026-03-04 18:51:15.193 CNTRLR The controller is no longer unresponsive
2026-03-04 18:51:15.196 INFO Z-WAVE: Controller status: Controller is Ready
2026-03-04 18:51:15.954 INFO Z-WAVE: [Node 049] Metadata updated: 50-0-value-66049
2026-03-04 18:51:15.959 INFO Z-WAVE: [Node 049] Value updated: 50-0-value-66049 0 => 0
2026-03-04 18:51:15.974 INFO Z-WAVE: [Node 049] Metadata updated: 50-0-value-66561
2026-03-04 18:51:15.978 INFO Z-WAVE: [Node 049] Value updated: 50-0-value-66561 123.66 => 124.02
2026-03-04 18:51:15.989 INFO Z-WAVE: [Node 049] Metadata updated: 50-0-value-66817
2026-03-04 18:51:15.993 INFO Z-WAVE: [Node 049] Value updated: 50-0-value-66817 0 => 0
2026-03-04 18:51:26.062 INFO APP: ::ffff:127.0.0.1 GET /health/zwave 301 162 - 3.628 ms
2026-03-04 18:51:39.115 CNTRLR The controller is unresponsive
2026-03-04 18:51:39.116 INFO Z-WAVE: Controller status: Controller is unresponsive
2026-03-04 18:51:39.118 DRIVER Attempting to recover unresponsive controller by restarting it…
2026-03-04 18:51:39.120 CNTRLR Performing soft reset…
2026-03-04 18:51:43.931 CNTRLR Soft reset failed: Timeout while waiting for an ACK from the controller (ZW020
0)
2026-03-04 18:51:43.933 DRIVER Attempting to recover unresponsive controller by reopening the serial port…
2026-03-04 18:51:53.954 DRIVER Failed to open the serial port: Error: Resource busy, cannot open /dev/serial0
2026-03-04 18:51:53.961 ERROR APP: Unhandled Rejection, reason: ZWaveError: Failed to open the serial port: Error: Resource busy, cannot open /dev/serial0 (ZW0100)
ZWaveError: Failed to open the serial port: Error: Resource busy, cannot open /dev/serial0 (ZW0100)
at Driver.openSerialport (file:///opt/node_modules/zwave-js/src/lib/driver/Driver.ts:1852:9)
at recoverByReopeningSerialport (file:///opt/node_modules/zwave-js/src/lib/driver/Driver.ts:4676:4)
2026-03-04 18:51:56.206 INFO APP: ::ffff:127.0.0.1 GET /health/zwave 301 162 - 1.544 ms