Can't add Matter over WiFi or Thread devicve to dockerized HA

Hello, I have a Home Assistant, python-matter-server and bnutzer/otbr-tcp running in a docker on my Debian based server. All set in host network mode. My edge device is SLZB-MR4U with EFR32MG26 in Matter-over-Thread mode. My local network is based on Unifi, with multiple WLANs.

First I’ve tried adding Govee Uplighter Floor Lamp, which I assume is Matter over Wi-Fi requiring IPv6. My ISP is not providing IPv6 address space, so I’ve enabled it locally on all my VLANs. The process fails with “Something went wrong”, I have this in my matter-server:

matter-server    | 2025-12-27 12:24:14.829 (MainThread) INFO [matter_server.server.device_controller] Starting Matter commissioning using Node ID 15 and IP fe80::5ee7:53ff:fe82:7e6c.
matter-server    | 2025-12-27 12:24:18.627 (Dummy-2) CHIP_ERROR [chip.native.EM] <<5 [E:7149i with Node: <0000000000000000, 0> S:0 M:24328030] (U) Msg Retransmission to 0:0000000000000000 failure (max retries:4)
matter-server    | 2025-12-27 12:24:25.279 (Dummy-2) CHIP_ERROR [chip.native.SC] PASESession timed out while waiting for a response from the peer. Expected message type was 33
matter-server    | 2025-12-27 12:24:25.279 (Dummy-2) CHIP_ERROR [chip.native.ZCL] Secure Pairing Failed
matter-server    | 2025-12-27 12:24:25.279 (Dummy-2) WARNING [chip.ChipDeviceCtrl] Failed to establish secure session to device: src/controller/python/ChipDeviceController-ScriptDevicePairingDelegate.cpp:96: CHIP Error 0x00000003: Incorrect state
matter-server    | 2025-12-27 12:24:25.280 (MainThread) ERROR [matter_server.server.client_handler] [140058819727376] Error while handling: commission_on_network: Commissioning failed for node 15.

I see that the lamp is connecting to my IOT Wi-Fi in the process, and is indeed getting IPv6 address.

When adding Aqara FP300, which I assume is Matter over Thread, I’m getting the same “Something went wrong” message and this in matter-server:

matter-server    | 2025-12-27 02:35:52.645 (Dummy-2) INFO [chip.ChipDeviceCtrl] Established secure session with Device
matter-server    | 2025-12-27 02:37:02.914 (Dummy-2) CHIP_ERROR [chip.native.EM] <<5 [E:7140i with Node: <FFFFFFFB00000000, 0> S:17219 M:235650998] (S) Msg Retransmission to 0:FFFFFFFB00000000 failure (max retries:4)
matter-server    | 2025-12-27 02:37:17.880 (Dummy-2) CHIP_ERROR [chip.native.CTL] Error on commissioning step 'SendPAICertificateRequest': 'src/app/CommandSender.cpp:354: CHIP Error 0x00000032: Timeout'
matter-server    | 2025-12-27 02:38:33.289 (Dummy-2) CHIP_ERROR [chip.native.EM] <<5 [E:7141i with Node: <FFFFFFFB00000000, 0> S:17219 M:235651000] (S) Msg Retransmission to 0:FFFFFFFB00000000 failure (max retries:4)
matter-server    | 2025-12-27 02:38:48.683 (Dummy-2) WARNING [chip.ChipDeviceCtrl] Failed to commission: src/app/CommandSender.cpp:354: CHIP Error 0x00000032: Timeout
matter-server    | 2025-12-27 02:38:48.684 (MainThread) ERROR [matter_server.server.client_handler] [140058819727376] Error while handling: commission_on_network: Commissioning failed for node 13.
matter-server    | 2025-12-27 12:20:39.930 (MainThread) INFO [matter_server.server.device_controller] Starting Matter commissioning using Node ID 14 and IP fdd3:447d:80a4:1:a464:2402:75bd:2803.
matter-server    | 2025-12-27 12:20:40.804 (Dummy-2) INFO [chip.ChipDeviceCtrl] Established secure session with Device
matter-server    | 2025-12-27 12:21:54.365 (Dummy-2) CHIP_ERROR [chip.native.EM] <<5 [E:7147i with Node: <FFFFFFFB00000000, 0> S:17220 M:173664052] (S) Msg Retransmission to 0:FFFFFFFB00000000 failure (max retries:4)
matter-server    | 2025-12-27 12:22:05.968 (Dummy-2) CHIP_ERROR [chip.native.CTL] Error on commissioning step 'SendPAICertificateRequest': 'src/app/CommandSender.cpp:354: CHIP Error 0x00000032: Timeout'
matter-server    | 2025-12-27 12:23:21.347 (Dummy-2) CHIP_ERROR [chip.native.EM] <<5 [E:7148i with Node: <FFFFFFFB00000000, 0> S:17220 M:173664058] (S) Msg Retransmission to 0:FFFFFFFB00000000 failure (max retries:4)
matter-server    | 2025-12-27 12:23:36.783 (Dummy-2) WARNING [chip.ChipDeviceCtrl] Failed to commission: src/app/CommandSender.cpp:354: CHIP Error 0x00000032: Timeout
matter-server    | 2025-12-27 12:23:36.785 (MainThread) ERROR [matter_server.server.client_handler] [140058819727376] Error while handling: commission_on_network: Commissioning failed for node 14.

