RFID-Lesegeräte in eine Indoor-Karte integrieren: Schritt für Schritt
Jeden RFID-Reader live auf der 3D-Ladenkarte zeigen: Lesungen in einem kleinen Relay bündeln, per Tabellen-API senden und Reader je Etage nach Status einfärben.


Was Sie bauen
RFID ist in Läden und Lagern seit Jahren ein Arbeitstier, und trotzdem lesen die meisten Teams es noch als durchlaufendes Ereignisprotokoll oder als Zählerraster. Beides sagt Ihnen nicht, welches Rampentor verstummt ist oder ob die Rolltreppen-Reader auf Level 2 überhaupt etwas sehen. Diese Anleitung bringt stattdessen jeden Reader auf den Grundriss. Sie folgt einer echten Demo-Anlage in Spatial Map – jeder Screenshot ist nachvollziehbar.
Die Demo: 85 Reader in einem Laden mit drei Etagen
Das Beispiel ist Retail Mart Store, ein Laden mit drei Etagen (Ground, Level 1, Level 2) im Demo-Workspace Production Corp. Er hat 85 feste Reader: 66 an Türen und Durchgängen zwischen Abteilungen, 9 an Aufzugstüren, 9 an den Enden der Rolltreppen und 1 im Treppenhaus. Jeder Reader ist ein Marker auf der Karte, benannt nach dem Reader – etwa „RFID-G-02 · Office ↔ Receiving / Loading Docks“. Eine Tabelle, Retail Mart · RFID Reader Reads, enthält eine Zeile pro Reader.


Wie die Teile zusammenpassen
Feste UHF-Reader melden ihre Lesungen über Edge-Middleware – die LLRP-Schnittstelle des Readers selbst oder das SDK des Herstellers auf einer kleinen Box daneben. Diese Middleware liest Tags hervorragend, hat einer Karte aber nichts Brauchbares zu sagen. Deshalb kommt ein kleines Stück dazwischen: ein Relay, das Ihnen gehört. Es hört der Middleware zu, fasst die Lesungen pro Reader zusammen und schreibt das Ergebnis alle paar Sekunden über die Schreib-API in eine Spatial-Map-Tabelle. Karte und Bericht lesen aus dieser Tabelle.
Warum zusammenfassen statt jede Lesung weiterzuleiten? Ein belebter Durchgang sieht Hunderte Lesungen pro Minute, viele davon dasselbe Tag an zwei Antennen. Eine Karte kann das nicht sinnvoll zeigen, und die Tabellen-API ist pro Schlüssel begrenzt. Eine Zeile pro Reader – Lesungen heute, in der letzten Stunde, eindeutige Tags, Ein- und Ausgänge, letztes Tag und letzte SKU sowie ein Status – ist genau das, was die Demo-Tabelle enthält und was eine Schichtleitung sehen will. Brauchen Sie stattdessen Positionen pro Tag, funktioniert dasselbe Muster mit einer Zeile pro Tag am zuletzt gesehenen Reader; siehe Echtzeit-Asset-Tracking in Gebäuden.
| Weg hinein | Aktualität | Geeignet, wenn |
|---|---|---|
| Schreib-API der Tabelle (POST /rows/bulk) | Sekunden – offene Karten laden neu, sobald geschrieben wird | Sie ein Relay neben der Middleware betreiben können. Der empfohlene Weg. |
| Pull from a REST API (Tab API & access der Tabelle) | Etwa eine Minute – der Server fragt per Timer ab | Die Middleware Zähler pro Reader bereits über einen REST-Endpunkt liefert. |
| Upload file | Bei jedem Upload | Sie nur einen täglichen CSV- oder Excel-Export der Zähler haben. |
Schritt 1 – Tabelle und API-Schlüssel anlegen
- 1Tabelle anlegen
Öffnen Sie Tables → Create new table, vergeben Sie einen Namen (die Demo nutzt „Retail Mart · RFID Reader Reads“) und wählen Sie die Art RFID tag. Die vorgeschlagenen Standardspalten sind nur ein Ausgangspunkt: Benennen Sie sie um, ändern Sie den Typ oder entfernen Sie sie, passend zu dem, was Ihr Relay sendet.
- 2Eine Zeile pro Reader
Legen Sie ein Textfeld `reader_id` mit Required und Unique an, dann `reader_name`, `floor`, `reader_type`, `status`, die Ganzzahl-Zähler (`reads_today`, `reads_last_hour`, `unique_tags_today`, `in_count_today`, `out_count_today`, `alerts_today`), `last_read_at` als Datum/Uhrzeit, `last_tag_epc`, `last_sku`, `last_direction`, `rssi_dbm`, `firmware` und `elevation_m`. Jeder Schreibvorgang wird gegen dieses Schema geprüft.
- 3Schlüssel erstellen
Geben Sie im Tab API & access der Tabelle einen Schlüsselnamen ein und klicken Sie auf Create key. Der Schlüssel beginnt mit `sgv_tbl_` und wird nur einmal angezeigt – legen Sie ihn direkt in den Secrets des Relays ab. Ein Schlüssel schreibt nur in diese eine Tabelle; geben Sie jedem Relay einen eigenen, damit Sie einen widerrufen können, ohne die anderen zu stören. Schlüssel anlegen können Owner und Admins.
- 4Basis-URL kopieren
Derselbe Tab listet die 12 Endpunkte mit curl-Beispielen zum Kopieren. In Produktion lautet die Basis `https://app.spatialmap.io/api/v1/public/tables`; der Schlüssel bestimmt die Tabelle, daher steht keine Tabellen-ID im Pfad.


