Un demarrage se decide sur l excedent, pas sur la production

Le 03/09 a 19:44, voiture branchee : PV 758 W, maison 1202 W, batterie deja
a -12 A, nuit qui tombe. Le controleur a lance 1,6 kW de charge parce que
pv_start_min_w (700 W) est une puissance PV absolue : "758 >= 700, donc il y
a du soleil". L excedent valait -444 W. En 33 minutes la voiture a pris
0,897 kWh et la batterie en a rendu 1,479 kWh (SOC 94 -> 85), la veille d une
nuit que le bilan energetique annoncait deja deficitaire.

Rejeu du releve dans la vraie chaine : rawSolarStartOk ET
batteryAssistSolarStartOk etaient tous deux vrais. Corriger le seul seuil PV
n aurait donc rien change ; les deux chemins sont traites ensemble.

La grandeur juste est ce qui reste une fois la maison servie. Sans injection
et reseau absent, PV - maison(hors EVCS) vaut la puissance batterie au signe
pres, et separe les deux situations que la mesure PV seule confond : sous
censure la production se cale sur la maison, l excedent vaut ~0 et il y a de
la ressource refusee ; en deficit reel l excedent est negatif et la batterie
porte deja la maison. Zero est la frontiere physique entre les deux, verifiee
sur le releve du 03/09 (excedent positif sur toute la plage ou pv_censored
etait ON, negatif ensuite).

Aucune constante nouvelle, aucun champ de snapshot, aucun helper :
derived.houseNonEvcsW existait deja. Le chemin "soleil reel" reutilise
pv_start_min_w tel quel, applique a la bonne grandeur ; le chemin
"provocation" exige seulement excedent >= 0. Demarrage uniquement : les
conditions de maintien gardent leur plancher et leur tolerance temporelle.

Golden 61 -> 64, autour d une paire de releves reels pris a 54 minutes d ecart
dont les lectures PV ne different que de 11 W (769 puis 758) : le premier
demarre, le second non. apresmidi-provocation-p3 est corrige : il portait
PV 300 W, maison 600 W, batterie +2 A reseau ouvert, un trou de 300 W que rien
n alimente, et passait quand meme parce que le demarrage ne regardait jamais
le bilan. Mutation dans les deux sens : 2 echecs cibles a chaque fois,
excedent-censure-demarre restant vert (il tient par le chemin assistance).

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-09-03 20:53:50 +02:00
parent 10987a04d8
commit ef3d7ed7b2
5 changed files with 322 additions and 8 deletions

View File

