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 && !derived.gridSettling &&
gridSetpointCurrentW !== null; gridSetpointCurrentW !== null;
let gridSetpointNeedW = gridSessionActive // ⚠️ LE PLAFOND EST UN PLAFOND, PAS UNE CIBLE (corrige 11/09 17:52).
? gridSetpointCeilingW // Premiere version de ce correctif, en production 12 minutes : la consigne
: params.gridSetpointIdleW; // 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; 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) { if (gridSetpointDescendOk) {
// Un chargeur bride PROUVE qu'il reste de la ressource : on peut descendre // 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 // franchement. Une descente trop forte est rattrapee au cycle suivant (30 s

View File

@@ -2302,4 +2302,28 @@ export const scenarios = [
gridSetpointW: 1802, gridSetpointW: 1802,
}, },
}, },
{
id: 'consigne-credit-converge-tient',
label: "ANTI-OSCILLATEUR (11/09 17:47) — consigne deja descendue a 2241 W et les 6 trackers repasses mppt_active : on TIENT, on ne repousse pas au plafond",
time: '2026-08-08T17:02:00+02:00',
overrides: {
evcs_vehicle_connected: 'on', evcs_device_connected: 'on',
evcs_charging_switch: 'on', control_latch: 'on', charge_permission_now: 'on',
last_start_at: '2026-08-08 16:30:00',
victron_evcs_strategy: 'force_grid_now',
grid_state: 'on', victron_acin1_available: '1',
grid_current_max_a: '28', current_max_auto_a: '22',
soc_percent: '92',
battery_current_a: '36',
pv_power_w: '7074', pv_power_10m_avg_w: '6000', pv_trend_w: '0',
house_ac_power_w: '6895', vebus_ac_out_l1_power_w: '6895',
evcs_ac_power_w: '6059', evcs_current_a: '28',
grid_setpoint_w: '2241',
mppt_operation_modes: 'mppt_active,mppt_active,mppt_active,mppt_active,mppt_active,mppt_active',
},
expect: {
sourceMode: 'grid_forced',
gridSetpointW: null,
},
},
]; ];

File diff suppressed because one or more lines are too long