INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
DeepSleep und MQTT Probleme
26.02.2020, 22:21 (Dieser Beitrag wurde zuletzt bearbeitet: 26.02.2020 22:46 von N1d45.)
Beitrag #1
DeepSleep und MQTT Probleme
Ich bin dabei mir einen Temperatur/Feuchtigkeit/... Sensor zu basteln.

Sensor Daten auslesen und per MQTT senden klappt eigentlich.

Code:
#include <Wire.h>                               // for I2C (BME280)
#include <SPI.h>                                // for SPI (BME280)
#include <Adafruit_Sensor.h>                    // for BME280
#include <Adafruit_BME280.h>                    // for BME280
#include <ESP8266WiFi.h>                        // ESP8266 WLAN Bibliothek
#include <PubSubClient.h>                       // MQTT Biblithek

#define SEALEVELPRESSURE_HPA (1013.25)          // NN Druck (Meereshöhe)

#define Temperatur_Topic  "wemos/wz/sensor/temperature"
#define Pressure_Topic    "wemos/wz/sensor/pressure"
#define Altitude_Topic    "wemos/wz/sensor/altitude"
#define Humidity_Topic    "wemos/wz/sensor/humidity"

Adafruit_BME280 bme;                            // BME280 also I2C bei Adafruit_BME280.h initialisieren
WiFiClient espClient;                           // WLAN initialisierung
PubSubClient client(espClient);                 // MQTT initialisierung

const char* ssid = "";
const char* password = "";
const char* mqtt_server = "";     // IP des MQTT Brokers (z.b. IP des Raspberry PI)
uint16_t    port = 1883;
char*       clientName = "Sensor1";

unsigned long delayTime;                        // Pause fürs Loop, kann später entfernt werden

void setup() {
  Serial.begin(9600);
  while(!Serial);                               // time to get serial running

  unsigned status;    
  status = bme.begin(0x76);                     // SDA, SCL, I2C Adress

  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) delay(10);
  }

  delayTime = 5000;

  Serial.println();

  // WLAN einstellungen
  IPAddress ip(192, 168, 178, 200);
  IPAddress gateway(192, 168, 178, 1);
  IPAddress subnet(255, 255, 255, 0);
  IPAddress dns(192, 168, 178, 1);
  WiFi.config(ip, dns, gateway, subnet);
  WiFi.mode(WIFI_STA);
  WiFi.hostname(clientName);
  WiFiStart();

  // MQTT starten
  client.setServer(mqtt_server, port);

  // BME280 Werte aauslesen
}

void loop() {
  printValues();
  delay(delayTime);
  
  if (!client.connected()) {              // Überprüfen der MQTT Verbindung, Nötig für MQTT
    reconnect();
  }
  
  client.loop();                          // Nötig für MQTT
}

void reconnect() {
    
  // Wiederholen bis wieder verbunden
  while (!client.connected()) {
    Serial.println("Wiederverbinden MQTT...");
    if (!client.connect(clientName)) {
      Serial.print("fehlgeschlagen, rc=");
      Serial.print(client.state());
      Serial.println(" Neuer Versuch in 5 Sekunden");
      delay(5000);
    }
  }
  Serial.println("MQTT verbunden...");    
}


void printValues() {
  float temperature = bme.readTemperature();
  client.publish(Temperatur_Topic, String(temperature).c_str());
  Serial.print("Temperature = ");
  Serial.print(temperature);
  Serial.println(" *C");

  float pressure = bme.readPressure() /100.0F;
  client.publish(Pressure_Topic, String(pressure).c_str());
  Serial.print("Pressure = ");
  Serial.print(bme.readPressure() / 100.0F);
  Serial.println(" hPa");
  
  float altitude = bme.readAltitude(SEALEVELPRESSURE_HPA);
  client.publish(Altitude_Topic, String(altitude).c_str());
  Serial.print("Approx. Altitude = ");
  Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
  Serial.println(" m");
  
  float humidity = bme.readHumidity();
  client.publish(Humidity_Topic, String(humidity).c_str());
  Serial.print("Humidity = ");
  Serial.print(bme.readHumidity());
  Serial.println(" %");

  Serial.println();
}


void WiFiStart(){  // wird zum verbinden zum WLAN ausgeführt
  Serial.println();
  Serial.print("* Verbindung zu ");
  Serial.println(ssid);
  
  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("* WLAN verbunden");
  
  Serial.print("* IP: ");
  Serial.println(WiFi.localIP());
}

