problema server MQTT

salve a tutti

dal seriale vedo che spesso si riconnette al server MQTT

Connecting to MQTT... MQTT Connected!

e questo genera una nuova sottoscrizione attivando il rele. Non riesco a trovare l'errore, qualche aiuto?
grazie. Questo il codice:

#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <IRsend.h>
#include <ArduinoOTA.h>
#include <IRremoteESP8266.h>
#include <WiFiUdp.h>
#include <Adafruit_MQTT.h>
#include <Adafruit_MQTT_Client.h>

IPAddress staticIP(xxx, xxx, x, xxx); //ESP static ip
IPAddress gateway(xxx, xxx, x, x);   //IP Address of your WiFi Router (Gateway)
IPAddress subnet(255, 255, 255, 0);  //Subnet mask
IPAddress dns(8, 8, 8, 8);  //DNS

//const char *wifi_ssid = "xxxxxxx";
//const char *wifi_password = "xxxxxxx";

#define wifi_ssid  "xxxxxx"
#define wifi_password  "xxxxxx"

/************************* MQTT Broker Setup *********************************/
#define mqtt_server      "xxx.xxx.x.x"
#define mqtt_serverport  1883                   // use 8883 for SSL
#define mqtt_username    "xxxx"
#define mqtt_password    "xxxx"

/************************* Constants, Variables, Integers, etc *********************************/

const int BLINK   = 0; //D3
const int relayPin = 5;// D1
int value = 0;
int relayState = LOW;
const long togDelay = 100;  // pause for 100 milliseconds before toggling to Open
const long postDelay = 200;
IRsend irsend(4);
WiFiClient client;

// Setup the MQTT client class by passing in the WiFi client and MQTT server and login details.
Adafruit_MQTT_Client mqtt(&client, mqtt_server, mqtt_serverport, mqtt_username, mqtt_password);
// Setup subscription 'Robo500' for monitoring topic for changes.
Adafruit_MQTT_Subscribe Robo500 = Adafruit_MQTT_Subscribe(&mqtt, "openhab/out/Robo500/command");
void MQTT_connect();

//==============================================================
//                  SETUP
//==============================================================
void setup() {

  ArduinoOTA.onStart([]() {
    Serial.end();
  });

  Serial.begin(115200);
  Serial.print("Connecting to ");
  Serial.println(wifi_ssid);
  WiFi.begin(wifi_ssid, wifi_password);
  WiFi.config(staticIP, subnet, gateway, dns);
 // WiFi.mode(WIFI_STA); //WiFi mode station (connect to wifi router only
  
  ArduinoOTA.setHostname("Domotica_Ufficio_2.0");
  ArduinoOTA.begin();
    
   while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.print("WiFi connected at IP address: ");
  Serial.println(WiFi.localIP());

irsend.begin();

pinMode(BLINK,    OUTPUT);
pinMode(relayPin, OUTPUT);
mqtt.subscribe(&Robo500);
}

//==============================================================
//                     LOOP
//==============================================================
void loop(){ 
ArduinoOTA.handle();
//WiFiClient client;

if (WiFi.status() == WL_CONNECTED) { 
                digitalWrite(BLINK, HIGH);
                delay(20);
                digitalWrite(BLINK, LOW);
                delay(20);                
                                    }

MQTT_connect();
Adafruit_MQTT_Subscribe *subscription;
  while ((subscription = mqtt.readSubscription(5000))) {
    if (subscription == &Robo500) {
      Serial.print(F("Got: ")); Serial.println((char *)Robo500.lastread);
      // close the relay for 100 ms
      Serial.println("Close Relay for 100 ms & then Open");
      digitalWrite(relayPin, HIGH);
      delay(togDelay);
      digitalWrite(relayPin, LOW);
      delay(postDelay);
    }
  }
                                      
}

// Function to connect and reconnect as necessary to the MQTT server.
// Should be called in the loop function and it will take care if connecting.
void MQTT_connect() {
  int8_t ret;

  // Stop if already connected.
  if (mqtt.connected()) {
    return;
  }
  
  Serial.print("Connecting to MQTT... ");
  
  uint8_t retries = 3;
  while ((ret = mqtt.connect()) != 0) { // connect will return 0 for connected
       Serial.println(mqtt.connectErrorString(ret));
       Serial.println("Retrying MQTT connection in 5 seconds...");
       mqtt.disconnect();
       delay(5000);  // wait 5 seconds
       retries--;
       if (retries == 0) {
         // basically die and wait for WDT to reset me
         while (1);
       }
  }
  Serial.println("MQTT Connected!");
}