Feinstaub messen: Tipps und Daten

Ein Artikel über luftdaten.info und ein Blog-Text von Wilfried Hoge motivierten mich, einen Feinstaubsensor zusammenzubauen. Die Anleitung auf luftdaten.info ist sehr hilfreich, allerdings gibt es ein paar Hürden, die man in der Praxis selber noch überspringen muss.

Zuletzt gemessene Daten in München-Neuhausen:

Messzeitpunkt Temperatur 10 µg/m3(PM10, Grenzwert: 50) 2.5 µg/m3 (PM2.5, Grenzwert: 25) Luftfeuchtigkeit
Mittwoch 20.09.17 11:10:20 21.90 °C 1.59 1.49 40.60%
Mittwoch 20.09.17 11:03:28 21.90 °C 1.66 1.56 40.60%
Mittwoch 20.09.17 10:56:36 21.90 °C 1.27 1.27 40.60%
Mittwoch 20.09.17 10:49:44 21.90 °C 1.39 1.31 41.40%
Mittwoch 20.09.17 10:42:52 21.90 °C 1.24 1.24 40.70%
Alles zusammen: Ubuntu-Laptop, Strom per Powerbank und die drei Bauteile für Temperatur/Luftfeuchtigkeit, Feinstaub und die zusammenfassende Platine.

Alle Bauteile zusammen:

  • Ubuntu-Laptop,
  • Strom per Powerbank und die
  • Bauteile für Temperatur/Luftfeuchtigkeit, Feinstaub und die
  • zusammenfassende Platine namens NodeMCU.



NodeMCU-Baustein: Hier laufen die Sensorendaten ein. Per WLAN kann man die Daten ins Internet schicken. Per USB schließt man hier die Stromversorgung an.
Der NodeMCU Baustein:

  • Hier laufen die Sensorendaten ein
  • Per WLAN kann man die Daten ins Internet schicken
  • Per USB schließt man hier die Stromversorgung an



Nova SDS011 Messgerät: Ein Ventilator saugt Luft an, die ein Laser auf Feinstaub untersucht.
Nova SDS011 Messgerät: Ein Ventilator sagt luft an, die ein Laser auf Feinstaub untersucht.


Einige Tipps für Hürden die ich übersprang:
Hardware:

  • Der NodeMCU und der SDS011-Feinstaubsensor werden mit einem USB/MicroUSB-Kabel verbunden. In der Praxis funktionierten nicht alle dieser Kabel, die optisch alle gleich aussehen. D.h. man muss ein passendes Kabel haben.
  • Die Pinbelegung des NodeMCU auf luftdaten.info war bei mir anders. Man sollte auf dem NodeMCU die Version ablesen und die Pinbelegung googlen (bei mir „nodemcu 0.9 pinout„).
  • Wenn die Hardware richtig verkabelt ist, läuft der Ventilator am SDS011 an: Sehr gutes Zeichen!

Software:

  • Das Einspielen der „luftdaten.info Firmware“ auf den NodeMCU gelang mir mit Windows nicht. luftdaten.info ist hier leider auch nicht hilfreich. Das Problem ist, dass NodeMCU zwar per USB am Rechner hängt, aber eigentlich als serielle Schnittstelle arbeiten will. D.h. man benötigt einen COM-Port der per Windows betrieben wird. Das gelang mir trotz diverser Treiber etc. auf Windows10 nicht.
    Daher setzte ich meinen Ubuntu-Linux-Laptop ein, der die seriellen Schnittstelle bereits eingebaut hat („/dev/ttyUSB0„).
    Sehr hilfreich ist dabei die Arduino Software.
  • Die auf luftdaten.info angegebene Installationszeile ist
    ~/.arduino15/packages/esp8266/tools/esptool/0.4.9/esptool -vv -cd nodemcu -cb 57600 -ca 0x00000 -cp /dev/cu.wchusbserial1410 -cf Pfad_zur_heruntergeladenen_Firmwaredatei
    Ich nutzte hier:
    sudo nodemcu -cb 57600 -ca 0x00000 -cp /dev/ttyUSB0 -cf /home/…Pfad_zur_heruntergeladenen_Firmwaredatei…/latest_de.bin
  • Der NodeMCA versucht nun einen WLAN-Hotspot zu finden, auf dem er sich einloggen kann. Da noch nichts konfiguriert ist, klappt das beim erstmaligen Betrieb natürlich nicht. Daher stellt der NodeMCA selbst einen WLAN-Hotspot zur Verfügung. Der Name des Hotspots ist die Feinstaubsensor-ID. Im Browser nach dem Connect http://192.168.4.1 aufrufen und zum NodeMCA verbinden bzw. der darauf aufgespielten Firmware. Dort kann man einen WLAN-Hotspot auswählen und dessen Zugangsdaten eintragen.
  • Der NodeMCA in einem WLAN ist dann über http://192.168.178.36 im Browser zu ereichen: Dort kann man die Daten an eine eigene API schicken. Meine Einstellungen:
    Server: „www.kux.de“
    Pfad: „/…PFAD_AUF_SERVER…/index.php“
    Port: „443“ (wenn Server https)
  • index.php auf dem eigenen Server:
    $entityBody1 = preg_replace("/([\n|\r]*)/", "", file_get_contents('php://input'));
    saveData(time()."###".$entityBody1."\n");
    function saveData($txt) {
     $el = file_put_contents("datalog.txt", $txt, FILE_APPEND);
     return $el;
    }
    

    D.h. die neuen Daten werden an eine Datei „datalog.txt“ anhängt.
    file_get_contents(‚php://input‚); holt die eintreffenden Daten aus dem eingehenden http-Stream.

  • Ein weiteres PHP-Script macht aus „datalog.txt“ einen JSON-Feed, der mit meinem Plugin JSON Content Importer dargestellt werden kann.
    Ergebnis siehe am anfang dieser Seite.