Handbuch & FAQ

Alles über den LoRa NextGEN Mapper — Funktionen, Einrichtung und häufige Fragen.

1 · Was ist der LoRa NextGEN Mapper?

Der LoRa NextGEN Mapper ist eine selbst-gehostete Coverage-Map für The Things Network (TTN) / The Things Stack (TTS). Er nimmt LoRaWAN-Uplinks mit GPS-Koordinaten entgegen (via Webhook oder MQTT) und zeigt die Signalabdeckung auf einer interaktiven Leaflet-Karte.

  • Öffentliche Karten-Lookup per DevEUI oder Gateway-ID — kein Login nötig.
  • Signalstärke (RSSI), Spreading Factor und optional Sensor-Werte (Temperatur, Luftfeuchte, Luftdruck, Batterie) werden pro Uplink gespeichert und farbcodiert auf der Karte angezeigt.
  • Mehrere Nutzer können eigene TTS-Anwendungen verbinden (nach Registrierung).

2 · Startseite & Übersichtskarte

Die Startseite zeigt drei Kennzahlen (Gateways, Geräte, Uplinks gesamt) sowie eine Übersichtskarte mit allen in den letzten 7 Tagen aktiven Gateways und Geräten.

  • Orange Punkte = Gateways (größer, fester Standort).
  • Blaue Punkte = Geräte / Tracker (kleiner, mobil).
  • Klick auf einen Punkt öffnet ein Popup mit Name, ID, Uplink-Anzahl und letztem Empfang.
  • Klick auf den Popup-Link navigiert zur Detail-Seite des Geräts / Gateways.
  • Die Karte passt sich automatisch an alle sichtbaren Punkte an (Auto-Fit).

Im Suchfeld oben kann direkt eine DevEUI eingegeben werden (Hexadezimal, 16 Zeichen). Nach dem Absenden gelangt man zur Geräte-Seite.

3 · Geräte-Suche & Coverage-Map

URL-Schema: /device/{DevEUI} — z. B. /device/0102030405060708.

Karte

  • Jeder Uplink mit GPS-Fix wird als farbiger Kreis eingetragen.
  • Farb-Dropdown (oben links): RSSI | Temperatur | Luftfeuchte | Luftdruck. Optionen ohne Daten werden automatisch deaktiviert.
  • Heatmap-Toggle: Überlagert eine Wärmebildkarte auf Basis der RSSI-Werte.
  • Zeit-Buttons (24 h / 7 d / 30 d / Alle): Filtert die angezeigten Uplinks nach Empfangszeit — clientseitig, ohne Neuladen.
  • Sensor-Filter (ausklappbar): Min/Max-Eingabefelder für Temperatur, Luftfeuchte, Luftdruck und Batteriespannung. Zeigt an, wie viele Uplinks durch die Filter sichtbar sind. Reset-Button löscht alle Filter.
  • Popups zeigen alle vorhandenen Sensor-Werte (🌡 °C, 💧 %, 🌬 hPa, 🔋 V).

Sensor-Verlaufsdiagramme

Unterhalb der Karte werden Zeitreihen-Diagramme für Temperatur, Luftfeuchte, Luftdruck und Batteriespannung angezeigt — sofern das Gerät entsprechende Werte sendet.

Letzte Uplinks

Eine Tabelle mit den neuesten 50 Uplinks (Zeitstempel, Gateway, RSSI, SF, Frequenz).

4 · Gateway-Seite

URL-Schema: /gateway/{GatewayID}. Zeigt alle Uplinks, die über dieses Gateway empfangen wurden.

  • Gleiche Karten-Steuerung wie auf der Geräte-Seite: Farb-Modus (RSSI/Temp/Humi/Druck), Heatmap-Toggle, Zeit-Filter (24h/7d/30d/Alle), Sensor-Filter.
  • Gateway-Standort wird als separater Marker (📡) hervorgehoben, sofern bekannt.
  • Uplinks-Tabelle mit DevEUI, RSSI, SF, Zeitstempel.

Die Seite /gateways listet alle bekannten Gateways mit Uplink-Anzahl und letztem Empfang.

5 · Vergleichs-Map

URL: /compare. Mehrere Geräte und/oder Gateways gleichzeitig auf einer Karte, jede Serie in einer eigenen Farbe.

  • Über das Formular unten auf der Seite können DevEUIs oder Gateway-IDs hinzugefügt werden.
  • Hinzugefügte Einträge erscheinen als Chips; Klick auf × entfernt sie.
  • Farb-Modus: Standard = „Serie" (jede Quelle eigene Farbe). Alternativ kann auf einen Sensor-Modus (RSSI, Temp, Humi, Druck) umgeschaltet werden — dann gelten die gleichen Farbskalen wie auf den Einzel-Seiten.
  • Sensor-Filter wirkt auf alle Serien gleichzeitig — zeigt die Summe sichtbarer Punkte über alle Quellen.
  • Die URL enthält die ausgewählten Einträge als Query-Parameter (?d=EUI1&d=EUI2&g=GWID) und kann direkt geteilt werden.

6 · Statistik-Seite

URL: /stats. Systemweite Statistiken auf einen Blick:

  • Uplinks pro Tag (letzten 30 Tage) als Balkendiagramm (Chart.js).
  • Top-10-Gateways und Top-10-Geräte nach Uplink-Anzahl.
  • RSSI-Verteilung (Histogramm) und Spreading-Factor-Verteilung (Donut).
  • Längste aktive Verbindung (Gerät mit den meisten Uplinks über den längsten Zeitraum).

7 · Decoder-Bibliothek & Server-side Fallback

URL: /decoders. Fertige JavaScript-Payload-Formatter für gängige LoRaWAN-Geräte, die direkt in TTS eingefügt werden können.

Unterstützte Geräte mit fertigen Formattern:

  • Dragino LGT-92 (GPS-Tracker)
  • Dragino LHT65 (Temperatur / Luftfeuchte + externer Sensor)
  • RAK7200 / RAK7201 (WisTrio)
  • Seeed SenseCAP T1000 (A / B / C / E)
  • Browan TBHV110 (Healthy Home Sensor)
  • Adeunis FTD (Field Test Device, BCD-GPS)
  • ELSYS (ERS / ELT / EMS generisch)
  • Cayenne LPP (generisch)

Jeder Decoder enthält einen Kopieren-Button. Den kopierten Code in TTS unter Applications → Payload Formatters → Uplink → Custom Javascript Formatter einfügen und speichern.

Server-seitiger Fallback-Decoder

Wenn kein Payload-Formatter in TTS eingerichtet ist, versucht der Mapper automatisch, den rohen Payload zu dekodieren:

  1. Dragino LGT-92 Heuristik (FPort 2, ≥10 Bytes): lat/lon als int32 @ 1/1e6
  2. RAK7200 Heuristik (FPort 8, marker 0x09): int32 lat/lon, v1/v2 firmware-Skalierungen
  3. Seeed SenseCAP T1000 Heuristik (TLV-Format, Type 0x01 für GPS): int32 lat/lon @ 1/1e7
  4. Cayenne LPP (generisch, sucht GPS-Feld 0x88)

⚠️ Server-side Decoder sind konservativ — sie validieren Koordinaten und lehnen Falsch-Positive (wie (0,0) oder out-of-range) ab. Für zuverlässige Ergebnisse wird ein Formatter in TTS empfohlen.

8 · Daten-Export (CSV / GPX)

Für jedes Gerät stehen zwei Download-Formate zur Verfügung:

Format URL Inhalt
CSV /api/device/{eui}/uplinks.csv Alle Uplinks mit Zeitstempel, Koordinaten, RSSI, SF, Frequenz, Sensor-Werten
GPX /api/device/{eui}/track.gpx GPS-Track als GPX 1.1 — importierbar in OsmAnd, Garmin BaseCamp, QGIS u. a.

Beide Endpunkte sind öffentlich und erfordern keinen Login.

9 · JSON API (v1)

Alle Endpunkte unter /api/v1/ sind öffentlich und liefern JSON. Basis-URL: https://ttnmapper.live/api/v1.

Endpunkt Beschreibung
GET /api/v1 API-Index mit allen verfügbaren Endpunkten
GET /api/v1/stats Gesamtstatistiken (Gateways, Geräte, Uplinks)
GET /api/v1/gateways Liste aller Gateways (Name, ID, letzter Uplink)
GET /api/v1/gateways/{id} Detail eines Gateways
GET /api/v1/gateways/{id}/uplinks Uplinks eines Gateways (?limit= & ?offset=)
GET /api/v1/devices/{eui} Detail eines Geräts
GET /api/v1/devices/{eui}/uplinks Uplinks eines Geräts (?limit= & ?offset=)

GeoJSON-Endpunkte (für Karten-Clients):

  • GET /api/activity.geojson?days=7 — aktive Gateways + Geräte
  • GET /api/gateways.geojson — alle Gateways als GeoJSON
  • GET /api/device/{eui}/coverage.geojson — Coverage-Punkte eines Geräts
  • GET /api/gateway/{id}/coverage.geojson — Coverage-Punkte eines Gateways

10 · Account, Profil & Offline-Benachrichtigungen

Registrierung

Unter /register kann ein Konto mit E-Mail und Passwort erstellt werden. Ist ein SMTP-Server konfiguriert, muss die E-Mail-Adresse vor dem ersten Login bestätigt werden (Link per Mail, 24 h gültig).

Login & Sessions

Nach dem Login unter /login wird eine Session angelegt (30 Tage gültig). Aktive Sessions sind auf der Profil-Seite sichtbar und können einzeln widerrufen werden.

