> ## Documentation Index
> Fetch the complete documentation index at: https://docs.adsumnetworks.com/llms.txt
> Use this file to discover all available pages before exploring further.

# LBG20x first run, step by step

> A complete first run on the Fanstel LBG20x: from a relay out of the box to readings on your own platform, from its own GNSS position, and a command travelling back. No prior knowledge of the board or of Adsum IoT Coder assumed.

<div className="adsum-mast">
  <div><span className="adsum-mast-k">How many steps?</span><span className="adsum-mast-v">Seven</span><span className="adsum-mast-n">Two of them wait on the relay's own radio cycle.</span></div>
  <div><span className="adsum-mast-k">What gets flashed?</span><span className="adsum-mast-v">Usually nothing</span><span className="adsum-mast-n">The demo is on every relay. Adsum IoT Coder updates both halves over Bluetooth.</span></div>
  <div><span className="adsum-mast-k">Where do readings go?</span><span className="adsum-mast-v">Your platform</span><span className="adsum-mast-n">Your own tenant. Nothing of ours in the path.</span></div>
  <div><span className="adsum-mast-k">What do you need to know?</span><span className="adsum-mast-v">Nothing yet</span><span className="adsum-mast-n">No prior knowledge of the board or of Adsum IoT Coder.</span></div>
</div>

<div className="adsum-byline">
  <span>Gateway <b>Fanstel LBG20BC02C</b></span>
  <span>Firmware <b>the LBG20x demo pair</b></span>
  <span>Verified on the bench by <b>Adsum Networks, October 2026</b></span>
</div>

<Card title="New to the LBG20x?" icon="microchip" href="/supported-hardware/fanstel/lbg20x" horizontal>
  The relay, what the firmware does, and every way to have it.
</Card>

## What you are building

The LBG20x is a **relay** for outdoors. It listens for small Bluetooth sensors around it, keeps what they say, finds its own position, and forwards what matters over Wi-Fi, a mobile network or satellite to a platform you choose. Nothing you do here writes any of your data to Adsum.

### The hardware

