Getting Started with GL-S200 Thread Border Router kit

Last week we checked out the hardware for the GL.iNet GL-S200 Thread Border Router kit with three nRF52840 Thread Dev Boards, and I’ve now had time to work with the kit, so I’ll report my getting started experience in the second part of the review.

GL-S200 Initial Set Up

I connected the WAN port to my Ethernet Switch itself connected to my modem router and the LAN port to my laptop, so I could access the web interface using the default IP address ( The GL-S200 uses the same Admin Panel as other GL.iNet routers such as the Beryl AX router we reviewed at the beginning of the year.

GL-200 Dashboard

You’ll be greeted by a wizard to let you select the language and set a new password for the Admin Panel, and once you’re done you’ll have access to the familiar GL.iNet Admin Panel 4.x.x.

GL-S200 Admin Panel

After completing the wizard, the system should automatically connect to the Internet, and the middle RGB LED will change to green on the device.

Thread Network

The first step is then to go to THREAD MESH in the left panel in order to enable the Thread network.

Configure GL-S200 Border Router Thread Network

Thread Network Enabled IPv6 Address

Once you click on Enable, you’ll get three IPv6 addresses:

  • Link-Local Address – All interfaces reachable by a single radio transmission
  • Local Address – All interfaces reachable from outside a Thread network (It looks like it is called Global Address in OpenThread documentation)
    Update from GL-iNet: Accessing of global IPv6 internet is not supported by OT/OTBR yet.
    You can review Openthread’s official reply: 
    The local address is an OMR(off-mesh-routable) address, using which you can access Thread devices from the wifi/ethernet side.
  • Mesh-Local EID – All interfaces reachable within the same Thread network

If you have your own Thread devices, you can switch to the Thread Commissioning menu and input the EUI64 of your devices and the pre-shared key, but GL.iNet made a simpler section in the web interface to handle their Thread Dev Boards, or TBD for shorts.

GL Dev Board Add Devices

In the GL DEV BOARD->Devices section, we can click on the Add Devices button, and then Apply. If we press the SW2 switch on one board it will then be automatically added to the GL-S200 Thread Border Router.

Thread Dev Board A0+A1 type

We should select the A0+A1 type and name the board. We can repeat the same for the other two boards and we’ll get the temperature, pressure, humidity, and illuminance values for all three boards showing up in the Admin Panel.

GL S200 Admin Panel GL DEV BOARD Devices Sensors

GL-S200 firmware update

At that point, I remember forgot something… GL.iNet informed me they have a new firmware for the GL-S200 that I should apply manually. So let’s do that now by going to “SYSTEM->Upgrade”.

GL-S200 Firmware Upgrade

The firmware shows the 4.1.3 release 5 firmware is up to date in the Admin Panel because the new firmware was not pushed to the OTA server. But I was given a download link with a newer firmware that was compiled on the 6th of March 2023.

GL-S200 Firmware Download

I downloaded the file, when to the Local Upgrade section, and uploaded the file to the GL-S200 Thread Border Router.

GL-S200 Thread Border Router Local Firmware Upgrade

Verification was successful, so I clicked on Install, and eventually, I got Firmware 4.1.3 Release7 installed on my device.

GL-S200 Admin Panel Firmware 4.1.3 Release7 - Thread Border Router

Upgrading Thread Dev Boards firmware

While I was going on with that firmware update business, I also noticed the Thread Dev Boards were also eligible for a firmware update from version 1.1.5 to 1.1.9, so I went ahead and it worked flawlessly.

Thread Dev Board Firmware Upgrade 1.1.9


Thread Topology

Thread relies on Mesh networking, so when nodes are close to the router they connect directly to the router, and when they are out of range or the signal is weak, they can act as routers themselves. With all devices on my desk…

Getting Started GL-S200 Thread Border Router

… the network had a star topology as expected.

GL-S200 Star Thread Topology - Thread Border Router

So I tried to move the boards away from each other and arranged them in a straight line, even placing one outdoors.

Thread Dev Boards Indoor Outdoor

We can easily spot the one outdoors with a higher temperature and illuminance.

Thread Signal Strength

If we click on “Self” in the topology chart we can also see the signal strength of the node connected to the Thread Border Router. But at no point was I able to use the Thread Dev Board as a router. We even went to walk outside to try to get out of reach or at least a weaker signal, but Mesh networking would just not work the way I was expecting. So I asked GL.iNet engineers, and they replied a thread router firmware was required for this to work:

Currently our default TBD firmware is of the thread end device type and cannot be directly connected to each other. We will provide you with the thread router firmware and the corresponding TBD brushing guide later today.
They sent me the router firmware, as well as the mcumgr utility for Linux and Windows.
nRF52 mcumgr utility linux windows
I connected one of the Thread Dev Boards to a Linux (Ubuntu 22.04) PC:

The serial port is detected, so I can run the command to check the current firmware status:

It failed the first time with “NMP timeout” error, but worked the second time. We can see the 1.1.9 firmware which I updated in the Admin Panel is in slot 0, and the earlier 1.1.5 firmware in slot 1. Now I can try to flash the Router firmware:

Let’s check it out again:

The firmware in slot 0 is the currently running firmware, while the firmware in slot 1 is the Router version we’ve just flashed. We can switch to the new firmware as follows:

We can then reboot the board and make sure the new firmware starting with 7dbb hash is in slot 0:

After adding the board again to the Admin Panel, we can see the Thread Leader (GL-S200), two End Devices, and a Router (the board we’ve just flashed with the Router firmware).

Thread Topology: Thread Leader (Border Router), Router, and End Device

None of the End Devices are connected to the Board 1 router because all are on my desk and connected to the GL-S200. So I move Board 1 along with one of the End Devices into another room, 12 meters from the GL-S200 Thread Border Router. But the topology did not change. It looks like the connection is “sticky” and a Thread node will only reconnect to another Router if it is out of range, and not only based on the signal strength.

But when I turned off the GL-S200 and restarted it, the two End Devices had reconnected to the Board 1 router that was now the “Thread Leader” in the network.

Thread Dev Board Router firmware Thread Leader

So it does work. I did not expect it to work exactly like that because Board 2 is 10 centimeters from the GL-S200 Thread Border Router (self) and Board 1 is 12 meters away, but Board 2 did not reconnect to the GL-S200, even after a while. In other words, as long as the connection is alive, a Thread node is not going to reconnect to another router even if it is closer and with a stronger signal, and I suppose that makes sense for battery life.

GL-S200 Thread Border Router Mesh Networking

So I took Board 2 (End Device) and Board 1 (Router) for a short trip out of range of the GL-S200, then turned on Board 1, followed by Board 2 to make sure they associated, and walked back home. And it worked, as in the diagram above Board 2 connects to GL-200 “Thread Leader” through Board 1 acting as a router.

GL Thread Dev Board information

GL-S200 Devices Action

If we click on the three dots in the Action column for a specific device, we’ll get access to more options with Device Detail, View Records, Edit Device, Get Code, and Reset Device.

Device info

Thread IoT node Device Details

We’ll get the EUI-64, name, IPv6 address, Extended MAC address (64-bit instead of the usual 48-bit), firmware version, and sensor data.

View Records

After leaving the boards running for over 24 hours, I went to check the “View Records” menu to see charts for the sensors’ values of a specific board.

Gl S200 GL DEV BOARD View Records Day

It looks mostly fine, but as you can see on the bottom left, there are values at 9 pm and the chart only starts at 11 pm for some reason. It’s the same for all boards.

GL DEV BOARD View Records Hour

It looks even worse on the hourly chart. It looks like a display bug rather than missing data points since we can always get a data point on the left side.

Code examples

The “Get Code” section may be the most important part if you’re going to monitor and control your own Thread devices with five code examples provided.

Thread Devices Code Sample

We’ll need to connect to the GL-S200 Thread Border Router via SSH to run the samples. Let’s start with the code to read data from sensors.

We can also select a specific device using its EUI-64:

Here’s the source code for reference:

Let’s try the other samples.

The second sample control the two RGB LEDs on the board selected by its EUI-64 device ID:

Here’s a short video demo to show what it looks like.

YouTube video player

The GPIO control sample set some I/O to output mode, the low and high, again for a specific board:

The last two samples to control the LEDs and GPIOs use the coap_cli “small CoAP implementation” command, for example, to turn the LEDs off:

coap_cli usage:

The action trigger demo reports the Knob status:

The code relies on /usr/bin/eco binary [Update: it looks like it’s the eco-lua Lua interpreter project, see comments section]:

It’s the same for the sensor trigger sample that monitors the PIR sensor for all Thread Dev Boards connected to the GL-S200 Thread Border Router:

All those samples could help you get started with your own scripts.

GL-S200 “Automations”

The GL DEV BOARDS section also includes an “Automations” section.

GL-S200 Thread Border Router Create Automation

I’ll try to control the RGB LEDS on two Thread Dev Boards by using the knob on the remaining third board.

Automation User Action

After we’ve given a name to the automation, we can select user action, and then the board we’ll use as the knob: “Board 2”.

Trigger Board

Trigger Automation Turn Knob

I selected “Turning the knob”, and then “Device(s) Action”.

Automation Device Action

Since I want to control the other two boards, I selected “Board 1” and “Board 2”.

Create Automation Actuators

Then the only option is “Change Color”, so let’s select that, and click Apply.

Automation Change Color

But it’s not working, and the RGB LEDs remain turned off no matter in which direction I turn the know. I eventually found out the RGB LEDs had to be turned on before we could change the colors, so I created another automation to turn the LEDs on/off when pressing the knob.

GL-S200 Automations LED control

And now it’s working.
YouTube video player

The Automation section also supports webhooks, so I decided to create an automation to alert me in Discord when motion is detected. For this purpose, I created a Discord server and got a Webhook URL( following the instructions on Discord.

CNX Software Discord Server

Then I created another automation selecting Sensor Trigger…

GL-S200 Automations Sensor Trigger

… “Human Body Detected” (which just means the PIR motion sensor has been triggered)

GL-S200 Automations Human Body Detected

… and “Webhook”.

GL-S200 Automations Webhook

There I added my Webhook URL, selected Json, and added content like:

GL-S200 Webhook Discord

Finally, I clicked on Apply and repeated the same procedure to sense motion in the kitchen and office.

GL-S200 Thread Dev boards Motion Detection Automations

Now, I can go to Discord, and walk around the house to trigger the PIR motion sensors for all three boards.

Discord GL-S200 Thread Border Router notifications

Success! The automation section is pretty neat, but it looks like it works only with GL.iNet Thread Dev Boards. So I asked whether the source code would be shared for people to update the solution to work with their own Thread devices, but I did not get an answer to that specific question.


Just like other GL.iNet network devices, the GL-S200 supports GoodCloud for remote access, but it has limited use since it the Thread and Bluetooth parts are not supported.

GoodCloud GL-S200

I initially thought the Mode Switch button might be used to switch between BLE and Thread, but just like in earlier routers, it can be set to switch on/off WireGuard or OpenVPN.

GL S200 Mode Button

Due to time constraints, I have not tested the Bluetooth part, but I’d expect the interface and experience to be similar to the GL-S10 BLE to MQTT bridge I reviewed last year.

This was an interesting experience, and I’d like to thank GL.iNet for sending the GL-S200 Thread Border Router kit for evaluation/beta testing. The kit I’ve received is available for pre-order for $154.00 plus shipping, but if you already have your own Thread nodes, then the GL-S200 alone is sold for $79 during the pre-order period, after which it will be $99.

Share this:
FacebookTwitterHacker NewsSlashdotRedditLinkedInPinterestFlipboardMeWeLineEmailShare

Support CNX Software! Donate via cryptocurrencies, become a Patron on Patreon, or purchase goods on Amazon or Aliexpress

ROCK Pi 4C Plus

9 Replies to “Getting Started with GL-S200 Thread Border Router kit”

  1. Interesting reading. I have two questions :

    • what is this command bt -l that you use to list serial ports on ubuntu ? Never heard of that. It looks like ‘bluetooth’, but … is it ?
    • what is this elo shell/language ? Any more information about it ?
    1. I could not find any information about eco. It’s just a binary file (ELF) in the OpenWrt image.

  2. I wonder why they implemented hardware on their own, instead of just supplying a docker image and a usb-connected module. World have been a lot more useful for most users

Leave a Reply

Your email address will not be published. Required fields are marked *

Khadas VIM4 SBC
Khadas VIM4 SBC