CO2, ESP8266, ESPHome, ESP Easy

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:

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert