Bonjour !
Ça fait maintenant plusieurs mois que j'ai un montage qui tourne, celui-ci fait des requêtes HTTP sur plusieurs appareils de mon réseau Wifi domestique (le routeur faisant partie d'une Freebox)
Tout cela fonctionne plutôt bien, à part à certains moments où j'ai des "blocages" de plusieurs secondes durant une requête. Ces blocages disparaissent souvent si je relance ma freebox (et donc le routeur).
Pour éviter ces blocages, je cherche un moyen de forcer la sortie de ma requête si elle n'a pas abouti dans la seconde (par exemple).
Voici le code actuel de l'une de mes requêtes HTTP (lancée toutes les 5 secondes à partir du loop de mon programme) :
void lect_ShellyEM()
{
HTTPClient http;
http.begin("http://192.168.1.12/emeter/0"); // Extrait du ShellyEM les données du "emeter" 0, c.à.d. la conso EDF
http.setConnectTimeout(500); // IP locale >> abandon direct après 0,5 s si pas de connexion
httpCode = http.GET();
if (httpCode == HTTP_CODE_OK) // Vérif que la transmission s'est bien passée
{
StaticJsonDocument<256> doc;
deserializeJson(doc, (http.getString())); // Extraction par ArduinoJson des variables
Pedf = doc["power"]; Pedft = doc["total"];
if (top_m1 == true) // Quand on change de jour
{
Pedf_m = Pedft; // Mémorisation du total du ShellyEM à minuit
pref.begin("memo_infos", false); // Ecriture du total dans l'emplacement "Pedf_m" de l'EEPROM
pref.putFloat("Pedf_m", Pedf_m); // en cas de reset ou de coupure de courant
pref.end();
top_m1 = false; // RàZ de top_m1
}
}
http.end();
}
J'ai bien rajouté une ligne http.setConnectTimeout(500);
mais ça n'a pas l'air de servir à grand chose...
Peut-être passer par un "watchdog" qui sortirait de la requête après un certain temps ?
Mais je ne vois pas trop comment faire...
Alors je suis à la recherche de tous vos conseils avisés !
En vous remerciant par avance, Roland