31-08-2024, 02:34 PM
(Modification du message : 01-09-2024, 04:07 PM par PhDV61.
Raison de la modification: Correction apportée : "retry" forcé au cas où le code du jour n'est pas reçu
)
Je ne pense pas. Le site RTE continue à donner les bonnes info.
Cela ressemble beaucoup à un problème EDF.
Sur leurs pages web publiques, les données sont correctes également.
Voilà un code de substitution qui va chercher les infos RTE sur un site "relai" "privé" que j'indiquais plus haut www.api-couleur-tempo.fr
Cela permet d'attendre une solution pérenne et viable.
Ce code, qui fonctionne, doit remplacer le code tempo_EDF.ino. Chez moi en V11.17+
Je vous invite à changer également la première ligne du fichier principal du RMS en "#define Version "11.17 Tempo" pour connaitre la version qui tourne sur vos ESPs.
Le code est perfectible, mais il a le mérite de dépanner en attendant mieux.
// **************************************************************
// * Recherche Info Tempo EDF pour toute source y compris Linky *
// **************************************************************
// V1 PhDV61 01-09-2024
void Call_EDF_data() {
const char* adr_API_Host = "api-couleur-tempo.fr";
String Host = String("https://www.api-couleur-tempo.fr");
String APIdata = "";
String line = "";
int Hcour = HeureCouranteDeci / 2; //Par pas de 72secondes pour faire 2 appels si un bug
int LastH = LastHeureEDF / 2;
// 300*2=600 = 6h du matin 310x2 = 620 = 6h12 530x2 =1060 10h36 560 = 1120 = 11h12 600 = 1200 => midi ou 12h
if ((LastH != Hcour) && ( Hcour == 300 || Hcour == 310 || Hcour == 530 || Hcour == 560 || Hcour == 600 || Hcour == 900 || Hcour == 1150) || LastHeureEDF < 0)
{
if (TempoEDFon == 1)
{
clientAPI.setInsecure();
if (!clientAPI.connect(adr_API_Host, 443)) // tentative de connexion au site "relais" API-RTE
{
StockMessage("1st Connection failed to API server :" + Host);
return;
}
else // connexion réussie
{
clientAPI.print(String("GET https://www.api-couleur-tempo.fr/api/jou.../today\r\n"));
int timeout = millis();
Serial.println("Request couleur Tempo du jour vers API - Envoyée");
delay(100);
// Lecture des données API tempo distantes
while ( clientAPI.available() && ( (millis() - timeout) < 2000) )
{
line = clientAPI.readStringUntil('\n');
APIdata += line;
}
if ( (millis() - timeout) >= 2000 )
{
StockMessage("client ESP_RMS Timeout réception API jour - " + String(APIdata.length()) + " données lues " );
clientAPI.stop();
return;
}
Serial.println( String(APIdata.length()) + " données lues ");
Serial.println( APIdata );
String LTARFrecu = APIJson("codeJour", APIdata);
if (LTARFrecu == "1") LTARF="TEMPO BLEU";
else if (LTARFrecu == "2") LTARF="TEMPO BLANC";
else if (LTARFrecu == "3") LTARF="TEMPO ROUGE";
else LTARF="";
if ( (LTARFrecu == "1") || (LTARFrecu == "2") || (LTARFrecu == "3") )
{
Serial.println( "Tarif du jour : " + LTARF );
StockMessage ( "Tarif du jour : " + LTARF );
LastHeureEDF = HeureCouranteDeci; // Heure de lecture couleur Tempo EDF du jour
}
else // pas normal. le code jour devrait être pourtant renseigné. Il va falloir ré-essayer
{
Serial.println( "Tarif du jour inconnu" );
StockMessage ( "Tarif du jour inconnu" );
}
while ( clientAPI.available() ) clientAPI.read(); // on vide le buffer
APIdata="";
clientAPI.stop();
}
if (!clientAPI.connect(adr_API_Host, 443)) // tentative de connexion au site "relais" API-RTE
{
StockMessage("2nd Connection to API server failed :" + Host);
return;
}
else
{
clientAPI.print(String("GET https://www.api-couleur-tempo.fr/api/jou...morrow\r\n"));
Serial.println("Request couleur Tempo lendemain vers API - Envoyée");
delay(100);
int timeout = millis();
// Lecture des données API tempo lendemain distantes
while ( clientAPI.available() && ( (millis() - timeout) < 2000) )
{
line = clientAPI.readStringUntil('\n');
APIdata += line;
}
if ( (millis() - timeout) >= 2000 )
{
StockMessage("client ESP_RMS Timeout réception API lendemain - " + String(APIdata.length()) + " données lues " );
clientAPI.stop();
return;
}
Serial.println( String(APIdata.length()) + " données lues ");
Serial.println( APIdata );
clientAPI.stop();
String LTARFrecu = APIJson("codeJour", APIdata); // Code lendemain
APIdata = "";
line="";
if (LTARFrecu == "1") line = "4";
else if (LTARFrecu == "2") line = "8";
else if (LTARFrecu == "3") line = "C";
STGE = line; //Valeur Hexa code du Linky
String tarif_lendemain=" inconnu";
if (LTARFrecu == "1") tarif_lendemain = "TEMPO BLEU";
else if (LTARFrecu == "2") tarif_lendemain = "TEMPO BLANC";
else if (LTARFrecu == "3") tarif_lendemain = "TEMPO ROUGE";
Serial.println( "Tarif du lendemain : " + tarif_lendemain);
StockMessage( "Tarif du lendemain : " + tarif_lendemain);
}
}
else // la couleur tempo n'est pas (ou plus) requise
{
LTARF = "";
STGE = "0";
}
}
}
Et il faudra également ajouter une fonction "APIJson" de décodage dans le source "enphase.ino" vers les lignes 375... car celles existantes ne fonctionnent pas avec le format de données du site questionné.
String APIJson(String nom, String Json) {
int p = Json.indexOf(nom );
Json = Json.substring(p);
p = Json.indexOf(":");
Json = Json.substring(p + 1);
p = Json.indexOf(",");
Json = Json.substring(0, p);
return Json;
}
Cela ressemble beaucoup à un problème EDF.
Sur leurs pages web publiques, les données sont correctes également.
Voilà un code de substitution qui va chercher les infos RTE sur un site "relai" "privé" que j'indiquais plus haut www.api-couleur-tempo.fr
Cela permet d'attendre une solution pérenne et viable.
Ce code, qui fonctionne, doit remplacer le code tempo_EDF.ino. Chez moi en V11.17+
Je vous invite à changer également la première ligne du fichier principal du RMS en "#define Version "11.17 Tempo" pour connaitre la version qui tourne sur vos ESPs.
Le code est perfectible, mais il a le mérite de dépanner en attendant mieux.
// **************************************************************
// * Recherche Info Tempo EDF pour toute source y compris Linky *
// **************************************************************
// V1 PhDV61 01-09-2024
void Call_EDF_data() {
const char* adr_API_Host = "api-couleur-tempo.fr";
String Host = String("https://www.api-couleur-tempo.fr");
String APIdata = "";
String line = "";
int Hcour = HeureCouranteDeci / 2; //Par pas de 72secondes pour faire 2 appels si un bug
int LastH = LastHeureEDF / 2;
// 300*2=600 = 6h du matin 310x2 = 620 = 6h12 530x2 =1060 10h36 560 = 1120 = 11h12 600 = 1200 => midi ou 12h
if ((LastH != Hcour) && ( Hcour == 300 || Hcour == 310 || Hcour == 530 || Hcour == 560 || Hcour == 600 || Hcour == 900 || Hcour == 1150) || LastHeureEDF < 0)
{
if (TempoEDFon == 1)
{
clientAPI.setInsecure();
if (!clientAPI.connect(adr_API_Host, 443)) // tentative de connexion au site "relais" API-RTE
{
StockMessage("1st Connection failed to API server :" + Host);
return;
}
else // connexion réussie
{
clientAPI.print(String("GET https://www.api-couleur-tempo.fr/api/jou.../today\r\n"));
int timeout = millis();
Serial.println("Request couleur Tempo du jour vers API - Envoyée");
delay(100);
// Lecture des données API tempo distantes
while ( clientAPI.available() && ( (millis() - timeout) < 2000) )
{
line = clientAPI.readStringUntil('\n');
APIdata += line;
}
if ( (millis() - timeout) >= 2000 )
{
StockMessage("client ESP_RMS Timeout réception API jour - " + String(APIdata.length()) + " données lues " );
clientAPI.stop();
return;
}
Serial.println( String(APIdata.length()) + " données lues ");
Serial.println( APIdata );
String LTARFrecu = APIJson("codeJour", APIdata);
if (LTARFrecu == "1") LTARF="TEMPO BLEU";
else if (LTARFrecu == "2") LTARF="TEMPO BLANC";
else if (LTARFrecu == "3") LTARF="TEMPO ROUGE";
else LTARF="";
if ( (LTARFrecu == "1") || (LTARFrecu == "2") || (LTARFrecu == "3") )
{
Serial.println( "Tarif du jour : " + LTARF );
StockMessage ( "Tarif du jour : " + LTARF );
LastHeureEDF = HeureCouranteDeci; // Heure de lecture couleur Tempo EDF du jour
}
else // pas normal. le code jour devrait être pourtant renseigné. Il va falloir ré-essayer
{
Serial.println( "Tarif du jour inconnu" );
StockMessage ( "Tarif du jour inconnu" );
}
while ( clientAPI.available() ) clientAPI.read(); // on vide le buffer
APIdata="";
clientAPI.stop();
}
if (!clientAPI.connect(adr_API_Host, 443)) // tentative de connexion au site "relais" API-RTE
{
StockMessage("2nd Connection to API server failed :" + Host);
return;
}
else
{
clientAPI.print(String("GET https://www.api-couleur-tempo.fr/api/jou...morrow\r\n"));
Serial.println("Request couleur Tempo lendemain vers API - Envoyée");
delay(100);
int timeout = millis();
// Lecture des données API tempo lendemain distantes
while ( clientAPI.available() && ( (millis() - timeout) < 2000) )
{
line = clientAPI.readStringUntil('\n');
APIdata += line;
}
if ( (millis() - timeout) >= 2000 )
{
StockMessage("client ESP_RMS Timeout réception API lendemain - " + String(APIdata.length()) + " données lues " );
clientAPI.stop();
return;
}
Serial.println( String(APIdata.length()) + " données lues ");
Serial.println( APIdata );
clientAPI.stop();
String LTARFrecu = APIJson("codeJour", APIdata); // Code lendemain
APIdata = "";
line="";
if (LTARFrecu == "1") line = "4";
else if (LTARFrecu == "2") line = "8";
else if (LTARFrecu == "3") line = "C";
STGE = line; //Valeur Hexa code du Linky
String tarif_lendemain=" inconnu";
if (LTARFrecu == "1") tarif_lendemain = "TEMPO BLEU";
else if (LTARFrecu == "2") tarif_lendemain = "TEMPO BLANC";
else if (LTARFrecu == "3") tarif_lendemain = "TEMPO ROUGE";
Serial.println( "Tarif du lendemain : " + tarif_lendemain);
StockMessage( "Tarif du lendemain : " + tarif_lendemain);
}
}
else // la couleur tempo n'est pas (ou plus) requise
{
LTARF = "";
STGE = "0";
}
}
}
Et il faudra également ajouter une fonction "APIJson" de décodage dans le source "enphase.ino" vers les lignes 375... car celles existantes ne fonctionnent pas avec le format de données du site questionné.
String APIJson(String nom, String Json) {
int p = Json.indexOf(nom );
Json = Json.substring(p);
p = Json.indexOf(":");
Json = Json.substring(p + 1);
p = Json.indexOf(",");
Json = Json.substring(0, p);
return Json;
}
V12.0 modifiée récurrence d'interrogation serveurs, RTE, et code UxIx3. 1 serveur RMS UxIx3, 1 client Triac CE + 1 client SSR CE. 1 client SSR sur CE tri sur 1 serveur Linky réf. CACSI. Variateurs de fréquence sur Piscine et Spa.
6 panneaux (2 SO 2 S, 2 SE ) 425Wc produisent 13kWh de jour actuellement.
6 panneaux (2 SO 2 S, 2 SE ) 425Wc produisent 13kWh de jour actuellement.