LoRaWAN UDP Packet Forwarder 1
17.12.2024
Elektronik | Funk | Software
Der Technik-Blog
In diesem Artikel geht es um die Funktionsweise des LoRaWAN UDP Packet Forwarders. Es ist eine von Semtech entwicklete Software auf dem LoRaWAN Gateway, welche es ermöglicht, Datenpakete effizient mit dem Netzwerkserver über das Protokoll UDP auszutauschen. Mit einem speziellen C++ Beispielcode, welcher als UDP Packet Listener auf Port 1700 Daten von einem Gateway entgegennimmt, können die empfangenen Datenpakete angezeigt werden. Mit diesem Beispiel ist es möglich, die genaue Arbeitsweiße vom Semtech Packet-Forwarder näher zu analysieren und man kann sich dadurch einen tiefen Einblick in die Welt von LoRaWAN verschaffen.
Für dieses Beispiel wird ein MikroTik LR8 LoRaWAN Gateway verwendet. Auf dem MikroTik LR8 ist der UDP Packet Forwarder standardmäßig installiert, welcher als Schnittstelle zwischen dem Gateway und dem LoRaWAN-Netzwerkserver fungiert. Das LoRaWAN Gateway arbeitet bidirektional, was bedeutet, dass es Daten sowohl vom Endgerät empfängt und über den Packet Forwarder an den LoRaWAN-Netzwerkserver sendet, als auch umgekehrt. Der Netzwerkserver kann das Gateway ansprechen und Datenpakete über das Gateway an seine Endgeräte senden. Für dieses Beispiel wird dem LoRaWAN Gateway eine eindeutige, leicht erkennbare ID (Gateway EUI) zugewiesen: AA AA AA AA AA AA AA FF. Diese ID ist bei der Analyse der Rohdaten sofort erkennbar und entsprechend einfach nachzuverfolgen.
Wird ein einfacher UDP-Listener auf Port 1700 auf einem Computer oder Server gestartet und die IP-Adresse im Gateway eingetragen, bekommt der Listener meist mehrmals pro Minute einen Datensatz zugesendet. Lässt man sich diese Daten im Klartext anzeigen, erscheinen zunächst einige "kryptische" Zeichen, bevor lesbare Informationen im JSON-Format sichtbar werden. Die lesbaren JSON-Daten enthalten Informationen, über den Zustand vom Gateway oder stellen ein empfangenes LoRaWAN-Paket dar. Zuvor wird jedoch ein Blick auf die "kryptischen" Zeichen geworfen, wie sie im folgenden Bild zu sehen sind:
Die hier nicht lesbaren Zeichen haben immer eine bestimmte Länge von 12 Byte. Wandelt man diese in Hexadezimal um, so wird die zuvor vergebene Gateway-EUI und weitere Hexadezimale Zeichen sichtbar:
Byte 0 bis Byte 11 werden immer vor jeder JSON-Nachricht übertragen und teilweise werden auch Pakete gesendet, die nur aus diesen 12 Bytes bestehen. Die GatewayEUI besteht aus 8 Bytes (Byte 4 - 11), die Bytes setzten sich wie folgt zusammen:
Bytes | Beschreibung |
---|---|
Byte 0 | Verwendete Protokoll Version (2) |
Byte 1-2 | Zufälliger Token für ein Paket, generiert vom Gateway (02 38) |
Byte 3 | Nachrichtentyp (0, Push Data) |
Byte 4-11 | Gateway EUI (AA AA AA AA AA AA AA FF) |
Ab Byte 12 | Nachricht im Klartext/JSON-Format |
Dieses Beispiel verwendet die Protokoll-Version 2. Jede Nachricht von einem Gateway hat einen zufälligen Token bestehend aus zwei Bytes. Antwortet der Netzwerkserver dem Gateway auf eine Nachricht, so werden genau diese zwei Bytes wieder zurückgesendet, was dem Gateway eine Zuordnung der Nachricht ermöglicht. Meist wird dies für Empfangsbestätigungen verwendet.
Byte 3 | Beschreibung |
---|---|
00 | Push Data: Entsprechend der Einstellung am Gateway werden mehrmals pro Minute Push Daten gesendet. Damit bleibt bei den Routern zwischen Gateway und Netzwerkserver der Port geöffnet. Zusätzlich wird der Netzwerkserver damit in Kenntnis gesetzt, dass das Gateway noch verbunden ist. |
01 | Push Ack: Ein Push Ack (Acknowledged) wird mit den gleichen Token vom Netzwerkserver zum Gateway zurück gesendet. Damit bekommt das Gateway eine Empfangsbestätigung vom Netzwerkserver. |
02 | Pull Data: Dieser Nachrichtentyp (Identifier) teilt dem Netzwerkserver mit, dass ein Datensatz (Statusnachricht oder LoRaWAN-Paket) an die Gateway EUI angehängt ist. |
03 | Pull Resp: Eine Nachricht mit einem "Pull Response" ermöglicht dem Netzwerkserver, ein Datenpaket zu einem Endgerät über das Gateway abzusenden. Dies ist jederzeit ab Erhalt des ersten "Pull Data" oder "Push Data" möglich. |
04 | Pull Ack: Mit dem "Pull Ack" antwortet der Netzwerk-Server auf jedes empfangene "Pull Data" Paket. |
05 | Tx Ack: Damit bestätigt das Gateway dem Netzwerkserver die Möglichkeit einer Aussendung von einem Datenpaket. Wenn das Datenpaket erfolgreich gesendet werden kann, beschränkt sich die Länge vom Datensatz genau auf die 12 Bytes, im Fehlerfall sendet das Gateway weitere Details zum Fehler ab Byte 12 in JSON zurück. |
Die ersten 12 Bytes in Hexadezimal stehen immer vor jeder JSON-Nachricht, egal ob vom Gateway zum Netzwerkserver gesendet wird, oder umgekehrt. Weitere Details zum Aufbau von JSON-Nachrichten gibt es im nächsten Artikel: [Erscheint am 25.12.2024]
Einstieg in das LoRaWAN (TTN) mit dem Heltec LoRa32 V3 und Einrichtung vom Board in der Arduino IDE
WeiterlesenStarthilfe LoRaWAN - Diese Seite richtet sich an alle Einsteiger, die mit LoRaWAN starten wollen und ihre Sensoren in das IoT-Netzwerkt TTN integrieren wollen
WeiterlesenAEQ-WEB © 2015-2024 All Right Reserved