TTN Gateway + Monitoring mit Resin.io

Iresin.io logoch plante schon seit längerer Zeit meine TTN Gateways auf den neuen The Things Network Multi Protocol Packet Forwarder upzudaten. Mangels Wissen und meinem speziellen Setup für das Monitoring, habe ich es bisher gelassen. Nun hat aber Philippe eine Multi Container Config für Resin.io erstellt, die auch einen Container für collectd enthält und das Gateway Monitoring sehr einfach gestaltet. Das Ganze ist ein Fork auf der Basis von JP Meijers Setup. Diesem Fork wiederum hat sich Caspar angenommen und ihn etwas abgespeckt, da Philippe ihn stark auf seine Bedürfnisse angepasst hatte.

Lange Rede, aber was erhalte ich. Das Ganze bietet eine sehr einfach und schnelle Möglichkeit ein TTN Gateway zu betanken, dessen Daten auch noch ausgewertet werden können. Zusätzlich verwendet ihr damit das neue TTN Protokoll welches MQTT über TCP verwendet und somit eine zusätzliche Sicherung gegen Packetloss einbaut. Anfänglich müsst ihr zwar ein paar Dinge erledigen, aber es ist einfacher als es sich erst anhört. Die Daten werden via collectd in InfluxDB gespeichert und dann mit Grafana visualisiert. Die Installation, auf einem Raspberry Pi 3, habe ich hier beschrieben. Dieses müsst ihr noch separat installieren oder schaut euch dieses Projekt an, ebenfalls ein Fork von Philippe.

Am Ende habt ihr ein sehr gut funktionierendes Setup, welches sich leicht updaten lässt und euch bis zu 10 Systeme kostenfrei verwalten lässt. Die hauptsächliche Arbeit muss nur einmalig erledigt werden, danach müsst ihr nur noch pro Gateway eine SD-Karte brennen und ein paar Variablen auf Resin.io setzen.

Das Ganze funktioniert mit einem Raspberry Pi und einem iC880a oder RAK831.

 

Allgemeine Vorbereitungen

Ihr benötigt vorher noch ein paar Tolls um starten zu können

  • GIT Client für Windows oder OSX. Unter Linux verwendet ihr den Client eurer Distribution.
  • Etcher zum Beschreiben der SD-Karte für Windows oder OSX
  • Einen SSH Key Pärchen, folgt einfach dieser Anleitung

 

Anmelden bei Resin.io und 

Damit ihr starten könnt, solltet ihr euch erst mal bei Resin.io anmelden und euren Public SSH Key bei Resin.io hinterlegen. Danach erzeugt ihr eure App mit der Entsprechenden Hardware und Brennt das Image auf eure SD Karte.

Prinzipiell folgt ihr der Anleitung auf GitHub oder der Anleitung von Jac Kersing. Es gibt jedoch ein paar Feinheiten, die ihr beachten müsst, dazu komme ich im folgenden Abschnitt.

 

Wechsel von altem Packet Forwarder mit UDP zu neuem MP Forwarder mit MQTT

Solltet ihr den „alten“ Packet Forwarder nutzen, und nun umsteigen, müsst ihr nichts machen. TTN schreibt es selbst und ich habe es erfolgreich getestet.

 

Vorbereitung des Repositorys

Der erste Unterschied liegt im Clonen des Git Repos. Anstelle wie in den Anleitungen nehmt ihr das Folgende, damit ihr Caspers Repo klont:


git clone https://github.com/Freie-Netzwerker/ttn-resin-gateway-rpi.git

Solltet ihr keinen Raspberry Pi 3 nutzen, müsst ihr noch eure Hardware in den Dockerfiles anpassen. Dazu ersetzt ihr das raspberrypi3 in folgenden zwei Files durch die Werte in der Tabelle (Achtung im Gateway Dockerfile zwei mal):


ttn-resin-gateway-rpi/collectd/Dockerfile
ttn-resin-gateway-rpi/gateway/Dockerfile

 

Raspberry Pi (v1 and Zero)raspberry-pi
Raspberry Pi 2raspberry-pi2
Raspberry Pi 3raspberrypi3

Anschließend konfigurieren wir noch die verschlüsselte Datenübertragung von CollectD. Dazu passt ihr folgende Datei an und legt dort einen Usernamen und ein Passwort fest.

ttn-resin-gateway-rpi/collectd/collectd.conf.d/network.conf

[code]
# Network upload
LoadPlugin network

<Plugin network>
<Server "***.***.***.***">
SecurityLevel "Encrypt"
Username "user"
Password "password"
</Server>
</Plugin>
[/code]

