LoRaWAN

Referenz zum Treiber LoRaWAN: der eingebettete Netzwerkserver Basics Station, Zertifikate der Gateways, die Anmeldungen von Sensor und Konzentrator und die Adressierung in der Nutzlast.

Als Markdown ansehen

Der Treiber LoRaWAN macht Ganter Lab zu einem kleinen LoRaWAN-Netzwerkserver. Die Richtung der Beziehung ist gegenüber den meisten Treibern umgekehrt: Die Station greift nicht nach einem Sensor, sondern das Gateway verbindet sich mit Ganter Lab, und die Sensoren liefern ihre Messwerte als Uplinks durch dieses Gateway. Ganter Lab bringt einen Netzwerkserver mit, der das Protokoll LoRa Basics Station von Semtech spricht, jedes Gateway mit der Firmware Basics Station kann diese Station also als seinen LNS verwenden.

Der eingebettete Server startet, sobald das erste aktivierte LoRaWAN-Gerät in den laufenden Connector geladen wird, nicht beim Start der Anwendung, und hört auf, sobald das letzte entfernt oder deaktiviert wird: Sind weder Sensor noch Konzentrator eingerichtet, lauscht überhaupt nichts auf dem Port. Eines hinzuzufügen holt es zurück, ohne die Anwendung neu zu starten.

Jedes Gerät unter diesem Treiber ist eine von zwei Anmeldungen, in seinem Bereich gewählt:

  • Ein Sensor, erkannt an seiner DevEUI und mit seinem Anwendungsschlüssel zugelassen. Seine Tags entschlüsseln die Nutzlast des Uplinks.
  • Ein Funkkonzentrator (das Gateway), erkannt an seiner Station EUI und in einer Funkregion aus einer Liste angemeldet. Er trägt keine eigenen Tags.

Melden Sie den Konzentrator ebenso an wie die Sensoren. Ein Konzentrator mit Basics Station fragt gleich nach dem Verbinden nach seiner Funkkonfiguration und leitet überhaupt nichts weiter, bevor sie beantwortet ist, eine Station, die seine Station EUI nie gesehen hat, lässt also jeden Sensor dahinter ohne Wert, während die Verbindung selbst gesund aussieht. Die Antwort wird hier aus der Region gebaut, die Sie gewählt haben; es gibt keinen Konfigurationstext zum Einfügen.

Netzwerkserver und Ports

Was Wert
Protokoll LoRa Basics Station (WebSocket, JSON)
Lauscher Alle Schnittstellen, TCP-Port 5001, nur TLS
Adresse des Gateways wss://<station-address>:5001
Endpunkt der Suche Die Anfrage router-info von Basics Station wird auf demselben Lauscher bedient
Datenverbindung Adressiert über die Station EUI des Gateways als letzten Teil des WebSocket-Pfades

Der Lauscher ist immer mit TLS. Es gibt keine Einstellung, die die Verschlüsselung abschaltet: Ein Lauscher mit einfachem HTTP wird überall abgelehnt außer auf Loopback, das aus dem Anlagennetz nicht erreichbar ist und nur für Tests im selben Prozess existiert.

Zertifikate

Die Zulassung geschieht über beidseitiges TLS: Der Server weist mit seinem eigenen Zertifikat nach, wer er ist, und jedes Gateway muss mit einem Client-Zertifikat nachweisen, wer es ist.

Zertifikat des Servers. Beim ersten Start automatisch erzeugt und im Datenordner der Anwendung unter ua\pki\own\private abgelegt:

  • GanterLabOPCUAServer-with-san.pfx: der private Schlüssel, verschlüsselt unter einem zufälligen Passwort, das selbst je Windows-Benutzer geschützt ist (DPAPI), das Dateipaar öffnet sich also für niemanden, wenn es anderswohin kopiert wird.
  • GanterLabOPCUAServer-with-san.pem: das öffentliche Zertifikat. Das ist die Datei, die Sie am Gateway installieren, damit es dieser Station vertraut.

Das Zertifikat ist selbst ausgestellt und läuft nicht ab. Sie installieren seine öffentliche Hälfte einmal von Hand an jedem Konzentrator, ein Zertifikat, das abliefe, würde also an seinem Jahrestag das ganze Sensornetz mitnehmen, abgewiesen am Konzentrator, wo diese Station nichts davon sieht, und einen Besuch bei jedem Konzentrator kosten, um es zurückzuholen. Es gibt keine Warnung vor Ablauf und keinen Befehl zur Erneuerung, weil es nichts zu erneuern gibt; die Seite des Treibers zeigt das Datum, das es trägt, als Anzeige.

