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 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
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
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:
Detailansicht der Verkabelung:
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.
Falls der SCD30 trotz der aktuellen Version nach dem Einschalten nicht erkannt wird, hilft folgender Patch aus der Diskussion von Github. In der Datei tasmota/tasmota_xsns_sensor/xsns_42_scd30.ino
wird eine Code-Zeile in eine Bedingung eingebunden, so dass die Erkennung nur dann abbricht, falls kein SCD30 gefunden wird und der Build für einen ESP32 ist:
void Scd30Detect(void) { #ifdef ESP32 if (!I2cSetDevice(SCD30_ADDRESS)) { return; } #endif scd30.begin();
Diese Änderung sollte aber nur dann eingebaut werden, wenn man eine Version für den ESP8266 mit SCD30 erstellt. Aktuelle Versionen von Tasmota enthalten andere Anpassungen, die Probleme bei der Erkennung des SCD30 beim Einschalten beheben sollen.
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.
Wenn man die Hardware-Konfiguration nicht später im Browser vornehmen will, kann man sie auch direkt in tasmota/my_user_config.h
eintragen:
#ifdef ESP8266 #define MODULE USER_MODULE #define FALLBACK_MODULE USER_MODULE #define USER_TEMPLATE "{\"NAME\":\"IKEA Vindriktning with SCD30\",\"GPIO\":[640,1,608,1,1,7456,1,1,1,1,1,1,1,1],\"FLAG\":0,\"BASE\":18}" #endif // ESP8266
Damit wird ein User-Template mit dem Namen „IKEA Vindriktning with SCD30“ definiert und als Standard für Tasmota festgelegt.
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:
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.
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.
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.
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.
Wenn man die Hardware-Konfiguration nicht als User-Template erstellt hat, muss man sie noch anpassen. Dazu klickt man 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 |
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:
Zugriff 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
.
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:
Hallo,
sehen Sie eine Chance, den Sensor einfach als kleine feine Anzeige fürs Smarthome zu nutzen, also die Sensorik und den nervigen Lüfter rauszuschmeißen (taugt eh nichts) und einfach nur die 3 LEDs per D1 Mini und Tasmota anzusteuern?
Finde den optisch ganz nett und suche schon lange eine solch einfache Anzeige.
Die LEDs werden durch den internen Microcontroller auf der Platine angesteuert, die auch per USB-C von außen mit Strom versorgt wird. Um sie statt dessen mit dem D1 Mini zu steuern, müsste man die Verbindungen zum internen Controller auftrennen. Ob das ohne feinmechanische Arbeiten möglich ist, kann ich ohne genauere Prüfung nicht sagen – aber ich schaue mir das ohnehin bei Gelegenheit mal genauer an, weil ich die LEDs auch lieber für die CO2-Warnung nutzen würde, als für Feinstaub.
Was den Punkt „taugt eh nichts“ betrifft: ich habe hier mehrere Feinstaubsensoren im Einsatz und das Ding von IKEA ist zwar billig, aber auch nicht so schlecht, wie man denkt. Ein Sensirion SPS30, der fast 5x so viel kostet, wie das komplette IKEA-Teil mit Gehäuse und LEDs ist jedenfalls nicht viel genauer.
Schöner Beitrag.
Jetzt müsste ich nur noch jemanden finden der mir alles zusammen lötet?
Oder kann man das fertige Produkt bei Ihnen kaufen?
Gruß Volker
Ja, wenn Sie das nicht selber machen können, müssten jemanden finden, der das für Sie baut. Selber verkaufe ich das nicht als fertiges Produkt.
Desweiteren muss Tasmota in jedem Fall speziell für ihr WLAN konfiguriert werden, weshalb ein fertiges Produkt, was man nur noch aufstellen und muss, ohnehin nicht möglich ist, d.h. auch das fertige Produkt müsste dann nochmal geöffnet werden, damit man Tasmota auf dem D1 Mini bezüglich WLAN-Einstellungen mit „Tasmotizer“ anpassen kann.
Danke für die schnelle Antwort.
Das mit den WLAN Einstellungen würde ich mir zutrauen.
Ich habe hier einige Sonoffs, bei denen ich Tasmota aufgespielt habe. Es ging mir um das an löten der Drähte.