Nachdem ich Anfang Dezember einen Raspberry Pi zur Anzeige eines MoSo Dashboards verwendet habe, habe ich mich in diesem Projekt der Aufgabe gewidmet, mithilfe eines Raspberry Pi’s eine Co2 Messstation einzurichten. Diese „Messstation“ soll Co2 Messdaten an einen Elasticsearch Server schicken und auf einem Dashboard in Kibana visualisieren.

Hierzu benötigte ich folgende Dinge:

  • Einen Raspberry Pi 4B und einen mh_z19 Co2 Messsensor.
  • Für den Prototypen habe ich einen extra hierfür eingerichteten Elasticsearch-Server verwendet.

Einrichtung und Installation des Raspberry Pi und Co2 Sensors

Zu Beginn habe ich den Raspberry Pi zusammengebaut, die Kühlkörper auf der Platine angebracht und anschließend die Platine in das Gehäuse gesteckt.

Abbildung 1: Raspberry Pi 4B

Den mh_z19 werde ich erst später verlöten, aktuell ist dieser „lose“ mit Kabeln an den notwendigen GPIO Pins auf den Raspberry Pi angebracht.

Abbildung 2: Sensor MH-Z19

Anschließend braucht der Raspberry Pi noch ein Betriebssystem, dafür benutze ich Ubuntu. Das notwendige Image habe ich von der Homepage Raspberrypi.org heruntergeladen und anschließend auf einer SD-Karte entpackt. Die SD-Karte ist damit einsatzbereit und kann in den SD-Kartenslot des Raspberry Pi’s gesteckt werden, um anschließend das System zu starten.

Ist der Raspberry Pi erstmal startbereit geht es auch gleich ans Eingemachte. Um die Messdaten aus dem mh_z19 auswerten zu können, nutze ich ein Python Script. Hier konnte ich auf ein bestehendes Script aufsetzen. Mittels kleinerer Anpassungen werden mir die Messdaten separat in eine Logdatei geschrieben. Die Daten aus der Logdatei werden im späteren Verlauf dann noch an den Elasticsearch Server gesendet und dort ausgewertet.

Datentransfer zum Elasticsearch Server

Um den Datentransfer zu dem Elasticsearch Server ermöglichen zu können, brauche ich einen Filebeat. Mit Filebeat lassen sich Daten aus Logdateien einfach und unkompliziert an die Elasticsearch schicken.

Bei der Installation eines Beats auf dem Raspberry Pi ist zu beachten, dass es zur Zeit von elastic selber noch keinen Beat gibt, welcher mit der Rechenarchitektur (arm64) des Raspberry Pi’s kompatibel ist. Mögliche Umwege wären es über eine Paketverwaltung wie apt oder yim zu installieren und mit Hilfe eines Scriptes zu kompilieren, wie in diesem Anwendungsfall. Alternativ hätte ich eine Installation über Docker vornehmen können.

Damit der Datentransfer nun auch gelingt, musste ich noch kleinere Anpassungen in der filebeat.yml Datei vornehmen. Nach Abschluss der Anpassungen, stand der Filebeat bereit und über das Python Skript wird nun alle 30 Sekunden ein Befehl in der Konsole ausgeführt. Damit war auch schon der Grundaufbau für den Raspberry Pi abgeschlossen und die serverseitig Umsetzungen konnten beginnen.

Raspberry Pi
Abbildung 3: Prototypen Aufbau

Serveraufbau für den Raspberry Pi

Als Betriebssystem für den Server verwende ich einen Windows Server, obgleich Linux performanter ist, bietet Windows den Vorteil, dass hierüber der ELK Stack mithilfe einer exe Datei einfach zu installieren und zu verwalten ist.

Um die Co2 Messdaten auswerten zu können, muss auf dem Server neben der Elasticsearch und Kibana noch Logstash installiert werden.

Logstash wird hierbei benötigt, um die Daten, welche ich vom Filebeat geschickt bekomme, konvertieren zu können. Dazu habe ich Anpassungen in der Logstash Konfigurationsdatei vorgenommen um anzugeben, welches das gewünschte Format meiner Daten sein soll. Hierzu formatiere ich meine Co2 Messdaten in einen Integer Wert und übergebe den Zeitstempel meiner Logdatei an das @timestamp field.

Jetzt musste nur noch Kibana konfiguriert werden. Hierzu erstellte ich mir zunächst einen neuen Index aus meinen Logstash Dateien. Danach fertigte ich Visualisierungen an, welche ich später auf meinem Dashboard verwenden werde. Hierbei entschied ich mich für einen Graphen, welcher an der Y-Achse den Co2 Messwert und an der X-Achse den Zeitverlauf anzeigen soll. Dazu erstellte ich noch eine weitere Visualisierung, welche mir den letzten Co2 Messwert numerisch ausgeben soll.

Raspberry Pi Kibana
Abbildung 4: Auswertung in Kibana

Kibana bietet zudem die Möglichkeit Schwellwerte zu definieren. Beim Überschreiten eines Schwellwertes kann dann bspw. eine Benachrichtigung an einen Mitarbeiter verschickt werden.

Hierzu kann man bei der Amazon Open Distro unter dem Reiter “Alerting” in Kibana, einen Monitor anlegen und darauf einen Graphen abbilden. Für den Graphen kann man dann die “Trigger” definieren, also Schwellwerte, bei denen ein Ereignis erfolgen soll, wenn diese überschritten werden.

Abbildung 5: Alerting in Kibana
Abbildung 6: Mail auf Basis eines Kibana Alerts

Schwierigkeiten in dem Projekt

Die Schwierigkeiten in dem Projekt traten anfangs bei der Installation des Filebeats auf dem Raspberry Pi auf. Wie oben beschrieben war es nicht möglich direkt eine kompatible Version von elastic für den Raspberry Pi zu finden.

Weitere Schwierigkeiten traten bei den Konfigurationen der Elasticsearch, durch Verwendung unterschiedlicher Protokolltypen zur Kommunikation auf. Dies konnte ich aber ebenfalls lösen.

Ein Problem mit welchem ich hierbei noch lange zu kämpfen hatte, war die Formatierung der Daten. Anfangs habe ich versucht die Daten direkt an die Elasticsearch zu schicken, wobei alle Felder als string im Index für den Filebeat hinterlegt wurden. Dieses Problem ließ sich durch den Einsatz von Logstash beheben.

Im weiteren Verlauf des Projektes verweigerte mir der Server das Verschicken der E-Mails. Dieses Problem konnte ich nach intensiver Recherche und Support der Kollegen ebenfalls beheben.

Fazit

Seit Anfang meiner Ausbildung befasse ich mich nun mit Elasticsearch, dies ist bereits 6 Monate her.

Dieses Projekt diente für mich als Sprung von der Theorie in die Praxis, wobei sich mir hier viel Neues erschließen ließ. Ich konnte neue Erfahrungen über die Konfigurationsmöglichkeiten des ELK-Stacks gewinnen und durch den Einsatz von Logstash mich mehr mit GROK Patterns auseinandersetzen. Auch wenn es an mancher Stelle recht mühselig war und nur schleppend voran ging hat mich dennoch der Reiz der Herausforderung gepackt. Das letztliche Resultat war mit Sicherheit die viele Mühe und Arbeit in diesem Projekt wert.

SUPPORT
X
X