Récupération des couleurs Tempo EDF avec un ESP32

Thierry,

Avec comme ESP 32 ou 8266 ?
Car pas problème chez moi avec un ESP32 WROM !

J'utilise un lilygo t display S3
image

Un Iilygo, c'est peut-être la raison !
Bravo aussi.
Je vais adapter le prg à un esp32 S3 comme auparavant.

Oui c'est surement l'usage du lilygo et j'ai un gros code car j'ai plusieurs pages et une petite page web et mon code est peut être pas optimiser (je suis néophyte en la matière).

On est passé par la !

Hello,

Comme énoncé en post #181, j'ai repris le programme fonctionnant avec l'interrogation du site "https://www.services-rte.com/cms/open_data/v1/tempo?season=" au minimum.
Installé dans un module ESP32 Wroom et avec la bibliothèque ESP wroveur module.
La date et heure est récupérée sur le site "pool.ntp.org" puis mis en formes.
Puis suivi de la désérialisation des infos Json du nouveau site puis exploitée.

Bonnes bidouilles pour la personnalisation.
L'Arsène.

    05/10/2024 New_site Du fait que le site https://particulier.edf.fr/services/rest/referentiel/searchTempoStore?dateRelevant= ne répond plus, 
                        un autre site est https://www.services-rte.com/cms/open_data/v1/tempo?season= encore disponible mais ne donne pas les même infos concernant le nb. de jours Bleu Blanc Rouge restants
                        Le programme a donc été modifier selon les lignes de programme recueillis sur le net notamment chez sebitop et tierry3 du forum Arduino. Un grand merci à eux deux.            


*/


#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>

const char* ssid = "Nom du point d'accès";
const char* password = "Et son mot de passe";

const char* ntpServer = "pool.ntp.org";
const long gmtOffset_sec = 0;
const int daylightOffset_sec = 3600;

String JourJ;
String JourJ1;
String Jour;
int Int_Jour1;        // Pour jour + 1
String String_Jour1;  // Pour jour + 1
String Mois;
String An;
int Heure;
int Heure_1;
int Heure_mise_a_jour = 0;
String Minute;
int Minute_int;
int Minute_1;
int Seconde;
int Jour_int;
int Mois_int;
int An_int;
int Int_An1;         // Pour année + 1
String String_An1;   // Pour année + 1
int Nb_Bleu_int;
int Nb_Blanc_int;
int Nb_Rouge_int;
int JourJ_int;
int JourJ1_int;
int httpCode;        // Pour les codes de connections des sites interrogés
String Aujourdhui;   // Pour la demande de la couleur du jour
String Demain;       // Pour la demamnde de la couleur du lendemain
char buffer[3];      // Pour 3 caractères maxi 

const int Total_Nb_Bleu = 300;    // Valeur maximale du nombre de jours Bleus sur la saison 20xx à 20xx
const int Total_Nb_Blanc = 43;    // Valeur maximale du nombre de jours Blancs
const int Total_Nb_Rouge = 22;    // Valeur maximale du nombre de jours Rouges
int Compt_Bleu;
int Compt_Blanc;  
int Compt_Rouge; 

String Nb_Blanc;
String Nb_Rouge;
String Nb_Bleu;

#define Tempo_connection 10

void setup() {

  Serial.begin(115200);

  // Connection au Wi-Fi
  
  Serial.print("Connection à: ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED && millis() < 15000) {
    delay(500);
    Serial.print(".");
  }

  if (WiFi.status() == WL_CONNECTED) {
    Serial.println("");
    Serial.println("Connection WiFi établie");
    Serial.println("A l'adresse IP: ");
    Serial.println(WiFi.localIP());
    Serial.print("La valeur du signal WiFi: ");
    Serial.println(WiFi.RSSI());
   } else {
    Serial.println("La connection WiFi a échouée");
   
  }

  // Recherche de l'heure actuelle
  // Pour aller chercher la date et l'heure ainsi que les valeurs à afficher seulement au démarrage du programme, par la suite ce sera le RTC qui reprendre
  configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);

  printLocalTime();  // Programme de mise en forme des valeurs date et heure

    // Récupération des informations Tempo EDF
     Interrogations_site();


}  // Fin du setup



