La cellule 12 est detruite en ce moment, dix nuits sur treize
Le tampon d'evenements du BMS - distinct de l'historique, et que je n'avais pas vu - montre 52 passages sous l'alarme basse repartis sur 19 nuits, avec une tension qui descend de 3072 a 2999 mV. Le temoin de la meme chaine a un tampon VIDE. Le SOC du parc a ces moments-la vaut 34 a 41 %. Le plancher dur du controleur est a 22 % : il n'est jamais atteint, la cellule est detruite bien avant. Le plancher est exprime dans un SOC que la cellule endommagee fausse elle-meme. Cela revise ma recommandation de cet apres-midi. Les 3 kWh que je disais perdus en retirant les trois modules etaient mesures sur une plage ou une cellule se detruit ; a plancher reellement sur, cinq modules sains rendent 9,42 kWh contre 9,29 pour les sept. Le retrait ne coute rien, et supprime le bridage en prime. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KKzkkVTG6KXnGXFFC7X9XJ
This commit is contained in:
@@ -265,7 +265,16 @@ async function main() {
|
||||
const rtc = await commande(l, 'time', 8000);
|
||||
const mr = rtc.match(/RTC\s+(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})/);
|
||||
let decMs = 0;
|
||||
if (mr) {
|
||||
// ⚠️ Si l'horloge du module a ete remise a l'heure APRES l'ecriture des
|
||||
// enregistrements, la lire maintenant donne zero alors que les donnees
|
||||
// stockees portent l'ancien decalage. --decalage-minutes impose la valeur
|
||||
// qui avait cours quand ces enregistrements ont ete ecrits.
|
||||
const impose = arg('decalage-minutes');
|
||||
if (impose !== null && impose !== true) {
|
||||
decMs = parseInt(String(impose), 10) * 60000;
|
||||
console.log(`Decalage impose : ${impose} min (l'horloge lue vaut ` +
|
||||
`${mr ? mr[1] : 'inconnue'}).`);
|
||||
} else if (mr) {
|
||||
const [d, h] = mr[1].split(' ');
|
||||
const [A, M, J] = d.split('-').map(Number); const [H, N, S] = h.split(':').map(Number);
|
||||
decMs = new Date(A, M - 1, J, H, N, S).getTime() - Date.now();
|
||||
@@ -273,6 +282,7 @@ async function main() {
|
||||
} else {
|
||||
console.log('Horloge non lue : les horodatages seront ceux du module, non corriges.');
|
||||
}
|
||||
const bascule = arg('decalage-minutes') ? Date.now() : null;
|
||||
|
||||
const info = await commande(l, `info ${ad}`, 8000);
|
||||
const bc = (info.match(/Barcode\s*:\s*(\S+)/) || [])[1];
|
||||
@@ -291,7 +301,7 @@ async function main() {
|
||||
Array.from({ length: 15 }, (_, i) => `c${i + 1}_mV`).join(',') + ',ecart_mV\n');
|
||||
console.log(`Module ${bc} (adresse ${ad}), tampon ${tampon} -> ${f}`);
|
||||
|
||||
let ecrits = 0, vides = 0;
|
||||
let ecrits = 0, vides = 0, apresBascule = 0;
|
||||
for (let n = 1; n <= MAX; n++) {
|
||||
const t = await commande(l, `data ${ad} ${tampon} ${n}`, 8000);
|
||||
const mt = t.match(/Time\s*:\s*(\d\d-\d\d-\d\d \d\d:\d\d:\d\d)/);
|
||||
@@ -308,10 +318,17 @@ async function main() {
|
||||
const soc = (t.match(/Percent\s*:\s*(\d+)/) || [])[1] || '';
|
||||
fs.appendFileSync(f, [quand.toISOString(), bc, cel[0].etat, cel[0].mA, soc,
|
||||
...v, Math.max(...v) - Math.min(...v)].join(',') + '\n');
|
||||
// Les enregistrements posterieurs a la remise a l'heure ne doivent PAS
|
||||
// recevoir la correction : on les signale plutot que de les fausser.
|
||||
if (bascule && quand.getTime() > bascule) apresBascule++;
|
||||
ecrits++;
|
||||
if (n % 25 === 0) process.stdout.write(`\r ${n} interroges, ${ecrits} ecrits `);
|
||||
}
|
||||
console.log(`\n${ecrits} enregistrements ecrits dans ${f}`);
|
||||
if (apresBascule) {
|
||||
console.log(`⚠️ ${apresBascule} enregistrement(s) tombent apres l'instant present : `
|
||||
+ `ils ont ete ecrits APRES la remise a l'heure et ne devaient pas etre corriges.`);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user