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:
52
HANDOFF.md
52
HANDOFF.md
@@ -1283,18 +1283,22 @@ Cible : session réseau unique dimensionnée jusqu'au croisement PV/conso,
|
||||
arbitrée par le conseiller IA. NB : mesurer la vraie capacité PV impose de
|
||||
couper EDF (sinon le MPPT est bridé et on ne voit rien).
|
||||
|
||||
**B — Oscillation charge EVCS en plein soleil** (24/08 ~11:58, PV 7,9 kW).
|
||||
Ce n'est PAS une limite 5 kVA : aucun `ve_bus_overload` depuis le 20/08,
|
||||
**B — Oscillation charge EVCS en plein soleil** (24/08 12:25 → 12:28).
|
||||
Ce n'est PAS une limite 5 kVA (aucun `ve_bus_overload` depuis le 20/08,
|
||||
`ac_loads_max_safe_w` = 9000, AC-out L1 à 5335 W sans overload, plafond calculé
|
||||
~20 A. Causes réelles :
|
||||
1. `battery_discharge_soft_a` = 0 A et `battery_neutral_band_a` = 0 A annulent
|
||||
la tolérance de −12 A de la bande SOC 40-60 % (`profileBatteryDischargeFloorA
|
||||
= max(profil, global)`) → bande morte nulle, toute pointe de conso casse
|
||||
`solarHoldOk` ; avec `min_run_minutes` = 3 → cycle de 3 à 6 min.
|
||||
2. En `outside_window` le plancher de démarrage est `soc_start_min` = 80 % pour
|
||||
un SOC de 49 % : seul l'override d'abondance P6 autorise le départ, et il
|
||||
exige `batteryCurrentA >= +20 A` — que la charge du véhicule fait justement
|
||||
tomber. **L'action détruit sa propre condition d'autorisation.**
|
||||
~20 A) et **pas non plus une bande morte batterie trop étroite** : le courant
|
||||
batterie était à **+127 A** au moment de l'arrêt. Les deux atténuations que
|
||||
j'avais d'abord proposées (`battery_discharge_soft_a` à −12 A,
|
||||
`battery_neutral_band_a` à 3-5 A) n'avaient donc **aucun effet sur ce cas** —
|
||||
l'utilisateur l'a signalé, à raison, avant que je les applique.
|
||||
|
||||
Cause réelle : **inversion du plancher de démarrage et du plancher de maintien**.
|
||||
À 12:24:00 le profil bascule vers `midday_hc_or_solar` ; avec SOC 58 % le
|
||||
plancher de démarrage vaut `min(midday_soc_min 75, abondance P6 40)` = **40**
|
||||
et le plancher de maintien `max(soc_stop_min 29, 75-15)` = **60**. Le système a
|
||||
le droit de DÉMARRER ce qu'il n'a pas le droit de MAINTENIR → cycle limite à la
|
||||
période de `min_run_minutes` (3 min) sur toute la bande [40 %, 60 %], et ~2,6 kW
|
||||
de PV écrêtés à chaque creux (PV 10,24 kW → 7,64 kW quand la borne s'arrête).
|
||||
|
||||
### Décisions de conception validées avec l'utilisateur
|
||||
- La conso se **lit**, elle ne se devine pas ; filtrage numérique dynamique des
|
||||
@@ -1309,4 +1313,28 @@ Ce n'est PAS une limite 5 kVA : aucun `ve_bus_overload` depuis le 20/08,
|
||||
s'auto-limiter à l'aveugle sur un proxy.
|
||||
|
||||
---
|
||||
*Document mis à jour le : 24/08/2026 (~12:20) — Fix G retiré, golden-hysteresis 7/7 (seuils réels 20/30), diagnostic des deux oscillateurs*
|
||||
### Correctif déployé 24/08 12:45 — invariant maintien <= démarrage
|
||||
`src/nodes/BATTERY_CLOUD_LOCKS.js`, deux volets indissociables :
|
||||
1. `effectiveSocHoldFloor = min(règle du profil, plancher de démarrage effectif)`
|
||||
— on ne peut plus être autorisé à démarrer ce qu'on n'est pas autorisé à
|
||||
maintenir. Sans abondance, comportement inchangé.
|
||||
2. L'abondance P6 se PROUVE au démarrage (`solarAbundanceStart` : pvAvg >= 4000
|
||||
ET batterie >= +20 A) mais se MAINTIENT en charge (`solarAbundanceHold` :
|
||||
pvAvg >= 4000 ET batterie >= 0). Sans ce dédoublement, la charge du véhicule
|
||||
détourne le surplus, fait tomber le courant batterie sous +20 A et détruit sa
|
||||
propre condition d'autorisation — l'oscillation reviendrait dès que le PV
|
||||
n'est que moyennement fort.
|
||||
|
||||
Golden 39 → 40 : `midday-inversion-start-hold` (relevé VRM du 24/08 12:25 :
|
||||
PV 10,24 kW, charges 3815 W dont EVCS 3502 W, batterie +127 A, SOC 58 %).
|
||||
Preuve par mutation : code d'avant → `stop` / « Conditions de maintien perdues » ;
|
||||
après → `charging_step_up_battery` à 19 A. Les 39 scénarios existants inchangés.
|
||||
|
||||
**Leçon transverse** : trois oscillateurs identifiés le même jour (Fix G,
|
||||
abondance P6 auto-destructrice, inversion démarrage/maintien) — même pathologie
|
||||
à chaque fois, des seuils empilés par couches successives, chacun raisonnable
|
||||
isolément, dont personne ne vérifie la cohérence d'ensemble. D'où le chantier
|
||||
du bilan énergétique partagé plutôt qu'un garde de plus.
|
||||
|
||||
---
|
||||
*Document mis à jour le : 24/08/2026 (~12:50) — Fix G retiré (golden-hysteresis 7/7, seuils réels 20/30), inversion démarrage/maintien corrigée (golden 40/40), diagnostic des deux oscillateurs*
|
||||
|
||||
Reference in New Issue
Block a user