Funksensor mit Bosch sensortec BME680 / Luftgüte

Begonnen von juergs, 28 Oktober 2017, 18:05:43

Vorheriges Thema - Nächstes Thema

herrmannj

Der "Versuchsaufbau" war für peterk_de und mit einem Rätsel hat das wenig zu tun. Die Schüssel mit kochendem Wasser sorgt für eine höhere absolute Feuchte in der Luft. In deren Folge wird der MOX fälschlicherweise einen massiven TVOC Anstieg ausgeben.

Der "Versuchsaufbau" mit kochenden Wasser illustriert auf extreme Art ein reales Problem. Beim Lüften, speziell in der dunklen Jahreszeit, sinkt die absolute Feuchte im Raum (typischerweise). In den Räumen hast Du jedoch einen kontinuierlichen Feuchtigkeitseintrag (Atmen, kochen, usw). Weil der Feuchte Anteil den TVOC massiv überlagert sind absolute Werte so verfälscht, dass Steuerungen die darauf basieren keine sicher reproduzierbaren Ergebnisse  liefern oder ausreichend deterministisch sind.

juergs

#601
Um das von Jörg gesagte vom SCD30 (NDIR)  mit eCO2 vom BME680 + BSEC noch zu verdeutlichen:
https://twitter.com/hosi1709/status/1321354977214955521

Die neueste BSEC Library-Version soll ohne Linkerscript-Gefummel auskommen:

v1.6.1480
@BoschSensortec BoschSensortec released this 26 days ago

Updated to v1.4.8.0.
Updated the ESP8266's static library to not need linker script modifications.


Prof. Dr. Peter Henning

#602
Ich habe die Adsorptionssensoren in den SmartHome Hacks ausführlich behandelt und kann jedem gerne das physikalische Prinzip erklären. Insofern bleibe ich dabei: Verwendet man Sensoren mit unterschiedlichen Empfindlichkeitsprofilen, kann man auch einzelne Gase - ich denke an Stickoxide, Ozon, CO und CO2 - herausfieseln. Hat man nur einen Sensor, ist und bleibt das Kaffeesatzleserei und man kann durch keine noch so gute "Bibliothek" (aka Algorithmus) diese Daten erhalten.

Sieht man auch sehr deutlich an dem Peak der CO2-"Messung" aus dem Adsorptionssensor um ca. 16:20 heute - das KANN kein CO2 gewesen sein (ist ein CCS811). Der MHZ19 hängt derzeit an einem ESPDuino, das Programm kommt noch auf eine NodeMCU.

LG

pah

herrmannj

Zitat von: Prof. Dr. Peter Henning am 14 Dezember 2020, 19:23:13
... Insofern bleibe ich dabei: Verwendet man Sensoren mit unterschiedlichen Empfindlichkeitsprofilen, kann man auch einzelne Gase - ich denke an Stickoxide, Ozon, CO und CO2 - herausfieseln. ...
Ich habe nie das Gegenteil behauptet und sehe auch sonst niemanden. Klar kann man das. Mit den richtigen Kontakten und gegen Einwurf ganz vieler Münzen kann man da sogar richtig gute Sensoren kaufen die genau das machen. ;)

Unabhängig davon misst ein CCS811 natürlich kein Co2 sondern "berechnet" (btw furchtbar plump) ein eCO₂ (CO₂-Äquivalente). Was sinnfrei ist, da es eben keine zwingende Korrelation zwischen TVOC und CO₂ gibt. Und weil die TVOC Messung bauartbedingt relativ (und nicht absolut) ist, kann man damit halt nichts ernsthaftes anfangen. Btw der CCS811 gehört zu den grottigsten Vertretern seiner Zunft. Dann doch bitteschön wenigsten AMS IAQ oder BME680 ... :(

Von daher volle Zustimmung:
ZitatAutor: Prof. Dr. Peter Henning
« am: 12 Dezember 2020, 20:58:07 »
Ich bin von diesen Adsorptionssensoren in Bezug auf CO2 erst einmal komplett abgekommen, sondern verwende inzwischen MH-Z14 und MH-Z19B. Sehr viel besser .
Genauso siehts aus.

juergs

#604
Wer evtl. einem herumliegenden CSS811-Modul trotzdem einer Verwendung zuführen möchte:
https://revspace.nl/CJMCU-811
https://github.com/maarten-pennings/CCS811

Dann noch eine interessante Abhandlung über Placing VOC Sensors for Assessing Air Quality (A CFD Study of Indoor VOC Distribution)

juergs

#605
Hallo Zusammen,

wurde über eine Github-Issue über ein Verhalten des BME680 angesprochen:

ZitatI tried this library with my BME680 and I am 100% sure it gives wrong results in warmer rooms. The formula used to calculate tvoc is definitely not properly accounting for temperature. In a room with 28/29 °C the library gave a reading of 150-180 ppm in contrast to fresh (cold) air where it immediately went up to 240 before I closed the window.
Bottom line: Do not rely on the values produced here.

Deshalb habe ich selbst noch mal Versuche mit einer hohen Temperatur-Differenz beim setzen der Baseline mit rel.  hohem Temperturunterschied.

In Grafana mit einer Saplerate von 5 Minuten und Kurvenglättung komt der Effekt kaum zum Tragen.
Allerdings in FHEM mit kleinerer Samplerate wird der Effekt sichtbar.


  • Getrennter Raum und Kühlschrankaufenthalt des Sensor für ca. 10 Minuten
  • Dann Arbeitszimmer bei ca. 21°C
  • Setzen der Baseline außerhalb des Fenster bei ca. 2°C für ca. 10 Minuten
  • Dann Reinholen des Sensors ins Arbeitszimmer

Man sieht deutlich das Überschiessen der Luftfeuchtigkeit (und TVOC-Peak) im FHEM-Plot, wohl durch Kondensationseffekte am Sensor.
Da Ganze stabilisiert sich aber bei Angleichung an die Raumumgebung.
Durch eine höhere Abttastrate geht dieser Effekt im Grafana-Plot einfach unter.

Sieht für mich nach keinem Fehler aus, sondern bestätigt eher das von herrmannj über Absorptions-Sensor-Typen gesagte.  :)

