Je confirme, il y a bien un problème avec le Linky et la couleur du lendemain, c'est toujours bien en retard par rapport à la décision de RTE qui impose la couleur tempo du jour suivant (c'est vers 10h00). C'est même en retard avec EDF. Donc pour anticiper en J pour la période j+1 rouge c'est limite alors qu'avec RTE on a environ 20 heures.
Par exemple il est 15 heures et toujours pas la couleur bleu pour demain.
C'est même un comble puisque sur le site EDF c'est inscrit que c'est à 11h00 (pourquoi pas avant c'est mystérieux...) et effectivement c'est bien affiché à 15 heures.
Donc pour cette partie inutile de décoder la trame ...En cherchant il y a une API sur le site de RTE mais pour l'instant trop difficile pour moi....
En revanche j'ai trouvé celle ci qui est simple à implémenter sur un site
c'est ici : https://www.api-couleur-tempo.fr/
Donc sur mon site j'utilise deux requêtes today et tomorrow et j'ai un code jour 1, 2, 3 (rouge) et une période associée.
<?php
// Appel à la première API
$url_today = 'https://www.api-couleur-tempo.fr/api/jourTempo/today';
$headers = array(
'Accept: application/json'
);
$ch_today = curl_init($url_today);
curl_setopt($ch_today, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch_today, CURLOPT_RETURNTRANSFER, true);
$response_today = curl_exec($ch_today);
curl_close($ch_today);
// Appel à la deuxième API
$url_tomorrow = 'https://www.api-couleur-tempo.fr/api/jourTempo/tomorrow';
$ch_tomorrow = curl_init($url_tomorrow);
curl_setopt($ch_tomorrow, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch_tomorrow, CURLOPT_RETURNTRANSFER, true);
$response_tomorrow = curl_exec($ch_tomorrow);
curl_close($ch_tomorrow);
// Fusionner les réponses en un seul tableau
$data_today = json_decode($response_today, true);
$data_tomorrow = json_decode($response_tomorrow, true);
// Fusionner les données des deux API
$merged_data = array(
"today" => $data_today,
"tomorrow" => $data_tomorrow
);
// Retourner les données fusionnées au format JSON
header('Content-Type: application/json');
echo json_encode($merged_data);
?>
{"today":{"dateJour":"2024-04-01","codeJour":1,"periode":"2023-2024"},"tomorrow":{"dateJour":"2024-04-02","codeJour":1,"periode":"2023-2024"}}
reste à interroger vers 10h40 mon site et j'ai sur l'arduino (ici avec un UNO R4 et un shield ethernet) la couleur pour demain.
#include <SPI.h>
#include <Ethernet2.h>
#include <ArduinoJson.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0x12, 0x12 }; // Adresse MAC du shield Ethernet
byte ip[] = { 192, 168, 2, 26 };
char server[] = "couvercelle.org";
char path[] = "/index.php";
int port = 80; // port 80 is the default for HTTP
char username[] = "admin";
char password[] = "Barbare!";
EthernetClient client;
void setup() {
Serial.begin(9600);
Ethernet.begin(mac, ip);
delay(1000);
Serial.println("Init...");
}
void loop() {
Serial.println("connecting...");
if (client.connect(server, port)) {
Serial.println("connected");
client.print("GET ");
client.print(path);
client.println(" HTTP/1.1");
client.print("Host: ");
client.println(server);
client.println("Connection: close");
client.println();
} else {
Serial.println("connection failed");
}
// Lecture de la réponse du serveur
String response;
bool jsonStarted = false;
while (client.connected()) {
if (client.available()) {
String line = client.readStringUntil('\n');
if (line.startsWith("{")) {
jsonStarted = true;
response += line;
} else if (jsonStarted && line == "\r") {
break;
} else if (jsonStarted) {
response += line;
}
}
}
// Déconnexion du serveur
Serial.println("disconnecting.");
client.stop();
// Analyse de la réponse JSON
DynamicJsonDocument doc(1024); // Choisissez une taille de document en fonction de vos besoins
DeserializationError error = deserializeJson(doc, response);
if (!error) {
// Extraction des données JSON
JsonObject today = doc["today"];
JsonObject tomorrow = doc["tomorrow"];
const char* dateJour_today = today["dateJour"];
int codeJour_today = today["codeJour"];
const char* periode_today = today["periode"];
const char* dateJour_tomorrow = tomorrow["dateJour"];
int codeJour_tomorrow = tomorrow["codeJour"];
const char* periode_tomorrow = tomorrow["periode"];
// Affichage des données extraites
Serial.println("Data received:");
Serial.println("Today:");
Serial.print("Date du jour: ");
Serial.println(dateJour_today);
Serial.print("Code du jour: ");
Serial.println(codeJour_today);
Serial.print("Période: ");
Serial.println(periode_today);
Serial.println("Tomorrow:");
Serial.print("Date du jour: ");
Serial.println(dateJour_tomorrow);
Serial.print("Code du jour: ");
Serial.println(codeJour_tomorrow);
Serial.print("Période: ");
Serial.println(periode_tomorrow);
} else {
Serial.print("Failed to parse JSON: ");
Serial.println(error.c_str());
}
// Attente avant la prochaine requête
delay(10000); // Attendre une minute avant la prochaine requête
}