From e4697980adab99db30a954ca6832f80c991e39a9 Mon Sep 17 00:00:00 2001 From: Patrick Schurig Date: Thu, 3 Sep 2026 07:01:10 +0200 Subject: [PATCH] =?UTF-8?q?docs(=C2=A710):=20la=20garde=20de=20`sessionWh`?= =?UTF-8?q?=20doit=20porter=20sur=20la=20joignabilit=C3=A9,=20pas=20sur=20?= =?UTF-8?q?le=20recul?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) Claude-Session: https://claude.ai/code/session_01GKM8FDNHZWogAsjjfB8pSw --- docs/BRIEF_plugin_depuis_maquettes.md | 43 +++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/docs/BRIEF_plugin_depuis_maquettes.md b/docs/BRIEF_plugin_depuis_maquettes.md index 08b22d3..e25513f 100644 --- a/docs/BRIEF_plugin_depuis_maquettes.md +++ b/docs/BRIEF_plugin_depuis_maquettes.md @@ -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,