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 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KKzkkVTG6KXnGXFFC7X9XJ
This commit is contained in:
Tallagrand Thierry
2026-08-24 22:36:57 +02:00
parent a413f48f63
commit 686578ef9d

View File

@@ -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