BME680 Implementierungen

Begonnen von MC_Arthur, 29 August 2019, 04:15:48

Vorheriges Thema - Nächstes Thema

MC_Arthur

Moin

ich wüsste gerne wie Ihr es geschafft habt den Sensor zum laufen zubekommen?
Nennt doch die Hardware und den Sketch bzw wie ihr vorgegangen seit. Mir geht es rein um die Auswertung. Nicht was noch damit angestellt wird.
Ich hatte leider einige Probleme mit der besec und und und....

ich habe es heute endlich geschafft, das ganze mit diesem Sketch hinzu bekommen.

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include "Adafruit_BME680.h"

#define SEALEVELPRESSURE_HPA (1013.25)

Adafruit_BME680 bme; // I2C

float hum_weighting = 0.25; // so hum effect is 25% of the total air quality score
float gas_weighting = 0.75; // so gas effect is 75% of the total air quality score

int   humidity_score, gas_score;
float gas_reference = 2500;
float hum_reference = 40;
int   getgasreference_count = 0;
int   gas_lower_limit = 10000;  // Bad air quality limit
int   gas_upper_limit = 300000; // Good air quality limit

void setup() {
  Serial.begin(115200);
  Serial.println(F("BME680 test"));
  Wire.begin();
  if (!bme.begin()) {
    Serial.println("Could not find a valid BME680 sensor, check wiring!");
    while (1);
  } else Serial.println("Found a sensor");

  // Set up oversampling and filter initialization
  bme.setTemperatureOversampling(BME680_OS_8X);
  bme.setHumidityOversampling(BME680_OS_2X);
  bme.setPressureOversampling(BME680_OS_4X);
  bme.setIIRFilterSize(BME680_FILTER_SIZE_3);
  bme.setGasHeater(320, 150); // 320°C for 150 ms
  // Now run the sensor to normalise the readings, then use combination of relative humidity and gas resistance to estimate indoor air quality as a percentage.
  // The sensor takes ~30-mins to fully stabilise
  GetGasReference();
}

void loop() {
  Serial.println("Sensor Readings:");
  Serial.println("  Temperature = " + String(bme.readTemperature(), 2)     + "°C");
  Serial.println("     Pressure = " + String(bme.readPressure() / 100.0F) + " hPa");
  Serial.println("     Humidity = " + String(bme.readHumidity(), 1)        + "%");
  Serial.println("          Gas = " + String(gas_reference)               + " ohms\n");
  Serial.print("Qualitative Air Quality Index ");

  humidity_score = GetHumidityScore();
  gas_score      = GetGasScore();

  //Combine results for the final IAQ index value (0-100% where 100% is good quality air)
  float air_quality_score = humidity_score + gas_score;
  Serial.println(" comprised of " + String(humidity_score) + "% Humidity and " + String(gas_score) + "% Gas");
  if ((getgasreference_count++) % 5 == 0) GetGasReference();
  Serial.println(CalculateIAQ(air_quality_score));
  Serial.println("--------------------------------------------------------------");
  delay(2000);
}

void GetGasReference() {
  // Now run the sensor for a burn-in period, then use combination of relative humidity and gas resistance to estimate indoor air quality as a percentage.
  //Serial.println("Getting a new gas reference value");
  int readings = 10;
  for (int i = 1; i <= readings; i++) { // read gas for 10 x 0.150mS = 1.5secs
    gas_reference += bme.readGas();
  }
  gas_reference = gas_reference / readings;
  //Serial.println("Gas Reference = "+String(gas_reference,3));
}

String CalculateIAQ(int score) {
  String IAQ_text = "air quality is ";
  score = (100 - score) * 5;
  if      (score >= 301)                  IAQ_text += "Hazardous";
  else if (score >= 201 && score <= 300 ) IAQ_text += "Very Unhealthy";
  else if (score >= 176 && score <= 200 ) IAQ_text += "Unhealthy";
  else if (score >= 151 && score <= 175 ) IAQ_text += "Unhealthy for Sensitive Groups";
  else if (score >=  51 && score <= 150 ) IAQ_text += "Moderate";
  else if (score >=  00 && score <=  50 ) IAQ_text += "Good";
  Serial.print("IAQ Score = " + String(score) + ", ");
  return IAQ_text;
}

int GetHumidityScore() {  //Calculate humidity contribution to IAQ index
  float current_humidity = bme.readHumidity();
  if (current_humidity >= 38 && current_humidity <= 42) // Humidity +/-5% around optimum
    humidity_score = 0.25 * 100;
  else
  { // Humidity is sub-optimal
    if (current_humidity < 38)
      humidity_score = 0.25 / hum_reference * current_humidity * 100;
    else
    {
      humidity_score = ((-0.25 / (100 - hum_reference) * current_humidity) + 0.416666) * 100;
    }
  }
  return humidity_score;
}

