Sequence d ouverture : baisser le courant avant que le reseau parte

Le plafond majore (28 A en BOOST) n est legitime que tant que le reseau alimente
AC-IN : sinon les deux MultiPlus portent seuls la voiture plus la maison, le
mecanisme du W-105. Personne ne baissait avant l ouverture -- c est l hysteresis
qui ouvre, l EVCS l apprenait apres coup -- et quand il l apprenait, la reduction
attendait le cooldown de courant et descendait d un pas a la fois.

Correctif sans poignee de main ni helper nouveau : le plafond majore exige que
l EVCS DEMANDE lui-meme le reseau. Sa demande tombe au cycle ou la fenetre se
ferme (30 s), l hysteresis ne peut ouvrir qu ensuite (override disparu PUIS
min_on, cycle 1 min) : l EVCS baisse toujours avant, mecaniquement.

Second volet : un plafond n est pas une cible qu on approche. Reduction
immediate et directe au plafond, sans cooldown.

Le calcul du plafond a ete deplace apres sourceMode dans WINDOWS_SOURCEV2 ; rien
entre les deux ne le lisait, verifie avant de bouger.

Helper a 20 A par defaut : comportement inchange. Le correctif ne mord que sur
le BOOST 28 A, le cas dangereux.

Golden 48 -> 51, chaque cas apparie a son contrefactuel. Mutations des deux
volets separement : 1 puis 2 echecs cibles, restauration 51/51.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KKzkkVTG6KXnGXFFC7X9XJ
This commit is contained in:
Tallagrand Thierry
2026-08-31 20:03:23 +02:00
parent f0479945c4
commit fc49e6c31a
5 changed files with 238 additions and 32 deletions

View File

@@ -1203,4 +1203,107 @@ export const scenarios = [
takeoverHelperService: "turn_off",
},
},
// ======= SÉQUENCE D'OUVERTURE DU CONTACTEUR (31/08/2026) =======
// Le plafond majoré (28 A en BOOST) n'est légitime que tant que le réseau est
// là. C'est l'hystérésis qui ouvre, une minute après que la demande réseau de
// l'EVCS a disparu : l'EVCS doit donc baisser AVANT, de lui-même.
{
id: 'ouverture-plafond-tombe-hors-demande-reseau',
label: "Matin solaire, AC-IN encore présent mais l'EVCS ne demande plus le réseau : le plafond retombe à 20 A et la voiture est réduite IMMÉDIATEMENT",
time: MORNING,
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 08:00:00',
// BOOST EDF : plafond réseau 28 A, voiture effectivement à 28 A.
grid_current_max_a: '28', current_max_auto_a: '22',
evcs_current_a: '28', evcs_set_current_a: '28', evcs_command_current_a: '28',
evcs_ac_power_w: '6440',
house_ac_power_w: '8440', vebus_ac_out_l1_power_w: '8440',
grid_state: 'on', victron_acin1_available: '1', grid_power_w: '2000',
soc_percent: '60', pv_power_w: '4500', pv_power_10m_avg_w: '4200',
battery_current_a: '10',
// Cooldown de courant NON écoulé : la réduction ne doit pas l'attendre.
last_current_change_at: '2026-08-08 08:59:50',
acin1_last_changed_ts: String(MORNING_TS - 4000),
grid_switch_last_changed_ts: String(MORNING_TS - 4000),
},
expect: {
profile: "morning_solar",
sourceMode: "solar_only",
state: "charging_step_down_system_cap",
decision: "step_down_fast",
desiredCharging: true,
currentA: 20,
takeoverNeeded: false,
edfOnAction: false,
takeoverHelperService: "turn_off",
},
},
{
id: 'ouverture-plafond-maintenu-en-demande-reseau',
label: "CONTREFACTUEL : force_grid_now, l'EVCS demande le réseau → le plafond BOOST 28 A est conservé, aucune réduction",
time: MORNING,
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 08:00:00',
// BOOST EDF : plafond réseau 28 A, voiture effectivement à 28 A.
grid_current_max_a: '28', current_max_auto_a: '22',
evcs_current_a: '28', evcs_set_current_a: '28', evcs_command_current_a: '28',
evcs_ac_power_w: '6440',
house_ac_power_w: '8440', vebus_ac_out_l1_power_w: '8440',
grid_state: 'on', victron_acin1_available: '1', grid_power_w: '2000',
victron_evcs_strategy: 'force_grid_now',
soc_percent: '60', pv_power_w: '4500', pv_power_10m_avg_w: '4200',
battery_current_a: '10',
last_current_change_at: '2026-08-08 08:59:50',
acin1_last_changed_ts: String(MORNING_TS - 4000),
grid_switch_last_changed_ts: String(MORNING_TS - 4000),
},
expect: {
profile: "morning_solar",
sourceMode: "grid_forced",
state: "charging_hold_grid",
decision: "hold",
desiredCharging: true,
currentA: 28,
takeoverNeeded: false,
edfOnAction: false,
takeoverHelperService: "turn_off",
},
},
{
id: 'ouverture-reseau-disparu-reduction-immediate',
label: 'Réseau DISPARU : plafond câblé 20 A, voiture encore à 28 A, cooldown non écoulé → réduction immédiate, sans attendre le compteur de confort',
time: MORNING,
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 08:00:00',
// BOOST EDF : plafond réseau 28 A, voiture effectivement à 28 A.
grid_current_max_a: '28', current_max_auto_a: '22',
evcs_current_a: '28', evcs_set_current_a: '28', evcs_command_current_a: '28',
evcs_ac_power_w: '6440',
house_ac_power_w: '8440', vebus_ac_out_l1_power_w: '8440',
grid_state: 'on', victron_acin1_available: '1', grid_power_w: '2000',
grid_state: 'off', victron_acin1_available: '0', grid_power_w: '0',
soc_percent: '60', pv_power_w: '4500', pv_power_10m_avg_w: '4200',
battery_current_a: '10',
last_current_change_at: '2026-08-08 08:59:50',
acin1_last_changed_ts: String(MORNING_TS - 20),
grid_switch_last_changed_ts: String(MORNING_TS - 20),
},
expect: {
profile: "morning_solar",
sourceMode: "solar_only",
state: "charging_step_down_system_cap",
decision: "step_down_fast",
desiredCharging: true,
currentA: 20,
takeoverNeeded: false,
edfOnAction: false,
takeoverHelperService: "turn_off",
},
},
];