Budget voiture de la nuit : ce que la batterie peut donner sans EDF, arret au compteur, choix sans EDF / complete

This commit is contained in:
Tallagrand Thierry
2026-09-30 13:26:45 +02:00
parent fb98a8cbb8
commit e0d855f33f
16 changed files with 370 additions and 10 deletions

View File

@@ -112,6 +112,9 @@ const SUMMARIZE = {
// Maison sur le reseau pendant la fenetre HC de nuit (29/09).
nightHcActive: o.nightHcImport ? o.nightHcImport.active : false,
nightHcHouseKwh: o.nightHcImport ? o.nightHcImport.houseKwh : null,
// Budget voiture de la nuit sans EDF (30/09).
nightVehicleBudgetActive: o.nightVehicleBudget ? o.nightVehicleBudget.active : false,
nightVehicleBudgetKwh: o.nightVehicleBudget ? o.nightVehicleBudget.kwh : null,
// Voiture branchee en HC, depart avant la prochaine HC (28/09).
vehicleActive: o.vehicleMidday ? o.vehicleMidday.active : false,
vehicleNeedKwh: o.vehicleMidday ? o.vehicleMidday.needKwh : null,

View File

@@ -73,6 +73,16 @@ function jeep(snapshot, niveau, extra = {}) {
vehicle_delivered_since_level_kwh: 0 }, extra);
}
const NUIT_HC_2809 = { night_hc_start_ms: Date.parse('2026-09-28T01:24:00+02:00'),
night_hc_end_ms: Date.parse('2026-09-28T07:24:00+02:00') };
// Lendemain ensoleille : production du 28/09 x 1,5 (~49 kWh), le reste inchange.
function soleil2809(snapshot) {
snapshot.horizon = snapshot.horizon.map(sl =>
new Date(sl.startMs).toLocaleDateString('sv-SE', { timeZone: 'Europe/Paris' }) === '2026-09-28'
? { ...sl, expectedKwh: FS_2809[sl.hour] * 1.5 } : sl);
return snapshot;
}
export const balanceScenarios = [
{
// Le parc a change deux fois en une semaine et rechangera cet hiver : le
@@ -593,6 +603,38 @@ export const balanceScenarios = [
night_hc_start_ms: Date.parse('2026-09-28T01:24:00+02:00'), night_hc_end_ms: Date.parse('2026-09-28T07:24:00+02:00') }),
expect: { usable: true, nightHcActive: true, nightHcHouseKwh: 2.68 },
},
// ======== BUDGET VOITURE DE LA NUIT SANS EDF (30/09/2026) ========
// Decisions du proprietaire : profil prudent (p80), plancher 22 %, jusqu'a la
// nuit suivante. Attendus calcules par un script Python independant (meme
// trajectoire, creux a 9 h). Lendemain ensoleille = production du 28/09 x 1,5.
{
node: 'BALANCE',
id: 'bilan-budget-voiture-nuit-soleil',
label: '01:25, SOC 57, lendemain ensoleille : la voiture peut prendre 4,21 kWh sur la batterie',
snapshot: soleil2809(Object.assign(snap2709('2026-09-28T01:25:00+02:00', 57, null), NUIT_HC_2809)),
expect: { usable: true, nightVehicleBudgetActive: true, nightVehicleBudgetKwh: 4.21 },
},
{
node: 'BALANCE',
id: 'bilan-budget-voiture-nuit-soc-bas',
label: '01:25, SOC 45 : il ne reste que 0,61 kWh au-dessus du creux de 9 h',
snapshot: soleil2809(Object.assign(snap2709('2026-09-28T01:25:00+02:00', 45, null), NUIT_HC_2809)),
expect: { usable: true, nightVehicleBudgetActive: true, nightVehicleBudgetKwh: 0.61 },
},
{
node: 'BALANCE',
id: 'bilan-budget-voiture-nuit-lendemain-sombre',
label: 'Lendemain sombre (27-28/09) : la batterie ne tiendrait pas la nuit suivante, budget nul',
snapshot: Object.assign(snap2709('2026-09-27T23:00:00+02:00', 52, null), NUIT_HC_2809),
expect: { usable: true, nightVehicleBudgetActive: true, nightVehicleBudgetKwh: 0 },
},
{
node: 'BALANCE',
id: 'bilan-budget-voiture-fenetre-inconnue',
label: 'Fenetre HC de nuit non transmise : pas de budget (le controleur ne donne rien)',
snapshot: snap2709('2026-09-28T01:25:00+02:00', 57, null),
expect: { usable: true, nightVehicleBudgetActive: false, nightVehicleBudgetKwh: null },
},
{
node: 'BALANCE',
id: 'bilan-hc-nuit-fenetre-inconnue',