Node-RED und die Meta Daten der Nodes

Wir haben nun schon die Nucleon Wetter Nodes in einem Node-RED Flow, so das diese ihre Wetter Daten in die InfluxDB senden. Jeder Node liefert aber auch noch eine Handvoll Meta Daten über den Standort und interessante Daten zur Übertragung. Diese Daten wollen wir natürlich auch aufbereiten und zur Anzeige bringen.

Übersicht des vollständigen Flows mit Meta Daten

Der oben gezeigte Node-RED Flow ist das Ziel dieses Beitrags. Wir werden auch hier jeden Node besprechen so das am Ende ein Nachbau in der eigenen Node-RED Instanz möglich wird.

Die Meta Daten eines TTN Node

Welche Daten liefert ein BaseNode noch neben den Wirkdaten:

  • app_id Der eindeutige Name einer TTN Applikation
  • dev_id Der eindeutige Name eines Device in einer Applikation
  • hardware_serial Die eindeutige Kennung des LoRaWAN Modems auf dem Node
  • frequency Die Frequenz über die das Datenpaket versendet worden ist
  • data_rate Die Datenrate der Übertragung
  • airtime Die Airtime der Übertragung
  • coding_rate Die Coding Rate darf mir gerne jemand genauer erklären
  • channel Der Kanal über die gesendet worden ist, im Endeffekt ist das eine andere Bezeichnung der Frequenz
  • gw_id Die ID des beteiligten Gateways, hier zur Zeit aber nur das erste GW, kann man mal bei Gelegenheit noch etwas feiner aufteilen wenn die GW dichte zugenommen hat.
  • rssiReceived Signal Strength Indicator„, also die Signalstärke mit der Das Signal empfangen wurde
  • snrsignal-to-noise ratio“ also der Signal zu Rausch Abstand, ein Indikator zur Qualität des Signals
  • rf_chain Der Slot in der Übertragung in dem die Nachricht übertragen worden ist.
  • port Der virtuelle Port der Nachricht, wir nutzen dies um Daten einer bestimmten Auswertung zu übergeben.
  • counter Der Frame Counter der Übertragung, dieser wird hochgezählt um die Übertragung weiter abzusichern.
  • lastseen Der Zeitstempel der letzten Übertragung, hier kann man erkennen wann der BaseNode zuletzt online war.

TTN Uplink Node

TTN Uplink Node als Verbindung zur Wetter Application
Konfiguration des Wetter Node
Konfiguration der Wetter Application

Der Node „Nucleon Wetter“ ist unsere Verbindung zum TTN, dort wird der Name und die App definiert. Klickt man in den Einstellungen aus den Stift neben App erreicht man die Einstellungen der App. Dort muss die in der TTN Console vergebene App ID hinterlegt werden und der in der TTN Application zu entnehmenden Access Key. Die Discovery adress ist schon vorgegeben und passt auch für TTN. (discovery.thethingsnetwork.org:1900)

Diesen Node haben wir schon in der Anleitung zum Wetter-Flow erstellt.

Functions Node Meta Daten

Der Funktions Node
Die Konfiguration des Function Node

Nach einem doppelklick auf den Node öffnet sich das Config Fenster. Hier erstellen wir eine Variable msg1 und erstellen darin dann ein payload Array mit zwei Objekten.
msg1.payload = [{},{}]
Das erste Objekt nimmt die Meta Daten auf und im zweiten Objekt wird die Node Identifikation abgelegt, aus der dann in der InfluxDB die Keys für das Measurement werden. Mit return (msg1); wird die so erstellte Nachricht ausgegeben.

Hier der Code für den Funktions Node:

var msg1 = {};

msg1.payload = [
    {
     frequency : msg.metadata.frequency,
     data_rate : msg.metadata.data_rate,
     airtime : msg.metadata.airtime,
     coding_rate : msg.metadata.coding_rate,
     channel : msg.metadata.gateways[0].channel,
     gw_id : msg.metadata.gateways[0].gtw_id,
     rssi : msg.metadata.gateways[0].rssi,
     snr : msg.metadata.gateways[0].snr,
     rf_chain : msg.metadata.gateways[0].rf_chain,
     port : msg.port,
     counter : msg.counter,
     lastseen : msg.metadata.time
    },
    {app_id : msg.app_id,
    dev_id : msg.dev_id,
    hardware_serial : msg.hardware_serial}
];
return (msg1);

Excurs Meta Daten

Auszug aus einer Debug Meldung eines Wetter-Node

Wir sehen hier im Bild einen Auszug eines msg Objekts und können dort die gesendeten Meta Daten lesen. Der Wetter-Node hat seine Daten an das Gateway „nucleon-ev_gw-03_slo-kiel“ übermittelt, die Geo Daten (metadaten.gateways[0].latitude, metadaten.gateways[0].longitude und metadaten.gateways[0].altitude) des Gateways sind an dieser Stelle verzeichnet. Es ist auch das einzige GW welches diesen Datensatz empfangen hat.
Der Wetter-Node selber ist auch mit seinen Geo Daten aufgeführt metadaten.latitude und metadaten.longitude

Da diese Daten aber eigentlich viel wichtiger bei den Messwerten des Node aufgehoben sind habe ich diese auch in der DB der Messdaten geschrieben und verwende sie nicht in den Meta Daten. Dieser Punkt kann bestimmt diskutiert werden und man kann diese Daten auch ohne Probleme den Meta Daten zuordnen.

SF Check

Ein Switch Node als SF Check konfiguriert.

