Help with Thread network range and setup

Hello would love some help figuring out the best way to establish by Thread network and fix my range / drop out problems. Please let me know if any other information is needed to help diagnose the problem.


Setup:

  • Installation method Home Assistant OS on Raspberry Pi 5
  • Core 2026.2.0
  • Supervisor 2026.01.1
  • Operating System 17.0
  • Frontend 20260128.6

Apps:

  • OpenThread Border Router 2.16.1
  • Matter Server Matter Server

Thread Routers:

  • Google TV Streamer
  • Google Hub 7" ( on the way )
  • SLZB-MR1 - Connected to HA via usb for now
  • Sonoff MG24 ( currently not in use )

Current Thread Setup:

I had an existing Google Streamer that was serving a thread network. I added my ikea MYGGBETTDoor/window sensor and BILRESARemote control, white smart/dual button to it but was having frequent disconnects and range problems so I wanted to add a SLZB-MR1 to help expand the network. I tried to add the SLZB to HA initially over the network so I could have them at different locations but that didn’t work so I plugged the SLZB in via USB.

Screenshots:
Had to create an album since I am new and can’t embed the images here. Sorry for the inconvenience.
Config Screenshots

This is what my thread page looks like:
See screenshot link above

My OTBR config in HA looks like this:
See screenshot link above

The SLZB config looks like this. I have both antennas set to matter but I don’t know if I can configure HA to use both.
See screenshot link above

My pixel 10 shows this under thread networks:
See screenshot link above

What I tried:

  1. Initially configured SLZB-MR1 via network socket - got Spinel timeout errors (device not responding)
  2. Switched to direct USB serial connection - device responded successfully
  3. Recreated HA Thread network and imported credentials from Google Thread network
  4. SLZB-MR1 successfully joined network as router (RLOC16: d400, Partition ID: 0x5fea4c1c)

Current problem: Network joined successfully, but experiencing severe radio interference when pairing new devices:

  • Constant ChannelAccessFailure errors during device commissioning
  • ReassemblyTimeout errors for fragmented packets
  • Occasional NoAddress radio errors
  • Range doesn’t seem any better so I am not sure the SLZB is actually working and if devices are able to route through it. Seems like everything is still connecting to the google streamer.

Questions:

  • Is my current setup the ideal way to handle a matter network with HA.
  • Should the HA be the primary, I am not sure how to make this properly work since I can’t find settings in google home to join another matter network.
  • Should I only have the HA? Will that cover my whole home 3000+ square feet on 3 levels.
  • If the best setup is to change the primary router how do I get my phone to use the right device?
  • How can I verify the network topology and see what devices are connected to what thread router?
  • Why does my range seem so small. When the matter devices are kept close to the google streamer I don’t have connection problems.
  • I also have a sonoff MG24 is there a way to use the SLZB and Sonoff maybe in different machines to improve the coverage even more.
  • Is there a way to use both antennas on the SLZB-MR1 for matter? I don’t have any zigbee devices at the moment so I don’t need one antenna for that.

Here is some log output from OTBR:

----------------------------------------------------------
 Add-on: OpenThread Border Router
 OpenThread Border Router add-on
-----------------------------------------------------------
 Add-on version: 2.16.1
 You are running the latest version of this add-on.
 System: Home Assistant OS 17.0  (aarch64 / raspberrypi5-64)
 Home Assistant Core: 2026.2.0
 Home Assistant Supervisor: 2026.01.1
-----------------------------------------------------------
 Please, share the above information when looking for help
 or support in, e.g., GitHub, forums or the Discord chat.
