Bilan energetique : carte Cible du matin (source bilan ou repli, prochain depart, urgence)

This commit is contained in:
Tallagrand Thierry
2026-10-01 07:50:17 +02:00
parent df7395109e
commit 6f9e9481a4
2 changed files with 45 additions and 17 deletions

View File

@@ -1366,6 +1366,13 @@ ferme **06:00 -> 06:38** (2,15 kWh importes, HC). Mode sans_edf, budget publie 5
mutations qui mordent ; golden-acm 20/20, hysteresis 24/24. Deploye ~07:50. 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 ⚠️ 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. bas qu'avec le palier 35 %. Le filet reste l'hysteresis a 20 % et la session de nuit.
**Carte « Cible du matin »** (Bilan energetique, onglet Bilan, a la place de la carte
perimee « Seuil calcule contre seuil fixe ») : cible appliquee
(`input_number.victron_evcs_night_target_soc`), source (bilan ou repli palier), marge,
prochain depart du matin du vehicule selectionne (jours compris) et heure a partir de
laquelle l'urgence avant depart peut agir. Carte vivante (Jinja), rendu verifie par
`/api/template` : SOC 34, cible 26 (bilan), depart ven 02/10 06:30, aucune urgence.
Sauvegarde `bilan_energetique.yaml.bak-20261001-cible`.
--- ---
*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* *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

@@ -39,33 +39,54 @@ views:
{{ states('input_text.evcs_balance_reason') }} {{ states('input_text.evcs_balance_reason') }}
# --- LA comparaison qui décidera du câblage --------------------- # --- Cible du matin (01/10/2026) -----------------------------------
# Remplace « Seuil calcule contre seuil fixe » (epoque du mode ombre).
# Carte VIVANTE : elle se recalcule seule a chaque changement des
# grandeurs lues (controleur toutes les 30 s, bilan toutes les 5 min).
- type: markdown - type: markdown
title: Seuil calculé contre seuil fixe title: Cible du matin
content: | content: |
{% set req = states('input_number.evcs_balance_required_soc') | float(0) %} {% set cible = states('input_number.victron_evcs_night_target_soc') | float(0) %}
{% set fixe = states('input_number.victron_grid_soc_off') | float(0) %} {% set req = states('input_number.evcs_balance_required_soc') | float(-1) %}
{% set soc = states('sensor.victron_battery_soc') | float(0) %} {% set soc = states('sensor.victron_battery_soc') | float(0) %}
{% set ecart = req - fixe %} {% set statut = states('input_text.evcs_balance_status') %}
{% set du_bilan = statut == 'ok' and req >= 0 and (cible - [req, 22] | max) | abs < 0.15 %}
{% set ecart = soc - cible %}
| | | | | |
|---|---:| |---|---:|
| SOC batterie **maintenant** | **{{ soc | round(0) }} %** | | SOC batterie **maintenant** | **{{ soc | round(0) }} %** |
| Seuil **calculé** par le bilan | **{{ req | round(1) }} %** | | **Cible du matin** appliquée par le contrôleur | **{{ cible | round(1) }} %** |
| Seuil **fixe** encore en vigueur | {{ fixe | round(0) }} % | | Source | {{ '**bilan** (SOC requis ' ~ (req | round(1)) ~ ' %)' if du_bilan else '⚠️ **repli** : palier de prévision (bilan ' ~ statut ~ ')' }} |
| Écart | {{ '+' if ecart >= 0 else '' }}{{ ecart | round(1) }} points | | Marge | {{ '+' if ecart >= 0 else '' }}{{ ecart | round(1) }} points |
{% if req > fixe %} {% set vsel = {'JEEP': 'jeep', 'VW': 'vw', 'ZERO': 'zero'}.get(states('input_select.victron_evcs_vehicle'), 'vw') %}
Le seuil fixe est aujourd'hui **trop bas** : il laisserait la batterie {% set heure = states('input_datetime.' ~ {'vw': 'victron_evcs_departure_time', 'jeep': 'victron_evcs_departure_time_jeep', 'zero': 'victron_evcs_departure_time_zero'}[vsel]) %}
descendre sous ce qu'il faut pour tenir jusqu'au croisement. {% set jours = states('input_text.victron_evcs_' ~ vsel ~ '_morning_departure_days') | lower %}
{% elif req < fixe %} {% set noms = ['lun', 'mar', 'mer', 'jeu', 'ven', 'sam', 'dim'] %}
Le seuil fixe est aujourd'hui **trop haut** : il fait importer du {% set branche = is_state('binary_sensor.victron_evcs_vehicle_connected', 'on') %}
réseau au-delà du nécessaire. {% if heure not in ['unknown', 'unavailable', ''] %}
{% set d = today_at(heure) if today_at(heure) > now() else today_at(heure) + timedelta(days=1) %}
{% set jour_ok = jours in ['unknown', 'unavailable', ''] or noms[d.weekday()] in jours.split() %}
**Prochain départ du matin** ({{ states('input_select.victron_evcs_vehicle') }}{{ ', branchée' if branche else ', non branchée' }}) :
{% if jour_ok %}
{{ noms[d.weekday()] }} {{ d.strftime('%d/%m à %H:%M') }}.
{% if ecart >= 0 %}
Il ne manque rien à la batterie : **aucune urgence avant départ**.
{% else %} {% else %}
Les deux coïncident. {% set manque = (cible - soc) * 0.30 %}
{% set minutes = manque / 2.5 * 60 + 30 %}
Il manque **{{ manque | round(1) }} kWh** : l'urgence avant départ peut fermer EDF
à partir de **{{ (d - timedelta(minutes=minutes)).strftime('%H:%M') }}** si la batterie
n'est pas remontée d'ici là (session de nuit en heures creuses).
{% endif %}
{% else %}
pas de départ {{ noms[d.weekday()] }} ({{ jours }}) : **aucune urgence avant départ**.
{% endif %}
{% endif %} {% endif %}
*C'est l'accumulation de cet écart, jour après jour, qui décidera si *La cible suit le besoin calculé par le bilan, dans les deux sens ; le
le bilan prend la main.* palier de prévision (35/55/85 %) ne sert que si le bilan est absent ou
périmé. Elle se recalcule en continu : il n'y a rien à mettre à jour.*
# --- Décision immédiate ---------------------------------------- # --- Décision immédiate ----------------------------------------
- type: entities - type: entities