From fd516daea55cfe986363a288063a76a73c38158e Mon Sep 17 00:00:00 2001 From: Patrick Schurig Date: Sun, 6 Sep 2026 14:41:28 +0200 Subject: [PATCH] =?UTF-8?q?docs(3g=20=C2=A75):=20Min+PV=20=E2=80=94=20le?= =?UTF-8?q?=20mode=20a=20un=20minimum=20garanti,=20qui=20n'a=20jamais=20to?= =?UTF-8?q?urn=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Établi, aucun correctif posé. 1. ChargingModeEcoWithMinCurrent A un comportement de minimum garanti : branche 4 d'adjustEvChargers(), 6 A inconditionnels, sans condition de budget ni autorisation de soutirage. Ce n'est pas un EcoCharging avec un seuil. 2. Mais ce chemin n'a JAMAIS tourné, deux fois pour deux raisons. Chez l'amont, le repli d'échéance réécrivait le mode en ChargingModeEco à chaque cycle : branche morte, réglage détruit en silence. Corrigé côté ETM. Puis depuis 3g-2, le crochet evCommandedByWaterfall() exclut du proxy toute borne que le waterfall commande — la branche redevient inatteignable, pour une raison nouvelle. Mort par réécriture, puis mort par exclusion, sans que rien ne le signale. 3. Et sur cette installation il n'aurait rien changé : plancher 4 140 W contre 2 000 W de crête. La voiture aurait chargé entièrement au réseau, en permanence, sans qu'aucun mécanisme ne le compte. 4. EV_GRID_START ne peut pas porter un minimum permanent. Ses trois bornes dérivent toutes du surplus — budgetW > 0, seuil proportionnel, consommation de tout le budget — et un minimum permanent en est indépendant par définition. Les lever, c'est créer le second chemin. Et EV_GRID_START achète HORS du registre d'autorisation de soutirage, là où la passe éco achète sous DrawCap : deux mécanismes dont un seul est borné, et c'est le second qui ferait disjoncter. 5. La différence de nature demeure : l'obligation éco est une énergie avec échéance, Min+PV une puissance permanente. On peut approcher la seconde par la première, mais sous régime mesuré le plancher retombe à zéro dès la cible atteinte — ce n'est pas un minimum permanent. --- docs/DESIGN_3g.md | 79 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) diff --git a/docs/DESIGN_3g.md b/docs/DESIGN_3g.md index 96edf40..c1e68ff 100644 --- a/docs/DESIGN_3g.md +++ b/docs/DESIGN_3g.md @@ -266,3 +266,82 @@ seconde moitié de 3g-1 n'est pas faite, il reste correct tel quel. 2. **§3.2 — la batterie** : **oui**, montée dans le budget (3g-1), et le recrédit y est supprimé (3g-2). 3. **Le découpage** : **3g-1 seul**, puis 3g-2 sur ce que le banc a révélé. + +--- + +## §5 — MIN+PV : ce que le mode fait réellement, et pourquoi il n'a jamais tenu sa promesse + +> Établi le 2026-09-06, à la demande de Patrick. **Question de modèle, aucun correctif posé.** + +### 1. `ChargingModeEcoWithMinCurrent` A un comportement de minimum garanti + +Ce n'est pas un `EcoCharging` avec un seuil. La branche 4 de +`SmartChargingManager::adjustEvChargers()` applique un minimum **inconditionnel** : + +```cpp +// 4. Min current fallback (EcoWithMinCurrent / EcoMinWithTargetTime) +uint minCurrent = qMax(EcoMinChargingCurrent, evCharger->maxChargingCurrentMinValue()); +ChargingAction minAction(true, minCurrent, processInfo.effectivePhaseCount, ...Surplus); +executeChargingAction(evCharger, minAction, currentDateTime); +``` + +Aucune condition de budget, aucune autorisation de soutirage : 6 A quoi qu'il arrive. C'est bien +« toujours la puissance minimale ». + +### 2. Mais ce chemin n'a JAMAIS tourné — deux fois, pour deux raisons différentes + +**Chez l'amont, le mode ne survivait pas à un cycle.** Le repli d'échéance réécrivait +`EcoWithMinCurrent` en `ChargingModeEco`, persistait et notifiait — **la branche 4 était du code +mort**, et le réglage était détruit en silence du point de vue de l'app. Corrigé côté ETM par la +garde `exigeUneEcheance` (`smartchargingmanager.cpp` l. 600-615). + +**Depuis 3g-2, le crochet l'exclut.** `evCommandedByWaterfall()` retire du proxy exactement les +bornes que le waterfall commande — et le waterfall prend toute borne à voiture assignée en mode +non manuel. La branche 4 est donc de nouveau inatteignable, pour une raison nouvelle. + +> **Le mode a donc traversé deux régimes sans jamais s'exécuter**, et rien ne l'a signalé : mort +> par réécriture, puis mort par exclusion. C'est le mode d'érosion « une règle qui expire sans +> être exécutée », appliqué à un réglage exposé au client. + +### 3. Et sur cette installation, il n'aurait rien changé + +Plancher d'une borne triphasée à 6 A : **4 140 W**. Production crête de l'installation : +**2 000 W**. Le plancher vaut **deux fois** la crête. Même avec un lien parfait et la branche 4 +vivante, la voiture n'aurait jamais chargé au surplus — elle aurait chargé **entièrement au +réseau**, en permanence, sans qu'aucun mécanisme ne le compte. + +### 4. `EV_GRID_START` ne peut PAS porter un minimum permanent + +Ses trois bornes dérivent toutes du surplus, et un minimum permanent est par définition +indépendant du surplus. Les lever, c'est créer le second chemin d'achat. + +| borne actuelle | ce qu'un minimum permanent en ferait | +|---|---| +| `budgetW > 0` — jamais de démarrage à sec | tomberait : un minimum doit tenir la nuit | +| `budgetW >= plancherW × tolerance` — seuil de **déclenchement**, proportionnel au surplus | tomberait : un minimum est une constante | +| consomme tout le budget → au plus **une borne par cycle** | tomberait : plus rien ne borne le nombre | + +Et la différence de fond : `EV_GRID_START` est une **brèche assumée et bornée** dans le report du +financement réseau à 3f, explicitement gardée sous le plafond de surcharge — mais **pas** rangée +dans le registre d'autorisation de soutirage. La passe éco, elle, achète *sous* `DrawCap` / +`DrawMargin`, avec les trois sources de plafond et le motif qui dit combien est acheté. + +**Un minimum permanent porté par `EV_GRID_START` serait donc un achat hors comptabilité** — deux +mécanismes d'achat dont un seul est borné par l'autorisation. Ils divergeraient, et c'est le +second qui ferait disjoncter. + +### 5. La différence de nature qui reste à trancher + +| | nature | exprimable par le §10 ? | +|---|---|---| +| obligation éco | **énergie** avec une échéance | oui, c'est son objet | +| Min+PV | **puissance** permanente | non | + +La passe éco peut exprimer « 30 kWh avant 7 h », pas « 4 140 W à tout instant ». On peut +approcher la seconde par la première — `minEnergyWhPerDay = 4140 × 24 ≈ 99 kWh/jour` donne une +cadence constante de 4 140 W — mais c'est une valeur qu'aucun client ne saisirait, et sous régime +mesuré le plancher **retombe à zéro** dès la cible atteinte. Ce n'est donc pas un minimum +permanent : c'est une obligation qui y ressemble tant qu'elle n'est pas tenue. + +**La question à poser au client est celle de Patrick** : veut-il « 4 140 W en permanence », ou +« 30 kWh avant 7 h » ? La seconde est plus proche du besoin réel, et elle est **déjà servie**.