etm-powersync-app/test/fixtures/powerbalance_jour_hems75.json
Patrick Schurig 23a84fec43 feat(dashboard): le bilan du JOUR — et deux bugs d'unité trouvés en le posant
L'entrée 🔴 du TODO. Aucune des quatre tuiles n'était journalière : deux pourcentages
instantanés, deux compteurs cumulés depuis l'origine dont deux portaient le mot
« aujourd'hui ». Elles montrent désormais la journée, sous un en-tête qui le dit une fois.

MÉTHODE : une DIFFÉRENCE de compteurs entre minuit local et maintenant, jamais une
intégration des puissances. La première est une mesure, prise sur les mêmes compteurs que
ceux du fournisseur ; la seconde est une estimation qui suppose que chaque échantillon
représente son intervalle. Mesuré sur .75 : l'intégration rend 77,70 kWh là où la différence
rend 78,31 — 0,8 % d'écart, systématiquement à la baisse. Il n'y a donc PAS de repli
silencieux de l'une vers l'autre : quand la mesure n'est pas exploitable, le type le dit.

DEUX BUGS D'UNITÉ, trouvés en cherchant à savoir ce que valaient les compteurs. Aucune
documentation ne tranchait, donc recoupement sur machine : l'intégration des puissances (en
W) rend 77 697 Wh quand la différence de totalProduction rend 78,310. Le rapport est mille —
LES COMPTEURS SONT EN kWh, et le modèle Dart les nommait Wh.

  1. L'écran Énergie divisait ces kWh par mille pour les afficher : une journée de 78 kWh
     s'y lisait « 78 Wh », sous un axe intitulé « Bilan énergétique (Wh) ». Invisible sans
     connaître l'ordre de grandeur attendu.
  2. La simulation accumulait des Wh : un écran juste en simulation aurait cassé d'un
     facteur mille contre une vraie box.

LE CONTRÔLE QUI VALIDE LE BILAN : production + soutiré == consommation + injecté. C'est le
seul recoupement disponible sur des compteurs qu'on ne peut pas vérifier autrement, et il
tient EXACTEMENT sur .75 — 112,244 des deux côtés sur 21,75 h. Faux, il désigne un compteur
cassé ou une remise à zéro, et la carte le signale au lieu de présenter comme une mesure ce
qui ne se recoupe pas.

Les trois pièges du TODO n'ont pas été repayés : bornes à minuit LOCAL via
GetPowerBalanceLogs · décodage délégué à fetchPowerBalanceLogs, qui porte déjà les bonnes
clés sans préfixe currentPower · plausibilité vérifiée sur les DEUX bornes avant de
soustraire, parce que deux valeurs absurdes peuvent avoir une différence d'apparence saine.
Plus un quatrième trouvé en chemin : un compteur qui RECULE (redémarrage en milieu de
fenêtre) donne un bilan négatif, et un max(0, …) le rendrait faux en silence.

Rien ne s'affiche jamais à zéro quand c'est inconnu. Sans production, le taux
d'autoconsommation est null et non 0 % — à 3 h du matin, « 0 % » se lirait comme un défaut
alors qu'il n'y a rien à autoconsommer.

VÉRIFIÉ SUR APPAREIL contre .75, en lecture seule (le banc est en préparation V2C, rien n'a
été écrit) : 32 échantillons depuis minuit, prod 28,37 · conso 26,55 · import 11,95 ·
export 13,77 kWh, identité OK, et les tuiles affichent 51 % / 55 % / 13,8 / 11,9.

Le passage sur appareil a trouvé ce qu'aucun des 138 tests unitaires ne pouvait voir : LES
QUATRE LIBELLÉS DÉBORDAIENT — « Autoconsomm… », « Vers réseau · aujou… ». Le suffixe
« aujourd'hui » répété quatre fois mangeait le nom de la grandeur ; il est dit une fois en
en-tête. Le harnais d'appareil échoue désormais sur tout libellé finissant par « … ».

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016vrTVifar2GN5rtUh89Wkq
2026-08-28 07:57:57 +02:00

46 lines
1.7 KiB
JSON

{
"_source": "Energy.GetPowerBalanceLogs sur 192.168.1.75, SampleRate15Mins, minuit local → 21:45, 2026-08-27",
"_note": "Trois échantillons sur 88. Les compteurs total* sont en kWh — vérifié par recoupement : l'intégration trapézoïdale des puissances (W) sur la fenêtre rend 77 697 Wh quand la différence de totalProduction rend 78,310. L'identité production + soutiré == consommation + injecté tient EXACTEMENT sur ce relevé : 112,244 des deux côtés.",
"_deltas_attendus_kwh": {
"production": 78.31,
"consumption": 74.435,
"return": 37.809,
"acquisition": 33.934
},
"powerBalanceLogEntries": [
{
"acquisition": 2366.78679094468,
"consumption": 3507.135007297016,
"production": -1140.3482163523356,
"storage": 0,
"timestamp": 1787781600,
"totalAcquisition": 62.16060776066769,
"totalConsumption": 6331.145563125843,
"totalProduction": 62032.09747619834,
"totalReturn": 55763.112520833165
},
{
"acquisition": -2213.146134015749,
"consumption": 3486.542535677007,
"production": -5699.688669692754,
"storage": 0,
"timestamp": 1787821200,
"totalAcquisition": 79.17562729191732,
"totalConsumption": 6368.860421631056,
"totalProduction": 62072.11789818015,
"totalReturn": 55782.43310384101
},
{
"acquisition": -1554.8017688394166,
"consumption": 3357.519044852532,
"production": -4912.320813691948,
"storage": 0,
"timestamp": 1787859900,
"totalAcquisition": 96.09468393254281,
"totalConsumption": 6405.580274597465,
"totalProduction": 62110.40698356833,
"totalReturn": 55800.92139290341
}
]
}