Es wird ja empfohlen regelmäßig zu lüften, doch wann ist es dafür mal wieder Zeit? Jetzt, zum Sommeranfang ist das ja kein Problem, wenn ich zu Hause bin ist das Fenster natürlich offen. Als es noch kälter war und auch jetzt, wenn es wärmer wird, hilft einem ein CO2-Sensor, rechtzeitig das Fenster zu öffnen um die verbrauchte Luft auszutauschen.
Da ich auch einen CO2-Sensor haben wollte und mir die fertigen Geräte entweder viel zu teuer waren oder etwas zu teuer aber mit zwangsweiser Cloud-Anbindung, habe ich mich umgesehen, wie man einen solchen Sensor selber realisieren kann. Nach kurzer Suche habe ich dann ein MH-Z19B und den ESP8266 in Form eines WeMos D1 Mini gefunden. Bestellt, zusammengebaut und als System für den ESP die Software ESP Easy gefunden. In ESP Easy war es sehr einfach den Sensor einzurichten und die Werte dann über MQTT an den ioBroker zu schicken. Ich musste für die Hardware nur den Sensor und den ESP über vier Kabel miteinander verbinden und in der Software die Pins für den Bus auswählen, den Sensor eintragen, MQTT aktivieren und den entsprechenden Rechner angeben, sowie ein paar Haken setzen und mich für ein Intervall entscheiden.
Der MH-Z19 hat die Möglichkeit, eine automatische Kalibrierung zu verwenden (ABC: automatic baseline calibration) oder explizit eine Kalibrierung zu triggern. Unter ESP Easy habe ich es nicht geschafft eine Kalibrierung zu triggern, ich konnte nur die automatische Kalibrierung ein- oder ausschalten. Die automatische Kalibrierung funktioniert leider nur sinnvoll, wenn man dafür sorgt, dass der Sensor jeden Tag mindestens einmal für einige Minuten (vielleicht eine viertel Stunde) an frischer Luft mit ca. 400 ppm CO2 steht. Kann man dies nicht einrichten, kann es passieren, dass der Sensor plötzlich deutlich zu niedrige Werte anzeigt.
Im ioBroker habe ich dann festgestellt, dass die Werte manchmal ganz schön rauschen, zu anderen Zeiten aber wieder völlig glatt aussehen. Auf Nachfrage im Forum, ob auch andere dieses Problem haben, bekam ich leider zuerst nur die etwas flapsige Antwort, dass ich ja „einen billigen chinesischen Nachbau“ gekauft hätte. Mein Resümee ist, dass dieser Sensor eigentlich ganz brauchbare Werte liefert, er allerdings keine Luftbewegung verträgt und deshalb in ein Gehäuse eingebaut werden sollte um ihn vor stärkerer Luftbewegung zu schützen. (Das habe ich bisher aber leider immer noch nicht geschafft).
Dafür habe ich im Laufe der Zeit ESPHome entdeckt. Am Anfang hatte mich die Seite etwas abgeschreckt, da ich nicht so recht wusste, wie ich das eigentlich bei mir installiert bekomme. ESPHome ist sehr eng mit Home Assistant verbunden. Da ich jedoch bisher ioBroker benutze und damit sehr zufrieden bin, wollte ich ein weiteres Smart-Home-System eigentlich nicht ausprobieren. Dank des ESPHome-Adapters für ioBroker (leider bisher nur in einer Beta-Version und mit einigen noch nicht unterstützten Funktionen) ist es aber auch mit ioBroker sehr leicht ESPHome zu verwenden. Wenn man das erste mal die Software überträgt, kann man das theoretisch wohl auch an einem USB-Port des Rechners, auf dem der Browser läuft falls man über HTTPS zugreift. Ich bin den Weg über den USB-Port des Raspberry PI gegangen, auf dem ioBroker und damit auch der ESPHome-Adapter läuft. Das funktionierte völlig problemlos. Im Anschluss kann man bei Änderungen einfach über das WLAN die Software aktualisieren (OTA: over the air).
Bei ESPHome hat man deutlich flexiblere Möglichkeiten, wie Sensoren ausgelesen werden sollen und wie evtl. die Werte gefiltert werden sollen. Bei Bedarf hat man sogar die Möglichkeit sehr einfach eigenen C++-Code einzubauen um das Verhalten exakt entsprechend der eigenen Bedürfnisse anzupassen, falls wider erwarten doch mal eine Funktionalität nicht bereits zur Verfügung steht.
Der ESPHome-Adapter unterstützt bisher nur fünf Sensortypen. D.h. für diese fünf Sensortypen ist auch die direkte Unterstützung der entsprechenden Elemente über die ESPHome-API im Adapter verfügbar und die Werte stehen direkt als Objekte des Adapters zur Verfügung. Benutzt man andere Typen, so kann es passieren, dass einfach nur die entsprechenden Werte nicht gelesen werden können, aber auch, dass der gesamte ESP über diese API nicht ansprechbar ist, also auch die Sensoren mit Typen, die eigentlich unterstützt werden.
Abhilfe schafft in dem Fall mal wieder MQTT. Es ist zwar nicht ganz so einfach das in ESPHome einzurichten (im Vergleich zu ESPEasy) aber letzten Endes ist auch das keine große Hürde.
Die einfache Art, wie man mit einem ESP verschiedenste Hardware ansprechen kann hat mit dazu motiviert mal wieder etwas mehr mit Elektronik zu basteln. Inzwischen haben meine Pflanzen Feuchtigkeitssensoren, es gibt einen weiteren Knopf auf meinem Nachtisch, der zur Steuerung der Lampen in meinem Schlafzimmer dient und, nachdem nun die Feuchtigkeit der Erde meiner Pflanzen automatisch erkannt wird, ist natürlich eine kleine Station mit Pumpen in Arbeit.
Hier die ESPHome-Konfiguration für den WeMos D1 Mini mit angeschlossenem MH-Z19B. Die automatische Kalibrierung habe ich deaktiviert und einen Switch definiert über den ich eine Kalibrierung des Sensors triggern kann.
esphome: name: co2-sniffer2 esp8266: board: d1_mini wifi: ssid: !secret wifi_ssid password: !secret wifi_password # Enable fallback hotspot (captive portal) in case wifi connection fails ap: ssid: !secret ap_ssid password: !secret ap_password ota: password: !secret ota_password # Enable logging logger: # Enable Home Assistant API api: password: !secret api_password switch: - platform: template name: "CO2-Calibration" turn_on_action: - logger.log: CO2-Calibration started2 - mhz19.calibrate_zero: mhz19_id web_server: port: 80 uart: rx_pin: GPIO4 tx_pin: GPIO5 baud_rate: 9600 sensor: - platform: mhz19 id: mhz19_id co2: name: "CO2 Value" temperature: name: "Temperature" update_interval: 10s automatic_baseline_calibration: false - platform: wifi_signal name: "Wifi Power" update_interval: 10s captive_portal: