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**.