Files
EVCS/dashboards/evcs_master.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

652 lines
28 KiB
YAML
Executable File
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
views:
- title: EVCS Master
path: default_view
icon: mdi:car-electric
cards:
- type: vertical-stack
cards:
- type: custom:mushroom-title-card
title: EVCS Master
subtitle: Vue borne / session / stratégie / énergie
- type: conditional
conditions:
- entity: binary_sensor.victron_evcs_vehicle_connected
state: "off"
card:
type: markdown
content: |
## ℹ️ Véhicule non détecté
- type: conditional
conditions:
- entity: binary_sensor.victron_evcs_vehicle_connected
state: "on"
- entity: switch.victron_evcs_charging
state: "off"
card:
type: markdown
content: |
## ⚠️ Véhicule connecté mais charge inactive
- type: conditional
conditions:
- entity: switch.victron_evcs_charging
state: "on"
card:
type: markdown
content: |
## ✅ Charge EVCS active
- type: custom:layout-card
layout_type: grid
layout:
grid-template-columns: repeat(auto-fit, minmax(380px, 1fr))
grid-gap: 16px
margin: 0
cards:
- type: custom:vertical-stack-in-card
cards:
- type: custom:mushroom-title-card
title: État borne
subtitle: Statut global
- type: custom:mushroom-template-card
entity: sensor.victron_evcs_statut_fr
primary: EVCS
secondary: >
{{ states('sensor.victron_evcs_statut_fr') }}
• Mode {{ states('sensor.victron_evcs_mode_fr') }}
• {{ states('sensor.victron_evcs_current') | float(0) | round(1) }} A
multiline_secondary: true
icon: mdi:ev-station
icon_color: >
{% if is_state('switch.victron_evcs_charging', 'on') %}
green
{% elif is_state('binary_sensor.victron_evcs_vehicle_connected', 'on') %}
blue
{% else %}
grey
{% endif %}
- type: entities
show_header_toggle: false
entities:
- entity: sensor.victron_evcs_statut_fr
name: Statut FR
- entity: sensor.victron_evcs_mode_fr
name: Mode FR
- entity: sensor.victron_evcs_status_raw
name: Statut brut
- entity: sensor.victron_evcs_mode_raw
name: Mode brut
- entity: binary_sensor.victron_evcs_device_connected
name: EVCS détecté
- entity: binary_sensor.victron_evcs_vehicle_connected
name: Véhicule connecté
- entity: sensor.victron_evcs_charging_time
name: Durée charge
- entity: input_boolean.victron_evcs_surplus_auto_enabled
name: Contrôleur surplus actif
- type: custom:vertical-stack-in-card
cards:
- type: custom:mushroom-title-card
title: Session
subtitle: Courant / puissance / énergie
- type: custom:gauge-card-pro
entity: sensor.victron_evcs_current
header: Courant EVCS
min: 0
max: 32
needle: true
segments:
- from: 0
color: "#43a047"
- from: 6
color: "#fdd835"
- from: 16
color: "#fb8c00"
- from: 24
color: "#e53935"
- type: custom:mushroom-template-card
primary: Session en cours
secondary: >
{{ states('sensor.victron_evcs_ac_power') | float(0) | round(0) }} W
• {{ states('sensor.victron_evcs_current') | float(0) | round(1) }} A
• Consigne {{ states('sensor.victron_evcs_set_current') | float(0) | round(1) }} A
• {{ states('sensor.victron_evcs_charging_time') }}
multiline_secondary: true
icon: mdi:flash
icon_color: amber
- type: entities
show_header_toggle: false
entities:
- entity: sensor.victron_evcs_ac_power
name: Puissance EVCS
- entity: sensor.victron_evcs_l1_power
name: Puissance L1
- entity: sensor.victron_evcs_current
name: Courant réel
- entity: sensor.victron_evcs_set_current
name: Consigne lue
- entity: number.victron_evcs_set_current_command
name: Consigne envoyée
- entity: sensor.victron_evcs_charging_time
name: Durée charge
- entity: sensor.victron_evcs_l1_energy_forward
name: Énergie session
- type: custom:vertical-stack-in-card
cards:
- type: custom:mushroom-title-card
title: Stratégie & décision
subtitle: Mode utilisateur / logique n8n
- type: custom:mushroom-template-card
primary: Mode utilisateur
secondary: >
Stratégie : {{ states('input_select.victron_evcs_strategy') }}
• Profil : {{ states('input_text.victron_evcs_operating_mode') }}
• Décision : {{ states('input_text.victron_evcs_surplus_current_decision') }}
• Source : {{ states('input_text.victron_evcs_source_mode') }}
multiline_secondary: true
icon: mdi:strategy
icon_color: >
{% if is_state('input_select.victron_evcs_strategy', 'force_grid_now') %}
red
{% elif is_state('input_select.victron_evcs_strategy', 'force_charge_now') %}
orange
{% elif is_state('input_select.victron_evcs_strategy', 'auto_solar_plus') %}
green
{% elif is_state('input_select.victron_evcs_strategy', 'auto_solar') %}
teal
{% else %}
grey
{% endif %}
# Un contournement manuel doit afficher son echeance, sinon
# « force_grid_now » se lit comme un etat permanent — c'est ce
# qui a laisse tourner une charge reseau au plein tarif le
# 17/09/2026.
- type: conditional
conditions:
- entity: input_select.victron_evcs_strategy
state: force_grid_now
card:
type: custom:mushroom-template-card
primary: Réseau forcé — échéance
secondary: >
{% set s = states.input_select.victron_evcs_strategy %}
{% set d = ((as_timestamp(now()) - as_timestamp(s.last_changed)) / 60) | round(0) %}
{% set p = states('input_number.evcs_force_grid_max_minutes') | float(180) %}
{% if is_state('input_boolean.evcs_expiration_force_grid_enabled', 'on') %}
Actif depuis {{ d }} min. S'arrête à la sortie de la fenêtre
d'heures creuses, ou après {{ p | round(0) }} min.
{% else %}
⚠️ Expiration DÉSACTIVÉE : il ne s'arrêtera pas tout seul.
Actif depuis {{ d }} min.
{% endif %}
multiline_secondary: true
icon: mdi:timer-sand
icon_color: >
{% if is_state('input_boolean.evcs_expiration_force_grid_enabled', 'on') %}orange{% else %}red{% endif %}
- type: custom:mushroom-template-card
primary: Besoin véhicule
secondary: >
Véhicule : {{ states('input_select.victron_evcs_target_vehicle') }}
• {{ states('input_number.victron_evcs_required_energy_kwh') | float(0) | round(1) }} kWh
• Départ : {{ states('input_datetime.victron_evcs_departure_time') }}
multiline_secondary: true
icon: mdi:calendar-clock
icon_color: cyan
- type: entities
title: Paramètres utilisateur
show_header_toggle: false
entities:
- entity: input_select.victron_evcs_vehicle
name: Véhicule branché (VW/JEEP)
- entity: input_number.victron_evcs_required_energy_kwh
name: Énergie demandée
- entity: input_boolean.victron_evcs_departure_priority_enabled
name: Priorité départ
- entity: input_datetime.victron_evcs_departure_time
name: Heure départ VW
- entity: input_datetime.victron_evcs_departure_time_jeep
name: Heure départ JEEP
- entity: input_number.victron_evcs_vehicle_level_pct
name: 🔋 Niveau de la voiture (à saisir au branchement)
- entity: input_datetime.victron_evcs_jeep_midday_departure
name: JEEP repart après midi à
- entity: input_text.victron_evcs_jeep_midday_departure_days
name: Jours où la JEEP repart (lun mar mer jeu ven sam dim)
- entity: input_boolean.evcs_balance_vehicle_grid_needed
name: Réseau justifié pour la voiture à midi (verdict du bilan)
- entity: input_number.evcs_balance_vehicle_need_kwh
name: Besoin voiture avant départ
- entity: input_number.evcs_balance_vehicle_solar_kwh
name: Solaire disponible pour la voiture avant départ
- entity: input_boolean.victron_evcs_allow_grid_departure_urgent
name: ⚡ Réseau avant départ (P9)
- entity: input_select.victron_evcs_strategy
name: Stratégie EVCS
- entity: input_boolean.evcs_expiration_force_grid_enabled
name: └ ⏳ le réseau forcé expire tout seul
- entity: input_number.evcs_force_grid_max_minutes
name: " └ durée maximale"
- entity: input_text.evcs_force_grid_last_expiry
name: " └ dernière expiration"
- entity: input_boolean.victron_evcs_allow_grid_hc_night
name: Réseau HC nuit
- entity: input_boolean.victron_evcs_night_battery_charge
name: 🔋 Charge nuit sur batterie (P12)
- entity: input_boolean.victron_evcs_night_battery_done
name: └ surplus de la nuit épuisé
- entity: input_boolean.victron_evcs_allow_grid_hc_midday
name: Réseau HC midi
- entity: input_boolean.victron_evcs_surplus_auto_enabled
name: Contrôleur surplus actif
- type: entities
title: Décision contrôleur
show_header_toggle: false
entities:
- entity: input_text.victron_evcs_operating_mode
name: Profil actif
- entity: input_text.victron_evcs_surplus_state
name: État interne
- entity: input_text.victron_evcs_surplus_current_decision
name: Décision logique
- entity: input_text.victron_evcs_source_mode
name: Source autorisée
- entity: input_text.victron_evcs_surplus_reason
name: Raison courte
- entity: input_text.victron_evcs_last_block_reason
name: Dernier blocage
- entity: input_datetime.victron_evcs_blocked_until
name: Bloqué jusqu'à
- type: custom:vertical-stack-in-card
cards:
- type: custom:mushroom-title-card
title: Contexte énergie
subtitle: Batterie / PV / maison / réseau
- type: custom:mushroom-template-card
primary: Contexte instantané
secondary: >
SOC {{ states('sensor.victron_battery_soc') | float(0) | round(1) }} %
• PV {{ states('sensor.victron_pv_power_system') | float(0) | round(0) }} W
• Maison {{ states('sensor.victron_consumption_power_l1') | float(0) | round(0) }} W
• Grid {{ states('sensor.victron_grid_power_l1') | float(0) | round(0) }} W
multiline_secondary: true
icon: mdi:home-lightning-bolt
icon_color: >
{% set pv = states('sensor.victron_pv_power_system') | float(0) %}
{% if pv < 300 %} grey
{% elif pv < 1500 %} yellow
{% else %} green
{% endif %}
- type: entities
show_header_toggle: false
entities:
- entity: sensor.victron_battery_soc
name: SOC batterie
- entity: sensor.victron_battery_current
name: Courant batterie
- entity: sensor.victron_pv_power_system
name: Puissance PV
- entity: sensor.victron_consumption_power_l1
name: Charges maison
- entity: sensor.victron_grid_power_l1
name: Puissance réseau
- entity: switch.edf_general_ok_switch
name: Réseau EDF
- type: custom:vertical-stack-in-card
cards:
- type: custom:mushroom-title-card
title: Actions rapides
subtitle: Contrôle direct EVCS
- type: grid
columns: 2
square: false
cards:
- type: custom:button-card
entity: switch.victron_evcs_charging
name: Charge
icon: mdi:ev-station
show_state: true
state_display: >
[[[
if (!entity) return 'Inconnu';
if (entity.state === 'on') return 'ON';
if (entity.state === 'off') return 'OFF';
return entity.state;
]]]
tap_action:
action: toggle
hold_action:
action: more-info
styles:
card:
- border-radius: 18px
- padding: 12px
name:
- font-size: 15px
- font-weight: 600
state:
- font-size: 12px
state:
- value: "on"
color: "#43a047"
- value: "off"
color: "#757575"
- type: custom:button-card
entity: input_boolean.victron_evcs_surplus_auto_enabled
name: Contrôleur surplus
icon: mdi:robot
show_state: true
tap_action:
action: toggle
hold_action:
action: more-info
styles:
card:
- border-radius: 18px
- padding: 12px
name:
- font-size: 15px
- font-weight: 600
state:
- font-size: 12px
state:
- value: "on"
color: "#26a69a"
- value: "off"
color: "#757575"
- type: custom:button-card
entity: binary_sensor.victron_evcs_vehicle_connected
name: Véhicule
icon: mdi:car-electric
show_state: true
tap_action:
action: more-info
styles:
card:
- border-radius: 18px
- padding: 12px
name:
- font-size: 15px
- font-weight: 600
state:
- font-size: 12px
state:
- value: "on"
color: "#1e88e5"
- value: "off"
color: "#757575"
- type: custom:button-card
entity: number.victron_evcs_set_current_command
name: Courant demandé
icon: mdi:current-ac
show_state: true
tap_action:
action: more-info
hold_action:
action: more-info
styles:
card:
- border-radius: 18px
- padding: 12px
name:
- font-size: 15px
- font-weight: 600
state:
- font-size: 12px
- type: entities
title: Commandes manuelles
show_header_toggle: false
entities:
- entity: switch.victron_evcs_charging
name: Start / Stop charge
- entity: number.victron_evcs_set_current_command
name: Courant demandé
- entity: input_boolean.victron_evcs_charge_permission_now
name: Permission charge
- entity: input_boolean.victron_evcs_control_latch
name: Latch contrôle
- entity: switch.victron_evcs_auto_start
name: Auto Start borne (diagnostic)
- type: horizontal-stack
cards:
- type: button
entity: script.evcs_boost_edf
name: ⚡ BOOST EDF 28A
icon: mdi:flash
icon_height: 60px
tap_action:
action: call-service
service: script.turn_on
target:
entity_id: script.evcs_boost_edf
- type: button
entity: script.evcs_boost_off
name: Retour normal
icon: mdi:flash-off
icon_height: 60px
tap_action:
action: call-service
service: script.turn_on
target:
entity_id: script.evcs_boost_off
- type: entities
title: Plafonds courant EVCS
show_header_toggle: false
entities:
- entity: input_number.evcs_plafond_courant_edf_on
name: Plafond EDF ON (tous modes)
- entity: input_number.victron_evcs_current_max_auto_a
name: Plafond modes auto
- type: custom:vertical-stack-in-card
cards:
- type: custom:mushroom-title-card
title: Diagnostic
subtitle: Identité / version / brut
- type: entities
show_header_toggle: false
entities:
- entity: sensor.victron_evcs_product_name
name: Produit
- entity: sensor.victron_evcs_custom_name
name: Nom borne
- entity: sensor.victron_evcs_serial
name: Numéro de série
- entity: sensor.victron_evcs_firmware_version
name: Firmware
- entity: sensor.victron_evcs_connected_raw
name: Connected brut
- entity: sensor.victron_evcs_status_raw
name: Statut brut
- entity: sensor.victron_evcs_mode_raw
name: Mode brut
- entity: switch.victron_evcs_auto_start
name: Auto Start borne
- entity: input_datetime.victron_evcs_last_start_at
name: Dernier start
- entity: input_datetime.victron_evcs_last_stop_at
name: Dernier stop
- entity: input_datetime.victron_evcs_last_current_change_at
name: Dernier changement courant
- entity: input_datetime.victron_evcs_probe_started_at
name: Début probe
- entity: input_datetime.victron_evcs_cloud_debt_started_at
name: Début cloud debt
- entity: input_number.victron_evcs_cloud_debt_kwh
name: Cloud debt
- entity: input_text.victron_evcs_control_last_signature
name: Signature
- type: custom:vertical-stack-in-card
cards:
- type: custom:mushroom-title-card
title: Historique EVCS
subtitle: 12 dernières heures
- type: custom:apexcharts-card
graph_span: 12h
header:
show: true
title: Session EVCS
show_states: false
series:
- entity: sensor.victron_evcs_current
name: Courant EVCS
color: "#42a5f5"
- entity: sensor.victron_evcs_set_current
name: Consigne lue
color: "#ffca28"
- entity: sensor.victron_evcs_ac_power
name: Puissance EVCS
color: "#66bb6a"
- entity: sensor.victron_pv_power_system
name: PV
color: "#fdd835"
- entity: sensor.victron_grid_power_l1
name: Réseau
color: "#ef5350"
- type: vertical-stack
cards:
- type: custom:mushroom-title-card
title: 🤖 Conseiller IA (observateur)
subtitle: Il regarde et signale — il ne décide rien
- type: entities
title: Dernière observation
entities:
- entity: input_text.evcs_advisor_gravite
name: Gravité
icon: mdi:alert-circle-outline
- entity: input_text.evcs_advisor_constat
name: Ce qu'il voit
icon: mdi:eye-outline
- entity: input_text.evcs_advisor_ce_qui_cloche
name: Ce qui cloche
icon: mdi:help-rhombus-outline
- entity: input_text.evcs_advisor_reason
name: Piste (et sa confiance)
icon: mdi:magnify
- type: divider
- entity: input_text.evcs_advisor_status
name: Statut
- entity: input_text.evcs_advisor_model
name: Modèle LLM
- entity: input_text.evcs_advisor_last_run
name: Dernière analyse
- entity: input_number.evcs_advisor_agree_count
name: Cycles calmes
- entity: input_number.evcs_advisor_diverge_count
name: Signalements
- type: divider
- entity: input_boolean.evcs_advisor_enabled
name: Conseiller actif (kill-switch)
- type: vertical-stack
cards:
- type: custom:mushroom-title-card
title: 🔌 Agents & surveillance
subtitle: Ce qui tourne tout seul, et de quoi le couper
- type: entities
title: Concierge véhicule (WhatsApp)
entities:
# ⚠️ Ce kill-switch existait depuis le 13/09 et n'était affiché
# sur AUCUN tableau de bord : il fallait passer par les outils de
# développement pour l'atteindre. Un interrupteur d'urgence hors
# de portée n'est pas un interrupteur d'urgence.
- entity: input_boolean.airtria_concierge_enabled
name: Appliquer les étiquettes de véhicule
icon: mdi:car-info
- entity: input_text.airtria_vehicle_label
name: Dernière réponse reçue
icon: mdi:label-outline
- type: divider
- entity: input_select.victron_evcs_vehicle
name: Véhicule branché (piloté par la réponse)
icon: mdi:car-multiple
- type: entities
title: Guichet d'ordres (pilotage)
entities:
# ⚠️ Interrupteur DISTINCT de celui du concierge, et c'est
# delibere : couper le pilotage ne doit pas couper l'etiquetage
# des vehicules. Deux rayons d'action tres differents.
# La liste blanche de ce qui est demandable vit dans le service
# d'historisation, jamais chez l'agent — il demande, il ne decide
# pas de ce qui est demandable.
- entity: input_boolean.airtria_ordres_enabled
name: Appliquer les ordres de pilotage
icon: mdi:remote
- entity: input_text.airtria_ordre
name: Dernier ordre demande
icon: mdi:gesture-tap-button
- type: entities
title: Service d'historisation (10.10.10.22)
entities:
# Le battement de cœur est la SEULE entité du système dont
# l'immobilité soit interprétable : son état est un horodatage,
# il change donc forcément à chaque écriture. La fraîcheur d'une
# entité métier ne dit rien — Home Assistant ne matérialise pas
# une écriture identique, et `last_reported` vaut `last_changed`.
- entity: binary_sensor.historisation_evcs_muette
name: État du service
icon: mdi:heart-pulse
- entity: sensor.historisation_evcs_age_du_battement
name: Âge du dernier battement
icon: mdi:timer-outline
- type: attribute
entity: binary_sensor.historisation_evcs_muette
attribute: cause
name: Cause du dernier échec
icon: mdi:alert-outline
# ----------------------------------------------------------------
# Interventions borne & alertes (19/09/2026)
# Le swap de vehicule trop rapide (14 s) fige la borne et bloque le
# nouveau vehicule. P11-bis (last_changed) le corrige tout seul ; ce
# bouton reste le filet MANUEL si la borne se coince malgre tout.
# L'alerte "branchee mais ne charge pas" est OPT-IN, seuils a calibrer.
# ----------------------------------------------------------------
- type: entities
title: Interventions borne & alertes
entities:
- entity: input_boolean.evcs_reset_borne
name: Reset borne (forcer un retest)
icon: mdi:restart-alert
- type: divider
- entity: input_boolean.evcs_alerte_charge_enabled
name: Envoyer les alertes WhatsApp
icon: mdi:bell-alert
- entity: input_text.evcs_alerte_charge
name: Alerte en cours (vide = rien)
icon: mdi:ev-station
secondary_info: last-changed