Cinquante reglages batterie qui disparaissaient au redemarrage

Le proprietaire demande d assouplir la garde de decharge souple en bande 40-60,
de -12 a -15 A de base — 39 a 49 A appliques sur treize modules, soit 3,5 A par
equivalent US2000 et 19 % de ce que le BMS autorise. Son argument : en ete, avec
52 panneaux et une production bridee des midi, garder le parc plein n a aucun
sens, et cette nuit a coute 8 kWh de reseau en touchant a peine la batterie.

Le reglage aurait ete perdu. Les cinquante helpers de la table de politique
batterie portaient un `initial:`, qui DESACTIVE la restauration d etat : chaque
redemarrage de Home Assistant les remet a leur valeur d origine, en silence. Et
un redemarrage etait prevu le soir meme pour le tableau du moniteur LLM.

Meme defaut que les cinq helpers corriges le 06/09 — selecteur de vehicule,
toggles de cablage — mais ici sur une table entiere de REGLAGE, donc sur tout
ajustement futur et pas seulement celui-ci.

Les valeurs par defaut restent dans INPUT_PARSE, qui les applique quand le
helper est absent. Rien n est perdu.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GwpFpy2aQ2rJok6tNQSbVj
This commit is contained in:
Tallagrand Thierry
2026-09-15 04:55:31 +02:00
parent 9fb73415b4
commit 66daac2933
5 changed files with 115 additions and 51 deletions

View File