Danach könnt ihr eure fertige Software, wie in den zwei Anleitungen beschrieben, mit git push -f resin master, zu Resin.io hochladen.

 

Konfiguration der Environment Variablen in Resin.io

Eure Software ist nun auf Resin.io hochgeladen worden und euer Gateway sollte sich diese Software herunterladen. Damit es aber funktionieren kann, müsst ihr noch ein paar Environment Variables setzen. Die folgenden sind mindestens anzugeben:

Ohne GPS

NameValue
GW_IDDie Gateway ID aus der TTN Konsole
GW_KEYDer Gateway Key aus der TTN Konsole
GW_RESET_PINDer Reset Pin nach folgender Tabelle
GW_COLLECTD_SERVERDie IP eures InfluxDB Servers

 

Mit GPS

NameValue
GW_IDDie Gateway ID aus der TTN Konsole
GW_KEYDer Gateway Key aus der TTN Konsole
GW_RESET_PINDer Reset Pin nach folgender Tabelle
GW_GPStrue
GW_GPS_PORTz.B /dev/ttyUSB0
GW_COLLECTD_SERVERDie IP eures InfluxDB Servers

 

 

Reset Pin Werte

BackplaneReset pin
Gonzalo Casas backplane
https://github.com/gonzalocasas/ic880a-backplane
https://www.tindie.com/stores/gnz/
22
ch2i
https://github.com/ch2i/iC880A-Raspberry-PI
11
Linklabs Rasberry Pi Hat
https://www.amazon.co.uk/868-MHz-LoRaWAN-RPi-Shield/dp/B01G7G54O2
29 (untested)
Rising HF Board
http://www.risinghf.com/product/risinghf-iot-dicovery/?lang=en
26
IMST backplane or Lite gateway
https://wireless-solutions.de/products/long-range-radio/lora_lite_gateway.html
29
Coredump backplane
https://github.com/dbrgn/ic880a-backplane/
https://shop.coredump.ch/product/ic880a-lorawan-gateway-backplane/
22
RAK backplane11

 

Konfiguration von InfluxDB

Damit InfluxDB auch auf CollectD hört, muss dieses konfiguriert werden. Dazu passt ihr die InfluxDB Konfiguration an. Passt auch den Namen der Datenbank euren  Bedürfnissen an und erzeugt diese auch in InfluxDB. Das File types.db aus folgendem Archiv, legt ihr nach /usr/share/collectd/      types.zip


vi /etc/influxdb/influxdb.conf

[code]
[…]
[[collectd]]
enabled = true
bind-address = ":25826"
database = "collectd"
retention-policy = ""
batch-size = 1000
batch-pending = 5
batch-timeout = "10s"
typesdb = "/usr/share/collectd/types.db"
security-level = "encrypt"
auth-file = "/etc/influxdb/collectd.auth"
[..]
[/code]

Zusätzlich müsst ihr noch ein File für die Authentifikation erzeugen. Hier tragt ihr den gleichen Benutzer ein, wie für den CollectD Container.


vi /etc/influxdb/collectd.auth

[code]
user: password
[/code]

Anschließend müsst ihr noch InfluxDB neu starten.

 

 

Konfiguration von Grafana

In Grafana müsst ihr natürlich eure Datenbank als Datenquelle hinzufügen und könnt danach euer Dashboard erstellen. Im Beispiel seht ihr ein Dashboard, welches über den Traffic von zwei Gateways informiert.

grafana dashboard

 

Nachfolgend findet ihr beispielhaft die Abfragen in Grafana für die Summer der Pakete und den Verlaufs-Graph.

grafana querry

 

Ich hoffe ich konnte euch etwas helfen und ihr habt euer Monitoring schnell parat.

Mein Dank für die Arbeit geht an Jac Kersing für die Anleitung und den MP-Forwarder, Philippe Vanhaesendonck für sein Git Repo, JP Meijers für sein Git Repo und die Anleitung und Caspar Armster für seinen Fork.

2 Gedanken zu „TTN Gateway + Monitoring mit Resin.io“

  1. Na, das sieht ja ganz nett aus! Sowohl Resio.io wie auch den neuen TTN gateway packet forwarder und datensammlung über collectd interessieren mich sehr! Und siehe: alles zusammen in einer Beitrag! Vielen dank dafür.
    Mit meinem Pi0/RAK831 (coredump backplane) Gateway auf’s Dach und nur über WiFi erreichbar macht es schon ein spannender Herausfordering, aber es is alles ganz genau beschrieben.

    Antworten

Schreibe einen Kommentar