feat: session 09/07 — P1-P5 déployés (hystérésis robuste, anti-créneaux nuit, provocation PV, maintien SOC takeover, plafond EDF ON) + backups n8n/lovelace + HANDOFF à jour

This commit is contained in:
Tallagrand Thierry
2026-07-09 23:56:13 +02:00
parent 59f6ae7e9e
commit 9be0f61806
11 changed files with 925 additions and 178 deletions

View File

@@ -0,0 +1,696 @@
{
"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é\n"
}
},
{
"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\n"
}
},
{
"type": "conditional",
"conditions": [
{
"entity": "switch.victron_evcs_charging",
"state": "on"
}
],
"card": {
"type": "markdown",
"content": "## ✅ Charge EVCS active\n"
}
}
]
},
{
"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\n",
"multiline_secondary": true,
"icon": "mdi:ev-station",
"icon_color": "{% if is_state('switch.victron_evcs_charging', 'on') %}\n green\n{% elif is_state('binary_sensor.victron_evcs_vehicle_connected', 'on') %}\n blue\n{% else %}\n grey\n{% endif %}\n"
},
{
"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') }}\n",
"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') }}\n",
"multiline_secondary": true,
"icon": "mdi:strategy",
"icon_color": "{% if is_state('input_select.victron_evcs_strategy', 'force_grid_now') %}\n red\n{% elif is_state('input_select.victron_evcs_strategy', 'force_charge_now') %}\n orange\n{% elif is_state('input_select.victron_evcs_strategy', 'auto_solar_plus') %}\n green\n{% elif is_state('input_select.victron_evcs_strategy', 'auto_solar') %}\n teal\n{% else %}\n grey\n{% endif %}\n"
},
{
"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') }}\n",
"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_target_vehicle",
"name": "Véhicule cible"
},
{
"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"
},
{
"entity": "input_select.victron_evcs_strategy",
"name": "Stratégie EVCS"
},
{
"entity": "input_boolean.victron_evcs_allow_grid_hc_night",
"name": "Réseau HC nuit"
},
{
"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\n",
"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 %}\n"
},
{
"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": "[[[\n if (!entity) return 'Inconnu';\n if (entity.state === 'on') return 'ON';\n if (entity.state === 'off') return 'OFF';\n return entity.state;\n]]]\n",
"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": "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"
}
]
}
]
}
]
}
]
}