TheThingsNetwork gateway monitor with Telegram alarms
Description
This a flow to monitor the status of LoRaWan gateways connected to The Things Network (TTN) using the undocumented NOC API. Periodically inject a message with the gateway EUI as payload and connect the output to a Telegram bot.
Configuration
You will need to edit/add inject nodes with the name of the gateway in the topic and the EUI in the payload. Configure it to check the status every X minutes.
Create a telegram bot (using the @BotFather) and configure the token in the telegram configuration node.
You will also need to add the chatId to send the notification to in the "telegram payload" function node. To get the chatId use another bot like @my_id_bot.
[{"id":"96beb4bd.b0d418","type":"comment","z":"f2a3fe14.e7db8","name":"Gateway Management","info":"","x":160,"y":240,"wires":[]},{"id":"efe2cc40.4ab8b","type":"inject","z":"f2a3fe14.e7db8","name":"ttn-gw01","topic":"ttn-gw01","payload":"eui-0000000000000001","payloadType":"str","repeat":"300","crontab":"","once":true,"onceDelay":0.1,"x":140,"y":320,"wires":[["fc377781.1447e8"]]},{"id":"a99602aa.eb307","type":"http request","z":"f2a3fe14.e7db8","name":"request","method":"GET","ret":"obj","url":"","tls":"","x":520,"y":380,"wires":[["bb2b60e2.5f72b"]]},{"id":"fc377781.1447e8","type":"template","z":"f2a3fe14.e7db8","name":"build url","field":"url","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"http://noc.thethingsnetwork.org:8085/api/v2/gateways/{{payload}}","output":"str","x":360,"y":380,"wires":[["a99602aa.eb307"]]},{"id":"bb2b60e2.5f72b","type":"function","z":"f2a3fe14.e7db8","name":"status","func":"var status = 'offline';\n\nif (200 == msg.statusCode) {\n if (!(\"error\" in msg.payload)) {\n var last = (new Date(msg.payload.timestamp)).getTime() / 1000;\n var now = new Date();\n var current = (now.getTime() + (now.getTimezoneOffset() * 60)) / 1000; \n var difference = current - last;\n msg.last = last;\n msg.current = current;\n msg.delta = difference;\n if (difference < 180) status = 'online';\n }\n}\n\nmsg.status = status;\nmsg.payload = msg.topic + \"-\" + status;\nreturn msg;","outputs":1,"noerr":0,"x":670,"y":380,"wires":[["401526f4.b52348","7a0405b1.bd2e3c"]]},{"id":"7a0405b1.bd2e3c","type":"rbe","z":"f2a3fe14.e7db8","name":"has_changed","func":"rbei","gap":"","start":"","inout":"out","property":"payload","x":380,"y":460,"wires":[["8406037c.072cd"]]},{"id":"401526f4.b52348","type":"debug","z":"f2a3fe14.e7db8","name":"status","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":810,"y":380,"wires":[]},{"id":"8406037c.072cd","type":"template","z":"f2a3fe14.e7db8","name":"message template","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"Gateway {{ topic }} status has changed to {{ status }}.\n","output":"str","x":590,"y":460,"wires":[["25622438.bdc0ec","4711b876.27f488"]]},{"id":"25622438.bdc0ec","type":"debug","z":"f2a3fe14.e7db8","name":"status","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":770,"y":520,"wires":[]},{"id":"6fe755d7.2e338c","type":"inject","z":"f2a3fe14.e7db8","name":"ttn-gw02","topic":"ttn-gw02","payload":"eui-0000000000000002","payloadType":"str","repeat":"300","crontab":"","once":true,"onceDelay":0.1,"x":140,"y":380,"wires":[["fc377781.1447e8"]]},{"id":"e906e0bd.383b1","type":"inject","z":"f2a3fe14.e7db8","name":"ttn-gw03","topic":"ttn-gw03","payload":"eui-0000000000000003","payloadType":"str","repeat":"300","crontab":"","once":true,"onceDelay":0.1,"x":140,"y":440,"wires":[["fc377781.1447e8"]]},{"id":"78b71800.62f598","type":"telegram sender","z":"f2a3fe14.e7db8","name":"telegram","bot":"c559e4a3.56fef8","x":1000,"y":460,"wires":[[]]},{"id":"4711b876.27f488","type":"template","z":"f2a3fe14.e7db8","name":"telegram payload","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"{\n \"chatId\": -220000000,\n \"type\": \"message\",\n \"content\": \"{{payload}}\"\n}\n\n","output":"json","x":810,"y":460,"wires":[["78b71800.62f598"]]},{"id":"c559e4a3.56fef8","type":"telegram bot","z":"","botname":"Telegram bot","usernames":"","chatids":"","baseapiurl":"","pollinterval":"300"}]