Aber wenn ich DeepSleep nutze, kommt bei MQTT nix mehr an:

Code:
#include <Wire.h>                               // for I2C (BME280)
#include <SPI.h>                                // for SPI (BME280)
#include <Adafruit_Sensor.h>                    // for BME280
#include <Adafruit_BME280.h>                    // for BME280
#include <ESP8266WiFi.h>                        // ESP8266 WLAN Bibliothek
#include <PubSubClient.h>                       // MQTT Biblithek

#define SEALEVELPRESSURE_HPA (1013.25)          // NN Druck (Meereshöhe)

#define Temperatur_Topic  "wemos/wz/sensor/temperature"
#define Pressure_Topic    "wemos/wz/sensor/pressure"
#define Altitude_Topic    "wemos/wz/sensor/altitude"
#define Humidity_Topic    "wemos/wz/sensor/humidity"

Adafruit_BME280 bme;                            // BME280 also I2C bei Adafruit_BME280.h initialisieren
WiFiClient espClient;                           // WLAN initialisierung
PubSubClient client(espClient);                 // MQTT initialisierung

const char* ssid = "";
const char* password = "";
const char* mqtt_server = "";     // IP des MQTT Brokers (z.b. IP des Raspberry PI)
uint16_t    port = 1883;
char*       clientName = "Sensor1";

void setup() {
  Serial.begin(9600);
  while(!Serial);                               // time to get serial running

  unsigned status;    
  status = bme.begin(0x76);                     // SDA, SCL, I2C Adress

  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) delay(10);
  }
  Serial.println();

  // WLAN einstellungen
  IPAddress ip(192, 168, 178, 200);
  IPAddress gateway(192, 168, 178, 1);
  IPAddress subnet(255, 255, 255, 0);
  IPAddress dns(192, 168, 178, 1);
  WiFi.config(ip, dns, gateway, subnet);
  WiFi.mode(WIFI_STA);
  WiFi.hostname(clientName);
  delay(100);
  WiFiStart();
  delay(2000);

  // MQTT starten
  client.setServer(mqtt_server, port);
  client.loop();

  // BME280 Werte auslesen
  printValues();

  ESP.deepSleep(15e6);           // Schlafzeit in Nanosekunden, für DeepSleep muss D0 mit Reset verbunden sein, zum aufwecken
  delay(100);
}

void loop() {
  
}

void reconnect() {
    
  // Wiederholen bis wieder verbunden
  while (!client.connected()) {
    Serial.println("Wiederverbinden MQTT...");
    if (!client.connect(clientName)) {
      Serial.print("fehlgeschlagen, rc=");
      Serial.print(client.state());
      Serial.println(" Neuer Versuch in 5 Sekunden");
      delay(5000);
    }
  }
  Serial.println("MQTT verbunden...");    
}


void printValues() {
  if (!client.connected()) {              
  reconnect();
  }
  
  float temperature = bme.readTemperature();
  client.publish(Temperatur_Topic, String(temperature).c_str());
  Serial.print("Temperature = ");
  Serial.print(temperature);
  Serial.println(" *C");

  float pressure = bme.readPressure() /100.0F;
  client.publish(Pressure_Topic, String(pressure).c_str());
  Serial.print("Pressure = ");
  Serial.print(bme.readPressure() / 100.0F);
  Serial.println(" hPa");
  
  float altitude = bme.readAltitude(SEALEVELPRESSURE_HPA);
  client.publish(Altitude_Topic, String(altitude).c_str());
  Serial.print("Approx. Altitude = ");
  Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
  Serial.println(" m");
  
  float humidity = bme.readHumidity();
  client.publish(Humidity_Topic, String(humidity).c_str());
  Serial.print("Humidity = ");
  Serial.print(bme.readHumidity());
  Serial.println(" %");

  Serial.println();
}


void WiFiStart(){  // wird zum verbinden zum WLAN ausgeführt
  Serial.println();
  Serial.print("* Verbindung zu ");
  Serial.println(ssid);
  
  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("* WLAN verbunden");
  
  Serial.print("* IP: ");
  Serial.println(WiFi.localIP());
}

Was mir aufgefallen ist, er geht am Anfang immer in die reconnect Funktion, also hat er keine richtige Verbindung zum MQTT Server.
Bei der Version ohne DeepSleep kommt beim ersten Sensor auslesen auch nix bei MQTT. Beim erneuten Durchlauf kommen MQTT Nachrichten an.
Da beim Deepsleep nur einmal alles durchlaufen wird, kommt also nix per MQTT.

Worin könnte der Fehler liegen? Wie bekomme ich den ESP8266 dazu auch beim erstenmal etwas per MQTT zu senden? Wie kann ich das mit DeepSleep lösen?

Danke für jegliche Hilfe.


Edit:
Wenn ich die Funktion printValues zweimal ausführe und dazwischen ein delay von einer Sekunde einfüge, kommen die MQTT Nachrichten beim Broker einmal an. Ein reines delay vor der Funktion oder in der Funktion bringt keine Nachricht beim MQTT Broker. Irgendwie komisch und ich kann mir kein Reim drauf machen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.02.2020, 23:01
Beitrag #2
RE: DeepSleep und MQTT Probleme
Moin N1d45,

Zitat:Da beim Deepsleep nur einmal alles durchlaufen wird, kommt also nix per MQTT.

Ich sage mal: Noe!
Du prüfst doch in der Routine " printValues();" ob der Client verbunden ist.
Und das in einer while-Schleife. Da solltest du auch reconnectmeldungen bekommen.

73 de Bernd
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.02.2020, 23:09
Beitrag #3
RE: DeepSleep und MQTT Probleme
(26.02.2020 23:01)Bernd666 schrieb:  Moin N1d45,

Zitat:Da beim Deepsleep nur einmal alles durchlaufen wird, kommt also nix per MQTT.

Ich sage mal: Noe!
Du prüfst doch in der Routine " printValues();" ob der Client verbunden ist.
Und das in einer while-Schleife. Da solltest du auch reconnectmeldungen bekommen.

73 de Bernd

Ja, die Prüfung kommt. Gefolgt mit der Meldung "MQTT verbunden..." im Seriellen Monitor.

Der Serielle Monitor Spuckt auch die Daten aus. Nur bei MQTT kommt nix.

Aber wenn ich " printValues();" zweimal ausführe mit einem delay(1000); dazwischen
Code:
...

  printValues();
  delay(1000);
  printValues();

  ...
dann kommen die MQTT Werte einmal an. Also nur vom Zweiten Versuch.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.02.2020, 10:43
Beitrag #4
RE: DeepSleep und MQTT Probleme
Also generell würde ich dir empfehlen, deinen Code auf Callback umzustellen. Da kann man auch gescheit mit vielen Topics arbeiten: https://github.com/knolleary/pubsubclien...sp8266.ino

Da die Payload, die im Callback übergeben wird, recht schnell "verwaist", macht es Sinn, sich den String lokal in einen Buffer zu kopieren. Wie man das zB macht, kannst du dir hier https://github.com/biologist79/Tonuino-E...n.cpp#L625 in einem Code von mir zB anschauen. Am Ende nicht vergessen, den Speicher mit free() wieder freizugeben.

Ansonsten fällt mir auf, dass du reconnect() nicht im Loop drin hast. Da gehört es aber rein.

Basale Publishs führe ich zB direkt in der Reconnect-Funktion durch. Auch die ganzen Subscriptions sind dort. Kannst du dir hier anschauen: https://github.com/biologist79/Tonuino-E...n.cpp#L563

Für die publishs habe ich mir eine Wrapper-Funktion (publishMqtt) geschrieben, die auch immer nochmal prüft, ob noch eine WLAN-Verbindung besteht. Ansonsten wundere dich nicht über fie FPSTR; mit dieser Funktion kann man Strings holen, die man zuvor im Progmem gespeichert hat. Ich musste da ein bisschen Speicher sparen.

Grundsätzlich eignet sich mein Code vermutlich als Anstieg nicht so, weil er halt ziemlich komplex ist. Aber grundsätzlich setzt er auf dem Beispiel von Pubsubclient auf, da kannst du das Ganze also mal "in Aktion" sehen, hehe.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.02.2020, 11:31
Beitrag #5
RE: DeepSleep und MQTT Probleme
Hallo,

auch nur als Anregung im Anhang mein Sketch, läuft hier so "ewig" stabil. Broker ist Mosquitto auf einem RasPi.

Gruß aus Berlin
Michael


Angehängte Datei(en)
.ino  ESP_BME280-web.ino (Größe: 2,11 KB / Downloads: 175)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.02.2020, 15:59 (Dieser Beitrag wurde zuletzt bearbeitet: 27.02.2020 16:03 von N1d45.)
Beitrag #6
RE: DeepSleep und MQTT Probleme
(27.02.2020 10:43)biologist schrieb:  Also generell würde ich dir empfehlen, deinen Code auf Callback umzustellen. Da kann man auch gescheit mit vielen Topics arbeiten: https://github.com/knolleary/pubsubclien...sp8266.ino

Da die Payload, die im Callback übergeben wird, recht schnell "verwaist", macht es Sinn, sich den String lokal in einen Buffer zu kopieren. Wie man das zB macht, kannst du dir hier https://github.com/biologist79/Tonuino-E...n.cpp#L625 in einem Code von mir zB anschauen. Am Ende nicht vergessen, den Speicher mit free() wieder freizugeben.

Ansonsten fällt mir auf, dass du reconnect() nicht im Loop drin hast. Da gehört es aber rein.

Basale Publishs führe ich zB direkt in der Reconnect-Funktion durch. Auch die ganzen Subscriptions sind dort. Kannst du dir hier anschauen: https://github.com/biologist79/Tonuino-E...n.cpp#L563

Für die publishs habe ich mir eine Wrapper-Funktion (publishMqtt) geschrieben, die auch immer nochmal prüft, ob noch eine WLAN-Verbindung besteht. Ansonsten wundere dich nicht über fie FPSTR; mit dieser Funktion kann man Strings holen, die man zuvor im Progmem gespeichert hat. Ich musste da ein bisschen Speicher sparen.

Grundsätzlich eignet sich mein Code vermutlich als Anstieg nicht so, weil er halt ziemlich komplex ist. Aber grundsätzlich setzt er auf dem Beispiel von Pubsubclient auf, da kannst du das Ganze also mal "in Aktion" sehen, hehe.

Danke erstmal, muss ich mir mal genauer anschauen.

Ich dachte callback ist nur zum empfangen von Topics da. Da der Sensor keine Topics subscribt, habe ich diese entfernt. Aber auch mit der callback funktion ist keine Änderung erkennbar. Bei anderen ESP8266, die ich als WLAN-Schalter nutze, funktioniert das mit callback gut. da müssen natürlich die Schaltbefehle ankommen. Dort kommt aber auch das Statetopic schön zurück zum mqttbroker. Aber MQTT ist da ja auch definitiv am laufen, weil vorher Daten empfangen.

Da ich den ESP nur aufwecke, alles abarbeitet, dann wieder schlafen lege, benötige ich ja eigentlich kein loop. Daher habe ich es ins setup verschoben. Aber auch im obigen Sketch, ohne DeepSleep, wird beim ersten printValues() Durchlauf nicht publisht, zumindest kommt nix bei MQTTfx an. Erst beim zweiten Durchlauf. Und auch habe ich gestern Abend im Zweifel woran es liegt, einiges ins loop verfrachtet gefolgt am ende des loops mit deepsleep. Änderung brachte es keine.

Irgendwie habe ich das Gefühl, das da irgendwas noch nicht bereit ist zum senden. Nur was?

(27.02.2020 11:31)amithlon schrieb:  Hallo,

auch nur als Anregung im Anhang mein Sketch, läuft hier so "ewig" stabil. Broker ist Mosquitto auf einem RasPi.

Gruß aus Berlin
Michael

Danke, schaue ich mir später mal an.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.02.2020, 16:57 (Dieser Beitrag wurde zuletzt bearbeitet: 27.02.2020 17:28 von N1d45.)
Beitrag #7
RE: DeepSleep und MQTT Probleme
So, nun doch schneller als gedacht, Zeit dafür gefunden (bzw. genommen, lässt mir irgendwie keine Ruhe ^^)

@amithlon:
Ich habe einges in meinem Sketch so angepasst wie bei dir. Vorallem ist es jetzt wie bei dir nur noch ein String zum Sensorwert aufnehmen. Dennoch das gleiche Spiel.

Code:
#include <Wire.h>                               // for I2C (BME280)
#include <Adafruit_Sensor.h>                    // for BME280
#include <Adafruit_BME280.h>                    // for BME280
#include <ESP8266WiFi.h>                        // ESP8266 WLAN Bibliothek
#include <PubSubClient.h>                       // MQTT Biblithek