@@ -1,3 +1,18 @@
# ⚠️ AUCUN `initial:` DANS CE FICHIER, ET C'EST DELIBERE.
#
# Declarer `initial:` DESACTIVE la restauration d'etat : le helper est force a
# cette valeur a CHAQUE demarrage de Home Assistant. Pour une table de REGLAGE,
# c'est un piege — tout ajustement disparait au prochain redemarrage, sans
# message, et on cherche ensuite pourquoi le comportement a change.
#
# Constate le 15/09/2026 : le passage de `batt_discharge_soft_40_60_a` de -12 a
# -15 A, decide pour permettre la charge nuit sur batterie, aurait ete annule
# par le redemarrage prevu le soir meme. Meme defaut que les cinq helpers
# corriges le 06/09 (selecteur de vehicule, toggles de cablage).
#
# Les valeurs par defaut restent dans le CODE (`INPUT_PARSE.js`), qui les
# applique quand le helper est absent ou illisible. Rien n'est perdu.
input_number: input_number:
# ===================================================== # =====================================================
@@ -11,7 +26,6 @@ input_number:
step: 1 step: 1
unit_of_measurement: min unit_of_measurement: min
mode: box mode: box
initial: 10
victron_evcs_solar_potential_grace_minutes: victron_evcs_solar_potential_grace_minutes:
name: EVCS Batt - Grâce solaire potentiel name: EVCS Batt - Grâce solaire potentiel
@@ -20,7 +34,6 @@ input_number:
step: 1 step: 1
unit_of_measurement: min unit_of_measurement: min
mode: box mode: box
initial: 12
victron_evcs_step_up_cooldown_seconds: victron_evcs_step_up_cooldown_seconds:
name: EVCS Batt - Cooldown montée courant name: EVCS Batt - Cooldown montée courant
@@ -29,7 +42,6 @@ input_number:
step: 5 step: 5
unit_of_measurement: s unit_of_measurement: s
mode: box mode: box
initial: 30
victron_evcs_step_down_cooldown_seconds: victron_evcs_step_down_cooldown_seconds:
name: EVCS Batt - Cooldown baisse courant name: EVCS Batt - Cooldown baisse courant
@@ -38,7 +50,6 @@ input_number:
step: 5 step: 5
unit_of_measurement: s unit_of_measurement: s
mode: box mode: box
initial: 60
victron_evcs_force_mode_auto_revert_minutes: victron_evcs_force_mode_auto_revert_minutes:
name: EVCS Batt - Retour auto mode forcé name: EVCS Batt - Retour auto mode forcé
@@ -47,7 +58,6 @@ input_number:
step: 5 step: 5
unit_of_measurement: min unit_of_measurement: min
mode: box mode: box
initial: 120
victron_evcs_overload_step_down_a: victron_evcs_overload_step_down_a:
name: EVCS Batt - Step-down surcharge convertisseur name: EVCS Batt - Step-down surcharge convertisseur
@@ -56,7 +66,6 @@ input_number:
step: 1 step: 1
unit_of_measurement: A unit_of_measurement: A
mode: box mode: box
initial: 2
victron_evcs_overload_hold_seconds: victron_evcs_overload_hold_seconds:
name: EVCS Batt - Maintien avant nouvelle baisse surcharge name: EVCS Batt - Maintien avant nouvelle baisse surcharge
@@ -65,7 +74,6 @@ input_number:
step: 5 step: 5
unit_of_measurement: s unit_of_measurement: s
mode: box mode: box
initial: 30
victron_evcs_overload_stop_after_seconds: victron_evcs_overload_stop_after_seconds:
name: EVCS Batt - Arrêt surcharge persistante name: EVCS Batt - Arrêt surcharge persistante
@@ -74,7 +82,6 @@ input_number:
step: 10 step: 10
unit_of_measurement: s unit_of_measurement: s
mode: box mode: box
initial: 120
# ===================================================== # =====================================================
@@ -88,7 +95,6 @@ input_number:
step: 1 step: 1
unit_of_measurement: A unit_of_measurement: A
mode: box mode: box
initial: -50
victron_evcs_batt_discharge_hard_gt90_a: victron_evcs_batt_discharge_hard_gt90_a:
name: EVCS Batt >90 - Décharge hard name: EVCS Batt >90 - Décharge hard
@@ -97,7 +103,6 @@ input_number:
step: 1 step: 1
unit_of_measurement: A unit_of_measurement: A
mode: box mode: box
initial: -100
victron_evcs_batt_charge_reserve_gt90_a: victron_evcs_batt_charge_reserve_gt90_a:
name: EVCS Batt >90 - Réserve charge batterie name: EVCS Batt >90 - Réserve charge batterie
@@ -106,7 +111,6 @@ input_number:
step: 1 step: 1
unit_of_measurement: A unit_of_measurement: A
mode: box mode: box
initial: 5
victron_evcs_batt_soft_tol_gt90_min: victron_evcs_batt_soft_tol_gt90_min:
name: EVCS Batt >90 - Tolérance soft name: EVCS Batt >90 - Tolérance soft
@@ -115,7 +119,6 @@ input_number:
step: 1 step: 1
unit_of_measurement: min unit_of_measurement: min
mode: box mode: box
initial: 12
victron_evcs_batt_hard_tol_gt90_sec: victron_evcs_batt_hard_tol_gt90_sec:
name: EVCS Batt >90 - Tolérance hard name: EVCS Batt >90 - Tolérance hard
@@ -124,7 +127,6 @@ input_number:
step: 1 step: 1
unit_of_measurement: s unit_of_measurement: s
mode: box mode: box
initial: 20
victron_evcs_batt_recovery_gt90_min: victron_evcs_batt_recovery_gt90_min:
name: EVCS Batt >90 - Récupération name: EVCS Batt >90 - Récupération
@@ -133,7 +135,6 @@ input_number:
step: 1 step: 1
unit_of_measurement: min unit_of_measurement: min
mode: box mode: box
initial: 6
# ===================================================== # =====================================================
@@ -147,7 +148,6 @@ input_number:
step: 1 step: 1
unit_of_measurement: A unit_of_measurement: A
mode: box mode: box
initial: -40
victron_evcs_batt_discharge_hard_80_90_a: victron_evcs_batt_discharge_hard_80_90_a:
name: EVCS Batt 80-90 - Décharge hard name: EVCS Batt 80-90 - Décharge hard
@@ -156,7 +156,6 @@ input_number:
step: 1 step: 1
unit_of_measurement: A unit_of_measurement: A
mode: box mode: box
initial: -80
victron_evcs_batt_charge_reserve_80_90_a: victron_evcs_batt_charge_reserve_80_90_a:
name: EVCS Batt 80-90 - Réserve charge batterie name: EVCS Batt 80-90 - Réserve charge batterie
@@ -165,7 +164,6 @@ input_number:
step: 1 step: 1
unit_of_measurement: A unit_of_measurement: A
mode: box mode: box
initial: 10
victron_evcs_batt_soft_tol_80_90_min: victron_evcs_batt_soft_tol_80_90_min:
name: EVCS Batt 80-90 - Tolérance soft name: EVCS Batt 80-90 - Tolérance soft
@@ -174,7 +172,6 @@ input_number:
step: 1 step: 1
unit_of_measurement: min unit_of_measurement: min
mode: box mode: box
initial: 10
victron_evcs_batt_hard_tol_80_90_sec: victron_evcs_batt_hard_tol_80_90_sec:
name: EVCS Batt 80-90 - Tolérance hard name: EVCS Batt 80-90 - Tolérance hard
@@ -183,7 +180,6 @@ input_number:
step: 1 step: 1
unit_of_measurement: s unit_of_measurement: s
mode: box mode: box
initial: 20
victron_evcs_batt_recovery_80_90_min: victron_evcs_batt_recovery_80_90_min:
name: EVCS Batt 80-90 - Récupération name: EVCS Batt 80-90 - Récupération
@@ -192,7 +188,6 @@ input_number:
step: 1 step: 1
unit_of_measurement: min unit_of_measurement: min
mode: box mode: box
initial: 6
# ===================================================== # =====================================================
@@ -206,7 +201,6 @@ input_number:
step: 1 step: 1
unit_of_measurement: A unit_of_measurement: A
mode: box mode: box
initial: -20
victron_evcs_batt_discharge_hard_60_80_a: victron_evcs_batt_discharge_hard_60_80_a:
name: EVCS Batt 60-80 - Décharge hard name: EVCS Batt 60-80 - Décharge hard
@@ -215,7 +209,6 @@ input_number:
step: 1 step: 1
unit_of_measurement: A unit_of_measurement: A
mode: box mode: box
initial: -50
victron_evcs_batt_charge_reserve_60_80_a: victron_evcs_batt_charge_reserve_60_80_a:
name: EVCS Batt 60-80 - Réserve charge batterie name: EVCS Batt 60-80 - Réserve charge batterie
@@ -224,7 +217,6 @@ input_number:
step: 1 step: 1
unit_of_measurement: A unit_of_measurement: A
mode: box mode: box
initial: 40
victron_evcs_batt_soft_tol_60_80_min: victron_evcs_batt_soft_tol_60_80_min:
name: EVCS Batt 60-80 - Tolérance soft name: EVCS Batt 60-80 - Tolérance soft
@@ -233,7 +225,6 @@ input_number:
step: 1 step: 1
unit_of_measurement: min unit_of_measurement: min
mode: box mode: box
initial: 6
victron_evcs_batt_hard_tol_60_80_sec: victron_evcs_batt_hard_tol_60_80_sec:
name: EVCS Batt 60-80 - Tolérance hard name: EVCS Batt 60-80 - Tolérance hard
@@ -242,7 +233,6 @@ input_number:
step: 1 step: 1
unit_of_measurement: s unit_of_measurement: s
mode: box mode: box
initial: 15
victron_evcs_batt_recovery_60_80_min: victron_evcs_batt_recovery_60_80_min:
name: EVCS Batt 60-80 - Récupération name: EVCS Batt 60-80 - Récupération
@@ -251,7 +241,6 @@ input_number:
step: 1 step: 1
unit_of_measurement: min unit_of_measurement: min
mode: box mode: box
initial: 8
# ===================================================== # =====================================================
@@ -265,7 +254,6 @@ input_number:
step: 1 step: 1
unit_of_measurement: A unit_of_measurement: A
mode: box mode: box
initial: -12
victron_evcs_batt_discharge_hard_40_60_a: victron_evcs_batt_discharge_hard_40_60_a:
name: EVCS Batt 40-60 - Décharge hard name: EVCS Batt 40-60 - Décharge hard
@@ -274,7 +262,6 @@ input_number:
step: 1 step: 1
unit_of_measurement: A unit_of_measurement: A
mode: box mode: box
initial: -30
victron_evcs_batt_charge_reserve_40_60_a: victron_evcs_batt_charge_reserve_40_60_a:
name: EVCS Batt 40-60 - Réserve charge batterie name: EVCS Batt 40-60 - Réserve charge batterie
@@ -283,7 +270,6 @@ input_number:
step: 1 step: 1
unit_of_measurement: A unit_of_measurement: A
mode: box mode: box
initial: 70
victron_evcs_batt_soft_tol_40_60_min: victron_evcs_batt_soft_tol_40_60_min:
name: EVCS Batt 40-60 - Tolérance soft name: EVCS Batt 40-60 - Tolérance soft
@@ -292,7 +278,6 @@ input_number:
step: 1 step: 1
unit_of_measurement: min unit_of_measurement: min
mode: box mode: box
initial: 4
victron_evcs_batt_hard_tol_40_60_sec: victron_evcs_batt_hard_tol_40_60_sec:
name: EVCS Batt 40-60 - Tolérance hard name: EVCS Batt 40-60 - Tolérance hard
@@ -301,7 +286,6 @@ input_number:
step: 1 step: 1
unit_of_measurement: s unit_of_measurement: s
mode: box mode: box
initial: 10
victron_evcs_batt_recovery_40_60_min: victron_evcs_batt_recovery_40_60_min:
name: EVCS Batt 40-60 - Récupération name: EVCS Batt 40-60 - Récupération
@@ -310,7 +294,6 @@ input_number:
step: 1 step: 1
unit_of_measurement: min unit_of_measurement: min
mode: box mode: box
initial: 10
# ===================================================== # =====================================================
@@ -324,7 +307,6 @@ input_number:
step: 1 step: 1
unit_of_measurement: A unit_of_measurement: A
mode: box mode: box
initial: -5
victron_evcs_batt_discharge_hard_25_40_a: victron_evcs_batt_discharge_hard_25_40_a:
name: EVCS Batt 25-40 - Décharge hard name: EVCS Batt 25-40 - Décharge hard
@@ -333,7 +315,6 @@ input_number:
step: 1 step: 1
unit_of_measurement: A unit_of_measurement: A
mode: box mode: box
initial: -15
victron_evcs_batt_charge_reserve_25_40_a: victron_evcs_batt_charge_reserve_25_40_a:
name: EVCS Batt 25-40 - Réserve charge batterie name: EVCS Batt 25-40 - Réserve charge batterie
@@ -342,7 +323,6 @@ input_number:
step: 1 step: 1
unit_of_measurement: A unit_of_measurement: A
mode: box mode: box
initial: 110
victron_evcs_batt_soft_tol_25_40_min: victron_evcs_batt_soft_tol_25_40_min:
name: EVCS Batt 25-40 - Tolérance soft name: EVCS Batt 25-40 - Tolérance soft
@@ -351,7 +331,6 @@ input_number:
step: 1 step: 1
unit_of_measurement: min unit_of_measurement: min
mode: box mode: box
initial: 2
victron_evcs_batt_hard_tol_25_40_sec: victron_evcs_batt_hard_tol_25_40_sec:
name: EVCS Batt 25-40 - Tolérance hard name: EVCS Batt 25-40 - Tolérance hard
@@ -360,7 +339,6 @@ input_number:
step: 1 step: 1
unit_of_measurement: s unit_of_measurement: s
mode: box mode: box
initial: 5
victron_evcs_batt_recovery_25_40_min: victron_evcs_batt_recovery_25_40_min:
name: EVCS Batt 25-40 - Récupération name: EVCS Batt 25-40 - Récupération
@@ -369,7 +347,6 @@ input_number:
step: 1 step: 1
unit_of_measurement: min unit_of_measurement: min
mode: box mode: box
initial: 12
# ===================================================== # =====================================================
@@ -383,7 +360,6 @@ input_number:
step: 1 step: 1
unit_of_measurement: A unit_of_measurement: A
mode: box mode: box
initial: -3
victron_evcs_batt_discharge_hard_lt25_a: victron_evcs_batt_discharge_hard_lt25_a:
name: EVCS Batt <25 - Décharge hard name: EVCS Batt <25 - Décharge hard
@@ -392,7 +368,6 @@ input_number:
step: 1 step: 1
unit_of_measurement: A unit_of_measurement: A
mode: box mode: box
initial: -8
victron_evcs_batt_charge_reserve_lt25_a: victron_evcs_batt_charge_reserve_lt25_a:
name: EVCS Batt <25 - Réserve charge batterie name: EVCS Batt <25 - Réserve charge batterie
@@ -401,7 +376,6 @@ input_number:
step: 1 step: 1
unit_of_measurement: A unit_of_measurement: A
mode: box mode: box
initial: 150
victron_evcs_batt_soft_tol_lt25_min: victron_evcs_batt_soft_tol_lt25_min:
name: EVCS Batt <25 - Tolérance soft name: EVCS Batt <25 - Tolérance soft
@@ -410,7 +384,6 @@ input_number:
step: 1 step: 1
unit_of_measurement: min unit_of_measurement: min
mode: box mode: box
initial: 1
victron_evcs_batt_hard_tol_lt25_sec: victron_evcs_batt_hard_tol_lt25_sec:
name: EVCS Batt <25 - Tolérance hard name: EVCS Batt <25 - Tolérance hard
@@ -419,7 +392,6 @@ input_number:
step: 1 step: 1
unit_of_measurement: s unit_of_measurement: s
mode: box mode: box
initial: 2
victron_evcs_batt_recovery_lt25_min: victron_evcs_batt_recovery_lt25_min:
name: EVCS Batt <25 - Récupération name: EVCS Batt <25 - Récupération
@@ -428,7 +400,6 @@ input_number:
step: 1 step: 1
unit_of_measurement: min unit_of_measurement: min
mode: box mode: box
initial: 15
# ===================================================== # =====================================================
@@ -442,7 +413,6 @@ input_number:
step: 0.1 step: 0.1
unit_of_measurement: V unit_of_measurement: V
mode: box mode: box
initial: 51.3
victron_battery_charge_voltage_hcv_step1_v: victron_battery_charge_voltage_hcv_step1_v:
name: Batt - Tension HCV palier 1 name: Batt - Tension HCV palier 1
@@ -451,7 +421,6 @@ input_number:
step: 0.1 step: 0.1
unit_of_measurement: V unit_of_measurement: V
mode: box mode: box
initial: 51.0
victron_battery_charge_voltage_hcv_step2_v: victron_battery_charge_voltage_hcv_step2_v:
name: Batt - Tension HCV palier 2 name: Batt - Tension HCV palier 2
@@ -460,7 +429,6 @@ input_number:
step: 0.1 step: 0.1
unit_of_measurement: V unit_of_measurement: V
mode: box mode: box
initial: 50.9
victron_battery_charge_voltage_recovery_step_v: victron_battery_charge_voltage_recovery_step_v:
name: Batt - Pas de remontée tension name: Batt - Pas de remontée tension
@@ -469,7 +437,6 @@ input_number:
step: 0.1 step: 0.1
unit_of_measurement: V unit_of_measurement: V
mode: box mode: box
initial: 0.1
victron_battery_hcv_hold_minutes: victron_battery_hcv_hold_minutes:
name: Batt - Maintien réduction HCV name: Batt - Maintien réduction HCV
@@ -478,7 +445,6 @@ input_number:
step: 1 step: 1
unit_of_measurement: min unit_of_measurement: min
mode: box mode: box
initial: 15
input_text: input_text:
@@ -502,5 +468,4 @@ input_text:
name: Victron EVCS Batt - Debut depassement souple name: Victron EVCS Batt - Debut depassement souple
min: 0 min: 0
max: 32 max: 32
initial: ""
icon: mdi:battery-clock-outline icon: mdi:battery-clock-outline

