Bevor wir starten, wollte ich nur kurz sagen warum es hier so lange ruhig war. Aufgrund der aktuellen Corona Situation, habe ich meine Aufmerksamkeit auf meine Familie und meine Arbeit konzentrieren müssen. Dadurch kamen meine Hobbys zu kurz. Langsam normalisiert sich die Situation wieder und ich habe auch mehr Zeit für mich. Daher sollte auch langsam wieder die Aktivität hier auf meinem Blog ansteigen. Nun aber zum eigentlichen Thema, ttnctl:
Es ist zwar schon lange her, aber es gab vor einiger Zeit Probleme mit der ersten Methode, den Zustand des Gateways abzufragen. Es kam von mehreren Usern der Vorschlag den Status über ttnctl abzufragen, worauf ich hier nun eingehen möchte.
ttnctl installieren
Im TTN eigenen Quick Start ist alles dazu beschrieben, ich gehe aber trotzdem kurz darauf ein.
Mit nachfolgenden Befehlen ladet ihr euch die aktuelle Version herunter und installiert sie (gültig für ein 64bit Linux):
wget https://ttnreleases.blob.core.windows.net/release/master/ttnctl-linux-amd64.zip
unzip ttnctl-linux-amd64.zip
mv ttnctl-linux-amd64 /usr/local/bin/ttnctl
chmod +x /usr/local/bin/ttnctl
Anschließend müssen wir noch ttnctl autorisieren. Geht dazu auf https://account.thethingsnetwork.org/ und logged euch ein. Anschließend können wir uns einen ttnctl access code erzeugen. Diesen Code kopiert ihr euch und autorisiert damit ttnctl:
ttnctl user login YourAccessCode
INFO Successfully logged in as BjoernA
Gateway Status abfragen
Über ttnctl gateways status EureGW-ID , können wir nun den Status abfragen. Der Vorteil der Methode ist einer erhöhte Zuverlässigkeit.
ttnctl gateways status eui-b827ebfffe6b1673
INFO Discovering Router...
INFO Connecting with Router...
INFO Connected to Router
INFO Received status GatewayID=eui-b827ebfffe6b1673
Last seen: 2020-07-15 10:35:21.779071224 +0200 CEST
Timestamp: 0
Reported time: 2020-07-15 10:40:40.987207 +0200 CEST
Platform: IMST + Rpi
Frequency Plan: EU_863_870
Bridge: gs.v3.
Location: (50.934422, 6.954430; source unknown)
Rtt: 23ns
Rx: (in: 160798; ok: 111417)
Tx: (in: 4807; ok: 4807)
Abfrage über Node-RED
Ok, aber geht es auch automatisch? Natürlich!
Wir nutzen dafür wieder unser beliebtes Node-RED. Ich habe dafür ein Script erstellt, welches ich durch Node-RED ausführen lasse. Node-RED prüft dann ab Last seen > 15 Minuten ist und gibt mir im Fehlerfall eine Meldung per Pushover aus.
vi ba-0001.sh
Inhalt:
#!/bin/bash
ttnctl gateways status eui-b827ebfffe6b1673
Ausführbar machen:
chmod +x ba-0001.sh
Dieses könnt ihr dann mit ./ba-0001.sh testen, wobei ba-0001.sh nur ein Beispiel ist. Die Ausgabe sollte gleich der obigen Abfrage sein.
Anschließend habe ich mir in Node-RED einen timestamp-Node, einen exec-Node, einen function-Node und einen pushover-Node zusammengesetzt.
Der exec-Node ist folgendermaßen aufgebaut:
Der function-Node sieht so aus:
var msg1 = {}; var msg2 = {}; var msg3 = {}; var msg4 = {}; msg.payload = msg.payload.toString(); msg.payload = msg.payload.split("seen"); msg1.payload = msg.payload[1]; msg1.payload = msg1.payload.split("+"); msg1.payload = msg1.payload[0]; msg1.payload = msg1.payload.split(": "); msg1.payload = msg1.payload[1]; msg2.payload = new Date((new Date) * 1 - 250 * 3600); msg3.payload = "GW ba-cologne-01 offline"; msg4.payload = new Date((new Date) * 1 - 250 * 3600); if (msg2.payload > new Date(msg1.payload)){ return msg3; }
Wenn nun eines meiner Gatway ausfällt und für ca. 15 Minuten nicht erreichbar ist, bekomme ich eine Nachricht:
Ihr solltet zusätzlich noch einen delay Node einbauen, damit ihr bei einem Ausfall nicht mit Nachrichten überschwemmt werdet. Ich habe mich dafür entschieden maximal eine Nachricht alle drei Stunden zu erhalten.
Ich hoffe ihr konntet damit etwas anfangen!
Hallo,
tolle Sache.
Damit könnte man doch bestimmt auch das RX TX auf deiner Webseite ausgeben.
So als Überischt und Täglicher Grafana Tabelle.