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