IKEA Vindriktning mit Tasmota und SCD30

Vor kurzem habe ich über meine ersten Erfahrungen mit Home Assistant berichtet. Anlass dafür war, dass ich die Daten eines entsprechend umgebauten Luftqualitätssensors IKEA Vindriktning erfassen wollte. Als Basis für die Erweiterung des Sensors dient die alternative Firmware Tasmota, die man auf ESP8266- oder ESP32-basierten Microcontrollern einsetzen kann. Zusätzlich verwende ich mittlerweile den SCD30 von Sensirion für die Messung der CO2-Konzentration in der Raumluft, der relativen Luftfeuchtigkeit und der Temperatur.

Komponenten

IKEA Vindriktning

IKEA Vindriktning

IKEA bietet mit dem Vindriktning einen relativ günstigen Luftqualitätssensor an (aktueller Preis 12,99 EUR, Stand 14. August 2022), der über einen Leuchtanzeige in grün, gelb oder rot signalisiert, wie hoch die Konzentration von Partikeln der Größe PM 2,5 in der Luft ist. Das sind Feinstaubpartikel mit einem Durchmesser von 2,5 µm, die so klein sind, dass bis in die tiefen Atemwege eindringen und die Lunge schädigen können.

Die Stromversorgung erfolgt über USB-C, wobei ein Netzteil nicht im Lieferumfang enthalten ist. Genaue Angaben zum Strombedarf findet man leider nicht. In der Produktanleitung wird als passendes Netzteil ein Modell mit 5 Volt und 2 Ampere angegeben, was mir aber recht viel erscheint. Tatsächlich funktioniert das Gerät auch problemlos mit deutlich weniger Leistung und benötigt effektiv knapp über 1 Watt, wozu wesentlich der notwendige Lüfter beiträgt, der die Luft durch den Sensor bewegt.

Durch den günstigen Preis muss man aber auch mit Einschränkungen zur Aussagekraft der Messung leben, siehe dazu auch https://www.airgradient.com/open-airgradient/blog/ikea-vindriktning-accuracy/. Der verwendete Sensor ist ein Cubic PM1006K (siehe auch Spezifikation als PDF). Dieser Sensor arbeitet nicht mit Laser sondern mit LED als Lichtquelle und hat eine Genauigkeit von lediglich ±20 μg/m³ oder ± 20%. Weiterhin misst der PM1006K Partikel mit einer Größe von 0,3 μm bis 10 μm Durchmesser, d.h. in die Messung gehen auch Partikel ein, die deutlich weniger schädlich sind, als Feinstaub mit 2,5 μm. Bessere Sensoren mit Lasermessung wie der Plantower PMS5003 oder Sensirion SPS30 haben eine Genauigkeit von ± 10%. Solche Modelle kosten aber auch je nach Anbieter und Modell alleine schon 30 bis 50 EUR.

Wemos D1 Mini

D1 Mini von Berrybase

Für die Erweiterung des IKEA Vindriktning bietet sich aufgrund der kompakten Form der Wemos D1 Mini an, der auf dem ESP8266 basiert und sehr einfach über USB programmiert werden kann. Er ist zudem mit einem Preis von etwa 4 EUR auch recht billig. Man bekommt diesen Controller bei Anbietern wie Berrybase, Reichelt oder AZ Delivery.

Die Stromversorgung kann mit 5 Volt über Micro-USB am Anschluss „5V“ erfolgen, die vom Board intern auf 3,3 Volt für den Microcontroller reguliert werden. Die regulierte Spannung steht auch über den Anschluss „3V3“ für andere Geräte zur Verfügung.

Wichtig: der umgekehrte Weg, 3,3 Volt einzuspeisen und 5 Volt über den „5V“-Anschluss zu entnehmen, ist nicht möglich!

Die I/O-Anschlüsse des D1 Mini sind universell nutzbar und können in Tasmota beliebig  für verschiedene Sensoren zugewiesen werden.

Sensirion SCD30

Sensirion SCD30

Der SCD30 von Sensirion ist ein NDIR-Sensor (nichtdispersiver Infrarotsensor), der mehrere Werte ermittelt:

  • CO2-Konzentration in der Raumluft im Bereich von 400 ppm bis 10000 ppm mit einer Genauigkeit von 30 ppm.
  • Relative Luftfeuchtigkeit mit einer Genauigkeit von 3%.
  • Temperatur von -40 °C bis +70 °C mit einer Genauigkeit von 0,4 °C.

Aufgrund seiner Eigenschaften ist dieser Sensor mit etwa 50-70 EUR das teuerste Teil des Umbaus. Man kann natürlich auch günstigere Varianten, wie den MH-Z19 verwenden. Dieser ist aber weniger genau und bietet auch keine Messung der Luftfeuchtigkeit, wofür man dann eine weitere Sensoren verbauen müsste. Auch ist die Bauform des MH-Z19 nicht ideal für den Einbau in das Gehäuse des Vindriktning.

Wichtig für ein Einbau: die mit „Sensirion“ bedruckte Seite mit den Sensoröffnungen sollte nach innen in den Hohlraum des Vindriktning-Gehäuses ausgerichtet sein, damit ein zuverlässiger Luftaustausch gewährleistet ist.

Tasmota

Zu Tasmota gibt es eine umfangreiche Dokumentation auf Github, wo man auch den Quellcode der Software bekommt. Ein fertiges Image für den D1 Mini mit Unterstützung für alle Sensoren inklusive SCD30 und IKEA Vindriktning gibt es nicht, da der verfügbare Speicherplatz auf dem D1 Mini begrenzt ist und sich manche I2C-Geräte gegenseitig ausschließen würden.

Um sich aus den Quellen eine eigene Version der Firmware zu erzeugen, gibt es verschiedene Wege, die auf der Seite „Compiling“ beschrieben sind. Nachdem ich Visual Studio Code mit PlatformIO bereits für andere Projekte, wie AlphaClock, nutze habe ich diesen Weg gewählt.

Umbau des IKEA Vindriktning

Das Gehäuse des IKEA Vindriktning wird mit vier Schrauben zusammengehalten. Hat man diese entfernt, gelangt man an das Innenleben, was aus dem Controller-Board mit den LEDs und dem Sensor-Modul mit Lüfter besteht. Das Gehäuse ist in zwei Kammern aufgeteilt: die untere Kammer enthält einen kleinen Lüfter, der regelmäßig Luft ansaugt und durch den Luftsensor in die ober Kammer befördert, wo sie wieder ausritt. Die Kabel zum Sensor-Modul und zum Lüfter sind gesteckt und können leicht abgezogen werden.

Vorab ein Bild des fertigen Umbaus vor dem endgültigen Zusammenbau zur Orientierung:

IKEA Vindritkning mit D1 Mini und Sensirion SCD30

Detailansicht der Verkabelung:

IKEA Vindritkning mit D1 Mini und Sensirion SCD30, Detailansicht

Das Controller-Board verbindet man wie folgt mit drei Kabeln mit dem D1 Mini:

IKEA Vindriktning D1 Mini
5V 5V
GND G
REST D1

Zusätzlich wird der SCD30 wie folgt angeschlossen – wichtig, der SCD30 benötigt nur 3,3 Volt zur Spannungsversorgung:

SCD30 D1 Mini
VIN 3V3
GND G
RX/SDA D3
TX/SCL D4

Als alternativen Anschluss für GND kann man auch einen der hinteren Lötpunkte der USB-Buchse verwenden. Nicht an den vorderen Lötpunkten anlöten – hier besteht die Gefahr, dass Lötzinn in die Buchse gelangt und diese damit unbrauchbar macht!

Lüfter-Hack

Der Lüfter ist notwendig, da der Partikelsensor einen regelmäßigen Luftdurchzug benötigt, um sinnvolle Werte messen zu können. Allerdings ist er trotz der Angabe von IKEA, dass das Gerät nicht hörbar sein soll, dennoch deutlich wahrnehmbar und wird vom Controller regelmäßig ein- und wieder ausgeschaltet.

Laut Aufdruck arbeitet der Lüfter mit 5 Volt. Allerdings funktioniert er auch mit 3,3 Volt zuverlässig und ist dabei deutlich leiser. Da diese Spannung am D1 Mini verfügbar ist, habe ich ihn dauerhaft so angeschlossen. Die Kabel des Lüfters habe ich dabei mit eigenen Litzen verlängert und die Lötstellen jeweils mit einem Stück Schrumpfschlauch isoliert. Die Messwerte wurden dadurch nicht negativ beeinflusst. Der Vollständkeit halber weise ich dennoch darauf hin, dass diese Modifikation rein experimentell ist. Ob der Lüfter langfristig so funktioniert, muss sich noch zeigen.

Falls der Lüfter nach dem Zusammenbau deutlich hörbare Geräusche von sich gibt, hilft es, ein wenig gegen das Gehäuse zu klopfen. Es scheint sich nicht um das hochwertigste Modell zu handeln.

Zusammenbau

Wichtig: bevor alles wieder zusammengebaut wird muss man die Firmware erstellen und auf den D1 Mini über dessen USB-Anschluss übertragen, da die USB-Buchse des IKEA Vindriktning nur zur Stromversorgung dient.