-----------------------------------------------------------
s6-rc: info: service banner successfully started
s6-rc: info: service otbr-agent: starting
[17:34:40] INFO: Setup OTBR firewall...
[17:34:40] INFO: Migrating OTBR settings if needed...
2026-02-06 17:34:40 homeassistant asyncio[237] DEBUG Using selector: EpollSelector
2026-02-06 17:34:40 homeassistant zigpy.serial[237] DEBUG Opening a serial connection to '/dev/serial/by-id/usb-SMLIGHT_SMLIGHT_SLZB-MR1_96a2e1371916f011a6e9e274b887153e-if00-port0' (baudrate=460800, xonxoff=False, rtscts=False)
2026-02-06 17:34:40 homeassistant serialx.platforms.serial_posix[237] DEBUG Configuring serial port '/dev/serial/by-id/usb-SMLIGHT_SMLIGHT_SLZB-MR1_96a2e1371916f011a6e9e274b887153e-if00-port0'
2026-02-06 17:34:40 homeassistant serialx.platforms.serial_posix[237] DEBUG Configuring serial port: [0, 0, 3248, 0, 4100, 4100, [b'\x03', b'\x1c', b'\x7f', b'\x15', b'\x04', 0, 0, b'\x00', b'\x11', b'\x13', b'\x1a', b'\x00', b'\x12', b'\x0f', b'\x17', b'\x16', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00']]
2026-02-06 17:34:40 homeassistant serialx.platforms.serial_posix[237] DEBUG Setting low latency mode: True
2026-02-06 17:34:40 homeassistant serialx.platforms.serial_posix[237] DEBUG Setting modem pins: ModemPins[!dtr !rts]
2026-02-06 17:34:40 homeassistant serialx.platforms.serial_posix[237] DEBUG TIOCMBIC: 0x00000006
2026-02-06 17:34:40 homeassistant zigpy.serial[237] DEBUG Connection made: <serialx.platforms.serial_posix.PosixSerialTransport object at 0x7fa70c4490>
2026-02-06 17:34:40 homeassistant universal_silabs_flasher.spinel[237] DEBUG Sending frame SpinelFrame(header=SpinelHeader(transaction_id=0, network_link_id=0, flag=2), command_id=<CommandID.RESET: 1>, data=b'\x02')
2026-02-06 17:34:40 homeassistant universal_silabs_flasher.spinel[237] DEBUG Sending data b'~\x80\x01\x02\xea\xf0~'
2026-02-06 17:34:40 homeassistant serialx.descriptor_transport[237] DEBUG Immediately writing b'~\x80\x01\x02\xea\xf0~'
2026-02-06 17:34:40 homeassistant serialx.descriptor_transport[237] DEBUG Sent 7 of 7 bytes
2026-02-06 17:34:40 homeassistant serialx.descriptor_transport[237] DEBUG Event loop woke up reader
2026-02-06 17:34:40 homeassistant serialx.descriptor_transport[237] DEBUG Received b'~\x80\x06\x00p\xeet~'
2026-02-06 17:34:40 homeassistant universal_silabs_flasher.spinel[237] DEBUG Decoded HDLC frame: HDLCLiteFrame(data=b'\x80\x06\x00p')
2026-02-06 17:34:40 homeassistant universal_silabs_flasher.spinel[237] DEBUG Parsed frame SpinelFrame(header=SpinelHeader(transaction_id=0, network_link_id=0, flag=2), command_id=<CommandID.PROP_VALUE_IS: 6>, data=b'\x00p')
2026-02-06 17:34:40 homeassistant universal_silabs_flasher.spinel[237] DEBUG Sending frame SpinelFrame(header=SpinelHeader(transaction_id=3, network_link_id=0, flag=2), command_id=<CommandID.PROP_VALUE_GET: 2>, data=b'\x08')
2026-02-06 17:34:40 homeassistant universal_silabs_flasher.spinel[237] DEBUG Sending data b'~\x83\x02\x08\xbc\x9a~'
2026-02-06 17:34:40 homeassistant serialx.descriptor_transport[237] DEBUG Immediately writing b'~\x83\x02\x08\xbc\x9a~'
2026-02-06 17:34:40 homeassistant serialx.descriptor_transport[237] DEBUG Sent 7 of 7 bytes
2026-02-06 17:34:40 homeassistant serialx.descriptor_transport[237] DEBUG Event loop woke up reader
2026-02-06 17:34:40 homeassistant serialx.descriptor_transport[237] DEBUG Received b'~\x83\x06\x08\xf0\xfdE\xff\xfe\xf7\x177\x10\xa9~'
2026-02-06 17:34:40 homeassistant universal_silabs_flasher.spinel[237] DEBUG Decoded HDLC frame: HDLCLiteFrame(data=b'\x83\x06\x08\xf0\xfdE\xff\xfe\xf7\x177')
2026-02-06 17:34:40 homeassistant universal_silabs_flasher.spinel[237] DEBUG Parsed frame SpinelFrame(header=SpinelHeader(transaction_id=3, network_link_id=0, flag=2), command_id=<CommandID.PROP_VALUE_IS: 6>, data=b'\x08\xf0\xfdE\xff\xfe\xf7\x177')
2026-02-06 17:34:40 homeassistant serialx.descriptor_transport[237] DEBUG Closing at the request of the application
2026-02-06 17:34:40 homeassistant zigpy.serial[237] DEBUG Waiting for serial port to close
2026-02-06 17:34:40 homeassistant serialx.descriptor_transport[237] DEBUG Closing connection: None
2026-02-06 17:34:40 homeassistant serialx.descriptor_transport[237] DEBUG Closing file descriptor 7
2026-02-06 17:34:41 homeassistant serialx.descriptor_transport[237] DEBUG Calling protocol `connection_lost` with exc=None
2026-02-06 17:34:41 homeassistant zigpy.serial[237] DEBUG Connection lost: None
Adapter settings file /data/thread/0_f0fd45fffef71737.data is the most recently used, skipping
[17:34:41] INFO: Starting otbr-agent...
[NOTE]-AGENT---: Running 0.3.0-b067e5ac-dirty
[NOTE]-AGENT---: Thread version: 1.3.0
[NOTE]-AGENT---: Thread interface: wpan0
[NOTE]-AGENT---: Radio URL: spinel+hdlc+uart:///dev/serial/by-id/usb-SMLIGHT_SMLIGHT_SLZB-MR1_96a2e1371916f011a6e9e274b887153e-if00-port0?uart-baudrate=460800&uart-init-deassert
[NOTE]-AGENT---: Radio URL: trel://wlan0
[NOTE]-ILS-----: Infra link selected: wlan0
49d.17:31:13.040 [C] P-SpinelDrive-: Software reset co-processor successfully
00:00:00.072 [N] RoutingManager: BR ULA prefix: fd17:18e3:57e7::/48 (loaded)
00:00:00.072 [N] RoutingManager: Local on-link prefix: fd35:4d83:55b3:8909::/64
00:00:00.097 [N] Mle-----------: Role disabled -> detached
00:00:00.109 [N] P-Netif-------: Changing interface state to up.
00:00:00.119 [W] P-Netif-------: Failed to process request#2: No such process
00:00:00.120 [W] P-Netif-------: Failed to process request#6: No such process
Connection to 172.30.32.1 8081 port [tcp/tproxy] succeeded!
s6-rc: info: service otbr-agent successfully started
s6-rc: info: service otbr-agent-configure: starting
Done
s6-rc: info: service otbr-agent-configure successfully started
s6-rc: info: service otbr-agent-rest-discovery: starting
[17:34:41] INFO: Successfully sent discovery information to Home Assistant.
s6-rc: info: service otbr-agent-rest-discovery successfully started
s6-rc: info: service legacy-services: starting
s6-rc: info: service legacy-services successfully started
00:00:00.678 [N] Mle-----------: Role detached -> router
00:00:00.678 [N] Mle-----------: Partition ID 0x5fea4c1c
00:00:00.787 [W] P-Netif-------: Successfully added an external route fc00::/7 in kernel
00:00:02.803 [W] P-RadioSpinel-: Error processing result: NoAddress
00:00:02.803 [W] P-RadioSpinel-: Error waiting response: NoAddress
00:00:02.839 [N] MeshForwarder-: Dropping IPv6 UDP msg, len:196, chksum:9d8b, ecn:no, sec:yes, error:Drop, prio:net, radio:all
00:00:02.839 [N] MeshForwarder-:     src:[fe80:0:0:0:a827:18e9:ea1:16ce]:19788
00:00:02.839 [N] MeshForwarder-:     dst:[ff02:0:0:0:0:0:0:1]:19788
00:00:03.646 [N] MeshForwarder-: Dropping (reassembly queue) IPv6 UDP msg, len:171, chksum:fc8e, ecn:no, sec:yes, error:ReassemblyTimeout, prio:net, rss:-73.0, radio:15.4
00:00:03.646 [N] MeshForwarder-:     src:[fe80:0:0:0:880c:a90a:9fa9:d555]:19788
00:00:03.646 [N] MeshForwarder-:     dst:[ff02:0:0:0:0:0:0:1]:19788
00:00:04.654 [W] DuaManager----: Failed to perform next registration: NotFound
00:00:10.371 [W] P-RadioSpinel-: Handle transmit done failed: ChannelAccessFailure
00:00:10.556 [W] P-RadioSpinel-: Handle transmit done failed: ChannelAccessFailure
00:00:10.817 [W] P-RadioSpinel-: Handle transmit done failed: ChannelAccessFailure
00:00:10.817 [N] MeshForwarder-: Failed to send IPv6 UDP msg, len:99, chksum:d67e, ecn:no, to:0x8800, sec:yes, error:ChannelAccessFailure, prio:net, radio:15.4
00:00:10.817 [N] MeshForwarder-:     src:[fda4:1ac2:cdbf:2736:0:ff:fe00:6800]:61631
00:00:10.817 [N] MeshForwarder-:     dst:[fda4:1ac2:cdbf:2736:0:ff:fe00:fc00]:61631
00:00:11.417 [W] P-RadioSpinel-: Handle transmit done failed: ChannelAccessFailure
00:00:13.685 [W] P-RadioSpinel-: Handle transmit done failed: ChannelAccessFailure
00:00:13.685 [N] MeshForwarder-: Failed to send IPv6 UDP msg, len:99, chksum:d67e, ecn:no, to:0x8800, sec:yes, error:ChannelAccessFailure, prio:net, radio:15.4
00:00:13.685 [N] MeshForwarder-:     src:[fda4:1ac2:cdbf:2736:0:ff:fe00:6800]:61631
00:00:13.685 [N] MeshForwarder-:     dst:[fda4:1ac2:cdbf:2736:0:ff:fe00:fc00]:61631
00:00:13.685 [N] MeshForwarder-:     dst:[fda4:1ac2:cdbf:2736:0:ff:fe00:fc00]:61631
00:00:20.311 [W] P-RadioSpinel-: Error processing result: NoAddress
00:00:20.311 [W] P-RadioSpinel-: Error waiting response: NoAddress

Thank You,
Nathan

You probably have installed Matter Server 8.2.2. Go to Settings|Apps, open Matter Server and look for a button “Open web interface” (or something like that, launching the MAtter Server GUI)". Click on Thread and you’ll see your Thread mesh.

Thanks for the suggestion. When I open that UI I don’t see a Thread button. I can see my devices but I am not sure how to tell what they are connected to.

This is the version that you need to have installed:

If this is the case, open the configuration on the same screen and activate “Use the latest beta version”. Then restart HA and try again.

Just figured that out, after enabling the beta version I can now see the network but it doesn’t look right.

Right. You have four border routers that are not connected to each other. YOu seem to have some IKEA Matter stuff, maybe plus hubs. CAn you describe what you have?

In some aspects Thread is still a mystery for me. The issue is that the Thread connectivity is stored within the devices. Contrary to what one would think, your border routers do not form a mesh. Don’t ask me why though.

What you could do is

A) Reboot the machine that HA resides on. Thread runs in a Docker container and is not restarted if you only restart HA. There is the chance that the mesh reorganizes itself, but I doubt that. After reboot wait 1 hour to see if anything changes.

B) Start from scratch (maybe somebody else has a better idea )

  1. Identify which of the above border routers is your HA / ZBT unit.
  2. Unplug all other devices including the border routers, e.g. the IKEA Dirigera…
  3. Reset one of the devices, get it close to the ZBT (or whatever you use) and connect it to your HA OTBR through means of the HA Companion App.
  4. Repeat step 3 for all other devices.

