Describe the issue you are experiencing
Title: ZBT-2 Matter-over-Thread commissioning fails after device joins Thread — repeated 802.15.4 NoAck
I am unable to commission an IKEA GRILLPLATS Matter-over-Thread outlet using a Home Assistant Connect ZBT-2 and the OpenThread Border Router app.
Environment
- Home Assistant OS 18.2 (amd64 / qemux86-64)
- HAOS is running as a VM on TrueNAS
- Home Assistant Core 2026.8.2
- Supervisor 2026.07.5
- OpenThread Border Router 3.1.1
- Matter Server 9.2.0
- Home Assistant Connect ZBT-2 passed through directly to the HAOS VM
- Android Home Assistant Companion app used for commissioning
- Device: IKEA GRILLPLATS Matter-over-Thread outlet
Problem
Commissioning proceeds normally through discovery and Thread credential provisioning. The Android commissioning flow then reaches:
"Checking connectivity to Thread network"
After waiting, it fails with:
"Can't reach device"
OTBR itself appears healthy. It successfully attaches to the Thread network and becomes leader/primary backbone router:
Mle-----------: Role detached -> leader
[NOTE]-BBA-----: BackboneAgent: Backbone Router becomes Primary!
During a failed commissioning attempt, the IKEA device appears to successfully join the Thread mesh because OTBR allocates another router ID:
RouterTable---: Allocate router id 51
Approximately 2.5 minutes later, OTBR begins reporting repeated failures communicating with that node over 802.15.4:
MeshForwarder-: Failed to send IPv6 UDP msg ... error:NoAck ... radio:15.4
For example:
00:50:57.263 [N] MeshForwarder-: Failed to send IPv6 UDP msg, len:96, chksum:b4e3, ecn:no, to:8ee2208b877047f5, sec:no, error:NoAck, prio:net, radio:15.4
00:50:57.263 [N] MeshForwarder-: src:[fe80:0:0:0:88c4:49ea:7e96:da97]:19788
00:50:57.263 [N] MeshForwarder-: dst:[fe80:0:0:0:8ce2:208b:8770:47f5]:19788
I observed the same pattern on an earlier attempt:
RouterTable---: Allocate router id 59
MeshForwarder-: Failed to send IPv6 UDP msg ... error:NoAck ... radio:15.4
RouterTable---: Release router id 59
Matter Server does not appear to receive the commissioning transaction. It continues to report zero nodes, with no new Matter node appearing during these attempts.
Troubleshooting performed
- Confirmed HAOS VM has a global IPv6 address, IPv6 gateway, and IPv6 is ready
- Confirmed
ha docker info reports enable_ipv6: true
- OTBR consistently becomes Thread leader
- Successfully synced HA Thread credentials to Android
- Factory-reset GRILLPLATS before commissioning attempts
- Tested with the GRILLPLATS and Android tablet approximately 6 feet from the ZBT-2
- Initially tested Thread channel 15
- Changed Thread network to channel 25 and confirmed OTBR itself was actually operating on channel 25
- Cleared/rebuilt the stale HA Thread dataset after the channel change and resynced credentials to Android
- Same commissioning failure on channels 15 and 25
- Restarted HA/OTBR/Matter Server during troubleshooting
- Confirmed TREL was enabled with
ot-ctl trel
- Temporarily disabled TREL using
ot-ctl trel disable and repeated commissioning without restarting OTBR
- Disabling TREL did not change the behavior
The repeated sequence of:
Allocate router id
-> device remains unreachable during Android's Thread connectivity check
-> repeated radio:15.4 error:NoAck
-> commissioning fails
seems potentially significant.
Is this a known ZBT-2/OTBR issue, or is there another diagnostic I can run to determine why the newly joined Thread node becomes unreachable?
What type of installation are you running?
Home Assistant OS
Which operating system are you running on?
Home Assistant Operating System
Which app are you reporting an issue with?
OpenThread Border Router
What is the version of the app?
3.1.1
Steps to reproduce the issue
- Configure Home Assistant Connect ZBT-2 as the OpenThread Border Router.
- Confirm OTBR is running and the Thread network is active.
- Sync the Home Assistant Thread credentials to an Android device.
- Factory-reset the IKEA GRILLPLATS Matter-over-Thread outlet.
- In the Home Assistant Android app, select Add Device → Matter and scan the device's Matter QR code.
- Commissioning begins and reaches "Checking connectivity to Thread network."
- After waiting, commissioning fails with "Can't reach device."
- OTBR logs show the device joining/receiving a router ID, followed by repeated
MeshForwarder ... error:NoAck ... radio:15.4 messages.
Reproduces consistently, including with the device approximately 6 feet from the ZBT-2 and on Thread channels 15 and 25.
System Health information
System Information
| version |
core-2026.8.3 |
| installation_type |
Home Assistant OS |
| dev |
false |
| hassio |
true |
| docker |
true |
| container_arch |
amd64 |
| user |
root |
| virtualenv |
false |
| python_version |
3.14.6 |
| os_name |
Linux |
| os_version |
6.18.39-haos |
| arch |
x86_64 |
| timezone |
America/New_York |
| config_dir |
/config |
Home Assistant Cloud
| logged_in |
true |
| subscription_expiration |
December 28, 2026 at 7:00 PM |
| relayer_connected |
true |
| relayer_region |
us-east-1 |
| remote_enabled |
true |
| remote_connected |
true |
| remote_server |
us-east-1-19.ui.nabu.casa |
| alexa_enabled |
false |
| google_enabled |
false |
| cloud_ice_servers_enabled |
true |
| certificate_status |
ready |
| instance_id |
da4bca4920ae40919b8f87df4dd99f90 |
| iot_state |
connected |
| iot_tries |
0 |
| certificate_expire_date |
November 14, 2026 at 10:08 PM |
| certificate_fingerprint |
f4801ca28f90b9765285e42316cf6e02f28ccf0d |
| certificate_alternative_names |
undefined |
| can_reach_cert_server |
ok |
| can_reach_cloud_auth |
ok |
| can_reach_cloud |
ok |
Home Assistant Supervisor
| host_os |
Home Assistant OS 18.2 |
| update_channel |
stable |
| supervisor_version |
supervisor-2026.07.5 |
| agent_version |
1.10.0 |
| docker_version |
29.6.2 |
| disk_total |
33.7 GB |
| disk_used |
8.8 GB |
| nameservers |
192.168.1.1, 2600:4040:5416:3f00::1 |
| healthy |
true |
| supported |
true |
| host_connectivity |
true |
| supervisor_connectivity |
true |
| ntp_synchronized |
true |
| virtualization |
kvm |
| board |
ova |
| supervisor_api |
ok |
| version_api |
ok |
| installed_addons |
Mosquitto broker (7.1.0), Zigbee2MQTT (2.13.0-1), Z-Wave JS (1.7.1), OpenThread Border Router (3.1.1), Matter Server (9.2.0), Terminal & SSH (10.4.0) |
Dashboards
| dashboards |
4 |
| resources |
0 |
| views |
0 |
| mode |
storage |
Network Configuration
| adapters |
lo (disabled), enp0s3 (enabled, default, auto), docker0 (disabled), hassio (disabled), vethe013554 (disabled), veth8509371 (disabled), vethbd29f00 (disabled), veth51fa891 (disabled), veth60077e1 (disabled), veth3908378 (disabled), vethe780392 (disabled), vethcb693f8 (disabled), veth0d771e6 (disabled), veth9c88b40 (disabled), wpan0 (disabled) |
| ipv4_addresses |
lo (127.0.0.1/8), enp0s3 (192.168.1.174/24), docker0 (172.30.232.1/23), hassio (172.30.32.1/23), vethe013554 (), veth8509371 (), vethbd29f00 (), veth51fa891 (), veth60077e1 (), veth3908378 (), vethe780392 (), vethcb693f8 (), veth0d771e6 (), veth9c88b40 (), wpan0 () |
| ipv6_addresses |
lo (::1/128), enp0s3 (2600:4040:5416:3f00:15c9:64b9:98da:2893/64, fe80::93f0:3a91:8eaa:fed3/64), docker0 (fd4d:1580:d6e7::1/64, fe80::ec67:21ff:fe14:a2e6/64), hassio (fd0c:ac1e:2100::1/48, fe80::3cf1:9fff:feed:8fdf/64), vethe013554 (fe80::6cd9:b8ff:fe63:9086/64), veth8509371 (fe80::b0f6:29ff:fec9:5d83/64), vethbd29f00 (fe80::54dd:53ff:fee1:a4b6/64), veth51fa891 (fe80::c87b:1bff:fe77:10ba/64), veth60077e1 (fe80::802c:28ff:fe32:e04b/64), veth3908378 (fe80::40b3:d4ff:fe6b:4147/64), vethe780392 (fe80::48ca:e2ff:fe10:c29/64), vethcb693f8 (fe80::a8c5:bfff:fee6:3012/64), veth0d771e6 (fe80::dc36:e0ff:fe67:1424/64), veth9c88b40 (fe80::80f5:48ff:fe09:48a4/64), wpan0 (fd02:33a9:d0eb:ac66:0:ff:fe00:fc11/64, fd0a:1a71:3d07:1:3d98:81ec:9e96:a692/64, fd02:33a9:d0eb:ac66:0:ff:fe00:fc38/64, fd02:33a9:d0eb:ac66:0:ff:fe00:fc10/64, fd02:33a9:d0eb:ac66:0:ff:fe00:fc00/64, fd02:33a9:d0eb:ac66:0:ff:fe00:5000/64, fd02:33a9:d0eb:ac66:8333:603e:fa4e:c565/64, fe80::88c4:49ea:7e96:da97/64) |
| announce_addresses |
192.168.1.174, 2600:4040:5416:3f00:15c9:64b9:98da:2893, fe80::93f0:3a91:8eaa:fed3 |
Recorder
| oldest_recorder_run |
August 1, 2026 at 12:38 PM |
| current_recorder_run |
August 22, 2026 at 9:43 AM |
| estimated_db_size |
12.99 MiB |
| database_engine |
sqlite |
| database_version |
3.53.2 |
Anything in the Supervisor logs that might be useful for us?
2026-08-16 12:07:49.899 WARNING (MainThread) [homeassistant.components.otbr.config_flow] Failed to communicate with OTBR@http://core-openthread-border-router:8081: Cannot connect to host core-openthread-border-router:8081 ssl:default [Timeout while contacting DNS servers]
2026-08-16 12:12:09.795 WARNING (MainThread) [homeassistant.components.onkyo.media_player] Input source "TV" for entity: media_player.tx_rz50 is not in the list. Check integration options
2026-08-16 12:12:09.832 WARNING (MainThread) [homeassistant.components.onkyo.media_player] Listening mode "DOLBY SURROUND THX CINEMA ··· PLII/PLIIx THX CINEMA" for entity: media_player.tx_rz50 is not in the list. Check integration options
2026-08-16 12:12:10.074 WARNING (MainThread) [homeassistant.components.onkyo.media_player] Input source "MAIN SOURCE" for entity: media_player.tx_rz50_zone_2 is not in the list. Check integration options
2026-08-16 12:12:10.197 WARNING (MainThread) [homeassistant.components.onkyo.media_player] Input source "MAIN SOURCE" for entity: media_player.tx_rz50_zone_3 is not in the list. Check integration options
2026-08-16 12:12:13.959 WARNING (MainThread) [homeassistant.components.onkyo.media_player] Input source "TV" for entity: media_player.tx_rz50 is not in the list. Check integration options
2026-08-16 12:12:13.999 WARNING (MainThread) [homeassistant.components.onkyo.media_player] Listening mode "DOLBY SURROUND THX CINEMA ··· PLII/PLIIx THX CINEMA" for entity: media_player.tx_rz50 is not in the list. Check integration options
Anything in the app logs that might be useful for us?
[08:04:11] INFO: Starting otbr-agent...
[NOTE]-AGENT---: Running 0.3.0-ec16e396
[NOTE]-AGENT---: Thread version: 1.4.0
[NOTE]-AGENT---: Thread interface: wpan0
[NOTE]-AGENT---: Radio URL: spinel+hdlc+uart:///dev/serial/by-id/usb-Nabu_Casa_ZBT-2_E072A1D8B134-if00?uart-baudrate=460800&uart-flow-control
[NOTE]-AGENT---: Radio URL: trel://enp0s3
[NOTE]-ILS-----: Infra link selected: enp0s3
00:00:08.276 [N] Mle-----------: RLOC16 5000 -> fffe
00:00:08.986 [N] Mle-----------: Attach attempt 1, AnyPartition reattaching with Active Dataset
00:00:15.537 [N] Mle-----------: Attach attempt 1, AnyPartition reattaching with Pending Dataset
00:00:22.040 [N] RouterTable---: Allocate router id 20
00:00:22.040 [N] Mle-----------: RLOC16 fffe -> 5000
00:00:22.042 [N] Mle-----------: Role detached -> leader
00:00:22.043 [N] Mle-----------: Partition ID 0x746b4fd
[NOTE]-BBA-----: BackboneAgent: Backbone Router becomes Primary!
00:48:15.413 [N] RouterTable---: Allocate router id 51
00:50:57.263 [N] MeshForwarder-: Failed to send IPv6 UDP msg, len:96, chksum:b4e3, ecn:no, to:8ee2208b877047f5, sec:no, error:NoAck, prio:net, radio:15.4
00:50:57.263 [N] MeshForwarder-: src:[fe80:0:0:0:88c4:49ea:7e96:da97]:19788
00:50:57.263 [N] MeshForwarder-: dst:[fe80:0:0:0:8ce2:208b:8770:47f5]:19788
00:50:58.326 [N] MeshForwarder-: Failed to send IPv6 UDP msg, len:96, chksum:f4bb, ecn:no, to:8ee2208b877047f5, sec:no, error:NoAck, prio:net, radio:15.4
00:50:58.326 [N] MeshForwarder-: src:[fe80:0:0:0:88c4:49ea:7e96:da97]:19788
00:50:58.326 [N] MeshForwarder-: dst:[fe80:0:0:0:8ce2:208b:8770:47f5]:19788
00:50:58.895 [N] MeshForwarder-: Failed to send IPv6 UDP msg, len:96, chksum:f961, ecn:no, to:8ee2208b877047f5, sec:no, error:NoAck, prio:net, radio:15.4
00:50:58.895 [N] MeshForwarder-: src:[fe80:0:0:0:88c4:49ea:7e96:da97]:19788
00:50:58.895 [N] MeshForwarder-: dst:[fe80:0:0:0:8ce2:208b:8770:47f5]:19788
Additional information
No response
Describe the issue you are experiencing
Title: ZBT-2 Matter-over-Thread commissioning fails after device joins Thread — repeated 802.15.4 NoAck
I am unable to commission an IKEA GRILLPLATS Matter-over-Thread outlet using a Home Assistant Connect ZBT-2 and the OpenThread Border Router app.
Environment
Problem
Commissioning proceeds normally through discovery and Thread credential provisioning. The Android commissioning flow then reaches:
"Checking connectivity to Thread network"
After waiting, it fails with:
"Can't reach device"
OTBR itself appears healthy. It successfully attaches to the Thread network and becomes leader/primary backbone router:
During a failed commissioning attempt, the IKEA device appears to successfully join the Thread mesh because OTBR allocates another router ID:
Approximately 2.5 minutes later, OTBR begins reporting repeated failures communicating with that node over 802.15.4:
For example:
I observed the same pattern on an earlier attempt:
Matter Server does not appear to receive the commissioning transaction. It continues to report zero nodes, with no new Matter node appearing during these attempts.
Troubleshooting performed
ha docker inforeportsenable_ipv6: trueot-ctl trelot-ctl trel disableand repeated commissioning without restarting OTBRThe repeated sequence of:
seems potentially significant.
Is this a known ZBT-2/OTBR issue, or is there another diagnostic I can run to determine why the newly joined Thread node becomes unreachable?
What type of installation are you running?
Home Assistant OS
Which operating system are you running on?
Home Assistant Operating System
Which app are you reporting an issue with?
OpenThread Border Router
What is the version of the app?
3.1.1
Steps to reproduce the issue
MeshForwarder ... error:NoAck ... radio:15.4messages.Reproduces consistently, including with the device approximately 6 feet from the ZBT-2 and on Thread channels 15 and 25.
System Health information
System Information
Home Assistant Cloud
Home Assistant Supervisor
Dashboards
Network Configuration
Recorder
Anything in the Supervisor logs that might be useful for us?
Anything in the app logs that might be useful for us?
Additional information
No response