Cible du matin fixee par le bilan dans les deux sens ; urgence avant depart seulement s'il manque de l'energie

This commit is contained in:
Tallagrand Thierry
2026-10-01 07:42:33 +02:00
parent 677a0388d7
commit df7395109e
4 changed files with 48 additions and 13 deletions

View File

@@ -1351,9 +1351,21 @@ ferme **06:00 -> 06:38** (2,15 kWh importes, HC). Mode sans_edf, budget publie 5
`/api/template` : prochain depart JEEP « Fri 02 06:30 », ok. Golden **134/134** (+2 : jour
de depart = comportement historique ; jeudi = EDF reste ouvert), mutation qui mord.
Carte EVCS Master (trois lignes de jours). MANUEL §0.
⚠️ **Reste ouvert** : un jour de depart, la marge declenche encore l'« urgence » a 06:00
meme quand il ne manque RIEN a la batterie (0 kWh + 30 min >= 30 min). Correctif propose :
exiger un manque > 0 ; decision du proprietaire.
**Urgence avant depart (corrige 01/10, accord du proprietaire)** : `batteryRecoveryUrgent`
exige desormais `batteryKwhMissingToTarget > 0` ; la marge de 30 min s'ajoute a un VRAI
temps de recharge (manque / 2,5 kW), elle ne declenche plus rien seule.
4. **La cible du matin vient du bilan, dans les deux sens** (proprietaire : « 35 % c'est idiot
si le besoin est prevu 26,6 %, et c'est aussi idiot si la prevision est de 60 % pour une
journee nuageuse »). `batteryMorningTargetPct` = min(90, max(plancher dur, required_soc))
quand le bilan est frais et ok ; le palier de prevision (35/55/85 %) n'est plus qu'un
REPLI. Fin du « sens unique » du 03/09 (§39). Effet : la reprise reseau de nuit
(`gridTakeoverTriggerPct`) et l'urgence avant depart suivent le besoin reel.
Golden **135/135** : `cible-bilan-ne-baisse-pas-la-cible` devient
`cible-bilan-abaisse-la-cible` (inverse, voulu) ; `depart-matin-jour-de-depart-rien-ne-manque`
(SOC 37 > 28,6 : rien) et `…-batterie-sous-la-cible` (SOC 25 : urgence, EDF) ; deux
mutations qui mordent ; golden-acm 20/20, hysteresis 24/24. Deploye ~07:50.
⚠️ A surveiller : le bilan p50 peut sous-estimer une nuit ; la batterie descend alors plus
bas qu'avec le palier 35 %. Le filet reste l'hysteresis a 20 % et la session de nuit.
---
*Document mis a jour le : 01/10/2026 (~07:35) — premiere nuit du budget : ecritures perdues et verrou P12 corriges, faux positif de depart a 06:00 ; commande vocale du mode de nuit validee, premiere nuit budget a suivre ; budget voiture de la nuit sans EDF (bilan + controleur) ; fiche de l'agent allegee (25 831 car.), concierge sans silence, calendrier JEEP mar/sam ; nuit du 28-29 verifiee, achat EDF annonce = maison en HC + manque batterie ; regle HC active, vehicule branche a midi (JEEP/VW/ZERO), prevision de nuit a trois verdicts, nuits superposees et bilan recale sur la soiree*

View File

@@ -353,8 +353,15 @@ const balanceMorningTargetApplied =
balanceTargetAgeMin !== null &&
balanceTargetAgeMin <= BALANCE_TARGET_MAX_AGE_MIN;
// ⚠️ 01/10/2026 — DECISION DU PROPRIETAIRE : LE BILAN FIXE LA CIBLE, DANS LES
// DEUX SENS. « La valeur de 35 % c'est idiot si le besoin est prevu 26,6 %, et
// c'est aussi idiot si la prevision est de 60 % pour une journee nuageuse. »
// Le sens unique ci-dessus (03/09) gardait le palier comme plancher : le
// 01/10 a 06:00, cible 35 (palier « forte prevision ») pour un besoin du bilan
// de 28,6 %. Le palier n'est plus qu'un REPLI quand le bilan est absent,
// perime ou degrade. Bornes : le plancher dur en bas, 90 % en haut.
const batteryMorningTargetPct = balanceMorningTargetApplied
? Math.min(90, Math.max(batteryMorningTargetBasePct, params.balanceRequiredSocPct))
? Math.min(90, Math.max(batteryHardFloorPct, params.balanceRequiredSocPct))
: batteryMorningTargetBasePct;
const maxBatteryDischargePoints =
@@ -387,8 +394,13 @@ const batteryRecoveryMinutesNeeded =
? (batteryKwhMissingToTarget / params.evcsNightBatteryRecoveryPowerKw) * 60
: 0;
// 01/10/2026 : l'urgence avant depart exige qu'il MANQUE de l'energie. Sans
// cette garde, « 0 min de recharge + 30 min de marge >= 30 min » la declenchait
// a 06:00 chaque jour de depart, batterie au-dessus de sa cible (01/10 : SOC 37,
// cible 35, EDF ferme 06:00-06:38 pour rien ; idem 21, 22, 25 et 27/09).
const batteryRecoveryUrgent =
nightSessionActive &&
batteryKwhMissingToTarget > 0 &&
Number.isFinite(minutesUntilDeparture) &&
minutesUntilDeparture >= 0 &&
(

View File

@@ -1341,9 +1341,11 @@ export const scenarios = [
},
{
// SENS UNIQUE : le bilan ne doit jamais ABAISSER la cible.
id: 'cible-bilan-ne-baisse-pas-la-cible',
label: "Nuit HC, SOC 30, le bilan ne demande que 25 % → le palier 35 % reste maître → le réseau est maintenu",
// 01/10/2026, DECISION DU PROPRIETAIRE : le bilan fixe la cible DANS LES
// DEUX SENS (« 35 % c'est idiot si le besoin est prevu 26,6 % »). Ce
// scenario figeait l'ancien sens unique ; il fige desormais l'inverse.
id: 'cible-bilan-abaisse-la-cible',
label: "Nuit HC, SOC 30, le bilan ne demande que 25 % → la cible est 25 %, le palier 35 % n'est plus maître → le réseau est relâché",
time: '2026-08-08T03:00:00+02:00',
overrides: {
...VEHICLE_NIGHT, allow_grid_hc_night: 'on',
@@ -1357,9 +1359,8 @@ export const scenarios = [
},
expect: {
profile: 'night_hc',
state: 'night_session_done_idle',
takeoverNeeded: true,
takeoverHelperService: 'turn_on',
takeoverNeeded: false,
takeoverHelperService: 'turn_off',
},
},
@@ -3152,13 +3153,23 @@ export const scenarios = [
// de 30 min declenchait la « recharge urgente avant depart » (0 kWh manquant)
// et fermait EDF. Le jeudi, la JEEP ne part pas.
{
id: 'depart-matin-jour-de-depart-urgence-historique',
label: 'Depart JEEP 06:30 un jour de depart : la marge de 30 min engage le reseau a 06:00 (comportement historique)',
id: 'depart-matin-jour-de-depart-rien-ne-manque',
label: 'Jour de depart, SOC 37 au-dessus de la cible du bilan (28,6) : il ne manque rien, aucune urgence a 06:00 (EDF ferme pour rien les 21, 22, 25, 27/09 et 01/10)',
time: '2026-10-01T06:00:00+02:00',
overrides: { ...BUDGET_NUIT, balance_last_run: '01/10 05:55', soc_percent: '37',
balance_required_soc: '28.6', balance_required_soc_prudent: '29.7',
evcs_vehicle: 'JEEP', departure_time_jeep: '06:30:00', departure_day_ok: 'on',
night_charge_mode: 'sans_edf', night_budget_prev: '5.93|4010', evcs_total_energy_kwh: '4015' },
expect: { edfOnAction: false, takeoverNeeded: false },
},
{
id: 'depart-matin-jour-de-depart-batterie-sous-la-cible',
label: 'Jour de depart, SOC 25 sous la cible du bilan (28,6) : il manque 1,1 kWh, l urgence engage le reseau avant 06:30',
time: '2026-10-01T06:00:00+02:00',
overrides: { ...BUDGET_NUIT, balance_last_run: '01/10 05:55', soc_percent: '25',
balance_required_soc: '28.6', balance_required_soc_prudent: '29.7',
evcs_vehicle: 'JEEP', departure_time_jeep: '06:30:00', departure_day_ok: 'on',
night_charge_mode: 'sans_edf', night_budget_prev: '5.93|4010', evcs_total_energy_kwh: '4015' },
expect: { sourceMode: 'grid_forced', edfOnAction: true },
},
{

File diff suppressed because one or more lines are too long