JEEP branchee a midi : reseau en HC seulement si le solaire ne suffit pas avant son depart

Regle du proprietaire (28/09). Le bilan compare le besoin saisi (niveau x capacite
mesuree - deja delivre) au solaire disponible avant le depart de 15:30 (mar/mer/
ven/sam) sans descendre la batterie sous le plancher « tenir jusqu'a la prochaine
HC ». Le controleur relaie le verdict sous les gardes du bilan ; session de midi
engagee -> voiture sur le reseau avec la batterie. Bilan 61/61, golden 121/121.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011uJ47NxgfpGnuuMr3f2n7Z
This commit is contained in:
Tallagrand Thierry
2026-09-28 13:55:40 +02:00
parent 9b1c9d30cf
commit 3b9b67268c
17 changed files with 501 additions and 14 deletions

View File

@@ -739,10 +739,24 @@ const nightGridSessionUncovered =
// `required_soc` = 22,0 pour `energy_to_cover` = 0,0. Il ne remonte qu'un jour
// sombre — ou quand le proprietaire pose un plancher manuel, ce qui est
// exactement le cas d'usage.
//
// ET LA VOITURE (28/09/2026, strategie du proprietaire) : « JEEP branchee
// engage le reseau en HC midi si l'analyse de production le justifie ». Le
// bilan fait l'analyse (besoin saisi contre solaire disponible avant le depart,
// batterie gardee pour tenir jusqu'a 01:24) et publie un verdict ; on le relaie,
// sous les memes gardes de fraicheur et de statut que la cible.
const middayVehicleGridNeeded =
balanceMorningTargetApplied &&
params.balanceVehicleGridNeeded &&
parsed.evcsVehicleConnected;
const middayGridSessionUncovered =
balanceMorningTargetApplied &&
Number.isFinite(params.balanceRequiredSocPct) &&
parsed.soc < params.balanceRequiredSocPct;
(
(Number.isFinite(params.balanceRequiredSocPct) &&
parsed.soc < params.balanceRequiredSocPct) ||
middayVehicleGridNeeded
);
const gridSessionInHcWindow =
profile === 'night_hc' || profile === 'midday_hc_or_solar';
@@ -931,7 +945,15 @@ else if (profile === 'night_hc') {
}
else if (profile === 'midday_hc_or_solar' || profile === 'morning_solar') {
if (strongSolarSignal) {
// Session de midi engagee et contacteur ferme : la voiture charge sur le
// reseau avec la batterie (« batterie et voiture ensemble », 28/09), meme au
// soleil. La consigne garde son credit solaire (HA_SERVICE_CALLS_OUTPUT) :
// elle ne preleve au reseau que ce que les chargeurs ne donnent pas.
if (profile === 'midday_hc_or_solar' && nightGridSessionCommitted && parsed.gridAvailable) {
sourceMode = 'grid_hc_allowed';
}
else if (strongSolarSignal) {
sourceMode = 'solar_only';
}
@@ -1168,6 +1190,7 @@ return [{
nightBatterySurplusAvailable,
nightBatterySurplusExhausted,
nightGridSessionCommitted,
middayVehicleGridNeeded,
nightGridSessionUncovered,
balanceTargetAgeMin:
balanceTargetAgeMin === null ? null : Math.round(balanceTargetAgeMin * 10) / 10,