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:
73
HANDOFF.md
73
HANDOFF.md
@@ -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*
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
73
tools/patch-20260913-plafond-150a-et-pvmid-51v5.mjs
Normal file
73
tools/patch-20260913-plafond-150a-et-pvmid-51v5.mjs
Normal 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
Reference in New Issue
Block a user