Hallo zusammen,
trotz gutem Wlan-Netzausbau (Fritzbox und mehreren Mesh-Repeatern) schalten ab und zu einige ESP32 nicht (Arduino-IDE / C++). Mann muss den ausgestiegenen ESP dann stromlos machen damit er wieder schaltet. Laut meiner Unterlage mit Stand Juni 2020 kann die Arduino-IDE noch kein Mesh. Ist das noch so?

Kann das die Ursache sein?

Der Rolladen in der Nähe des Routers hatte noch nie einen Ausfall, um so weiter weg, um so unzuverlässlicher schalten die ESP's trotz starken Signalen. Ich schalte mit QOS1.

Wie würdet ihr vorgehen um den Fehler zu finden?

Danke

Das Program:

Code:
#include <WiFi.h>
#include <PubSubClient.h>
 
const char* SSID = "xxxx";
const char* PSK = "999999";
const char* MQTT_BROKER = "192.16....";

const char* CLIENT_ID = "e32_123";
const char* CLIENT_TOPIC = "vorne/rl1";

char char1_oldmsg[1] ={'x'};
 
WiFiClient espClient;

PubSubClient client(espClient);
int hochpin = 32;
int runterpin = 33; 

void setup() {
    Serial.begin(115200);

    pinMode(hochpin, OUTPUT);
    pinMode(runterpin, OUTPUT);

    digitalWrite(hochpin, HIGH); /*Relais zu Anfang auf OFF */
    digitalWrite(runterpin, HIGH);/*Relais zu Anfang auf OFF */
    Serial.println("Pins auf off gesetzt");
    delay(1500);
    setup_wifi();
    client.setServer(MQTT_BROKER, 1883);
    client.setCallback(callback);
}
 
void setup_wifi() {
    delay(10);
    WiFi.begin(SSID, PSK);
    while (WiFi.status() != WL_CONNECTED) {
      Serial.print(".");
      delay(500);
    }
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP());
 }
 
void callback(char* topic, byte* payload, unsigned int length) {
    char msg[length+1];

    for (int i = 0; i < length; i++) {
        msg[i] = (char)payload[i];
        /*Serial.print(msg[i]);*/
    }
     Serial.println("--");
     msg[length] = '\0';

    if (msg[0] != char1_oldmsg[0])
    {
        Serial.println("pos1");
        if(strcmp(msg,"hoch")==0)
          {
              digitalWrite(runterpin, HIGH);
              delay(100);
              digitalWrite(hochpin, LOW);
              delay(100);
              Serial.println("---runter---");
          }
        else if(strcmp(msg,"runter")==0)
          {   
            digitalWrite(hochpin, HIGH);
            delay(100);
            digitalWrite(runterpin, LOW);
            delay(100);
            Serial.println("---hoch---");
          }
        else if(strcmp(msg,"stop")==0)
          {   
            digitalWrite(hochpin, HIGH);
            delay(100);
            digitalWrite(runterpin, HIGH);
            delay(100);
            Serial.println("---stop---");
          } 
        char1_oldmsg[0] = msg[0];
    }    
}

void reconnect() {
    while (!client.connected()) {
        if (client.connect(CLIENT_ID))
        {
           client.subscribe(CLIENT_TOPIC);     
        }
        else
        {
           Serial.println("failed, rc=");
           Serial.println(client.state());
           Serial.println(" try again in 5 seconds");
           delay(5000);
        }
    }
}    
 
void loop() {
    if (!client.connected()) {
        reconnect(); 
    }
    client.loop();
}