{"id":7277,"date":"2026-05-22T20:00:00","date_gmt":"2026-05-22T19:00:00","guid":{"rendered":"https:\/\/www.marshflattsfarm.org.uk\/wordpress\/?p=7277"},"modified":"2026-05-24T08:58:36","modified_gmt":"2026-05-24T07:58:36","slug":"matter-over-thread-low-limit-on-number-of-devices-when-using-gl-s20-tbr","status":"publish","type":"post","link":"https:\/\/www.marshflattsfarm.org.uk\/wordpress\/?p=7277","title":{"rendered":"Matter-over-Thread: Low Limit on Number of Devices when using GL-S20 TBR?"},"content":{"rendered":"\n<p>After successfully adding three IKEA <a href=\"https:\/\/www.ikea.com\/gb\/en\/p\/timmerflotte-temperature-humidity-sensor-smart-60618952\/\" target=\"_blank\" rel=\"noreferrer noopener\">TIMMERFLOTTE<\/a> Temperature &amp; Humidity sensors to the Matter-over-Thread network, which is connected to Home Assistant, I bought two further TIMMERFLOTTE sensors and one <a href=\"https:\/\/www.ikea.com\/gb\/en\/p\/grillplats-plug-smart-60624745\/\" target=\"_blank\" rel=\"noreferrer noopener\">GRILLPLATS<\/a> &#8216;smart plug&#8217; (primarily for its power monitoring function, rather than the ability to control the outlet &#8211; and potentially also to act as a mains-powered &#8216;range extender&#8217; for the Thread radio network).<sup data-fn=\"d3071f03-d49c-470f-ad56-7745b470cbfd\" class=\"fn\"><a href=\"#d3071f03-d49c-470f-ad56-7745b470cbfd\" id=\"d3071f03-d49c-470f-ad56-7745b470cbfd-link\">1<\/a><\/sup><\/p>\n\n\n\n<p>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&#8217;s no problem with the first stage of commissioning (&#8220;Connecting&#8221;) but the second stage (&#8220;Setting Up&#8221;) always times out. Since the first three devices are still working perfectly, there can&#8217;t be any issues with the basic set-up of Thread or Matter.<\/p>\n\n\n\n<p>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:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/community.home-assistant.io\/t\/issue-adding-multiple-thread-devices-using-gl-s20-thread-border-router\/919581\" target=\"_blank\" rel=\"noreferrer noopener\">Issue adding multiple thread devices using GL-S20 Thread border router<\/a> which reports problems with more than 3 devices<\/li>\n\n\n\n<li><a href=\"https:\/\/community.home-assistant.io\/t\/issue-adding-more-than-4-thread-devices-with-gl-s20-tbr\/993256\">Issue adding more than 4 thread devices with GL-S20 TBR<\/a> which reports problems with more than 4 devices<\/li>\n\n\n\n<li><a href=\"https:\/\/forum.gl-inet.com\/t\/gl-s20-openthread-failed-to-add-service\/55225\">GL-S20 OPENTHREAD: Failed to add service<\/a> which has issues with more than 4 devices and references a &#8220;Failed to add service&#8221; error message in the GL-S20 log file (which I&#8217;m also seeing)<\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/espressif\/esp-thread-br\/issues\/115\" target=\"_blank\" rel=\"noreferrer noopener\">Cannot add Matter over thread device due to &#8220;mdns: Cannot allocate memory&#8221; (TZ-1433)<\/a> looks to be closely related and refers to increasing the compile-time setting for CONFIG_MDNS_MAX_SERVICES<\/li>\n<\/ul>\n\n\n\n<p>None of those discussion threads has any definitive resolution identified (apart from perhaps the last one, which isn&#8217;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.<\/p>\n\n\n\n<p>While there is no newer &#8216;Stable&#8217; release of the GL-S20 firmware available (as of May 2026), I tried the latest &#8216;Beta&#8217; (2.0.1-B1 dated 2025-07-02) but that didn&#8217;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.)<\/p>\n\n\n\n<p>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&#8217;t appear to be much recent activity from GL.iNet in releasing new firmware for it. In particular, there doesn&#8217;t seem to be much prospect of them providing support for Thread version 1.4, which was released a few months ago.<\/p>\n\n\n\n<p>Under the covers the GL-S20 uses standard Espressif chips closely following the reference design (as documented <a href=\"https:\/\/docs.gl-inet.com\/router\/en\/4\/user_guide\/gl-s20\/#pcb-pinout\" target=\"_blank\" rel=\"noreferrer noopener\">here<\/a>). GL.iNet provide some guidance on compiling a very slightly adapted version of the standard Espressif &#8216;example&#8217; firmware <a href=\"https:\/\/docs.gl-inet.com\/iot\/en\/thread_board_router\/gl-s20\/user_manual\/gl-s20-tbr_firmware_compilation_guide\/\" target=\"_blank\" rel=\"noreferrer noopener\">here<\/a>. GL.iNet have also released an SDK for a variant of this firmware <a href=\"https:\/\/github.com\/gl-inet\/s20_thread_br_opensdk\" target=\"_blank\" rel=\"noreferrer noopener\">here<\/a>.<\/p>\n\n\n\n<p>More interestingly, Edoardo Pinci has released the source code for a fork of the firmware for the GL-S20 on GitHub at <a href=\"https:\/\/github.com\/EPinci\/ep-s20-otbr\">https:\/\/github.com\/EPinci\/ep-s20-otbr<\/a> 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 &#8211; which is fine, because that&#8217;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.<\/p>\n\n\n\n<p>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 &#8216;new&#8217; 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 &#8216;active&#8217; Thread devices, imposed by the GL-S20.<\/p>\n\n\n\n<p>With the three extra devices commissioned successfully, moving the GL-S20 back to its original location resulted in two of the &#8216;old&#8217; devices coming back online, for a total of four &#8211; and a couple of SrpServer &#8220;Failed to add service&#8221; error messages in the GL-S20 log file.<\/p>\n\n\n\n<p>My current hypothesis is there&#8217;s a hard-coded limit on the number of &#8216;services&#8217; 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&#8217;s no surprise that such a limit exists, it <em>is<\/em> a surprise that only a very few devices can be active concurrently.<\/p>\n\n\n\n<p>In some ways I&#8217;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 &#8211; 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&#8217;t seem to be many other options for continuing to use the GL-S20 hardware.<\/p>\n\n\n\n<p>So while I&#8217;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 &#8211; which ensures the hardware will be usable for many years to come.<\/p>\n\n\n<ol class=\"wp-block-footnotes\"><li id=\"d3071f03-d49c-470f-ad56-7745b470cbfd\">The <a href=\"https:\/\/openthread.io\/guides\/thread-primer\/node-roles-and-types\" target=\"_blank\" rel=\"noreferrer noopener\">Node Roles and Types page in the OpenThread documentation<\/a> 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 &#8220;Sleepy end device&#8221; (which is a sub-type of &#8220;Minimal End Device&#8221;) &#8211; so these are definitely not able to act as a &#8216;Range Extender&#8217; for the Thread wireless network. The GRILLPLATS devices are mains-powered and so more likely to be candidates for acting as a &#8216;Range Extender&#8217;. Home Assistant initially showed these as Thread device type &#8220;End device&#8221; without clarifying if this was a <em>Full<\/em> Thread Device or a <em>Minimal<\/em> Thread Device. The former would leave open the possibility of being a &#8220;Router Eligible End Device&#8221; (REED) which could be promoted to being a Router within the Thread wireless network (as distinct from a Thread <em>Border<\/em> 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 &#8220;Routing end device&#8221; within Home Assistant which confirms it <em>is<\/em> routing. It&#8217;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.  <a href=\"#d3071f03-d49c-470f-ad56-7745b470cbfd-link\" aria-label=\"Jump to footnote reference 1\">\u21a9\ufe0e<\/a><\/li><\/ol>","protected":false},"excerpt":{"rendered":"<p>After successfully adding three IKEA TIMMERFLOTTE Temperature &amp; Humidity sensors to the Matter-over-Thread network, which is connected to Home Assistant, I bought two further TIMMERFLOTTE sensors and one GRILLPLATS &#8216;smart plug&#8217; (primarily for its power monitoring function, rather than the &hellip; <a href=\"https:\/\/www.marshflattsfarm.org.uk\/wordpress\/?p=7277\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"[{\"content\":\"The <a href=\\\"https:\/\/openthread.io\/guides\/thread-primer\/node-roles-and-types\\\" target=\\\"_blank\\\" rel=\\\"noreferrer noopener\\\">Node Roles and Types page in the OpenThread documentation<\/a> 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 <em>Full<\/em> Thread Device or a <em>Minimal<\/em> 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 <em>Border<\/em> 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 <em>is<\/em> 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. \",\"id\":\"d3071f03-d49c-470f-ad56-7745b470cbfd\"}]"},"categories":[111,14,114,94],"tags":[],"class_list":["post-7277","post","type-post","status-publish","format-standard","hentry","category-environmental-monitoring","category-home-automation","category-matter-over-thread","category-outbuildings"],"_links":{"self":[{"href":"https:\/\/www.marshflattsfarm.org.uk\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/7277","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.marshflattsfarm.org.uk\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.marshflattsfarm.org.uk\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.marshflattsfarm.org.uk\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.marshflattsfarm.org.uk\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=7277"}],"version-history":[{"count":6,"href":"https:\/\/www.marshflattsfarm.org.uk\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/7277\/revisions"}],"predecessor-version":[{"id":7291,"href":"https:\/\/www.marshflattsfarm.org.uk\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/7277\/revisions\/7291"}],"wp:attachment":[{"href":"https:\/\/www.marshflattsfarm.org.uk\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=7277"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.marshflattsfarm.org.uk\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=7277"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.marshflattsfarm.org.uk\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=7277"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}