Matter-over-Thread: Low Limit on Number of Devices when using GL-S20 TBR?

After successfully adding three IKEA TIMMERFLOTTE Temperature & Humidity sensors to the Matter-over-Thread network, which is connected to Home Assistant, I bought two further TIMMERFLOTTE sensors and one GRILLPLATS ‘smart plug’ (primarily for its power monitoring function, rather than the ability to control the outlet – and potentially also to act as a mains-powered ‘range extender’ for the Thread radio network).1

For some reason, these new devices are all consistently failing to Commission as Matter devices in Home Assistant, despite using the exact same procedure as worked successfully for the older devices. There’s no problem with the first stage of commissioning (“Connecting”) but the second stage (“Setting Up”) always times out. Since the first three devices are still working perfectly, there can’t be any issues with the basic set-up of Thread or Matter.

There are some other reports of this same issue when using the GL.iNet GL-S20 Thread Border Router, on both the Home Assistant and GL.iNet community forums:

None of those discussion threads has any definitive resolution identified (apart from perhaps the last one, which isn’t GL-S20-specific). Other Home Assistant users have much greater number of devices working successfully using different TBR solutions, so it looks like it might be an isolated issue with the GL-S20 firmware.

While there is no newer ‘Stable’ release of the GL-S20 firmware available (as of May 2026), I tried the latest ‘Beta’ (2.0.1-B1 dated 2025-07-02) but that didn’t improve matters. (This version enables the OTBR API integration with Home Assistant, but GL.iNet do not seem to publish Release Notes for firmware updates so it is not clear what other changes might be included.)

Interestingly, after only a few months (I bought mine in November 2025) the GL-S20 seems to be no longer available for purchase and there also doesn’t appear to be much recent activity from GL.iNet in releasing new firmware for it. In particular, there doesn’t seem to be much prospect of them providing support for Thread version 1.4, which was released a few months ago.

Under the covers the GL-S20 uses standard Espressif chips closely following the reference design (as documented here). GL.iNet provide some guidance on compiling a very slightly adapted version of the standard Espressif ‘example’ firmware here. GL.iNet have also released an SDK for a variant of this firmware here.

More interestingly, Edoardo Pinci has released the source code for a fork of the firmware for the GL-S20 on GitHub at https://github.com/EPinci/ep-s20-otbr which has been updated to support Thread 1.4 and provide better integration with Home Assistant (via the OTBR API). It also appears to disable the WiFi interface – which is fine, because that’s not required in my use case (and avoids the risk of interference with the Thread network which runs on the same 2.4GHz frequency). Running firmware for which the source code is readily available is very appealing, to help identify where error messages might be coming from and to address the limited logging available by default with the standard GL-S20 firmware. I have enough experience of cross-compiling software for embedded platforms for this not to be particularly scary prospect.

While doing some preparation for testing this alternative firmware, including checking for connectivity via the USB console (which happened to require the GL-S20 to be relocated into the House, near a Linux desktop machine) it became apparent that the ‘new’ Thread devices could all be Commissioned successfully (since with the GL-S20 in this temporary location, the existing TIMMERFLOTTE sensors were out-of-range). That confirms the issue is nothing to do with the device hardware and probably not directly an issue with Home Assistant but instead appears to be a limit on the number of ‘active’ Thread devices, imposed by the GL-S20.

With the three extra devices commissioned successfully, moving the GL-S20 back to its original location resulted in two of the ‘old’ devices coming back online, for a total of four – and a couple of SrpServer “Failed to add service” error messages in the GL-S20 log file.

My current hypothesis is there’s a hard-coded limit on the number of ‘services’ that can be managed using SRP, the Service Registration Protocol. SRP is used within the Thread network, by Thread devices which register with the SRP server hosted on the Thread Border Router (which then broadcasts those same registrations on the wired network using mDNS). While it’s no surprise that such a limit exists, it is a surprise that only a very few devices can be active concurrently.

In some ways I’d prefer to continue using the vendor-supplied firmware, since that works with their Smartphone App (to enable extraction of the Thread network credentials) and I presume it will be necessary to re-create the Thread network (using the same details?) when running alternative firmware – but if there is a hard-coded limit in the firmware (and no prospect of GL.iNet releasing new firmware to increase that) there don’t seem to be many other options for continuing to use the GL-S20 hardware.

