Corrige l'inversion plancher de demarrage / plancher de maintien (EVCS)
Incident du 24/08 12:24-12:28 : bascule de profil vers midday_hc_or_solar avec SOC 58 %. Plancher de demarrage = min(midday_soc_min 75, abondance P6 40) = 40 ; plancher de maintien = max(soc_stop_min 29, 75-15) = 60. Le systeme avait donc le droit de DEMARRER ce qu'il n'avait pas le droit de MAINTENIR : cycle limite a la periode de min_run (3 min) sur toute la bande [40 %, 60 %], et ~2,6 kW de PV ecretes a chaque creux (PV 10,24 kW -> 7,64 kW quand la borne s'arrete, ESS sans injection). Deux volets indissociables dans BATTERY_CLOUD_LOCKS.js : - effectiveSocHoldFloor = min(regle du profil, plancher de demarrage effectif). Sans abondance, comportement inchange. - l'abondance P6 se prouve au demarrage (batterie >= +20 A) mais se maintient en charge (batterie >= 0) : sinon la charge du vehicule, qui detourne precisement le surplus, detruit sa propre condition d'autorisation. Golden 39 -> 40. Preuve par mutation sur midday-inversion-start-hold : code d'avant -> stop / "Conditions de maintien perdues", apres -> step_up 19 A. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KKzkkVTG6KXnGXFFC7X9XJ
This commit is contained in:
@@ -538,29 +538,51 @@ restant un filet de sécurité borné.
|
||||
|
||||
#### B. Oscillation de la charge EVCS en plein soleil
|
||||
|
||||
Observée le 24/08 vers 11:58-12:00 avec PV 7,7-7,9 kW : la borne alterne
|
||||
`Waiting for start` / 0 A et `Charging` / 7 A. **Ce n'est pas une limite
|
||||
5 kVA** — aucun `binary_sensor.victron_ve_bus_overload` depuis le 20/08,
|
||||
`ac_loads_max_safe_w` = 9000 W, AC-out L1 mesuré à 5335 W sans overload (le
|
||||
parallèle maître/esclave tient bien au-delà de 5 kVA), et le plafond calculé
|
||||
par `WINDOWS_SOURCEV2` ressort à ~20 A. Deux causes réelles :
|
||||
Observée le 24/08 entre 12:25 et 12:28 : la borne charge à 18 A / 3502 W avec
|
||||
PV 10,24 kW et batterie à **+127 A**, puis s'arrête (0 A, `Waiting for start`)
|
||||
— et la PV retombe à 7638 W, soit **~2,6 kW écrêtés** faute de preneur (ESS
|
||||
sans injection, batterie déjà à son courant de charge maximal).
|
||||
|
||||
1. **Bande morte nulle.** `battery_discharge_soft_a` = 0 A et
|
||||
`battery_neutral_band_a` = 0 A (réglés à 0 le 17/07/2026). Comme
|
||||
`profileBatteryDischargeFloorA = max(seuil du profil, réglage global)`, la
|
||||
tolérance de −12 A prévue pour la bande SOC 40-60 % est **annulée** : la
|
||||
moindre pointe de conso (ballon, lave-vaisselle) fait passer le courant
|
||||
batterie sous 0 A et casse `solarHoldOk`. Avec `min_run_minutes` = 3, la
|
||||
période du cycle est de 3 à 6 minutes.
|
||||
2. **Condition de démarrage auto-destructrice (P6).** En `outside_window`
|
||||
(11:00-12:24) le plancher de démarrage est `soc_start_min` = 80 % alors que
|
||||
le SOC est à 49 %. Le seul chemin autorisant le départ est l'override
|
||||
d'abondance P6, qui exige `pvPowerAvg10m ≥ 4000 W` **et**
|
||||
`batteryCurrentA ≥ +20 A`. Or brancher la voiture détourne le surplus et
|
||||
fait tomber le courant batterie sous +20 A : l'action détruit sa propre
|
||||
condition d'autorisation. Système bistable → oscillateur.
|
||||
**Ce n'est pas une limite 5 kVA** : aucun `binary_sensor.victron_ve_bus_overload`
|
||||
depuis le 20/08, `ac_loads_max_safe_w` = 9000 W, AC-out L1 mesuré à 5335 W sans
|
||||
overload (le parallèle maître/esclave tient bien au-delà de 5 kVA), plafond
|
||||
calculé par `WINDOWS_SOURCEV2` ~20 A. **Ce n'est pas non plus une bande morte
|
||||
batterie trop étroite** : le courant était à +127 A au moment de l'arrêt, très
|
||||
loin de tout seuil de décharge.
|
||||
|
||||
Direction retenue (même logique qu'en A) : lire la conso au lieu de la
|
||||
**Cause réelle : inversion du plancher de démarrage et du plancher de maintien.**
|
||||
À 12:24:00 le profil bascule `outside_window` → `midday_hc_or_solar`. Dans ce
|
||||
profil, avec SOC 58 % :
|
||||
|
||||
| | Calcul | Valeur |
|
||||
|---|---|---|
|
||||
| Plancher de **démarrage** | `min(midday_soc_min 75, abondance P6 40)` | **40 %** |
|
||||
| Plancher de **maintien** | `max(soc_stop_min 29, midday_soc_min 75 − 15)` | **60 %** |
|
||||
|
||||
`40 ≤ 58 < 60` : le système a le droit de **démarrer** ce qu'il n'a pas le
|
||||
droit de **maintenir**. Cycle limite garanti à la période de `min_run_minutes`
|
||||
(3 min) sur toute la bande [40 %, 60 %], traversée chaque jour vers midi.
|
||||
L'origine est P6, qui abaissait le plancher de démarrage en cas d'abondance
|
||||
sans toucher au plancher de maintien.
|
||||
|
||||
**Correctif déployé le 24/08 12:45** (`BATTERY_CLOUD_LOCKS.js`), deux volets :
|
||||
|
||||
1. **Invariant maintien ≤ démarrage** :
|
||||
`effectiveSocHoldFloor = min(règle du profil, plancher de démarrage effectif)`.
|
||||
Sans abondance, rien ne change (60 reste 60).
|
||||
2. **L'abondance se prouve au démarrage, se maintient en charge.**
|
||||
`solarAbundanceStart` exige toujours `pvAvg ≥ 4000 W` **et**
|
||||
`batteryCurrentA ≥ +20 A` (preuve avant d'agir) ; `solarAbundanceHold`
|
||||
n'exige que `pvAvg ≥ 4000 W` **et** `batteryCurrentA ≥ 0` (la batterie n'est
|
||||
pas devenue fournisseuse). Sans cette distinction, la charge du véhicule —
|
||||
qui détourne précisément le surplus — fait tomber le courant batterie sous
|
||||
+20 A et **détruit sa propre condition d'autorisation** : système bistable.
|
||||
|
||||
Scénario golden `midday-inversion-start-hold` (relevé VRM du 24/08 12:25).
|
||||
Preuve par mutation : sur le code d'avant → `stop` / « Conditions de maintien
|
||||
perdues » ; après → `charging_step_up_battery` à 19 A. Golden 39 → 40.
|
||||
|
||||
Direction de fond (même logique qu'en A) : lire la conso au lieu de la
|
||||
deviner, la filtrer numériquement (les pointes nocturnes sont improbables hors
|
||||
charge EVCS), lisser le SOC pour les décisions de confort en gardant
|
||||
l'instantané pour la sécurité, et exploiter les messages d'état réels du
|
||||
|
||||
Reference in New Issue
Block a user