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 (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
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 (https://github.com/arendst/Sonoff-Tasmota/wiki/Supported-Sensors) Seite mit Angabe:
BME680 Temperature, Humidity, Pressure and Gas Sensor
Viele Grüße Gisbert
Im PlayGround von espeasy soll es eine Erweiterung für den BME680 geben ...
https://github.com/letscontrolit/ESPEasyPluginPlayground
(https://github.com/letscontrolit/ESPEasyPluginPlayground)
Wobei Google auch rausgeworfen hat:
https://www.letscontrolit.com/forum/viewtopic.php?t=4852 (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 (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 (https://forum.fhem.de/index.php/topic,78619.30.html)
Habe das ganze mit playground auch durch . Das Problem , das zwar Gas angezeigt wird , aber nur der widerstandswert .
Leider nicht der IAQ wert
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
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 .
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.
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
btw. es gibt eine neue Version der BSEC Library, v1.4.7.4 vom 3. Juli 2019 (https://www.bosch-sensortec.com/bst/products/all_products/bsec).
Die Installationsanleitung verweist auf das octopus Board (https://github.com/bsinno/iot-things-examples/tree/master/octopus-telemetry) bzw. die Installation der ESP8266 Umgebung in die Arduino IDE (https://learn.adafruit.com/adafruit-feather-huzzah-esp8266/using-arduino-ide). Der erste Link funktioniert im Bosch PDF nicht, der zweite sollte eigentlich Standard sein.
Gruß Peter
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.
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 (https://www.bosch-sensortec.com/bst/products/all_products/bsec).
Die Installationsanleitung verweist auf das octopus Board (https://github.com/bsinno/iot-things-examples/tree/master/octopus-telemetry) bzw. die Installation der ESP8266 Umgebung in die Arduino IDE (https://learn.adafruit.com/adafruit-feather-huzzah-esp8266/using-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.
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 ?
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)
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.