There are three additional units in your mesh that currently act as routers. Ideally you could connect them to your HA like you did in step 3. Once connected you can place them elsewhere, yet one within reach of your main HA unit, etc… Beware, Thread has not the same reach as WiFi and additonal routers could be necessary.

P.S.: IKEA has just published that the firmware of their Matter devices will need rework to address connection stability issues.

I am not sure how I have more than just two Thread routers at the moment, the Google streamer and the SLZB connected to the PI 5. I don’t believe there are any other devices in my home that support acting as thread routers. For my setup please see the original post I think I detailed everything there.

Originally my plan was to make the HA + SLZB the primary but I wasn’t able to get the HA Companion app to add items to the SLZB it would always use the google streamer. Even when I unpluged the google streamer my phone only seems to allow adding to that network.

I bought the SLZB because it seemed to have pretty high coverage compared to lower power devices but I don’t think it is working properly.

AH, I didn’t really analyze your pictures as they were not in the thread.

The problem is that your phone doesn’t have the HA Thread credentials yet. Open HA on your smartphone, go to Settings | Companion App. Scrool down to Troublehooting and sync teh Thread credentials to HA. Not sure what it is called in English, but you will find it.

Then check OBTR on your HA unit again - there should be that small key behind its name, indicating that credentials have been synchronized.

