Unable to commission Matter over Thread device, with ZBT-2

What I’m trying to do

I have a Home Assistant Green device, with a ZBT-2 radio. I’m trying to commission my first Matter over Thread device, which is a Nanoleaf NL67 smart bulb, using the Home Assistant companion app for iOS.

Software/hardware versions

Home Assistant Green

  • Installation method: Home Assistant OS
  • Core: 2026.1.0
  • Supervisor: 2026.01.0
  • Operating System: 16.3

Home Assistant Connect ZBT-2

  • Configured as a Thread adaptor

Add-ons

  • Matter Server add-on: 8.1.2
  • OpenThread Border Router add-on: 2.15.3

Smart device

  • Nanoleaf firmware: 4.1.3 (latest)

Home Assistant Companion iOS app

  • App version: 2025.12.1

Issue Background

I have had the bulb connected, via Thread, to Apple Home for several months (this was a direct connection from the phone to the bulb – I have no Apple border router). I recently bought a HA Green and ZBT-2 and wanted to add the bulb to a Home Assistant controlled Thread network. This is the first thing I’m trying to do with Home Assistant so everything is in its default state except increasing the logging levels.

This is the only Matter over Thread device I have, so I’m unable to verify if this issue is confined to this device, or if it’s a wider problem with my Home Assistant/ZBT-2 setup.

Sharing the device between Apple Home and Home Assistant

I followed the recommended procedure for adding a Matter device already registered with Apple Home to Home Assistant, by turning on “Pairing Mode” in the Apple Home app and using the subsequent “setup code” in Home Assistant to complete the commissioning. This does not work, with the process in the companion iOS app timing out after ~5 minutes.
The relevant logs from the Matter server during this process are:

