Funksensor mit Bosch sensortec BME680 / Luftgüte

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

Vorheriges Thema - Nächstes Thema

juergs

#540
Hallo McArthur,

die Maße kannst Du auch selbst herausfinden:

Einfach JPG ausdrucken, ggf auch 2 .. 3 mal vergrößert.

Da Du weißt, dass der  Sensor BME680  3x3 mm Kantenlänge hat, kannst Du Dir den Skalierungsfaktor selbst berechnen ... 
... und auf alle anderen Maße hinreichend genau anwenden ...  ;D :)

Jürgen

max333

Hallo,

ich benutze die 20191017_ESPEasy.ino.bin nur leider wird bei mir die Höhenkorrektur ignoriert...

juergs


max333

#543
Ja genau. Dort kann ich 0m oder 1000m eingeben, ohne das sich was am Luftdruck ändert.

Hat das evtl. mit der I2C Adresse zu tun? Ich habe 0x77.

juergs

#544
ok, schaue mal nach. 😁
Hat nur was mit der Umrechnung bzw. EspEasy-Variablenübergabe zu tun.
Die I2C-Adresse ich nur für Go-No-Go verantwortlich. Werden Werte geliefert ist die richtige Adresse einegstelle.
Darüber hinaus spielt die I2C-Adresse dann keine weitere  Rolle mehr.

Wobei Luftdruck-Absolut-Werte eigentlich nur einen kosmetischen Wert haben.
Wichtiger ist wohl eher die Tendenz ....  ;)

By the way: https://community.grafana.com/t/date-in-local-format/17617

juergs

... habe die Luftdruck-Höhen-Korrektor als ESPEasy-Eingabe-Möglichkeit vorgesehen, aber leider nicht weiter SW-technisch verwendet.

Sie ist also ohne Funktion .... stattdessen wird die Adafruit-Sealevel-Anpassung verwendet, also Luftdruck in Bezug auf Meereshöhe.

Falls wirklich erfoderlich, bitte die Umrechnung angeben, dann kann ich sie einbinden ...  :D

Jürgen

juergs

#546
Um dem AMS-CSS811-Sensor auch mal unter die Lupe zu nehmen, habe ich den Sensor über das SLINK-Protokoll in FHEM
mit Kalman-Filterung eingebunden und auf das SLINK-BME680-Protokoll gemapped.
Noch ohne Temperatur-Kompensation via BME280 oder NTC.

Konfiguration der IP, wie über den WiFiManager üblich.

Code und weitere Infos: https://github.com/juergs/CSS811_Slink/blob/master/README.md

max333

Die Umrechung ist in der _P119_BME680.ino enthalten:

//**************************************************************************/
// MSL pressure formula
//**************************************************************************/
float Plugin_119_pressureElevation(float atmospheric, int altitude) {
  return atmospheric / pow(1.0 - (altitude/44330.0), 5.255);
}


Zum Vergleich mit den anderen Sensoren finde ich die Umrechung schon interessant.  ;)

juergs

#548
Danke. Mehr dazu: Conversion to sea-level pressure

Sollte man aber nochmal genauer nachüberprüfen ...

BME680_CS_06 - Press: 976 hPa
SLinkIAQC_45482A - Temp: 21.55 Hum: 60.47 [%rH] Press: 975.6 hPa


ZitatWetterstationen geben ihren Luftdruck immer auf Höhe 0 reduziert an,
damit man diese vergleichen kann.

Das Problem ist einfach nur dass der Sensor nicht weiß wo, auf welcher Höhe über NN, er wirklich ist. Den einzigen Bezugswert den er hat ist:
Code:
#define SEALEVELPRESSURE_HPA (1013.25)
Das ist ein genormter Bezugswert der aber im wahren Leben quasi nie zutrifft.
Deshalb geht er davon aus dass derzeit auf Meeresniveau diese 1013.25mbar herrschen, was aber nicht zutrifft, und errechnet daraus die Höhe an deinem Standort. Die kann dann natürlich auch nicht stimmen.
Man kann den BME680 also nicht dazu nutzen die Absolute Höhe an seinem Standort zu messen. Wenn man ihm aber die Absolute Höhe am Standort und den tatsächlichen Luftdruck am Standort mitteilt könnte man mit seiner Hilfe eine relative Höhenänderung des Sensors berechnen.

Aber auch der Angezeigte Luftdruck, diese 991,xx hPa. stimmen für denen Standort nicht mit den Daten der Wetterstationen in deiner Nähe überein.
Mit der Formel:
Code:
lokalerLuftdruck = (P/pow(1-(A/44330.0),5.255));
kannst du aber den gemessenen Luftdruck auf den Luftdruck für deine Höhe über NN umrechnen.
Dabei musst du für "P" den vom BME gemessenen Luftdruck einsetzen und für "A" deine reale Höhe in Meter über NN.
Das Ergebnis sollte dann nahe bei den Werten liegen welche Wetterstationen in deiner Nähe messen.


Quelle: BME680 und lokaler Luftdruck

juergs

#549
Erster Versuch:

Example lines for input:

mit 2158 : EVENT: bme680#Pressure=982.20 und 210 Metern

Ergebnis:
2019-11-04_20:16:09 SLinkIAQC_20040E BME680_pressure: 1007.0