You should bow be able to connect your IKEA devices to HA (step 3/4 in my explanations).

Like before: reboot the HA unit and then check if the system reorganizes

You have a network that have not reach critical mass yet and you need to add mains powered devices to it.

A Thread network is, like a Zigbee network, a mesh network.
A mesh network consist of devices with a somewhat weak radio, so the range of a device is not that big, but mains powered devices can relay message from other devices, so they can, in cooperation, reach extremely far.
In the start when you build your mesh network you will likely have black spots in your home, where there a no device to relay a message between devices.
Adding a device, like a smart plug or a light bulb will help extend the mesh network over this black spot.
One device can make the expand over the black spot, but radio signals are not always straight forward to predict, so at times that single device might have issues due to obstructions, like a body of liquid, which is good at absorping radio signals, like a human body.
It can also be another source that create electrical noise and distort the radio signal, so it is generally a good idea to be generous with mains powered devices thorugh out your home.

Once you start to get a good amount of mesh devices, then the network starts to become more stable, but that usually also means that it transmit a lot on the radio frequency it use and here it is important to make sure that the mesh network is using a frequency that is somewhat free.
WiFi, Zigbee, Bluetooth, wireless devices among others might use the same frequency band, but these bands are usually divided into channels, so more devices can run at the same time.
The internet have pictures that show the corresponding frequencies of WiFi, Zigbee and Thread, so you can choose the right one as early as possible, because it is just easier to change it in the beginning than later.

