From 686578ef9df2c529992fc06a6d7cc2cd974e852f Mon Sep 17 00:00:00 2001 From: Tallagrand Thierry Date: Mon, 24 Aug 2026 22:36:57 +0200 Subject: [PATCH] Dashboard : corrige le rendu des tableaux markdown Les cartes markdown utilisaient un bloc YAML replie (content: >), qui remplace les retours a la ligne par des espaces : les tableaux markdown perdaient leur structure et s'affichaient comme une ligne de texte avec des barres verticales. Passage en bloc litteral (content: |) sur les six cartes, et le tableau des profils emet desormais chaque ligne sur la meme ligne que la boucle, sinon Jinja intercale une ligne vide entre chaque rangee et casse le tableau. Ajout d'un repli lisible quand les profils ne sont pas encore publies. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01KKzkkVTG6KXnGXFFC7X9XJ --- dashboards/bilan_energetique.yaml | 29 +++++++++++------------------ 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/dashboards/bilan_energetique.yaml b/dashboards/bilan_energetique.yaml index 4d4e3c3..518dfc5 100644 --- a/dashboards/bilan_energetique.yaml +++ b/dashboards/bilan_energetique.yaml @@ -16,7 +16,7 @@ views: state_not: "ok" card: type: markdown - content: > + content: | ## ⚠️ Bilan indisponible {{ states('input_text.evcs_balance_reason') }} @@ -26,15 +26,11 @@ views: # --- LA comparaison qui décidera du câblage --------------------- - type: markdown title: Seuil calculé contre seuil fixe - content: > + content: | {% set req = states('input_number.evcs_balance_required_soc') | float(0) %} - {% set fixe = states('input_number.victron_grid_soc_off') | float(0) %} - {% set soc = states('sensor.victron_battery_soc') | float(0) %} - {% set ecart = req - fixe %} - | | | |---|---:| | SOC batterie **maintenant** | **{{ soc | round(0) }} %** | @@ -93,7 +89,7 @@ views: state_not: "0.0" card: type: markdown - content: > + content: | ### 🔋 Stockage insuffisant pour cette traversée Il manque **{{ states('input_number.evcs_balance_storage_shortfall_kwh') }} kWh** @@ -106,7 +102,7 @@ views: # --- Ce qu'on jette --------------------------------------------- - type: markdown title: Production - content: > + content: | {% set bride = is_state('input_boolean.evcs_balance_pv_censored', 'on') %} {% if bride %} @@ -157,21 +153,18 @@ views: - type: markdown title: Profil horaire de consommation (kWh/h, hors véhicule) - content: > + content: | {% set p50 = states('input_text.evcs_balance_consumption_p50').split(',') %} - {% set p80 = states('input_text.evcs_balance_consumption_p80').split(',') %} - {% set env = states('input_text.evcs_balance_envelope').split(',') %} - {% set cen = states('input_text.evcs_balance_censorship_rate').split(',') %} - + {% set ok = p50 | length == 24 and p80 | length == 24 and env | length == 24 and cen | length == 24 %} + {% if not ok %}Profils indisponibles — le recalcul quotidien n'a pas encore publié. + {% else %} | h | conso typique | conso prudente | production max | censure | |---:|---:|---:|---:|---:| - - {% for i in range(24) %} - | {{ '%02d' | format(i) }} | {{ p50[i] if p50 | length == 24 else '—' }} | {{ p80[i] if p80 | length == 24 else '—' }} | {{ env[i] if env | length == 24 else '—' }} | {{ (cen[i] | float(1) * 100) | round(0) if cen | length == 24 else '—' }} % | - {% endfor %} + {% for i in range(24) %}| {{ '%02d' | format(i) }} | {{ p50[i] }} | {{ p80[i] }} | {{ env[i] }} | {{ (cen[i] | float(1) * 100) | round(0) }} % | + {% endfor %}{% endif %} *La colonne « censure » indique la part des jours où la batterie était pleine à cette heure : au-delà de 25 %, la production maximale @@ -193,7 +186,7 @@ views: name: Explication - type: markdown - content: > + content: | ### À propos Ce bilan remplace des seuils fixes par des grandeurs mesurées. Il