Le plafond de la consigne reseau est un plafond, pas une cible

Premiere version du credit solaire, en production 12 minutes : la
consigne descendait bien a 2241 W et la PV remontait a 7074 W, puis tous
les chargeurs repassant `mppt_active`, la condition de descente devenait
fausse, le besoin revenait au plafond et la consigne etait REECRITE a
7100 W. La PV s'effondrait a 1785 W, les chargeurs se bridaient, on
redescendait. Oscillateur de periode ~5 min -- le sixieme du projet, et
celui-ci vient de moi.

Releve : 17:40:30 -> 2241 / 17:47:19 -> 7100 / 17:47:28 PV 1785 /
17:48:30 -> 7368 / 17:49:30 -> 2186 / 17:50:30 -> 3762.

Une fois descendue, la consigne est TENUE tant que le solaire produit.
Rien a memoriser : la valeur vit dans le GX, et le plancher maison la
fait remonter d'elle-meme si la maison grossit. La nuit les chargeurs
sont `off`, donc ne produisent pas : on retombe sur le comportement
historique ou la consigne monte au plafond pour que le reseau porte
maison et voiture (§31, §57).

Golden 89 -> 90. Mutation : remettre le besoin au plafond fait tomber le
seul scenario `consigne-credit-converge-tient` ; appliquer le maintien la
nuit fait tomber les TROIS scenarios de session reseau nocturne, dont
deux anterieurs a ce chantier.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GwpFpy2aQ2rJok6tNQSbVj
This commit is contained in:
Tallagrand Thierry
2026-09-11 17:54:07 +02:00
parent f60c137d2c
commit fa63bb756b
3 changed files with 59 additions and 4 deletions

View File

@@ -420,11 +420,42 @@ const gridSetpointDescendOk =
!derived.gridSettling &&
gridSetpointCurrentW !== null;
let gridSetpointNeedW = gridSessionActive
? gridSetpointCeilingW
: params.gridSetpointIdleW;
// ⚠️ LE PLAFOND EST UN PLAFOND, PAS UNE CIBLE (corrige 11/09 17:52).
// Premiere version de ce correctif, en production 12 minutes : la consigne
// descendait bien a 2241 W et la PV remontait a 7074 W -- puis, tous les
// chargeurs repassant `mppt_active`, la condition de descente devenait fausse,
// le besoin revenait au plafond et la consigne etait REECRITE a 7100 W. La PV
// s'effondrait a 1785 W, les chargeurs se bridaient, on redescendait.
// Oscillateur de periode ~5 min. Releve : 17:40:30 -> 2241 / 17:47:19 -> 7100
// / 17:47:28 PV 1785 / 17:48:30 -> 7368.
//
// Une fois la consigne descendue, on la TIENT tant que le solaire produit. Ce
// n'est pas un etat a memoriser : la valeur courante est dans le GX, et le
// plancher maison la fait remonter d'elle-meme si la maison grossit.
//
// La nuit, les chargeurs sont `off` (ils ne produisent pas) : on retombe sur le
// comportement historique -- la consigne monte au plafond pour que le reseau
// porte maison et voiture (§31, §57). C'est cette distinction qui empeche le
// « on tient » de casser les nuits HC.
const solarProducing =
parsed.mpptReadableCount > 0 && parsed.mpptAtMaxPowerCount > 0;
let gridSetpointNeedW;
let gridSetpointDescending = false;
if (!gridSessionActive) {
gridSetpointNeedW = params.gridSetpointIdleW;
} else if (solarProducing && !batteryPolicy.batterySoftBreachNow && gridSetpointCurrentW !== null) {
// On tient la valeur acquise, bornee par la maison et par le plafond.
gridSetpointNeedW = clamp(
Math.min(gridSetpointCurrentW, gridSetpointCeilingW),
gridSetpointHouseFloorW,
gridSetpointCeilingW
);
} else {
gridSetpointNeedW = gridSetpointCeilingW;
}
if (gridSetpointDescendOk) {
// Un chargeur bride PROUVE qu'il reste de la ressource : on peut descendre
// franchement. Une descente trop forte est rattrapee au cycle suivant (30 s