So while I’m slightly disappointed GL.iNet are not doing more to actively support a device which is only a few months old, their decision to closely follow the Espressif reference design such that the standard Espressif firmware cross-compilation and firmware installation tools can be used means the hardware can fairly easily run non-GL.iNet firmware – which ensures the hardware will be usable for many years to come.

  1. The Node Roles and Types page in the OpenThread documentation explains the different types and sub-types of Thread nodes. The TIMMERFLOTTE devices are battery-powered and show up in Home Assistant as Thread device type “Sleepy end device” (which is a sub-type of “Minimal End Device”) – so these are definitely not able to act as a ‘Range Extender’ for the Thread wireless network. The GRILLPLATS devices are mains-powered and so more likely to be candidates for acting as a ‘Range Extender’. Home Assistant initially showed these as Thread device type “End device” without clarifying if this was a Full Thread Device or a Minimal Thread Device. The former would leave open the possibility of being a “Router Eligible End Device” (REED) which could be promoted to being a Router within the Thread wireless network (as distinct from a Thread Border Router). Some lists of Matter devices indicate these are FTDs which will act as Routers. Upon later inspection, the GRILLPLATS changed to showing as a “Routing end device” within Home Assistant which confirms it is routing. It’s not clear if this was in response to the placement of other devices nearby which wanted to use it as a router; the OpenThread documentation says that if there are fewer than 16 Routers in a Thread network, any REED joining the network will automatically become a Router. ↩︎

Hornbeam Hedge Planting

For the ‘farm’ hedges around the boundary of the site, I’m happiest with Hawthorn – which is what the boundary hedges were originally and still mostly are now, just with a few (big) gaps. Some of the Hawthorn has given way to Blackthorn, which isn’t quite as good but provides an interesting contrast. (The main problem with Blackthorn is that it spreads by suckering and the whole hedge tends to grow wider over the years. It also responds less well to hedge-laying than Hawthorn.)

For other hedges within the site, especially near the buildings, I generally prefer Hornbeam. While it’s a UK native and happy to tolerate wet ground (much better than Beech which looks very similar) it can be kept trimmed into a tidy, formal shape.

The only sensible way to plant a hedge more than a few metres long is using bare-root plants but those really need to go into the ground while they’re still dormant – which ideally means before the end of March (and even then the plants will need to have been kept in cold storage). The existing Hornbeam hedge to the South of the House lost the leaves it had kept over winter and started to bud around mid-March, indicating that new bare-root hedging would likely also be coming out of dormancy at a similar time.

Ever since the Outbuildings got completed, with the ground around them looking rather flat and bare, the plan has been to plant a hedge along the back of the parking area to the North of the Garages, to act as a wind-break and to help separate that area from the planting beds further North. That was waiting on the fence along the Eastern boundary being installed, which happened at the start of March.

What should have been a fairly quick job of preparing the ground turned into a much bigger task when it became clear the ground had been heavily compacted by all the building plant traffic. When it gets compacted, the ground here turns into a solid layer which is almost waterproof – resulting in a thin layer of mud on top of an impermeable layer below. That’s no good for planting into so the compacted layer needed breaking up (generally with a pickaxe) and forking over. To make matters worse, under the compacted layer there was a lot of demolition rubble from the old barn buildings (which had been there since the House was built) – many barrow loads of full-sized bricks and half-sized concrete blocks – so that had to come out to check the ground wasn’t compacted below it. In some places that meant digging down nearly a full metre, to expose the original topsoil.

With the made-up ground consisting mostly of subsoil, rather than topsoil, it needed plenty of organic matter adding – of which there is a plentiful supply from several years of composting the hay cut every August from the wildflower meadow. The main problem with that is judging how far all of the disturbed ground and compost will settle, so that the hedge ends up level with the adjacent parking area. Ideally I’d leave it to settle for a month or so but then that would really be too late to be planting bare-root hedging.

Previously I’ve bought bare-rooted Hawthorn and Hornbeam from a local supplier but they were out of stock of Hornbeam for this season so I used mail-order supplier Best 4 Hedging based in Chorley, Lancashire, who were also a bit cheaper. I’d hoped that by placing an order on a Monday I’d avoid the risk of the plants being stuck in-transit over a (potentially warm) weekend but they ended up shipping on the Friday and I wasn’t expecting them until the Monday but I was pleasantly surprised by DPD delivering on the Saturday.

The plants were just starting to sprout leaves – which helped to confirm none of them were dead. They were very similar to what I’d planted before, with the expected variation in heights and stem thicknesses; quite possibly they had come from the same nursery as before. I kept them in buckets of water in the dark for a couple of days while finishing the preparation work and then planted them over a couple more days. The hedge is 24m long and I’d planned on 5 plants per metre (40cm spacing in two staggered rows 40cm apart) for 120 in total. It always feels like vandalism to cut off the top 1/3 of each one after planting, but this is important:

  • To encourage more shoots to sprout from the base, for leaf cover closer to the ground
  • To reduce the number of leaves needing water from the root system while that recovers from the shock of being transplanted
  • To reduce the effect of wind loading while the plants get settled – especially since I don’t bother staking them

It’s quite hard to get a good photo of a line of brown sticks against a brown background; I’ll take further photos once they get some decent leaf-cover.

120 bare-root Hornbeam plants forming a hedge by the Garages, with a mulch layer to help retain moisture

With the rainwater harvesting system feeding two outside taps by the garages it proved easy to water in the new plants using a hose and spray nozzle. While the cost of 1,000 litres of metered mains water is only about £2.50 it’s good not to have to give any thought to the water usage. I was also careful to thoroughly soak the compost mulch covering several times, in the hope that by being wet that would be less likely to blow away in the 40mph winds forecast for a few days after planting.