Für den Zusammenbau muss man etwas Kreativität entwickeln – ich habe den D1 Mini auf der einen Seite oberhalb des Luftsensors plaziert den CO2-Sensor auf der gegenüberliegenden Seite. Die Schwarzen Kabel, mit denen die Controllerplatine mit Luftsensor verbunden sind, habe ich dann genutzt, um den CO2-Sensor abzustützen, damit er nicht umkippen kann. Die übrigen Kabel werden dann lose dann den Hohlraum gelegt und stützen sowohl den D1 Mini wie auch den CO2-Sensor zusätzlich ab. Dabei bleibt aber noch genug Luftdurchzug für die Sensoren für korrekte Messwerte.

Beim Zusammensetzen sollte man darauf achten, dass keine Kabel einklemmt werden und dass die Gehäuseteile sich leicht und ohne Kraftaufwand zusammenstecken lassen. Im zusammengesetzten Zustand sollte auch nichts klappern, das wäre ein Zeichen, dass eine der Platinen frei beweglich ist.

Erstellen der Firmware für Tasmota

Zu beachten: bis vor kurzem gab es noch einen Bug in Tasmota, dass der SCD30 nach dem Einschalten nicht erkannt wurde, weil Tasmota nicht gewartet hat, bis der SCD30 ansprechbar ist. Dieser Bug wurde am 14. August 2022 behoben (siehe auch das Github Issue dazu), man sollte daher darauf achten, eine Version zu verwenden, die auf dem Stand vom 15. August 2022 oder neuer ist.

TasmoCompiler

Der einfachste Weg für eine passende Firmware geht über TasmoCompiler. Hier muss man für die Unterstützung des SCD30 und IKEA Vindriktning bei den „Custom Options“ noch ergänzen:

#define USE_I2C
#define USE_SCD30
#define USE_VINDRIKTNING

Die so erzeugte Firmware kann man dann in der Weboberfläche herunterladen und für den späteren Flash-Vorgang lokal speichern.

Visual Studio Code

Für Visual Studio Code muss man den Quellcode von Github als ZIP-Datei herunterladen oder mit Git eine lokale Arbeitskopie erstellen.

Im Code sind folgende Einträge in der Datei tasmota/my_user_config.h erforderlich, damit die Firmware passend für den ESP8266 erzeugt wird und Unterstützung für den SCD30 und IKEA Vindriktning enthält:

#define MODULE ESP8266
#define USE_SCD30
#define USE_VINDRIKTNING

Die Anweisungen sind in der Regel schon vorhanden, aber auskommentiert. Es genügt, wenn man einfach die Auskommentierung entfernt.

Sofern man nicht Tasmotizer für die WLAN-Konfiguration verwenden kann oder möchte, muss man auch noch die Zugangsdaten zum eigenen WLAN ergänzen:

#define STA_SSID1 "SSID"
#define STA_PASS1 "Password"

Statt SSID und Password gibt man natürlich die Daten des eigenen WLAN an.

Nachdem man alle Anpassungen vorgenommen hat, öffnet man PlatformIO in der linken Seitenleiste und sucht öffnet bei den Project Tasks den Abschnitt „Default“ und darin „General“. Mit einem Klick auf „Build All“ wird dann ein neues Firmware-Image erstellt:

Visual Studio Code mit Tasmota

Wenn der Build-Vorgang erfolgreich war, findet man die Firmware-Datei firmware.bin im Ordner build_output/firmware.

Übertragen der Firmware und Konfiguration von Tasmota

Vorbereitungen

Für die Verbindung des D1 Mini via USB sind eventuell noch Treiber für den CH340 erforderlich. Der D1 Mini wird dann mit einer seriellen Verbindung über USB angesteuert.

Die Treiber gibt es hier: https://www.wemos.cc/en/latest/ch340_driver.html

Siehe dazu auch die Anleitung auf makershop.de. Diese bezieht sich zwar auf Arduino-Boards mit dem CH340, gilt aber ebenso für den D1 Mini, der den selben Chip für die Kommunikation verwendet.

Übertragen der Firmware mit Tasmotizer

Für das Übertragen der Firmware ist Tasmotizer ein sehr bequemes Tool. Hiermit kann man nicht nur die Firmware flashen, sondern auch die Konfiguration für den WLAN-Zugang anpassen, so dass man diese Daten nicht vorab im Quellcode eintragen muss.

Tasmotizer

Der COM-Port an dem der D1 Mini angeschlossen ist,wird automatisch identifiziert.  Man sollte dennoch prüfen, ob der richtige Port angezeigt wird.

Nach der Auswahl der Datei firmware.bin klickt man auf „Tasmotize!“, um die Übertragung zu starten. Nach dem Vorgang muss man die USB-Verbindung zum D1 Mini einmal trennen und neu verbinden.

