TTN und Node-RED 2nd Stage

node red logo

Ich hatte schon vor einiger Zeit geschrieben wie man an seine TTN Daten mit Node-RED kommt, jedoch ist seit dem einiges an Zeit vergangen und mittlerweile mein Wissen auch gewachsen. Da es für die Anfänger nie genug Anleitungen geben kann, werde ich auch nun auch nochmals kurz auf das Thema eingehen.

Vorbereitung Node-RED

Damit ihr Node-RED mit dem TTN verbindet könnt, müssen die entsprechenden Nodes installiert werden. Dazu Geht ihr ins Menü und wählt dort Manage palette. Anschließend wählt ihr im neuen Fenster den Reiter Install und gebt in der Suchzeile TTN ein. Ihr solltet nun den Node node-red-contrib-ttn finden und diesen installieren. Damit wären die Vorbereitungen abgeschlossen.

Die erste Applikation mit Node-RED verbinden

Den Anfang machen wir mit einem „ttn uplink“ Node, den ihr im Bereich Input findet. Zieht den Node in einen freien Bereich und führt einen Doppelclick auf ihn aus. Unter App wählt ihr „Add new ttn app..“ und drückt den Stift. In dem neuen Fenster müsst ihr nun eure Application ID angeben und den entsprechenden Accesss Key. Beides findet ihr in eurer TTN Console. Die Applikation ID sollte euch direkt ins Auge fallen und den Key findet ihr, sobald ihr die Applikation öffnet. Über den Button am Ende des Keys, könnt ihr diesen direkt in die Zwischenablage kopieren. Mit dem Button Add bestätigt ihr die Einstellungen und könnt danach über Done die Konfiguration des Nodes schließen.

Wenn ihr nun ein Deploy durchführt, sollte ein grüner Punkt am Node erscheinen. Damit wisst ihr dann ob er funktioniert. Das Beste ist ihr setzt auch gleich noch einen Debug Node, dann seht ihr auch sofort wenn Daten eintreffen. Wählt dazu einfach in der rechten Spalte den Reiter Debug aus und ihr solltet die Daten aus dem TTN sehen.

In meinem Fall ist es ein Node, dessen Payload über den TTN Payload Decoder dekodiert wird und somit sehr leicht interpretierbar ist. Damit lässt sich nun in Node-RED sehr einfach arbeiten und auswerten.


{"batt":3.5,"bytes":"IzMChAPz","humidity":51,"pressure":1018,"temperature":24.400000000000006}

Aber moment, das ist noch nicht alles. Aktuell seht ihr ja nur den Inhalt von msg.payload. In den empfangenen Nachrichten steckt aber noch viel mehr drin. Dieses wird sichtbar, sobald ihr den Debug-Node anpasst. Geht in seine Einstellungen und schaltet um auf „complete msg object“.

Nach einem Deploy, wir die nächste Empfangene Nachricht etwas größer ausfallen.


{"app_id":"ba-0006","dev_id":"ba-0006-otaa","hardware_serial":"003449A962407105","port":1,"counter":31087,"payload_raw":[35,51,2,132,3,243],"payload_fields":{"batt":3.5,"bytes":"IzMChAPz","humidity":51,"pressure":1018,"temperature":24.400000000000006},"metadata":{"time":"2018-07-23T12:06:43.29517498Z","frequency":868.1,"modulation":"LORA","data_rate":"SF7BW125","airtime":51456000,"coding_rate":"4/5","gateways":[{"gtw_id":"eui-b827ebfffe673c34","gtw_trusted":true,"timestamp":157919043,"time":"2018-07-23T12:06:43Z","channel":0,"rssi":-63,"snr":9.5,"rf_chain":1,"latitude":50.908012,"longitude":6.916417,"altitude":58}]},"payload":{"batt":3.5,"bytes":"IzMChAPz","humidity":51,"pressure":1018,"temperature":24.400000000000006},"_msgid":"1e2d4036.3e497"}

Hier seht ich nun auch die Daten, von welchem Gateway die Daten empfangen wurden und mit welchen Werten für RSSI, SNR und der Kanal.

Daten Auswerten

Ein function-Node, zur weiteren Auswertung, könnte nun so aussehen:

//find GW with best signal strength
var maxValue = -200;
var indexOfMaxValue = -1;
for(var i = 0; i < msg.metadata.gateways.length; i++){ if(msg.metadata.gateways[i].rssi > maxValue){
indexOfMaxValue = i;
}
}

//temp
var msg2 = { };
msg2.payload = msg.payload.temperature;

var msg3 = { };
msg3.payload = msg.payload.humidity;

var msg4 = { };
msg4.payload = msg.payload.pressure;

var msg5 = { };
msg5.payload = msg.payload.batt;

//rssi
var msg6 = { };
msg6.payload = msg.metadata.gateways[indexOfMaxValue].rssi;

//snr
var msg7 = { };
msg7.payload = msg.metadata.gateways[indexOfMaxValue].snr;

var msg8 = {};
msg8.payload = [{"temp": msg2.payload, "hum": msg3.payload, "pressure": msg4.payload, "batt": msg5.payload, "rssi": msg6.payload, "snr": msg7.payload}];
return msg8;

Der erste Teil ist dafür da um das Gateway mit der besten Empfangsqualität herauszufinden. Sollte ein Paket von mehrere Gateways empfangen worden sein, wird bei der Ausgabe von RSSI und SNR nur das mit dem besten Empfang berücksichtigt. Ansonsten ziehe ich mir die interessanten Daten in ein Objekt, welches in ein Array verpackt wird. Dieses kann nun einfach an eine Datenbank, wie InfluxDB, übergeben werden. Das Thema ist auch nicht schwer und wird hier behandelt.

1 Gedanke zu „TTN und Node-RED 2nd Stage“

Schreibe einen Kommentar