LoRaWAN und OpenData für den Hochwasserschutz im Landkreis Günzburg

LoRaWAN [1] ist eine besonders energiesparende Funktechnologie, mit der sich Sensordaten für das Internet der Dinge (IoT) kostengünstig über große Entfernungen übertragen lassen. Daher eignet sich LoRaWAN perfekt für Sensoren zum Messen von Flusspegeln. In Ulm/Neu-Ulm [2][3], an der Kyll in Rheinland-Pfalz [4][5] und an der Schlei in Schleswig-Holstein [6] sind entsprechende Projekte bereits erfolgreich in Betrieb.

Eine derartige Initiative wäre ausdrücklich keine Konkurrenz zu bestehenden Meldesystemen wie dem Hochwassernachrichtendienst Bayern oder dem Deutschen Wetterdienst. Im Gegenteil, durch die Kombination beider Systeme und Daten [7] ergibt sich für alle Bürger im Landkreis Günzburg der größte Nutzen.

Die Messung von Flusspegeln oder Regenmengen wäre der erste Schritt in eine landkreisweite offene Dateninfrastruktur. Die gleiche Infrastruktur könnte genauso für die Erkennung von Waldbränden, in der Landwirtschaft oder kommunalen Betrieben genutzt werden. [8][9][10][11][12]

Durch die Nutzung von The Things Network [13] und OpenData-Prinzipien [14] entsteht so die Möglichkeit zum Know-How-Transfer zwischen Unternehmen, einzelnen Bürgern und Behörden.

In Burtenbach betreiben wir bereits seit 2021 ein LoRaWAN Gateway, das an das The Things Network angeschlossen ist, und damit allen Bürgern, Unternehmen und Behörden frei zur Verfügung steht. Um der Initiative Schwung zu geben, werden wir in den nächsten Wochen – als Spende – ein weiteres Gateway im Raum Burgau installieren. Zusätzlich planen wir Infoveranstaltungen und Workshops, um das Know-How für LoRaWAN möglichst breit im Landkreis Günzburg zu streuen. So könnte schon in kurzer Zeit ein flächendeckendes LoRaWAN Netz im gesamten Landkreis entstehen und wäre von allen nutzbar.

Projekt - Zukunft der Arbeit

Im Landkreis Günzburg startet gerade ein spannendes Projekt zum Thema "Zukunft der Arbeit". Im Rahmen des Projekts wird es unter anderem um die Bereiche Digitalisierung und New-Work gehen. Als IT-Dienstleister freue ich mich natürlich besonders, wenn die Teilnehmer einer Unternehmensbefragung mehr Aktivitäten zu IT-Kompetenz, Datenschutz und IT-Sicherheit wünschen / planen. Details und Hintergründe gibt es auf der Projektseite der Regionalmarketing Günzburg: https://www.guenzburg-meinlandkreis.de/projekte/zukunft-der-arbeit/.

Im Vorfeld der Kickoff-Veranstaltung hatte in einigen Input in Form eines Miro-Boards geben. Das entsprechende Board kann über folgende URL weiterhin aufgerufen werden:
https://miro.com/app/board/uXjVO3vNwQ8=/.

Von meiner Seite besteht insbesondere Interesse an folgenden Dingen:

  • Austausch zum "Remote-First"-Prinzip und asynchroner Remote-Arbeit
  • Organisation eines Working Out Loud Circle
  • Aufbau einer "Projektwerkstatt" um diese Prinzipien und Arbeitsmethoden praktisch auszutesten

Für die Projektwerkstatt hatte ich die beiden Themen LoRaWAN und Predictive Maintenance mit dem Arduino Nicla Sense ME und der Plattform Edge Impulse vorgeschlagen.

Als Vorbereitung zu weiteren Workshops möchte ich noch eine Linksammlung zu den angesprochenen Themen weitergeben.

Remote-First

Working Out Loud

LoRaWAN

IT-Sicherheit

K3s unter Rocky Linux 8 mit k3sup

Letztes Jahr hatte ich im Blog-Eintrag CodeReady Containers for OKD unter Windows 10 ein kleines lokales Setup vorgestellt. Für Entwicklung und Test von Kubernetes Operatoren benötigt man aber auch schnell eine Umgebung aus mehreren Nodes. Mit dem Tool k3sup und der Kubernetes Distribution K3s lässt sich eine derartige Umgebung unter Rocky Linux 8 mit wenigen Befehlen aufsetzen.

Der Kubernetes Cluster besteht hierbei aus drei Rocky Linux 8 VMs (je 2 CPUs / 4 GB RAM / 20 GB Disk). Kubectl und k3sup nutze ich direkt auf meiner Entwickler-Workstation unter WSL2.

Im ersten Schritt wird k3sup lokal installiert:

curl -sLSo get_k3sup.sh https://get.k3sup.dev
bash get_k3sup.sh
sudo install k3sup /usr/local/bin/
which k3sup

Entgegen der k3s-Installationsanleitung habe ich auf den VMs die Firewall nicht deaktiviert. Stattdessen habe ich folgende Firewall-Rules eingerichtet.

Auf dem Server-Node (rock8-t05):

