15-10-2024, 09:19 AM
(06-09-2024, 11:26 AM)PhDV61 a écrit : Bonjour et merci du tuyau!.
Faut il faire un EEPRIOM.commit pour stocker en dur dans l'EEPROM?
sinon les valeurs ne sont pas réellement stockées dans l'EEPROM, si on relit , les valeurs ne sont pas modifiées, on ne modifie que l'affichage!!
Bonne journée.
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.