Schritt 2 – Das Relay schreiben
Das Relay umfasst ein paar Dutzend Zeilen in der Sprache Ihrer Wahl. Abonnieren Sie die Lese-Ereignisse der Middleware (LLRP-Reports oder den Callback des SDK), führen Sie einen kleinen Zähler pro Reader im Speicher und senden Sie per Timer – alle 5 bis 10 Sekunden reicht völlig – alle geänderten Reader in einem gebündelten Aufruf. Nutzen Sie die Reader-ID als `entityKey`, damit jeder Aufruf die vorhandene Zeile aktualisiert, statt eine neue anzulegen.
curl -X POST https://app.spatialmap.io/api/v1/public/tables/rows/bulk \
-H "Authorization: Bearer $SPATIALMAP_TABLE_KEY" \
-H "Content-Type: application/json" \
-d '{
"rows": [
{
"entityKey": "RFID-G-02",
"payload": {
"reader_id": "RFID-G-02",
"reader_name": "RFID-G-02 · Office ↔ Receiving / Loading Docks",
"floor": "Ground",
"reader_type": "Gate",
"status": "Active",
"reads_today": 590,
"reads_last_hour": 56,
"unique_tags_today": 288,
"in_count_today": 294,
"out_count_today": 296,
"last_read_at": "2026-10-08T09:25:12Z",
"last_tag_epc": "E2801121130DB42AB66C7A7B",
"last_sku": "SKU-339201 Frozen Peas 1kg",
"last_direction": "Out",
"alerts_today": 2,
"elevation_m": 2.4
}
},
{
"entityKey": "RFID-L1-15",
"payload": {
"reader_id": "RFID-L1-15",
"reader_name": "RFID-L1-15 · Escalator 2 top · L1",
"floor": "Level 1",
"reader_type": "Escalator",
"status": "Idle",
"reads_today": 525,
"reads_last_hour": 29,
"unique_tags_today": 220,
"in_count_today": 261,
"out_count_today": 264,
"last_read_at": "2026-10-08T09:25:49Z",
"last_tag_epc": "E280115AC002CF6117A1B75B",
"last_sku": "SKU-509112 LED TV 55in",
"last_direction": "Out",
"alerts_today": 0,
"elevation_m": 6.067
}
}
]
}'`POST /rows` und `POST /rows/bulk` sind Upserts: Der gesendete Payload wird zum vollständigen Zustand der Zeile, senden Sie also immer die ganze Zeile. Um nur ein Feld zu ändern – etwa einen Reader auf Offline zu setzen, wenn sein Heartbeat ausbleibt –, nutzen Sie `PATCH`; das führt die Änderung mit dem gespeicherten Payload zusammen.
curl -X PATCH https://app.spatialmap.io/api/v1/public/tables/rows/RFID-G-01 \
-H "Authorization: Bearer $SPATIALMAP_TABLE_KEY" \
-H "Content-Type: application/json" \
-d '{"status":"Offline"}'Kein Relay? Zwei andere Wege
- Pull from a REST API – tragen Sie im Tab API & access der Tabelle die URL der Middleware, ein Intervall (im Formular mindestens 30 Sekunden), das Feld für den Zeilenschlüssel, den JSON-Pfad zu den Einträgen, nötige Header und die Feldzuordnung ein und klicken Sie auf Start polling. Ein serverseitiger Worker führt das etwa einmal pro Minute aus, auch wenn niemand eine Karte offen hat. Jede Abfrage liest bis zu 1.000 Zeilen aus einer Antwort von höchstens 10 MB.
- Upload file – für Läden, die nur tägliche Zählerstände exportieren. Fügen Sie unter Integrations → Add integration → Upload file eine CSV-, Excel-, JSON- oder GeoJSON-Datei hinzu und nutzen Sie Re-import für den Export des nächsten Tages.
Die Karten- und Berichtsschritte unten bleiben gleich, egal wie die Daten ankommen. Die API-Referenz steht unter Tables, ein komplettes Beispiel unter Push rows with the table write API.
Schritt 3 – Die Reader auf die Karte bringen
Jeder Reader braucht einen Marker an seiner echten Position: an einer Tür, neben einer Aufzugstür, oben oder unten an einer Rolltreppe. Setzen Sie sie mit dem Werkzeug Marker auf der richtigen Etage und geben Sie jedem Marker genau den Namen, den Ihr Relay in `reader_name` schreibt. Dieser Name ist im nächsten Schritt der Join-Schlüssel – kopieren Sie ihn, statt ihn abzutippen. In einem mehrstöckigen Laden legen Sie zuerst Etagen, Aufzüge und Rolltreppen an – Multi-floor store with escalators and lifts zeigt dasselbe Retail-Mart-Layout.


