Gateway Status abfragen über TTN API

ttn logoDas Ü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&amp;longitude=6.955204010009755&amp;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;amp;lt; Object.keys(msg.payload).length; i++){
if (msg4.payload &amp;amp;lt; new Date(msg3.payload[i].last_seen)){
gwonline++;
}
}

//missing last_seen information?
var gwonline2 = 0;
for(var i = 0; i &amp;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 😉

12 Gedanken zu „Gateway Status abfragen über TTN API“

  1. 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

    Antworten
    • 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?

      Antworten
  2. 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

    Antworten

Schreibe einen Kommentar