Bilan : tenir jusqu'a la prochaine fenetre HC (strategie du proprietaire, 28/09)
Nuit du 26-27/09 : P12 a charge la JEEP sur la batterie (72 -> 44 %) ; la journee sombre n'a pas reconstitue la reserve. Strategie : voiture branchee = charge en HC sur le reseau ; la batterie tient jusqu'a la prochaine HC, midi complete si besoin. - HA transmet la fin de la fenetre HC en cours et le debut des suivantes (le calendrier reste dans HA, §73) - pendant une fenetre HC, required_soc >= SOC pour atteindre la PROCHAINE HC (engage ET finance la session, insere dans coverage() comme le plancher manuel) ; required_soc_prudent (plancher de P12) >= SOC pour atteindre la NUIT SUIVANTE -> journee sombre = voiture sur le reseau HC - a midi la session et la voiture en grid_hc_allowed se chargent ensemble (aucun changement du controleur) - 4 scenarios reels du 27/09, bilan 54/54, deux mutations qui mordent 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:
@@ -1,5 +1,30 @@
|
||||
{#- Fenetres d'heures creuses (28/09/2026). Le calendrier tarifaire reste dans
|
||||
Home Assistant (helpers victron_evcs_hc_*) ; le bilan ne recoit que deux
|
||||
instants : la fin de la fenetre HC en cours (vide hors fenetre) et le debut
|
||||
de la fenetre HC suivante. Strategie du proprietaire : la batterie doit
|
||||
tenir jusqu'a la prochaine fenetre HC. -#}
|
||||
{%- set ns = namespace(fin='', suivant='', nuit='', fen=[]) -%}
|
||||
{%- for j in [0, 1, 2] -%}
|
||||
{%- for a, b, t in [('victron_evcs_hc_night_start', 'victron_evcs_hc_night_stop', 'nuit'), ('victron_evcs_hc_midday_start', 'victron_evcs_hc_midday_stop', 'midi')] -%}
|
||||
{%- set d = today_at(states('input_datetime.' ~ a)) + timedelta(days=j) -%}
|
||||
{%- set f = today_at(states('input_datetime.' ~ b)) + timedelta(days=j) -%}
|
||||
{%- set f = f + timedelta(days=1) if f <= d else f -%}
|
||||
{%- set ns.fen = ns.fen + [[d, f, t]] -%}
|
||||
{%- endfor -%}
|
||||
{%- endfor -%}
|
||||
{%- for w in ns.fen | sort(attribute='0') -%}
|
||||
{%- if w[0] <= now() < w[1] and ns.fin == '' -%}{%- set ns.fin = w[1] -%}{%- endif -%}
|
||||
{%- endfor -%}
|
||||
{%- set repere = ns.fin if ns.fin != '' else now() -%}
|
||||
{%- for w in ns.fen | sort(attribute='0') -%}
|
||||
{%- if w[0] >= repere and ns.suivant == '' -%}{%- set ns.suivant = w[0] -%}{%- endif -%}
|
||||
{%- if w[0] >= repere and w[2] == 'nuit' and ns.nuit == '' -%}{%- set ns.nuit = w[0] -%}{%- endif -%}
|
||||
{%- endfor -%}
|
||||
{{ {
|
||||
"ts": now().isoformat(),
|
||||
"hc_window_end_ms": (as_timestamp(ns.fin) * 1000) if ns.fin != '' else none,
|
||||
"next_hc_start_ms": (as_timestamp(ns.suivant) * 1000) if ns.suivant != '' else none,
|
||||
"next_night_hc_start_ms": (as_timestamp(ns.nuit) * 1000) if ns.nuit != '' else none,
|
||||
"nowMs": as_timestamp(now()) * 1000,
|
||||
|
||||
"balance_enabled": states("input_boolean.evcs_balance_enabled"),
|
||||
|
||||
Reference in New Issue
Block a user