Files
EVCS/packages/evcs_energy_balance.yaml
Tallagrand Thierry 3b9b67268c 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
2026-09-28 13:55:40 +02:00

266 lines
9.5 KiB
YAML
Executable File

# =====================================================================
# Bilan énergétique EVCS — helpers (chantier du 24/08/2026)
# MODE OMBRE : le workflow "EVCS Energy Balance V1" n'écrit QUE dans ces
# entités. Aucun switch, aucune consigne de borne, aucune stratégie.
# Voir docs/CHANTIER_BILAN_ENERGETIQUE.md dans le dépôt EVCS.
# =====================================================================
input_boolean:
evcs_balance_enabled:
name: "Bilan énergétique — actif (kill-switch)"
icon: mdi:scale-balance
initial: true
evcs_balance_grid_needed:
name: "Bilan — réseau nécessaire"
icon: mdi:transmission-tower
# Voiture branchee en HC avec un depart avant la prochaine HC (28/09) : le
# solaire ne suffit pas a lui donner son besoin avant le depart -> le
# controleur engage la session reseau de la fenetre HC.
evcs_balance_vehicle_grid_needed:
name: "Bilan — réseau justifié pour la voiture (départ avant la prochaine HC)"
icon: mdi:car-electric
evcs_balance_pv_censored:
name: "Bilan — production actuellement bridée"
icon: mdi:solar-power-variant-outline
# Vrai à partir de la vigilance ORANGE — le seuil est celui de Météo-France,
# pas un nombre choisi ici. N'agit sur rien : mode ombre.
evcs_balance_storm_active:
name: "Bilan — vigilance orage active"
icon: mdi:weather-lightning
input_number:
# Saisi par l'utilisateur : capacité réellement disponible du parc batterie.
# 7 modules US2000C actifs au 24/08/2026 (un isolé) -> ~15 kWh.
evcs_balance_usable_capacity_kwh:
name: "Bilan — capacité batterie utile"
min: 2
max: 60
step: 0.5
unit_of_measurement: kWh
mode: box
icon: mdi:battery-high
# Nombre de modules US2000C REELLEMENT en service. La courbe energie/SOC a ete
# mesuree sur sept modules (HANDOFF §41) ; elle est mise a l'echelle de ce
# nombre par le bilan ET par le controleur EVCS, qui le lisent tous deux ici —
# les deux decrivent forcement le meme parc.
# Helper absent ou hors bornes => repli sur 7, la valeur de la mesure.
# 05/09/2026 : pack ancien isole et coupe au coupe-circuit -> 4.
# ⚠️ EN EQUIVALENTS US2000C, PAS EN MODULES PHYSIQUES.
# La courbe energie/SOC est mesuree par US2000C (0,091 kWh AC par point de
# SOC et par module). Un US5000 fait 100 Ah contre 50 : il en vaut DEUX.
# 4 US2000C ....................... 4
# 4 US2000C + 4 US5000 ............ 12
# Cette valeur alimente TROIS consommateurs a la fois : la capacite utile du
# controleur, la conversion energie/SOC du bilan, et l'echelle des bandes de
# politique batterie. Une erreur ici se propage aux trois.
evcs_balance_modules_en_service:
name: "Parc batterie — équivalents US2000C"
min: 1
max: 24
step: 1
unit_of_measurement: équiv.
mode: box
icon: mdi:battery-sync
# Calculés par le bilan.
evcs_balance_required_soc:
name: "Bilan — SOC requis (décision)"
min: 0
max: 100
step: 0.1
unit_of_measurement: "%"
mode: box
icon: mdi:battery-alert-variant-outline
evcs_balance_required_soc_prudent:
name: "Bilan — SOC requis (planification)"
min: 0
max: 100
step: 0.1
unit_of_measurement: "%"
mode: box
icon: mdi:battery-clock
# Regle « tenir jusqu'a la prochaine HC » (28/09) : SOC a avoir en fin de
# fenetre HC en cours. 0 = hors fenetre HC ou regle sans effet.
evcs_balance_vehicle_need_kwh:
name: "Bilan — besoin de la voiture avant son départ"
min: 0
max: 100
step: 0.01
unit_of_measurement: kWh
mode: box
icon: mdi:car-arrow-left
evcs_balance_vehicle_solar_kwh:
name: "Bilan — solaire disponible pour la voiture avant son départ"
min: 0
max: 100
step: 0.01
unit_of_measurement: kWh
mode: box
icon: mdi:solar-power-variant
evcs_balance_hc_floor_pct:
name: "Bilan — plancher HC (prochaine HC)"
min: 0
max: 100
step: 0.1
unit_of_measurement: "%"
mode: box
icon: mdi:clock-end
evcs_balance_hc_floor_prudent_pct:
name: "Bilan — plancher HC prudent (P12, nuit suivante)"
min: 0
max: 100
step: 0.1
unit_of_measurement: "%"
mode: box
icon: mdi:clock-alert-outline
evcs_balance_energy_to_cover_kwh:
name: "Bilan — énergie à couvrir"
min: 0
max: 100
step: 0.01
unit_of_measurement: kWh
mode: box
icon: mdi:flash-outline
evcs_balance_grid_energy_needed_kwh:
name: "Bilan — énergie réseau nécessaire"
min: 0
max: 100
step: 0.01
unit_of_measurement: kWh
mode: box
icon: mdi:transmission-tower-import
# Prochaine fenêtre de déficit (typiquement la nuit qui vient).
evcs_balance_next_deficit_kwh:
name: "Bilan — énergie de la prochaine traversée déficitaire"
min: 0
max: 200
step: 0.01
unit_of_measurement: kWh
mode: box
icon: mdi:weather-night
evcs_balance_next_deficit_required_soc:
name: "Bilan — SOC requis avant la traversée"
min: 0
max: 300
step: 0.1
unit_of_measurement: "%"
mode: box
icon: mdi:battery-charging-100
# Au-dessus de 100 % de SOC requis : capacité utile manquante.
# C'est le chiffre du dimensionnement du stockage.
evcs_balance_storage_shortfall_kwh:
name: "Bilan — capacité de stockage manquante"
min: 0
max: 200
step: 0.01
unit_of_measurement: kWh
mode: box
icon: mdi:battery-alert
evcs_balance_vehicle_surplus_kwh:
name: "Bilan — surplus disponible pour le véhicule"
min: 0
max: 200
step: 0.01
unit_of_measurement: kWh
mode: box
icon: mdi:car-electric
# --- Réserve d'orage (27/08/2026) ---------------------------------------
# Ce qu'il faut avoir en batterie pour traverser SANS réseau la fenêtre de
# déficit qui compte. C'est la couverture prudente (p80) du bilan, pas une
# nouvelle constante : une coupure n'arrête pas l'installation, elle retire
# seulement le filet de secours et la possibilité de rattraper.
evcs_balance_storm_reserve_kwh:
name: "Bilan — réserve d'orage (énergie)"
min: 0
max: 100
step: 0.01
unit_of_measurement: "kWh"
mode: box
icon: mdi:weather-lightning
evcs_balance_storm_reserve_soc:
name: "Bilan — réserve d'orage (SOC)"
min: 0
max: 100
step: 0.1
unit_of_measurement: "%"
mode: box
icon: mdi:battery-alert-variant-outline
input_text:
# Profils recalculés une fois par jour, en CSV compact (24 valeurs, <255 car.)
evcs_balance_consumption_p50:
name: "Bilan — profil conso typique (CSV 24 h)"
max: 255
evcs_balance_consumption_p80:
name: "Bilan — profil conso prudent (CSV 24 h)"
max: 255
evcs_balance_envelope:
name: "Bilan — enveloppe de production démontrée (CSV 24 h)"
max: 255
evcs_balance_censorship_rate:
name: "Bilan — taux de censure par heure (CSV 24 h)"
max: 255
# Sorties lisibles.
evcs_balance_crossing_hour:
name: "Bilan — heure de croisement PV/conso"
max: 32
evcs_balance_censor_reason:
name: "Bilan — motif du bridage"
max: 255
evcs_balance_next_deficit_window:
name: "Bilan — prochaine traversée déficitaire"
max: 64
# --- Prévision solaire horaire (Forecast.Solar, abonnement Professional) ---
# La clé vit ici et NON dans le dépôt : le workflow n8n la lit via le snapshot
# et construit l'URL lui-même. mode password pour la masquer dans l'interface.
evcs_balance_forecast_api_key:
name: "Bilan — clé API Forecast.Solar"
mode: password
max: 64
# Plans au format attendu par l'API : dec/az/kWc répétés.
# ⚠️ Azimut selon la convention de l'API : 0 = sud, -90 = est, +90 = ouest.
evcs_balance_forecast_planes:
name: "Bilan — plans photovoltaïques (format API)"
max: 128
# La DATE que decrit la courbe de prevision (AAAA-MM-JJ). Sans elle, « today »
# veut dire « le premier jour renvoye par l'API au moment de la publication »,
# ce qui devient faux des qu'on passe minuit sans rafraichir : nuit du 07 au
# 08/09/2026, 4 h 45 sans publication, courbe du 7 lue comme celle du 8, bilan
# degrade et cible du matin retombee sur les paliers pendant quatre heures.
# PAS de `initial:` — il desactiverait la restauration d'etat.
evcs_balance_forecast_day0:
name: "Bilan — date de la courbe de prévision"
max: 10
evcs_balance_forecast_today:
name: "Bilan — prévision horaire du jour (CSV 24 h, kWh)"
max: 255
evcs_balance_forecast_tomorrow:
name: "Bilan — prévision horaire de demain (CSV 24 h, kWh)"
max: 255
evcs_balance_forecast_updated:
name: "Bilan — prévision mise à jour"
# 128 et non 32 : ce champ porte soit un horodatage « JJ/MM HH:MM » (11
# caracteres), soit un message d'echec. « échec : réponse illisible ou sans
# résultat » en fait 43 — Home Assistant le REJETAIT, si bien qu'aucune
# panne de prevision n'a jamais ete publiee ici. Constate le 08/09/2026 en
# cherchant pourquoi les 4 h 45 d'interruption de la nuit precedente
# n'avaient laisse aucune trace : zero message d'echec en quatre jours.
max: 128
evcs_balance_status:
name: "Bilan — statut"
max: 64
evcs_balance_reason:
name: "Bilan — explication"
max: 255
evcs_balance_last_run:
name: "Bilan — dernière exécution"
max: 32
evcs_balance_storm_level:
name: "Bilan — vigilance météo"
max: 40
icon: mdi:weather-lightning-rainy
evcs_balance_storm_reason:
name: "Bilan — réserve d'orage (détail)"
max: 255
icon: mdi:text-long