Profil-Seite (/profile)

  • Account-Daten und letzte Passwortänderung.
  • Eigene TTS-Anwendungen mit Timestamp des letzten Uplinks.
  • Login-Verlauf: Letzte 10 erfolgreiche Logins (Zeit, Browser·OS, IP-Adresse) — hilft, verdächtige Zugriffe zu erkennen.
  • Aktive Sessions (Browser · OS · IP · Anmeldezeit) — aktuelle Session grün hervorgehoben. Alle oder einzelne Sessions können widerrufen werden.
  • Geräte-Offline-Benachrichtigungen: E-Mail-Alerts, wenn ein überwachter Tracker länger keinen Uplink sendet.
    • Per Gerät konfigurierbar (Schwelle: 15 Min / 1 Std / 6 Std / 24 Std / 7 Tage).
    • Mails bei Transition online → offline und zurück (mit Downtime-Angabe).
    • Pause-Button, um temporär zu stummschalten.
  • Passwort ändern (aktuelles Passwort erforderlich).
  • Account löschen (erfordert Eingabe von „DELETE" zur Bestätigung).

Passwort vergessen

Unter /forgot-password kann ein Passwort-Reset angefordert werden. Der Reset-Link ist 1 Stunde gültig und kann nur einmal verwendet werden.

11 · TTS-Anwendungen verbinden

Unter /applications (Login erforderlich) können TTS-Anwendungen hinzugefügt werden. Jede Anwendung erhält einen eindeutigen Webhook-Token und optional MQTT-Zugangsdaten.

Webhook-Test

Für jede Anwendung kann ein Test-Button (🧪 Testen) ausgelöst werden. Dieser schickt einen synthetischen Uplink durch die Ingest-Pipeline und zeigt das Ergebnis in einem Modal:

  • Loading-Status: Daten werden gerade verarbeitet (Spinner)
  • Erfolg: DevEUI, Empfangszeit, GPS-Koordinaten (mit Höhe falls vorhanden), dekodierter JSON-Payload (kopierbar), Link „Auf der Karte ansehen"
  • Fehler: Fehlermeldung vom Server mit Möglichkeit zu erneuten Test

12 · Webhook-Ingest einrichten

  1. Anwendung unter /applications anlegen → Webhook-URL kopieren (https://ttnmapper.live/webhook/v3/{token}).
  2. In TTS: Applications → Integrations → Webhooks → Add Webhook → Custom Webhook.
  3. Webhook-URL einfügen, Format JSON wählen, nur den Event-Typ Uplink message aktivieren.
  4. Speichern — ab jetzt werden alle GPS-Uplinks sofort an den Mapper weitergeleitet.
Voraussetzung: Das Gerät muss GPS-Koordinaten im decoded_payload liefern (Felder latitude / longitude) oder einen Cayenne-LPP-Payload senden. Ohne Koordinaten werden Uplinks gespeichert, aber nicht auf der Karte angezeigt.

13 · MQTT-Ingest einrichten

Alternativ zum Webhook kann der Mapper direkt per MQTT mit TTS kommunizieren.

  1. Anwendung anlegen und unter MQTT-Einstellungen folgende Werte eintragen:
    • Host: z. B. eu1.cloud.thethings.network
    • Port: 1883 (TCP) oder 8883 (TLS)
    • Username: {app-id}@{tenant-id}
    • Password: TTS API-Key mit Read application traffic-Berechtigung
  2. Der MQTT-Manager verbindet sich beim nächsten Sync-Zyklus automatisch (≤ 30 Sekunden). Bei Verbindungsverlust erfolgt automatischer Reconnect.
Hinweis: MQTT und Webhook können gleichzeitig aktiv sein. Doppelt empfangene Uplinks werden anhand von f_cnt + Zeitstempel dedupliziert.

14 · Light- / Dark-Theme

Das Theme kann über den 🌙/☀️-Schalter in der Navigationsleiste umgeschaltet werden.

  • Für nicht angemeldete Nutzer wird die Präferenz in einem Cookie gespeichert (1 Jahr).
  • Für angemeldete Nutzer wird die Präferenz dauerhaft im Account hinterlegt.
  • Standard: Hell.

15 · Häufige Fragen

Die häufigsten Ursachen:

  1. Kein Payload-Formatter: TTS sendet den rohen Payload als Base64. Ohne passenden Decoder kann der Mapper keine GPS-Koordinaten extrahieren. Einen Formatter aus der Decoder-Bibliothek einrichten.
  2. Kein GPS-Fix: Gerät sendet latitude: 0, longitude: 0 oder gar keine Koordinaten-Felder — in diesem Fall wird der Uplink gespeichert, aber nicht auf der Karte angezeigt.
  3. Falsches Feld-Schema: Der Mapper erwartet decoded_payload.latitude und decoded_payload.longitude. Abweichende Feldnamen müssen im Decoder normalisiert werden.
  4. Webhook falsch konfiguriert: Nur „Uplink message" aktivieren, Format JSON, korrekte URL.

Jedes LoRaWAN-Gerät, das GPS-Koordinaten sendet, wird unterstützt — sofern ein passender Payload-Formatter eingerichtet ist. Fertige Formatter gibt es in der Decoder-Bibliothek für Dragino LGT-92, LHT65, RAK7200, SenseCAP T1000 und Cayenne LPP. Für andere Geräte kann der Cayenne-LPP-Decoder oder ein eigener Formatter verwendet werden.

Ja. Wenn das Gerät von einem Community-Gateway empfangen wird und die Anwendung über Webhook oder MQTT verbunden ist, werden alle Uplinks — unabhängig davon, welches Gateway sie empfangen hat — auf der Karte angezeigt. Der Gateway-Standort wird aus den TTN-Metadaten übernommen.

Ja — die Karten-Daten (DevEUI-Lookup, Gateway-Lookup, Coverage) sind bewusst öffentlich, ähnlich wie bei ttnmapper.org. Jeder kann die Coverage jedes Geräts nachschlagen. Persönliche Account-Daten und Anwendungs-Einstellungen sind nur für den jeweiligen Nutzer sichtbar.

RSSI (Received Signal Strength Indicator) ist die empfangene Signalstärke in dBm. Typische Werte:

  • −80 dBm und besser: sehr gutes Signal (grün)
  • −100 dBm: akzeptables Signal (gelb)
  • −120 dBm und schlechter: schwaches Signal (rot)

Spreading Factor (SF) bestimmt den Kompromiss zwischen Reichweite und Datenrate. SF7 ist am schnellsten (kurze Reichweite), SF12 am langsamsten (größte Reichweite, höchster Airtime-Verbrauch).

Aktuell werden alle Uplinks dauerhaft gespeichert — es gibt keine automatische Löschung älterer Daten. Sessions und E-Mail-Tokens werden nach Ablauf (30 Tage bzw. 24 Stunden) automatisch bereinigt.

Die Karte verwendet Carto Voyager-Tiles (basemaps.cartocdn.com). Wenn diese nicht laden, bitte folgendes prüfen:
  • Netzwerkzugang zu externen CDN-Domains vorhanden?
  • Browser-Erweiterungen (Ad-Blocker) blockieren cartocdn.com?
Die Karte funktioniert vollständig ohne Login und ohne API-Key.

Auf den Karten-Seiten (Geräte, Gateway, Vergleich) gibt es oben links eine ausklappbare Filter-Karte. Dort können Min/Max-Werte für Temperatur, Luftfeuchte, Luftdruck und Batteriespannung eingegeben werden.
  • Filter wirken clientseitig — nur sichtbare Uplinks werden herausgefiltert, keine Neuladen der Seite.
  • Der Counter zeigt, wie viele Uplinks die Filterkriterien erfüllen.
  • Reset-Button löscht alle Filter sofort.
  • Filter, für die das Gerät keine Daten hat, werden automatisch deaktiviert.

Offline-Benachrichtigungen sind E-Mail-Alerts, die versendet werden, wenn ein überwachter Tracker länger keinen Uplink sendet:
  • Einrichtung: /profile → Abschnitt „Geräte-Benachrichtigungen" → Gerät + Schwelle (15 Min / 1 Std / 6 Std / 24 Std / 7 Tage) auswählen → speichern.
  • Offline-Mail: Wenn das Gerät die Schwelle überschreitet, erhält der Nutzer eine E-Mail mit dem Zeitpunkt des letzten Uplinks.
  • Online-Mail: Wenn das Gerät wieder einen Uplink sendet, wird eine Recovery-Mail mit der Downtime versendet.
  • Anti-Spam: Pro Offline-Transition genau 1 Mail — mehrfaches Erneut-Senden derselben Daten triggert nicht erneut.
  • Pause: Alert-Status kann temporär mit dem Pause-Button (⏸) auf der Profil-Seite geändert werden.
Voraussetzung: SMTP muss auf dem Server konfiguriert sein.

Auf der Seite /applications gibt es bei jeder Anwendung einen Test-Button (🧪 Testen). Klick zeigt ein Modal mit drei Zuständen:
  • Loading: Synthetischer Uplink wird gerade durch die Pipeline geschickt (Spinner)
  • Erfolg: Modal zeigt DevEUI, Empfangszeit, GPS (falls vorhanden), dekodierter JSON-Payload (zum Kopieren) und einen Link zur Geräte-Karte.
  • Fehler: Fehlermeldung vom Server — Modal kann erneut getestet werden.
Vorteil gegenüber früher: Keine 302-Umleitung mehr — Ergebnis wird inline im Modal angezeigt.

Ja. Wenn kein Payload-Formatter in TTS eingerichtet ist, versucht der Mapper automatisch, bekannte Geräte-Formate zu dekodieren:
  • Dragino LGT-92 (FPort 2, int32 lat/lon @ 1/1e6)
  • RAK7200 (FPort 8, int32 mit v1/v2 Skalierungen)
  • Seeed SenseCAP T1000 (TLV-Format, Type 0x01 GPS)
  • Cayenne LPP (generisch, sucht GPS-Feld 0x88)
Einschränkung: Heuristische Decoder sind konservativ und validieren streng (z. B. lehnen sie (0,0) ab). Für Produktiv-Umgebungen wird ein echter Formatter in TTS stark empfohlen.