void loop() {


      if ((WiFi.status() != WL_CONNECTED) || (httpCode != HTTP_CODE_OK)) {  // Si le WiFi ne serait pas connecté ou pas de réponses des sites interrogés, on relance l'ESP
      ESP.restart();
       }

    if ((JourJ1.equals("NON_DEFINI")) && ((Heure >= 11) && (Minute_int != Minute_1))) {  // Si pas de mise à jour dans les temps (>= 11 Heure et Minute + 1 mn)
      Minute_1 = Minute_int;
      Serial.print("Mise à jour des infos à la minute à: ");
      Serial.print(Heure);
      Serial.print(" - ");
      Serial.println(Minute_int);

      if ((WiFi.status() != WL_CONNECTED) || (httpCode != HTTP_CODE_OK)) {  // Si le WiFi ne serait pas connecté ou pas de réponses des sites interrogés, on relance l'ESP
        ESP.restart();
        }
    }
 }     // Fin du void loop

 


   // Mise en forme de la date obtenue par le net
    void printLocalTime() {
    struct tm timeinfo;
    if (!getLocalTime(&timeinfo)) {
      Serial.println("Non obtension de la date/heure");
      return;
    }
    Serial.println();
    Serial.print("Date optenue : ");
    Serial.println(&timeinfo, "%F");


    char timeDay[3];
    strftime(timeDay, 3, "%d", &timeinfo);
    Jour = String(timeDay);
    Jour_int = String(timeDay).toInt();  // Conversion du String en int

    char timeMonth[4];
    strftime(timeMonth, 4, "%m", &timeinfo);
    Mois = String(timeMonth);
    Mois_int = String(timeMonth).toInt();

    char timeYear[6];
    strftime(timeYear, 6, "%Y", &timeinfo);
    An = String(timeYear);
    An_int = String(timeYear).toInt();

    char timeHour[10];
    strftime(timeHour, 10, "%H", &timeinfo);
    Heure = String(timeHour).toInt();

    char timeMinute[12];
    strftime(timeMinute, 12, "%M", &timeinfo);
    Minute = String(timeMinute);
    Minute_int = String(timeMinute).toInt();

    Serial.print("Heure optenue : ");
    Serial.print(" ");
    Serial.print(Heure + 1);
    Serial.print("h ");
    Serial.print(timeMinute);
    Serial.println("mn");


 }   // Fin du  void printLocalTime



  void Interrogations_site() {
    if (WiFi.status() == WL_CONNECTED) {
      HTTPClient http;

    // Mise en forme de Int_An + 1 vers String_An1
      Int_An1 = An_int + 1; 
       // Conversion de l'int Int_An1 en String  String_An1
       sprintf(buffer,"%d",Int_An1);                         // On convertit l'Int en Strin à la taille du buffer (nb. de caractères)
       String String_An1 = String(buffer);

    // On forme la variable "Saison"
    String Saison = String(An) + "-" + String(String_An1);

    // URL de l'API
      String url = "https://www.services-rte.com/cms/open_data/v1/tempo?season=" + String(Saison) ;
      http.begin(url);

      int httpCode = http.GET();  // Envoie la requête HTTP

      if (httpCode > 0) {
        String payload = http.getString();
        Serial.println("Données reçues de l'API : ");
        Serial.println(payload);

        // Décode le JSON
        DynamicJsonDocument doc(4096);
        deserializeJson(doc, payload);
        JsonObject values = doc["values"];

        // Initialiser les compteurs pour chaque couleur
        Compt_Bleu = 0;
        Compt_Blanc = 0;  
        Compt_Rouge = 0;  

        // Parcourir les données et compter les jours par couleur
        for (JsonPair kv : values) {
          String color = kv.value().as<String>();
          if (color == "BLUE") {
            Compt_Bleu++;
          } else if (color == "WHITE") {
            Compt_Blanc++;
           } else if (color == "RED") {
             Compt_Rouge++;
           }
       }

      // Calculer les jours restants
      Nb_Bleu_int = Total_Nb_Bleu - Compt_Bleu;              
      Nb_Blanc_int = Total_Nb_Blanc - Compt_Blanc;            
      Nb_Rouge_int = Total_Nb_Rouge - Compt_Rouge;

      // Afficher les résultats
      Serial.print("Nombre de jours  Bleu restants : ");
      Serial.println (Nb_Bleu_int);
      Serial.print("Nombre de jours Blanc restants : ");
      Serial.println(Nb_Blanc_int);
      Serial.print("Nombre de jours Rouge restants : ");
      Serial.println(Nb_Rouge_int);

       String Aujourdhui = String(An) + "-" + String(Mois) + "-" + String(Jour);

       // Pour la conversion du Jour1_int en Sring Jour1_String 
       Int_Jour1 = Jour_int + 1;

       // Conversion de l'int Int_Jour1 en String  String_Jour1
       sprintf(buffer,"%d",Int_Jour1);
       String String_Jour1 = String(buffer);
       String Demain = String(An) + "-" + String(Mois) + "-" + String(String_Jour1);



      // Extraire les couleurs pour aujourd'hui et demain
       JourJ = doc["values"][Aujourdhui] | "UNKNOWN";
       JourJ1 = doc["values"][Demain] | "UNKNOWN";    


      // Afficher les couleurs d'aujourd'hui et de demain
       Serial.println("Couleur d'aujourd'hui : " + JourJ);
       Serial.println("Couleur de demain : " + JourJ1);

    } else {
      Serial.println("Erreur lors de la récupération des données : " + String(httpCode));
       }
       http.end();         // Fermer la connexion


       Serial.print("Temporisation d'une heure en cours");
       delay(86400);   // Tempo d'une heure 
  }

 }    // Fin void

Avec 188 posts divers ce topic n'est plus vraiment un tuto... Un nouvel entrant ne va pas s'y retrouver pour faire ce projet.

Je suggère de déplacer cette discussion dans la partie principale du forum et je propose que @rollmops67, @MicroQuettas, @Thierry03 ou encore @LArsene57 soumettent (ensemble ou séparément dans un même fil) quelque chose de fonctionnel dans la partie Projets finis.

Qu'en pensez vous ?

Bonjour J-M-L,

Pourquoi pas ! Je pense que le dernier mot serait celui de rollmops étant à l’origine de ce sujet ?

Cordialement.
Arsène.

Bonjour à toutes et tous,

D'abord un grand merci @J-M-L pour la maintenance de ce forum...
Ma contribution sur ce fil était uniquement pour signaler qu'un site donnant les couleurs Tempo était opérationnel. Entre temps, un nouveau est apparu, plus facile à utiliser que l'autre. En conséquence, mon post ne présente pas d'intérêt pour la communauté et je ne le reprendrai pas dans le nouveau fil.

J'ai par ailleurs réalisé un petit programme d'extraction des couleurs Tempo pour le nouveau site, mais sur ESP8266. Le fil courant étant sur ESP32, je ne le publierai que sur demande dans un fil séparé.

Bonne journée et bonne bidouille à tous et encore merci pour la qualité de vos interventions.

MicroQuettas

Peut-être qu'on pourrait avoir dans la catégorie "projets finis" un fil spécifiques "Solutions pour extraire les couleurs Tempo EDF" et ceux qui ont un code fonctionnel pourraient y poster leur code et photos de leurs réalisations ?

Au moins on aurait tout à un seul endroit et on recommanderait de poser les questions afférentes à ces code dans le forum principal - ce qui laisserait le fil "propre" .

Bonjour J-M-L,

Je pense qu'après le 1er novembre un certain nombre d'internaute remarquerons que leur application ne leur donnera plus les infos souhaités, ils se retourneront vers ce site etc ....
Peut être que un message les invitera à consulter le nouveau site et son fil spécifique ?

Pour l'instant je n'ai rien déplacé.

C'est votre fil, je vous laissez décider ce qu'il y a de mieux

Bonjour à toutes et tous,

@J-M-L je publierai mon petit extracteur de couleur Tempo pour ESP8266 dans un fil séparé... mais pas tout de suite...

Bonne journée à toutes et tous

MicroQuettas

Souhaitez vous que je déplace ces 195 messages dans le forum principal et je vous laisse recréer ensuite dans les projets finis vos codes respectifs, peut être dans un fil intitulé "Exemples de projets pour la récupérations des couleurs Tempo EDF" ?

➜ je vous laisse voter.

  • Oui, cette discussion est trop longue, ce n'est plus un tuto ou un cours. Il faut la déplacer dans le forum principal.
  • Non, pas la peine de faire quoi que ce soit
0 voters

Oulah, je débarque juste, je suis rarement chez moi ces dernières semaines.
C'est vrai que ça devient un peu touffu par ici, mais bon ça ne me choque pas ni ne me gêne plus que ça.

Roland

Roland

Pour l’instant le vote est assez équilibré donc je ne change rien

Hello, LArsene57
Juste pour info, j'avais utilisé l'API native RTE ecowatt comme décrite au post #1 de rollmops67 et je n'ai pas eu d'interruption de service :blush:. Cette API est utilisée par beaucoup d'applications tierces gage de stabilité (entre autre une intégration HomeAssistant)
Eric

Salut Eric,

Je crois que je vais comme toi et Roland, trop de problèmes de récupérations des données, par exemple la date doit être de 4 chiffres dans tous les cas, ce qui comme aujourd'hui le 1er et faut écrire 01, idem pour le mois etc..
De plus alors que sur les sites officielles de RTE, l'info de la couleur du lendemain est encore sur incertaine, sur le site interrogé par le programme, la couleur est de suite Bleu !!!!!

Au fait, tes travaux récents ont été concrétisés ?

Bon grand WE.
L'Arsène.