I see a wall of messages in my otbr docker, there are some standard errors, but this looks like a huge issue:

otbr_1  | 00:06:40.279 [I] DataPollHandlr: Rx data poll, src:0xd801, qed_msgs:8, rss:-71, ack-fp:1
otbr_1  | 00:06:40.386 [I] DataPollHandlr: Rx data poll, src:0xd801, qed_msgs:8, rss:-71, ack-fp:1
otbr_1  | 00:06:40.493 [I] DataPollHandlr: Rx data poll, src:0xd801, qed_msgs:8, rss:-72, ack-fp:1
otbr_1  | 00:06:40.590 [I] DataPollHandlr: Rx data poll, src:0xd801, qed_msgs:8, rss:-72, ack-fp:1
otbr_1  | 00:06:40.642 [W] P-RadioSpinel-: radio tx timeout
otbr_1  | 00:06:40.645 [C] P-RadioSpinel-: Failed to communicate with RCP - no response from RCP during initialization
otbr_1  | 00:06:40.645 [C] P-RadioSpinel-: This is not a bug and typically due a config error (wrong URL parameters) or bad RCP image:
otbr_1  | 00:06:40.645 [C] P-RadioSpinel-: - Make sure RCP is running the correct firmware
otbr_1  | 00:06:40.645 [C] P-RadioSpinel-: - Double check the config parameters passed as `RadioURL` input
otbr_1  | 00:06:40.645 [C] Platform------: HandleRcpTimeout() at radio_spinel.cpp:2013: RadioSpinelNoResponse
otbr_1  | Sleeping for 2s to give socat time to come up ... Proceeding.
otbr_1  | Starting otbr-agent ...

I also have a lot of messages like this:

otbr_1  | 00:00:03.254 [I] Mac-----------: Frame rx failed, error:UnknownNeighbor, len:22, seqnum:39, type:Cmd(DataReq), src:0xd801, dst:0xd800, sec:yes, ackreq:yes, radio:15.4
otbr_1  | 00:00:03.351 [I] Mac-----------: Frame rx failed, error:UnknownNeighbor, len:22, seqnum:40, type:Cmd(DataReq), src:0xd801, dst:0xd800, sec:yes, ackreq:yes, radio:15.4
otbr_1  | 00:00:03.459 [I] Mac-----------: Frame rx failed, error:UnknownNeighbor, len:22, seqnum:41, type:Cmd(DataReq), src:0xd801, dst:0xd800, sec:yes, ackreq:yes, radio:15.4

In HA integrations all looks fine:

Any idea what’s wrong? Any tip would be helpful :slight_smile:

Using VLAN’s is asking for trouble when it comes to Matter, so if possible, try adding your Govee light from the same network as HA/Matter Server.

For the Thread part, make sure that OTBR can eventually connect to your Thread radio. If it can’t, that obviously needs to be fixed first.

I see a bunch of messages when it’s idling. This connection error comes up only when trying to add new device.
Example from few minutes:

otbr_1  | 00:54:04.182 [I] BorderRouting-: Received NA from router fe80:0:0:0:962a:6fff:feee:fc68
otbr_1  | 00:54:06.901 [I] DataPollHandlr: Rx data poll, src:0xd801, qed_msgs:0, rss:-55, ack-fp:0
otbr_1  | 00:54:07.131 [I] Mle-----------: Send Advertisement (ff02:0:0:0:0:0:0:1)
otbr_1  | 00:54:07.154 [I] MeshForwarder-: Sent IPv6 UDP msg, len:90, chksum:a2e4, ecn:no, to:0xffff, sec:no, prio:net, radio:all
otbr_1  | 00:54:07.154 [I] MeshForwarder-:     src:[fe80:0:0:0:b43e:5ad7:60e3:2a63]:19788
otbr_1  | 00:54:07.154 [I] MeshForwarder-:     dst:[ff02:0:0:0:0:0:0:1]:19788
otbr_1  | 00:54:11.901 [I] DataPollHandlr: Rx data poll, src:0xd801, qed_msgs:0, rss:-53, ack-fp:0
otbr_1  | 00:54:13.253 [I] BorderRouting-: Evaluating routing policy
otbr_1  | 00:54:13.253 [I] BorderRouting-: Evaluating NAT64 prefix
otbr_1  | 00:54:13.253 [I] BorderRouting-: Preparing RA
otbr_1  | 00:54:13.253 [I] BorderRouting-: - RA Header - flags - M:0 O:0 S:1
otbr_1  | 00:54:13.253 [I] BorderRouting-: - RA Header - default route - lifetime:0
otbr_1  | 00:54:13.253 [I] BorderRouting-: - RIO fdd3:447d:80a4:1::/64 (lifetime:1800, prf:medium)
^Fotbr_1  | 00:54:13.253 [I] BorderRouting-: Sent RA on infra netif 2
otbr_1  | 00:54:13.253 [I] BorderRouting-: Will evaluate routing policy in 03:07.764 (187764 msec)
otbr_1  | 00:54:13.254 [I] BorderRouting-: Received RA from fe80:0:0:0:1e2c:64e:7ad3:c5dd on infra netif 2 (this BR routing-manager)
otbr_1  | 00:54:16.908 [I] DataPollHandlr: Rx data poll, src:0xd801, qed_msgs:0, rss:-52, ack-fp:0
otbr_1  | 00:54:20.058 [I] Mle-----------: Send Advertisement (ff02:0:0:0:0:0:0:1)
otbr_1  | 00:54:20.080 [I] MeshForwarder-: Sent IPv6 UDP msg, len:90, chksum:9386, ecn:no, to:0xffff, sec:no, prio:net, radio:all
otbr_1  | 00:54:20.080 [I] MeshForwarder-:     src:[fe80:0:0:0:b43e:5ad7:60e3:2a63]:19788
otbr_1  | 00:54:20.080 [I] MeshForwarder-:     dst:[ff02:0:0:0:0:0:0:1]:19788
otbr_1  | 00:54:20.789 [I] MeshForwarder-: Sent IPv6 Frag msg, len:1280, chksum:0000, ecn:no, to:0xffff, sec:yes, prio:low, radio:all
otbr_1  | 00:54:20.789 [I] MeshForwarder-:     src:[fe80:0:0:0:b43e:5ad7:60e3:2a63]
otbr_1  | 00:54:20.789 [I] MeshForwarder-:     dst:[ff12:0:0:0:0:0:0:8384]
otbr_1  | 00:54:20.906 [I] MeshForwarder-: Sent IPv6 Frag msg, len:434, chksum:0000, ecn:no, to:0xffff, sec:yes, prio:low, radio:all
otbr_1  | 00:54:20.906 [I] MeshForwarder-:     src:[fe80:0:0:0:b43e:5ad7:60e3:2a63]
otbr_1  | 00:54:20.906 [I] MeshForwarder-:     dst:[ff12:0:0:0:0:0:0:8384]
otbr_1  | 00:54:21.912 [I] DataPollHandlr: Rx data poll, src:0xd801, qed_msgs:0, rss:-53, ack-fp:0
otbr_1  | 00:54:26.909 [I] DataPollHandlr: Rx data poll, src:0xd801, qed_msgs:0, rss:-57, ack-fp:0
otbr_1  | 00:54:31.905 [I] DataPollHandlr: Rx data poll, src:0xd801, qed_msgs:0, rss:-52, ack-fp:0
otbr_1  | 00:54:32.665 [I] Mle-----------: Send Advertisement (ff02:0:0:0:0:0:0:1)
otbr_1  | 00:54:32.687 [I] MeshForwarder-: Sent IPv6 UDP msg, len:90, chksum:8979, ecn:no, to:0xffff, sec:no, prio:net, radio:all
otbr_1  | 00:54:32.687 [I] MeshForwarder-:     src:[fe80:0:0:0:b43e:5ad7:60e3:2a63]:19788
otbr_1  | 00:54:32.687 [I] MeshForwarder-:     dst:[ff02:0:0:0:0:0:0:1]:19788
otbr_1  | 00:54:32.691 [I] Mle-----------: PeriodicParentSearch: Check interval passed
otbr_1  | 00:54:32.691 [I] Mle-----------: PeriodicParentSearch: (Re)starting timer for check interval
otbr_1  | 00:54:36.914 [I] DataPollHandlr: Rx data poll, src:0xd801, qed_msgs:0, rss:-51, ack-fp:0
otbr_1  | 00:54:41.911 [I] DataPollHandlr: Rx data poll, src:0xd801, qed_msgs:0, rss:-49, ack-fp:0
otbr_1  | 00:54:46.908 [I] DataPollHandlr: Rx data poll, src:0xd801, qed_msgs:0, rss:-51, ack-fp:0
otbr_1  | 00:54:47.458 [I] Mle-----------: Send Advertisement (ff02:0:0:0:0:0:0:1)
otbr_1  | 00:54:47.480 [I] MeshForwarder-: Sent IPv6 UDP msg, len:90, chksum:831f, ecn:no, to:0xffff, sec:no, prio:net, radio:all
otbr_1  | 00:54:47.480 [I] MeshForwarder-:     src:[fe80:0:0:0:b43e:5ad7:60e3:2a63]:19788
otbr_1  | 00:54:47.480 [I] MeshForwarder-:     dst:[ff02:0:0:0:0:0:0:1]:19788
otbr_1  | 00:54:50.800 [I] MeshForwarder-: Sent IPv6 Frag msg, len:1280, chksum:0000, ecn:no, to:0xffff, sec:yes, prio:low, radio:all
otbr_1  | 00:54:50.800 [I] MeshForwarder-:     src:[fe80:0:0:0:b43e:5ad7:60e3:2a63]
otbr_1  | 00:54:50.800 [I] MeshForwarder-:     dst:[ff12:0:0:0:0:0:0:8384]
otbr_1  | 00:54:50.917 [I] MeshForwarder-: Sent IPv6 Frag msg, len:434, chksum:0000, ecn:no, to:0xffff, sec:yes, prio:low, radio:all
otbr_1  | 00:54:50.917 [I] MeshForwarder-:     src:[fe80:0:0:0:b43e:5ad7:60e3:2a63]
otbr_1  | 00:54:50.917 [I] MeshForwarder-:     dst:[ff12:0:0:0:0:0:0:8384]
otbr_1  | 00:54:51.913 [I] DataPollHandlr: Rx data poll, src:0xd801, qed_msgs:0, rss:-50, ack-fp:0
otbr_1  | 00:54:56.912 [I] DataPollHandlr: Rx data poll, src:0xd801, qed_msgs:0, rss:-53, ack-fp:0
otbr_1  | 00:54:56.919 [I] Mac-----------: Frame rx failed, error:Duplicated, len:22, seqnum:6, type:Cmd(DataReq), src:0xd801, dst:0xd800, sec:yes, ackreq:yes, radio:15.4
otbr_1  | 00:54:59.234 [I] Mle-----------: Send Advertisement (ff02:0:0:0:0:0:0:1)
otbr_1  | 00:54:59.254 [I] MeshForwarder-: Sent IPv6 UDP msg, len:90, chksum:9d1b, ecn:no, to:0xffff, sec:no, prio:net, radio:all
otbr_1  | 00:54:59.254 [I] MeshForwarder-:     src:[fe80:0:0:0:b43e:5ad7:60e3:2a63]:19788
otbr_1  | 00:54:59.254 [I] MeshForwarder-:     dst:[ff02:0:0:0:0:0:0:1]:19788
otbr_1  | 00:55:00.315 [I] ChildSupervsn-: Sending supervision message to child 0xd801
otbr_1  | 00:55:00.353 [I] DataPollHandlr: Rx data poll, src:0xd801, qed_msgs:1, rss:-51, ack-fp:1
otbr_1  | 00:55:04.177 [I] BorderRouting-: Sent Neighbor Solicitation to fe80:0:0:0:962a:6fff:feee:fc68 - attempt:1/5