Schritt 4 – Die Tabelle mit den Reader-Markern verknüpfen
Öffnen Sie die Anlage im Editor und klicken Sie auf Data links, dann auf New data link (auch über das Menü Data → Manage data links erreichbar). Die Verknüpfung der Demo heißt RFID reader activity. Ihre Einstellungen, Abschnitt für Abschnitt:
- 1Data source
Die Tabelle Retail Mart · RFID Reader Reads.
- 2Display mode
Pulsing zone activity – ein animierter Ring mit Zählerbadge an jedem Reader-Marker. Das Badge zeigt `reads_last_hour`, unter Connect fields als Beschriftungsfeld gewählt.
- 3Attach to shapes
Ziel sind Marker, abgeglichen per Attribute join: das Zeilenfeld `reader_name` gegen den Namen des Markers.
- 4Floor scope
From record, mit `floor` als Feld für die Etage. Die Tabelle speichert Text („Ground“, „Level 1“, „Level 2“), deshalb wird jeder Wert einer Etage der Anlage zugeordnet – Reader auf Level 2 pulsieren nur auf Level 2.
- 5Style rules
Drei Regeln auf `status`: Active in Violett, Idle in Grau, Offline in Rot. Regeln werden von oben nach unten geprüft; der erste Treffer gewinnt.
- 6Map tooltip
Auslösung beim Überfahren mit Reader-ID, Typ, Etage, Status, Zählern, letzter Lesung, letztem EPC, letzter SKU, Richtung, Signal und Firmware; ein Klick öffnet das Detail-Panel.
| Darstellungsmodus | Passt zu RFID, wenn … |
|---|---|
| Pulsing zone activity | Sie feste Reader und Zähler pro Reader haben – die Wahl der Demo. |
| Value badge on shape | Sie eine schlichte Zahl an jedem Reader oder Bereich wollen, ohne Animation. |
| Color a shape | Sie pro Bereich zählen (Abteilung, Rampe) und den ganzen Bereich einfärben wollen. |
| Live location marker | Zeilen eigene lat/lng mitbringen – etwa eine Zeile pro Tag am zuletzt gesehenen Reader. |
| Heatmap of activity | Sie die Dichte auf der Etage interessiert, nicht einzelne Reader. |
| Historical movement | Sie Änderungen der Zeilen über das Änderungsprotokoll der Tabelle abspielen wollen. |


