docs(§10): la garde de sessionWh doit porter sur la joignabilité, pas sur le recul

Mise en garde avant que le remplissage de `sessionWh` depuis le compteur soit
écrit, et elle vient d'un relevé déjà pris.

Le « recul franc » de `getEcoProgress()` recapture la base pour une nouvelle
session. Mais un compteur qui disparaît peut publier 0 au lieu de se taire —
mesuré sur la V2C le 2026-08-30, `currentPower` 4 396 → 0 et les booléens à
`false` à la perte du lien. Les deux cas donnent la même observation et appellent
des gestes opposés.

Et le coût est asymétrique : base reprise à 0 pendant l'absence, retour du
compteur avec son cumul réel (10 kWh sur l'ECS), et `deliveredWh` saute à 10 000
en un cycle — l'obligation se déclare TENUE sans rien avoir livré. Sous
`measured`, R6 ne s'y oppose pas : elle n'interdit `ECO_FLOOR_MET` que sous
`unmeasurable`. Le chemin mesuré est le seul par lequel un faux « tenue » peut
sortir, et c'est celui qu'on ouvre.

La garde doit donc porter sur la joignabilité du compteur, pas sur la direction
de la valeur — même règle que la clôture de tronçon, et même geste que l'app a
fait le 2026-08-30 en jetant les états d'un Thing injoignable à l'entrée.

Portée honnête : le zéro forgé a été mesuré sur `currentPower` et les booléens,
pas sur un compteur d'énergie — `sessionEnergy` de la V2C est resté à sa dernière
valeur. La politique dépend du plugin, d'où l'intérêt de ne pas parier dessus.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GKM8FDNHZWogAsjjfB8pSw
This commit is contained in:
Patrick Schurig 2026-09-03 07:01:10 +02:00
parent 78f7fa23a9
commit e4697980ad

View File

@ -2,6 +2,49 @@
---
## 2026-09-03 (suite) — avant d'écrire `sessionWh` sur un compteur : la garde ne peut pas être le recul
Le correctif est le bon, et l'ordre aussi. Une mise en garde avant qu'il soit écrit, parce
qu'elle vient d'un relevé déjà pris — et parce que le défaut qu'elle décrit **arriverait par le
chemin où R6 ne protège plus**.
### Le « recul franc » ne distingue pas une remise à zéro d'une valeur forgée
`getEcoProgress()` recapture la base quand l'accumulateur recule franchement — juste pour une
**nouvelle session**. Mais un compteur qui disparaît peut, selon son plugin, publier **0** au lieu
de se taire : nous l'avons mesuré sur la V2C le 2026-08-30, `currentPower` passé de 4 396 W à 0 et
les booléens à `false` à la perte du lien Modbus.
Les deux cas produisent **exactement la même observation** : une valeur qui s'effondre. Or ils
appellent des gestes opposés — recapturer, ou ne rien faire.
**Et le coût de les confondre n'est pas symétrique.** Si la base est reprise à 0 pendant l'absence,
puis que le compteur revient avec son cumul réel (10 kWh sur l'ECS du banc), alors
`deliveredWh = 10 000 − 0` d'un seul cycle : l'obligation se déclare **tenue** sans que rien n'ait
été livré. Sous `measured`, R6 ne s'y oppose pas — elle n'interdit `ECO_FLOOR_MET` que sous
`unmeasurable`. Le chemin mesuré est donc le seul par lequel un faux « tenue » peut sortir, et
c'est celui qu'on est en train d'ouvrir.
**Donc : la garde doit porter sur la JOIGNABILITÉ du compteur**, pas sur la direction de la valeur.
Tant que le Thing n'est pas joignable, ni recapture ni avancement — le tronçon se clôt sur la
dernière valeur lue **pendant que la mesure existait**, exactement la règle que vous avez posée
hier pour la bascule de régime. C'est aussi ce que l'app a fait de son côté le 2026-08-30 : sous
`connected == false`, les états sont jetés **à l'entrée** plutôt que relayés.
> **Honnêteté sur la portée** : le zéro forgé a été mesuré sur `currentPower` et les booléens,
> **pas** sur un compteur d'énergie — `sessionEnergy` de la V2C, lui, est resté à sa dernière
> valeur pendant la coupure. La politique dépend donc du plugin, et c'est précisément pourquoi un
> accumulateur ne devrait pas parier dessus.
### Et une conséquence heureuse de votre dernière phrase
Une fois `sessionWh` rempli, la population « réellement non mesurable » se réduit à trois cas
matériels — et **deux sur trois sont réparables par l'installateur** (aucun compteur désigné,
compteur sans énergie). L'avertissement de saisie cesse alors d'être une fatalité affichée : il
devient une consigne, et `progressUnmeasurableCause` porte déjà les trois gestes.
---
## 2026-09-03 — `+etm49` à la sonde : `purchasedWh` marche, et deux champs se contredisent
Obligation déclarée puis retirée sur le banc (`chauffe-eau`, 4 000 Wh avant 12:00, sept cycles,