CO2 Sensor selbst bauen
Eigentlich ist die Überschrift nicht ganz richtig. Den Sensor selbst gibt es fertig zu haben. Doch nun zum Projekt.
Vorher: Netamo
Hier im Haus werkelte ein Netatmo Healthy Home Coach als CO2-Monitor. Der war von Netatmo so gedacht, dass alles über eine App läuft. Dank einer Integration in Home Assistant griff ich die Daten ab und nutzte sie z.B. als Innenthermometer zur Steuerung der Heizung und als Erinnerung zum Lüften wenn der CO2-Wert zu hoch war. Was mich an der Sache immer störte war die Cloud-Anbindung. Der Netatmo sendete ins Netz und da musste ich mit einem Account die Daten wieder abholen. Und auch das machte er nicht öfters, als alle 10 Minuten. Es wurde also Zeit, einen Ersatz zu finden.
Der Ersatz
Auf der Suche nach einem Ersatz kam erst mal die Ernüchterung. Die meisten messen keine CO2-Kozentration, sie berechnen sie anhand verschiedener Werte. Reine fertige CO2-Sensoren sind teuer und/oder Standalone-Geräte, die gar keine Funkverbindung aufbauen. Also selbst bauen.
Viele empfohlen den MH-Z19 als Sensor und einen Mikrocontroller wie den ESP32. Da ich sowieso etwas experimentieren wollte, bestellte ich kurzerhand diese Kombi aus einem MH-Z19C, der neueren Variante, und einem ESP32-WROOM-Board. Das sollte nicht die endgültige Lösung werden, sondern als Bastelexperiment dienen. Zum Glück. Das Board lief bestens und meine ersten Ausflüge in die Arduino-Entwicklungsumgebung funktionierten auch gut. Doch der Sensor lieferte keine Werte.
Entweder der CO2-Gehalt war immer 0 ppm oder es kam nichts. Ich probierte dann weiter mit ESP Home, doch hier kam nur ein Kommunikationsfehler vom Sensor. Also Tasmota, aber auch hier 0ppm. Als letzter Versuch musste dann ein Raspberry Pi ran. Aber auch hier: Nichts. Das zog sich mangels Zeit über zwei Monate. Erstaunlich war, dass der Lieferant ohne einen Mucks auf meine Meckermail das Geld für den Sensor zurückerstattete. Vielleicht wusste er, dass er Schrott verkauft hatte.
Auf einen weiteren MH-Z19 wollte ich mich nicht einlassen und so suchte ich weiter und fand von Sensirion den SCD30 und den SCD40. Ich entschied mich für letzteren. Zum Einen ist er billiger, zum Anderen kleiner. Und die Messdaten reichten mir auch. Beide Sensoren gibt es fertig als Breakout-Board. So muss man nicht erst noch den reinen Sensor verlöten.
Nachher: selbst gebaut
Ich machte gleich Nägel mit Köpfen. Ich bestellte den SCD41 und einen ESP8266-Microcontroller, das Wemos D1 Mini Board. Kurz dachte ich über ein Display nach, aber der Netatmo hatte auch keins und es sollte ja Home Assistant die Daten nutzen.
Als dann alles geliefert war, probierte ich es auch gleich mit dem präferierten System ESP Home, welches ich manuell auf der Kommandozeile installieren musste, da ich Home Assistant nicht als OS nutze und so das Add-On von ESP Home nicht nutzen kann.
Hier die Bauteile-Liste - Preise von AliExpress, da günstiger, aber mit längerer Lieferzeit, Stand 13.03.25:
- Wemos D1 Mini - 1,59 €
- SCD41 - 17,29 €
- Gehäuse für Pi Zero - 3,69 €
- Kabel
- Lötkolben
Gesamt kommen also hier je nach Quelle, Versandkosten und Wechselkurs 25 bis 30 € zusammen. Plus Bastelzeit.
Zuerst schrieb ich mir die Konfiguration zusammen. Die Website von ESP Home ist da sehr hilfreich und hat viele Code-Beispiele für eine ganze Menge Sensoren.
esphome: name: wohnzimmer-co2 esp8266: board: d1_mini logger: # Enable Home Assistant API api: password: "" ota: password: "" wifi: ssid: "" password: "" # Enable fallback hotspot (captive portal) in case wifi connection fails ap: ssid: "Wohnzimmer-Co2 Fallback Hotspot" password: "" captive_portal: i2c: sda: 4 scl: 5 scan: true sensor: - platform: scd4x co2: name: "Wohnzimmer CO2" temperature: name: "Wohnzimmer Temperatur" humidity: name: "Wohnzimmer Luftfeuchtigkeit"
Die Passwortfelder sind hier natürlich leer. Alles auf einem Breadboard zusammengesteckt und die Firmware auf den Microcontroller aufgespielt, funktionierte das ganze bestens. Ich bekam Werte für CO2, Temperatur und Luftfeuchtigkeit und bis auf den CO2-Wert machte es auch Sinn. Der wich teilweise bis zu 300ppm vom Netatmo ab. Es dauerte eine Weile bis ich kapierte, dass es einfach daran lag, dass der Netatmo eben nicht so oft aktualisierte.
Also lötete ich den Mikrocontroller mit Kabeln an den Sensor bzw. anders herum, packte alles in ein Gehäuse und siehe da, der CO2-Sensor im Eigenbau war fertig. Fast. CO2 und Luftfeuchtigkeit sind plausibel. Die Temperatur ist etwa 3°C höher als beim Netatmo. Nun stellt sich die Frage, welcher von beiden richtig ist.
Oder ob der Mikrocontroller im Gehäuse so viel Abwärme produziert? Lüftung hat er im Gehäuse genug und nehme ich den Deckel ab, dann sind es immer noch 2°C. Ich werde Euch auf dem Laufenden halten.
Update 10.08.2023:
Nachdem der Sensor sich wohl kalibriert hatte, war der Temperaturunterschied mit Gehäuse +4°C. Aber das soll so. Naja, nicht ganz. Lesen hilft hier und es steht auch ganz deutlich in der Dokumentation bei ESPHome:
Statt jetzt neu die Firmware auf das Gerät zu flashen und den Offset zu korrigieren, habe ich mir ein Template in der configuration.yaml von Home Assistant gebastelt:
template: sensors: wohnzimmer_temp: friendly_name: "Wohnzimmer Temperatur -4" unit_of_measurement: "°C" device_class: "temperature" value_template: "{{ states('sensor.wohnzimmer_temperatur') | float - 4 }}"
Und damit passt auch die Temperatur.