Watch dog pour connection internet avec WEMOS D1 WIFI

Bonjour, j'aurais besoin d'un renseignement a propos d'un code source d'exemple que j'ai modifié.

En effet j'ai un routeur qui régulierement plante et la connexion internet ne fonctionne plus, donc j'ai bricolé un espece de watch dog qui redemarre avec un relais qui coupe 5 secondes l'alimentation du routeur.

Je teste une adresse internet toutes les minutes, si elle ne marche pas je redemarrer mon routeur en coupant l'alimentation pendant 5 secondes.

J'ai modifié se code fournis en exemple, il fonctionne parfaitement mais il fait une requete mais je ne sais pas sur quel site est fait la requete, j'aurais aimé changer pour mettre l'url de google qui est tres fiable.

Voici le code:

/**
   BasicHTTPSClient.ino

    Created on: 20.08.2018

*/

#include <Arduino.h>

#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClientSecureBearSSL.h>

#include "certs.h"

#ifndef STASSID
#define STASSID "wifi"
#define STAPSK "MONMOTDEPASSE"
#endif

ESP8266WiFiMulti WiFiMulti;
int led1 = 4;


void setup() {

  Serial.begin(115200);
  // Serial.setDebugOutput(true);

  Serial.println();
  Serial.println();
  Serial.println();

  WiFi.mode(WIFI_STA);
  WiFiMulti.addAP(STASSID, STAPSK);
  Serial.println("setup() done connecting to ssid '" STASSID "'");

 
  pinMode(led1, OUTPUT); //led1 en sortie
  digitalWrite(led1, LOW); //allumer le relais
  
  
}

void loop() {
  // wait for WiFi connection
  if ((WiFiMulti.run() == WL_CONNECTED)) {

    std::unique_ptr<BearSSL::WiFiClientSecure> client(new BearSSL::WiFiClientSecure);

    client->setFingerprint(fingerprint_sni_cloudflaressl_com);
    // Or, if you happy to ignore the SSL certificate, then use the following line instead:
    // client->setInsecure();

    HTTPClient https;

    Serial.print("[HTTPS] begin...\n");
    if (https.begin(*client, jigsaw_host, jigsaw_port)) {  // HTTPS

      Serial.print("[HTTPS] GET...\n");
      // start connection and send HTTP header
      int httpCode = https.GET();

      // httpCode will be negative on error
      if (httpCode > 0) {
        // HTTP header has been send and Server response header has been handled
        Serial.printf("[HTTPS] GET... code: %d\n", httpCode);

        // file found at server
        if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) {
          String payload = https.getString();
          //Serial.println(payload);
          Serial.println("connection*******************************");
        }
      } else {
        Serial.printf("[HTTPS] GET... failed, error: %s\n", https.errorToString(httpCode).c_str());
        digitalWrite(led1, LOW); // alimenter le relais
        Serial.println("Echec connection CODE *******************************");
        digitalWrite(led1, HIGH);  //eteindre le relais
        delay(5000);     //attendre 5 secondes pour redemarrer
        digitalWrite(led1, LOW);  //allumer le relais
          

      }

      https.end();
    } else {
      Serial.printf("[HTTPS] Unable to connect\n");
      Serial.println("Echec connection HTTPS *******************************");
      digitalWrite(led1, HIGH);  //eteindre le relais
      delay(5000);     //attendre 5 secondes pour redemarrer
      digitalWrite(led1, LOW);  //allumer le relais


    }
  }else{
    //wifi non connecte
      Serial.println("Echec connection WIFI *******************************");
      digitalWrite(led1, HIGH);  //eteindre le relais
      delay(5000);     //attendre 5 secondes pour redemarrer
      digitalWrite(led1, LOW);  //allumer le relais

  }



  Serial.println("Wait 60s before next round...");
  delay(60000);
}

Si j'ai retrouvé le bon exemple, c'est dans le fichier certs.h inclue au début du fichier.

Il y a la variable jigsaw_host de définie

const char* jigsaw_host = "jigsaw.w3.org";
const uint16_t jigsaw_port = 443;

Mais du coup si tu changes, il faudra aussi mettre le bon certificat comme dans l'exemple.

ok merci

Je viens de voir sa, effectivement la requete est faite sur le site : jigsaw.w3.org

const char* jigsaw_host = "jigsaw.w3.org";
const uint16_t jigsaw_port = 443;

Comment puis je faire pour recuperer le certificat de google?

J'ai cherché sur le naviguateur mozilla, mais je ne trouve pas...

Si c'est juste pour savoir si tu as accès à internet de fonctionnel, tu dois pouvoir faire juste un test avec EthernetClient

Sinon, c'est pas forcément utile de faire une requête sécurisée, tu peux utiliser l'url non sécurisée(http://www.google.fr:80) tu obtiendra une réponse sans donnée avec un "status code" de 307, voir 308.

Bonsoir,

J'ai résolu un problème similaire en testant la réponse d'un serveur à un simple "ping" avec la bibliothèque Pinger pour ESP8266

Bonne bidouille
MicroQuettas

Merci, j'ai finallement contourné le problème en faisant une requete HTTP classique (comme proposé), sa marche bien, plus qu'a mettre le tout dans un boitier.