Le parc butait sur NOTRE plafond, pas sur le sien

Mesure du 13/09, 10:39 a 12:50 : la DVCC etait a 130 A et la batterie
prenait 114 a 127 A, soit 88 a 98 % du plafond, avec une tension plate a
50,6 V — a 0,5 V sous notre propre consigne. C'est le point decisif : il n'y
avait aucune phase d'absorption, le courant ne retombait pas de lui-meme,
il butait. Pendant ce temps six chargeurs sur sept se declaraient
`voltage_current_limited`, et sans injection cette ressource est perdue.

Le BMS, lui, declare autoriser 250 A et 53,2 V, ses 135 cellules tiennent
dans 2 mV et aucun module ne bloque la charge. Le 130 A venait de l'ANCIEN
parc, dont une cellule montait a 3 649 mV et faisait effondrer le courant de
tous. Ces modules sont sortis le 12/09.

- `pv_boost` 130 -> 150 A : un palier, pas une cible. 150 A reste a 60 % de
  ce que le BMS declare ; on regarde ce que ca libere et l'ecart entre
  cellules avant d'aller plus loin.
- `pv_mid` 51,2 -> 51,5 V : la colonne des tensions REDESCENDAIT entre 80 et
  90 % avant de remonter, reste du 06/09 ou seul pv_topoff avait ete releve.

pv_topoff et pv_hold ne sont pas touches. L'effet du 150 A ne se verra que
sous 80 % de SOC, donc a la charge du matin.

Golden ACM : les trois scenarios qui epinglaient ces valeurs sont tombes,
attendus mis a jour dans le meme commit, 20/20. Verifie en reel : consigne
appliquee, aucune alarme, cellules toujours a 2 mV.

Corrige au passage : l'ACM tourne toutes les 5 MINUTES, pas 30 s comme
l'annoncaient le manuel et MEMORY.md.

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-13 13:22:30 +02:00
parent 7e458c9c99
commit df8a0e03c2
5 changed files with 160 additions and 7 deletions

View File

@@ -6005,3 +6005,76 @@ ceux que l observateur ecrit**. Les compteurs ont survecu au rechargement
--- ---
*Document mis a jour le : 13/09/2026 — campagne conseiller : quatre defauts du prompt corriges, incidents 39/40, table `observation`* *Document mis a jour le : 13/09/2026 — campagne conseiller : quatre defauts du prompt corriges, incidents 39/40, table `observation`*
## 64. Session du 13/09/2026 — Le parc butait sur NOTRE plafond, pas sur le sien
### La question du proprietaire
Le conseiller affichait « ressource refusee » avec 6 chargeurs sur 7 brides, et
il a demande si c'etait une config restant a finir ou un choix delibere de
charger plus lentement. La reponse se mesure.
### La mesure (13/09, 10:39 -> 12:50)
| | |
|---|---:|
| DVCC appliquee par l'ACM | **130 A** (profil `pv_boost`, SOC < 80) |
| courant reellement pris par le parc | **114 a 127 A**, soit 88 a 98 % du plafond |
| tension du parc | **50,6-50,7 V**, plate |
| notre consigne de tension | 51,2 V (`pv_mid`) |
| ce que le BMS declare autoriser | **250 A** et **53,2 V** |
| ecart entre les 135 cellules | **2 mV** (3,327 a 3,329 V) |
| modules bloquant la charge / alarmes | **0** / aucune |
La tension plate a 0,5 V sous notre propre consigne est le point decisif :
**il n'y avait aucune phase d'absorption**. Le courant ne retombait pas de
lui-meme comme le ferait un LiFePO4 en fin de charge — il butait sur le
plafond. Ce n'etait donc ni le materiel, ni le BMS, ni un choix de charge
lente : c'etait la table, calibree pour l'ANCIEN parc dont une cellule montait
a 3 649 mV et faisait effondrer le courant de tous (§48-§53). Ces modules sont
sortis le 12/09.
### Defaut visible dans la table : la colonne des tensions n'etait pas monotone
`51,5 → 51,2 → 52,4 → 50,6`. Elle REDESCENDAIT entre 80 et 90 % avant de
remonter — reste du 06/09, ou seul `pv_topoff` avait ete releve parce que
c'etait lui qui plafonnait le parc a 93 %.
### Deux changements (patch `tools/patch-20260913-plafond-150a-et-pvmid-51v5.mjs`)
- `pv_boost` : **130 → 150 A**. Un palier, pas une cible : 150 A reste a 60 %
de ce que le BMS declare. On regarde ce qu'il libere et l'ecart entre
cellules avant d'aller plus loin.
- `pv_mid` : **51,2 → 51,5 V**, ce qui rend la colonne monotone.
NON touches : `pv_mid.current_a` (110 A), `pv_topoff` (regle le 06/09 sur
mesure), `pv_hold` (30 A / 50,6 V — delibere : on atteint le haut, on n'y
sejourne pas).
⚠️ **L'effet du 150 A ne se verra que sous 80 % de SOC**, donc a la charge du
MATIN : au-dessus, c'est `pv_mid` et son plafond de 110 A qui s'applique.
### Golden ACM 20/20 apres mise a jour de 3 attendus
La suite a fait son travail : `acm-jour-boost`, `acm-jour-mid` et
`acm-override-expire-sans-effet` sont tombes exactement sur les valeurs
changees. Attendus mis a jour dans le meme commit, mesure en commentaire.
### Verification en reel (13:15-13:21, apres le PUT de 13:11)
Consigne 51,5 V appliquee, `tension_de_cellule_elevee` = `no_alarm`, cellules
toujours dans 2 mV, courant 54-72 A (bien sous les 110 A de `pv_mid`).
**Plus aucun chargeur ne se retenait (0/7 contre 6/7 une heure plus tot)** et la
production a touche **10 116 W**, le plus haut releve de la journee.
⚠️ A NE PAS SUR-INTERPRETER : la charge de la maison est passee de 3,9 a 5,9 kW
dans le meme intervalle, donc le 0/7 ne s'attribue pas proprement a la tension.
Le vrai test du 150 A est la matinee suivante, sous 80 % de SOC.
### Correction de documentation trouvee en route
**L'ACM tourne toutes les 5 MINUTES**, pas toutes les 30 s comme l'annoncaient
le manuel et MEMORY.md (executions verifiees : 11:00, 11:05, 11:10 UTC). C'est
pourquoi une consigne poussee a 11:11 ne s'applique qu'a 11:15.
### A surveiller demain matin
1. Sous 80 % de SOC, DVCC a **150 A** et courant reellement pris — s'approche-t-il
du nouveau plafond, ou plafonne-t-il ailleurs ?
2. `tension_minimale/maximale_de_la_cellule` : l'ecart doit rester de quelques
millivolts. S'il s'ouvre, on s'arrete a ce palier.
3. Nombre de chargeurs `voltage_current_limited` a charge maison comparable.
---
*Document mis a jour le : 13/09/2026 — plafond de charge 130 → 150 A, pv_mid 51,2 → 51,5 V, golden-acm 20/20*

View File

@@ -331,7 +331,7 @@ production.
|---|---|---|---| |---|---|---|---|
| `ATswvGfG4KJUls0K` | HA Snapshot EVCS Surplus Controller V2.6 | 30s | Pilotage borne EVCS, décision charge solaire/réseau | | `ATswvGfG4KJUls0K` | HA Snapshot EVCS Surplus Controller V2.6 | 30s | Pilotage borne EVCS, décision charge solaire/réseau |
| `7iIlu7LLTW7TZA8o` | Victron - Battery / Grid Hysteresis Fix V1 | 1 min | Hystérésis réseau EDF (ON ≤20%, OFF ≥30%) | | `7iIlu7LLTW7TZA8o` | Victron - Battery / Grid Hysteresis Fix V1 | 1 min | Hystérésis réseau EDF (ON ≤20%, OFF ≥30%) |
| `cTeeHy4ePiVeELLh` | Victron - Auto Charge Manager V1.2 | 30s | Limites DVCC batterie (MaxChargeCurrent/Voltage) | | `cTeeHy4ePiVeELLh` | Victron - Auto Charge Manager V1.2 | **5 min** | Limites DVCC batterie (MaxChargeCurrent/Voltage) |
### 2.2 Gestion Charges ### 2.2 Gestion Charges

View File

@@ -139,18 +139,25 @@ export const scenarios = [
// ------------------------------------------------------------ jour // ------------------------------------------------------------ jour
{ {
// 13/09/2026 — 130 -> 150 A. Mesure de 10:39 a 12:50 : la DVCC etait a
// 130 A et la batterie prenait 114 a 127 A, soit 88 a 98 % du plafond,
// avec une tension plate a 50,6 V (donc aucune absorption : le courant ne
// retombait pas de lui-meme, il butait). Le BMS declare 250 A et 53,2 V,
// les 135 cellules tiennent dans 2 mV, aucun module ne bloque la charge.
// Le 130 A venait de l'ANCIEN parc, sorti le 12/09. 150 A est un palier,
// pas une cible : on regarde ce qu'il libere avant d'aller plus loin.
id: 'acm-jour-boost', id: 'acm-jour-boost',
label: 'Jour, SOC 60 sous 80 : capture PV maximale, 130 A a 51,5 V', label: 'Jour, SOC 60 sous 80 : capture PV maximale, 150 A a 51,5 V (releve du 13/09 : la batterie butait sur 130)',
time: h(ETE, '11:00'), time: h(ETE, '11:00'),
overrides: { ...parcNeuf, soc_percent: '60', pv_power_w: '4000' }, overrides: { ...parcNeuf, soc_percent: '60', pv_power_w: '4000' },
expect: { mode: 'day_pv_boost', profil: 'pv_boost', courantA: 130, tensionV: 51.5 }, expect: { mode: 'day_pv_boost', profil: 'pv_boost', courantA: 150, tensionV: 51.5 },
}, },
{ {
id: 'acm-jour-mid', id: 'acm-jour-mid',
label: 'Jour, SOC 85 entre 80 et 90 : 110 A a 51,2 V', label: 'Jour, SOC 85 entre 80 et 90 : 110 A a 51,5 V (la colonne des tensions redescendait entre 80 et 90)',
time: h(ETE, '11:00'), time: h(ETE, '11:00'),
overrides: { ...parcNeuf, soc_percent: '85', pv_power_w: '4000', battery_voltage_v: '50.5' }, overrides: { ...parcNeuf, soc_percent: '85', pv_power_w: '4000', battery_voltage_v: '50.5' },
expect: { mode: 'day_pv_mid', profil: 'pv_mid', courantA: 110, tensionV: 51.2 }, expect: { mode: 'day_pv_mid', profil: 'pv_mid', courantA: 110, tensionV: 51.5 },
}, },
{ {
id: 'acm-jour-topoff-52v4', id: 'acm-jour-topoff-52v4',
@@ -191,7 +198,7 @@ export const scenarios = [
overrides: { ...parcNeuf, soc_percent: '60', override_enabled: 'on', overrides: { ...parcNeuf, soc_percent: '60', override_enabled: 'on',
override_profile: 'manual', override_current_a: '12', override_voltage_v: '50.0', override_profile: 'manual', override_current_a: '12', override_voltage_v: '50.0',
override_until: '2026-07-15 09:00:00' }, override_until: '2026-07-15 09:00:00' },
expect: { overrideActif: false, mode: 'day_pv_boost', courantA: 130 }, expect: { overrideActif: false, mode: 'day_pv_boost', courantA: 150 },
}, },
// ------------------------------------------------------------ publication // ------------------------------------------------------------ publication

View File

@@ -0,0 +1,73 @@
#!/usr/bin/env node
// Le parc butait sur NOTRE plafond, pas sur le sien.
//
// Mesure du 13/09, de 10:39 a 12:50 :
// DVCC appliquee par l'ACM : 130 A (profil pv_boost, SOC < 80)
// courant reellement pris : 114 a 127 A, soit 88 a 98 % du plafond
// tension du parc : 50,6-50,7 V, plate, a 0,5 V sous notre
// propre consigne — donc AUCUNE phase
// d'absorption : le courant ne retombait
// pas de lui-meme, il butait.
// ce que le BMS declare autoriser : 250 A de charge, 53,2 V
// ecart entre les 135 cellules : 2 mV (3,327 a 3,329 V)
// modules bloquant la charge : 0, aucune alarme
// Pendant ce temps six chargeurs sur sept se declaraient
// `voltage_current_limited` : la ressource etait refusee faute de preneur, et
// sans injection elle est simplement perdue.
//
// Origine du 130 A : la table a ete calibree pour l'ANCIEN parc, dont une
// cellule montait a 3 649 mV et faisait effondrer le courant de tout le monde
// (HANDOFF §48-§53). Ces modules sont sortis le 12/09. Le parc actuel — quatre
// US5000 et cinq US2000C — tient ses cellules dans 2 mV.
//
// DEUX CHANGEMENTS, ET DEUX SEULEMENT :
//
// 1. `pv_boost` : 130 -> 150 A. C'est le profil de la tranche SOC < 80, celle
// ou se fait l'essentiel de la charge du matin et celle ou la mesure montre
// la batterie collee au plafond. 150 A reste a 60 % de ce que le BMS
// declare : c'est un palier, pas une cible. On regarde ce qu'il libere et
// l'ecart entre cellules avant d'aller plus loin.
//
// 2. `pv_mid` : 51,2 -> 51,5 V. La colonne des tensions descendait entre 80 et
// 90 % avant de remonter — 51,5 puis 51,2 puis 52,4 — reste du 06/09 ou
// seul `pv_topoff` avait ete releve parce que c'etait lui qui plafonnait le
// parc a 93 %. 51,5 V l'aligne sur `pv_boost` et rend la colonne monotone.
//
// NE SONT PAS TOUCHES :
// `pv_mid.current_a` (110 A) — voir la note ci-dessous ;
// `pv_topoff` (80 A / 52,4 V) — regle le 06/09, mesure a l'appui ;
// `pv_hold` (30 A / 50,6 V) — deliberé : on atteint le haut, on n'y sejourne
// pas, c'est le bon comportement pour du LiFePO4.
//
// ⚠️ CONSEQUENCE A CONNAITRE : au-dessus de 80 % de SOC c'est `pv_mid` qui
// s'applique, donc son plafond de 110 A reste le plus bas des deux. L'effet du
// 150 A se verra sur la charge du MATIN, sous 80 %. Si l'on veut aussi le voir
// dans la tranche 80-90, c'est `pv_mid.current_a` qu'il faut relever, et c'est
// une decision distincte.
//
// node tools/patch-20260913-plafond-150a-et-pvmid-51v5.mjs
import fs from 'fs';
const F = 'workflows/victron-auto-charge-manager-v1.2.json';
const w = JSON.parse(fs.readFileSync(F, 'utf8'));
const n = w.nodes.find((x) => x.name === 'Compute Charge Targets');
if (!n) { console.error('noeud "Compute Charge Targets" introuvable'); process.exit(1); }
const remplacements = [
[' pv_boost: { current_a: 130, voltage_v: 51.5 },',
' pv_boost: { current_a: 150, voltage_v: 51.5 },'],
[' pv_mid: { current_a: 110, voltage_v: 51.2 },',
' pv_mid: { current_a: 110, voltage_v: 51.5 },'],
];
let code = n.parameters.jsCode;
for (const [avant, apres] of remplacements) {
if (code.includes(apres)) { console.log('deja applique : ' + apres.trim()); continue; }
if (!code.includes(avant)) { console.error('ancre introuvable : ' + avant.trim()); process.exit(1); }
code = code.replace(avant, apres);
console.log(apres.trim());
}
n.parameters.jsCode = code;
fs.writeFileSync(F, JSON.stringify(w, null, 2) + '\n');
console.log('\n' + F + ' patche. Pousser avec :');
console.log(' node tools/n8n-push.mjs ' + F);

File diff suppressed because one or more lines are too long