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

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

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"
}
]
}
]
}
]
}
]
}