Files
EVCS/ha-configuration.yaml
Tallagrand Thierry 9fb73415b4 Surveillance du modele local : le brouillon avait un angle mort
Le paquet propose par la session Airtria portait trois entites — interrupteur
d alertes, RAM disponible, libelle d etat. Il lui manquait celle sans laquelle
les trois autres mentent : un horodatage ecrit a chaque passage.

Sans lui, un moniteur mort est indiscernable d un systeme sain. Les trois
entites gardent leur derniere valeur, qui dit « tout va bien », indefiniment.
C est exactement l incident du 08/09 sur la prevision solaire, ou 4 h 45 de
panne n ont laisse aucune trace. Et on ne peut PAS deduire la fraicheur du
last_updated des autres entites : Home Assistant ne rafraichit pas l horodatage
d un helper reecrit a l identique — une RAM stable une heure produirait la meme
illusion.

Ajoutes : l horodatage, le modele charge, un capteur d age, et deux alarmes —
moniteur muet, RAM sous le seuil ou earlyoom tue le plus gourmand.

Defaut trouve et corrige apres creation : l alarme RAM se declenchait avant que
le moniteur ait tourne une seule fois, une valeur jamais ecrite valant zero.
Une mesure qu on n a pas recue n est pas une mesure basse. Elle est desormais
conditionnee a la fraicheur.

Tableau separe des tableaux energie : ce qu il montre n a aucun rapport avec le
photovoltaique.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GwpFpy2aQ2rJok6tNQSbVj
2026-09-14 21:50:07 +02:00

415 lines
15 KiB
YAML
Executable File

# Loads default set of integrations. Do not remove.
default_config:
homeassistant:
packages: !include_dir_named packages
# Retention de l'historique brut (24/08/2026) : 10 jours par defaut -> 90 jours.
# Motif : pouvoir rejouer un incident plusieurs semaines apres coup. Les incidents
# EDF/EVCS de juillet-aout n'ont pas pu etre reconstitues finement faute d'historique.
# NB : les statistiques long terme (sommes horaires, base du bilan energetique) sont
# deja conservees SANS limite et ne dependent pas de ce reglage.
# Dimensionnement : 10 jours ~= 2,6 Go, donc 90 jours ~= 23 Go (volume1 : 5 To libres).
# =====================================================================
# HISTORISATION LONGUE — InfluxDB sur 10.10.10.22 (ajoute le 04/09/2026)
# L'historique brut ci-dessous (recorder) tient ~20 jours pour 5 Go ; les
# statistiques long terme ne gardent que des moyennes horaires. InfluxDB
# garde le detail, sur la duree, hors de cette machine.
# Details et mise en service : deploy/historisation/README.md du depot EVCS.
# =====================================================================
influxdb:
# Pourquoi une liste plutôt que « tout » : la maison publie ~1,14 M états par
# jour, dont l'essentiel n'a aucun rapport avec l'énergie. On garde large sur
# le périmètre énergie — c'est justement là qu'on ne sait pas d'avance ce
# dont on aura besoin, comme l'ont montré les modes MPPT le 03/09 — et on
# laisse le reste de côté.
include:
entity_globs:
- sensor.victron_*
# Les capteurs propres a la borne (13 entites) : compteur cumulatif,
# energie et duree de la derniere session, statut. Absents jusqu'au
# 06/09, ce qui a empeche d'etablir la semantique de
# `last_session_energy` quand elle a fausse une cloture de session.
- sensor.evcs_*
- sensor.mppt_*
- sensor.airtria_*
- sensor.gx_device_*
- sensor.sun_solar_elevation
- binary_sensor.victron_*
- switch.edf_*
- switch.gx_device_*
- number.gx_device_*
- input_boolean.victron_evcs_*
- input_boolean.evcs_*
- input_number.victron_evcs_*
- input_number.evcs_*
- input_select.victron_evcs_*
- input_text.victron_evcs_*
- input_text.evcs_*
exclude:
entities:
# Une clé d'API n'a rien à faire dans une base de séries temporelles.
- input_text.evcs_balance_forecast_api_key
tags:
installation: airtria
recorder:
purge_keep_days: 90
exclude:
entities:
# Clé d'API : aucune raison de l'archiver 90 jours dans la base.
- input_text.evcs_balance_forecast_api_key
# Load frontend themes from the themes folder
frontend:
themes: !include_dir_merge_named themes
automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml
#gestion MQTT
mqtt:
sensor:
- name: "Victron Max Charge Current Setting"
unique_id: victron_max_charge_current_setting
state_topic: "N/c0619ab34ac5/settings/0/Settings/SystemSetup/MaxChargeCurrent"
value_template: "{{ value_json.value if value_json is defined and value_json.value is defined }}"
json_attributes_topic: "N/c0619ab34ac5/settings/0/Settings/SystemSetup/MaxChargeCurrent"
unit_of_measurement: "A"
icon: mdi:current-dc
state_class: measurement
- name: "Victron Max Charge Voltage Setting"
unique_id: victron_max_charge_voltage_setting
state_topic: "N/c0619ab34ac5/settings/0/Settings/SystemSetup/MaxChargeVoltage"
value_template: "{{ value_json.value if value_json is defined and value_json.value is defined }}"
json_attributes_topic: "N/c0619ab34ac5/settings/0/Settings/SystemSetup/MaxChargeVoltage"
unit_of_measurement: "V"
icon: mdi:flash
state_class: measurement
- name: "Victron Battery SoC Live"
unique_id: victron_battery_soc_live
state_topic: "N/c0619ab34ac5/battery/512/Soc"
value_template: "{{ value_json.value | float(0) if value_json is defined and value_json.value is defined }}"
unit_of_measurement: "%"
device_class: battery
state_class: measurement
expire_after: 600
# force_update: true # optionnel (je te conseille de le laisser commenté au début)
- name: "Victron Battery SoC"
unique_id: victron_battery_soc
state_topic: "N/c0619ab34ac5/battery/512/Soc"
unit_of_measurement: "%"
device_class: battery
value_template: "{{ value_json.value | float(0) if value_json is defined and value_json.value is defined }}"
expire_after: 600
force_update: true
state_class: measurement
- name: "Victron Battery Voltage"
unique_id: victron_battery_voltage
state_topic: "N/c0619ab34ac5/battery/512/Dc/0/Voltage"
unit_of_measurement: "V"
device_class: voltage
value_template: "{{ value_json.value | float(0) if value_json is defined and value_json.value is defined }}"
state_class: measurement
- name: "Victron Battery Current"
unique_id: victron_battery_current
state_topic: "N/c0619ab34ac5/battery/512/Dc/0/Current"
unit_of_measurement: "A"
device_class: current
value_template: "{{ value_json.value | float(0) if value_json is defined and value_json.value is defined }}"
state_class: measurement
- name: "Victron Battery Power"
unique_id: victron_battery_power
state_topic: "N/c0619ab34ac5/battery/512/Dc/0/Power"
unit_of_measurement: "W"
device_class: power
value_template: "{{ value_json.value | float(0) if value_json is defined and value_json.value is defined }}"
state_class: measurement
- name: "Victron Battery Temperature"
unique_id: victron_battery_temperature
state_topic: "N/c0619ab34ac5/battery/512/Dc/0/Temperature"
unit_of_measurement: "°C"
device_class: temperature
value_template: "{{ value_json.value | float(0) if value_json is defined and value_json.value is defined }}"
state_class: measurement
- name: "Victron PV Power (system)"
unique_id: victron_pv_power
state_topic: "N/c0619ab34ac5/system/0/Dc/Pv/Power"
unit_of_measurement: "W"
device_class: power
value_template: "{{ value_json.value | float(0) if value_json is defined and value_json.value is defined }}"
state_class: measurement
- name: "Victron VE.Bus DC Power (system)"
unique_id: victron_vebus_dc_power
state_topic: "N/c0619ab34ac5/system/0/Dc/Vebus/Power"
unit_of_measurement: "W"
device_class: power
value_template: "{{ value_json.value | float(0) if value_json is defined and value_json.value is defined }}"
state_class: measurement
- name: "Victron Grid Power L1"
unique_id: victron_grid_power_l1
state_topic: "N/c0619ab34ac5/system/0/Ac/Grid/L1/Power"
unit_of_measurement: "W"
device_class: power
value_template: "{{ value_json.value | float(0) if value_json is defined and value_json.value is defined }}"
state_class: measurement
- name: "Victron Consumption Power L1"
unique_id: victron_consumption_power_l1
state_topic: "N/c0619ab34ac5/system/0/Ac/Consumption/L1/Power"
unit_of_measurement: "W"
device_class: power
value_template: "{{ value_json.value | float(0) if value_json is defined and value_json.value is defined }}"
state_class: measurement
- name: "Victron VE.Bus State (raw)"
unique_id: victron_vebus_state_raw
state_topic: "N/c0619ab34ac5/vebus/276/State"
value_template: "{{ value_json.value | int(0) if value_json is defined and value_json.value is defined }}"
- name: "Victron VE.Bus MainState (raw)"
unique_id: victron_vebus_mainstate_raw
state_topic: "N/c0619ab34ac5/vebus/276/VebusMainState"
value_template: "{{ value_json.value | int(0) if value_json is defined and value_json.value is defined }}"
- name: "Victron VE.Bus ChargeState (raw)"
unique_id: victron_vebus_chargestate_raw
state_topic: "N/c0619ab34ac5/vebus/276/VebusChargeState"
value_template: "{{ value_json.value | int(0) if value_json is defined and value_json.value is defined }}"
- name: "Victron AC-in1 available"
unique_id: victron_acin1_available
state_topic: "N/c0619ab34ac5/vebus/276/Ac/State/AcIn1Available"
value_template: "{{ value_json.value | int(0) if value_json is defined and value_json.value is defined }}"
template:
- sensor:
- name: "Victron mode (derived)"
unique_id: victron_mode_derived
state: >-
{% set acin = states('sensor.victron_ac_in1_available')|int(0) %}
{% set gridw = states('sensor.victron_grid_power_l1')|float(0) %}
{% set batw = states('sensor.victron_battery_power')|float(0) %}
{# Seuils anti-bruit #}
{% set GRID_ON_W = 50 %}
{% set BAT_CHG_W = 150 %}
{% set BAT_DIS_W = -150 %}
{% if acin == 0 %}
{% if batw < BAT_DIS_W %}
Inverting (on battery)
{% else %}
Off-grid (idle/low load)
{% endif %}
{% else %}
{% if batw > BAT_CHG_W %}
Charging (AC-in)
{% elif gridw > GRID_ON_W %}
On grid (passthru/import)
{% else %}
Grid available (low import)
{% endif %}
{% endif %}
- name: Victron EVCS Status FR
unique_id: victron_evcs_status_fr
icon: mdi:ev-station
state: >-
{% set raw = states('sensor.victron_evcs_status_raw') | string %}
{% set vehicle = is_state('binary_sensor.victron_evcs_vehicle_connected', 'on') %}
{% set charging_switch = is_state('switch.victron_evcs_charging', 'on') %}
{% set evcs_power = states('sensor.victron_evcs_ac_power') | float(0) %}
{% if raw == '0' and not vehicle %}
EV déconnecté
{% elif raw == '2' %}
Charge en cours
{% elif raw == '6' and vehicle %}
Véhicule connecté - en attente
{% elif charging_switch or evcs_power > 100 %}
Charge en cours
{% elif raw in ['unknown', 'unavailable', '', 'none'] %}
Inconnu
{% else %}
Inconnu ({{ raw }})
{% endif %}
attributes:
raw_status: "{{ states('sensor.victron_evcs_status_raw') }}"
vehicle_connected: "{{ states('binary_sensor.victron_evcs_vehicle_connected') }}"
charging_switch: "{{ states('switch.victron_evcs_charging') }}"
evcs_power_w: "{{ states('sensor.victron_evcs_ac_power') }}"
- name: Victron EVCS mode FR
unique_id: victron_evcs_mode_fr
icon: mdi:tune
state: >
{% set raw = states('sensor.victron_evcs_mode_raw') | string %}
{% set source = states('sensor.victron_evcs_mode') | string %}
{% set label = source | lower %}
{% if raw == '0' or label in ['manuel', 'manual'] %}
Manuel
{% elif raw == '1' or label in ['auto', 'automatic', 'automatique'] %}
Auto
{% elif raw == '2' or label in ['planifié', 'planifie', 'scheduled', 'schedule'] %}
Planifié
{% elif source not in ['unknown', 'unavailable', '', 'none'] %}
{{ source }}
{% else %}
Inconnu
{% endif %}
attributes:
raw_mode: "{{ states('sensor.victron_evcs_mode_raw') }}"
source_mode: "{{ states('sensor.victron_evcs_mode') }}"
sensor:
- platform: filter
name: "Victron PV Power 10m Avg"
unique_id: victron_pv_power_10m_avg
entity_id: sensor.victron_pv_power_system
filters:
- filter: time_simple_moving_average
window_size: "00:10:00"
precision: 0
lovelace:
dashboards:
modele-local:
mode: yaml
title: Modèle local
icon: mdi:robot-outline
show_in_sidebar: true
filename: dashboards/llm_monitor.yaml
bilan-energetique:
mode: yaml
title: Bilan énergétique
icon: mdi:scale-balance
show_in_sidebar: true
filename: dashboards/bilan_energetique.yaml
victron-master:
mode: yaml
title: Victron Master
icon: mdi:home-battery
show_in_sidebar: true
filename: dashboards/victron_master.yaml
victron-debug:
mode: yaml
title: Victron Debug
icon: mdi:bug
show_in_sidebar: true
require_admin: true
filename: dashboards/victron_debug.yaml
test-cards:
mode: yaml
title: Test Cards
icon: mdi:test-tube
show_in_sidebar: true
require_admin: true
filename: dashboards/test_cards.yaml
victron-mobile:
mode: yaml
title: Victron Mobile
icon: mdi:cellphone
show_in_sidebar: true
filename: dashboards/victron_mobile.yaml
evcs-mobile:
mode: yaml
title: EVCS Mobile
icon: mdi:car-electric
show_in_sidebar: true
filename: dashboards/evcs_mobile.yaml
evcs-master:
mode: yaml
title: EVCS Master
icon: mdi:car-electric
show_in_sidebar: true
filename: dashboards/evcs_master.yaml
ecs-pilotage-premium:
mode: yaml
title: ECS Pilotage Premium
icon: mdi:water-boiler
show_in_sidebar: true
filename: dashboards/ECS_PILOTAGE_PREMIUM.yaml
ecs-debug-reglages-premium:
mode: yaml
title: ECS Debug Réglages Premium
icon: mdi:bug
show_in_sidebar: true
require_admin: true
filename: dashboards/ECS_DEBUG_REGLAGES_PREMIUM.yaml
garage-premium-pilotage:
mode: yaml
title: Garage Premium Pilotage
icon: mdi:garage-variant
show_in_sidebar: true
filename: dashboards/GARAGE_PREMIUM_PILOTAGE.yaml
garage-debug-premium:
mode: yaml
title: Garage Debug Premium
icon: mdi:bug
show_in_sidebar: true
require_admin: true
filename: dashboards/GARAGE_DEBUG_PREMIUM.yaml
garage-mobile:
mode: yaml
title: Garage Mobile
icon: mdi:cellphone
show_in_sidebar: true
filename: dashboards/GARAGE_MOBILE.yaml
sdb-premium-pilotage:
mode: yaml
title: SDB Premium Pilotage
icon: mdi:shower-head
show_in_sidebar: true
filename: dashboards/SDB_PREMIUM_PILOTAGE.yaml
sdb-debug-premium:
mode: yaml
title: SDB Debug Premium
icon: mdi:bug
show_in_sidebar: true
require_admin: true
filename: dashboards/SDB_DEBUG_PREMIUM.yaml
# ===== NOUVELLE ENTITÉ V2.0 (Stratégie EVCS) =====
input_select:
victron_evcs_strategy:
name: Stratégie EVCS Surplus
options:
- auto_solar
- auto_solar_plus
- force_grid_now
- force_charge_now
- stop
initial: "auto_solar_plus"