The LBG20x is made and sold by [Fanstel](https://www.fanstel.com/lbg51e20c). This guide was verified on an **LBG20BC02C**, the model with Wi-Fi; the LBG20BC runs the same image.

| Part | What it is | What it does in this run |
| :- | :- | :- |
| Bluetooth module | Fanstel **BM20BC**, on Nordic's **nRF54LM20B** (Bluetooth 6.0) | Hears your sensors, keeps what is worth keeping, sends over Wi-Fi, and is what Adsum IoT Coder pairs with |
| Cellular modem | Nordic **nRF9151**: LTE-M, NB-IoT, NB-NTN satellite and GNSS | Takes the relay's own position, attaches to the mobile network, and sends the readings to your platform |
| Antennas | LTE inside or on SMA; GNSS on u.FL | The GNSS antenna needs to see the sky for the fix |
| Power | USB-C or M12 | Plug it in. The 18650 battery and solar are next in the firmware |
| Enclosure | IP67, 107 × 141 × 40 mm, with a wall-mount bracket | For outdoors: a pole, a wall, a vehicle |

The important thing to understand before you touch it: **this relay is two computers, not one**, and almost every confusing moment in a first run comes from forgetting that.

<Frame caption="The two halves. The Bluetooth half hears your sensors and decides what is worth keeping. The wide-area half owns the modem, the position and the schedule. They talk to each other over two wires, and each can only report what it knows itself.">
  <img className="block dark:hidden" src="https://mintcdn.com/adsumnetworks/FHuIJBYuebMJDAfk/images/guides/blg20x/diagram-1-light.svg?fit=max&auto=format&n=FHuIJBYuebMJDAfk&q=85&s=de3d033a60980f3f9848424e3583b598" alt="Sensors advertise to the Bluetooth half, which passes digests over a two-wire link to the wide-area half, which sends them over the mobile network to your platform." width="800" height="300" data-path="images/guides/blg20x/diagram-1-light.svg" />

  <img className="hidden dark:block" src="https://mintcdn.com/adsumnetworks/FHuIJBYuebMJDAfk/images/guides/blg20x/diagram-1-dark.svg?fit=max&auto=format&n=FHuIJBYuebMJDAfk&q=85&s=d7c180c346622ac13cb3db1f0e00caac" alt="Sensors advertise to the Bluetooth half, which passes digests over a two-wire link to the wide-area half, which sends them over the mobile network to your platform." width="800" height="300" data-path="images/guides/blg20x/diagram-1-dark.svg" />
</Frame>

### Adsum IoT Coder, in one paragraph

Adsum IoT Coder is a VS Code extension. For this run it uses your computer's Bluetooth to pair with the relay, claim it, update both halves and commission it, with its agent asking one question at a time and your approval before each write. The [NTN-GW Commissioner](https://commission.adsumnetworks.com/ntn-gw/) does the commissioning from a browser instead, for an installer with a phone.

## What you need

| You need | Why, and what to watch |
| :- | :- |
| **The LBG20x**, its antennas fitted, and a **SIM** on a plan that allows LTE-M or NB-IoT | The wide-area half needs a network to attach to |
| **A view of the sky** for the GNSS antenna, outdoors or at a window | The relay's position comes from its own fix |
| **VS Code** with **Adsum IoT Coder 0.5.1** or later, signed in, on a computer with Bluetooth | Tested on macOS and Linux |
| A **ThingsBoard** account (free), or another device-data platform | Get it **before** you start: it is the one prerequisite that interrupts the run. [What it is, and where to sign up](/supported-hardware/fanstel/blg20x-first-run#thingsboard-what-it-is-and-why-you-need-it) |
| A **Bluetooth LE sensor** within a few metres | Anything that advertises. You will need its address |
| **Debug probes**, rarely | Only for a relay that left the factory with an older release: see step 2b |

## The whole run at a glance

1. **Open the Hardware page** in Adsum IoT Coder.
2. **Pair, claim and update** the relay over Bluetooth.
3. **Commission it**, with its own GNSS position.
4. **Set the deployment class**, if you commission from a browser.
5. **Admit your sensor.**
6. **Send readings to your platform**: one radio cycle.
7. **Send a command back**: one radio cycle.

## Step 1: Open the Hardware page

Install [Adsum IoT Coder](https://marketplace.visualstudio.com/items?itemName=AdsumNetwork.nrf-ai-debugger) in VS Code, sign in, and open the **Hardware** page. Under **Gateways in range** it lists the relays it hears over Bluetooth.

## Step 2: Pair, claim and update

*about 5 minutes*

The relay advertises for five minutes after power-on and after each disconnect, then stops. To open the window again, **hold DFU1 for 3 to 8 seconds**. A new device pairs only after this hold.

The Hardware page then takes the relay through four steps:

* **Pair.** Your operating system asks for the passkey the page shows.
* **Claim it for this computer.** The relay's service now takes images only with this computer's key.
* **Check its firmware.** When a newer demo release is out, **Update** installs it over Bluetooth, both halves, in about four minutes, and the relay keeps its settings.
* **Commission it**: step 3.

<Frame caption="An LBG20x in range on the Hardware page: paired, claimed by this computer, its firmware current, not commissioned yet.">
  <img src="https://mintcdn.com/adsumnetworks/OZLcvSxZlz2IQqUn/images/states/32-hardware-bluetooth-commission-it.png?fit=max&auto=format&n=OZLcvSxZlz2IQqUn&q=85&s=98ec011b27d8ac489a65b294d1a663d0" alt="Gateways in range: LBG20x AD50, window open and paired; 1 paired with its two firmware versions, 2 claimed by this computer, 3 up to date with Check again, 4 not commissioned with Commission it" style={{ maxWidth: "444px", margin: "0 auto" }} width="824" height="338" data-path="images/states/32-hardware-bluetooth-commission-it.png" />
</Frame>

### Step 2b: a relay on an older release, once

A relay that left the factory with a release older than its Bluetooth service takes our pair over the debug probes once; from then on every update is over Bluetooth. Put one probe on each half's header, **BLE-SWD1** and **LTE-SWD1**, and let Adsum IoT Coder read the silicon behind each probe before anything is written: a probe's name says nothing about which half it reaches.

The wide-area half takes three commands in one session, with nothing in between, because erasing it clears the word that keeps its debug port open:

```bash theme={null}
nrfutil device program --firmware nrf9151/merged.hex \
  --serial-number <from the list> --options reset=RESET_NONE

nrfutil device x-write --address 0x00FF8000 --value 0x50FA50FA \
  --serial-number <same>

nrfutil device reset --reset-kind RESET_SYSTEM --serial-number <same>
```

The Bluetooth half is the same without the middle command. Then go back to step 2, over Bluetooth.

## Step 3: Commission it, with its own position

*about 10 minutes*

**Commission it** opens a session. The agent reads what the relay already holds and asks one question at a time for what it cannot read, then writes each setting, reads it back from the relay, starts the relay and checks that it is working.

* **Where it is.** The relay takes its own GNSS fix: a two-minute window, with the cellular radio paused. With no fix, it offers five more minutes once: first when it heard three satellites or more, or with "the antenna does not see the sky" when it heard fewer. A phone's position, or one typed in, is always offered beside it.
* **Its name and key.** The key is shown once, and the session adds it to `adsum-fleet-register.csv` in your workspace: keep that file, it is the only place the key exists.
* **The Wi-Fi**, on the LBG20BC02C, then the **mobile network and its class**: mobile only, mobile with satellite backup, or satellite only.
* **The platform**: its host, port and the device's token.

The answers that repeat are kept in a site profile, `adsum-site.json`, so the next relay needs only its fix, the Wi-Fi passphrase and its token. It never holds a password, a token or a key.

<Frame caption="Commissioned, in the relay's own words: still checking its first send. The (i) holds the position, how it sends and where, and the commissioning window.">
  <img src="https://mintcdn.com/adsumnetworks/OZLcvSxZlz2IQqUn/images/states/33-hardware-bluetooth-commissioned.png?fit=max&auto=format&n=OZLcvSxZlz2IQqUn&q=85&s=2f273030e6c3f5978e5d5afa08aa1c0a" alt="The same relay commissioned: 4 commissioned, still checking, with Change" style={{ maxWidth: "444px", margin: "0 auto" }} width="824" height="338" data-path="images/states/33-hardware-bluetooth-commissioned.png" />
</Frame>

**The cue light says it too.** The LBG20x has no sounder: three flashes mean commissioned, and three flashes then a minute steady mean the first data has been sent, so you can leave.

### From a browser

The [NTN-GW Commissioner](https://commission.adsumnetworks.com/ntn-gw/) does the same in Chrome over Web Bluetooth, on a phone or a laptop, and asks for the relay's own fix in its second step. A relay claimed by a computer is still commissioned from the browser, and takes its firmware from that computer.

## Step 4: Set the deployment class

*From Adsum IoT Coder this is part of step 3.* From the browser, the class has its own panel, and the order matters: to narrow, untick satellite in the network policy **and** clear it from the ladder, write the policy, then the class; to widen, the class first. The [BLG20x guide, step 4](/supported-hardware/fanstel/blg20x-first-run#step-4-set-the-deployment-class) shows each panel.

## Step 5: Admit your sensor

*about 5 minutes*

**A commissioned relay with no access list ingests nothing.** That is deliberate: on a metered link, admitting whatever happens to be nearby is a bill somebody else writes for you. Admit your sensor with the **expected list**, one entry per line, `ADDRESS, profile, label, short id`:

```bash theme={null}
D2:14:97:21:15:C9, any, kitchen probe, 1
```

Writing replaces the whole list, an entry admits its device on its own, and a rotating address is refused. The [BLG20x guide, step 5](/supported-hardware/fanstel/blg20x-first-run#step-5-admit-your-sensor) shows the quarantine and the counters.

## Step 6: Send readings to your platform

*about 10 minutes, plus one radio cycle*

On your ThingsBoard tenant, a device profile with **CoAP** transport and a **Protobuf** payload, a device on that profile, and its access token. The token goes into step 3.

<Frame caption="Transport CoAP, payload Protobuf. These two fields are the whole step: get either wrong and the readings silently never arrive.">
  <img src="https://mintcdn.com/adsumnetworks/FHuIJBYuebMJDAfk/images/guides/blg20x/tb-07-profile-transport-coap.png?fit=max&auto=format&n=FHuIJBYuebMJDAfk&q=85&s=021c7bd12268ec86ac160641da3f6492" alt="A device profile with CoAP transport and protobuf payload highlighted" width="1460" height="880" data-path="images/guides/blg20x/tb-07-profile-transport-coap.png" />
</Frame>

<Frame caption="The first record. Several intact keys, each carrying the device's own timestamp: that is what proves the profile is right.">
  <img src="https://mintcdn.com/adsumnetworks/FHuIJBYuebMJDAfk/images/guides/blg20x/tb-23-telemetry-arrived.png?fit=max&auto=format&n=FHuIJBYuebMJDAfk&q=85&s=021aec52b5c41ee873563b98ea293a1e" alt="Telemetry keys arriving on the platform, each with the device's own timestamp" width="1460" height="880" data-path="images/guides/blg20x/tb-23-telemetry-arrived.png" />
</Frame>

<Check>
  **Stop here and you have a working relay**

  It hears your sensors, knows where it is, keeps their readings, and sends them to your own platform on its own schedule. The code to look for is `2.01`: the platform took the reading.
</Check>

## Step 7: Send a command back

*one radio cycle*

On your tenant, add a **shared attribute** to the device: key `cmd`, type string, value `clear_latch`. The relay reads its shared attributes on its next radio cycle: up to about fifteen minutes, usually a few. The pass is the Bluetooth half logging that it received the command. **Delete the attribute afterwards**: the relay acts on it at every cycle while it stays set.

## Satellite, when you want it

The satellite edition, Nordic's NB-NTN modem firmware and an NB-NTN SIM, and the relay's own fix times the link. On the bench, registration on the satellite took 117 to 122 seconds, and one alert was sent and acknowledged on 9 October 2026. Over satellite only alerts and status travel, in one datagram of 128 B at most; the rest waits in flash for a cheaper uplink. More in [satellite IoT: NB-NTN](/satellite-ntn).

## When something looks wrong

| What you see | What it usually is |
| :- | :- |
| **No GNSS fix** | The antenna does not see the sky. Move the relay outdoors or to a window, take the five more minutes once, or give a phone's or a typed position |
| **The relay is not in range** | Its five-minute window has closed. Hold DFU1 for 3 to 8 seconds |
| **One press, counted once** | DFU1 reaches both halves, and both report it. A press reported by both within two seconds counts once |
| **The USB cable does nothing** | The mainboard V2 does not route USB data. Claiming and updating go over Bluetooth |
| **No sound** | The LBG20x has no sounder. Watch the cue light: short is accepted, long is refused, three is commissioned |
| **Readings never arrive, no error anywhere** | Almost always the platform's device profile: CoAP and protobuf. Check those two fields first |

The rest of the [BLG20x table](/supported-hardware/fanstel/blg20x-first-run#when-something-looks-wrong) applies: it is the same firmware.

## What the demo firmware will not do

| Limit | What it means in practice |
| :- | :- |
| **Ten devices** | The first ten this relay hears become its set. The set survives a restart; you can clear it and start again five times in the relay's life |
| **10 MB a month**, mobile | A relay left running uses well under this. If it is ever reached, the uplink waits for the next month and everything else keeps working |
| **10 KB a month**, satellite | Alerts and status only |

**There is no time limit.** The demo has no device-management client: it is not updated over the mobile network, while a newer demo release still installs over Bluetooth. The production licence carries it, per relay at [www.adsumnetworks.com](https://www.adsumnetworks.com/licensing/).

<CardGroup cols={2}>
  <Card title="The LBG20x" icon="microchip" href="/supported-hardware/fanstel/lbg20x">
    The relay, the firmware, and every way to have it.
  </Card>

  <Card title="Firmware specification" icon="list-check" href="/supported-hardware/fanstel/lbg20x-specification">
    The GNSS fix, the buttons, the cue light, the uplink order and the tests.
  </Card>

  <Card title="The NTN-GW Commissioner" icon="bluetooth" href="https://commission.adsumnetworks.com/ntn-gw/">
    Commission a relay from Chrome, over Web Bluetooth.
  </Card>

  <Card title="Ask for more" icon="envelope" href="mailto:support@adsumnetworks.com?subject=LBG20x">
    A production licence, the source, or a build made for you.
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.