@@ -888,13 +888,21 @@ export const scenarios = [
},
{
id: 'apresmidi-provocation-p3',
label: 'Après-midi hors fenêtre, SOC 95, PV bridé 300 W (< hold 500) → provocation PV (solar_potential)',
// 03/09/2026 — echantillon rendu COHERENT EN ENERGIE. Il portait PV 300 W,
// maison 600 W et batterie +2 A : un trou de 300 W que rien n'alimente,
// etat physiquement inatteignable reseau ouvert. Il passait quand meme,
// parce que le demarrage ne regardait que la production. Corrige en gardant
// l'intention d'origine — production mesuree SOUS pv_hold_min (500) et sous
// pv_start_min (700), donc seul solar_potential peut demarrer — avec une
// maison qui, elle, ferme le bilan : c'est la signature de la censure
// (batterie pleine, MPPT cale sur la maison, excedent ~0).
label: 'Après-midi hors fenêtre, SOC 95, PV bridé 430 W (< hold 500) mais maison 400 W → censure, excédent +30 W → provocation PV (solar_potential)',
time: AFTERNOON,
overrides: {
evcs_vehicle_connected: 'on', evcs_device_connected: 'on',
soc_percent: '95', pv_power_w: '300', pv_power_10m_avg_w: '300',
soc_percent: '95', pv_power_w: '430', pv_power_10m_avg_w: '430',
pv_trend_w: '0', battery_current_a: '2',
house_ac_power_w: '600', vebus_ac_out_l1_power_w: '600',
house_ac_power_w: '400', vebus_ac_out_l1_power_w: '400',
},
expect: {
profile: 'outside_window',
@@ -909,6 +917,80 @@ export const scenarios = [
},
},
// ===== 03/09/2026 : un demarrage se decide sur l'EXCEDENT, pas sur la PV =====
// Les deux premiers scenarios sont des releves REELS du 03/09, pris a 54 min
// d'intervalle. Leurs lectures de production ne different que de 11 W
// (769 W puis 758 W) : pour l'ancien code, deux fois "758 >= 700, il y a du
// soleil". Ce qui les separe est la MAISON — 755 W puis 1202 W — donc
// l'excedent : +14 W (production refusee, batterie pleine, rien a absorber)
// puis -444 W (la batterie porte deja la maison, la nuit tombe).
// La paire est le coeur du correctif : sans elle, aucune preuve que la
// nouvelle grandeur discrimine ce que l'ancienne confondait.
{
id: 'excedent-censure-demarre',
label: "Relevé du 03/09 18:50 (pv_censored=ON) : PV 769 W, maison 755 W, batterie 0 A, SOC 94 → excédent +14 W = ressource refusée → la voiture DOIT démarrer",
time: '2026-08-08T18:50:00+02:00',
overrides: {
evcs_vehicle_connected: 'on', evcs_device_connected: 'on',
soc_percent: '94', battery_current_a: '0',
pv_power_w: '769.1', pv_power_10m_avg_w: '800', pv_trend_w: '0',
house_ac_power_w: '755', vebus_ac_out_l1_power_w: '755',
evcs_ac_power_w: '0',
},
expect: {
profile: 'evening_high_soc',
sourceMode: 'solar_only',
state: 'start_min_current',
decision: 'start',
desiredCharging: true,
currentA: 6,
},
},
{
id: 'excedent-deficit-ne-demarre-pas',
label: "Relevé du 03/09 19:44 (l'incident) : PV 758 W mais maison 1202 W, batterie déjà à -12 A, SOC 94 → excédent -444 W → AUCUN démarrage, ni chemin solaire ni assistance batterie",
time: '2026-08-08T19:44:30+02:00',
overrides: {
evcs_vehicle_connected: 'on', evcs_device_connected: 'on',
soc_percent: '94', battery_current_a: '-12.2',
pv_power_w: '758.3', pv_power_10m_avg_w: '790', pv_trend_w: '0',
house_ac_power_w: '1202', vebus_ac_out_l1_power_w: '1202',
evcs_ac_power_w: '0',
},
expect: {
profile: 'evening_high_soc',
sourceMode: 'solar_only',
state: 'idle_wait_conditions',
decision: 'hold',
desiredCharging: false,
},
},
{
// Exerce le chemin "soleil reel" (rawSolarStartOk), que la paire ci-dessus
// ne touche pas : elle passe par l'assistance batterie. Batterie a 60 %,
// donc pas de censure possible — la production mesuree EST la ressource, et
// elle est deja prise par la maison. L'ancien code demarrait (3000 >= 700).
id: 'excedent-grosse-production-grosse-maison',
label: "Matin, PV 3000 W mais maison 2800 W et SOC 60 (pas de censure possible) → excédent 200 W < seuil de démarrage → pas de charge malgré une forte production",
time: MORNING,
overrides: {
evcs_vehicle_connected: 'on', evcs_device_connected: 'on',
soc_percent: '60', battery_current_a: '-4',
pv_power_w: '3000', pv_power_10m_avg_w: '3000', pv_trend_w: '0',
house_ac_power_w: '2800', vebus_ac_out_l1_power_w: '2800',
evcs_ac_power_w: '0',
},
expect: {
profile: 'morning_solar',
sourceMode: 'solar_only',
state: 'idle_wait_conditions',
decision: 'hold',
desiredCharging: false,
},
},
// ===== 01/09/2026 : le depassement souple de la batterie doit DURER =====
// Incident du 01/09 (14:26 et 14:56) : SOC 94, batterie en float, courant
// oscillant entre +1,8 et -2,6 A d'un echantillon a l'autre. Le controleur