From 43bda3df010f09b2c1e98d29ad42745a01289073 Mon Sep 17 00:00:00 2001 From: Tallagrand Thierry Date: Sun, 13 Sep 2026 17:45:50 +0200 Subject: [PATCH] L energie du compteur cesse de porter treize decimales de bruit MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `energie_compteur_kwh` vaut la difference de deux releves du compteur cumulatif de la borne, proches de 3 800 kWh : en double precision la soustraction rend « 0.8000000000001819 » pour une mesure dont la resolution est de 0,1 kWh. Arrondi a l ecriture, au millieme, plutot que de laisser chaque lecteur s en charger. Signale par la session OpenClaw en calibrant son module de detection sur la table. Cosmetique pour la logique, mais ce projet a deja paye le prix de la fausse precision affichee comme une mesure. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01GwpFpy2aQ2rJok6tNQSbVj --- tools/historise-evcs.mjs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tools/historise-evcs.mjs b/tools/historise-evcs.mjs index 34e7f83..fc10008 100644 --- a/tools/historise-evcs.mjs +++ b/tools/historise-evcs.mjs @@ -742,9 +742,15 @@ async function ecrireSession(sql, client, st) { const station = num(g('sensor.evcs_hq2239dnt7p_last_session_energy')?.state); const dureeBorne = num(g('sensor.evcs_hq2239dnt7p_last_session_time')?.state); const compteur = num(g('sensor.evcs_hq2239dnt7p_total_energy')?.state); + // Le compteur de la borne a une resolution de 0,1 kWh. La soustraction + // de deux nombres proches de 3 800 en double precision rend + // « 0.8000000000001819 » : treize decimales de fausse precision sur une + // mesure qui n'en a qu'une. On arrondit a l'ECRITURE plutot que de + // laisser chaque lecteur le faire — signale par la session OpenClaw le + // 13/09 en lisant la table. const parCompteur = compteur !== null && ouverte.compteur_debut_kwh !== null && compteur >= ouverte.compteur_debut_kwh - ? compteur - Number(ouverte.compteur_debut_kwh) : null; + ? Math.round((compteur - Number(ouverte.compteur_debut_kwh)) * 1000) / 1000 : null; await sql( `UPDATE session_charge SET terminee = true, energie_station_kwh = $2, energie_compteur_kwh = $3, duree_borne_min = $4