Feinstaubwerte selbst messen für Luftdaten.info
Ihr habt vielleicht schon vom "Citizen Science"-Projekt Luftdaten.info gehört, das vom OK Lab Stuttgart initiiert worden ist. Dessen Ziel ist es, die Feinstaubbelastung in Stuttgart unabhängig durch Freiwillige zu messen, zu visualisieren, und so Maßnahmen für eine bessere Luftqualität mit Offenen Daten zu unterfüttern. Mehr dazu auch in diesem Beitrag in DRadio Wissen (das nebenbei bald Deutschlandfunk Nova heißen wird).
Ursprünglich sollte nur die Feinstaubbelastung der schwäbischen Metropole gemessen werden, aber mittlerweile sind Sensoren in ganz Deutschland und sogar in anderen Ländern auf der Luftdaten-Karte verzeichnet. Auch mein Sensor (ID 1777) misst seit ein paar Tagen die Feinstaubbelastung und ist damit einer von momentan vier Sensoren in Wiesbaden.
Als ich das erste Mal von Luftdaten.info gehört hatte, war ich gleich begeistert und ein eigener Sensor stand sofort auf meiner Todo-Liste. Diese Woche war es endlich so weit: Alle benötigten Bauteile waren (z.T. nach wochenlanger Reise aus China, der Feinstaubsensor ist hierzulande kaum erhältlich) eingetroffen, und ich hatte etwas Zeit zum Basteln.
Sensor zusammenbauen
Die ausführliche Bauanleitung für den Feinstaubsensor erläutert die einzelnen Schritte vom Einkauf der Hardware, über das Einspielen der Firmware, den Zusammenbau der Elektronik und der restlichen Hardware bis hin zur Konfiguration der Messstation. Ich spare mir daher eine Beschreibung der einzelnen Schritte, die ziemlich problemlos klappten.
Beim Konfigurieren habe ich zu spät daran gedacht, dass sich die Messstation nach dem Speichern der WLAN-Verbindung direkt mit dieser verbindet und der Kontakt zunächst einmal abrupt abreißt. Ich hätte gern noch weitere Optionen gesetzt, z.B. den Passwortschutz. Zum Glück kann man sich wieder mit dem Sensor im eigenen Netzwerk verbinden, sobald man seine neue IP-Adresse herausgefunden hat.
Zu guter Letzt kann es eine Weile dauern, bis der eigene Sensor im Netzwerk von luftdaten.info registriert wird, da dies manuell geschieht (Danke für den Hinweis, Sebastian). Erhält man schließlich die Antwort-Mail, stehen darin auch die Sensor-IDs, die für das REST-API (siehe unten) benötigt werden. Ich hatte zunächst versucht, das API mit der ID meines ESP8266-Chips abzufragen, was natürlich scheiterte.
An die Messwerte rankommen
Je nachdem, welche Häkchen man in der Konfiguration gesetzt hat, sendet die Messstation ihre Daten an zwei API-Endpunkte:
- api.luftdaten.info ist ein REST-API, über das Daten auch wieder abgerufen werden können (mehr dazu gleich);
- madavi.de sammelt die Daten ebenfalls und bereitet sie als CSV-Dateien und als Graphen über verschiedene Intervalle auf. Hier sind die Diagramme meines Feinstaubsensors.
Zusätzlich kann man sich die API auch auf dem eigenen Server installieren (Quellcode) und seine Daten dorthin schicken. Das aber nur am Rande, weil ich das selbst noch nicht getan habe.
Will man nun die Daten des eigenen Sensors (bei mir sind es zwei Sensoren: der Feinstaubsensor SDS011 und der Temperatur/Luftfeuchte-Sensor DHT22, es gehen offenbar aber noch mehr) abfragen, so geschieht das über das REST-API:
$ curl -X GET -L --url http://api.luftdaten.info/v1/sensor/1777 -H 'Content-Type: application/json' -o 1777.json
Als Rückgabe erhält man ein JSON-Array mit den letzten (bis zu 5?) Messwerten. Ein komplettes Messwert-Objekt könnte wie folgt aussehen; id
, timestamp
und location
erklären sich von selbst, die sampling_rate
ist bei mir immer null
; es folgen Informationen zum Sensor (dem SDS011 von inovafit) und schließlich die Messwerte (P1
für PM10, P2
für PM2,5):
{
"id": 98272789,
"sampling_rate": null,
"timestamp": "2017-04-24 20:50:11",
"location": {
"id": 886,
"latitude": "50.082",
"longitude": "8.222",
"country": "DE"
},
"sensor": {
"id": 1777,
"pin": "1",
"sensor_type": {
"id": 14,
"name": "SDS011",
"manufacturer": "Nova Fitness"
}
},
"sensordatavalues": [
{
"id": 250921161,
"value": "7.13",
"value_type": "P1"
},
{
"id": 250921162,
"value": "4.62",
"value_type": "P2"
}
]
}
Sollen die Daten automatisiert weiterverarbeitet werden, ist zu beachten, dass für einen Messpunkt nicht immer beide sensordatavalues
enthalten sein müssen. Man sollte in seinem Skript also immer auf den value_type
prüfen, um den richtigen Wert zu bekommen.
Sinnvoller wäre es natürlich schon, (zusätzlich) einen eigenen API-Endpunkt aufzusetzen und die Daten in einen geeigneten Store zu schreiben. Vielleicht hole ich das demnächst noch nach, aktuell werden die Messwerte aber aus dem öffentlichen API über einen RESTful Sensor von meinem Home Assistant-Server (der einen separaten Blogpost wert ist) gezogen und angezeigt.
Interessant ist übrigens auch ein Vergleich mit den Feinstaub-Messwerten des Hessischen Landesamtes für Naturschutz, Umwelt und Geologie (für die Messstation Wiesbaden-Ringkirche): Tendenziell misst mein Sensor die gleichen Werte, d.h. wenn die "offizielle" Messung höhere Werte registriert, misst auch mein Sensor höhere Werte. Dabei liegen die beiden Messstationen ca. 800 m Luftlinie voneinander entfernt.
Fazit: Ein cooles Projekt und ein tolles Beispiel für Citizen Science, das relativ einfach umzusetzen ist. Vielleicht kommen in Wiesbaden ja noch ein paar weitere Feinstaub-Sensoren dazu, ich könnte mir auch vorstellen, als Gruppe (z.B. im CCC) welche zu basteln.
Kommentare
Ansicht der Kommentare: Linear | Verschachtelt
Frank am :
Kannst Du etwas näher beschreiben, wie Du die API in Home Assistant abfragst und anzeigst? Das wäre eine große Hilfe!
Matthias Gutjahr am :
Klar, ich nutze einen RESTful Sensor, der momentan so konfiguriert ist, wie in diesem Beispiel.
Bei Gelegenheit lege ich vielleicht mal meine komplette Home Assistant-Konfiguration auf GitHub, ich muss aber erst noch Passwörter usw. auslagern
Andreas am :
Hallo. Ich würde auch gerne einen Sensor bauen. Die Teile sind bestellt, und auch teilweise schon angekommen. Allerdings würde ich an der Konfiguration scheitern. Kennst Du eine Gruppe in WI die einen hier auch helfen könnte? Dann müßte ich nicht nach Stuttgart fahren. Danke & viele Grüße Andreas
Matthias Gutjahr am :
Hi Andreas, cool, dass du dir auch einen Sensor bauen möchtest. Die Konfiguration ist gar nicht so schwierig, es gibt ja auch einige Anleitungen im Netz. Ich weiß von keiner lokalen Gruppe hier (außer vielleicht der CCCMZ?), aber vielleicht sollte man tatsächlich mal einen Bastelabend auf die Beine stellen. Nach Stuttgart zu fahren halte ich jedenfalls für übertrieben
Andreas am :
Hallo. Ich habe jetzt alle Bauteile zusammen. Hat ja doch gedauert, bis alles aus China gekommen ist. Ich glaube das zusammenbauen würde ich evtl. hinbekommen, aber die Konfiguration nicht. Würde ich kommenden Dienstag im CCCMZ jemanden treffen der das kann?
Tom am :
Hallo, ich betreibe meinen Sensor SDS011 (ID7471) seit einem halben Jahr. Jetzt zeigt er seit Wochen beharrlich viel niedrigere Werte an, als die Nachbarn, z.B. bei PM10: 1,2, die Nachbarn aber 25, bei PM 2,5: 0,8 , die Nachbarn 15.
Aus der Karte wurde ich rausgenommen.
Ist der Sensor defekt? Kann man den reparieren? Kann es am Messort liegen der in 20m über der Strasse ist? Soll ich einen neuen bestellen und austauschen?
Grüße Tom
Erich am :
Tolles Projekt! Im Zweifelsfall sollte man aber doch eher den offiziellen Messwerten trauen, da sind wesentlich teurere Messgeräte im Einsatz und zusätzlich werden Labormessungen vorgenommen. Aber soweit ich gesehen habe, bewegen sich die hier gemessenen Messwerte durchaus in der gleichen Größenordnung wie die offiziellen - Respekt!