evcs_import_jour_kwh : le compteur du contacteur EDF fait foi, le MultiPlus en recoupement et en repli

Premier releve live (26/09 12:19) : compteur EDF 0,8 = VRM, delta des
compteurs AC-in du MultiPlus 0,7 (0,6 + 0,1, pas apparent de 0,1 kWh).
Repli sur le MultiPlus si le compteur EDF est muet ou remis a zero.
Tests diagnostics 55/55, deux mutations qui mordent.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011xd7aRDEChdShwsECohnDN
This commit is contained in:
Tallagrand Thierry
2026-09-26 12:32:05 +02:00
parent 4f5403a278
commit 63d93667d1
3 changed files with 55 additions and 47 deletions

View File

@@ -223,24 +223,25 @@ for (const [nom, r, test] of res) {
console.log(`${ok ? 'OK ' : 'KO '} ${nom}`);
}
// Import depuis minuit. Valeurs de minuit fictives, deltas du 26/09 (0,8 kWh VRM).
// Import depuis minuit. Releve reel du 26/09 12:19 : EDF 0,8 (= VRM), MultiPlus 0,6 + 0,1.
const [OUT, INV] = COMPTEURS_IMPORT;
const mn = { [OUT]: 1200.00, [INV]: 845.00, [COMPTEUR_EDF]: 3082.00 };
const mn = { [OUT]: 1200.0, [INV]: 845.0, [COMPTEUR_EDF]: 3082.0 };
const ok26 = { [OUT]: 1200.6, [INV]: 845.1, [COMPTEUR_EDF]: 3082.83 };
const imp = [
['26/09 : 0,5 vers maison + 0,3 vers batterie -> 0,8 complet, recoupe EDF',
importJour({ [OUT]: 1200.5, [INV]: 845.3, [COMPTEUR_EDF]: 3082.83 }, mn),
(r) => r.etat === 0.8 && r.attributs.statut === 'complet' && r.attributs.compteur_edf_kwh === 0.8
&& r.attributs.detail_kwh.vers_ac_out === 0.5 && r.attributs.detail_kwh.vers_inverter === 0.3],
['26/09 : le compteur EDF fait foi -> 0,8 comme VRM, MultiPlus 0,7 en recoupement',
importJour(ok26, mn), (r) => r.etat === 0.8 && r.attributs.source === 'compteur_edf' && r.attributs.victron_kwh === 0.7],
['journee sans reseau -> 0, pas indisponible',
importJour({ [OUT]: 1200, [INV]: 845, [COMPTEUR_EDF]: 3082 }, mn), (r) => r.etat === 0 && r.attributs.statut === 'complet'],
['compteur remis a zero -> indetermine, jamais un import negatif',
importJour({ [OUT]: 3.2, [INV]: 845.3 }, mn), (r) => r.etat === 'indetermine'],
['un compteur illisible -> partiel, au moins',
importJour({ [OUT]: 1200.5, [INV]: null }, mn), (r) => r.etat === 0.5 && r.attributs.statut === 'partiel'],
['valeur de minuit inconnue -> indisponible',
importJour({ [OUT]: 1200.5, [INV]: 845.3 }, {}), (r) => r.etat === 'indisponible'],
['compteur EDF absent : le total ne change pas, recoupement null',
importJour({ [OUT]: 1200.5, [INV]: 845.3 }, mn), (r) => r.etat === 0.8 && r.attributs.compteur_edf_kwh === null],
['compteur EDF remis a zero -> repli MultiPlus, jamais un import negatif',
importJour({ ...ok26, [COMPTEUR_EDF]: 0.4 }, mn), (r) => r.etat === 0.7 && r.attributs.statut === 'repli_victron'],
['compteur EDF muet -> repli MultiPlus, dit « environ »',
importJour({ ...ok26, [COMPTEUR_EDF]: null }, mn), (r) => r.etat === 0.7 && /Environ/.test(r.attributs.explication)],
['EDF muet ET un MultiPlus remis a zero -> indisponible',
importJour({ [OUT]: 3.2, [INV]: 845.1, [COMPTEUR_EDF]: null }, mn), (r) => r.etat === 'indisponible'],
['EDF muet ET un MultiPlus muet -> indisponible, pas de total partiel',
importJour({ [OUT]: 1200.6, [INV]: null, [COMPTEUR_EDF]: null }, mn), (r) => r.etat === 'indisponible'],
['valeurs de minuit inconnues -> indisponible',
importJour(ok26, {}), (r) => r.etat === 'indisponible'],
];
for (const [nom, r, test] of imp) {
const ok = test(r);