06-09-2024, 11:26 AM
(Modification du message : 06-09-2024, 04:36 PM par PhDV61.
Raison de la modification: Mise à jour du code pour corriger une erreur
)
voilà ce que j'ai fait pour corriger les "valeurs erronées".
1/ instrumenter le code pour afficher dans la page web "données brutes" les données stockées qui posent problème.
2/ définir une logique de correction
3/ implémenter la correction des données en EEPROM, chez moi en stockant simplement la valeur de la veille + 15000W dans la valeur erronée.
la fonction a modifier dans stockage.ino pour faire apparaitre les données "erronées" ( chez moi > 50000 ou <-50000 ),
puis, une fois sûr de mon coup, en écrivant le correctif dans l'EEPROM.
String HistoriqueEnergie1An(void) {
String S = "";
int Adr_SoutInjec = 0;
long EnergieJour = 0;
long DeltaEnergieJour = 0;
int iS = 0;
long lastDay = 0;
int index=0;
for (int i = 0; i < NbJour; i++) {
iS = (idxPromDuJour + i + 1) % NbJour;
Adr_SoutInjec = adr_HistoAn + iS * 4;
EnergieJour = EEPROM.readLong(Adr_SoutInjec);
// if (EnergieJour<0) EnergieJour = 0;
if (lastDay == 0) { lastDay = EnergieJour; }
DeltaEnergieJour = EnergieJour - lastDay;
// ici, on affiche les problèmes détectés dans la page "données brutes". Bien analyser et comprendre avant de définir la logique de correction
if ( (DeltaEnergieJour<0) )
{
StockMessage(" erreur stockage E_Jour, lastDay, Delta : " + String(i) + "," + String(index++) + "," +
String(EnergieJour) + "," + String(lastDay) );
EnergieJour = lastDay + 15000; // mise à jour du compteur stocké erroné. C'est chez moi "Energie jour" qui est "faussée".
EEPROM.writeLong(Adr_SoutInjec, EnergieJour); // et on remplace la valeur en EEPROM
EnergieJour = EEPROM.readLong (Adr_SoutInjec); // puis on relit pour vérifier. On ne sait jamais. Mieux vaut être sûr.
DeltaEnergieJour = EnergieJour - lastDay; // on recalcule DeltaEnergieJour qui doit maintenant valoir 15000 (valeur moyenne chez moi)
StockMessage(" Correction : E_Jour, lastDay, Delta : " + String(i) + "," + String(index) + "," +
String(EnergieJour) + "," + String(lastDay) );
}
lastDay = EnergieJour;
S += String(DeltaEnergieJour) + ",";
}
return S;
}
et voilà , les erreurs détectées, l'affichage avant la correction, et après. Tout rentre dans l'ordre.
1/ instrumenter le code pour afficher dans la page web "données brutes" les données stockées qui posent problème.
2/ définir une logique de correction
3/ implémenter la correction des données en EEPROM, chez moi en stockant simplement la valeur de la veille + 15000W dans la valeur erronée.
la fonction a modifier dans stockage.ino pour faire apparaitre les données "erronées" ( chez moi > 50000 ou <-50000 ),
puis, une fois sûr de mon coup, en écrivant le correctif dans l'EEPROM.
String HistoriqueEnergie1An(void) {
String S = "";
int Adr_SoutInjec = 0;
long EnergieJour = 0;
long DeltaEnergieJour = 0;
int iS = 0;
long lastDay = 0;
int index=0;
for (int i = 0; i < NbJour; i++) {
iS = (idxPromDuJour + i + 1) % NbJour;
Adr_SoutInjec = adr_HistoAn + iS * 4;
EnergieJour = EEPROM.readLong(Adr_SoutInjec);
// if (EnergieJour<0) EnergieJour = 0;
if (lastDay == 0) { lastDay = EnergieJour; }
DeltaEnergieJour = EnergieJour - lastDay;
// ici, on affiche les problèmes détectés dans la page "données brutes". Bien analyser et comprendre avant de définir la logique de correction
if ( (DeltaEnergieJour<0) )
{
StockMessage(" erreur stockage E_Jour, lastDay, Delta : " + String(i) + "," + String(index++) + "," +
String(EnergieJour) + "," + String(lastDay) );
EnergieJour = lastDay + 15000; // mise à jour du compteur stocké erroné. C'est chez moi "Energie jour" qui est "faussée".
EEPROM.writeLong(Adr_SoutInjec, EnergieJour); // et on remplace la valeur en EEPROM
EnergieJour = EEPROM.readLong (Adr_SoutInjec); // puis on relit pour vérifier. On ne sait jamais. Mieux vaut être sûr.
DeltaEnergieJour = EnergieJour - lastDay; // on recalcule DeltaEnergieJour qui doit maintenant valoir 15000 (valeur moyenne chez moi)
StockMessage(" Correction : E_Jour, lastDay, Delta : " + String(i) + "," + String(index) + "," +
String(EnergieJour) + "," + String(lastDay) );
}
lastDay = EnergieJour;
S += String(DeltaEnergieJour) + ",";
}
return S;
}
et voilà , les erreurs détectées, l'affichage avant la correction, et après. Tout rentre dans l'ordre.
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.