stockage eeprom - Version imprimable +- F1ATB forum (https://f1atb.fr/forum_f1atb) +-- Forum : Forum de F1ATB (https://f1atb.fr/forum_f1atb/forum-3.html) +--- Forum : Routeur Photovoltaïque (https://f1atb.fr/forum_f1atb/forum-4.html) +--- Sujet : stockage eeprom (/thread-431.html) Pages :
1
2
|
stockage eeprom - dltrainou - 06-09-2024 Bonjour, j'ai la 1ere donnée du stockage eeprom annuel qui est aberrante (10000000) est il possible de la supprimer en gardant les autres? merci d'avance et bonne journée. RE: stockage eeprom - PhDV61 - 06-09-2024 J'ai la même chose sur l'un de mes ESP. Est-ce un bug du code, ou une faiblesse de l'ESP ? je ne sais pas. Mais j'ai eu le cas sur plusieurs ESP. A part faire un bout de code (au reset ?) qui vient lire les data en EEPROM, et les "nettoie" en filtrant les quelques données aberrantes (par exemple en les remplaçant par la moyenne des deux valeurs qui l'entourent), ou faire un reset complet en changeant la clé, mais dans ce cas on perd l'historique, je ne vois pas. On peut s'inspirer du module stockage pour écrire ce code. ça ne doit pas être trop compliqué. Quand j'ai le temps, je me penche dessus. Bon, j'ai instrumenté le code stockage pour comprendre pourquoi les données sont "vérolées". Dans mon cas, j'ai un serveur Linky, et un serveur UxIx3. Mon serveur UxIx3 est mon serveur "principal" pour les données de consommation. Par contre, avec tous les plantages depuis la 9.03 et jusqu'à la V11.19 compilée avec la version beta de la bibliothèque cartes qui fonctionne merveilleusement bien, j'ai passé mon ESP Chauffe-eau enfants de UxIx3 à Linky. SAUF QUE, si je le laisse la nuit sur serveur Linky, alors la donnée de conso enregistrée en EEPROM est celle du Linky, et pas celle du serveur UxIx3 qui n'a pas la même origine/historique. Du coup, puisque c'est la valeur totale qui est enregistrée chaque jour, et pas la valeur du jour, dans l'historique, alors les calculs effectués pour retrouver la valeur consommée chaque jour deviennent FAUX. Peut-être aurait-il fallu stocker les conso jour, et pas la conso totale dans l'EEPROM. ainsi, l'intégrité de l'historique aurait été conservée même lorsqu"on bascule d'un serveur à l'autre. Pas de chance. Je vais juste corriger ces valeurs "à la main" avec un bout de code pour que tout rentre dans l'ordre chez moi, et je ferai attention à l'avenir de bien revenir à la configuration UxIx3 pour tous mes clients avant d'aller me coucher quand je bidouille. RE: stockage eeprom - PhDV61 - 06-09-2024 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. RE: stockage eeprom - F1ATB - 06-09-2024 Oui, c'est un problème dont je n'ai toujours pas compris l'origine. J'ai cela sur1 de mes 4 ESP qui tournent H24. RE: stockage eeprom - PhDV61 - 06-09-2024 Chez moi, j'ai identifié la source du problème André. C'est le basculement entre deux sources de puissances. Car tu stockes la conso totale, et non pas la conso du jour. Comme la conso totale change d'une source de mesure de puissance à une autre, alors on stocke des données incohérentes. Et quand tu recalcules les conso jours, en soustrayant à la conso totale jusqu'à ce jour, la conso totale jusqu'à la veille, tu te retrouves avec n'importe quoi si entre temps la source a été changée (par ex chez toi entre UxIx2 et Linky ( et chez moi entre Linky et UxIx3 ). Il aurait mieux valu je pense stocker vraiment la conso DU jour sur 365 jours. Ainsi, plus de risque d'erreur en cas de changement de source. RE: stockage eeprom - F1ATB - 06-09-2024 Je vais regarder. Merci Philippe RE: stockage eeprom - dltrainou - 15-10-2024 (06-09-2024, 11:26 AM)PhDV61 a écrit : Bonjour et merci du tuyau!. RE: stockage eeprom - F1ATB - 15-10-2024 Appuyez sur le bouton RAZ de la V12 et tout sera enlevé. André RE: stockage eeprom - dltrainou - 16-10-2024 Merci André mais je voudrais conserver l'historique, de plus je suis en version 11, comme j'ai ajouté de l'affichage, je ne change pas de version trop souvent. J'ai fait la modif ci dessus, rectifié les valeurs de l'EEPROM, mais elle ne sont pas gardées a la relecture!!! je dois laisser la rectification en permanence pour avoir un affichage correct. Je n'ai pas trop trouvé de doc sur la fonction "commit"! ca fait quoi? écriture en dur? bonne journée RE: stockage eeprom - F1ATB - 16-10-2024 Il faut terminer toute sequence d'ecriture par commit. C'est la que cela devient effectif. Cdlt |