Eigentlich ist die Überschrift nicht ganz richtig. Den Sensor selbst gibt es fertig zu haben. Doch zum Projekt. Hier im Haus werkelt 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 greife ich die Daten ab und nutze sie. Z.B. als Innenthermometer zur Steuerung der Heizung und als Erinnerung zum Lüften wenn der CO2-Wert zu hoch ist. Was mich an der Sache immer störte ist die Cloud-Anbindung. Der Netatmo sendet ins Netz und da muss ich mit einem Account die Daten wieder abholen. Und auch das macht er nicht öfters, als alle 10 Minuten. Es wurde also Zeit, einen Ersatz zu finden.
Auf der Suche nach einem Ersatz kam erst mal die Ernüchterung. Die meisten messen keinen CO2-Kozentration, sie berechnen sie anhand verschiedener Werte. Reine fertige CO2-Sensoren sind teuer und/oder nicht online. Also selbst bauen.
Viele empfohlen den MH-Z19 als Sensor und einen Microcontroller 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 0ppm oder es kam nichts. Ich probierte dann weiter mit ESP Home, doch hier kam nur ein Kommunikationsfehler zum Sensor. Also Tasmota, aber auch hier 0ppm. Als letzter Versuch musste dann ein Raspberry 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, dass man nicht erst noch den reinen Sensor verlöten muss.
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 hat auch keins und es sollte ja Home Assistant die Daten nutzen.
Als dann alles da 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 06.08.23:
- Wemos D1 Mini – 1,78 €
- SCD41 – 26,01 €
- Gehäuse für Pi Zero – 3,02 €
- Kabel
- Lötkolben
Gesamt kommen also hier je nach Quelle und Wechselkurs 30 bis 35 € 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 eben nicht so oft aktualisierte.
Also lötete ich den Microcontroller mit Kabeln an den Sensor bzw. anders rum, 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 Microcontroller 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.
Schreibe einen Kommentar