View File

@@ -0,0 +1,35 @@
# Charge nuit du vehicule SUR LA BATTERIE (P12)
#
# Idee du proprietaire, 14/09/2026 au soir : plutot qu'acheter du reseau la nuit
# pour charger la voiture, lui donner le solaire DEJA STOCKE — doucement, a
# courant minimal — et laisser ainsi de la place dans la batterie pour la
# production du lendemain.
#
# Le calcul qui l'a motive, sur la prevision du 15/09 (38,7 kWh, pic a 16 h) :
# VW sur EDF -> batterie 55 % a 9 h -> 10,5 kWh ECRETES
# VW sur batterie -> batterie 38 % a 9 h -> 5,3 kWh ecretes
# + JEEP le matin -> 0,0 kWh ecretes
# Payer du reseau la nuit pour ecreter le solaire le lendemain, c'est perdre
# deux fois.
#
# ⚠️ AUCUN `initial:` — declarer `initial:` DESACTIVE la restauration d'etat.
input_boolean:
victron_evcs_night_battery_charge:
name: "EVCS — charge nuit sur batterie (P12)"
icon: mdi:battery-charging-low
# ⚠️ LE VERROU, ET IL N'EST PAS DECORATIF.
#
# Le plancher est `required_soc_prudent`, qui DESCEND pendant la nuit puisqu'il
# reste moins de nuit a couvrir. Le SOC descend aussi. Mesure du 15/09 :
#
# voiture en charge : SOC -7,1 pt/h, plancher -3,7 pt/h -> surplus s'epuise
# voiture arretee : SOC -2,6 pt/h, plancher -3,7 pt/h -> surplus REAPPARAIT
#
# Sans verrou, la charge repartirait des qu'elle s'arrete : cinquieme
# oscillateur du projet, par construction. Une seule passe de surplus par
# session de nuit.
victron_evcs_night_battery_done:
name: "EVCS — surplus batterie de la nuit épuisé"
icon: mdi:battery-off-outline

