Tafel 120 verraadt zichzelf: RadBeacon RBT-008 Locator Tent reverse engineeren

5 Oktober 2026 –

Het apparaat dat ik vandaag in handen heb gekregen heeft een functie die direct herkenbaar is. Mijn nieuwsgierigheid wil weten wat er onder de motorkap gebeurt. Dit keer is het een tafelnummer. Wit kunststof, gele rand, groot ‘120’ erop. Wie wel eens onder de gouden bogen aan de bestelzuil heeft gestaan, heeft er vast eens een mee naar tafel genomen.

Tafelnummer 120. Op het eerste gezicht niet meer dan een kunststof houder.

Een tafelnummer met een FCC-ID
In de vouw van de houder zit een wit plaatje, vastgezet met twee schroeven. Daarop staat:

RadBeacon Locator Tent
Model:  RBT-008
FCC ID: 2ABYU-RBT008
IC:     12010A-RBT008
Radius Networks, Inc.

Een tafelnummer met een FCC-ID. Dan zit er meer in dan alleen kunststof.

Openmaken
Achter het plaatje zit de elektronica. Een ronde printplaat, een flinke lithium-knoopcel en verder opvallend weinig. Het ziet er onderhoudsvriendelijk en gemakkelijk stapelbaar uit. Een herkenbare goudgele kleur en een magnetische voet, waardoor deze gestapeld nog steeds er stabiel staan.

De RBT-008 uit elkaar: houder, knoopcel, BLE-print en typeplaatje.

De print
Het hart is een EM Microelectronic EMBC22. Dat is een Bluetooth Low Energy-module onder een metalen afscherming. Daarnaast zie ik een groene en een rode status-LED, een IC met de markering U5, een paar passieve componenten, een lege connector-footprint J3 en een veld testpads J2.

Op de zeefdruk staat EMBC22 24mm v2.0.

De zeefdruk liegt niet. Met de schuifmaat kom ik op ongeveer 24 mm, wanneer ik de bracket voor de knoopcelhouder niet mee zou nemen in de meting.

Ongeveer 24 mm, zoals de print zelf belooft.

De voeding is een Toshiba CR2477. Een 3 V-lithiumcel van rond de 1000 mAh. Zo’n beacon doet bijna niets. Hij slaapt, wordt periodiek wakker, verstuurt een Bluetooth-pakket en slaapt weer. Met deze cel houdt hij dat jaren vol.

Twee FCC-ID’s
Op het typeplaatje staat een ander FCC-ID dan op de Bluetooth-module. Dat is logisch. Een FCC ID is de unieke registratiecode die de Amerikaanse Federal Communications Commission toekent aan een apparaat dat radiogolven uitzendt, zodra het is goedgekeurd. Met die code vind je het openbare certificeringsdossier terug, met testrapporten, foto’s en de handleiding, altijd een interessante start voor een reverse engineering project. Na wat zoekwerk vind ik online terug dat de EMBC22 zelf al een gecertificeerde radiomodule is:

EM Microelectronic
Model:  EMBC22
FCC ID: 2ACQR-EMBC22
IC:     12155A-EMBC22
De EMBC22 heeft zijn eigen FCC- en IC-certificering.

Radius Networks bouwt die module in een eigen product, met een eigen certificering:

Radius Networks RBT-008      FCC ID: 2ABYU-RBT008
  bevat
EM Microelectronic EMBC22    FCC ID: 2ACQR-EMBC22

Even bij de FCC kijken
Met het FCC-ID van het complete apparaat vind ik op fccid.io het hele dossier. Final action op 29 november 2018, frequentiebereik 2402 tot 2480 MHz. Als apparaatomschrijving staat er Mini tent, Tall tent. Eén certificering voor twee varianten.

Openbaar zijn de handleiding, interne en externe foto’s, foto’s van de testopstelling, het testrapport, de model difference letter en de RF exposure-informatie. Blokschema, schema’s en operation description staan er alleen als metadata. Daar heeft Radius Networks vertrouwelijkheid voor aangevraagd. Ook dat verzoek staat in de lijst.

Het FCC-dossier van de RBT-008. Schema’s en operation description zijn vertrouwelijk.

Mijn print naast de FCC-foto
De interne foto’s uit het dossier laten dezelfde ronde print zien. Zelfde opzet, zelfde LED’s, zelfde batterijlippen, zelfde testpads. Maar het is niet exact dezelfde print. Op de FCC-foto zit de radiochip nog onafgeschermd op de print. Mijn exemplaar is v2.0, met de afgeschermde EMBC22-module. Tussen het FCC-exemplaar en het mijne zit dus minstens één revisie.

Mijn v2.0-print voor de interne foto uit het FCC-dossier. Zelfde opzet, maar daar zit de chip nog zonder afscherming.

Ook de oorspronkelijke radiotest is gedocumenteerd.

De RBT-008 tijdens de radiated-emission test in de meetkamer.

Waar is dit voor?
De naam zegt het al: Locator Tent. In een restaurant bestelt een klant aan de zuil, pakt nummer 120 uit het rek en gaat ergens zitten. De medewerker met bestelling 120 hoeft dan niet te zoeken. Vaste Bluetooth-ontvangers bepalen in welke zone de locator staat. De beacon zelf weet niet waar hij staat. Geen GPS, geen kaart. Hij roept alleen: ‘hier ben ik’.

Meerdere ontvangers meten hoe sterk dat signaal binnenkomt:

Receiver A   -45 dBm
Receiver B   -67 dBm
Receiver C   -81 dBm

Receiver A staat het dichtst bij. Met genoeg ontvangers bepaalt de software bij welke tafel de locator ligt.

Zoeken met Bluetooth
Een eerste scan kan met nRF Connect. Ik wil de ruwe data zien, dus gebruik ik Python met Bleak.

pip install bleak

Ik filter op het Bluetooth-adres van de beacon en print alles wat binnenkomt:

python

import asyncio
from bleak import BleakScanner

TARGET = "E0:18:9F:0B:4B:DF"

def callback(device, adv):
    if device.address.upper() != TARGET:
        return
    print(device.address, adv.local_name, adv.rssi)
    for company_id, data in adv.manufacturer_data.items():
        print(f"0x{company_id:04X}: {data.hex(' ').upper()}")

async def main():
    scanner = BleakScanner(callback)
    await scanner.start()
    while True:
        await asyncio.sleep(1)

asyncio.run(main())
De scanner in PyCharm, met hulpfuncties voor hex- en ASCII-weergave.

Na een paar seconden verschijnt hij: RNTENT0B4BDF op adres E0:18:9F:0B:4B:DF.

De beacon gevonden als RNTENT0B4BDF, op dat moment met een RSSI van -69 dBm.

De laatste zes tekens van de naam, 0B4BDF, zijn de laatste drie bytes van het Bluetooth-adres. Geen toeval. En RNTENT lees ik als Radius Networks Tent. We hebben onze locator.

Wat zendt hij uit?
De beacon wisselt verschillende advertisements af. Soms alleen de naam. Even later komt er manufacturer-specific data voorbij, met manufacturer-ID 0x0118. Dat is het Bluetooth-ID van Radius Networks.

De payload:

BE AC 52 41 44 4E 54 41 42 4C 45 53
45 52 56 49 43 45 2E E0 00 01 C3 62

Mijn eerste ASCII-weergave maakt daar RADNTABLESERVICE. van. Maar die punt is geen punt.

Radius Networks is de partij achter AltBeacon, een open beaconformaat. Een AltBeacon-pakket begint met de code BE AC, gevolgd door een ID van 20 bytes, een referentie-RSSI en één gereserveerde byte. Precies 24 bytes. Precies wat ik ontvang.

Uit elkaar gehaald:

BE AC            AltBeacon-code
52 41 ... 43 45  ID1  "RADNTABLESERVICE" (16 bytes)
2E E0            ID2  0x2EE0 = 12000
00 01            ID3  0x0001 = 1
C3               referentie-RSSI: -61 dBm op 1 meter
62               gereserveerd

De punt is de eerste byte van ID2. In Python:

python

