NEWS
[gelöst] BME 680 Werte in ioBroker
-
Ich habe mir ein kleines Bastelopbjekt besorgt:
Einen Sonoff DEV mit Tasmota 6.0.0 Firmware
Dazu einen BME 680
Unter Tasmota bzw. der Weboberfläche erhalte ich vom BME 680 einen Widerstandswert für den Gassensor.
Wie schaffe ich es den Widerstandswert in den ioBroker zu bekommen?
Laut Konsole wird der scheinbar mit MQTT versendet, aber in den Objekten erscheinen nur Temperatur, Luftfeuchte und Luftdruck.
22:02:23 MQT: tele/sonoff/STATE = {"Time":"2018-06-07T22:02:23","Uptime":"0T00:20:54","Vcc":3.190,"Wifi":{"AP":1,"SSId":"xxxx","RSSI":92,"APMac":"08:8A:20:D4:C7:3E"}} 22:02:23 MQT: tele/sonoff/SENSOR = {"Time":"2018-06-07T22:02:23","BME680":{"Temperature":28.9,"Humidity":52.1,"Pressure":985.7,"Gas":165.32},"TempUnit":"C"}
Zweite Frage:
Hat den schon jemand im Einsatz und eventuell schon ein Projekt gestartet?
-
Ich wollte auch mal einen GPIO Pin am Sonoff nutzen - ich habe das dann nur geschafft indem ich den MQTT Adapter installiert habe - dort waren die Werte dann … wäre aber schöner wenn das im Sonoff Adapter auch ankommen würde.
-
lies mal hier => https://github.com/ioBroker/ioBroker.sonoff/issues/43
autogenerate objects test version
-
P_E_R_F_E_K_T!
Herzlichen Dank. Genau was ich gesucht habe.
Jetzt noch die Werte umrechnen und es sollte einen guten Umweltsensor abgeben. Das wird zwar noch eine Nuss, aber ich habe ja Zeit.
-
Hallo Chaot,
Stehe vor dem gleichen Problem mit dem BME680. Bis auf Gas werden mir die Werte im Sonoff Adapter angezeigt.
Den o.g. link habe ich gelesen finde dort allerdings keine Antwort mit der ich was anfangen kann.
Wie hast Du das gelöst?
@Chaot:P_E_R_F_E_K_T!
Herzlichen Dank. Genau was ich gesucht habe.
Jetzt noch die Werte umrechnen und es sollte einen guten Umweltsensor abgeben. Das wird zwar noch eine Nuss, aber ich habe ja Zeit. `
-
Ok
das wird etwas ausführlicher:
Das Script für den Sensor:
Ich werte zunächst die einzelnen Sensorwerte aus und beschreibe damit einen Datenpunkt:
Luftdruck
! ````
const Druck = "sonoff.0.Umweltsensor.BME680_SeaPressure"/Umweltsensor BME680 SeaPressure/;
! function setLuftdruck(x) {
var y = 0;
if(x > 980) y = 1;
if(x > 1000) y = 2;
if(x > 1020) y = 3;
if(x > 1040) y = 4;
if(x > 1080) y = 5;
setState("javascript.1.Luftdruck"/Luftdruck/,y, true);
}
! setLuftdruck(getState(Druck).val); // Skriptstart
! on(Druck, function(dp) { // triggert bei Wertänderung
setLuftdruck(dp.state.val);
});Luftfeuchte >! ```` const Feuchte = "sonoff.0.Eingang.SI7021_Humidity"/*Eingang SI7021 Humidity*/; >! function setLuftfeuchte(x) { var y = 0; if(x > 20) y = 1; if(x > 40) y = 2; if(x > 60) y = 3; if(x > 80) y = 4; if(x > 100) y = 5; setState("javascript.1.Luftfeuchte"/*Luftfeuchte*/, y, true); } >! setLuftfeuchte(getState(Feuchte).val); // Skriptstart >! on(Feuchte, function(dp) { // triggert bei Wertänderung setLuftfeuchte(dp.state.val); });
Temperatur
! ````
const Lufttemperatur = "sonoff.0.Eingang.SI7021_Temperature"/Eingang SI7021 Temperature/;
! function setTemperatur(x) {
var y = 0;
if(x > -10) y = 1;
if(x > 10) y = 2;
if(x > 18) y = 3;
if(x > 26) y = 4;
if(x > 34) y = 5;
setState("javascript.1.Lufttemperatur"/Lufttemperatur/, y, true);
}
! setTemperatur(getState(Lufttemperatur).val); // Skriptstart
! on(Lufttemperatur, function(dp) { // triggert bei Wertänderung
setTemperatur(dp.state.val);
});Daraus berechne ich den Wert der Luftgüte: >! ```` 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); });
und wandle das dann noch in eine Ampelanzeige um:
! ````
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);
});bzw. generiere ich aus den Werten 1-5 mit dem Widget eine Farbige Anzeige. Inwieweit die Werte jetzt genau den Vorgaben entsprechen kann ich dir leider nicht beantworten, da es scheinbar ein Staatsgeheimnis ist wie die Luftgüte wirklich berechnet wird. Dazu kommt der "hochgeheime" BME680 dessen Werte auch nicht wirklich sauber dokumentiert sind. Ich denke man könnte das alles in ein Script packen, aber da habe ich mal die Finger davon gelassen. Da gibt es hier Spezialisten die das mit einem Blinzeln erledigen. Ich persönlich bin froh das es so verlässlich läuft.