Es wird nur in zwei Fällen erneut geschrieben, und beide sagen es im Journal:

  • Die gespeicherte Datei lässt sich nicht mehr öffnen, zum Beispiel weil sie von einem anderen Windows-Konto geschrieben wurde.
  • Es wurde von einer früheren Version dieser Anwendung ausgestellt, die ihm 12 Monate gab.

In beiden Fällen sagt die Seite des Treibers einmal, dass jeder Konzentrator die neue GanterLabOPCUAServer-with-san.pem bekommen muss. Bis dahin können sie sich nicht verbinden.

Client-Zertifikat des Gateways. Jedes Gateway muss beim TLS-Handschlag ein Client-Zertifikat vorweisen; ein Handschlag ohne eines wird verworfen, bevor Daten fließen. Das Zertifikat muss:

  1. Auf diesem Windows-Rechner eine gültige Kette bilden (Fehler in der Kette, etwa eine nicht vertrauenswürdige Wurzel, weisen die Verbindung ab, und das Journal hält fest, welche Prüfung fehlschlug).
  2. Die Station EUI des Gateways in seinem Common Name im Antragsteller oder in einem alternativen DNS-Namen tragen. Die Kennung wird als Wert gelesen, AABBCCDDEEFF0011, AA-BB-CC-DD-EE-FF-00-11 und AA:BB:CC:DD:EE:FF:00:11 benennen also alle dieselbe Station.
  3. Dieselbe Station benennen, für die sich die Datenverbindung ausgibt: Ein Zertifikat, das ein anderes Gateway nennt als die Adresse der Verbindung, wird abgewiesen.

Verbindungsfelder

Ein LoRaWAN-Gerät hat keinen eigenen Host und keinen eigenen Port: Ein Sensor wird über den Konzentrator erreicht, der seinen Funkverkehr trägt, und ein Konzentrator erreicht diese Station. Der Bereich zeigt zuerst die Wahl der Anmeldung, dann die Felder, die diese Anmeldung braucht.

Feld Was es ist Format Standard
Angemeldet als Welche der beiden Anmeldungen dieses Gerät ist: Sensor oder Funkkonzentrator. Umzuschalten leert das Feld darunter, weil ein Anwendungsschlüssel und eine Region nicht dasselbe sind. Sensor / Funkkonzentrator Sensor
DevEUI (Sensor) Die DevEUI des Sensors, die Identität, die er in seiner Join-Anfrage vorweist. 16 hexadezimale Ziffern, schlicht (8899AABBCCDDEEFF), mit Bindestrichen (88-99-AA-BB-CC-DD-EE-FF) oder mit Doppelpunkten. leer
Anwendungsschlüssel (Sensor) Der OTAA-Anwendungsschlüssel (AppKey) des Sensors. Er weist den Join aus und leitet die Sitzungsschlüssel ab. Genau 32 hexadezimale Ziffern, ohne Trennzeichen. leer
Station EUI (Konzentrator) Die Station EUI des Konzentrators, dieselbe Kennung, die sein Client-Zertifikat tragen muss und die er in seine Verbindungsadresse setzt. 16 hexadezimale Ziffern, in jeder der Schreibweisen oben. leer
Funkregion (Konzentrator) Wo der Konzentrator steht. Sie entscheidet über die Kanäle, die Datenraten und die Empfangsfenster, die diese Station ihm beim Verbinden übergibt. Aus der Liste gewählt; es gibt keinen Freitext. Europa 868 MHz, Vereinigte Staaten 915 MHz, Australien 915 MHz, Asien 923 MHz, China 470 MHz (Revision 1), China 470 MHz (Revision 2) Europa 868 MHz
Höchste Zeit ohne Übertragung (Sensor) Sekunden, die dieser Sensor still bleiben darf, bevor seine gespeicherten Werte nicht mehr als Messwerte zählen. 0 schaltet das Verfallen ab. Siehe unten. 0 oder größer 3600

Eine leer gelassene Kennung fällt auf den bereinigten Namen des Geräts zurück, der fast nie eine gültige EUI ist, füllen Sie sie also aus.

Der Anwendungsschlüssel ist ein Geheimnis, und die Station behandelt ihn als solches. Das Panel verbirgt ihn hinter Punkten, mit einem Kästchen Passwort anzeigen, das ihn zeigt, während Sie das Getippte prüfen; die Konfigurationsdatenbank bewahrt ihn geschützt unter dem Windows-Konto auf, das ihn eingegeben hat; und er erscheint weder im Journal noch in der Adresse, die der Treiber liest und die allein die DevEUI trägt. Öffnen Sie dieselbe Konfiguration unter einem anderen Windows-Konto, dann öffnet sich der Schlüssel nicht mit: Das Feld kommt leer zurück und sagt "Unter diesem Windows-Konto nicht lesbar: Es öffnet sich nur auf dem Rechner und unter dem Windows-Konto, das es eingegeben hat. Geben Sie es hier erneut ein.", und der Sensor tritt dem Netz nicht mehr bei, bis Sie den Schlüssel erneut eingeben. Eine Konfiguration, die in einer Sicherung mitgenommen wird, behält ihn, weil die Sicherung mit dem Passwort versiegelt ist, das Sie ihr geben.

Der Join ist nur OTAA: Der Sensor führt einen Join über die Luft durch den Konzentrator aus, und der Netzwerkserver beantwortet ihn mit dem eingestellten AppKey. Eine Join-Anfrage von einer DevEUI, die kein eingerichtetes Gerät trägt, wird abgewiesen und protokolliert. Die Aktivierung durch Personalisierung (ABP, vorab hinterlegte Sitzungsschlüssel) wird nicht unterstützt.

Ein Gerät zu deaktivieren oder zu löschen nimmt es sofort vom Netzwerkserver, ohne auf einen Neustart zu warten: Sein Schlüssel verlässt das Verzeichnis, die Sitzung, die ein Konzentrator für es hielt, wird freigegeben, und sein nächster Join wird abgewiesen. Eine Anmeldung, die der Server nicht annimmt, eine vertippte DevEUI, ein vertippter Anwendungsschlüssel, eine vertippte Station EUI oder Region, lässt das Gerät als nicht verbunden lesen, und das Journal nennt das Feld, das abgelehnt wurde.

Was der Konzentrator gesendet bekommt

Wenn ein angemeldeter Konzentrator seinen Handschlag zur Version beendet hat, antwortet diese Station mit der Funkkonfiguration für seine Region: dem Frequenzbereich, den Datenraten und der Angabe, welche davon nur für den Downlink sind, sowie dem Standardkanalplan der Region. Ist die Station EUI hier nicht angemeldet, wird nichts gesendet, und das Journal sagt, welche Station gefragt hat und dass sie nicht angemeldet ist. Das ist der Eintrag, nach dem Sie suchen, wenn ein Konzentrator sich verbindet und kein Sensor dahinter je einen Wert meldet.

Felder für das Abfrageintervall gibt es nicht. LoRaWAN sendet von sich aus: Der Sensor entscheidet, wann er einen Uplink schickt, der Server behält je Gerät die zuletzt entschlüsselten Nutzlasten, und die Werte der Tags frischen sich aus diesem Zwischenspeicher in einem festen Ein-Sekunden-Takt auf.

Ein Sensor, der noch keinen Uplink geschickt hat, hat daher keinen Messwert, keinen fehlgeschlagenen. Die Tags bleiben leer, das Gerät meldet, dass nichts beobachtet wurde, statt offline zu gehen, und es wird kein Fehlschlag protokolliert: Auf den ersten Uplink zu warten ist das Protokoll bei der Arbeit. Eine Adresse, die in einer Nutzlast, die der Sensor tatsächlich gesendet hat, auf nichts auflöst, ist etwas anderes und wird als der Lesefehler gemeldet, der sie ist.

Wenn ein Sensor still wird

Weil nichts einen Sensor zyklisch abfragt, bleibt die zuletzt gesendete Nutzlast in diesem Zwischenspeicher, bis er eine neue sendet. Sich selbst überlassen, würde ein Sensor mit leerer Batterie dieselbe Zahl weiter als guten Messwert veröffentlichen, solange die Station läuft, und Diagramme, Historie und Alarme mit einem Wert speisen, der nicht mehr stimmt.

Jeder Sensor trägt deshalb in seinem eigenen Bereich eine höchste Zeit ohne Übertragung in Sekunden. Der Standard sind 3600 Sekunden, eine Stunde, was den Takt von zehn bis dreißig Minuten eines üblichen Sensors mit Reserve abdeckt; ein Sensor, der seltener meldet, erhöht seine eigene. Nach dieser Frist:

  • Tragen seine Tags keinen Wert mehr und veröffentlichen schlechte Qualität, statt den letzten Uplink zu wiederholen.
  • Sagt der Bereich des Geräts, wann der Sensor zuletzt gesendet hat, sodass Sie sehen können, wie lange er schon still ist.

Das Feld auf 0 zu setzen schaltet das Verfallen für diesen Sensor ab: Sein letzter Uplink liest sich unbegrenzt weiter als gut. Sonst ändert sich nichts, und keine gespeicherte Nutzlast wird verworfen.

Adressierung der Tags

Ein LoRaWAN-Tag adressiert Bytes innerhalb der entschlüsselten Nutzlast des Uplinks. Es gibt keine Freitextadresse; die Karte Quelle bietet typisierte Felder in zwei Betriebsarten an, umgeschaltet über das Kontrollkästchen Über Kanal und Typ von Cayenne LPP adressieren:

Feld Wirkung Werte Standard
Über Kanal und Typ von Cayenne LPP adressieren Aus: Das Feld für den Kanal ist ein einfacher Byte-Versatz. Ein: Die Nutzlast wird nach einem Paar aus Kanal und Typ nach Cayenne LPP durchsucht. ein / aus aus
Kanal oder Versatz in der Nutzlast Im Versatzbetrieb: der ab 0 gezählte Byte-Versatz, an dem der Wert beginnt. Im LPP-Betrieb: die Nummer des LPP-Kanals, nach dem gesucht wird. 0 oder größer 0
LPP-Typcode Nur im LPP-Betrieb: das Byte des Datentyps nach Cayenne LPP, das auf das Byte des Kanals folgt (zum Beispiel 103 für Temperatur). Die Bytes des Werts werden gleich hinter dem passenden Paar aus Kanal und Typ gelesen, und passen mehrere Nutzlasten, gewinnt die neueste. 0 oder größer 0
Leselänge (Bytes, leer = automatisch) Wie viele Bytes der Nutzlast den Wert bilden. Leer leitet sie aus dem Datentyp ab: 1 bei Boolean und Byte, 2 bei Int16, 4 bei Int32 und Float, 16 bei String. 1 oder größer, oder leer leer
Bitmaske (hex, leer = keine) Eine hexadezimale Maske, die vor allem anderen mit UND auf die rohen Bytes gelegt wird (zum Beispiel 0x0FFF, um Statusbits wegzunehmen). Das Präfix 0x ist wahlweise, und eine Maske ungerader Länge wird links aufgefüllt. Die Maske muss genau so viele Bytes abdecken wie die Leselänge, sonst schlägt der Lesevorgang fehl. Hextext oder leer leer
Höchstwertiges Byte zuerst Erklärt, dass die Nutzlast den Wert als Big-Endian trägt; die gelesenen Bytes werden vor der Wandlung umgedreht. Ein Feld für die Wortreihenfolge gibt es hier nicht: Eine Nutzlast beliebiger Länge hat keine 16-Bit-Wörter zum Tauschen. ein / aus aus
Multiplikator (leer = keiner) Ein Faktor auf der Busseite, den der Netzwerkserver gleich nach dem Entschlüsseln anwendet, bevor der Wert in die eigene Wertkette des Tags eintritt. Gilt nur für numerische Typen. Eine 0 wird dort abgelehnt, wo sie eingetippt wird ("Ein Multiplikator von 0 würde jeden Messwert auf null setzen."), weil sie jeden Messwert des Tags als 0 mit guter Qualität melden würde. jede Zahl außer 0, oder leer leer

Die Reihenfolge der Schritte bei einem Lesevorgang ist: die adressierten Bytes nehmen → die Bitmaske anwenden → umdrehen, wenn das höchstwertige Byte zuerst kommt → in den Datentyp des Tags wandeln → den Multiplikator anwenden (bei numerischen Typen).

Beispiele für einen Sensor, dessen 11 Byte große Nutzlast an Versatz 2 eine Temperatur als Int16 im Big-Endian trägt:

  • Versatzbetrieb: Kanal oder Versatz 2, Leselänge 2, höchstwertiges Byte zuerst ein.
  • LPP-Betrieb, derselbe Sensor spricht Cayenne LPP auf Kanal 1 mit Typ 103: das LPP-Kontrollkästchen setzen, Kanal 1, Typcode 103, Leselänge 2.

Unterstützte Datentypen

Typ Gelesene Bytes (automatisch) Wie die Bytes gedeutet werden
Boolean 1 Null ist falsch, alles andere wahr
Byte 1 Vorzeichenloses Byte
Int16 2 Vorzeichenbehaftete 16-Bit-Ganzzahl
Int32 4 Vorzeichenbehaftete 32-Bit-Ganzzahl
Float 4 IEEE 754 mit einfacher Genauigkeit
String 16 UTF-8-Text in der Leselänge

Schreiben und Gerätesuche

LoRaWAN-Tags sind nur lesend: Werte kommen allein aus den Uplinks der Sensoren, das Feld für den Zugriff bietet keine schreibbare Wahl an, und die Laufzeit lehnt einen Schreibvorgang ab, statt Erfolg vorzutäuschen. Downlinks gibt es im Protokoll als Netzverkehr (Join-Accepts, MAC-Befehle), nie als Schreibvorgänge auf Werte von Tags.

Der Treiber hat keinen Suchlauf. Legen Sie den Konzentrator von Hand mit seiner Station EUI und seiner Region an und jeden Sensor von Hand mit seiner DevEUI und seinem AppKey; der allgemeine Ablauf zum Hinzufügen eines Geräts steht auf der Seite Connector.