int GetGasScore() {
  //Calculate gas contribution to IAQ index
  gas_score = (0.75 / (gas_upper_limit - gas_lower_limit) * gas_reference - (gas_lower_limit * (0.75 / (gas_upper_limit - gas_lower_limit)))) * 100.00;
  if (gas_score > 75) gas_score = 75; // Sometimes gas readings can go outside of expected scale maximum
  if (gas_score <  0) gas_score = 0;  // Sometimes gas readings can go outside of expected scale minimum
  return gas_score;
}


Ich find ihn schon recht kurz , wobei da bestimmt noch was geht. Er ist auch noch nicht so wie ich ihn haben möchte, aber man kann ihn bestimmt ergänzen.

Ich habe es dann nach dieser Anleitung unter DOC geschafft. https://github.com/amigatommy/BME680-UniversalSensor.
Leider hat dieser Universal Sensor Sketch bei mir nicht funktioniert...

Das ganze hab ich auf einen Wemos D1 Mini

Am liebsten wäre mir eine ESP Easy Variante .
Aber davon kann man bestimmt nur träumen ?

Bin gespannt auf eure Antworten. Vielen Dank

Gisbert

Hallo MC_Arthur,

ich hoffe aber mal nicht, dass du die Nacht durchgearbeit hast.

Ich habe keinen BME680, und anscheinend wird er nicht in ESPEasy oder Tasmota unterstützt.
Anstelle eines eigenen Sketches, würde ich versuchen diesen Sensor anstelle des BME280 in Tasmota reinzubekommen, d.h. durch Austausch des Codes. Das ist vermutlich effektiver als ein eigener Sketch.

Vergiss das vorhin Gesagte, kurzes Googeln liefert diese Seite mit Angabe:
BME680 Temperature, Humidity, Pressure and Gas Sensor

Viele​ Grüße​ Gisbert​
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

Wernieman

#2
Im PlayGround von espeasy soll es eine Erweiterung für den BME680 geben ...
https://github.com/letscontrolit/ESPEasyPluginPlayground


Wobei Google auch rausgeworfen hat:
https://www.letscontrolit.com/forum/viewtopic.php?t=4852
+ Diverse andere Beiträge ..
https://www.google.com/search?client=ubuntu&channel=fs&q=BME680+espeasy&ie=utf-8&oe=utf-8

Edit:
Warum in der ferne schweifen, wenn das gute liegt so nah ... mal im Forum gesucht?
https://forum.fhem.de/index.php/topic,78619.30.html
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

MC_Arthur

Habe das ganze mit playground auch durch . Das Problem , das zwar Gas angezeigt wird , aber nur der widerstandswert .
Leider nicht der IAQ wert

JoWiemann

Zitat von: MC_Arthur am 29 August 2019, 10:05:56
Habe das ganze mit playground auch durch . Das Problem , das zwar Gas angezeigt wird , aber nur der widerstandswert .
Leider nicht der IAQ wert

Sorry, aber über IAQ und BME680 gibt es ellenlange Post. Bitte einmal im Forum suchen.

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

MC_Arthur

Darum geht es ja nicht . Habe nur das aus Beitrag #3 ergänzt .

Habe es jez mit 2 Sketches geschafft das mit alles angezeigt wird . Läuft doch [emoji106]

Wollte eure Erfahrungen etc hier sammeln .
Weil ich zumindest einige Probleme hatte , als Anfänger .

Damit andere es evtl Bisse schneller finden ....


Ich meinte nur das eine ESP Easy Version mit IAQ sehr cool wäre für mein Vorhaben .

herrmannj

Zitat von: JoWiemann am 29 August 2019, 10:55:17
Sorry, aber über IAQ und BME680 gibt es ellenlange Post. Bitte einmal im Forum suchen.

Da springe ich MC_Arthur mal zur Seite. Ja, es gibt ellenlange Posts, zb: https://forum.fhem.de/index.php/topic,103027.0.html

Offensichtlich gibt es zwar viele threads, und google hat auch noch viel mehr.

Erfolgreiche Implementierungen vom BME680, welche auch wirklich den IAQ Wert (und nicht nur den Widerstandswert des Sensors!) ausgeben scheint es aber nur höchst selten zu geben. Für den Augenblick scheint das wohl nur die BSEC Lib zu können und die ist vor-compiled und ... eigen.

Daher ist die Frage (umformuliert) wie man die wo integriert (tipps) mehr als valide. 99,9% der google Links und die aktuellen espeasy module geben nur den Widerstand aus - kannste für AIQ vergessen.

JoWiemann

Sorry, aber auch für die Nutzung der bsec  von Bosch für IAQ gibt es im Forum eine ausführliche Beschreibung. U.a. hier: https://forum.fhem.de/index.php?topic=78619.405

Jetzt gibt es noch einen Thread der das Thema behandelt. Also ein Suchergebnis mehr, mit bisher, sorry hierfür, wenig Informationen.

Dann bitte um die Mitarbeit für einen Fhem-Wiki Artikel bitten, wie es schon für andere Themen erfolgreich umgesetzt worden ist.

Grüße Jörg


Gesendet von iPhone mit Tapatalk
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

