Suivi en direct de plusieurs modules d'une chaine pendant l'alarme
--modules 1,2,3 interroge chaque adresse avec soh, qui donne les quinze tensions et le compteur de sante par cellule. Sans cet argument on ne lisait que le module portant le cable, alors que l'adressage a distance permet de couvrir toute la chaine. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KKzkkVTG6KXnGXFFC7X9XJ
This commit is contained in:
3
docs/mesures/batteries/202609051300-suivi.csv
Normal file
3
docs/mesures/batteries/202609051300-suivi.csv
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
heure_reelle,etat,courant_mA,c1_mV,c2_mV,c3_mV,c4_mV,c5_mV,c6_mV,c7_mV,c8_mV,c9_mV,c10_mV,c11_mV,c12_mV,c13_mV,c14_mV,c15_mV,ecart_mV
|
||||||
|
2026-09-05T11:00:51.875Z,module1,,3328,3328,3330,3328,3330,3328,3329,3328,3327,3328,3328,3326,3327,3329,3272,58
|
||||||
|
2026-09-05T11:01:07.018Z,module1,,3328,3328,3330,3328,3330,3328,3329,3328,3327,3328,3328,3326,3327,3329,3272,58
|
||||||
|
3
docs/mesures/batteries/202609051301-suivi.csv
Normal file
3
docs/mesures/batteries/202609051301-suivi.csv
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
heure_reelle,etat,courant_mA,c1_mV,c2_mV,c3_mV,c4_mV,c5_mV,c6_mV,c7_mV,c8_mV,c9_mV,c10_mV,c11_mV,c12_mV,c13_mV,c14_mV,c15_mV,ecart_mV
|
||||||
|
2026-09-05T11:01:13.884Z,module1,,3328,3328,3330,3328,3330,3328,3329,3328,3327,3328,3328,3326,3327,3329,3272,58
|
||||||
|
2026-09-05T11:01:29.020Z,module1,,3328,3328,3330,3328,3330,3328,3329,3328,3327,3328,3328,3326,3327,3329,3272,58
|
||||||
|
@@ -228,11 +228,37 @@ async function main() {
|
|||||||
fs.writeFileSync(f, 'heure_reelle,etat,courant_mA,' +
|
fs.writeFileSync(f, 'heure_reelle,etat,courant_mA,' +
|
||||||
Array.from({ length: 15 }, (_, i) => `c${i + 1}_mV`).join(',') + ',ecart_mV\n');
|
Array.from({ length: 15 }, (_, i) => `c${i + 1}_mV`).join(',') + ',ecart_mV\n');
|
||||||
}
|
}
|
||||||
|
// --modules 1,2,3 : interroge chaque adresse de la chaine avec `soh <n>`,
|
||||||
|
// qui donne les quinze tensions ET le compteur de sante par cellule.
|
||||||
|
// 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);
|
||||||
console.log(`Suivi toutes les ${pas} s, cellule par cellule -> ${f}`);
|
console.log(`Suivi toutes les ${pas} s, cellule par cellule -> ${f}`);
|
||||||
|
if (adresses.length) console.log(`Adresses interrogees : ${adresses.join(', ')}`);
|
||||||
console.log('L\'heure enregistree est l\'heure REELLE de cette machine, pas celle du module');
|
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('(l\'horloge interne du module derive de plusieurs heures).');
|
||||||
console.log('Ctrl-C pour arreter.\n');
|
console.log('Ctrl-C pour arreter.\n');
|
||||||
for (;;) {
|
for (;;) {
|
||||||
|
if (adresses.length) {
|
||||||
|
for (const ad of adresses) {
|
||||||
|
const t = await commande(l, `soh ${ad}`, 10000);
|
||||||
|
// `soh` : "<n0based> <mV> <SOHCount> <statut>"
|
||||||
|
const c = [];
|
||||||
|
for (const ligne of t.split('\n')) {
|
||||||
|
const m = ligne.trim().match(/^(\d{1,2})\s+(\d{4})\s+(\d+)\s+(\w+)/);
|
||||||
|
if (m) c.push({ n: +m[1] + 1, mV: +m[2] });
|
||||||
|
}
|
||||||
|
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})` +
|
||||||
|
` basse ${lo} mV ecart ${String(hi - lo).padStart(3)} mV` +
|
||||||
|
(hi >= 3600 ? ' NIVEAU 4' : hi >= 3550 ? ' NIVEAU 3, le courant se reduit' : ''));
|
||||||
|
}
|
||||||
|
await new Promise((r) => setTimeout(r, pas * 1000));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
const txt = await commande(l, 'data', 10000);
|
const txt = await commande(l, 'data', 10000);
|
||||||
const cel = cellules(txt);
|
const cel = cellules(txt);
|
||||||
if (cel) {
|
if (cel) {
|
||||||
|
|||||||
Reference in New Issue
Block a user