Le releve continu, et le code-barres dans le CSV plutot que l'adresse
Le suivi n'ecrivait que l'adresse du module, traduite a l'import par une table figee sur le pack ancien. Le cable ayant change de pack, tout releve fait maintenant aurait ete attribue aux mauvais modules. Le code-barres est desormais resolu au demarrage et ecrit dans le CSV ; la table ne sert plus qu'aux anciens fichiers. Le releve tourne sur le poste qui porte le cable serie - le port USB est la, pas sur le Synology - et n'ecrit qu'un CSV dans le depot partage. C'est le service d'historisation, cote Synology, qui le verse en base : le poste n'a donc aucun mot de passe a connaitre. Archive pour le constructeur : un dossier par code-barres, plus un manifeste en francais, anglais et chinois qui dit ou regarder en premier et signale que les CSV sont deja corriges de la derive d'horloge des BMS. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KKzkkVTG6KXnGXFFC7X9XJ
This commit is contained in:
@@ -346,8 +346,25 @@ async function main() {
|
||||
// Sans cet argument on ne lit que le module sur lequel le cable est pose.
|
||||
const adresses = String(arg('modules', '')).split(',')
|
||||
.map((x) => parseInt(x, 10)).filter((n) => n >= 1 && n <= 16);
|
||||
|
||||
// ⚠️ On resout le CODE-BARRES de chaque adresse AVANT de commencer, et on
|
||||
// l'ecrit dans le CSV. Chaque chaine renumerote ses modules a partir de 1 :
|
||||
// une adresse seule est ambigue, et une table de correspondance figee
|
||||
// attribuerait les relevés d'une chaine aux modules de l'autre. C'est
|
||||
// exactement le piege ouvert quand le cable a change de pack le 05/09.
|
||||
const codes = new Map();
|
||||
for (const ad of adresses) {
|
||||
const info = await commande(l, `info ${ad}`, 8000);
|
||||
const bc = (info.match(/Barcode\s*:\s*(\S+)/) || [])[1];
|
||||
if (!bc) {
|
||||
console.log(`Code-barres illisible pour l'adresse ${ad} : on n'enregistre pas a l'aveugle.`);
|
||||
console.log('Relancer la commande — la ligne aura eu le temps de se vider.');
|
||||
process.exit(1);
|
||||
}
|
||||
codes.set(ad, bc);
|
||||
}
|
||||
console.log(`Suivi toutes les ${pas} s, cellule par cellule -> ${f}`);
|
||||
if (adresses.length) console.log(`Adresses interrogees : ${adresses.join(', ')}`);
|
||||
for (const [ad, bc] of codes) console.log(` adresse ${ad} = ${bc}`);
|
||||
console.log('L\'heure enregistree est l\'heure REELLE de cette machine, pas celle du module');
|
||||
console.log('(l\'horloge interne du module derive de plusieurs heures).');
|
||||
console.log('Ctrl-C pour arreter.\n');
|
||||
@@ -364,8 +381,8 @@ async function main() {
|
||||
if (c.length < 10) { console.log(`${horodate()} module ${ad} : illisible`); continue; }
|
||||
const v = c.map((x) => x.mV);
|
||||
const hi = Math.max(...v), lo = Math.min(...v);
|
||||
fs.appendFileSync(f, [new Date().toISOString(), `module${ad}`, '', ...v, hi - lo].join(',') + '\n');
|
||||
console.log(`${horodate()} module ${ad} haute ${hi} mV (cellule ${c.find((x) => x.mV === hi).n})` +
|
||||
fs.appendFileSync(f, [new Date().toISOString(), codes.get(ad), '', ...v, hi - lo].join(',') + '\n');
|
||||
console.log(`${horodate()} ${codes.get(ad).slice(-4)} haute ${hi} mV (cellule ${c.find((x) => x.mV === hi).n})` +
|
||||
` basse ${lo} mV ecart ${String(hi - lo).padStart(3)} mV` +
|
||||
(hi >= 3600 ? ' NIVEAU 4' : hi >= 3550 ? ' NIVEAU 3, le courant se reduit' : ''));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user