docs(3g §5): Min+PV — le mode a un minimum garanti, qui n'a jamais tourné

É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.
This commit is contained in:
Patrick Schurig 2026-09-06 14:41:28 +02:00
parent 9659518916
commit fd516daea5

View File

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