Wie geht es der Luft in meiner Gegend.
Regelmäßig unregelmäßig grabe ich immer mal wieder das ein oder andere beiseite Gelegte wieder aus. So bin ich durch lesen eines interessanten Artikels im Netz zum Thema Luftverschmutzung auf eine Seite gestoßen, auf der ein interessantes Projekt zum Thema Luftqualität beschrieben ist. Viele Gleichgesinnte haben ein privates Messnetz aufgebaut, welches sich sehen lassen kann. Und, das Projekt hat den Sprung über den Tellerrand geschafft und die Community, welche die Messdaten sammelt, findet sich nicht nur in Deutschland und im europäischen Ausland, sondern u.a. auch auf der anderen Seite des Atlantiks oder in Asien.
Ist das was für mich?
Kurzum, das Projekt klingt so interessant, dass ich es nachbauen werde. Zumal es interessant sein dürfte, wie die Luftqualität bei mir vor Ort wirklich ist. Eingequetscht zwischen Flughafen, Industriepark und Autobahn liegt mein Stadtteil direkt zwischen Main und Stadtwald und diversen permanenten Luftverschmutztern.
Zur Umsetzung benötige ich wirklich nicht viel im ersten Schritt, um einen Testaufbau zu realisieren, da ich aus zurückliegenden Projekten das ein oder andere Bauteil noch rumliegen habe.
Was wird benötigt?
Ein Luftqualitätsmesssensor: Hier habe ich mich an das Projekt gehalten und mir den SDS011 besorgt. Zusätzlich sollte auch ein rund 20 bis 30 cm langes Stück Schlauch mit einem Innendurchmesser von 6mm vorliegen.
Einen Sensor, welcher Temperatur, Luftfeuchte und Luftdruck misst. Dort konnte ich auf meinem Fundus zugreifen und habe mich für den Sensor BME280 entschieden, welchen ich bereits für einen anderen Testaufbau mir vor zwei Jahren besorgt hatte.
Sowie einen Mini-Computer / -Controller, welcher für die Datenabfrage des Sensors benötigt wird. Ich werde hierzu meinen Raspberry Pi 3 nutzen, welcher aktuell nicht in Verwendung ist.
Diverse Kabel, um die drei Komponenten zu verbinden.
Somit ist für einen Testaufbau alles vorhanden. Der Bau eines passenden Gehäuses folgt zu einem späteren Zeitpunkt.
Da ich erst einmal selbst testen möchte, werde ich meinen Raspberry Pi 3 dafür und nicht das im Projekt vorgestellt Modul ESP8266, welches die Übermittlung der Messdaten in die Community übernimmt, nutzen. Den Programmcode schreibe ich dann auch selbst, damit ich die Daten in meine Hausautomation integrieren kann. Eine Schnittstelle ins Community-Messnetz wird es dann sicherlich auch geben; aber zu einem späteren Zeitpunkt. Und vielleicht baue ich mir dann ja doch eine komplette autarke Wetterstation im Laufe des Frühjahrs.
Zeit haben wir ja alle aufgrund der aktuellen Lage zu Covid-19.
Das Ziel
Das Ziel sollte sein, die Messwerte der beiden Sensoren so zu erhalten, dass man auf einen Blick alles wichtige erkennt. Einfaches auslesen und darstellen der Messwerte genügt nicht. Die Messwerte sollten gesammelt werden, sodass man Tage, Monate oder jeden anderen beliebigen Zeitraum vergleichen kann. Zahlenkolonnen sind da nicht zielführend, denn wer möchte schon eine Datei mit n Zeilen durchstöbern, um daraus Informationen zu erhalten.
Ich habe mich entschieden die Werte in eine bereits existierende Datenbank zu schreiben und über ein Visualisierungstool darzustellen. Im Einsatz ist bei mir bereits das Tool Grafana im Bereich der Heimautomatisierung, welches mir die Werte der Heizung, des Energieverbrauchs, geöffnete oder geschlossene Fenster, etc. darstellt. D.h. ich muss nur den Raspberry Pi 3 mit seinen Sensoren mit der Datenbank koppeln, um dann die beiden Sensoren einbinden und graphisch darzustellen.
Kleiner Exkurs: Grafana ist ein Visualisierungstool, welches Daten mit Zeitstempel sehr einfach darstellen kann. Sei es einfach Messwerte über eine Punkte- oder Liniendarstellung, Balkendiagramme oder aber auch Tachometer- / Gauge-Elemente. Werte aus zwei verschiedenen Quellen lassen sich auch ganz einfach überlagern, sodass sie in einem Graphen verglichen werden können.
Ferner können zusätzlich Regeln definiert werden, welche bei über- oder unterschreiten eines Schwellwertes oder einem zeitlichen Verlauf aktiv etwas ausführen. Beispielsweise eine Benachrichtigung schicken oder ein Skript starten, welches beispielsweise die Heizung deaktiviert.
Womit starte ich?
Die zentrale Komponente für den Testaufbau wird bei mir der Raspberry Pi 3 sein. Es kann aber auch jeder andere Controller / Miniatur-Computer mit GPIO Schnittstelle genutzt werden. Auf dem Markt tummeln sich viele Hersteller und Anbieter. Eine weitere sehr bekannte Controller-Reihe stellen die diversen Arduino-Boards dar, auf welche ich hier nicht weiter eingehe.
Den Raspberry Pi 3 habe ich mit der aktuellen Betriebssystemversion versehen. Da ich bereits eine Datenbank mit Messwerten aus der Hausautomation in Betrieb habe, benötige ich keine weitere und Grafana ist bereits ebenfalls für die Visualisierung und Auswertung vorhanden, sodass der Raspberry nur mit einem Datensammler und Weiterleitungsagenten versehen werden muss.
Bei mir hat sich ein Quasi-Standard mit dem Tool Telegraf etabliert. Es ist für viele Umgebungen vorhanden, ist einfach zu installieren und zu konfigurieren, da bereits viele PlugIns zum Datensammeln vorhanden sind.
Installation Telegraf
Um Telegraf zu installieren sind die folgenden Schritte notwendig.
Betriebssystem aktualisieren
apt-get update & apt-get upgrade -V
Repository von Telegraf hinzufügen
kjkjhkjhkjhkjhkjhkh
Telegraf installieren
apt-get install Telegraf
Die Grundinstallation ist nun abgeschlossen. Die Konfiguration ist auf meiner Seite noch anzupassen, da sich die Datenbank nicht auf dem Raspberry Pi 3 befindet.
Die Grundinstallation des Frameworks mit der Datenbank zur Visualisierung mit Grafana beschreibe ich in einem weiteren Blogpost, welchen ich in den kommenden Wochen veröffentlichen werde.
Die Konfigurationsdatei von Telegraf öffnen
vi /etc/Telegraf/Telegraf.conf
und den Abschnitt xdslfjdlskfjalkdsf suchen
127.0.0.1
hier ändere ich die IP-Adresse - aktuell localhost - auf die IP-Adresse meines Datenbankservers ab.
Ferner trage ich im Abschnitt sdklfjaldkfjldf den Benutzernamen und das Kennwort ein, damit ein Verbindungsaufbau möglich ist und Daten in die Datenbank geschrieben werden können.
Das Ganze sollte nun wie folgt aussehen:
sdlkfjlskdjf
dssdfskldfj
Abschließend sind noch die folgenden Änderungen in der Sektion inputs durchzuführen, damit man die gewünschten Daten neben den Standarddaten wie CPU- und Speicherauslastung ebenfalls erhält.
entfernen der kommentare bei inputs.net und inputs.netstat. Somit erhält man alle relevanten Messwerte des Ethernet- und WLAN-Interfaces.
dsalkjdsfk
asdklfjklj
asdlkjf
Die Auslastung des physikalischen Speichermediums ist ebenfalls wichtig, denn je nachdem, was man alles mit dem Raspberry Pi umsetzt, kann dieser auch zur neige gehen. Daher sind in der Sektion inputs.disks noch die folgenden änderungen vorzunehmen:
sdlkfjalkdsfj
aslkdfjlksdjf
asdklfjlksdf
Fertig mit den Änderungen an der Konfiguration. Der Service Telegraf ist jetzt noch einmal neu zu starten, damit die Änderungen übernommen werden und die Messwerte dann an die Datenbank geliefert werden.
service Telegraf restart
Nun noch einmal prüfen, dass Telegraf auch wieder läuft und Daten sammelt, den Status abfragen:
service Telegraf status
Sollte es wie folgt aussehen ist alles OK. Bei einem Fehler würde Telegraf bei der Statusabfrage meckern.
Stautstext
sdfjdf
Nachdem nun mein Raspberry Pi 3 fleißig Daten sammelt und diese weiterleitet. prüfe ich gleich im Anschluss, ob diese auch ankommen und dargestellt werden können. Bei mir sieht das Raspberry-System graphisch wie folgt aus:
bild
Hochzeit #1 - BME280
Die Sensoren sind nun mit dem Raspberry Pi 3 zu koppeln. In der Industrie nennt man dies Hochzeit. Also verheirate ich meinen 3-fach Sensor BME280, welcher Temperatur, Luftfeuchtigkeit und den barometrischen Druck mißt mit dem Raspberry.
Die Verkabelung einmal schematisch und und einmal real über das Breadboard.
Nun können wir den ersten Teil überprüfen, indem wir die Adresse zum Ansteuern des Sensors auslesen. Hierzu setzen wir den folgenden Befehl ab und erhalten die folgende Antwort:
asdlkfjalkdfj
lskdfjlakdsfj
Über diese Adresse können nun die einzelnen Werte abgefragt werden. Der Befehl hierzu lautet:
dsfjlk dflkdjf
Interpretiert werden die Werte in der folgenden Reihenfolge:
Temperatur in Grad Celsius
relative Luftfeuchte in %
Luftdruck in hPa
Auch wenn wir jetzt die ersten Werte ausgelesen haben, haben wir diese noch nicht gespeichert.
Um den Sensor häufiger ab zu fragen, kann das folgende Testskript verwendet werden. Die Werte werden alle 20 Sekunden abgefragt und in eine Datei geschrieben. Nach 15 durchläufen beendet sich das Skript. Dieses Skript dient nur zum Testen! Die Daten landen noch nicht in der Datenbank, um sie später mit Grafana zu visualisieren.
Offene Punkte:
Sind Anpassungen an den Werten notwendig?
Kann direkt via GPIO und Telegraf alles abgefragt werden oder ist ein Umweg über ein Skript notwendig?
Was ist das passende Abfrageintervall für den Sensor BME280?
Ideen: 60, 90 oder 120 Sekunden; 5 Minuten sind vielleicht zu lang
Hochzeit #2 - SDS011
Jetzt endlich ist der Sensor an der Reihe, weshalb ich das Projekt gestartet habe. Der Luftgütesensor SDS011. Bevor ich diesen verkabeln werde, werde ich zuerst den Schlauch anbringen. Aktuell ist dieser noch rund 40 cm lang. Kürzen werde ich diesen, wenn ich ihn in ein Gehäuse verbauen werde.
Die Verkabelung sieht schematisch und real wie folgt aus:
bild
Nun heißt es wieder feststellen, mit welcher Adresse wir den Sensor abfragen können. Hierzu verwenden wir wie bereits bei ersten Sensor den Befehl:
lkfjslkfj sdlfkj j
Da ja bereits der Sensor BME280 am Raspberry Pi 3 angeschlossen ist, wird dieser ebenfalls angezeigt. Dieser kann für die nächsten Schritte vernachlässigt werden.
Der Sensor liefert zwei Werte zurück, den sogenannten PM2.5 und PM10-Wert. Der PM10-Wert spiegelt den wohl bekanntesten Wert für Feinstaub wieder. 2.5 und 10 stellen die Größe der Partikel dar, wobei der Wert für PM10 durch den Sensor berechnet wird.
Exkurs #2: Der PM10-Wert liefert den Feinstaubgehalt in der Luft in µg/m³. In Deutschland liegt der Grenzwert bei 50 µg/m³. Aktuelle Daten zum Wohnort lassen sich häufig bei der Stadt selbst oder aber beim jeweiligen Landesamt für Umwelt ermitteln.
Es ist aber immer zu beachten, dass beispielsweise bestimmte Wetterlagen Saharastaub nach Mitteleuropa transportieren und somit die Messwerte verfälschen.
Bitte bei Vergleich mit offiziellen Messwerten beachten: Die offiziellen Werte sind i.d.R. Tagesmittelwerte. Der Sensor misst im 2 1/2 Minutentakt, daher schwanken sie viel stärker. Die Werte erheben keinen Anspruch auf exakte Genauigkeit. Der eingesetzte Sensor ist ein PM2,5-Sensor. Der PM10-Wert wird abgeschätzt und kann daher ungenauer sein. Einzelne Stationen können unplausible Werte liefern. Bei hoher Luftfeuchte, insbesondere Nebel, können die Werte deutlich höher sein, da die offiziellen Stationen den getrockneten Feinstaub messen. Durch Feuchte kondensierte Feinstaubpartikel können jedoch vor allem bei Smoglagen die negative Gesundheitswirkung von Feinstaub verstärken. Insofern liefern die Sensor-Werte eine wichtige zusätzliche Information. Die Skala µg/m3 ist bei solchen Lagen jedoch nicht unmittelbar anwendbar, sondern kann nur als Orientierung dienen. Eine Feuchtekorrektur ist in Vorbereitung. Ziel ist es, einen zusätzlichen Wert bereitzustellen, der mit den offiziellen Werten besser vergleichbar ist.
Staubfraktion
Partikelgröße
Grobstaub
> 10 µm
Feinstaub
Partikel PM10
inhalierbar
< 10 µm
Partikel PM2,5
lungengängig
< 2,5 µm
Partikel PM0,1
blutgängig
< 0,1 µm
Zum Testen nutze ich nlog ein Skript, welches ich angepasst habe auf die Adresse des Sensors. Dies Skript durchläuft ebenfalls 15 Iterationen und schreibt zum Test seine Werte ebenfalls in eine Datei. Nur dauern hier die Iterationen nicht 90 Sekunden, sondern 150 Sekunden.
Daten sammeln und speichern
Jetzt ist es soweit, die Daten der Sensoren in definierten Intervallen ab zu fragen und an die Datenbank zu senden. Hierbei werden die von Telegraf bereitgestellten PlugIns verwendet.
Hierzu wird nun im Editor die Konfigurationsdatei von Telegraf geöffnet
vi /etc/telegraf/telegraf.conf
Am Ende der Input-PlugIn Sektion werden die folgenden Zeilen hinzugefügt:
[[inputs.gpio]]
# Sensor BME280 zur Messung von Temperatur, relativer Luftfeuchtigkeit und des barometrischen Drucks
name_override = “BME280”
intervall = 150 seconds
gpio_address = 0x039
# Sensor SDS011 zur Messung der in der Luft enthaltenen Partikel
name_override = “SDS011”
intervall = 150 seconds
gpio_address = 0x051
Nach den vorgenommenen Änderungen die Datei speichern und Telegraf neu starten und den Status abfragen, ob die neue Konfiguration eingelesen wurde:
service telegraf restart
service telegraf status
Sieht das Ganze wie folgt aus, sammelt nun der Raspberry Pi 3 nun die Daten der Sensoren ein und leitet diese an die Datenbank weiter.
sfdg
sdfg
sdfg
Daten auswerten und anzeigen
Auf Seiten des Raspberry Pi 3 mit seinen angeschlossenen Sensoren ist nun alles erledigt. Zeit sich der Visualisierung zu widmen.
Jeder sollte sich die Frage stellen, wie möchte ich meine Messergebnisse darstellen. Wenn ich ein Dashboard in Grafana erstelle, fange ich erst einmal mit dem einfachsten an und das sind Liniendiagramme.
Temperatur
Luftfeuchte
Luftdruck
Die nächste Sektion wir die Daten des Luftmesssensors enthalten. Die linke Hälfte enthält die Werte PM2.5 und die rechte Hälfte die Werte zu PM10.
PM2.5
PM10
Der Luftqualitätsindex kann noch nicht bestimmt werden, da dieser weitere Sensoren benötigt. U.a. Ozon, Stickoxide, etc.
Die wird aber sicherlich durch die Erweiterung in einer der kommenden Bauphasen zu einer autarken Wetterstation möglich sein.
Zusätzlich habe ich die Graphen gedoppelt. In den Dopplungen stelle ich die 24 Stundenmittel der einzelnen Messwerte dar.
Ferner habe ich die aktuellen Messwerte im oberen Bereich angesiedelt und stelle die Tendenzen gegenüber der letzten 3 Stunden dar.
Temperatur
Luftfeuchte
Luftdruck
UV-Index
Lichtstärke
Helligkeit
PM2.5
PM10
Nun heißt es ein paar Tage abwarten und die Messwerte versuchen dann einzuordnen.
Links und Quellen
sadfkl
sdfj
sadfj
sadf