PeMue

#8
btw. es gibt eine neue Version der BSEC Library, v1.4.7.4 vom 3. Juli 2019.
Die Installationsanleitung verweist auf das octopus Board bzw. die Installation der ESP8266 Umgebung in die Arduino IDE. Der erste Link funktioniert im Bosch PDF nicht, der zweite sollte eigentlich Standard sein.

Gruß Peter
RPi3Bv1.2 rpiaddon 1.66 6.0 1xHM-CC-RT-DN 1.4 1xHM-TC-IT-WM 1.1 2xHB-UW-Sen-THPL-O 0.15 1x-I 0.14OTAU  1xCUNO2 1.67 2xEM1000WZ 2xUniroll 1xASH2200 3xHMS100T(F) 1xRFXtrx 90 1xWT440H 3xTFA30.3150 5xFA21
RPi1Bv2 LCDCSM 1.63 5.8 2xMAX HKT 1xMAX RT V200KW1 Heizung Wasser

juergs

#9
Hallo Zusammen,

ich muss auch JoWiemann zustimmen!

Leider finde ich so Aussagen wie:
Zitat
"... geht nicht"

oder

ZitatWollte eure Erfahrungen etc hier sammeln .
Weil ich zumindest einige Probleme hatte , als Anfänger .
Damit andere es evtl Bisse schneller finden ....
Ich meinte nur das eine ESP Easy Version mit IAQ sehr cool wäre für mein Vorhaben .

oder
ZitatHabe es jez mit 2 Sketches geschafft das mit alles angezeigt wird . Läuft doch

Diese Aussagen haben für mich doch etwas wenig Informationsgehalt bzw. Aussgagekraft.

Welche Anwendungen gehen, mit oder ohne BSEC?
Welche Fehlermeldungen kommen mit welcher Library?

Das wären konstruktive Informationen die uns (die gerne Anfängern helfen wollen) und auch McArthur weiterbringen würden.

Das gilt meiner Meinung nach auch für Andere, die sich als Anfänger wirklich in dieses Thema einarbeiten wollen ... 

Ein bisschen Suchen hier im Forum und sich ein bißchen Einlesen, bzw. etwas Googlen hätte die die Lösung(en) auf dem Silbertablett gereicht  ;)

Aber letztendlich geht es doch um den Wunsch: Wer baut mir BSEC in EspEasy für den BME680 ein!
Hinzufügend: .... ohne dass man etwas selbst dazu tun muss ... , oder ?  :(

Ich war schon nahe dran, aus den anderen McArthur-Threads ESPEasy mit BME680 + BSEC oder herrmannj's Algorithmus zu implemementieren.

juergs

Zitat von: PeMue am 29 August 2019, 15:19:43
btw. es gibt eine neue Version der BSEC Library, v1.4.7.4 vom 3. Juli 2019.
Die Installationsanleitung verweist auf das octopus Board bzw. die Installation der ESP8266 Umgebung in die Arduino IDE. Der erste Link funktioniert im Bosch PDF nicht, der zweite sollte eigentlich Standard sein.

Gruß Peter

Kaum zu glauben IOT-Cloud von Bosch: 1 Messung pro Stunde/Monat sind umsonst, sonst kostet es gleich 155 € pro Monat! Wow, dass nennt man schon mal so richtig Abzocke.

MC_Arthur

Viele Antworten gebe ich übers Handy .. ( Tapatalk) da kann ich leider auf die Schnelle nix machen und Sketche Posten .
Bin beruflich teilweise stark eingeschränkt .
Bitte das zu entschuldigen .
Das ganze wird auch nachgeliefert .

Ja prinzipiell wäre eine bsec bsec ESPEasy bme 680 Lösung genial .....

Ich versuche es auch gerne ohne Esp easy für meine Zwecke um zubauen .

Aber ich vermute das meine Peogrammier Kenntnisse nicht hilfreich beitragen würden für eine

ESPEasy BME680 bsec Lösung ....


Inwieweit bist du damit ?

herrmannj

Zitat von: juergs am 29 August 2019, 18:23:32
Kaum zu glauben IOT-Cloud von Bosch: 1 Messung pro Stunde/Monat sind umsonst, sonst kostet es gleich 155 € pro Monat! Wow, dass nennt man schon mal so richtig Abzocke.
Ernsthaft? Unglaublich. Sobald ich wieder etwas Zeit hab baue ich die Implementierung aus der OLED Wetterstation aus, hab da noch Ideen. Dann melden wir ein Patent an und machen Bosch mit 7,-/monat Konkurrenz 8)

juergs

Nur noch zur Komplettierung IOT-Hub: in Azure:
ZitatDer Free-Tarif von IoT Hub eignet sich für Machbarkeitsstudien. Mit diesem Tarif können Sie bis zu 8.000 Nachrichten pro Tag übermitteln und bis zu 500 Geräteidentitäten registrieren. Die Beschränkung für Geräteidentitäten gilt nur für den Free-Tarif.