2026-01-10 22:06:36.875 (MainThread) VERBOSE [matter_server.server.client_handler] [281472779537056] Received: {
  "message_id": "8d7962facdb3406caa64035d1b7ff07b",
  "command": "commission_with_code",
  "args": {
    "code": "31801336662",
    "network_only": true
  }
}
2026-01-10 22:06:36.876 (MainThread) VERBOSE [matter_server.server.client_handler] [281472779537056] Received CommandMessage(message_id='8d7962facdb3406caa64035d1b7ff07b', command='commission_with_code', args={'code': '31801336662', 'network_only': True})
2026-01-10 22:06:36.877 (MainThread) VERBOSE [matter_server.server.client_handler] [281472779537056] Handling command commission_with_code
2026-01-10 22:06:36.878 (MainThread) INFO [matter_server.server.device_controller] Starting Matter commissioning with code using Node ID 4.
2026-01-10 22:06:36.880 (Dummy-2) CHIP_PROGRESS [chip.native.CTL] Setting attestation nonce to random value
2026-01-10 22:06:36.881 (Dummy-2) CHIP_PROGRESS [chip.native.CTL] Setting CSR nonce to random value
2026-01-10 22:06:36.882 (Dummy-2) CHIP_PROGRESS [chip.native.CTL] Stopping commissionable node discovery over DNS-SD
2026-01-10 22:06:36.883 (Dummy-2) CHIP_PROGRESS [chip.native.CTL] Starting commissionable node discovery over DNS-SD
2026-01-10 22:06:36.889 (Dummy-2) CHIP_DETAIL [chip.native.DIS] Warning: Attempt to mDNS broadcast failed on ???:  src/inet/UDPEndPointImplSockets.cpp:417: OS Error 0x02000013: No such device
2026-01-10 22:06:36.891 (Dummy-2) CHIP_DETAIL [chip.native.DIS] mDNS broadcast had only partial success: 12 successes and 1 failures.
2026-01-10 22:06:36.898 (ThreadPoolExecutor-0_0) DEBUG [matter_server.server.storage] Saved data to persistent storage
2026-01-10 22:06:37.889 (Dummy-2) CHIP_DETAIL [chip.native.DIS] Warning: Attempt to mDNS broadcast failed on ???:  src/inet/UDPEndPointImplSockets.cpp:417: OS Error 0x02000013: No such device
2026-01-10 22:06:37.889 (Dummy-2) CHIP_DETAIL [chip.native.DIS] mDNS broadcast had only partial success: 12 successes and 1 failures.
2026-01-10 22:06:39.891 (Dummy-2) CHIP_DETAIL [chip.native.DIS] Warning: Attempt to mDNS broadcast failed on ???:  src/inet/UDPEndPointImplSockets.cpp:417: OS Error 0x02000013: No such device
2026-01-10 22:06:39.892 (Dummy-2) CHIP_DETAIL [chip.native.DIS] mDNS broadcast had only partial success: 12 successes and 1 failures.
2026-01-10 22:06:43.892 (Dummy-2) CHIP_DETAIL [chip.native.DIS] Warning: Attempt to mDNS broadcast failed on ???:  src/inet/UDPEndPointImplSockets.cpp:417: OS Error 0x02000013: No such device
2026-01-10 22:06:43.893 (Dummy-2) CHIP_DETAIL [chip.native.DIS] mDNS broadcast had only partial success: 12 successes and 1 failures.
2026-01-10 22:06:51.900 (Dummy-2) CHIP_DETAIL [chip.native.DIS] Warning: Attempt to mDNS broadcast failed on ???:  src/inet/UDPEndPointImplSockets.cpp:417: OS Error 0x02000013: No such device
2026-01-10 22:06:51.901 (Dummy-2) CHIP_DETAIL [chip.native.DIS] mDNS broadcast had only partial success: 12 successes and 1 failures.
2026-01-10 22:07:06.905 (Dummy-2) CHIP_ERROR [chip.native.CTL] Discovery timed out
2026-01-10 22:07:06.906 (Dummy-2) CHIP_PROGRESS [chip.native.CTL] Stopping commissionable node discovery over DNS-SD
2026-01-10 22:07:06.906 (Dummy-2) CHIP_ERROR [chip.native.ZCL] Secure Pairing Failed
2026-01-10 22:07:06.908 (Dummy-2) WARNING [chip.ChipDeviceCtrl] Failed to establish secure session to device: src/controller/python/ChipDeviceController-ScriptDevicePairingDelegate.cpp:96: CHIP Error 0x00000003: Incorrect state
2026-01-10 22:07:06.910 (MainThread) ERROR [matter_server.server.client_handler] [281472779537056] Error while handling: commission_with_code: Commission with code failed for node 4.
Traceback (most recent call last):
  File "/usr/local/lib/python3.12/site-packages/matter_server/server/device_controller.py", line 330, in commission_with_code
    await self._chip_device_controller.commission_with_code(
  File "/usr/local/lib/python3.12/site-packages/matter_server/server/sdk.py", line 133, in commission_with_code
    await self._chip_controller.CommissionWithCode(
  File "/usr/local/lib/python3.12/site-packages/chip/ChipDeviceCtrl.py", line 2835, in CommissionWithCode
    return await asyncio.futures.wrap_future(ctx.future)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
chip.exceptions.ChipStackError: src/controller/python/ChipDeviceController-ScriptDevicePairingDelegate.cpp:96: CHIP Error 0x00000003: Incorrect state
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
  File "/usr/local/lib/python3.12/site-packages/matter_server/server/client_handler.py", line 196, in _run_handler
    result = await result
             ^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/matter_server/server/device_controller.py", line 344, in commission_with_code
    raise NodeCommissionFailed(
matter_server.common.errors.NodeCommissionFailed: Commission with code failed for node 4.

I’m having a tough time deciphering the OpenThread Border Router logs. It’s not clear to me that any packets are being routed through the OTBR during this process. FWIW, here are some logs from during the attempted commissioning process:

00:58:31.855 [D] P-SpinelDrive-: ... csmaCaEnabled:1, isHeaderUpdated:0, isARetx:0, skipAes:0, txDelay:0, txDelayBase:0
00:58:31.864 [D] P-SpinelDrive-: Received spinel frame, flg:0x2, iid:0, tid:2, cmd:PROP_VALUE_IS, key:LAST_STATUS, status:OK
00:58:31.864 [I] MeshForwarder-: Sent IPv6 UDP msg, len:90, chksum:bbb9, ecn:no, to:0xffff, sec:no, prio:net, radio:all
00:58:31.864 [I] MeshForwarder-:     src:[fe80:0:0:0:8cc3:e731:ffe0:d53c]:19788
00:58:31.864 [I] MeshForwarder-:     dst:[ff02:0:0:0:0:0:0:1]:19788
00:58:38.452 [I] RoutingManager: Sent Neighbor Solicitation to fe80:0:0:0:d61a:d1ff:fedb:b050 - attempt:1/5
00:58:38.453 [I] RoutingManager: Received NA from router fe80:0:0:0:d61a:d1ff:fedb:b050
00:58:45.150 [I] RoutingManager: Evaluating routing policy
00:58:45.150 [I] RoutingManager: Evaluating NAT64 prefix
00:58:45.150 [I] RoutingManager: Preparing RA
00:58:45.150 [I] RoutingManager: - RA Header - flags - M:0 O:1 S:1
00:58:45.150 [I] RoutingManager: - RA Header - default route - lifetime:0
00:58:45.150 [I] RoutingManager: - RIO fd6e:2bdb:1238:1::/64 (lifetime:1800, prf:medium)
00:58:45.150 [I] RoutingManager: Sent RA on infra netif 2
00:58:45.150 [I] RoutingManager: Will evaluate routing policy in 02:55.221 (175221 msec)
00:58:45.151 [I] RoutingManager: Received RA from fe80:0:0:0:5140:2e15:a4bf:4c99 on infra netif 2 (this BR routing-manager)
00:58:49.282 [I] Mle-----------: Send Advertisement (ff02:0:0:0:0:0:0:1)
00:58:49.283 [D] P-SpinelDrive-: Sent spinel frame, flg:0x2, iid:0, tid:3, cmd:PROP_VALUE_SET, key:STREAM_RAW, len:69, channel:15, maxbackoffs:4, maxretries:15 ...

Resetting the device and commissioning from scratch

Given the previous failure, I decided to reset the bulb, remove it from Apple Home and try to commission it to only Home Assistant. This also fails.

The Matter server logs:

2026-01-10 23:15:40.242 (Dummy-2) CHIP_DETAIL [chip.native.DIS] mDNS broadcast had only partial success: 12 successes and 1 failures.
2026-01-10 23:15:40.590 (MainThread) DEBUG [matter_server.server.device_controller.mdns] Discovered commissionable Matter node: AsyncServiceInfo(type='_matterc._udp.local.', name='751EAF7055DF1A4C._matterc._udp.local.', addresses=[], port=5540, weight=0, priority=0, server='82A0CA28F92C79A5.local.', properties={b'VP': b'4442+67', b'SII': b'800', b'SAI': b'800', b'SAT': b'4000', b'T': b'0', b'D': b'1691', b'CM': b'0', b'RI': b'B1016AC923D01D2C595658AFB6906EED1550', b'PH': b'36', b'PI': None}, interface_index=None)
2026-01-10 23:15:41.089 (Dummy-2) CHIP_DETAIL [chip.native.DIS] SRV record already actively processed.
2026-01-10 23:15:41.092 (Dummy-2) CHIP_DETAIL [chip.native.DIS] SRV record already actively processed.
2026-01-10 23:15:41.096 (Dummy-2) CHIP_DETAIL [chip.native.DIS] Warning: Attempt to mDNS broadcast failed on ???:  src/inet/UDPEndPointImplSockets.cpp:417: OS Error 0x02000013: No such device
2026-01-10 23:15:41.099 (Dummy-2) CHIP_DETAIL [chip.native.DIS] mDNS broadcast had only partial success: 12 successes and 1 failures.
2026-01-10 23:15:41.100 (Dummy-2) CHIP_DETAIL [chip.native.DIS] SRV record already actively processed.
2026-01-10 23:15:41.102 (Dummy-2) CHIP_DETAIL [chip.native.DIS] SRV record already actively processed.
2026-01-10 23:15:41.103 (Dummy-2) CHIP_DETAIL [chip.native.DIS] SRV record already actively processed.
2026-01-10 23:15:41.104 (Dummy-2) CHIP_DETAIL [chip.native.DIS] SRV record already actively processed.
2026-01-10 23:15:41.105 (Dummy-2) CHIP_DETAIL [chip.native.DIS] SRV record already actively processed.
2026-01-10 23:15:41.106 (Dummy-2) CHIP_DETAIL [chip.native.DIS] SRV record already actively processed.
2026-01-10 23:15:41.107 (Dummy-2) CHIP_DETAIL [chip.native.DIS] SRV record already actively processed.
2026-01-10 23:15:41.109 (Dummy-2) CHIP_DETAIL [chip.native.DIS] SRV record already actively processed.
2026-01-10 23:15:41.110 (Dummy-2) CHIP_DETAIL [chip.native.DIS] SRV record already actively processed.
2026-01-10 23:15:41.111 (Dummy-2) CHIP_DETAIL [chip.native.DIS] SRV record already actively processed.
2026-01-10 23:15:41.112 (Dummy-2) CHIP_DETAIL [chip.native.DIS] SRV record already actively processed.
2026-01-10 23:15:41.114 (Dummy-2) CHIP_DETAIL [chip.native.DIS] SRV record already actively processed.
2026-01-10 23:15:41.115 (Dummy-2) CHIP_DETAIL [chip.native.DIS] SRV record already actively processed.
2026-01-10 23:15:41.120 (Dummy-2) CHIP_DETAIL [chip.native.DIS] Warning: Attempt to mDNS broadcast failed on ???:  src/inet/UDPEndPointImplSockets.cpp:417: OS Error 0x02000013: No such device
2026-01-10 23:15:41.121 (Dummy-2) CHIP_DETAIL [chip.native.DIS] mDNS broadcast had only partial success: 12 successes and 1 failures.
2026-01-10 23:15:41.122 (Dummy-2) CHIP_DETAIL [chip.native.DIS] SRV record already actively processed.
2026-01-10 23:15:41.131 (Dummy-2) CHIP_DETAIL [chip.native.DIS] Warning: Attempt to mDNS broadcast failed on ???:  src/inet/UDPEndPointImplSockets.cpp:417: OS Error 0x02000013: No such device
2026-01-10 23:15:41.132 (Dummy-2) CHIP_DETAIL [chip.native.DIS] mDNS broadcast had only partial success: 12 successes and 1 failures.
2026-01-10 23:15:41.133 (Dummy-2) CHIP_DETAIL [chip.native.DIS] SRV record already actively processed.
2026-01-10 23:15:41.141 (Dummy-2) CHIP_DETAIL [chip.native.DIS] Warning: Attempt to mDNS broadcast failed on ???:  src/inet/UDPEndPointImplSockets.cpp:417: OS Error 0x02000013: No such device
2026-01-10 23:15:41.142 (Dummy-2) CHIP_DETAIL [chip.native.DIS] mDNS broadcast had only partial success: 12 successes and 1 failures.
2026-01-10 23:15:41.143 (Dummy-2) CHIP_DETAIL [chip.native.DIS] SRV record already actively processed.
2026-01-10 23:15:41.151 (Dummy-2) CHIP_DETAIL [chip.native.DIS] Warning: Attempt to mDNS broadcast failed on ???:  src/inet/UDPEndPointImplSockets.cpp:417: OS Error 0x02000013: No such device
2026-01-10 23:15:41.152 (Dummy-2) CHIP_DETAIL [chip.native.DIS] mDNS broadcast had only partial success: 12 successes and 1 failures.
2026-01-10 23:15:41.153 (Dummy-2) CHIP_DETAIL [chip.native.DIS] SRV record already actively processed.
2026-01-10 23:15:41.161 (Dummy-2) CHIP_DETAIL [chip.native.DIS] Warning: Attempt to mDNS broadcast failed on ???:  src/inet/UDPEndPointImplSockets.cpp:417: OS Error 0x02000013: No such device
2026-01-10 23:15:41.162 (Dummy-2) CHIP_DETAIL [chip.native.DIS] mDNS broadcast had only partial success: 12 successes and 1 failures.
2026-01-10 23:15:41.163 (Dummy-2) CHIP_DETAIL [chip.native.DIS] SRV record already actively processed.
2026-01-10 23:15:41.172 (Dummy-2) CHIP_DETAIL [chip.native.DIS] Warning: Attempt to mDNS broadcast failed on ???:  src/inet/UDPEndPointImplSockets.cpp:417: OS Error 0x02000013: No such device
2026-01-10 23:15:41.172 (Dummy-2) CHIP_DETAIL [chip.native.DIS] mDNS broadcast had only partial success: 12 successes and 1 failures.
2026-01-10 23:15:41.174 (Dummy-2) CHIP_DETAIL [chip.native.DIS] SRV record already actively processed.
2026-01-10 23:15:41.182 (Dummy-2) CHIP_DETAIL [chip.native.DIS] Warning: Attempt to mDNS broadcast failed on ???:  src/inet/UDPEndPointImplSockets.cpp:417: OS Error 0x02000013: No such device
2026-01-10 23:15:41.183 (Dummy-2) CHIP_DETAIL [chip.native.DIS] mDNS broadcast had only partial success: 12 successes and 1 failures.
2026-01-10 23:15:41.184 (Dummy-2) CHIP_DETAIL [chip.native.DIS] SRV record already actively processed.
2026-01-10 23:15:41.192 (Dummy-2) CHIP_DETAIL [chip.native.DIS] Warning: Attempt to mDNS broadcast failed on ???:  src/inet/UDPEndPointImplSockets.cpp:417: OS Error 0x02000013: No such device
2026-01-10 23:15:41.193 (Dummy-2) CHIP_DETAIL [chip.native.DIS] mDNS broadcast had only partial success: 12 successes and 1 failures.
2026-01-10 23:15:41.194 (Dummy-2) CHIP_DETAIL [chip.native.DIS] SRV record already actively processed.
2026-01-10 23:15:41.202 (Dummy-2) CHIP_DETAIL [chip.native.DIS] Warning: Attempt to mDNS broadcast failed on ???:  src/inet/UDPEndPointImplSockets.cpp:417: OS Error 0x02000013: No such device
2026-01-10 23:15:41.203 (Dummy-2) CHIP_DETAIL [chip.native.DIS] mDNS broadcast had only partial success: 12 successes and 1 failures.
2026-01-10 23:18:30.425 (MainThread) DEBUG [matter_server.server.device_controller.mdns] Commissionable Matter node disappeared: AsyncServiceInfo(type='_matterc._udp.local.', name='751EAF7055DF1A4C._matterc._udp.local.', addresses=[], port=None, weight=0, priority=0, server=None, properties={}, interface_index=None)

The OTBR logs for this same time:

01:10:31.236 [I] SrpServer-----:     Adding service 'Nanoleaf A19 69B-20BC._ltpdu._udp.default.service.arpa.'
01:10:31.236 [I] SrpServer-----:     Adding service '751EAF7055DF1A4C._matterc._udp.default.service.arpa.'
01:10:31.236 [I] SrpServer-----:       sub-type: _V4442
01:10:31.236 [I] SrpServer-----:       sub-type: _S6
01:10:31.236 [I] SrpServer-----:       sub-type: _L1691
01:10:31.236 [I] SrpServer-----: SRP update handler is notified (updatedId = 1507616627)
[INFO]-ADPROXY-: Advertise SRP service updates: host=82A0CA28F92C79A5.default.service.arpa.
[DEBG]-ADPROXY-: Publish SRP service '6FD68F9ADEC9EBDE-00000000DA734DA5._matter._tcp.default.service.arpa.'
[INFO]-MDNS----: Registering service 6FD68F9ADEC9EBDE-00000000DA734DA5._matter._tcp,_I6FD68F9ADEC9EBDE
[DEBG]-ADPROXY-: Publish SRP service 'Nanoleaf A19 69B-20BC._ltpdu._udp.default.service.arpa.'
[INFO]-MDNS----: Registering service Nanoleaf A19 69B-20BC._ltpdu._udp
[DEBG]-ADPROXY-: Publish SRP service '751EAF7055DF1A4C._matterc._udp.default.service.arpa.'
[INFO]-MDNS----: Registering service 751EAF7055DF1A4C._matterc._udp,_L1691,_S6,_V4442
[DEBG]-ADPROXY-: Publish SRP host '82A0CA28F92C79A5.default.service.arpa.'
[INFO]-MDNS----: Registering new host 82A0CA28F92C79A5
[DEBG]-MDNS----: Created new shared DNSServiceRef: 0xaaaaf2a3b760
[INFO]-MDNS----: Successfully registered host 82A0CA28F92C79A5 address fd6e:2bdb:1238:1:27c0:b4e5:285c:6cd0
[INFO]-MDNS----: Successfully registered all host 82A0CA28F92C79A5 addresses
[INFO]-ADPROXY-: Handle publish SRP host '82A0CA28F92C79A5.default.service.arpa.': OK
[INFO]-ADPROXY-: Waiting for more publishing callbacks 3
[INFO]-MDNS----: Successfully registered service 6FD68F9ADEC9EBDE-00000000DA734DA5._matter._tcp
[INFO]-ADPROXY-: Handle publish SRP service '6FD68F9ADEC9EBDE-00000000DA734DA5._matter._tcp.default.service.arpa.': OK
[INFO]-ADPROXY-: Waiting for more publishing callbacks 2
[INFO]-MDNS----: Successfully registered service 751EAF7055DF1A4C._matterc._udp
[INFO]-ADPROXY-: Handle publish SRP service '751EAF7055DF1A4C._matterc._udp.default.service.arpa.': OK
[INFO]-ADPROXY-: Waiting for more publishing callbacks 1
[INFO]-MDNS----: Successfully registered service Nanoleaf A19 69B-20BC._ltpdu._udp
[INFO]-ADPROXY-: Handle publish SRP service 'Nanoleaf A19 69B-20BC._ltpdu._udp.default.service.arpa.': OK
01:10:31.917 [I] SrpServer-----: Handler result of SRP update (id = 1507616627) is received: OK
01:10:31.917 [I] SrpServer-----: Committing update for existing host 82A0CA28F92C79A5.default.service.arpa.
01:10:31.917 [I] SrpServer-----:     Granted lease:7200, key-lease:680400, ttl:7200
01:10:31.917 [I] SrpServer-----: Add new service '6FD68F9ADEC9EBDE-00000000DA734DA5._matter._tcp.default.service.arpa.'
01:10:31.917 [I] SrpServer-----:   sub-type: _I6FD68F9ADEC9EBDE._sub._matter._tcp.default.service.arpa.
01:10:31.917 [I] SrpServer-----: Add new service 'Nanoleaf A19 69B-20BC._ltpdu._udp.default.service.arpa.'
01:10:31.917 [I] SrpServer-----: Add new service '751EAF7055DF1A4C._matterc._udp.default.service.arpa.'
01:10:31.917 [I] SrpServer-----:   sub-type: _V4442._sub._matterc._udp.default.service.arpa.
01:10:31.917 [I] SrpServer-----:   sub-type: _S6._sub._matterc._udp.default.service.arpa.
01:10:31.917 [I] SrpServer-----:   sub-type: _L1691._sub._matterc._udp.default.service.arpa.
01:10:31.917 [I] SrpServer-----: Send success response with granted lease: 7200 and key lease: 680400
01:10:31.918 [D] RadioSelector-: RadioSelector: SelectRadio 15.4 - neighbor:[82a0ca28f92c79a5 rloc16:0xe801 radio-pref:{15.4:255} state:Valid]
01:10:31.918 [D] P-SpinelDrive-: Sent spinel frame, flg:0x2, iid:0, tid:3, cmd:PROP_VALUE_SET, key:STREAM_RAW, len:85, channel:15, maxbackoffs:4, maxretries:15 ...

Any advice on what I can try next would be greatly appreciated.

Having simular errors like you have in the matter server log:

2026-01-12 14:22:02.957 (Dummy-2) CHIP_DETAIL [chip.native.DIS] mDNS broadcast had only partial success: 12 successes and 1 failures.
2026-01-12 14:22:02.957 (Dummy-2) CHIP_DETAIL [chip.native.DIS] SRV record already actively processed.
2026-01-12 14:22:02.959 (Dummy-2) CHIP_DETAIL [chip.native.DIS] Warning: Attempt to mDNS broadcast failed on ???:  src/inet/UDPEndPointImplSockets.cpp:417: OS Error 0x02000013: No such device
2026-01-12 14:22:02.959 (Dummy-2) CHIP_DETAIL [chip.native.DIS] mDNS broadcast had only partial success: 12 successes and 1 failures.
2026-01-12 14:22:02.959 (Dummy-2) CHIP_DETAIL [chip.native.DIS] SRV record already actively processed.
2026-01-12 14:22:02.961 (Dummy-2) CHIP_DETAIL [chip.native.DIS] Warning: Attempt to mDNS broadcast failed on ???:  src/inet/UDPEndPointImplSockets.cpp:417: OS Error 0x02000013: No such device
2026-01-12 14:22:02.961 (Dummy-2) CHIP_DETAIL [chip.native.DIS] mDNS broadcast had only partial success: 12 successes and 1 failures.

So I’m reading along here :slight_smile:

I’m using a SMlight SLZB-06U connected over USB to my virtual Home Assistant installation (migrated from docker to VM to start using matter-over-thread). When trying to add the device via my mobile phone i get the error: “Cannot reach device” (after it seems to found it since the progress status on my phone went from “Searching for device” to “connect to device” to “Generate matter login details” to the last before failing “Check connection to thread network {network name}”. (translation maybe off, from dutch to english).

I’m taking some guesses, but this is the first time I have seen someone commission a device to a phone without using an actual TBR. My guess is that the phone can not act like a TBR and is not doing the same things a TBR would do, so when sharing the device with HA, HA is not seeing mDNS advertisements regarding a device that is in commissioning mode (which a TBR would provide support for) so HA times out.

After you removed NanoLeaf from the phone, and tried to pair it to HA, it appears that the NanoLeaf joined the HA Thread network, but I don’t see anything in the Matter Logs where the Matter server was told to start up a commissioning session. HA Matter sees the device showing up in mDNS advertisements that the device is indeed in Matter commissioning mode, so apparently the phone never did its auto-magic which would be to (under the covers) “share” the device with HA. If you used the HA Companion App to do “Add Device”, then I really don’t know what happened.

Thanks, appreciate you taking the time to have a look.

Re. connection to Apple Home without an Apple border router

I’ll just clarify for the avoidance of doubt that I don’t know it was working with a direct Thread connection from my iPhone and Apple Home to the NanoLeaf but I think this is the case. I have re-added it to Apple Home for testing purposes and I can control the bulb with my phone’s Bluetooth turned off. So surely it’s Thread? Also, once added in Apple Home, the NanoLeaf app shows the bulb as connected to Apple Home with the Thread logo next to it.

Questions

  1. To confirm, are you saying that once the the NanoLeaf is in commissioning mode, it’s the phone’s/companion app’s job to tell the Matter server to actually commission it on to the Matter fabric?
  2. Do you have any recommendations for any logs I can look at next? Perhaps the companion app has relevant logs somewhere I’m unaware of?
  3. I can try to build the iOS companion app from source and run it on my phone, if we think that would provide some useful logs/debugging. Is that something worth trying? From the UI components used, it looks to me that the commissioning process is largely handed off to iOS HomeKit APIs which might make logs harder to get at :man_shrugging:

Next steps

  1. I have an old Android phone I can try to run the companion app on and see it that makes any difference.
  2. I have another iPhone I can try with too which I think is old enough to not have a Thread radio in, and is less tainted by all the hacking I’ve done thus far.

Case iOS being used without any other Thread Border Router…

Newer iOS devices and newer iOS firmware can run Thread. I don’t know much more than that, but if you say you can control your devices after adding them using the Home App and you don’t have any other Apple devices like AppleTV, and other types that are normally used as TBRs, then it would seem that the iPhone is indeed using its Thread radio for networking to the Thread devices. The other question would be to what extent can the iPhone act as a full blown Thread Border Router, and if it is not fully capable, then this may be the problem in this particular case.

Case using HA OTBR…

Using the HA iOS Companion App, the phone first has to get the device connected to a Thread network, and in this case it should be the one of the HA OTBR. After this, the iPhone does Matter Commissioning of the device to the iPhone itself, and after this, it does a Matter “sharing” of the device and then it tells HA to go into commissioning mode using a sharing code, and it tells the device to also go into matter commissioning mode.

There are logs UI->Settings->Companion App->Debugging->Export Log Files. However I have not used these logs, so I don’t know if they will reveal anything.

I don’t have a MAC or any other tools to do what amounts to an Browser “inspection” to see if the Companion App has any console outputs, but if you have the resources, that may provide some clues.

After some lengthy sessions with various LLMs I was pointed in the direction of the OTBR’s router advertisement packets not getting through to clients on the LAN and therefore IPv6 packets to the bulb being unroutable. I went through pretty much every security setting on my router, which is a Zyxel NR5103E, toggling them off and on. Disabling the Security → Firewall → Dos → Dos Protection Blocking has done the trick. Commissioning the bulb (and the other two of the same model of bulb that I have) worked as I would expect.

I’m much more inclined to think Zyxel has poorly configured something but I wonder if OTBR is perhaps sending a significant number of RA packets or similar (it doesn’t look like it from the logs).

Thanks for the help!