Bilan : prevision solaire VRM (selecteur de source), les deux sources enregistrees

Decision du proprietaire (28/09) : Forecast.Solar renvoie des totaux quasi
constants (~26 kWh) pour 40-47 reels ; VRM suivait mieux le reel sur 10 jours
(erreur 21 % contre 32 %, 14 % contre 36 % sur les 5 derniers). Le bilan
lit VRM des maintenant ; les deux previsions sont enregistrees (colonne
source, cle etendue) pour les comparer dans une semaine.
- input_select.evcs_balance_forecast_source (vrm | forecast_solar) = retour
  arriere en un geste ; helpers evcs_balance_vrm_* au format du bilan
- historisation : lecture VRM (jeton dans .env, jamais dans HA) toutes les
  15 min, vrmVersCourbes (jour et heure de Paris), tests 69/69
- modele du bilan conditionnel ; bilan 50/50, deploye
- evcs_prevision_contre_reel porte sur la source active

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 01:39:54 +02:00
parent 0686ef7e7d
commit 5a8e4afde0
6 changed files with 162 additions and 13 deletions

View File

@@ -11,10 +11,11 @@
"envelope_csv": states("input_text.evcs_balance_envelope"),
"censorship_rate_csv": states("input_text.evcs_balance_censorship_rate"),
"forecast_day0": states("input_text.evcs_balance_forecast_day0"),
"forecast_today_csv": states("input_text.evcs_balance_forecast_today"),
"forecast_tomorrow_csv": states("input_text.evcs_balance_forecast_tomorrow"),
"forecast_updated": states("input_text.evcs_balance_forecast_updated"),
"forecast_source": states("input_select.evcs_balance_forecast_source"),
"forecast_day0": states("input_text.evcs_balance_vrm_day0") if is_state("input_select.evcs_balance_forecast_source", "vrm") else states("input_text.evcs_balance_forecast_day0"),
"forecast_today_csv": states("input_text.evcs_balance_vrm_today") if is_state("input_select.evcs_balance_forecast_source", "vrm") else states("input_text.evcs_balance_forecast_today"),
"forecast_tomorrow_csv": states("input_text.evcs_balance_vrm_tomorrow") if is_state("input_select.evcs_balance_forecast_source", "vrm") else states("input_text.evcs_balance_forecast_tomorrow"),
"forecast_updated": states("input_text.evcs_balance_vrm_updated") if is_state("input_select.evcs_balance_forecast_source", "vrm") else states("input_text.evcs_balance_forecast_updated"),
"grid_soc_off": states("input_number.victron_grid_soc_off"),
"manual_hc_floor_percent": states("input_number.evcs_battery_manual_hc_floor"),