From c94e78a1945c6937d9f06dcef3b195f06ccbb7b0 Mon Sep 17 00:00:00 2001 From: Patrick Schurig Date: Wed, 26 Aug 2026 10:55:36 +0200 Subject: [PATCH] =?UTF-8?q?docs(spec):=20LM-1204-b=20=E2=80=94=20le=20sc?= =?UTF-8?q?=C3=A9nario=20d'acceptation=20de=203g=20et=20son=20pi=C3=A8ge?= =?UTF-8?q?=20de=20simulateur?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Défini avec Patrick quand le banc a reçu une seconde borne. Il n'est PAS exerçable avant 3g, et c'est le point : nonEvLoads filtre etmvariableload | relay-router | sg-ready, l'EV est décidé en proxy AVANT le waterfall, donc les deux bornes ne partagent aucun budget et leur rang n'a aucun sens. Le piège que Patrick signale est réel et il a une réponse observable : une wallbox simulée peut obéir à une consigne sous son plancher là où du matériel refuserait. Le discriminant est le MOTIF publié, que seul le scheduler peut émettre — BELOW_MIN_POWER prouve que l'arbitre a refusé et qu'aucune commande n'est partie, SURPLUS_SETPOINT avec setpointW < minPowerW prouve l'inverse, et une borne à 0 W sans motif de plancher signifie que c'est le matériel qui a refusé, donc que le test ne prouve rien. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01XPUo3RMr8SzK6qbFtfBm8H --- specs/spec_loadmodel.md | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/specs/spec_loadmodel.md b/specs/spec_loadmodel.md index 6e6d54a..a0548cc 100644 --- a/specs/spec_loadmodel.md +++ b/specs/spec_loadmodel.md @@ -1,12 +1,16 @@ # SPEC — Modèle de charges (domaine × mécanisme) -Version : 0.2.1 +Version : 0.2.2 Dépôt : `etm-powersync-energy-plugin-etm` Statut : **intention de conception figée.** §3 (schéma persisté) est **en cours d'implémentation** depuis le 2026-08-09 : `relay-router`, `etmvariableload` et `sg-ready` sont trois charges utiles discriminées par `adapter`. Le reste du document reste une intention. +> **0.2.2** — LM-1204-b : le scénario d'acceptation de 3g, avec son piège de simulateur et le +> motif qui le déjoue. Ajouté quand le banc a reçu une seconde borne — et **il reste +> inexerçable tant que 3g n'est pas fait**, ce qui est précisément ce qu'il mesure. + > **0.2.1** — spec relue et validée (Patrick, 2026-08-26). Deux décisions inscrites : > l'extension du délestage au waterfall devient une **précondition de livraison** du §10 — > écrite comme condition et non comme conseil — et la cible de confort est tranchée @@ -746,6 +750,40 @@ Le proxy actuel, qui décide du VE **en amont** du waterfall, ne peut pas produi comportement : il n'a pas de notion de reliquat à passer. **C'est le plancher qui rend la transplantation nécessaire, pas l'inverse.** +**LM-1204-b — Le scénario d'acceptation de 3g, à monter au banc.** *(Défini avec Patrick, +2026-08-26, quand le banc a reçu une seconde borne.)* + +> **Il n'est PAS exerçable avant 3g**, et c'est le point : aujourd'hui `nonEvLoads` filtre +> `etmvariableload | relay-router | sg-ready`, l'EV est décidé **en proxy avant** le waterfall, +> les deux bornes ne partagent donc aucun budget avec le reste et **leur rang n'a aucun sens**. +> Ce scénario est le critère qui dira que 3g est fait. + +1. **Budget insuffisant pour deux planchers.** Surplus ≈ 4 kW, deux bornes à ≈ 1,4 kW de + plancher (6 A monophasé). **Attendu** : la borne de rang supérieur servie à fond, la seconde + au reliquat — et **0 si le reliquat est sous son plancher**, jamais une part symbolique. + **Contre-exemple à ne surtout pas produire** : 2 kW à chacune, les deux sous leur plancher, + rien ne charge et le surplus part au réseau. +2. **Inversion de rang entre les deux bornes**, et la charge servie doit changer. C'est le + pendant EV de l'inversion ECS/SG-Ready déjà éprouvée. + +**Le piège de simulateur, et comment le déjouer.** Une wallbox simulée acceptera peut-être une +consigne sous son plancher là où du matériel réel refuserait de démarrer. **Le plancher doit +être appliqué par l'ARBITRE, jamais constaté par le matériel** — sinon le test ne prouve que +l'obéissance du simulateur. + +Le discriminant est le **motif publié**, et il est décisif parce que seul le scheduler peut +l'émettre : + +| ce qu'on lit | ce que ça prouve | +|---|---| +| `BELOW_MIN_POWER {budgetW, minPowerW}` | **l'arbitre a refusé** — aucune commande n'est partie | +| `SURPLUS_SETPOINT` avec `setpointW < minPowerW` | l'arbitre a laissé passer : le plancher n'est **pas** appliqué | +| borne à 0 W sans motif de plancher | c'est le **matériel** qui a refusé — le test ne prouve rien | + +**Ce qu'une wallbox simulée ne prouvera pas**, et qu'il ne faut pas déclarer vérifié : la +négociation de courant réelle, le délai d'établissement de la charge, et le comportement d'un +véhicule qui refuse. + **LM-1205 — La machinerie d'échéance existe déjà.** `needs { dailyDeadline, minEnergyWhPerDay }` est ce qui avait motivé le proxy — la crainte que le waterfall ne sache pas exprimer « cette voiture doit être chargée à 7 h ». Il sait : c'est le même champ que le plancher éco du §10