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:
@@ -16,7 +16,7 @@ views:
|
|||||||
state_not: "ok"
|
state_not: "ok"
|
||||||
card:
|
card:
|
||||||
type: markdown
|
type: markdown
|
||||||
content: >
|
content: |
|
||||||
## ⚠️ Bilan indisponible
|
## ⚠️ Bilan indisponible
|
||||||
|
|
||||||
{{ states('input_text.evcs_balance_reason') }}
|
{{ states('input_text.evcs_balance_reason') }}
|
||||||
@@ -26,15 +26,11 @@ views:
|
|||||||
# --- LA comparaison qui décidera du câblage ---------------------
|
# --- LA comparaison qui décidera du câblage ---------------------
|
||||||
- type: markdown
|
- type: markdown
|
||||||
title: Seuil calculé contre seuil fixe
|
title: Seuil calculé contre seuil fixe
|
||||||
content: >
|
content: |
|
||||||
{% set req = states('input_number.evcs_balance_required_soc') | float(0) %}
|
{% set req = states('input_number.evcs_balance_required_soc') | float(0) %}
|
||||||
|
|
||||||
{% set fixe = states('input_number.victron_grid_soc_off') | float(0) %}
|
{% set fixe = states('input_number.victron_grid_soc_off') | float(0) %}
|
||||||
|
|
||||||
{% set soc = states('sensor.victron_battery_soc') | float(0) %}
|
{% set soc = states('sensor.victron_battery_soc') | float(0) %}
|
||||||
|
|
||||||
{% set ecart = req - fixe %}
|
{% set ecart = req - fixe %}
|
||||||
|
|
||||||
| | |
|
| | |
|
||||||
|---|---:|
|
|---|---:|
|
||||||
| SOC batterie **maintenant** | **{{ soc | round(0) }} %** |
|
| SOC batterie **maintenant** | **{{ soc | round(0) }} %** |
|
||||||
@@ -93,7 +89,7 @@ views:
|
|||||||
state_not: "0.0"
|
state_not: "0.0"
|
||||||
card:
|
card:
|
||||||
type: markdown
|
type: markdown
|
||||||
content: >
|
content: |
|
||||||
### 🔋 Stockage insuffisant pour cette traversée
|
### 🔋 Stockage insuffisant pour cette traversée
|
||||||
|
|
||||||
Il manque **{{ states('input_number.evcs_balance_storage_shortfall_kwh') }} kWh**
|
Il manque **{{ states('input_number.evcs_balance_storage_shortfall_kwh') }} kWh**
|
||||||
@@ -106,7 +102,7 @@ views:
|
|||||||
# --- Ce qu'on jette ---------------------------------------------
|
# --- Ce qu'on jette ---------------------------------------------
|
||||||
- type: markdown
|
- type: markdown
|
||||||
title: Production
|
title: Production
|
||||||
content: >
|
content: |
|
||||||
{% set bride = is_state('input_boolean.evcs_balance_pv_censored', 'on') %}
|
{% set bride = is_state('input_boolean.evcs_balance_pv_censored', 'on') %}
|
||||||
|
|
||||||
{% if bride %}
|
{% if bride %}
|
||||||
@@ -157,21 +153,18 @@ views:
|
|||||||
|
|
||||||
- type: markdown
|
- type: markdown
|
||||||
title: Profil horaire de consommation (kWh/h, hors véhicule)
|
title: Profil horaire de consommation (kWh/h, hors véhicule)
|
||||||
content: >
|
content: |
|
||||||
{% set p50 = states('input_text.evcs_balance_consumption_p50').split(',') %}
|
{% set p50 = states('input_text.evcs_balance_consumption_p50').split(',') %}
|
||||||
|
|
||||||
{% set p80 = states('input_text.evcs_balance_consumption_p80').split(',') %}
|
{% set p80 = states('input_text.evcs_balance_consumption_p80').split(',') %}
|
||||||
|
|
||||||
{% set env = states('input_text.evcs_balance_envelope').split(',') %}
|
{% set env = states('input_text.evcs_balance_envelope').split(',') %}
|
||||||
|
|
||||||
{% set cen = states('input_text.evcs_balance_censorship_rate').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 |
|
| h | conso typique | conso prudente | production max | censure |
|
||||||
|---:|---:|---:|---:|---:|
|
|---:|---:|---:|---:|---:|
|
||||||
|
{% for i in range(24) %}| {{ '%02d' | format(i) }} | {{ p50[i] }} | {{ p80[i] }} | {{ env[i] }} | {{ (cen[i] | float(1) * 100) | round(0) }} % |
|
||||||
{% for i in range(24) %}
|
{% endfor %}{% endif %}
|
||||||
| {{ '%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 %}
|
|
||||||
|
|
||||||
*La colonne « censure » indique la part des jours où la batterie était
|
*La colonne « censure » indique la part des jours où la batterie était
|
||||||
pleine à cette heure : au-delà de 25 %, la production maximale
|
pleine à cette heure : au-delà de 25 %, la production maximale
|
||||||
@@ -193,7 +186,7 @@ views:
|
|||||||
name: Explication
|
name: Explication
|
||||||
|
|
||||||
- type: markdown
|
- type: markdown
|
||||||
content: >
|
content: |
|
||||||
### À propos
|
### À propos
|
||||||
|
|
||||||
Ce bilan remplace des seuils fixes par des grandeurs mesurées. Il
|
Ce bilan remplace des seuils fixes par des grandeurs mesurées. Il
|
||||||
|
|||||||
Reference in New Issue
Block a user