TTN Gateway monitoring

-> English Version <-

Eines der großen Thema die immer wieder aufkommen, ist das Monitoring von TTN Gateways. Jeder möchte wissen ob sein installiertes Gateway auch benutzt wird und wie stark. Leider bietet The Things Network momentan keine Möglichkeit die Daten extern abzufragen, so bleibt nur die Möglichkeit an der Console zu kleben und die Daten live anzuschauen. Das Thema ist in Planung, aber wir müssen wohl noch etwas warten.

Ich habe mich an dem Thema versucht und für das Single Channel Gateway nach Jaap Braam, so wie Gateways auf Basis eines Raspberry Pis, eine Lösung entwickelt. Diese ist zwar nicht sehr schön und hat ihre Macken, aber sie funktioniert. Es gibt sicherlich bessere Möglichkeiten aber ich habe nichts gefunden. Sicherlich werden einige den Kopf schütteln wegen des Codes, aber ich bin Anfänger und kann keine Programmiersprache. Also schaut es euch an und macht was daraus. Für Verbesserungen bin ich immer offen. Das Projekt findet ihr auf GitHub.

 

Monitoring eines Single Channel Gateways

Das Single Channel Gateway von Jaap Braam ist von Haus aus sehr Gesprächig. Ein einfaches Telnet auf seine IP genug um eine Info über eingehende Pakete zu bekommen. Ich baue eine Telnet Verbindung mit Node-RED auf und erzeuge aus dem Stream die Payload, welche anschließend ausgewertet wird. Alle interessanten Felder werden danach in einer InfluxDB gespeichert und mittels Grafana visualisiert. Den Node-RED Flow findet ihr hier. Ihr müsst noch die IP eures Gateways anpassen und die Daten zu eurer InfluxDB.  Danach werden eure Daten gespeichert.

node-red monitoring scgw

 

Nun könnt ihr die Daten in Grafana visualisieren. Ich habe dazu folgendes Dashbaord aufgebaut, aber das kann ja jeder so machen wie er möchte. Bei einem Single Channel Gateway macht es eigentlich keinen sind Frequenz und Kanal auszuwerten, daher könnt ihr die entfernen.

single channel monitoring

 

Natürlich hat das Ganze auch einen unschönen Fehler. Sollte euer Gateway neu starten, geht die Verbindung verloren und wird nicht mehr aufgebaut. Ein Neustrat von Node-RED behebt das Problem oder ihr ändert die IP im tcp-Node ab und macht einen Deploy, mit anschließender Rückänderung.

Bisher werden auch nur empfangene Pakete ausgewertet, ich werde hier also in naher Zukunft noch etwas erweitern müssen.

 

Monitoring eines Gateway auf Basis eines Raspberry Pi

Das Monitoring eines Gateways auf Basis eines Raspberry Pis ist schon etwas schwieriger. Hier müssen wir vorher ein paar Vorbereitungen treffen, damit wir an die nötigen Daten kommen. Die Idee dabei ist es sich per SSH mit dem Gateway zu verbinden und einen tcpdump auf den Port 1700 durchzuführen. Damit erhalten wir alle Daten die zwischen dem Gateway und dem TTN Backend ausgetauscht werden.

In Node-RED verwende ich big-ssh um eine SSH Verbindung aufzubauen. Dieses müsst ihr noch über Manage palette installieren. Danach könnt ihr euch den Flow von GitHub kopieren. Die Daten zu eurer InfluxDB müsst ihr noch ensprechend anpassen und ebenfalls den big-ssh Node, dazu kommen wir aber jetzt.

gw monitoring

 

Anschließend müssen wir uns noch um die SSH-Verbindung kümmern. big-ssh arbeitet mit einem Private Key, den wir erst noch erzeugen müssen, dabei müssen wir darauf achten, dass er als RSA-Key erzeugt wird. Solltet ihr bereits einen Key haben, könnt ihr euch das ersparen. Ihr könnt einfach mal schauen ob ein Key namens id_rsa vorhanden ist.

[code]

root@raspberrypi:/# ls ~/.ssh/
id_rsa id_rsa.pub known_hosts

[/code]

 

Ansonsten erzeugen wir uns einen und versehen ihn mit einer Passphrase.

[code]

ssh-keygen -t rsa -b 1024

[/code]

 

Anschließend müssen wir überprüfen, unter welchem Nutzer eure Node-RED Instanz läuft, denn dieser Nutzer muss Zugriff auf den Key haben. In meinem Fall ist das der User pi. Also müssen wir den Key noch umkopieren.

[code]

root@raspberrypi:/# ps -ef |grep node-red
pi 405 1 0 Oct27 ? 01:05:30 node-red

cp&nbsp;~/.ssh/id_rsa /home/pi
chmod 644 /home/pi/id_rsa

[/code]

 

Nun kopieren wir den erzeugten Key noch in die bekannten Keys des TTN-Gateways.

[code]

ssh-copy-id -i ~/.ssh/id_rsa.pub gw-user@gw-ip

[/code]

 

Anschließend können wir den big-ssh Node anpassen und die entsprechenden Einstellungen vornahmen. Ihr müsste die IP des Hosts anpassen, den Pfad zum Private Key, auf den Node-RED auch Lesezugriff haben muss und die Pass Phrase.

 

Nun muss nur noch einmalig die Zeit injiziert werden und alles sollte Laufen. Die SSH-Verbindung bleibt bestehen und die Daten des tcpdump landen in Node-RED. Ihr könnt als Grafana-Vorlage die Obige vom Single Channel Gateway verwenden, müsst aber natürlich die Datenbankabfrage anpassen. Auch hier werden aktuell nur die empfangenen Pakete ausgewertet. big-ssh kann die SSH-Verbindungen nicht sauber abbauen und sie bleiben offen. Also jedes Mal wenn ihr die Zeit einfügt, wird eine neue SSH-Verbindung geöffnet. Behaltet also bitte die aktiven Verbindungen auf eurem Gateway im Blick.

Weitere Test haben gezeigt, dass die Methode nicht sehr genau ist und Probleme bei hohem Traffic bekommt. Es ist ein guter Anhaltspunkt, aber nicht für absolut genaue Aussagen nutzbar. Ich hoffe das es hier im laufe der nächsten Monate eine Möglichkeit geben wird, die Daten direkt per MQTT von TTN abzufragen.

mcgw monitoring

 

Eine Anmerkung zum Schluss: Ich weiß das meine Methode nicht sehr sauber und schön ist, also gebt mir ein Paar Tips, was man besser machen kann und sollte.

 

Update vom 03.11.2017

  • Genauigkeit des Flows für Raspberry Pi verbessert, nun sollten viel weniger Pakete verloren gehen.
  • Unterstützung für Outbound Messages am Raspberry Pi

 

 

 

Schreibe einen Kommentar