sudo firewall-cmd --permanent --add-port=6443/tcp
sudo firewall-cmd --permanent --add-port=10250/tcp
sudo firewall-cmd --permanent --add-port=8472/udp
sudo firewall-cmd --permanent --zone=trusted --add-source=10.42.0.0/16 # pods
sudo firewall-cmd --permanent --zone=trusted --add-source=10.43.0.0/16 # services
sudo firewall-cmd --reload

Auf den Agent-Nodes (rock8-t06 und rock8-t07):

sudo firewall-cmd --permanent --add-port=10250/tcp
sudo firewall-cmd --permanent --add-port=8472/udp
sudo firewall-cmd --permanent --zone=trusted --add-source=10.42.0.0/16 # pods
sudo firewall-cmd --permanent --zone=trusted --add-source=10.43.0.0/16 # services
sudo firewall-cmd --reload

Nachdem die Firewalls auf den einzelnen Nodes nun vorbereitet sind, können wir via k3sup den Server-Node (rock8-t05) aufbauen:

k3sup install --user ansible --host rock8-t05

Sobald der Server-Node steht, können die beiden Agent-Nodes eingerichtet werden:

k3sup join --user ansible --server-host rock8-t05 --host rock8-t06
k3sup join --user ansible --server-host rock8-t05 --host rock8-t07

Damit sollte der Kubernetes Cluster schon einsatzbereit sein. Dies lässt sich z.B. mit folgenden Befehlen prüfen:

$ export KUBECONFIG=~/kubeconfig
$ kubectl config set-context default
Context "default" modified.
$ kubectl cluster-info
Kubernetes control plane is running at https://rock8-t05:6443
CoreDNS is running at https://rock8-t05:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
Metrics-server is running at https://rock8-t05:6443/api/v1/namespaces/kube-system/services/https:metrics-server:https/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
$ kubectl get node
NAME        STATUS   ROLES                  AGE     VERSION
rock8-t06   Ready    <none>                 4m22s   v1.23.6+k3s1
rock8-t07   Ready    <none>                 106s    v1.23.6+k3s1
rock8-t05   Ready    control-plane,master   8m39s   v1.23.6+k3s1

LoRaWAN als Brücke für das Internet der Dinge

LoRaWAN bietet für IoT Anwendungen eine kostengünstige und einfache Anbindung an bestehende IT-Systeme. Das The Things Network formt hierzu ein offenes und globales Ökosystem zum Betrieb von LoRaWAN Netzwerken. In den letzten Monaten haben wir einige Erfahrung mit LoRaWAN gesammelt, Highlight war die Teilnahme an der The Things Summer Academy.

RasPi 4 mit RAK2287 Concentrator
RasPi 4 mit RAK2287 Concentrator

Besonders spannend, durch IoT verschmelzen bisher getrennte Fachgebiete miteinander. Gleichzeitig werden Themen wie IT-Sicherheit und moderne Prozesse für die Software-Entwicklung für neue Kundengruppen relevant. D.h. immer mehr Unternehmen finden sich in der Rolle als Softwarehersteller oder IT-Unternehmen wieder.

Arduino MKR WAN 1300 + MKR ENV Shield
Arduino MKR WAN 1300 + MKR ENV Shield

In diesem Bereich ergeben sich für uns einige Aufgabenfelder, zum einen die Anbindung von IoT-Umgebungen an Data-Streaming-Plattformen wie Apache Kafka und die passende Wahl von Datenformat (Payload Encoding/Decoding) zum mit Apache Avro. Für den Einsatz von klassischen Datenbanken wie PostgreSQL und die Datenvisualisierung mit Grafana haben wir ebenfalls Anwendungsfälle untersucht.

CodeReady Containers for OKD unter Windows 10

Die Firma RedHat bietet mit Openshift eine sehr umfassende Kubernetes Distribution. Bei OKD handelt es sich um das entsprechende Open Source Upstream-Projekt. Für Entwickler-Teams oder den Einsatz in der Produktion wird Openshift normalerweise in einem Cluster aus mehreren Server-Knoten oder VMs installiert. Für die Entwicklung von Images, Templates, Kubernetes-Operatoren oder um sich mit Openshift vertraut zu machen, ist eine kleine lokale Mini-Installation von Vorteil. Früher gab es hierfür z.B. minishift oder minikube. Für Openshift 4 wurde diese Form von Umgebung in "CodeReady Containers" (CRC) umbenannt.

Die Installationsanleitung für Linux, Mac OS und Windows befindet sich hier: Getting Started Guide und der OKD-Download der CRC-Umgebung hier: Download CodeReady Containers for OKD.

Zusätzlich zur Installationsanleitung sollten unter Windows 10 folgende Punkte beachtet werden:

  • Das Windows 10 System sollte mindestens 16 GB RAM haben, besser 32 GB. Bei 16 GB RAM müssen evtl. Anwendungen und Dienste vor dem Start der CRC-Umgebung gestoppt werden.
  • Der Installationsbenutzer muss zu einem lokalen Administrator werden können und zusätzlich Mitglied der Gruppe "Hyper-V-Administratoren" sein.

Installation und Start sind nach dem Download, in einer klassichen Windows Eingabeaufforderung, wie folgt möglich:

crc setup
crc start -n 8.8.8.8

Bei Fehlern kann der Debug-Output über die Zusatzoption "--log-level debug" aktiviert werden.

Für erste Tests der Umgebung kann z.B. mein Demojee auf Github genutzt werden:
https://github.com/FrankBergerITServices/openshift-jee-sample