#!/usr/bin/env node // `pv_mid` (SOC 80-90) passe de 110 a 130 A. // // Suite directe du patch du meme jour, qui n'avait releve que `pv_boost` // (130 -> 150 A) : au-dessus de 80 % de SOC c'est `pv_mid` qui commande, donc // son plafond de 110 A restait le plus bas des deux et la mesure de l'apres-midi // ne pouvait rien montrer. // // Ce que la mesure du 13/09 avait etabli, et qui vaut pour cette tranche aussi : // - le BMS declare autoriser 250 A de charge et 53,2 V ; // - les 135 cellules du nouveau parc tiennent dans 2 mV, aucune alarme, // aucun module ne bloque la charge ; // - a 12:49, SOC 82, la batterie prenait encore 127 A — donc bien au-dessus // des 110 A que cette tranche autorise — juste avant que l'ACM ne la // ramene a son plafond a 12:50. // C'est le meme constat que pour pv_boost : le 110 A venait de l'ANCIEN parc. // // La table reste decroissante : 150 / 130 / 80 / 30. `pv_topoff` (80 A, // 52,4 V, regle le 06/09 sur mesure) et `pv_hold` (30 A, 50,6 V, delibere : // on atteint le haut, on n'y sejourne pas) ne sont pas touches. // // ⚠️ Contrairement au 150 A de pv_boost, celui-ci est observable IMMEDIATEMENT // tant que le SOC est entre 80 et 90. // // node tools/patch-20260913b-pvmid-130a.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 avant = ' pv_mid: { current_a: 110, voltage_v: 51.5 },'; const apres = ' pv_mid: { current_a: 130, voltage_v: 51.5 },'; if (n.parameters.jsCode.includes(apres)) { console.log('deja applique'); } else { if (!n.parameters.jsCode.includes(avant)) { console.error('ancre introuvable — le patch 20260913 (pv_mid a 51,5 V) doit etre applique d abord'); process.exit(1); } n.parameters.jsCode = n.parameters.jsCode.replace(avant, apres); fs.writeFileSync(F, JSON.stringify(w, null, 2) + '\n'); console.log(apres.trim()); }