Ich hätte da ma eine Frage. Kann man es irgendwie einrichten das wenn z. B. kein WIFI oder mal der MQTT server nicht erreichbar ist das das Script trotzdem weiterarbeitet?
wie bei diesem Beispiel von PubSubClient?
void reconnect() {
// Loop until we're reconnected
while (!client.connected()) {
Serial.print("baue die Verbuindung zum MQTT auf...");
String clientId = "Huehner";
// Attempt to connect
if (client.connect("Huehner")) {
Serial.println("connected");
// Subscribe
client.subscribe("/huehner/info"); //der Pfad auf den gelauscht wird ***
client.subscribe("/huehner/ZeitAuf"); //der Pfad auf den gelauscht wird ***
client.subscribe("/huehner/ZeitZu"); //der Pfad auf den gelauscht wird ***
client.subscribe("/huehner/IO"); //der Pfad auf den gelauscht wird ***
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// Wait 5 seconds before retrying
delay(5000);
}
}
}
Hintergrund ist das ich da eine Klappensteuerung am basteln bin und möchte da eine "Rückversicherung" wenn mal der MQTT Server nicht erreichbar ist dass das Script weiter arbeitet und die hinterlegten auf und zu Mechanismen abarbeitet (die alle gute gehen).
Ja, denn Du kannst die Schleife über eine Bedingung verlassen. Beispielsweise zählst Du die Fehlversuche in einer Variablen hoch und verläßt diese, wenn ein Grenzwert überschritten wurde.
Eleganter wäre es, das blockierende while rauszuschmeißen und ab und an die Verbindung zu überprüfen und bei verlorenen Verbindung diese neu aufzubauen.
hmmm das mit der " Schleife über eine Bedingung verlassen " glaube ich gefällt mir da schon ganz gut. Weil ich möchte ja dass, wenn ich über den ioBroker was sende das auch gleich ausgeführt wird.
Andere dumme Anfänger Frage .... wie verlässt mann so eine Schleife ?
ich habe agume 's Denkanstoß genommen und es so gelöst.
while (!client.connected() && MM == 0) {
Serial.print("baue die Verbuindung zum MQTT auf...");
String clientId = "Huehner";
// Attempt to connect
if (client.connect("Huehner")) {
Serial.println("connected");
// Subscribe
client.subscribe("/huehner/info"); //der Pfad auf den gelauscht wird ***
client.subscribe("/huehner/ZeitAuf"); //der Pfad auf den gelauscht wird ***
client.subscribe("/huehner/ZeitZu"); //der Pfad auf den gelauscht wird ***
client.subscribe("/huehner/IO"); //der Pfad auf den gelauscht wird ***
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// Wait 5 seconds before retrying
MM = 1;
break;
delay(5000);
}
}