MQTT connecton - help to review code

Hi

my MQTT seems unstable, but I'm pretty shure connection is ok. I have a stable LAN use Ubiquity devises and my net is stable. And when I trigger the code I receive a MQTT package to Home assistant, 100%

Is there something in my MQTT code that triggers a reconnection?

Thanks up front!

I use this MQTT code:

if (!client.connected()) {
    while (!client.connected() && retryMQTT < maxRetryMQTT) {
      Serial.println("Connect to MQTT...");
      if (client.connect(mqtt_clientID, mqtt_username, mqtt_password)) {
        Serial.println("MQTT   IP 192.168.0.60:1883, web :8123");
        delay(1000);
        retryMQTT = 0; // Reset the retry count if the connection is successful
        MQTTstatus = "Connect to til HA";
      } else {
        Serial.print("Error MQTT connection, Return Code = ");
        Serial.println(client.state());
        delay(500);
        retryMQTT++;
        MQTTstatus = "Not connected to HA, RC = " + client.state();;
      }
      //ESP.restart();                        

    }
  }

After reboot:

Connecting to LAN
WiFi connected
IP address:
192.168.0.140
Connect to MQTT...
MQTT IP 192.168.0.60:1883, web :8123

After a while this happens on serial:

Connect to MQTT...
MQTT   IP 192.168.0.60:1883, web :8123
Connect to MQTT...
MQTT   IP 192.168.0.60:1883, web :8123
Connect to MQTT...
MQTT   IP 192.168.0.60:1883, web :8123
Connect to MQTT...
MQTT   IP 192.168.0.60:1883, web :8123
                Det renner vann, sender verdi:      6
                Det renner ikke vann, sender verdi: 0
                Det renner vann, sender verdi:      7
                Det renner ikke vann, sender verdi: 0
Connect to MQTT...
MQTT   IP 192.168.0.60:1883, web :8123
Connect to MQTT...
MQTT   IP 192.168.0.60:1883, web :8123
Connect to MQTT...
MQTT   IP 192.168.0.60:1883, web :8123
Connect to MQTT...
MQTT   IP 192.168.0.60:1883, web :8123

All code:

#include <ESP8266WiFi.h>
#include <PubSubClient.h>            // MQTT

const char* ssid = "LAN";      // Your WiFi network SSID
const char* password = "xxx";  // Your WiFi network password

const int buttonPin = D2; // D2 pin
int buttonState     = 0;      // variable for reading the button status
int lastButtonState = 0;  // variable to store the previous button state
int vannRennerFlagg = 0;
int previousState   = 0;

// MQTT
WiFiClient espClient;
PubSubClient client(espClient);

int    maxRetryMQTT         = 3;
int    retryMQTT            = 0;
String MQTTstatus           = "_";          // For å skrive til serial at kobling til HA er OK

const char* mqtt_username   = "yyy";           // MQTT username virker 2023.07.05
const char* mqtt_password   = "zzzz";   // MQTT password virker 2023.07.05
const char* mqtt_clientID   = "dam";                // MQTT client ID, må være unikt pr IoT
char vannRennerMsg[10];
//int vannRennerFlagg         = 0;
//uint8_t vannRennerFlagg       = 0;
//--------------------------

IPAddress MQTTserver(192, 168, 0, 60);      //MQTT server IP

void setup() {
  Serial.begin(115200);    // initialize serial communication
  delay(500);
  PrintFileNameDateTime();
  client.setServer(MQTTserver , 1883);         // MQTT server 192.168.0.60:1883 riktig ift mqtt mottak

  pinMode(buttonPin, INPUT);    // set the D2 pin as an input
  digitalWrite(buttonPin, LOW); // enable internal pull-down resistor

  // Connect to WiFi
  WiFi.begin(ssid, password);
  Serial.print("Connecting to ");
  Serial.println(ssid);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  // Print connection established
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}


void loop() {
  // kobler til mqtt
  if (!client.connected()) {
    while (!client.connected() && retryMQTT < maxRetryMQTT) {
      Serial.println("Connect to MQTT...");
      if (client.connect(mqtt_clientID, mqtt_username, mqtt_password)) {
        Serial.println("MQTT   IP 192.168.0.60:1883, web :8123");
        delay(1000);
        retryMQTT = 0; // Reset the retry count if the connection is successful
        MQTTstatus = "Connect to til HA";
      } else {
        Serial.print("Error MQTT connection, Return Code = ");
        Serial.println(client.state());
        delay(500);
        retryMQTT++;
        MQTTstatus = "Not connected to HA, RC = " + client.state();;
      }
      //ESP.restart();                          // ###################### behold denne muligheten  se på versjon tidligere

    }
  }

  // read the state of the pushbutton value
  buttonState = digitalRead(buttonPin);

  // check if the button state has changed
  if (buttonState != lastButtonState) {
    // check if the pushbutton is NOT pressed
    if (buttonState == HIGH) {
      vannRennerFlagg = 0;                // nullstiller etter en lekkasje
      Serial.print("                Det renner ikke vann, sender verdi: ");

      Serial.println(vannRennerFlagg);
      client.loop();                                                   // MQTT loop

      String vannRennerTopic = "dam/vannRenner";
      snprintf(vannRennerMsg, 10, "%d"  , vannRennerFlagg);
      client.publish(vannRennerTopic.c_str(), vannRennerMsg);

    } else {
      vannRennerFlagg = previousState;     
      vannRennerFlagg++;
      previousState = vannRennerFlagg;  
      Serial.print("                Det renner vann, sender verdi:      ");
      Serial.println(vannRennerFlagg);
      client.loop();                                                   // MQTT loop
      
      String vannRennerTopic = "dam/vannRenner";
     snprintf(vannRennerMsg, 10, "%d"  , vannRennerFlagg);
      client.publish(vannRennerTopic.c_str(), vannRennerMsg);

    }

    // update lastButtonState to the current buttonState
    lastButtonState = buttonState;
  }
  delay(100); // small delay to debounce the button
}
// helper-functions
void PrintFileNameDateTime() {
  Serial.println( F("Code running comes from file: ") );
  Serial.println( F(__FILE__) );
  Serial.print( F("Compilert") );
  Serial.print( F(__DATE__) );
  Serial.print( F(" ") );
  Serial.println( F(__TIME__) );
}



this seems awkward that there are three tests for connected,

look at the example

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.