NEWS
[gelöst] (vorübergehend) Luftgütesensor BME 680
-
Jetzt stellt sich eigentlich die Frage wie ich aus der Formel das Ergebnis in den Datenpunkt bekomme.
Irgendwas übersehe ich da. Mir wird aktuell nur "true" reingeschrieben.
-
Für heute reichts erstmal. Mir raucht der Kopf.
Ich habe jetzt einen Wert der wie ein IAQ aussieht. Allerdings mit 8 Dezimalstellen. Das will ich noch ändern.
Dazu habe ich noch eine Ausertung erstellt mit der ich dann ein Farbfeld steuern möchte.
Allerdings habe ich das noch nicht getestet. Ich denke aber das das so nicht funktionieren wird.
Wenn jemand Vorschläge hat oder das Ganze vereinfachen kann dann bitte her damit.
5779_luftgueteauswertung.jpg
5779_luftgueteb.jpg
5779_luftguetea.jpg -
Ich habe über Aliexpress einen kleinen Luftgütesensor bezogen. Das Ding nennt sich BM680. `
Mit deinem Beitrag hast Du mich wieder irgendwie angefixt und nun denke ich gerade darüber nach mir auch so ein Teil zu bestellen. Welchen hast Du bei Aliexpress bestellt?Der Fühler soll an die I2C Schnittstelle angeschlossen werden.
Für mich kämen folgende Fühler in Frage:
https://www.amazon.de/BlueDot-BME680-Se … I2C+BME680
https://www.watterott.com/de/BME680-Breakout
Wobei dieser mein Favorit wäre:
-
Ich wollte recht klein:
https://de.aliexpress.com/item/BME680-D … 4c4djehDSC
Allerdings habe ich das Script immer noch nicht so richtig am laufen.
Irgendwie scheint auch die Formel in der Form nicht zu stimmen.
Wenn ich die Luft "verunreinige" (Taschentuch mit Alkohol) sinkt bei mir der gelesene Widerstandswert. Also genau umgekehrt zur Formel.
Da werde ich mir das am Wochenende mal genauer anschauen müssen.
-
Ich wollte recht klein: ` Und wie eingebunden, I²C- oder SPI-Bus?
> Da werde ich mir das am Wochenende mal genauer anschauen müssen.
Immer gut wenn sich schon jemand in das Thema reinhängt. :mrgreen:Ich werde dann mal meinen Favoriten bestellen.
-
Das hängt an einem Sonoff SV mit Tasmota Firmware und ist dort über I²C Bus eingebunden.
Die Daten werden per MQTT an den ioBroker gesendet und dort dann per Script (hoffentlich irgendwann einmal) weiterverarbeitet um dann in VIS als mehrfarbige Fläche (Ampel) dargestellt zu werden.
Das Projekt ist jetzt gerade eine Woche alt, aber ich bin mit Scripten nicht so 100% fit das ich wirklich lange grübeln muss wie ich was umsetzen kann.
Auch für Blockly (obwohl im Grunde einfach) bin ich wohl etwas alt.
-
Nach ein paar Tagen herumexperimentieren habe ich den Eindruck gewonnen das mit der Tasmota Firmware irgendwas nicht stimmen kann.
1. Mein Sensor verhält sich genau umgekehrt zur Beschreibung. Lege ich einen Lappen mit Spiritus neben den Sensor geht der Wert auf 9 kOhm RUNTER! Laut Bosch sollte der Wert nach oben gehen.
2. Im Datenblatt wird eine Heiz- und Ausleseperiode beschrieben. Das kann ich an den gelieferten Werten nicht erkennen. Ich sehe einen ständig schwankenden Widerstandswert der offensichtlich einfach nur ausgelesen wird ohne einen Messrhythmus zu befolgen.
3. Wenn ich die Weboberfläche des Sensors offen lasse steigt der Widerstandswert ständig an ohne das sich an der Luft etwas verändern würde.
Von daher habe ich meine Experimente mit dem Script zunächst zurückgestellt bis ich herausgefunden habe was hier falsch läuft.
-
Jetz wird es schräg.
Da mir derzeit keine bessere Lösung einfällt und Bosch offensichtlich die Formeln geheim hält werde ich langfristig vermutlich nicht beim BME680 bleiben.
Übergangsweise habe ich mir eine Lösung gebastelt die Meine Zwecke erfüllen müsste:
Aus dem angehängten Tabellenblatt (von adafruit) habe ich mir folgende Formel konstruiert:
Basistemperatur: 21°C Basisluftfeuchte: 40% Basiswert: 5 kOhm Wichtung: Temperatur: 4,7% Luftfeuchte: 8% Luftgüte: 70% A= Temperatur B= Luftfeuchte C= Widerstandswert in kOhm ((100-21-A)/(100-21)*(0,047*100))+((100-40-B)/(100-40)*(0,08*100))+((C/5)*(0,7*10))
Da hier aber die Werte jetzt noch auf IAQ angepasst werden sollten habe ich die Werte etwas verschoben damit ich bei ca. 500 ende:
((79-A)/(79*3,3))+((60-B)/(60*5,6))+((C/5)*4,9) oder ((79-A)/260,7)+((60-B)/336)+((C/5)*4,9)
Da jetzt die Werte offensichtlich nicht der gängigen IAQ Tabelle entsprechen habe ich meine Grenzwerte entsprechend angepasst.
Da ich hier mit recht wenig Umweltverschmutzung lebe habe ich den Grenzwert "offenes Fenster neben Sensor" als Übergangswert zur "normalen" Luftqualität angelegt.
Somit habe ich dann für AIQ folgende Grenzwerte:
500 - 301 Sehr gut
300 - 251 Normal
200 - 151 etwas Schlecht
150 - 101 Schlecht
100 - 51 sehr schlecht
50 - 0 Extrem schlecht
Ich denke mit dem Kompromiss kann ich aktuell arbeiten und suche jetzt einen Sensor der nicht "Top Secret" ist.
Falls mir jemand noch bei der Umsetzung in VIS helfen könnte wäre ich recht dankbar.
Ich dachte an ein farbig hinterlegtes Feld das den Wert anzeigt und entsprechend die Farbe ändert. Leider habe ich keine Ahnung welches Widget oder welche Kombination dazu geeignet wäre.
5779_slide1.jpg -
So, dank tatkräftiger Hilfe von Paul53 habe ich es geschafft eine Anzeigefläche in VIS zu basteln.
Das Script für die Auswertung:
const Luftguete = "javascript.1.Luftguete"/*Luftguete*/; function setQualitaet(x) { var y = 0; if(x > 50) y = 1; if(x > 100) y = 2; if(x > 150) y = 3; if(x > 200) y = 4; if(x > 300) y = 5; setState("javascript.1.Luftqualität"/*Luftqualität*/, y, true); } setQualitaet(getState(Luftguete).val); // Skriptstart on(Luftguete, function(dp) { // triggert bei Wertänderung setQualitaet(dp.state.val); });
Schreibt einen Datenpunkt "Luftqualität" in das Objekt Javasript.1.
In VIS nehme ich nun ein "Image 8" und frage dort den Wert des Datenpunkts ab.
Als Bilder verwende ich einfach 100x100 Bilder mit entsprechender Hintergrundfarbe. Optional wären auch Smilies denkbar.
Ich danke erst mal allen die sich auch Gedanken zu dem Thema gemacht haben und hoffe das meine vorübergehende Lösung für die ersten Schritte mit dem BME680 taugt.
Wenn das jemand nachbauen möchte darf er sich das gerne mitnehmen.
Das Erfassungssscript
on({id: 'sonoff.0.Umweltsensor.BME680_Gas', change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; setState("javascript.1.Luftguete"/*Luftguete*/, ((79 - getState("sonoff.0.Umweltsensor.BME680_Temperature").val) / 260.7 + (60 - getState("sonoff.0.Umweltsensor.BME680_Humidity").val) / 336 + (getState("sonoff.0.Umweltsensor.BME680_Gas").val / 5) * 4.9), true); });
Noch ein Hinweis: Alle beiden scripte laufen in der Instanz javascript.1. Bei einer Übernahme muss das eventuell an die eigene Situation angepasst werden.
-
@Chaot
Besten Dank für das Teilen deines Scriptes.Als Tipp für Newbies die evtl. genau so fragend vor dem PC sitzen und sich wundern warum immer nur 100 als Wert erscheint:
Ihr müsst den Zahlenbereich des angelegten Datenpunktes "Luftguete" entsprechend anpassen