View File

@@ -142,6 +142,9 @@
"evcs_night_session_start_soc": states("input_text.victron_evcs_night_session_start_soc"), "evcs_night_session_start_soc": states("input_text.victron_evcs_night_session_start_soc"),
"evcs_night_session_start_at": states("input_text.victron_evcs_night_session_start_at"), "evcs_night_session_start_at": states("input_text.victron_evcs_night_session_start_at"),
"balance_required_soc_prudent": states("input_number.evcs_balance_required_soc_prudent"),
"night_battery_charge_enabled": states("input_boolean.victron_evcs_night_battery_charge"),
"night_battery_done_prev": states("input_boolean.victron_evcs_night_battery_done"),
"balance_required_soc": states("input_number.evcs_balance_required_soc"), "balance_required_soc": states("input_number.evcs_balance_required_soc"),
"balance_energy_to_cover_kwh": states("input_number.evcs_balance_energy_to_cover_kwh"), "balance_energy_to_cover_kwh": states("input_number.evcs_balance_energy_to_cover_kwh"),
"balance_status": states("input_text.evcs_balance_status"), "balance_status": states("input_text.evcs_balance_status"),

View File

@@ -470,6 +470,13 @@ const params = {
// BILAN ENERGETIQUE (03/09/2026). Meme format d'horodatage que l'advisor // BILAN ENERGETIQUE (03/09/2026). Meme format d'horodatage que l'advisor
// ("DD/MM HH:mm"), d'ou la reutilisation du parseur. // ("DD/MM HH:mm"), d'ou la reutilisation du parseur.
balanceRequiredSocPct: num(input.balance_required_soc, NaN), balanceRequiredSocPct: num(input.balance_required_soc, NaN),
// P12 — charge nuit sur batterie. Le plancher est le SOC requis PRUDENT (p80)
// et non le p50 : la marge est mesuree, pas inventee. On descend la voiture
// jusqu'a ce que la batterie n'ait plus que ce qu'il lui faut pour tenir
// jusqu'au croisement PV.
balanceRequiredSocPrudentPct: num(input.balance_required_soc_prudent, NaN),
nightBatteryChargeEnabled: low(input.night_battery_charge_enabled || 'off') === 'on',
nightBatteryDonePrev: low(input.night_battery_done_prev || 'off') === 'on',
balanceEnergyToCoverKwh: num(input.balance_energy_to_cover_kwh, NaN), balanceEnergyToCoverKwh: num(input.balance_energy_to_cover_kwh, NaN),
balanceStatusOk: cleanText(input.balance_status).toLowerCase() === 'ok', balanceStatusOk: cleanText(input.balance_status).toLowerCase() === 'ok',
balanceLastRunMs: parseRunStampToMs(cleanText(input.balance_last_run)), balanceLastRunMs: parseRunStampToMs(cleanText(input.balance_last_run)),

View File

@@ -561,10 +561,61 @@ const nightTakeoverLatched =
parsed.soc < NIGHT_TAKEOVER_RELEASE_SOC_PCT && parsed.soc < NIGHT_TAKEOVER_RELEASE_SOC_PCT &&
!vehicleChargeCompleted; !vehicleChargeCompleted;
// =====================================================
// P12 — CHARGE NUIT SUR LA BATTERIE (15/09/2026)
// =====================================================
// Idee du proprietaire : plutot qu'acheter du reseau la nuit pour charger la
// voiture, lui donner le solaire DEJA STOCKE, doucement, et laisser ainsi de la
// place dans la batterie pour la production du lendemain. Payer du reseau la
// nuit pour ecreter le solaire le lendemain, c'est perdre deux fois.
//
// Le mode `battery_assist_night` existe depuis toujours pour exactement ca, et
// il est MORT depuis toujours : il exige `batteryCurrentA >= plancher de
// decharge` (0 A), impossible la nuit puisque la maison tire sur la batterie
// (§11 du HANDOFF, ~ -14 A). On ne cree donc pas un chemin, on rend viable
// celui qui existe — en remplacant un test de COURANT impossible par un test
// d'ENERGIE : rester au-dessus de ce qu'il faut pour tenir jusqu'au croisement.
//
// Le plancher n'est PAS une constante nouvelle : c'est `required_soc_prudent`,
// que le bilan publie deja, en profil p80. La marge est mesuree, pas inventee.
const nightBatterySurplusFloorPct = Math.max(
batteryHardFloorPct,
Number.isFinite(params.balanceRequiredSocPrudentPct)
? params.balanceRequiredSocPrudentPct
: Infinity,
);
// ⚠️ LE VERROU, ET IL N'EST PAS DECORATIF. Le plancher DESCEND pendant la nuit
// (il reste moins de nuit a couvrir) et le SOC aussi. Mesure du 15/09 :
//
// voiture en charge : SOC -7,1 pt/h, plancher -3,7 pt/h -> le surplus s'epuise
// voiture arretee : SOC -2,6 pt/h, plancher -3,7 pt/h -> le surplus REVIENT
//
// Sans verrou, la charge repartirait des qu'elle s'arrete : cinquieme
// oscillateur du projet, par construction. UNE SEULE PASSE de surplus par
// session de nuit, comme la recovery batterie depuis le 27/08.
const nightBatterySurplusExhausted =
params.nightBatteryDonePrev ||
(nightSessionActive && parsed.soc <= nightBatterySurplusFloorPct);
const nightBatterySurplusAvailable =
nightSessionActive &&
params.nightBatteryChargeEnabled &&
balanceMorningTargetApplied &&
Number.isFinite(params.balanceRequiredSocPrudentPct) &&
!vehicleChargeCompleted &&
!nightBatterySurplusExhausted &&
parsed.soc > nightBatterySurplusFloorPct;
// La batterie d'abord, le reseau quand le surplus est epuise. C'est la soupape
// decrite par le proprietaire — « quitte a fermer EDF entre 6h et 7h24 pour
// completer » — et elle devient automatique : l'epuisement du surplus rend
// `nightGridHcPreferred` vrai, donc P7 prend le relais.
const nightGridHcPreferred = const nightGridHcPreferred =
nightSessionActive && nightSessionActive &&
params.allowGridHcNight && params.allowGridHcNight &&
!vehicleChargeCompleted; !vehicleChargeCompleted &&
!nightBatterySurplusAvailable;
const batteryAssistAllowed = const batteryAssistAllowed =
nightSessionActive && nightSessionActive &&
@@ -1041,6 +1092,9 @@ return [{
batteryMorningTargetPct, batteryMorningTargetPct,
batteryMorningTargetBasePct, batteryMorningTargetBasePct,
balanceMorningTargetApplied, balanceMorningTargetApplied,
nightBatterySurplusFloorPct,
nightBatterySurplusAvailable,
nightBatterySurplusExhausted,
nightGridSessionCommitted, nightGridSessionCommitted,
nightGridSessionUncovered, nightGridSessionUncovered,
balanceTargetAgeMin: balanceTargetAgeMin: