MQTT Rückmeldung connected

Ich habe mir einen ESP8266 mit DHT22, wie vom Symcon Event 2021 aufgesetzt.
Die Daten kommen auch in IPS an.
Nur die Abfrage ob der MQTT conneted ist, wird bei jedem Durchlauf aufgerufen und der MQTT neu verbunden. Irgend wie stimmt da etwas nicht.
Beim ersten ESP8266 welchen ich im Januar aufgesetzt hab, war das nicht so.
Hat sich da in IPS was verändert oder bei der Lib/mqtt-2.5.0 von ESP8266?

Du machst weiter unten im Quellcode nicht zufällig einen Disconnect? In Symcon hat sich diesbezüglich eigentlich nichts geändert.

paresy

Nee, leider nein

#include <Arduino.h>
#include <DHT.h>
#include <ESP8266WiFi.h>
#include <MQTTClient.h>


DHT dht_sensor(D1, DHT22);
WiFiClient wifi_client;
MQTTClient mqtt_client;


void setup() {
  // put your setup code here, to run once:
  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(D1, INPUT);

  Serial.begin(9600);

  dht_sensor.begin();

  WiFi.begin("*******","********");

  mqtt_client.begin("*********", wifi_client);
}

void loop() 
  {
  // put your main code here, to run repeatedly:
  if(WiFi.status() != WL_CONNECTED)
    {
    Serial.println("Connecting to WIfi...");
    while (WiFi.status() != WL_CONNECTED)
      {
      Serial.print(".");
      delay(500);
      }
    Serial.println(" Ok!");
    }
  
Serial.println(mqtt_client.connected());
delay(500);
  if(mqtt_client.connected() == false)
    {
    Serial.println("Connecting to MQTT...");
    while (!mqtt_client.connect("*********","",""))
      {
      Serial.print(".");
      delay(500);
      }
    Serial.println(" Ok!");
    }



  digitalWrite(LED_BUILTIN, HIGH);
  Serial.println("LED ist On");
  delay (2500);

  float hum = dht_sensor.readHumidity();
  Serial.println(hum);

  mqtt_client.publish("schuppen/dht/humidity", String (hum));
  
  float temp = dht_sensor.readTemperature();
  Serial.println(temp);

  mqtt_client.publish("schuppen/dht/temperature", String (temp));

  digitalWrite(LED_BUILTIN, LOW);
  Serial.println("LED ist Off");
  delay (2500);
  }

So eine Schritt weiter, das Problem tritt auf sobald 2 ESP8266 an IPS senden.
Klar beide senden auf Port 1883, deshalb wird wahrscheinlich immer die Verbindung unterbrochen und wieder neu aufgebaut.
Ist so normal oder gewollt?
Wie kann man das umgehen?

Haben evtl. beide Geräte die selbe ClientID? Dann trennt IP-Symcon natürlich den „alten“ Client.

paresy

Wie/Wo kann ich die ClientID ändern?

Schau mal hier: GitHub - 256dpi/arduino-mqtt: MQTT library for Arduino

Beim .connect gibst du die ClientID als ersten Parameter mit. Der muss in jedem Gerät anders sein.

paresy

wie kann ich die ClientID ändern

#include <Arduino.h>
#include <DHT.h>
#include <ESP8266WiFi.h>
#include <MQTTClient.h>


DHT dht_sensor(D1, DHT22);
WiFiClient net;
MQTTClient client;



void setup() {
  // put your setup code here, to run once:
  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(D1, INPUT);

  Serial.begin(9600);

  dht_sensor.begin();

  WiFi.begin("*****","****");

  client.begin("****", net);
}

void loop() 
  {
  // put your main code here, to run repeatedly:
  if(WiFi.status() != WL_CONNECTED)
    {
    Serial.println("Connecting to WIfi...");
    while (WiFi.status() != WL_CONNECTED)
      {
      Serial.print(".");
      delay(500);
      }
    Serial.println(" Ok!");
    }
  
Serial.println(client.connected());
delay(500);
  if(client.connected() == false)
    {
    Serial.println("Connecting to MQTT...");
    while (!client.connect("Schei..WLan_1","",""))
      {
      Serial.print(".");
      delay(500);
      }
    Serial.println(" Ok!");
    }



  digitalWrite(LED_BUILTIN, HIGH);
  Serial.println("LED ist On");
  delay (2500);

  float hum = dht_sensor.readHumidity();
  Serial.println(hum);

  client.publish("schuppen/dht/humidity", String (hum));
  
  float temp = dht_sensor.readTemperature();
  Serial.println(temp);

  client.publish("schuppen/dht/temperature", String (temp));

  digitalWrite(LED_BUILTIN, LOW);
  Serial.println("LED ist Off");
  delay (2500);
  }

ich habe WiFiClient und MQTTClient geändert immer noch das selbe Problem

Bei deinem aktuellen Beispiel ist die clientID ‚Schei…WLan_1‘

Michael

Super Danke, funktioniert :sweat_smile: