Ich 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 2 | raspberry-pi2 |
Raspberry Pi 3 | raspberrypi3 |
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
Name | Value |
---|---|
GW_ID | Die Gateway ID aus der TTN Konsole |
GW_KEY | Der Gateway Key aus der TTN Konsole |
GW_RESET_PIN | Der Reset Pin nach folgender Tabelle |
GW_COLLECTD_SERVER | Die IP eures InfluxDB Servers |
Mit GPS
Name | Value |
---|---|
GW_ID | Die Gateway ID aus der TTN Konsole |
GW_KEY | Der Gateway Key aus der TTN Konsole |
GW_RESET_PIN | Der Reset Pin nach folgender Tabelle |
GW_GPS | true |
GW_GPS_PORT | z.B /dev/ttyUSB0 |
GW_COLLECTD_SERVER | Die IP eures InfluxDB Servers |
Reset Pin Werte
Backplane | Reset 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 backplane | 11 |
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.
Nachfolgend findet ihr beispielhaft die Abfragen in Grafana für die Summer der Pakete und den Verlaufs-Graph.
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.
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.
Moin Moin BjörAls Ergänzung zu deiner Liste mit Resetpin und GPS:
Das LoRaGo PORT GW von Sandbox Electronics (https://sandboxelectronics.com/?product=lorago-port-multi-channel-lorawan-gateway) funzt mit GW_RESET_PIN = 22 und GW_GPS = true, ohne weitere Angabe (Standart ist ja /dev/ttyAMA0)
Schöne, informative Schreibe
Gruß