Mit diesem Code der greift, wenn die Höhen-Angabe (Altitude) > 0 ist :


if (use_pressure_altitude)
{
double press = JS_BME680.getPress();  
int alt = PCONFIG(1) ;
double lokalerLuftdruck = (press/pow(1-(alt/44330.0),5.255));
      dtostrf(lokalerLuftdruck, 3, 1, str_pressure);  
}    
else
 
       dtostrf(JS_BME680.getPress(), 3, 1, str_pressure);
}


Resultat: 982.20 hPa => 1007.0 hPa








<980 sehr tief, stürmisch
980-1000 tief, regnerisch
1000-1020 normal, wechselhaft
1020-1040 hoch, sonnig
>1040 sehr hoch, sehr trocken

T:IAQC;FW:1.0;ID:20040E;IP:192.168.178.49;R:-38;F:THPV;T:22.23;H:47.64;AH:0.00;D:0.00;P:1006.7;V:125;R:1073741170;DB:1073741152;DF:0;DR:1;

Muss das aber erst noch mal verifizieren ... also erst mal ohne Gewähr!  ;)

Lokaler Luftdruckwert im Moment nur über SLINK!

max333

Danke für die Mühe, nur leider nutze ich slink nicht.  :'(

Prof. Dr. Peter Henning

#551
Ich klinke mich hier mal ein, weil ich selbst mit zwei Sensoren CCS811 kämpfe, siehe hier: https://forum.fhem.de/index.php/topic,103754.msg1009471.html#msg1009471

Insofern würde mich interessieren, ob es irgendwo auf den vorangehenden 36 Seiten eine alternative Tasmota-Version gibt - da liegt nämlich irgendetwas im Argen.

Den Unterschied der absoluten Messwerte habe ich allerdings schon in den SmartHome Hacks ausführlich erklärt - die physikalische Funktionsweise der Sensoren führt zu relativ hohen Fertigungstoleranzen, sie müssen eigentlich geeicht werden. Ohne eine solche Eichung sind sie nur für relative Messungen zu gebrauchen.

Edit: Da ich die beiden CCS811 nebeneinander betreibe und sie immer schön fast gleiche Absolutwerte liefern, ist auf den ersten Blick die Fertigungstoleranz der CCS811 relativ gering.

LG

pah

herrmannj

https://forum.fhem.de/index.php/topic,103027.0.html
https://www.mikrocontroller.net/topic/445610
https://www.jaredwolff.com/finding-the-best-tvoc-sensor-ccs811-vs-bme680-vs-sgp30/
...
Zitat
Den Unterschied der absoluten Messwerte habe ich allerdings schon in den SmartHome Hacks ausführlich erklärt - die physikalische Funktionsweise der Sensoren führt zu relativ hohen Fertigungstoleranzen, sie müssen eigentlich geeicht werden. Ohne eine solche Eichung sind sie nur für relative Messungen zu gebrauchen.

Ich habe mich so ausführlich mit tVOC Sensoren beschäftigt das ich anfangen kann bezahlte Vorträge darüber zu halten. Kurzfassung: die Fertigungstoleranzen sind ein kleiner Teil des Problems. Dazu kommen
- Alterung
- Veränderungen durch reversible Sättigungseffekte (Memory Effekt)
vor allem aber die Querempfindlichkeit zum Wassergehalt der Luft.

Um die Widerstandswerte richtig zu interpretieren muss der variable Anteil des Wassers rechnerisch mit extremer Genauigkeit kompensiert werden. Jetzt such mal im CCS811 die Möglichkeit wie der das exakt machen soll :) (mal abgesehen von dessen buggy fw, zb baseline correction)

Der AMS IAQ-C ist besser (bedeutet er springt seltener, aber er springt).

Juergs hat eine BME680 Tasmota Version brauchbar ist.


juergs

#553
Hallo Zusammen,

ich habe zusamme mit Jörg schon seit einger Zeit einige BME680 im Dauerbetrieb parallel laufen.
Lasse ich mehrere BMEs zur gleichen Zeit starten zeigen diese in etwa auch den gleichen Verlauf an.

Jörg hat schon die entscheidenden Links angegeben, aus denen man die entsprechenden Schlüsse ziehen kann.

Ich habe allerdings nicht für Tasmota, sondern für ESPEasy eine Umsetzung für Jörgs Erfassungs-Algorithmus umgesetzt.
Siehe hier auf GitHub oder hier im Thread.

Jörgs Algorithmus kommt ohne das BSEC-Gedöns aus, da  sowohl die Tasmota-, als auch die ESPEasy-Umgebung wohl die erforderliche Zykluszeit
nicht zu zulässt.

Die Erfassung über ESPEasy + SLINk und MQTT auf FHEM und Grafan läuft bei mir sehr zuverlässig.
Leider hat  Dainel Waschto seine  Webseite mit den HowTos "fhem-und-grafana-tool-zum-visualisieren-von-messdaten" dafür überraschend  dicht gemacht.
/edit: https://www.jaredwolff.com/how-to-make-an-amazing-looking-iot-dashboard-in-no-time/

Falls Interesse besteht, kann ich mir gerne mal das Tasmota-Sensor-Template auf eine Portiermöglichkeit prüfen.

Grüße,
Jürgen

herrmannj

Wenn Du Interesse hast, ich habe den algo für den BME nochmal angefasst verbessert.