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

@@ -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);