I decided to try to start over and added the SLZN in HA as the first Thread router, it took a lot of tweaking but finally after removing OTBR and Matter in HA and clearing play services on an old android phone I was able to get the HA Thread network up and running and my devices attached with good signal strength. I then tried to factory reset my google TV streamer and set it up again ( making sure it was on WiFi and not Ethernet) but it still created its own network instead of joining the HA one.

If anyone has some advice on how to get the Google 4k TV streamer to join and existing HA network that would be most appreciated. Getting closer to the ideal setup now.

The view is correct at first sight. This what is happening:

Does HA see devices that are connected to the streamer? If yes, fine. If not you could give that a try, i. e. reset the streamer and set it up with this second phone.

EDIT: " if not" you should be able to share the devices with HA.

I think the normal way to do it with this big tech ecosystems is to let them set up their Thread network and then have HA join them instead.
The problem is when you have multiple of the big tech ecosystems, because which will be allowed to join the others and which will will just have to run their own.

Not at all fine.
Running multiple mesh networks will mean none of them is very reliable due to low amount of devices to form the mesh.
Worse is that they may actually use the same channel and therefore interfere with each other.

Different but easier solution is not to buy additional Thread Border routers, but to purchase 2 to 4 Thread routers and use them to extend network range from the working TBR you had set up initially. Mains-powered Matter smart plugs and bulbs (as long as the bulbs are controlled remotely and never physically disconnected from main power) would be cheaper and less of a fight to get right. Onvis S4 and Eve are a couple of options you can place strategically in your home outlets in between the OTBR and the IKEA sleepy end devices. IKEA Matter and Aqara bulbs are additional options, but placement and making sure someone does not physically turn them off can be harder.

TBRs are usually more expensive devices and multi-admin is still new and somewhat bugged between different vendors.
But yes TBRs can also replace mains powered devices for further range.
Beware that Onvis S4 needs to be up-to-date or it will cause havoc in the mesh network, due to bugs in the early versions of their firmware. The updated firmware is good though.

1 Like

100% update any S4 to at least firmware 1.4.0 (latest at this time).

Another caveat for Matter-JS server Beta users looking at the new dashboard thread network graph, the S4, even with the latest Matter 1.4.1 firmware, do not include the optional ThreadNetworkDiagnostics cluster so they will not meaningfully contribute data back to matter server for the new graph. They function well regardless.