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:
@@ -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
|
||||||
|
|||||||
@@ -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
Reference in New Issue
Block a user