OTBR GUI is also showing proper radio firmware:

Right… I’ve tried adding it to the same WLAN, didn’t help. I can ping the device from HA and matter-server docker using both IPv4 and v6.

Can’t tell if you tried factory reset matter device

Matter, HA and device need to be on same vlan.

Thanks. I’ve moved everything to one VLAN. This got me a bunch of DNS errors like this:

2025-12-28 16:17:00.451 (Dummy-2) CHIP_ERROR [chip.native.DIS] DNSSD packet parsing failed (for SRV records)
2025-12-28 16:17:00.451 (Dummy-2) CHIP_ERROR [chip.native.DIS] DNSSD packet parsing failed (for non-srv records)

Disabling mDNS in Unifi helped, but I still can’t add the lamp:

2025-12-28 16:21:54.579 (MainThread) INFO [matter_server.server.device_controller] Starting Matter commissioning using Node ID 19 and IP fe80::5ee7:53ff:fe82:7e6c.
2025-12-28 16:21:58.205 (Dummy-2) CHIP_ERROR [chip.native.EM] <<5 [E:9935i with Node: <0000000000000000, 0> S:0 M:106728620] (U) Msg Retransmission to 0:0000000000000000 failure (max retries:4)
2025-12-28 16:22:05.032 (Dummy-2) CHIP_ERROR [chip.native.SC] PASESession timed out while waiting for a response from the peer. Expected message type was 33
2025-12-28 16:22:05.032 (Dummy-2) CHIP_ERROR [chip.native.ZCL] Secure Pairing Failed
2025-12-28 16:22:05.032 (Dummy-2) WARNING [chip.ChipDeviceCtrl] Failed to establish secure session to device: src/controller/python/ChipDeviceController-ScriptDevicePairingDelegate.cpp:96: CHIP Error 0x00000003: Incorrect state
2025-12-28 16:22:05.032 (MainThread) ERROR [matter_server.server.client_handler] [139704562187296] Error while handling: commission_on_network: Commissioning failed for node 19.

I might have to try going back to 1 VLAN…

I’ve seen a lot of complaints with funds issues but no resolution

I see another suggesting it is router side error and another suggesting it’s device specific

My guess is this isn’t vlan problem at least . Do you have other device to test with?

Not a Matter over Wi-Fi. I will have to wait until something new arrives at my doorstep. Thank you for the support!

I still have issues with EFR32MG26 as my border device, but this is probably unrelated. I’ve found this patch that I don’t have, as I’m running in containers…