data = bytes.fromhex("BEAC5241444E5441424C45534552564943452EE00001C362")
id1 = data[2:18].decode("ascii")            # RADNTABLESERVICE
id2 = int.from_bytes(data[18:20], "big")    # 12000
id3 = int.from_bytes(data[20:22], "big")    # 1
ref_rssi = data[22] - 256                   # -61 dBm

Maar waar staat 120?
Dat is de leukste vraag. Op de voorkant staat groot 120. Staat dat nummer ook in de lucht? Ik laat Python zoeken naar 0x78, naar ASCII 120 (31 32 30) en naar 00 78 en 78 00. Niets. Maar ID2 is 12000. Dat is 120 maal 100.

Dat kan toeval zijn. Het kan ook een zone- of locatiecode zijn die er toevallig op lijkt. Het kan ook zijn dat de beacon helemaal niet weet dat hij 120 is, en dat de restaurantsoftware een koppeling bijhoudt:

BLE-beacon             Nummer
E0:18:9F:0B:4B:DF  ->  120

Met één exemplaar is dat niet te beslissen. Met een tweede RBT-008 met een ander nummer wel. Dan vergelijk ik beide payloads byte voor byte en zie ik meteen of ID2 meeverandert. Maar helaas heb ik de beschikking over één exemplaar… mocht er ooit een tweede komen, dan kan ga ik dit alsnog checken denk ik.

Nog bruikbaar?
Zeker. Ook zonder nieuwe firmware is het een prima BLE-beacon. Voor aanwezigheid van gereedschapskoffers, meetapparatuur, uitleensets of werkplaatskarren. Of voor zoneherkenning in een interactieve opstelling. Een ESP32 ziet de beacon en publiceert de aanwezigheid via MQTT:

RBT-008
   |  BLE
   v
ESP32-C3
   |  MQTT
   v
Home Assistant / Node-RED / InfluxDB + Grafana

Komt er binnen een paar seconden een advertisement binnen, dan is de beacon aanwezig. Blijft het stil, dan is hij weg. Met de referentie-RSSI van -61 dBm op 1 meter is zelfs een grove afstandsschatting mogelijk. Van restauranttafelnummer naar draadloze presence-sensor.

PCB, mega grote knoopcel en typeplaatje van de RadBeacon Locator Tent.

Wat weet ik nu?

Model        : Radius Networks RBT-008 (RadBeacon Locator Tent)
BLE-module   : EM Microelectronic EMBC22, print v2.0
Voeding      : Toshiba CR2477, 3 V
Naam         : RNTENT0B4BDF
BLE-adres    : E0:18:9F:0B:4B:DF
Formaat      : AltBeacon, manufacturer-ID 0x0118
ID1          : RADNTABLESERVICE
ID2 / ID3    : 12000 / 1
Ref. RSSI    : -61 dBm op 1 m

Eén vraag blijft open: is ID2 het tafelnummer? Wellicht kan ik dit in de toekomst alsnog beantwoorden…

Tot slot
Deze afgeschreven restaurantlocator doet na jaren nog precies waarvoor hij gebouwd is. Hij meldt via Bluetooth dat hij er is. Alleen komt er geen friet meer naar hem toe. Tafel 120 praat nog steeds. En misschien vertelt hij ook welk nummer hij is.

Wat heb ik gebruikt
– Mitutoyo-schuifmaat
– Fluke 189 multimeter
– USB-microscoop
– Python 3.14 met Bleak, in PyCharm
– fccid.io voor het FCC-dossier
– de AltBeacon-specificatie

Waarom ik dit leuk vind
Elk apparaat is een puzzel die iemand anders al een keer heeft opgelost. Ik wil weten hoe. Welke keuzes zijn er gemaakt, wat is er bespaard, waar zit de slimmigheid? Vaak begint het met een ding dat afgeschreven is. Een tafelnummer, een radio, een lader. Van buiten niets bijzonders. Van binnen een verhaal over ontwerp, certificering en gebruik. En als ik het eenmaal begrijp, kan ik het opnieuw inzetten. Wat weggegooid zou worden, krijgt een tweede leven. Dat is voor mij de mooiste afloop van reverse engineering: niet alleen snappen hoe het werkt, maar er daarna iets nieuws mee doen.

De RBT008 module losgeschroefd, opgemeten en doorgemeten op de werktafel.