La consigne reseau se dimensionne sur le deficit du bilan

Elle empruntait le plafond de la borne — `maison + physicalCapA x V` — qui n a
aucune relation physique avec ce dont la batterie a besoin. Qu il tombe juste
etait un accident : le 17/09 a 13:51, voiture partie depuis cinq minutes,
consigne a 7032 W pour une maison a 933 W.

Elle additionne desormais des besoins NOMMES : la maison toujours, la voiture
seulement si un vehicule est branche, la batterie seulement dans une fenetre
d heures creuses — recharger la batterie sur le reseau n a de sens economique
que la. Hors fenetre le terme vaut zero, donc la division par un temps qui tend
vers zero disparait par construction et non par garde.

MAX ET NON ADDITION. La consigne est une AUTORISATION, pas une prediction : le
fichier le dit deja — « la consigne dit ce que le reseau a le DROIT de servir,
DVCC dit ce que la batterie a le droit de prendre ». Additionner deux
autorisations independantes n est pas plus honnete, seulement plus permissif.
Mesure : avec l addition, `consigne-session-engagee-couvre-la-maison` passe de
5595 a 6341 W — une autorisation en plus sur le chemin dominant (85 nuits sur
88 ont un vehicule) pour corriger un chemin emprunte zero fois en treize jours.

LE TERME BATTERIE EST BORNE PAR DVCC, PAS PAR LE BMS NI PAR LE TEMPS. Le BMS
declare 250 A, soit 12,2 kW : au-dessus de GRID_SETPOINT_MAX_W, il ne bornerait
rien. Et un plancher d horizon ne borne que le diviseur : en fin de fenetre
(14 min, manque 5,672 kWh) la division rend 17 kW, ecretes a 10 000, soit PIRE
que les 5437 empruntes qu on remplace. Avec DVCC le terme vaut 1538 W et la
consigne 2380 W. Corollaire : le plancher d horizon devient sans objet, il ne
reste qu une garde d une minute contre la division par zero.

Le manque vient de `evcs_balance_grid_energy_needed_kwh` et non de
`energy_to_cover_kwh` : la premiere est le MANQUE, nulle des que la batterie
couvre et convertie par la courbe mesuree par morceaux ; la seconde est
l energie que la batterie devra FOURNIR et ne tombe jamais a zero tant qu il
reste de la nuit — 11,96 kWh annonces le 17/09 a 20:00 avec un SOC de 91 %.

Le plancher nuage suit la voiture et PAS la batterie : il couvre l exposition
creee par le courant du vehicule ; une recharge batterie qui ralentit quand le
solaire s effondre ne coupe personne.

INVARIANT TENU PAR LA FORME : `maison + max(...)` ne peut jamais descendre sous
la maison, quel que soit DVCC. La regle du 01/09 et du 04/09 est donc garantie
par construction. Toute lecture manquante retombe sur la formule d avant.

Golden 102 -> 104. `nuit-sans-vehicule-session-engage` passe de 5437 a 2380 et
recoit le manque explicitement, sans quoi il heritait du zero de la fixture et
decrivait un etat impossible (SOC 20 pour un requis de 59,1 avec batterie
couverte). Deux scenarios ajoutes : la fin de fenetre bornee par DVCC — celui
qui protege contre la regression de 10 kW — et le contrefactuel a vehicule
branche qui epingle le choix du max.

Mutations : plafond DVCC retire -> 2 echecs dont la fin de fenetre ; max
remplace par une addition -> le contrefactuel seul ; bilan ignore -> les deux
scenarios pilotes par le bilan. Les autres suites sont intactes
(hysteresis 24, ACM 20, advisor, bilan 48).

⚠️ RIEN N EST POUSSE VERS n8n : la regle du depot impose la validation du
proprietaire avant tout PUT.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GwpFpy2aQ2rJok6tNQSbVj
This commit is contained in:
Tallagrand Thierry
2026-09-18 02:11:56 +02:00
parent 8c2735c181
commit 8709e436df
7 changed files with 235 additions and 8 deletions

View File

@@ -171,5 +171,7 @@
"vebus_overload": "off",
"vebus_state": "9",
"victron_acin1_available": "0",
"victron_evcs_strategy": "auto_solar_plus"
"victron_evcs_strategy": "auto_solar_plus",
"balance_grid_energy_needed_kwh": "0.0",
"dvcc_max_charge_current_a": "30"
}

View File

@@ -2322,12 +2322,84 @@ export const scenarios = [
grid_setpoint_w: '700',
balance_required_soc: '59.1', balance_energy_to_cover_kwh: '3.13',
balance_status: 'ok', balance_last_run: '08/08 03:58',
// Le MANQUE, pose explicitement : sans lui le scenario heriterait du 0 de
// la fixture, ce qui decrirait une batterie couverte alors qu'il declare
// un SOC de 20 % pour un requis de 59,1 % — un etat impossible.
// Valeur calculee avec la courbe mesuree, parc de reference (7 modules,
// echelle 1) : 13 points sous le genou de 33 % a 0,097 = 1,261 kWh, puis
// 26,1 points a 0,169 = 4,411 kWh, soit 5,672 kWh. Ce scenario est le seul
// du corpus dont le deficit TRAVERSE le genou.
balance_grid_energy_needed_kwh: '5.672',
},
expect: {
profile: 'night_hc',
takeoverNeeded: true,
takeoverHelperService: 'turn_on',
sessionCommittedService: 'turn_on',
// 18/09/2026 : 5437 -> 2380. Les 5437 valaient 612 de maison + 4825
// empruntes au plafond d'une borne ou aucun vehicule n'est branche. La
// nouvelle valeur vaut 612 + le manque reel borne par DVCC (30 A, soit
// 1538 W a la tension de la fixture), plus la marge d'ecriture d'un pas
// de courant. ⚠️ Attendu calcule sur la FIXTURE et jamais sur la tension
// du jour : le recalculer sur l'installation vivante rendrait la suite
// rouge un matin ou la batterie est a 49 V sans que rien ne soit casse.
gridSetpointW: 2380,
},
},
{
id: 'consigne-bilan-fin-de-fenetre-bornee-par-dvcc',
label: "CONSIGNE 18/09 — meme manque a 07:10, 14 min de fenetre : c'est DVCC qui borne, pas le temps",
time: '2026-08-08T07:10:00+02:00',
overrides: {
evcs_vehicle_connected: 'off', evcs_device_connected: 'on',
grid_state: 'on', victron_acin1_available: '1',
soc_percent: '20', battery_current_a: '0',
pv_power_w: '0', pv_power_10m_avg_w: '0', pv_trend_w: '0',
house_ac_power_w: '612', vebus_ac_out_l1_power_w: '612',
evcs_ac_power_w: '0',
grid_setpoint_w: '700',
balance_required_soc: '59.1', balance_energy_to_cover_kwh: '3.13',
balance_status: 'ok', balance_last_run: '08/08 07:08',
balance_grid_energy_needed_kwh: '5.672',
},
expect: {
profile: 'night_hc',
// ⚠️ LE SCENARIO QUI PROTEGE CONTRE LA REGRESSION LA PLUS GRAVE de cette
// conception. 5,672 kWh a combler en 14 minutes font 17 kW : avec un
// simple plancher d'horizon, la consigne saturait sur GRID_SETPOINT_MAX_W
// (10 000 W), soit PIRE que les 5437 du plafond emprunte qu'on remplace.
// Le plafond DVCC ramene le terme a 1538 W, et la consigne a la meme
// valeur qu'a 04:00 — parce que ce qui borne n'est pas le temps qui
// reste, c'est ce que la batterie a le droit de prendre.
// Le plafond BMS n'aurait rien borne : 250 A a 49 V font 12,2 kW,
// au-dessus des 10 000 de l'ecretage.
gridSetpointW: 2380,
},
},
{
id: 'consigne-bilan-max-la-voiture-domine',
label: 'CONTREFACTUEL 18/09 — meme nuit, meme manque, mais VEHICULE BRANCHE : le max retient la voiture, pas la somme',
time: '2026-08-08T04:00:00+02:00',
overrides: {
evcs_vehicle_connected: 'on', evcs_device_connected: 'on',
grid_state: 'on', victron_acin1_available: '1',
soc_percent: '20', battery_current_a: '0',
pv_power_w: '0', pv_power_10m_avg_w: '0', pv_trend_w: '0',
house_ac_power_w: '612', vebus_ac_out_l1_power_w: '612',
evcs_ac_power_w: '0',
grid_setpoint_w: '700',
balance_required_soc: '59.1', balance_energy_to_cover_kwh: '3.13',
balance_status: 'ok', balance_last_run: '08/08 03:58',
balance_grid_energy_needed_kwh: '5.672',
},
expect: {
profile: 'night_hc',
// Terme voiture 4825 W contre terme batterie 1538 W : le `max` retient la
// voiture, et la consigne vaut ce qu'elle vaut aujourd'hui. Avec une
// ADDITION elle monterait de 1538 W de plus — une autorisation en plus sur
// le chemin DOMINANT (85 nuits sur 88 ont un vehicule branche) pour
// corriger un chemin emprunte zero fois. C'est ce scenario qui epingle le
// choix du max, et il doit rester a la valeur historique.
gridSetpointW: 5437,
},
},