Alle Optionen erklären Source and render mode und Style and rules.
Schritt 5 – Live zusehen, dann den Bericht bauen
Speichern Sie die Verknüpfung und öffnen Sie die Anlage in der Preview oder über einen Freigabelink. Jeder Reader-Marker pulsiert jetzt mit seinem Zähler der letzten Stunde, eingefärbt nach Status. Schreibt das Relay, benachrichtigt der Server offene Karten, die diese Ebene sofort neu laden; ein 30-Sekunden-Refresh dient als Sicherheitsnetz. Fahren Sie über einen Reader für den Tooltip, klicken Sie für den vollständigen Datensatz und seine History.


Für alle, die nicht im Editor arbeiten, hat die Demo auch einen Vollkarten-Bericht: Retail Mart · RFID Live Map. Links steht die Reader-Liste, in der Mitte die Live-Karte des Ladens, und darüber schweben die Zahlen: KPIs für Zeilen, Lesungen heute, Lesungen der letzten Stunde und eindeutige Tags heute, ein By status-Ring und ein Balkendiagramm Reads today by floor. Die Filter Floor, Status und Search grenzen alles gleichzeitig ein – wählen Sie Offline, und Sie haben die Wartungsliste für den Morgen. Siehe Full-map reports.


Stolperfallen aus der Praxis
“Schicken Sie der Karte Zustand, keine Ereignisse: eine Zeile pro Reader, alle paar Sekunden aktualisiert, erfasst eine Schichtleitung auf einen Blick.”
Wie es weitergeht
Die Demo legt einige naheliegende Erweiterungen nahe. Fügen Sie eine Stilregel auf `alerts_today` (das Feld „Exit alerts today“) hinzu, damit Durchgänge mit Ausgangsalarmen hervorstechen – das ändert eine Farbe auf Karte und Bericht, verschickt aber keine Benachrichtigung. Kombinieren Sie den Reader-Status mit Regalbeständen und Kühlketten-Sensoren auf denselben Etagen wie in der Lösung für den Einzelhandel, oder konzentrieren Sie sich mit der Diebstahlschutz-Lösung auf Ausgänge und Durchgänge. Für bewegte Assets statt fester Reader lesen Sie Echtzeit-Asset-Tracking in Gebäuden.
Testen Sie die Plattform, auf die Ihre Daten gehören.
Spatial Map verwandelt Tabellen, Sensor‑Streams und CAD‑Zeichnungen in eine lebende 3D‑Ansicht Ihrer Standorte — nichts zu installieren, sieben Tage kostenfrei.
Live ansehen
Weiterlesen
- TutorialLager-KPI-Dashboards mit Live-3D-Karte: Schritt für SchrittEin Diagramm sagt, dass 66 % der Lagerplätze belegt sind – eine Karte sagt, wo. Dieses Tutorial führt durch den geführten Berichtsassistenten mit 12–13 Schritten und bringt beides auf ein Lager-Dashboard, am echten Rack-Inventory-Bericht unseres Demo-Lagers.
- TutorialVon der Tabelle zur Karte: ein Bin-Inventar-CSV in eine Live-Regalkarte verwandelnEin CSV auf einem Netzlaufwerk hilft niemandem auf der Fläche. Dasselbe CSV auf Ihrem Regallayout ist eine Schichtbesprechung.
- TutorialWMS‑Integration: REST, Webhooks und WebSockets für eine Live‑LagerkarteIhr WMS spricht vielleicht REST, Webhooks oder WebSockets. Spatial Map fragt REST‑Endpunkte ab, importiert Dateien und nimmt Pushes als Schreibzugriffe auf die Tabellen‑API entgegen. So wählen und verdrahten Sie den Weg — mit funktionierendem curl und einem kleinen Relay.