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: 86)
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
  ESP8266+PubSubClient und MQTT/ioBroker Arduino4Fun 10 5.336 08.09.2020 10:22
Letzter Beitrag: biologist
  i2c LCD Display am Wemos D1 Mini mit mqtt klappt nach modifikation nicht raspido 5 850 15.06.2020 22:19
Letzter Beitrag: stw
  ESP32 "ESP32 BLE Keyboard library" und Pairing Probleme Arduino4Fun 0 608 23.05.2020 18:47
Letzter Beitrag: Arduino4Fun
  Seit heute 17.05.2020 Probleme mit UDP DO3GE 14 1.580 18.05.2020 19:04
Letzter Beitrag: Fips
  MQTT Subcribe funktioniert nicht crazysky 13 1.501 20.04.2020 17:39
Letzter Beitrag: Tommy56
  ESP8266 + SSD1306 + BME280 + MQTT crazysky 11 1.960 05.04.2020 06:05
Letzter Beitrag: N1d45
  ESP8266 und MQTT Jakohoho 2 1.012 20.03.2020 16:29
Letzter Beitrag: N1d45
  Wemos D1 Mini Deepsleep Wlan Zeit plastikjoe 11 3.038 29.02.2020 11:29
Letzter Beitrag: Tommy56
  MQTT DHT22 0816_Saft 2 942 11.02.2020 13:57
Letzter Beitrag: biologist
  MQTT / RSL problem am Wemos D1 Mini myreal84 7 1.351 19.01.2020 13:42
Letzter Beitrag: Fips

Gehe zu:


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