Die Aussage:
ZitatBottom line: Do not rely on the values produced here.
ist mir dann doch etwas zu vorschnell und pauschal ....

juergs

#606
Bosch Sensortec hat einen Nachfolger, den BME688 für den BME680 in petto:

Zitat
Environmental sensing with Artificial Intelligence.
... is the first gas sensor with #AI and lets you monitor #airquality and helps to improve your health and well-being. Train the BME688 yourself by using the new BME AI-Studio tool
ZitatAdditionally to all features of the BME680, the BME688 has a gas scanner function. In standard configuration, the presence of VSCs is being detected as indicator for e.g. bacteria growth.
And the gas scanner can be customized with respect to sensitivity, selectivity, data rate and power consumption as well.
The BME AI-Studio tool enables customers to train the BME688 gas scanner on their specific application

https://www.bosch-sensortec.com/products/environmental-sensors/gas-sensors/bme688/

https://buyzero.de/products/bosch-bme688-gas-sensor-developer-kit
https://buyzero.de/blogs/news/bme688-bme688-shuttle-board-status

https://www.messe-ticket.de/Nuernberg/embeddedworld2021/

https://www.bosch-sensortec.com/media/boschsensortec/downloads/product_flyer/bst-bme688-fl000.pdf

Zitatwe will be able to ship at the end of March / beginning of April!

Ist halt alles im "preliminary"-Status noch mit Vorsicht zu geniessen ..  ;)

m.zielinski

Magst du nochmal deine aktuelle Wemos D1 / bme280 Firmware hochladen? Mit der bin hier im Thread vom November 2019 bekomme ich zwar Werte aber Tvoc bleibt auf NaN.

juergs

#608
Du meinst BME680 mit EaspEasy?  ;)
Ich vermute es ist was mit der Modulanbindung zum Wemos.
Welches Modul benutzt Du? Vielleicht fehlen die I2C-Pullup-Widerstände und müssen gesetzt werden?

Mit den Sourcen könntest Du selbst ESPEasy mit der Arduino-IDE kompilieren ...

Mit den neuen Daten von hermannj
Zitathttps://github.com/herrmannj/airq-mqtt/blob/master/IAQ_BME680.h
https://github.com/herrmannj/airq-mqtt/blob/master/IAQ_BME680.cpp
könntest Du sogar schon eine neuere Version erzeugen!


Was sagt das ESPEasy-Log? Wie ist Deine Konfiguration? Debug-Options mal gesetzt und per SerialMonitor in Arduino abgefragt?

Läuft ein Beispiel-Sketch für den BME680. Z.B. von Adafruit oder Pimoroni?

m.zielinski

Ja natürlich den BME680.  cjmcu-680 https://www.amazon.de/gp/product/B07K1CGQTJ/ref=ppx_yo_dt_b_asin_title_o05_s00?ie=UTF8&psc=1

Ich habe diese BIN-genommen: 20191104_ESPEasy.ino.bin die du hier im Thread hochgeladen hattest.
Mit dem selber kompilieren komme ich noch nicht so recht weiter.

Einen Hinweis auf Pullup-Wiederstände hatte ich da nicht gefunden - hast du da einen Link für mich ?
ich habe den Wemos so verbunden:
3v3 - VCC
gnd -gnd (muss ich das auch mit SDO verbinden? Das habe ich nicht getan)
d1 - scl
d2 - sda

Mehr habe ich an dem Wemos nicht angeschlossen.

Ich hatte hier geschaut https://github.com/juergs/ESPEasy_BME680_TVOC - das passt also.

Und wie gesagt bekomme ich auch Werte für Barometer, Temperatur und Feuchtigkeit - nur nicht für VOC

Nachdem ich ESPEasy geflasht habe und dann wieder deine bin-Datei kommt jetzt auch bei TVoc ein Wert - was auch immer nun anders ist...
Trotzdem wäre ich für ein aktuelles Compilat dankbar - ich nuze dabei im moment die SLINK-Abindung - habe aber auch MQTTauf dem Fhem am laufen.

juergs

#610
Der BME680 wird mit I2C-Konfiguration verbunden. Der SDO gehört zu SPI.
Anschluss analog zum BME280  :D

Wenn Du Daten angezeigt bekommst, sollte das so stimmen. Vielleicht ist etwas beim Flashen schiefgelaufen...

Der Sensor braucht etwas Zeit zum Starten evtl. kommt "0" oder "NaN" in der Initphase. Sollte aber nach ein paar Minuten dann Werte anzeigen ...  :)

Zitat//--- allow 300 sec (5 min) to warm-up sensor for stable voc resistance (300000ms)

Liefert also erst nach 5 Minuten Werte!

BME680-Breakout

juergs

#611
Um die Integration des BME680-Plugin-Moduls in die aktuelle ESPEasy-Version werde ich hier weiterführen + dokumentieren.
Da die Lernkurve in den letzten 2 Jahren doch mit Visual Code und Platformio deutlich angestiegen ist und neue Grundlagen dafür erarbeitet werden müssen.  ;)


Grüße,
Jürgen

PS: Aktuelles Binary: ESPEasy-mega_BME680_TVOC_20210223/releases

PS2: Implementierung neuer Baseline-Algorithmus: Sourcen und Binary der V2 im Github-Repository  (Vorsicht Beta !)

juergs

#612
Ich habe mal BSEC und Jörgs Baseline-Algorithmus einer "Langzeitbeobachtung" unterzogen und konnte daraus 3 Punkte ableiten
wie sich der BSEC-Algorithmus verhält.


  • Phase_1: Die Offset-Drift baut sich bei V1 kontinuierlich auf. Bis der nächste Reset wieder das Niveau auf 0 setzt. (mittlerer Offset befindet sich jetzt bei ca. 1000)
  • Phase_2: Durch die Offsetdrift schlagen Minima stärker duch. BSEC begrenzt die Minima und zieht sie auf die Baseline, auch in dem der Algorithmus zu starke Ausschläge kappt.
  • Phase_3: Die Offsetdrift hat sich nach einem Reset verschoben (mittlerer Offset befindet sich jetzt bei ca. 500)

Wäre für eine Baseline-Korrektur die Differenz zwischem z.B. Gleitendem Mittelwert (Ringpuffer für sinnvollen Zeitabschnitt) und dem größtem Minima-Ausschlag (prozentual gewichtet, ca. 10..20%)
ein möglicher Korrekturwert des bestehenden Algorithums von herrmanj?

Da ich ein Tiefpassfilter zwischengeschalten habe, sind Ausschläge zwar noch präsent, aber doch nicht so stark beeinflusst, wie unter BSEC. Dennoch scheint die zeitliche Verschiebung (Latenz)
ähnlich zu sein ...  ;)

Im Moment scheint mir Jörgs erster Algorithmus die bessere Wahl zu sein. Wenn man noch die Baseline-Kompensation in Griff bekommt, braucht man kein BSEC mehr  ;D
Die zweite Variante (mittlere Grafik) scheint mir noch nicht so gut zu funktionieren.

Grüße,
Jürgen

der_ventilator

Im Anhang mal eine 24h Messung in meinem Schlafzimmer, inkl des Nachts eines Menschen drin schlafens, mit Fenster offen um 23:30 und dann nochmal um 10:00
Vergleich Sensair Sunrise CO2 Sensor (mit 30ppm Genauigkeit) und des V2 Filtered BME680 auf EspEasy
Den linearen CO2 Anstieg, den man im Raum hat, hat er nicht mitgekommen, aber nach Schließen des Fensters um 11:30 einen unerklärlichen, massiven Anstieg VOC gemessen, den der CO2 Sensor nicht gesehen hat (Zimmer war danach menschenleer)

juergs

#614
Könnets Du bitte noch mal ein ähnliches Szenario ohne Filterung erzeugen.
Wenn möglich, mit Luftfeuchte.

Grüße,
Jürgen 

/Edit: das Sprungantwortverhalten der V2, nach Fensteröffnen und schließen, ist auch bei mir auch nachvollziehbar.