#define SEALEVELPRESSURE_HPA (1013.25)          // NN Druck (Meereshöhe)

#define Temperatur_Topic  "wemos/wz/sensor/temperature"
#define Pressure_Topic    "wemos/wz/sensor/pressure"
#define Altitude_Topic    "wemos/wz/sensor/altitude"
#define Humidity_Topic    "wemos/wz/sensor/humidity"

const char* ssid = "";
const char* password = "";
const char* mqtt_server = "";     // IP des MQTT Brokers (z.b. IP des Raspberry PI)
uint16_t    port = 1883;
char*       clientName = "Sensor1";

Adafruit_BME280 bme;                            // BME280 also I2C bei Adafruit_BME280.h initialisieren
WiFiClient espClient;                           // WLAN initialisierung
PubSubClient mqttclient(mqtt_server,port,0,espClient);                 // MQTT initialisierung


void setup() {
  Serial.begin(9600);
  while(!Serial);                               // time to get serial running

  unsigned status;    
  status = bme.begin(0x76);                     // SDA, SCL, I2C Adress

  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) delay(10);
  }
  Serial.println();

  // WLAN einstellungen
  IPAddress ip(192, 168, 178, 200);
  IPAddress gateway(192, 168, 178, 1);
  IPAddress subnet(255, 255, 255, 0);
  IPAddress dns(192, 168, 178, 1);
  WiFi.config(ip, dns, gateway, subnet);
  WiFi.mode(WIFI_STA);
  WiFiStart();

  // MQTT starten
  mqttclient.connect(clientName);
  mqttclient.loop();

  // BME280 Werte auslesen
  printValues();

  ESP.deepSleep(15e6);           // Schlafzeit in Nanosekunden, für DeepSleep muss D0 mit Reset verbunden sein, zum aufwecken
  delay(100);
}

void loop() {
  
}

void mqttreconnect() {
    
  // Wiederholen bis wieder verbunden
  while (!mqttclient.connected()) {
    Serial.println("Wiederverbinden MQTT...");
    if (!mqttclient.connect(clientName)) {
      Serial.print("fehlgeschlagen, rc=");
      Serial.print(mqttclient.state());
      Serial.println(" Neuer Versuch in 5 Sekunden");
      delay(5000);
    }
  }
  Serial.println("MQTT verbunden...");  
}


void printValues() {
  if (!mqttclient.connected()) {              
  mqttreconnect();
  }

  String output = String(bme.readTemperature(),1);
  mqttclient.publish(Temperatur_Topic, output.c_str());
  Serial.print("Temperature = ");
  Serial.print(output);
  Serial.println(" *C");

  output = String((bme.readPressure() /100.0F),0);
  mqttclient.publish(Pressure_Topic, output.c_str());
  Serial.print("Pressure = ");
  Serial.print(output);
  Serial.println(" hPa");
  
  output = String(bme.readAltitude(SEALEVELPRESSURE_HPA),0);
  mqttclient.publish(Altitude_Topic, output.c_str());
  Serial.print("Approx. Altitude = ");
  Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
  Serial.println(" m");
  
  output = String(bme.readHumidity(),0);
  mqttclient.publish(Humidity_Topic, output.c_str());
  Serial.print("Humidity = ");
  Serial.print(output);
  Serial.println(" %");

  Serial.println();
}


void WiFiStart(){  // wird zum verbinden zum WLAN ausgeführt
  Serial.println();
  Serial.print("* Verbindung zu ");
  Serial.println(ssid);
  
  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("* WLAN verbunden");
  
  Serial.print("* IP: ");
  Serial.println(WiFi.localIP());
}

Im Seriel Monitor sieht man schön das es Probleme gibt sich mit dem MQTT Server zu verbinden.
Code:
16:42:48.976 -> * Verbindung zu Doppel AA
16:42:49.485 -> .
16:42:49.485 -> * WLAN verbunden
16:42:49.485 -> * IP: 192.168.178.200
16:42:49.519 -> Wiederverbinden MQTT...
16:42:49.553 -> fehlgeschlagen, rc=-2 Neuer Versuch in 5 Sekunden
16:42:54.473 -> Wiederverbinden MQTT...
16:42:54.473 -> MQTT verbunden...
16:42:54.506 -> Temperature = 23.5 *C
16:42:54.540 -> Pressure = 986 hPa
16:42:54.540 -> Approx. Altitude = 232.69 m
16:42:54.573 -> Humidity = 39 %
Zwischen den letzten 4 Zeilen, wird immer puplisht zum MQTT Server. Dort kommt aber nichts an. Führe ich die Funktion printValues() im setup zweimal aus:
Code:
...
  // BME280 Werte auslesen
  printValues();
  delay(1000);
  printValues();
  ...
