Ist mein Gateway online? – Stack V3 API

Ich hatte ja bereits zwei Methoden vorgestellt um den Status eures Gateways im alten V2 abzurufen. Natürlich kam bei mir die Frage auf wie es sich mit dem Stack V3 verhält. Die Antwort war schnell gefunden, denn dank der Stack V3 API kann der Status eines Gateways abgefragt werden. Dazu bedarfs es nicht mal viel. Dank Node-RED ist eine Abfrage schnell erzeugt und ihr entscheidet wie es danach weiter geht.

Stack V3 API Key erzeugen

Wir beginnen damit einen API Key zu erzeugen. Vergebt einen Namen mit dem ihr was anfangen könnt und wählt als Berechtigung „View gateway status“. Dieses wiederholt ihr für jedes Gateway, welches ihr überwachen möchtet. Kopiert euch den Key gut weg, denn ihr könnt ihn danach nicht mehr auslesen.

Stack V3 API

Import des Flows in Node-RED

Den unten angefügten Flow importiert ihr einfach in Node-RED. Dabei müsst ihr zwei Dinge anpassen:

  1. eure Gateway ID im http request Node mit dem Namen Gateway-ID
  2. euren API-Key im change Node mit dem Namen API-Key
[
    {
        "id": "ebabc705.205658",
        "type": "inject",
        "z": "fe6f12a2.7baa7",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "300",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 130,
        "y": 980,
        "wires": [
            [
                "6cff82c1.5a90ec"
            ]
        ]
    },
    {
        "id": "e7378b8f.cbd688",
        "type": "http request",
        "z": "fe6f12a2.7baa7",
        "name": "Gateway-ID",
        "method": "GET",
        "ret": "obj",
        "paytoqs": "ignore",
        "url": "https://eu1.cloud.thethings.network/api/v3/gs/gateways/Your-GW-ID/connection/stats",
        "tls": "",
        "persist": false,
        "proxy": "",
        "authType": "",
        "x": 490,
        "y": 980,
        "wires": [
            [
                "68be1fc7.83e8c"
            ]
        ]
    },
    {
        "id": "6cff82c1.5a90ec",
        "type": "change",
        "z": "fe6f12a2.7baa7",
        "name": "API-Key",
        "rules": [
            {
                "t": "set",
                "p": "headers",
                "pt": "msg",
                "to": "{\"Authorization\":\" Bearer Your-API-Key\"}",
                "tot": "json"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 300,
        "y": 980,
        "wires": [
            [
                "e7378b8f.cbd688"
            ]
        ]
    },
    {
        "id": "68be1fc7.83e8c",
        "type": "function",
        "z": "fe6f12a2.7baa7",
        "name": "",
        "func": "\nvar msg2 = {};\nvar msg3 = {};\nvar msg4 = {};\n\nmsg.payload = msg.payload.last_status_received_at;\n\nmsg2.payload = new Date((new Date) * 1 - 250 * 3600);\n\nmsg3.payload = \"GW offline\";\n\nmsg4.payload = \"GW online\"\n\n\t\t    if (msg2.payload > new Date(msg.payload)){\n                return msg3;\n            } else {\n                return msg4;\n            }\n",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 680,
        "y": 980,
        "wires": [
            [
                "5aa7c8be.720738"
            ]
        ]
    },
    {
        "id": "5aa7c8be.720738",
        "type": "debug",
        "z": "fe6f12a2.7baa7",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 850,
        "y": 980,
        "wires": []
    }
]

Das von mir verwendete Gateway nutz den Multi Protocol Packet Forwarder von Jac Kersing welcher wiederum das TTN Gatway Connector Protokoll unterstützt. Dieses hat den charmanten Vorteil regelmäßig seinen Status zu übermitteln. Somit frage ich auch den last_status_received_at Zeitpunkt ab und vergleiche ihn mit der aktuellen Zeit. Sollte dieser größer 15 Minuten sein, wird das Gateway als offline angesehen. Es liegt noch an euch eine entsprechend mit den Daten umzugehen. Ich lasse mir, bei einem Ausfall, eine Nachricht mittels Pushover auf das Handy schicken.

Das neue Basic Station Protokoll macht dieses nicht, und meldet sich nur wenn es ein Paket übermittelt. Somit müsst ihr dafür eure Abfrage entsprechend anpassen.

Hier exemplarisch eine Rückmeldung der API. Unter last_status verstecken sich noch weitere Infos, die ihr ebenfalls auswerten könntet.

connected_at: "2021-02-17T10:29:00.228974205Z"
protocol: "mqtt"
last_status_received_at: "2021-02-22T10:48:16.844147541Z"
last_status: object
last_uplink_received_at: "2021-02-22T10:41:45.485792344Z"
uplink_count: "2030"
last_downlink_received_at: "2021-02-22T10:19:10.910550886Z"
downlink_count: "230"

Ich hoffe ich konnte euch weiter helfen und ihr könnt euere Gateway nun auch im Stack V3 überwachen.

  Gefällt mir

Schreibe einen Kommentar