Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

  1. ioBroker Community Home
  2. Deutsch
  3. Hardware
  4. Welchen Luftgütesensor

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.2k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.9k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.2k

Welchen Luftgütesensor

Geplant Angeheftet Gesperrt Verschoben Hardware
226 Beiträge 16 Kommentatoren 53.7k Aufrufe 3 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • M Offline
    M Offline
    MaikB85
    schrieb am zuletzt editiert von
    #170

    So hier mal die geänderte Version. Wieder oben die Variablen für IP-Adresse usw. anpassen.

    ! ```
    `//#include <bme280boschwrapper.h>
    #include <ethernet.h>
    #include <stdlib.h>
    #include <avr pgmspace.h="">
    #include <pubsubclient.h>
    #include "Wire.h"
    ! #include <bme280_mod-1022.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/16/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");/need/to/read/the/nvm/compensation/parameters/bme280.readcompensationparams();/example/for/"indoor/navigation"/we'll/switch/into/normal/mode/regular/automatic/samples/bme280.writestandbytime(tsb_0p5ms);/tsb="0.5ms" bme280.writefiltercoefficient(fc_16);/iir/filter/coefficient/bme280.writeoversamplingpressure(os16x);/pressure/x16/bme280.writeoversamplingtemperature(os2x);/temperature/x2/bme280.writeoversamplinghumidity(os1x);/humidity/x1/bme280.writemode(smnormal);/(bme280.ismeasuring())/out/data/must/do/this/before/calling/getxxxxx/routines/bme280.readmeasurements();/char/tempbuffer[10];/dtostrf(bme280.gettemperaturemostaccurate(),/2,/tempbuffer);/mqttclient.publish(temperature_str,/delay(500);/dtostrf(bme280.gethumiditymostaccurate(),/3,/mqttclient.publish(humidity_str,/dtostrf(bme280.getpressuremostaccurate(),/4,/mqttclient.publish(pressure_str,/*unsigned/long/currentmillis="millis();" ((unsigned/long)(currentmillis/synctime)="">= 60000) //Alle 15sec 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;></bme280_mod-1022.h></pubsubclient.h></avr></stdlib.h></ethernet.h></bme280boschwrapper.h>`
    ! Gruß Maik[/i][/i][/i]

    1 Antwort Letzte Antwort
    0
    • K Offline
      K Offline
      klassisch
      Most Active
      schrieb am zuletzt editiert von
      #171

      Vielen Dank!

      erste schnelle RM:

      BME280.writeMode(normal);
      

      ist das böse Teil-

      BME280.writeMode(smForced);
      ````ist brav.
      
      example for indoor navigation liest den Drucksensor sehr genau aus und macht den Sensor warm.
      
      Ich arbeite mit
      

      // Need to turn on 1x oversampling, default is os_skipped, which means it doesn't measure anything
      BME280.writeOversamplingPressure(os1x); // 1x over sampling (ie, just one sample)
      BME280.writeOversamplingTemperature(os1x); // 1x over sampling (ie, just one sample)
      BME280.writeOversamplingHumidity(os1x); // 1x over sampling (ie, just one sample)
      measuringTime = (int) (0.5 + (1.25 + (2.3 * 1) + (2.3 * 1 + 0.575) + (2.3 * 1 + 0.575))); // measuringTime is unsigned long
      /* in forced mode with oversampling=1 in all 3 values the max measuring time should be < 22.8ms
      in forced mode with all oversamplings to x16 (max value) the measring time should be <112,8
      for other oversampling settings refer Bosch datasheet chapter 9.1 Measurement time
      measuringTime = 1.25+(2.3temp_os) + (2.3humid_os + 0.575) + (2.3*press_os + 0.575) */

      // init a forced sample. After taking the measurement the chip goes back to sleep
      BME280.writeMode(smForced);
      delay(measuringTime + 25); // wait until measurement is done. With oversampling=1 in all 3 values the max measuring time should be < 22.8ms
      // for other oversampling settings refer Bosch datasheet chapter 9.1 Measurement time
      BME280.readMeasurements();
      if (BME280.isMeasuring()) { // this should not happen becaus wait time is long enough
      BME280ReadError = 1;

      1 Antwort Letzte Antwort
      0
      • M Offline
        M Offline
        MaikB85
        schrieb am zuletzt editiert von
        #172

        okay ich hatte jetzt einfach die settings für Innenraum Messung empfohlen von Bosch

        Wie hast du dann die settings für oversampling usw. ?

        1 Antwort Letzte Antwort
        0
        • K Offline
          K Offline
          klassisch
          Most Active
          schrieb am zuletzt editiert von
          #173

          habs oben nachgetragen

          Oder um es hier komplett zu machen:

          ! ````
          void initSensorBME280()
          {
          /*********** BME280 setup *********** /
          ! /
          excerpt from Bosch datasheet chapter 3.5.1 Weather monitoring
          Table 7: Settings and performance for weather monitoring
          Suggested settings for weather monitoring
          Sensor mode forced mode, 1 sample / minute
          Oversampling settings pressure *1, temperature *1, humidity *1
          IIR filter settings filter off
          Performance for suggested settings
          Current consumption 0.16 μA
          RMS Noise 3.3 Pa / 30 cm, 0.07 %RH
          Data output rate 1/60 Hz

          • ** End excerpt from Bosch datasheet chapter 3.5.1 Weather monitoring **/

          ! byte chipID = 0; // for BME280 Cip IF
          chipID = BME280.readChipId();
          #ifdef FSDEBUG
          DBG_OUTPUT_PORT.print (F("BME280 Chip Id (0x): "));
          DBG_OUTPUT_PORT.println (chipID, HEX);
          #endif // FSDEBUG
          // need to read the NVM compensation parameters
          BME280.readCompensationParams();
          ! // Need to turn on 1x oversampling, default is os_skipped, which means it doesn't measure anything
          BME280.writeOversamplingPressure(os1x); // 1x over sampling (ie, just one sample)
          BME280.writeOversamplingTemperature(os1x); // 1x over sampling (ie, just one sample)
          BME280.writeOversamplingHumidity(os1x); // 1x over sampling (ie, just one sample)
          measuringTime = (int) (0.5 + (1.25 + (2.3 * 1) + (2.3 * 1 + 0.575) + (2.3 * 1 + 0.575))); // measuringTime is unsigned long
          /* in forced mode with oversampling=1 in all 3 values the max measuring time should be < 22.8ms
          in forced mode with all oversamplings to x16 (max value) the measring time should be <112,8
          for other oversampling settings refer Bosch datasheet chapter 9.1 Measurement time
          measuringTime = 1.25+(2.3temp_os) + (2.3humid_os + 0.575) + (2.3*press_os + 0.575) /
          ! // init a forced sample. After taking the measurement the chip goes back to sleep
          BME280.writeMode(smForced);
          delay(measuringTime + 25); // wait until measurement is done. With oversampling=1 in all 3 values the max measuring time should be < 22.8ms
          // for other oversampling settings refer Bosch datasheet chapter 9.1 Measurement time
          BME280.readMeasurements();
          if (BME280.isMeasuring()) { // this should not happen becaus wait time is long enough
          BME280ReadError = 1;
          #ifdef FSDEBUG
          DBG_OUTPUT_PORT.println(F("Mode has been written down to BME280"));
          DBG_OUTPUT_PORT.println(F("BME280 Measuring or busy..."));
          #endif // FSDEBUG
          delay(measuringTime + 300);
          if (BME280.isMeasuring()) { // another try failed
          BME280ReadError = 1;
          #ifdef FSDEBUG
          DBG_OUTPUT_PORT.print (F(" Contact to sensor has been lost no further transmission to CCU "));
          #endif //FSDEBUG
          } // end if 2n try failed
          else {
          BME280ReadError = 0;
          }
          ! } // end if 1st trial to measure failed
          else {
          BME280ReadError = 0;
          #ifdef FSDEBUG
          DBG_OUTPUT_PORT.println(F("BME280 init Done!"));
          #endif // FSDEBUG
          ! } // end else => no sensorReadoutError
          ! /
          ******************* END Setup BME280 **************************/
          } // end void initSensorBME280
          ! ````

          1 Antwort Letzte Antwort
          0
          • HomoranH Nicht stören
            HomoranH Nicht stören
            Homoran
            Global Moderator Administrators
            schrieb am zuletzt editiert von
            #174

            Danke!

            ist jetzt bei einem geflasht, der andere hat noch die alte library

            In der Zwischenzeit ist mir noch etwas aufgefallen.
            144_sensor_vergleich04.jpg

            ich hatte schon vorher den Verdacht, jetzt war es wieder.

            In der Phase wo der/die IAQ kalibrieren haben anscheinend die Werte ein höheres Rauschen und die BME-Werte scheinen dann auch stärker voneionander abzuweichen.

            ist die Kalibrierung erst einmal abgeschlossen (=Fenster zu) werden die Kurven wieder ruhiger und die BME-Werte passen sich wieder aneinender an.

            Gruß

            Rainer

            kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

            Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

            der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

            1 Antwort Letzte Antwort
            0
            • M Offline
              M Offline
              MaikB85
              schrieb am zuletzt editiert von
              #175

              achso gut. dann muss ich aber wieder die zeitliche geschichte mit rein nehmen alle 60sek. weil bei forced macht er ja nur eine Messung

              1 Antwort Letzte Antwort
              0
              • K Offline
                K Offline
                klassisch
                Most Active
                schrieb am zuletzt editiert von
                #176

                Ja, genau. Bei forced mißt er nur auf Befehl. Bei normal immer.

                Habe hier mal meine etwas überkandidelte weil fehlerabfangende Init:

                ! ````
                void initSensorBME280()
                {
                /*********** BME280 setup *********** /
                ! /
                excerpt from Bosch datasheet chapter 3.5.1 Weather monitoring
                Table 7: Settings and performance for weather monitoring
                Suggested settings for weather monitoring
                Sensor mode forced mode, 1 sample / minute
                Oversampling settings pressure *1, temperature *1, humidity *1
                IIR filter settings filter off
                Performance for suggested settings
                Current consumption 0.16 μA
                RMS Noise 3.3 Pa / 30 cm, 0.07 %RH
                Data output rate 1/60 Hz

                • ** End excerpt from Bosch datasheet chapter 3.5.1 Weather monitoring **/

                ! byte chipID = 0; // for BME280 Cip IF
                chipID = BME280.readChipId();
                #ifdef FSDEBUG
                DBG_OUTPUT_PORT.print (F("BME280 Chip Id (0x): "));
                DBG_OUTPUT_PORT.println (chipID, HEX);
                #endif // FSDEBUG
                // need to read the NVM compensation parameters
                BME280.readCompensationParams();
                ! // Need to turn on 1x oversampling, default is os_skipped, which means it doesn't measure anything
                BME280.writeOversamplingPressure(os1x); // 1x over sampling (ie, just one sample)
                BME280.writeOversamplingTemperature(os1x); // 1x over sampling (ie, just one sample)
                BME280.writeOversamplingHumidity(os1x); // 1x over sampling (ie, just one sample)
                measuringTime = (int) (0.5 + (1.25 + (2.3 * 1) + (2.3 * 1 + 0.575) + (2.3 * 1 + 0.575))); // measuringTime is unsigned long
                /* in forced mode with oversampling=1 in all 3 values the max measuring time should be < 22.8ms
                in forced mode with all oversamplings to x16 (max value) the measring time should be <112,8
                for other oversampling settings refer Bosch datasheet chapter 9.1 Measurement time
                measuringTime = 1.25+(2.3temp_os) + (2.3humid_os + 0.575) + (2.3*press_os + 0.575) /
                ! // init a forced sample. After taking the measurement the chip goes back to sleep
                BME280.writeMode(smForced);
                delay(measuringTime + 25); // wait until measurement is done. With oversampling=1 in all 3 values the max measuring time should be < 22.8ms
                // for other oversampling settings refer Bosch datasheet chapter 9.1 Measurement time
                BME280.readMeasurements();
                if (BME280.isMeasuring()) { // this should not happen becaus wait time is long enough
                BME280ReadError = 1;
                #ifdef FSDEBUG
                DBG_OUTPUT_PORT.println(F("Mode has been written down to BME280"));
                DBG_OUTPUT_PORT.println(F("BME280 Measuring or busy..."));
                #endif // FSDEBUG
                delay(measuringTime + 300);
                if (BME280.isMeasuring()) { // another try failed
                BME280ReadError = 1;
                #ifdef FSDEBUG
                DBG_OUTPUT_PORT.print (F(" Contact to sensor has been lost no further transmission to CCU "));
                #endif //FSDEBUG
                } // end if 2n try failed
                else {
                BME280ReadError = 0;
                }
                ! } // end if 1st trial to measure failed
                else {
                BME280ReadError = 0;
                #ifdef FSDEBUG
                DBG_OUTPUT_PORT.println(F("BME280 init Done!"));
                #endif // FSDEBUG
                ! } // end else => no sensorReadoutError
                ! /
                ******************* END Setup BME280 **************************/
                } // end void initSensorBME280
                ! ````

                1 Antwort Letzte Antwort
                0
                • M Offline
                  M Offline
                  MaikB85
                  schrieb am zuletzt editiert von
                  #177

                  Okay so dann:

                  ! ```
                  `//#include <bme280boschwrapper.h>
                  #include <ethernet.h>
                  #include <stdlib.h>
                  #include <avr pgmspace.h="">
                  #include <pubsubclient.h>
                  #include "Wire.h"
                  ! #include <bme280_mod-1022.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
                  {
                  // need to read the NVM compensation parameters
                  BME280.readCompensationParams();
                  ! // Example for "indoor navigation"
                  // We'll switch into normal mode for regular automatic samples
                  ! /*
                  BME280.writeStandbyTime(tsb_0p5ms); // tsb = 0.5ms
                  BME280.writeFilterCoefficient(fc_16); // IIR Filter coefficient 16
                  BME280.writeOversamplingPressure(os16x); // pressure x16
                  BME280.writeOversamplingTemperature(os2x); // temperature x2
                  BME280.writeOversamplingHumidity(os1x); // humidity x1

                    BME280.writeMode(smNormal);
                  

                  */

                  ! // Need to turn on 1x oversampling, default is os_skipped, which means it doesn't measure anything
                  BME280.writeOversamplingPressure(os1x); // 1x over sampling (ie, just one sample)
                  BME280.writeOversamplingTemperature(os1x);
                  BME280.writeOversamplingHumidity(os1x);

                    // example of a forced sample.  After taking the measurement the chip goes back to sleep
                    BME280.writeMode(smForced);
                  
                    while (BME280.isMeasuring()) 
                    {    
                      //
                    }
                  
                    // read out the data - must do this before calling the getxxxxx routines
                    BME280.readMeasurements();
                  

                  ! char tempBuffer[10];
                  ! dtostrf(BME280.getTemperatureMostAccurate(), 2, 2, tempBuffer);
                  mqttClient.publish(temperature_str, tempBuffer);
                  ! delay(500);

                    dtostrf(BME280.getHumidityMostAccurate(), 3, 2, tempBuffer);
                    mqttClient.publish(humidity_str, tempBuffer);
                  

                  ! delay(500);
                  ! dtostrf(BME280.getPressureMostAccurate(), 4, 2, tempBuffer);
                  mqttClient.publish(pressure_str, tempBuffer);
                  ! delay(500);
                  ! syncTime = currentMillis;
                  }

                  ! /*unsigned long currentMillis = millis();
                  if ((unsigned long)(currentMillis - syncTime) >= 60000) //Alle 15sec 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;></bme280_mod-1022.h></pubsubclient.h></avr></stdlib.h></ethernet.h></bme280boschwrapper.h>`
                  ! Aber letztendlich bringt das alles nix... Werte sind immer noch so.
                  ! Rainer das macht ja auch Sinn wenn du das Fenster öffnet oder nicht? Wenn da erstmal andere Luft ankommt.
                  ! Ich bin jetzt erstmal gespannt auf den neuen Sensor was der dann anzeigt. Ist auf jeden Fall schon mal als verschickt markiert...[/i][/i][/i]

                  1 Antwort Letzte Antwort
                  0
                  • HomoranH Nicht stören
                    HomoranH Nicht stören
                    Homoran
                    Global Moderator Administrators
                    schrieb am zuletzt editiert von
                    #178

                    @MaikB85:

                    das macht ja auch Sinn wenn du das Fenster öffnet oder nicht? Wenn da erstmal andere Luft ankommt. `
                    Aber die Sensoren stehen etwa eine Platinenbreite auseinander. die sollten schon den gleichen Wert haben (?)

                    Oder meinst du selbst die geringste Luftbewegung könnte das auslösen?

                    Gruß

                    Rainer

                    kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                    Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                    der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                    1 Antwort Letzte Antwort
                    0
                    • M Offline
                      M Offline
                      MaikB85
                      schrieb am zuletzt editiert von
                      #179

                      @Homoran:

                      @MaikB85:

                      das macht ja auch Sinn wenn du das Fenster öffnet oder nicht? Wenn da erstmal andere Luft ankommt. `
                      Aber die Sensoren stehen etwa eine Platinenbreite auseinander. die sollten schon den gleichen Wert haben (?)

                      Oder meinst du selbst die geringste Luftbewegung könnte das auslösen?

                      Gruß

                      Rainer `

                      ja weiß ich nicht vielleicht… dann haben beide vielleicht noch unterschiedliche Genauigkeiten gegeneinander. Weiß ja nicht wie weit das schwankt bei dir

                      Aber ich finde das ja schon faszinierend, dass wir beide in etwa die gleiche Abweichung der Temperatur haben. Wo der Chinese die wohl her hatte...

                      [EDIT] Um nochmal auf das Thema Luftfeuchte zurück zu kommen hier:https://www.mikrocontroller.net/topic/398067 wird auch beschrieben mal den Abgleich mit einer gesättigten Kochsalzlösung zu machen. Soll wohl eine relativ genaue Referenz sein.

                      1 Antwort Letzte Antwort
                      0
                      • M Offline
                        M Offline
                        MaikB85
                        schrieb am zuletzt editiert von
                        #180

                        Oh man ich hab eine Lösung gefunden…(Nachdem auf microcontroller.net jemand etwas von störungen geschrieben hat)

                        Habe ein 20cm Kabel zwischen BME280 und Platine und siehe da Temperatur passt. Irgendwas stört den Sensor...

                        Habe jetzt knapp 24°C. vorher über 28°C...

                        Der Fehler ist eindeutig und reproduzierbar. sobald ich mit dem Sensor wieder nahe an die Platine gehe steigt die Temperatur. Hmm wie löst man das jetzt

                        1 Antwort Letzte Antwort
                        0
                        • K Offline
                          K Offline
                          klassisch
                          Most Active
                          schrieb am zuletzt editiert von
                          #181

                          Gerade wollte ich fragen wie Eure Aufbauten aussehen. Also Abstand zu anderen Wärmequellen.

                          Ich habe bis ca. 50cm Kabel zwischen BME und WMos. Vorwiegend aus thermischen Gründen wie oben schon geschrieben.

                          Ich verwende 4-pol Telefonleitung.

                          Und zur Feuchtekalibrierung: Siehe

                          http://kandrsmith.org/RJS/Misc/hygrometers.html

                          Hat mich schwer beeindruckt…

                          1 Antwort Letzte Antwort
                          0
                          • M Offline
                            M Offline
                            MaikB85
                            schrieb am zuletzt editiert von
                            #182

                            @klassisch:

                            Gerade wollte ich fragen wie Eure Aufbauten aussehen. Also Abstand zu anderen Wärmequellen.

                            Ich habe bis ca. 50cm Kabel zwischen BME und WMos. Vorwiegend aus thermischen Gründen wie oben schon geschrieben.

                            Ich verwende 4-pol Telefonleitung.

                            Und zur Feuchtekalibrierung: Siehe

                            http://kandrsmith.org/RJS/Misc/hygrometers.html

                            Hat mich schwer beeindruckt… `

                            Wobei ich mir jetzt nicht unbedingt sicher bin ob es an der Platine "wärmer" ist. Vielleicht sind das auch Störfrequenzen. Werde da die Tage nochmal ein paar Sachen testen.

                            Sensor wohl umsonst bestellt… :cry:

                            1 Antwort Letzte Antwort
                            0
                            • K Offline
                              K Offline
                              klassisch
                              Most Active
                              schrieb am zuletzt editiert von
                              #183

                              Jedenfalls Glückwunsch zum gelungenen Troubleshooting!
                              @MaikB85:

                              Sensor wohl umsonst bestellt… :cry: ` Nie! Noch ein WeMos dran, AP-Gehäuse Billignetzteil und fertig ist der Temperatursensor.

                              Der BME280 ist schon ein ordentlicher Sensor.

                              Meine erste Spekulation geht in Richtung thermischer Beeinflussung.

                              Kann aber da wenig dazu sagen, weil ich von Anfang an die Teile an eine 20cm bis 50cm lange Kabelpeitsche angeschlossen habe. Sieht man auch auch auf den Bildern im HM-Thread. Die WeMos ziehen 350 bis 400mW und das heizt schon auf. Insofern gab es bei mir da nie etwas nachzudenken, die Teile mußten einfach raus.

                              Ein I2C sollte nicht zu lang sein. Also muß man auf die Leitung achten. Also habe ich eine Stern-Vierer-Verseilung gewählt - zumal die als Telefonleitung auch billig erhältlich ist. Bei Pollin als Restposten https://www.pollin.de/p/telefon-install … 3-m-541988

                              Und wenn man schon eine lange Leitung hat, dann sollte auch ein Kondensator über der Versorgung sein. Also einen Tantal oder einen Kerko 10µF http://www.aliexpress.com/item/100pcs-lot-Multilayer-ceramic-capacitor-10uF-106-50V-106k/32455168081.html, wobe meine noch 0,4 EUR teurer waren. Egal waren schon sehr hilfreich, genauso wie die SMD Pendants.

                              Insofern hatte ich noch nie so ein Störproblem und kann damit auch nicht sagen woher es kommt. Wenn ich mch recht erinnere habe ich irgendwann mal routinemäßig die Versorgung und den I2C oszilloskopiert und das sah i.O. aus. Da bei den WeMos eh alles auf 3.3V läuft, gab es auch damit keine Probleme.

                              1 Antwort Letzte Antwort
                              0
                              • M Offline
                                M Offline
                                MaikB85
                                schrieb am zuletzt editiert von
                                #184

                                Stimmt der ist nicht weg.

                                Ich hoffe nicht, dass es ein thermisches Problem ist, weil dies mein ganzes Konzept durcheinander bringt. Wollte alles in eine Unterputzdose packen und dann eine Lautspecherabdeckung drüber. Aber wenn sich das da so erwärmt müssen die Sensoren davon weg. Vieleicht kann ich die einfach mit kurzen Leitungen nach vorne zur Abdeckung hin führen. Der Teensy läuft übrigens auch nur mit 3,3V.

                                Ich habe jetzt einfach solche Verlängerungsleitung benutzt: http://www.ebay.de/itm/40pcs-2-54mm-21c … 1913639446

                                Hatte ich noch rumliegen und war eine schnelle Möglichkeit das zu testen.

                                1 Antwort Letzte Antwort
                                0
                                • HomoranH Nicht stören
                                  HomoranH Nicht stören
                                  Homoran
                                  Global Moderator Administrators
                                  schrieb am zuletzt editiert von
                                  #185

                                  Kaum ist man mal zum Grillen im Garten kommt die Wahrheit ans Licht :D

                                  @MaikB85:

                                  Vielleicht sind das auch Störfrequenzen. `
                                  Das war ja auch meine Vermutung, wenn da etwas synchron mit Schwankungen bei IAQ auftrat.

                                  @MaikB85:

                                  Ich hoffe nicht, dass es ein thermisches Problem ist, weil dies mein ganzes Konzept durcheinander bringt. `
                                  meins dann auch, ich wollte die nächsten Platinen sogar ohne Buchsenleisten aufbauen um Platz zu sparen.

                                  Das Ergebnis soll ja auch wohnraumfreundlich aussehen.

                                  @klassisch:

                                  !
                                  @MaikB85 :

                                  Sensor wohl umsonst bestellt… `
                                  Nie! Noch ein WeMos dran, AP-Gehäuse Billignetzteil und fertig ist der Temperatursensor.

                                  Der BME280 ist schon ein ordentlicher Sensor. `

                                  Sonst nehme ich sie dir ab, brauche dann aber eine andere Noob-freundliche Lösung

                                  @klassisch:

                                  Meine erste Spekulation geht in Richtung thermischer Beeinflussung. `
                                  @Maik: Was passiert denn wenn du den Sensor abgesetzt in die nähe der Paltine bringst.

                                  ich kann nicht glauben, dass der BME, der ja etwa 15mm über der Platine schwebt Probleme mit der Wärme hat. Die nächste Wärmequelle wäre der Teensy, der noch mal 15mm auf der anderen Seite der Platine auf Sockeln steh, da ist ja eher der IAQ 15mm seitlich neben dem BMEnoch dichter dran (und sendet Störungen ???)

                                  Gruß

                                  Rainer

                                  kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                                  Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                                  der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                                  1 Antwort Letzte Antwort
                                  0
                                  • K Offline
                                    K Offline
                                    klassisch
                                    Most Active
                                    schrieb am zuletzt editiert von
                                    #186

                                    Teensy war mir kein Begriff. Sehe, da steckt eine ganze Famile dahinter. Schön viele i/Os - daran krankt der WeMos etwas. Und es gibt 2 (teure) Derivate mit Ethernet. Das wäre für mich auch praktisch weil ich einige Positionen habe, wo nebendran eine Ethernetleitung und sogar Switch ist und ich arbeite mit separatem Netzteil und WLAN. Aber der Preis ist abschreckend im Vergleich zum WeMos und der ESP32 läuft schon langsam an.

                                    Habe aber nicht gefunden, wie die Boards versorgt werden und wieviel Strom die kompletten Boards ziehen.

                                    Vielleicht kannst Du das etwas entschärfen, wenn Du das Netzteil auslagerst und direkt 3.3V einspeist. Der WeMos hat einen 5V->3.3V Linearregler an Bord, so etwas ist thermisch unschön.

                                    Eine günstige externe Versorgung könnte sein: https://www.pollin.de/p/steckernetzteil … -mm-351843 und https://de.aliexpress.com/item/5Pcs-TL0 ... 79397.html . Aber vorsicht, man muß die Bahn zum Trimmer aufkratzen und dann die Lötbrücke setzen.

                                    @Rainer: Mit den WeMos gibt es etliche einfache Lösungen....

                                    1 Antwort Letzte Antwort
                                    0
                                    • M Offline
                                      M Offline
                                      MaikB85
                                      schrieb am zuletzt editiert von
                                      #187

                                      Werde die Tage nochmal gucken nach einer geeigneten Position des BME280. Schon 10mm mehr Abstand zur Platine macht einen deutlichen Unterschied bei der Temperatur. Kann so noch nicht ganz eingrenzen was die Ursache ist.

                                      Denke aber auf jeden Fall dass es dafür eine Lösung geben wird.

                                      Schön wäre jetzt eine gute Wärmebildkamera. Ich gucke Mal ob ich die aus der Firma nochmal ausleihen kann…

                                      1 Antwort Letzte Antwort
                                      0
                                      • K Offline
                                        K Offline
                                        klassisch
                                        Most Active
                                        schrieb am zuletzt editiert von
                                        #188

                                        Oder Testo 845 damit kann man auch punktgenau messen .

                                        Gesendet von meinem ZTE A2016 mit Tapatalk

                                        1 Antwort Letzte Antwort
                                        0
                                        • M Offline
                                          M Offline
                                          MaikB85
                                          schrieb am zuletzt editiert von
                                          #189

                                          Habe mir das ganze Gerade Mal mit der Fluke Wärmebildkamera angesehen. Der Prozessor des Teensy ist wie erwartet am wärmsten mit ca. 45°C. Ich denke das wird auch die Hauptursache sein. Da die Platine ja auch nicht sehr groß ist wird sich die Wärme über die Leiterbahnen weiter verteilen. Die Platine selber ist bei ca. 28°C laut Kamera. Da der BME280 nur ca 10mm Abstand zur Platine hat erklärt dass auch die erhöhte Temperatur. Also man wird da nicht drum rum kommen und den BME280 etwas auf Abstand zu bringen.

                                          Der BME280 wird übrigens kein bisschen warm. Der iAQ schon ein wenig aber das ist ja klar.

                                          Ich habe mir auch Mal den Spannungsregler angesehen. Bei 24V ist die Temperatur etwa bei 38°C. Bei 12V sind es locker 5°C weniger. Also werde ich definitiv, allein schon der Effizienz wegen, auf 12V Gleichstromnetz gehen.

                                          Morgen werde ich mal ein paar Bilder dazu posten.

                                          Gruß Maik

                                          Gesendet von meinem SM-G925F mit Tapatalk

                                          1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          776

                                          Online

                                          32.4k

                                          Benutzer

                                          81.4k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe