Gemessene Luftfeuchtigkeit mittels Email versenden

Hallo

ich habe (danke der Hilfe hier im Forum) es hinbekommen das mein 8266 Emails versendet.
Jetzt habe ich folgendes Problem.

Ich Messe die Luftfeuchtigkeit mittels BME280.
Jetzt soll mein 8266 bei einer bestimmten Luftfeuchtigkeit den gemessenen Wert mir per Mail schicken. Die Mail schickt er mir auch, aber ich weiß nicht wie ich den Variable der Befehlszeile anhänge.

Habe versucht den Text

aber einfach die Variable im Befehl anhängen bekomme ich nicht hin
folgendes funktioniert nicht auch mit &

if(SMTP.Send(“Email@gmail.com”,(bme.readHumidity()))) {

#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>

#define BME_SCK 13
#define BME_MISO 12
#define BME_MOSI 11
#define BME_CS 10

#define SEALEVELPRESSURE_HPA (1013.25)

Adafruit_BME280 bme; // I2C
//Adafruit_BME280 bme(BME_CS); // hardware SPI
//Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); // software SPI

unsigned long delayTime;
// ---------------
//    Email Teil
// ---------------

#include <ESP8266WiFi.h>
#include <ESP8266SMTP.h>

const char* ssid = "Meine SSD";                    // WIFI network name
const char* password = "Mein Passwort";                // WIFI network password
uint8_t connection_state = 0;           // Connected to WIFI or not
uint16_t reconnect_interval = 10000;    // If not connected wait time to try again

uint8_t WiFiConnect(const char* ssID, const char* nPassword)
{
    static uint16_t attempt = 0;
    Serial.print("Connecting to ");
    Serial.println(ssID);
    WiFi.begin(ssID, nPassword);

    uint8_t i = 0;
    while(WiFi.status() != WL_CONNECTED && i++ < 50) {
        delay(200);
        Serial.print(".");
    }
    ++attempt;
    Serial.println("");
    if(i == 51) {
        Serial.print(F("Connection: TIMEOUT on attempt: "));
        Serial.println(attempt);
        if(attempt % 2 == 0)
            Serial.println(F("Check if access point available or SSID and Password are correct\r\n"));
        return false;
    }
    Serial.println(F("Connection: ESTABLISHED"));
    Serial.print(F("Got IP address: "));
    Serial.println(WiFi.localIP());
    return true;
}


void Awaits(uint16_t interval)
{
    uint32_t ts = millis();
    while(!connection_state){
        delay(50);
        if(!connection_state && millis() > (ts + interval)){
            connection_state = WiFiConnect(ssid, password);
            ts = millis();
        }
    }
}


// ---------------
//   ENDE Email Teil
// ---------------









void setup() {
    
    Serial.begin(9600);
    while(!Serial);    // time to get serial running
    // Serial.println(F("BME280 test"));
   
    Serial.println("Aufwachen");
    delayTime =1000;
   
        
    
    
    pinMode(D5, OUTPUT);


    unsigned status;
    
    // default settings
    // (you can also pass in a Wire library object like &Wire2)
    status = bme.begin();  
    if (!status) {
        Serial.println("Could not find a valid BME280 sensor, check wiring, address, sensor ID!");
        Serial.print("SensorID was: 0x"); Serial.println(bme.sensorID(),16);
        Serial.print("        ID of 0xFF probably means a bad address, a BMP 180 or BMP 085\n");
        Serial.print("   ID of 0x56-0x58 represents a BMP 280,\n");
        Serial.print("        ID of 0x60 represents a BME 280.\n");
        Serial.print("        ID of 0x61 represents a BME 680.\n");
        while (1);
    }
    
    Serial.println("-- Default Test --");
    delayTime = 1000;

    Serial.println();

   
    delay(delayTime);

 Serial.print("Humidity = ");
    Serial.print(bme.readHumidity());
    Serial.println(" %");
    


// ---------------
//   Email Teil
// ---------------


delay(2000);
    
    connection_state = WiFiConnect(ssid, password);

    if(!connection_state) {                  // if not connected to WIFI
        Awaits(reconnect_interval);         // constantly trying to connect
    }

    uint32_t startTime = millis();
    
    SMTP.setEmail("Test@gmail.com")
        .setPassword("Mein Passwort")
        .Subject("ESP8266SMTP Gmail test")
        .setFrom("ESP8266SMTP")
        .setForGmail();                        // simply sets port to 465 and setServer("smtp.gmail.com");                        
                                                                   // message text from http://www.blindtextgenerator.com/lorem-ipsum
    // if(SMTP.Send("EmailADR@gmail.com", "(bme.readHumidity())")) {
        if(SMTP.Send("EmailADR@gmail.com", (bme.readHumidity()))) {
        
        Serial.println(F("Message sent"));
        
    } else {
        Serial.print(F("Error sending message: "));
        Serial.println(SMTP.getError());
    }
    
    Serial.println(millis() - startTime);


// ---------------
//   ENDE Email Teil
// ---------------

   
}



void loop() { 

if (bme.readHumidity()>60)
      {

        Serial.print(bme.readHumidity());
       
       for (int i=0; i<60; i++){
  

          digitalWrite(D5, HIGH);
              delay(300);
          digitalWrite(D5, LOW);
              delay(300);
}
      //Serial.println();
      }

  if (bme.readHumidity()<60)
  {
       digitalWrite(D5, LOW);
       Serial.print("DeepSleep");
    ESP.deepSleep(1*3*1000000);
    
    delay(100);
  }

   Serial.println();
}

Da wir nicht immer deinen Sketch kennen und auch nicht nach dem letzten suchen möchten, Bitte immer den kompletten Sketch posten.

Ups... Sorry.

Habe den Code angehangen

Ok, ist der Sketch vollständig ?
Ich vermisse die loop.

habe ich ergänzt (Sitze anscheinend schon zu lange vor dem PC :slight_smile: )

Ahh….ok, Jetzt ist die loop plötzlich aufgetaucht, prima.

Nur wie soll das funktionieren, wenn du deine email in dem Setup sendest und nicht in der loop, wo du deinen Sensor erst ausliest. Du musst auch in der loop die email versenden, Nachdem du den Sensor ausgelesen hast.

netter081:
habe ich ergänzt (Sitze anscheinend schon zu lange vor dem PC :slight_smile: )

Ja, das kann negative Auswirkungen haben. :wink:

netter081:
habe ich ergänzt (Sitze anscheinend schon zu lange vor dem PC :slight_smile: )

Code nach dem Posten zu ändern ist IMO schlechter Stil. Poste bitte den vollständigen Sketch in einem neuen Posting - und lasse ihn nach dem Posten, wie er ist. Vorher solltest Du ihn allerdings noch deutlich lesbarer gestalten - überflüssige Leerzeilen weg, nachvollziehbare und einheitliche Einrückungen ... zum Einstieg kannst Du strg-T benutzen und evtl. das hier lesen.

Falls das auf die Schnelle nicht geht, gib Bescheid und hau Dich aufs Ohr. Ich bin gerade selbst reichlich übermüdet und habe nicht die Spur Lust, mich in diesem Zustand auch noch mit schlecht lesbarem Code herumzuschlagen.

Gruß

Gregor

@Dieter

habe einfach den Email Teil in die Abfrage kopiert. Aber wie erwartet, kein anderes Ergebnis.

kann ja auch eigentlich nicht, da der Befehl von mir verlangt ich soll es in "" setzten.
Der Text innerhalb der "" ist halt ein String und keine Variable.... hm...

if(SMTP.Send("EmailAdr@gmail.com", "(bme.readHumidity())")) {

Oder, sehe ich das falsch?

@Gregor

werde den Code anpassen bzw. beim nächsten mal darauf achten.

Mein Problem

netter081:
habe einfach den Email Teil in die Abfrage kopiert. Aber wie erwartet, kein anderes Ergebnis.

Das verstehe ich nicht.

Du musst eine eigene Funktion erstellen, die deine Email-Erstellung enthält.
Diese Funktion musst du aus der Loop aufrufen und darin die Daten deines Sensors zusammen setzen.

Okay

hier der Loop Code

void loop() { 

if (bme.readHumidity()>65)
      {

        Serial.print(bme.readHumidity());
       
       for (int i=0; i<60; i++){
  

          digitalWrite(D5, HIGH);
              delay(300);
          digitalWrite(D5, LOW);
              delay(300);
}
      //Serial.println();
      }

  if (bme.readHumidity()<65)
  {

delay(2000);
    
    connection_state = WiFiConnect(ssid, password);

    if(!connection_state) {                  // if not connected to WIFI
        Awaits(reconnect_interval);         // constantly trying to connect
    }

    uint32_t startTime = millis();
    
    SMTP.setEmail("Email@gmail.com")
        .setPassword("Passwort")
        .Subject("ESP8266SMTP Gmail test")
        .setFrom("ESP8266SMTP")
        .setForGmail();                        // simply sets port to 465 and setServer("smtp.gmail.com");                        
                                                                   // message text from http://www.blindtextgenerator.com/lorem-ipsum
    if(SMTP.Send("emfänger Email@gmail.com", "" & (bme.readHumidity()))) {
        
        
        Serial.println(F("Message sent"));
        
    } else {
        Serial.print(F("Error sending message: "));
        Serial.println(SMTP.getError());
    }
    
    Serial.println(millis() - startTime);


// ---------------
//   ENDE Email Teil
// ---------------



    
       digitalWrite(D5, LOW);
       Serial.print("DeepSleep");
    ESP.deepSleep(1*3*1000000);
    
    delay(100);
  }

   Serial.println();
}

Und warum postest du wieder nur einen Teil ?
Dürfen wir uns den Rest denken ?

Wieso hast du alles in die loop gepackt ?
Ich habe doch von einer eigenen Funktion geschrieben.

Ihm scheinen Eure Antworten nicht zu gefallen. Er versucht sich im Crossposting.

Gruß Tommy

Ich merke schon, das ist leider wie mit vielen Anfängern, postet man keinen fertigen Code, wird gemeckert oder beleidigt das Forum gewechselt.