Skip to content

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).

Platinen und Sensoren
NodeMCU ESP8266, Temperatursensor DHT22 und Feinstaubsensor SDS011

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.

Graue Abflussrohre und Temperatursensor
Der fertige Feinstaubsensor versteckt sich in grauen Rohren, nur der Temperaturfühler guckt raus

An die Messwerte rankommen

Je nachdem, welche Häkchen man in der Konfiguration gesetzt hat, sendet die Messstation ihre Daten an zwei API-Endpunkte:

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.

Liniendiagramm der Feinstaub-Messwerte
Verlaufsdiagramm der Feinstaub-Messwerte in Home Assistant (mit seltsamem Fehler zwischen 1 und 2 Uhr nachts)

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.

Trackbacks

Keine Trackbacks

Kommentare

Ansicht der Kommentare: Linear | Verschachtelt

Frank am :

Frank

Kannst Du etwas näher beschreiben, wie Du die API in Home Assistant abfragst und anzeigst? Das wäre eine große Hilfe!

Kommentar schreiben

Markdown-Formatierung erlaubt
Wenn Du Deinen Twitter Namen eingibst wird Deine Timeline in Deinem Kommentar verlinkt.
Bewirb einen Deiner letzten Artikel
Dieses Blog erlaubt Dir mit Deinem Kommentar einen Deiner letzten Artikel zu bewerben. Bitte gib Deine Blog URL als Homepage ein, dann wird eine Auswahl erscheinen, in der Du einen Artikel auswählen kannst. (Javascript erforderlich)
Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.

Um maschinelle und automatische Übertragung von Spamkommentaren zu verhindern, bitte die Zeichenfolge im dargestellten Bild in der Eingabemaske eintragen. Nur wenn die Zeichenfolge richtig eingegeben wurde, kann der Kommentar angenommen werden. Bitte beachten Sie, dass Ihr Browser Cookies unterstützen muss, um dieses Verfahren anzuwenden.
CAPTCHA

Formular-Optionen

Kommentare werden erst nach redaktioneller Prüfung freigeschaltet!