NEWS
Welchen Luftgütesensor
-
Hallo Maik,
@MaikB85:kann mir gar nicht vorstellen, dass die so ungenau sind `
ich hatte oben noch einen Link zu der Diskussion im HM-Forum gepostet.Dort ist wiederum ein Link zu aufwändigen Vergleichen diverser Sensoren.
Gruß
Rainer
-
-
Ich bin zuletzt hier gelandet und fand das interessant:
https://www.mikrocontroller.net/topic/398067
Also das Problem ist wohl, dass die Temperaturmessung eigentlich nicht unbedingt zur Messung der Umgebungstemperatur vorgesehen ist, sondern zur Bestimmung der Luftfeuchte dient (Temperatur des Chips). So steht es wohl auch im Datenblatt. Das würde aber heißen, dass die Luftfeuchte passen müsste. Temperatur könnte man ja dann mit einem Offset "richtig" stellen.
-
dass die Luftfeuchte passen müsste `
Das fürchte ich passt nicht.
Ich habe leider kein haarhygrometer mehr, das ich kalibrieren könnte, aber ich habe das damals mit den HM sensoten gemacht, die passten ziemlich passabel.
Dann kann der Wert jetzt nicht stimmen
Was ist denn eben mit meinem CO2 passiert?
Gruß
Rainer
-
Bezgl. Temp und Luftfeuchtigkeit. Meine test dht11 haben auch sporadisch solche spitzen.
Falls der HM Sensor keinen knick weg hat würde ich mich erstmal an dem orientieren. Das haben meine messungen der letzten 24h ergeben.
Meine DHT11/12 BMP280 haben sich nach einiger Zeit alle dem HM Sensor angenähert.
Wie oft aktualisiert ihr die Sensoren? Alles unter einer Minute ist mist musste ich feststellen. Dann messen die nicht richtig.
-
Wie oft aktualisiert ihr die Sensoren? Alles unter einer Minute ist mist musste ich feststellen. Dann messen die nicht richtig. `
Stimmt das glaube ich habe ich auch schon gelesen.Ich fürchte da sind wir weit weg. Etwa alle 7 Sekunden.
Gruß
Rainer
-
Kannst nicht auf 30 oder 60 erhöhen und nochmal über Nacht loggen?
Gesendet von meinem SM-G930F mit Tapatalk
-
Wäre kein Problem die Abfrage für den BME280 nur jede Minute auszuführen. Müsste der Code dafür geändert werden. Ich würde da jetzt nicht unbedingt das letzte Delay() zu hoch setzten weil dann alles steht für die Zeit und so auch immer wieder die Verbindung neu aufgebaut werden muss. Ist nicht so schön das müsste man dann schon richtig über eine Zeitabfrage machen. Ich kann das aber erst heute Abend ändern…
Gesendet von meinem SM-G925F mit Tapatalk
-
Ich würde da jetzt nicht unbedingt das letzte Delay() zu hoch setzten weil dann alles steht für die Zeit …das müsste man dann schon richtig über eine Zeitabfrage machen. Ich kann das aber erst heute Abend ändern... `
Danke!Als Arduinisch-Anfänger hatte ich mir da zwar schon den sketch angesehen und auch nur die Delays gesehen. aber kein allgemeines Time-setting.
ich hätte jetzt heute abend alle delays verdoppelt ohne zu wissen was ich tue
Frage an die Profis: kann man dann nicht auch in den "Settings" eine variable setzen um mal eben verschiedene Zeiten auszutesten ohne jedesmal den Code zu ändern? Oder wird da nur ein Wert geändert?
Der Drop gestern abend lag daran, dass der Teensy noch am PC hing. beim runterfahren wurde wohl kurz die Stromzuführung gekappt.
Gruß
Rainer
-
Das könnte man auch über IOBroker bzw MQTT nachher machen wenn der Code auf dem Teensy dementsprechend angepasst wird. Also dass du settings im IOBroker anlegst, die dann per MQTT an den Teensy geschickt werden. Das klappt wunderbar. Werde ich dann direkt heute Abend so machen
Gesendet von meinem SM-G925F mit Tapatalk
-
@ Rainer
Hab mal schnell die Zeitfunktion gebastelt…
Bitte mal folgenden Code ausprobieren:
! ```
#include <bme280boschwrapper.h> #include <ethernet.h> #include <stdlib.h> #include <avr pgmspace.h=""> #include <pubsubclient.h> #include "Wire.h" ! // Modultexte für MQTT Adapter char modul_name[] = "Raumsensor_Wohnzimmer"; char humidity_str[] = "/Wohnzimmer/Luftfeuchtigkeit"; char temperature_str[] = "/Wohnzimmer/Raumtemperatur"; char pressure_str[] = "/Wohnzimmer/Luftdruck"; char co2_str[] = "/Wohnzimmer/CO2"; char status_str[] = "/Wohnzimmer/iAQ_Status"; char resistance_str[] = "/Wohnzimmer/iAQ_Widerstand"; char tvoc_str[] = "/Wohnzimmer/TVOC"; ! //Setup Ethernet Library byte mac[] = { 0xAB, 0xAD, 0xBE, 0xEF, 0xEF, 0xDE }; //MAC Adresse des Ethernet Moduls IPAddress arduino_ip(192, 168, 178, 102); //IP des Teensy IPAddress server_ip(192, 168, 178, 100); //MQTT Broker (= Raspberry Pi) EthernetClient client; ! // BME280 initialisieren Bme280BoschWrapper bme280(true); unsigned long syncTime; ! //IAQ Core C Setup #define iaqaddress 0x5A ! uint16_t predict; uint8_t statu; int32_t resistance; uint16_t tvoc; ! // =========================================================== // Callback Funktion von MQTT. Die Funktion wird aufgerufen // wenn ein Wert empfangen wurde. // =========================================================== void callback(char* topic, byte* payload, unsigned int length) { //char message_buff[100]; ! //Serial.print("Nachricht erhalten mit Topic: "); //Serial.println(topic); ! //// Kopieren der Nachricht und erstellen eines Bytes mit abschließender \0 //unsigned int i = 0; //for (i = 0; i<length; 8/1883/i++)/{/message_buff[i]="payload[i];" }/;/serial.print("nachricht:/");/serial.println(message_buff);/mqtt/client/zur/kommunikation/mit/dem/server/server_ip/-/variable/des/types/byte/serveradresse/ist/der/standard/tcp/port/callback/function/wird/aufgerufen/wen/nachrichten/eintreffen/angabe/ethernet/clients/pubsubclient/mqttclient(server_ip,/1883,/callback,/client);/messdaten/vom/iaq/core/lesen/void/readallbytes()/wire.requestfrom(iaqaddress,/9);/predict="(Wire.read()" <</|/wire.read());/statu="Wire.read();" resistance="(Wire.read()" &/0x00)/(wire.read()/16)/tvoc="(Wire.read()" status/ermitteln/checkstatus()/if/(statu="=" 0x10)/serial.println("aufwärmphase...");/else/serial.println("bereit");/0x01)/serial.println("belegt");/0x80)/serial.println("fehler");/serial.println("kein/empfangen,/modul/prüfen");/setup()/ethernet.begin(mac,/arduino_ip);/delay(1000);/shield/zeit/geben/zum/initialisieren/serial.begin(115200);/wire.begin();/while/(!bme280.begini2c(0x76))/serial.println("sensor/nicht/gefunden.");/synctime="millis();" loop()/aufbau/verbindung/mqtt-broker/falls/diese/offen/ist./(!mqttclient.connected())/mqttclient.connect(modul_name);/abonieren/von/angegebenen/topic/mqttclient.subscribe("/wohnzimmer/settings/#");/schleife/für/(mqttclient.loop())/serial.println("verbunden");/unsigned/long/currentmillis="millis();" ((unsigned/long)(currentmillis/synctime)="">= 60000) //Alle 60sec ausführen { // Bosch BME280 Messwerte senden if (bme280.measure()) { char tempBuffer[10]; ! dtostrf((bme280.getTemperature() / 100.0), 2, 2, tempBuffer); mqttClient.publish(temperature_str, tempBuffer); ! delay(1000); ! dtostrf((bme280.getHumidity() / 1024.0), 3, 2, tempBuffer); mqttClient.publish(humidity_str, tempBuffer); ! delay(1000); ! dtostrf((bme280.getPressureDouble() / 100.0), 4, 2, tempBuffer); mqttClient.publish(pressure_str, tempBuffer); ! delay(1000); } else { Serial.println("Messung mit BME280 fehlgeschlagen."); } ! syncTime = currentMillis; } ! delay(1000); ! readAllBytes(); checkStatus(); ! char tempBuffer[10]; ! //CO2 Wert snprintf(tempBuffer, sizeof(tempBuffer), "%u", (predict)); mqttClient.publish(co2_str, tempBuffer); ! //Status snprintf(tempBuffer, sizeof(tempBuffer), "%u", (statu)); mqttClient.publish(status_str, tempBuffer); ! //Widerstandswert snprintf(tempBuffer, sizeof(tempBuffer), "%lu", (resistance)); mqttClient.publish(resistance_str, tempBuffer); ! //TVOC Wert snprintf(tempBuffer, sizeof(tempBuffer), "%u", (tvoc)); mqttClient.publish(tvoc_str, tempBuffer); ! delay(5000); }</length;></pubsubclient.h></avr></stdlib.h></ethernet.h></bme280boschwrapper.h>
! in der Zeile:
~~[code]~~ if ((unsigned long)(currentMillis - syncTime) >= 60000) //Alle 60sec ausführen[/code]
kannst du das Messintervall des BME280 einstellen
! Gruß Maik
! P.S. natürlich wieder die Variablen oben für dich anpassen![/i][/i][/i] -
-
-
Also ich möchte eine Platine bestellen! Schick mir mal eine PN
Gruß
Adrian
Gesendet von iPhone mit Tapatalk Pro
-
Ich habe jetzt den zweiten Sensor fertig und kann die Werte vergleichen. Leider habe ich sie an zwei verschiednen ioBroker installationen angemeldet und kann sie so nicht direkt zusammen visualisieren.
Die Werte passen jeweils zusammen, aber nicht zum HomeMatic Wandthermostaten.
Die BME liegen (auch mit 1Minute Messintervall) etwa 3°C und 4 °C höher als der WT.
Die Feuchtewerte differieren entsprechend, als ob die abs. Feuchte gemessen und über die Temperatur auf rF umgerechnet wird.
Wenn man also nur die Temperatur im Backend korrigiert bleibt die rF falsch (beim WIFFI ist es genau so).
Leider ist mir die Langzeitbeobachtung mal wieder durch zwei Drops durch das aus- und wieder anschalten des PC und anschließender (falscher) Neukalibrierung des IAQ misslungen. Was mich besonders ärgert, dass sie bis gestern abned noch ziemlich parallel liefen, jetzt nicht mehr
Was mir aber gerade beim erneuten Kalibrieren bei offenem Fenster auffiel ist dass der Widerstand beider IAQ etwa um den Faktor 4-5 unterschiedlich ist. Eine absolute Kalibrierung über den Widerstand ist somit zumindest modulübergreifend nicht möglich. Solange die relativen Werte nachher wieder passen ist ja gut.
Gästezimmer:
Daddelzimmer:
Im MOment stehen noch beide Sensoren nebeneinander direkt neben einem Wandthermostat.
Gruß
Rainer
-
Ich glaube man muss sich nochmal genau das Datenblatt vom Bosch BME280 ansehen. Dort wird sicher beschrieben sein wie der genau arbeitet. Sind auf jeden Fall ein paar Seiten [emoji16]
Ich werde auf jeden Fall wenn ich nachher Zuhause bin nochmal direkt mit einem geeichten Temperaturmessgerät vergleichen…
Gruß Maik
Gesendet von meinem SM-G925F mit Tapatalk
-
Die iAQ liegen bei Abnahme von min 10 Stk bei ca. 26,50€ pro Modul.
Gesendet von meinem SM-G925F mit Tapatalk
-
Ich werde auf jeden Fall wenn ich nachher Zuhause bin nochmal direkt mit einem geeichten Temperaturmessgerät vergleichen… `
Super!Ich habe mir gerade die geloggten Daten nochmal angesehen und wegen meines dauernden Umbauens durch Zufall doch die Daten beider IAQs und BMEs geloggt:
In deinem Screenshot ist der Widerstand auch um +/- 100000, so wie bei meinem einen Hast du auch die Daten von deinem anderen Board?
Die iAQ liegen bei Abnahme von min 10 Stk bei ca. 26,50€ pro Modul. `
Wenn das hier rund läuft hätte ich wahrscheinlich auch noch an mehreren IAQ + Platine interesse.Gruß
Rainer
-
Das zweite Modul habe ich noch nicht in Betrieb.
Gucke mir gerade das Datenblatt an.
Temperature measured by the internal temperature sensor. This temperature value depends on the PCB temperature, sensor element self-heating and ambient temperature and is typically above ambient temperature.
Damit wäre das schonmal geklärt.
Was das Messen angeht, dass macht so keinen Sinn mit der Minute warten im Programm weil der sowieso alle paar Millisekunden misst und die Werte in das Register packt. Somit macht das keinen Unterschied. Es wird so nur alle 60 Sekunden das Register abgefragt. Dann müsste man den Sensor im forced-mode betreiben wo man wirklich nur dann musst wenn man es will. Allerdings wird der normal-mode empfohlen für indoor Messungen…
Gesendet von meinem SM-G925F mit Tapatalk
-
Damit wäre das schonmal geklärt. `
…und in Verbindung mit dieser Info:
@MaikB85:dass die Temperaturmessung eigentlich nicht unbedingt zur Messung der Umgebungstemperatur vorgesehen ist, sondern zur Bestimmung der Luftfeuchte dient (Temperatur des Chips) `
Und damit wird dann wohl die rF auf dem Board gemessen??? wegen möglicher Kriechströme???Gruß
Rainer