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

@@ -153,6 +153,7 @@
"dvcc_max_charge_current_a": states("sensor.victron_max_charge_current_setting"),
"balance_status": states("input_text.evcs_balance_status"),
"balance_last_run": states("input_text.evcs_balance_last_run"),
"balance_vehicle_grid_needed": states("input_boolean.evcs_balance_vehicle_grid_needed"),
"allow_grid_hc_midday": states("input_boolean.victron_evcs_allow_grid_hc_midday"),
"probe_enabled": states("input_boolean.victron_evcs_probe_enabled"),

View File

@@ -487,6 +487,9 @@ const params = {
// BILAN ENERGETIQUE (03/09/2026). Meme format d'horodatage que l'advisor
// ("DD/MM HH:mm"), d'ou la reutilisation du parseur.
balanceRequiredSocPct: num(input.balance_required_soc, NaN),
// Voiture branchee en HC avec un depart avant la prochaine HC (28/09) : le
// bilan juge que le solaire ne lui donnera pas son besoin avant le depart.
balanceVehicleGridNeeded: low(input.balance_vehicle_grid_needed || 'off') === 'on',
// P12 — charge nuit sur batterie. Le plancher est le SOC requis PRUDENT (p80)
// et non le p50 : la marge est mesuree, pas inventee. On descend la voiture
// jusqu'a ce que la batterie n'ait plus que ce qu'il lui faut pour tenir

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,