Bekomme ich das Serielle doppelt im Monitor (Ist ja klar ^^) und aber nur einmal kommt etwas bei MQTTfx und beim Broker an.

Ich schlussfolgere daraus, das MQTT irgendwie noch nicht richtig verbunden ist. Woran könnte das liegen?

Ich habe inzwischen auch schon einen anderen Wemos D1 Mini mal angeschlossen und das Sketch aufgespielt, genau das gleiche Problem.

Ich habe auch mal nur amithlon sein Sketch aufgespielt. (lightmeter Sachen auskommentiert). Es kommt nix bei MQTTfx an. Seriellen Monitor testweise dazwischen gebastelt. Der Sketch funktioniert und durchläuft auch die MQTT puplish Funktion. Nur ankommen tut nix.


Als workaround kann ich natürlich einfach die Funktion zweimal hintereinander aufrufen. Aber das ist ja eigentlich nicht richtig. Und mich interessiert woran es liegt. Da es nicht am Wemos liegt, und fremde Sketche auch nicht richtig funktionieren, liegt es wahrscheinlich am MQTT Server auf dem Raspberry Pi Sad

Nur da habe ich noch weniger Ahnung. Da bin ich nur einem Tutorial gefolgt. Und bisher haben die Komunikation von Shellys, Sonoffs und eigenen Wemos D1 Mini Schaltern per MQTT tadellos funktioniert Sad


Edit:
Ich habe direkt in der reconnect Funktion nach dem Verbinden ein Test publisht. Dieser kommt bei MQTTfx an. Die folgenden aus printValues kommen nicht mehr an.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.02.2020, 18:10
Beitrag #8
RE: DeepSleep und MQTT Probleme
Hallo,

gibt mir auch Rätsel auf. Hier läuft ja auch als Broker Mosquitto auf einem RasPi 4, früher RasPi 3.
Eigentlich steht die Verbindung da nach sehr schnell wenn WLAN verbunden ist.
Ich habe hier noch einen fast identischen Sensor mit ESP32 als Test laufen. Der gibt mir ein wenig Rätsel auf: es werden die praktisch gleichen 5 Messages geschickt. alle paar Stunden (zufällig) kommt nur der erste topic an, die anderen nicht. Im nächsten Durchlauf stimmt dann wier alles.
Vermutungen, daß ich den ESP32 zu schnell schalfen schicke usw., haben sich nicht bestätigt.
Hilft Dir nicht bei Deinem Problem, tröstet aber vielleicht etwas... Wink

Gruß aus Berlin
Michael
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  ESP32 / DeepSleep / Akkulaufzeit ? Steinspiel 23 623 27.02.2021 20:20
Letzter Beitrag: Steinspiel
  Erfahrungen mit ESP32 und WLAN/MQTT oder was ich beobachtet habe... Arduino4Fun 22 2.262 08.02.2021 15:34
Letzter Beitrag: ardu_arne
  MQTT Topic abbonieren? Steinspiel 32 2.133 21.01.2021 22:50
Letzter Beitrag: Tommy56
  433MHz-WiFi-MQTT-Sender nbk83 25 1.565 04.01.2021 16:35
Letzter Beitrag: nbk83
  Wo MQTT LogIn Daten einfügen? Steinspiel 10 842 28.12.2020 14:32
Letzter Beitrag: Tommy56
  Sensorausgabe mit MQTT publishen ? Steinspiel 14 1.115 16.12.2020 13:06
Letzter Beitrag: biologist
  Hilfe bei async-mqtt-client für ESP32 amshh 7 762 12.11.2020 09:19
Letzter Beitrag: amithlon
  DHT11 Daten via MQTT an Raspi senden Hanibal_Smith 5 593 10.11.2020 16:24
Letzter Beitrag: biologist
  wert an client schicken während Deepsleep mqtt & ibroker stevensen 13 1.162 06.11.2020 21:07
Letzter Beitrag: nbk83
  Probleme bei der Kombination Firebase/HTTPS client devnull69 13 963 05.11.2020 16:47
Letzter Beitrag: Tommy56

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste