NEWS
Welchen Luftgütesensor
-
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
-
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 `
Nene laut Datenblatt ist das schon zur Messung der relativen Luftfeuchte der Umgebung. Nur da ja die Luftfeuchte im Chip direkt gemessen wird muss ja auch da die Temperatur gemessen werden um richtige Werte zu liefern. Also ich wüsste im Moment nicht warum die Luftfeuchtemessung nicht stimmen sollte. Habe leider kein Referenzmessgerät für sowas. Womit hast du das überprüft?
-
So also ich hab zwischen 3-4°C zu viel,was der Sensor liefert gegenüber dem geeichten Messgerät. Gemessen habe ich direkt neben dem BME280 Board.
Bin am Überlegen für die Raumtemperatur einen speziellen Temperaturfühler zu verwenden, weiß aber noch nicht genau welchen. Hätte noch DS18B20 Fühler die ich mal testen könnte bezüglich Abweichung…
-
Womit hast du das überprüft? `
Bin zu faul zum rechnen, sonst denke ich, dass ich das rekursiv nachweisen kann:Wenn man aus relativer Feuchte und Temperatur den Feuchtegehalt in g/kg (oder g/m³) ausrechnet, so würde ich jetzt behaupten kommt bei allen Sensoren immer das selbe (richtige) heraus.
Wenn man dann nur die Temperatur korrigiert und die rF bleibt, ist auch die abs. Feuchte falsch.
Bei beiden BM280 liegen die Unterschiede in Temp und rF in etwa so, wie ich es erwarte, dass bei entsprechenden Temperturänderungen und bleibender abs. Feuchte sich die rF ändert.
Beim Wiffi ist es übrigens genauso:
Im ganzen Haus (zumindest je Etage) ist die abs. Feuchte gleich (Bei uns stehen immer alle Türen offen.im Wohnzimmer mit offenem Esszimmer steht ein WIFFI miot 3°C Korrekturfaktor. an der Anderen Wand im Esszimmer hängt ein Wandthermostat. Die rF wird vom WIFFI etwa 10 Prozentpunkte zu niedrig angegeben.
Genauso wird es sich mit Teensy und Wandthermostat verhalten:
Gruß
Rainer
-
So also ich hab zwischen 3-4°C zu viel,was der Sensor liefert gegenüber dem geeichten Messgerät. `
Das entspricht ja genau dem was ich beobachte (WIFFI und Teensies)Der Wandthermostat ist nur um einiges träger, insbesondere bei der Feuchte.
Gruß
Rainer
-
So!
Jetzt habe ich es doch getan!
Auf die Schnelle online nur die Umrechnung in g/m³ gefunden - es geht aber nicht um den absoluten Wert, sondern um's Prinzip
die absolute Feuchte im obigen Screenshot ist beim Teensy 13,3 g/m³ und beim Wandthermostat 13,1 g/m³, was absolut vergleichbar ist!
Also ist die relative Feuchte nur auf die original Temperatur korrekt.
Würde ich jetzt nur die Temperatur um 3,5K korrigieren wäre die absolute Feuchte nur noch 10,9 g/m³
Gruß
Rainer
-
Ja aber dann passt doch alles oder nicht? Die relative Feuchte ist doch auf die Temperatur des Sensors bezogen. Damit lässt sich ja dann die absolute Feuchte berechnen. Welche Temperatur im Raum ist ist dafür ja erstmal uninteressant.
Womit hast du das überprüft? `
Damit meinte ich was du als Referenz nimmst um zu sagen was richtig ist und was falsch