Tasmota, Datenübertragung zum D1 Mini

Tasmota, Datenübertragung beendet

Wenn die Weboberfläche von Tasmota erreichbar ist, kann man darüber später auch Firmwareupdates durchführen und muss nicht den Weg über die USB-Verbindung gehen.

Konfiguration von Tasmota

Im zweiten Schritt kann man die WLAN-Konfiguration mit „Send config“ festlegen. Hier kann man bei Bedarf auch direkt die MQTT-Einstellungen für die Übermittlung der Daten an Home Assistant eintragen.

Tasmotizer Konfiguration

Nach einem Klick auf „Save“ werden die Daten an den D1 Mini gesendet und dieser danach automatisch neu gestartet. Nach einer kurzen Wartezeit von etwa 10-15 Sekunden sollte man mit „Get IP“ auch die aktuelle IP-Adresse angezeigt bekommen. Auf diese Adresse kann man dann mit einem Browser mit HTTP zugreifen und sollte die Oberfläche von Tasmota zu sehen bekommen.

Hier klickt man nun auf „Configuration“ und nimmt folgende Einstellungen vor:

Unter „Configure Module“ gibt wählt als „Module Type“ den Eintrag „Generic (18)“ und klickt auf „Save“. Tasmota wird dann neu gestartet und nach einigen Sekunden sollte wieder die Weboberfläche erscheinen.

Danach ruft man erneut „Configure Module“ auf und stellt die Zuordnung so ein, wie man die Verbindungen vorher hergestellt hat:

D3 GPIO0 I2C SDA
D4 GPIO2 I2C SCL
D1 GPIO5 VINDRIKTNING

Tasmota, Sensor-Einstellungen

Alle übrigen Einträge bleiben auf „None“. Nach dem Speichern mit „Save“ wird Tasmota noch einmal neu gestartet. Nach ein paar Sekunden sollte dann die Weboberfläche inklusive der Messwerte der Sensoren erscheinen:

Tasmota, Status mit Sensirion SCD30 und IKEA Vindriktning

Zugrff auf den Weboberfläche schützen

Wenn man vermeiden möchte, dass die Weboberfläche frei zugänglich ist, kann man unter „Configure Other“ auch ein Passwort setzen. Der Benutzername ist dann admin.

Tasmota, weitere Einstellungen

Anpassen der gemessenen Temperatur

Es kann vorkommen, dass die vom SCD30 ermittelte Temperatur um ein paar Grad zu hoch ist, weil die Umgebung aus D1 Mini und Luftsensor das Gehäuse des Vindriktning leicht aufwärmen.

In diesem Fall kann man in Tasmota auch eine Korrektur mit dem Kommando TempOffset gefolgt von dem numerischen Wert, um den gemessene Temperaturwerte korrigiert werden sollen. Siehe dazu auch https://tasmota.github.io/docs/Commands/#sensors. Wichtig: Das Kommando wirkt sich auf alle Temperaturen aus, die Tasmota übermittelt. D.h. auch der gemeldete Taupunkt („SCD30 Dew point“) ist dann entsprechend niedriger oder höher.

Dazu klickt man in der Web-Oberfläche auf „Consoles“ und dann „Console“. Nun erscheint eine Konsole mit den aktuellen Meldungen des Systems und einem Eingabefeld, wo man Befehle eingeben und mit der Eingabetaste absenden kann.

In meinem Beispiel war eine Korrektur um den Wert -4,1 erforderlich, da die übermittelte Temperatur um 4,1 °C zu hoch war gegenüber den Werten, die andere Thermometer im selben Raum gemessen haben. Das dazu nötige Kommando lautet dann TempOffset -4.1. Der jeweils angegeben Wert überschreibt dabei die vorherige Einstellung, d.h. mit TempOffset 0 wird die Temperatur wieder ohne Korrektur übermittelt.

Die Änderung wirkt sich nach dem Absenden des Kommandos unmittelbar aus und wird auch dauerhaft gespeichert.

Anbindung an Home Assistant

Als letzter Schritt ist noch die Anbindung an Home Assistant einzurichten. Hier kann man so vorgehen, wie ich es schon in meinem Artikel zu Home Assistant beschrieben habe.

Im Ergebnis sollte man in Home Assistant ein Gerät sehen, dass alle Daten übermittelt:

Home Assistant mit Daten des SCD30 und IKEA Vindriktning

Öffentlichen Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Dies ist kein Kontaktformular! Wenn Du mir eine persönliche Nachricht schreiben möchtest, benutze die E-Mail-Adresse in meinem Impressum.

Du kannst die folgenden HTML-Tags im Kommentar verwenden:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>