Um nun aus den Daten die unterschiedlichen Spread Faktoren zu erfassen müssen wir einen Switch Node erstellen der auf den Inhalt des Feld data_rate reagiert. Dort wird die gesuchte Information als String hinterlegt. Das folgende Bild zeigt die Konfiguration den Switch Node.

Config des Switch Node

Es gibt die 6 unterschiedlichen SF7-12 die jeweils einem Ausgang zugeordnet werden. Diese Ausgänge werden nun separat ausgewertet um die so entstehenden neuen Felder der Nachricht anzuhängen.

Die Function Nodes für die unterschiedlichen SF
Config des SF7 Node

In diesen Funktions Node, im Beispiel ist es der Node für SF7, wird dem ersten payload Objekt das Feld SF7 mit dem Wert 1 hinzugefügt. Die 5 anderen Nodes werden entsprechend konfiguriert.

msg.payload[0].SF7 = 1;
msg.payload[0].SF8 = 0;
msg.payload[0].SF9 = 0;
msg.payload[0].SF10 = 0;
msg.payload[0].SF11 = 0;
msg.payload[0].SF12 = 0;
return (msg);

Der Kanal Switch

Nun erstellen wir einen Switch für die Kanäle der Übertragung, denn auch diese möchten wir später mit Grafana beobachten können.

Ein Swich Node um die Kanäle zu trennen

Diesen Switch konfigurieren wir so das alle möglichen Werte im Feld msg.payload[0].channel auf einen eigenen Ausgang gelegt werden.

Die Konfiguration des Kanal Switch

Nun werden die 9 Ausgänge (Cannel 0-9) noch auf Funktions Nodes gelegt und die Felder der Nachricht angehangen.

Die Funktions Nodes für die Kanäle

Auch bei den Kanälen werden nun zusätzliche Felder dem Payload hinzugefügt um diese dann später in der Visualisierung einfacher abzugreifen.

msg.payload[0].C0 = 1;
msg.payload[0].C1 = 0;
msg.payload[0].C2 = 0;
msg.payload[0].C3 = 0;
msg.payload[0].C4 = 0;
msg.payload[0].C5 = 0;
msg.payload[0].C6 = 0;
msg.payload[0].C7 = 0;
msg.payload[0].C8 = 0;
return (msg);

Zeitformat anpassen

Damit man das Zeitformat einfacher anzeigen kann verwende ich an dieser Stelle ein zusätzliche Node Package „node-red-contrib-moment“ dieses kann man in der Shell installieren

cd <node-red Verzeichnis>
npm install node-red-contrib-moment

Oder über auch direkt aus der Node-RED Oberfläche heraus >Manage Palette<

Den so installierten Moment Node findet man unter Format auf der linken Seite in Node-RED.

Ein Moment Node um das Date/Time Format anzupassen
Das Feld lastseen wird hier umgewandelt um es in der Visualisierung besser anzuzeigen

Die Einstellungen sind übersichtlich und die verwendeten Formate in der Info zum Node gut erklärt, darum gibt es zu diesem Node kaum etwas zu sagen.

Daten an die InfluxDB senden

Wir wollen die Daten natürlich auch in unsere InfluxDB senden und verwenden dafür einen InfluxDB Node.

Der InfluxDB Node als Datensenke der Meta Daten

Exkurs DB anlegen

Damit wir den InfluxDB Node nutzen können müssen wir natürlich auch eine passende Datenbank anlegen. Dies haben wir schon für die Wetter Daten gemacht, nun müssen wir es noch für die Meta Daten durchführen.

Auf der Shell des Servers melden wir uns an den Influx Clienten an:

influx -username '<user>' -password '<pass>

Connected to http://localhost:8086 version 1.7.4
InfluxDB shell version: 1.7.4
Enter an InfluxQL query
> 

Hier im Clienten legen wir die Datenbank an:

CREATE DATABASE nodemeta

Und wir vergeben die Berechtigungen für unsere beiden Benutzer ttn zum schreiben und ttgraf zum lesen der Daten in der neuen Datenbank.

GRANT WRITE ON nodemeta to ttn
GRANT READ ON nodemeta to ttngraf

damit ist die InfluxDB für die Meta Daten erstellt und kann von uns beschrieben werden.

InfluxDB Config Dialog

Wir wählen ein sprechenden Namen für das Measurment und benennen den Node, nach einem klick auf den Stift erreichen wir die Server Einstellungen für die InfluxDB.

Einstellungen für die neue Datenbankverbindung

Hier müssen wir den Server (Host) benennen und die Datenbank eintragen die wir weiter oben erstellt haben. Username und Passwort eintragen und der DB Connection einen Namen geben.

Routing erstellen und deploy

Nun verbinden wir alle erstellten Nodes so das wir den Gewünschten Flow erhalten, an einigen Stellen können wir noch Debug Nodes anbringen, so das wir auch im Debug Fenster verfolgen können was mit den Daten passiert.

Nun können wir auf Deploy klicken und der neue neue Teil des Wetter Flows ist aktiv. Jetzt werden für jeden Node nicht nur die Wirkdaten sondern auch interessante Meta Daten zu InfluxDB übertragen.

Der komplette Wetter-Flow nun auch mit der Sicherung von Meta Daten

Ich hoffe das euch dieser Artikel wieder ein Stück weiter gebracht hat, im nächsten Artikel werden wir dann die gespeicherten Daten auch mit Grafana visualisieren damit ein Informatives Dashboard entsteht.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Ich akzeptiere

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.