Das Überwachen von Gateways ist ein sehr beliebtes Thema. Neben den Möglichkeiten mittels CollectD und der „Spiegelung“ der Daten, ist es auch möglich den Zustand des Gateways über die TTN API abzufragen. Es gibt mehrere interessante Links, auf die ich hier eingehen werde. Daraus könnt ihr euer bestehendes Monitoring erweitern und noch mehr Informationen abfragen.
Abfrage eines Gateways dank API
Mit folgendem Link, könnt ihr die Daten eines Gateways abfragen.
http://noc.thethingsnetwork.org:8085/api/v2/gateways/<Gateway ID>
Nachfolgend erhaltet ihr einen Datensatz, der wie folgt aussieht. Interessant sind dabei die Werte rx_ok und tx_in. Diese Werte entsprechen den Received und Transmitted Massages in der TTN Console eures Gateways.
{"timestamp":"2018-07-23T07:58:50.300348083Z","authenticated":true,"uplink":"288067","downlink":"7785","location":{"latitude":50.93442,"longitude":6.9544287,"altitude":70},"platform":"IMST + Rpi","gps":{"latitude":50.93442,"longitude":6.9544287,"altitude":70},"time":"1532332730300348083","rx_ok":288067,"tx_in":7785}
Diese Daten könnt ihr wunderbar in Node-RED auswerten. Ihr nehmt euch einen http-request Node, tragt obige URL ein und wählt im Feld Return „a parsed JSON object“.
Die Daten übergebt ihr an einen function Node, der dan in etwa so befüllt ist:
[code]
var msg1 = {};
var msg2 = {};
var msg3 = {};
msg1.payload = msg.payload.rx_ok; //Emfangene Pakete
msg2.payload = msg.payload.tx_in; //Gesendete Pakete
msg3.payload = [{"rx": msg1.payload, "tx": msg2.payload}];
return msg3;
[/code]
Anschließend könnt ihr die Daten in eine Datenbank schreiben und könnt so den Verlauf der gesendeten und empfangenen Pakete überwachen.
Abfrage der Community Gateways
Wenn man sich den Quelltext der Community Pages anschaut, wird man auch fündig. Um die Map zu erstellen, werden die Gatewaydaten abgefragt, so wie auch der Einzugsbereich eurer Community angegeben wurde. Der Link sieht dann z.B. so wie der Link von Köln, aus. Anzugeben sind die Koordinaten für den Mittelpunkt und der Durchmesser des Kreises, innerhalb dessen die Gateways liegen sollen:
https://www.thethingsnetwork.org/gateway-data/location?latitude=50.93870021131726&longitude=6.955204010009755&distance=5000
Als Antwort erhaltet ihr eine Liste der Daten aller Gateways, die dieser Abfrage entsprechen. Ich habe hier mal die Daten eines Gateways herausgenommen:
"eui-b827ebfffe6b1673":{"id":"eui-b827ebfffe6b1673","description":"ba-cologne-01","owner":"bjoerna","owners":["bjoerna"],"location":{"latitude":50.93442,"longitude":6.95443,"altitude":70},"country_code":"de","attributes":{"antenna_model":"Aurel GP","brand":"IMST Lite Gateway","model":"Raspberry Pi with IMST iC880A","placement":"indoor"},"last_seen":"2018-07-23T07:58:09Z"}
Am interessantesten ist hierbei die Anzahl der Objekte, denn dieses entspricht der Anzahl der Gateways eurer Community und der Wert „last_seen“. Last_seen zeigt euch wann euer Gateway das letzte mal Daten an die TTN-Server übertragen hat, bzw. wann diese Empfangen wurden. Für TTN sind Gateways aktiv, die innerhalb der letzten drei Stunden gesehen wurden.
Danke Node-RED sind auch diese Daten schnell ausgewertet. Dabei habe ich folgendes in einen function Node gepackt:
[code]
var msg2 = {};
var msg3 = {};
var msg4 = {};
var msg5 = {};
var msg6 = {};
//Objects to Array
msg3.payload = Object.values(msg.payload);
//Current Time – 15 minutes
msg4.payload = new Date((new Date) * 1 – 250 * 3600);
//Number of Objects = Number of Gateways
msg5.payload = Object.keys(msg.payload).length;
//active since last 15 minutes?
var gwonline = 0;
for(var i = 0; i &amp;lt; Object.keys(msg.payload).length; i++){
if (msg4.payload &amp;lt; new Date(msg3.payload[i].last_seen)){
gwonline++;
}
}
//missing last_seen information?
var gwonline2 = 0;
for(var i = 0; i &amp;lt; Object.keys(msg.payload).length; i++){
if (msg3.payload[i].last_seen === undefined ){
gwonline2++;
}
}
msg2.payload = gwonline + gwonline2;
msg6.payload = [{"gwtotal": msg5.payload, "gwonline": msg2.payload}];
return msg6;
[/code]
Der Node zählt die Anzahl der Gateways und wie viele davon innerhalb der letzten 15 Minuten aktiv waren. Eine kleine Besonderheit gibt es noch. Bei einigen Gateways fehlt der Eintrag last_seen. Diese Gateways sind ebenfalls aktiv und müssen mitgezählt werden. Wenn ich das Zeitfenster auf drei Stunden erhöhe sind meine Daten auch gleich der Daten der TTN Webseite.
Abfrage von Ländern
Es ist auch einfach möglich eine Abfrage auf die Gateways eines Landes zu machen. Dank folgendem Link, könnt ihr die Daten eines Landes abfragen, ihr müsst nur den CountryCode am Ende anpassen. Hier mal eine Abfrage für Deutschland und Kanada:
https://www.thethingsnetwork.org/gateway-data/country/de
https://www.thethingsnetwork.org/gateway-data/country/ca
Eine Abfrage der Weltweiten Gateways ist ebenfalls möglich:
https://www.thethingsnetwork.org/gateway-data/
Damit habt ihr erst mal wieder genug zum teste. also ran an Node-RED und Grafana 😉
sehr spannend. viel stoff auf einmal.
Gibt es auf diese Weise auch einen Weg zu den einzelnen Communities? zB Berlin 🙂
Soweit ich weiß leider nicht. Nur der Weg über den Link aus dem Quelltext ist mir bekannt.
Für Berlin wäre das: https://www.thethingsnetwork.org/gateway-data/location?latitude=52.5189367988799&longitude=13.40049594640732&distance=110000
Einfach die Seite der Community öffnen und sich dann den Quelltext anschauen. Nach community_list_url steht der Link.
Super, danke. Jetzt kann ich meine Abfrage über ttnctl endlich ablösen.
Bei der Abfrage eines einzelnen Gateways: steht der Parameter „time“ und „timestamp“ dann für last_seen?
Scheint mir so.
Gruß
Reinhard
Hallo Björn,
surfe immer mal wieder bei Deinem Blog vorbei.
Chapeau – es sind immer wieder ein paar Punkte dabei die ich so noch nicht kannte.
Weiter so.
Gruss Achim
Die Abfrage des Status eines Gateways über die Gateway-ID funktioniert wie oben beschrieben nicht mehr.
Die API ist geändert und muss jetzt so aufgerufen werden
https://account.thethingsnetwork.org/api/v2/gateways/{gateway-id}
zu finden unter https://www.thethingsnetwork.org/docs/network/account/api.html#get-gatewaysgw_id
Also die Abfrage über das NOC geht noch, wird aber mit dem V3 Stack wohl so nicht mehr gehen. Dein Link fragt die Account-Daten ab, wie Frequency-Plan, Router und MQTT Adressen. Dort erhalte ich aber keine Aussage zu den empfangenen Paketen, oder übersehe ich da was?
bei mir geht die Abfrage
http://noc.thethingsnetwork.org:8085/api/v2/gateways/
nicht – wo ist da mein Fehler?
Was meine Angabe angeht, hast du natürlich Recht, da war ich etwas zu voreilig
vergiss es, jetzt ging es grade wieder
http://noc.thethingsnetwork.org:8085/api/v2/gateways/ttn-cgn_dingfabrik1
kein Ahnung, was da falsch war
Danke für deinen Inspirationen, die ich hier
https://glaskugelsehen.wordpress.com/2019/02/10/thethingsnetwork-gateway-status-und-node-red-worldmap/
gut einsetzen konnte
Hallo,
gibt es eien Weg den Besitzer Owner eines Gateway herauszufinden und diesen zu Kontaktieren?
Theoretisch müßte man doch per API den Owner sehen und diesen über die Kommunity anschreiben können.
Leider funktionieren die Links nicht mehr. Liegt wohl an der umstellung auf TTS.
Danke
Hallo Mike,
wenn es ein V2 Gateway ist, geht dieser Link
https://account.thethingsnetwork.org/api/v2/gateways/
z.B. eines meiner Gateways
https://account.thethingsnetwork.org/api/v2/gateways/ttn-cgn_dingfabrik1
Leider funktioniert dieser Link nicht für V3 Gateways
Gruß
Reinhard