Un temoin sain, et l'historique de toute une chaine par un seul branchement

datalist reste local, mais data <adresse> history <n> est adressable
et rend l'enregistrement complet, quinze cellules comprises. Les trois
modules de la chaine ancienne sont donc extraits d'un seul
branchement, tous corriges du meme decalage lu au chronometre : 369
minutes. Les jeux sont enfin comparables entre eux, ce que les
decalages deduits - divergents de deux heures et demie - ne
permettaient pas.

Le module d'adresse 2 donne le temoin qui manquait : meme chaine,
memes courants, memes journees, et ses quinze cellules tiennent dans
onze millivolts d'amplitude les unes des autres, ecart median 6 mV.
Ce qui a tue les autres ne vient donc ni du regime de charge, ni du
pilotage, ni de l'installation.

Sur cette base commune la cellule 14 du module ...0322 passe a 273 mV
et rejoint les atteintes : dix cellules, pas neuf.

L'horloge se propage bien du maitre a sa chaine - j'avais conclu
l'inverse en verifiant une seconde apres l'ecriture, il en faut vingt.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KKzkkVTG6KXnGXFFC7X9XJ
This commit is contained in:
Tallagrand Thierry
2026-09-05 16:20:58 +02:00
parent 8cf25114f8
commit 8d076603de
10 changed files with 5465 additions and 30 deletions

View File

@@ -123,6 +123,28 @@ function lireHistorique(f) {
return { module: bc[1], decalageMin, origine, lignes, nb: rangs.length };
}
// ------------------------------------------------- historique distant (CSV)
// Produit par `--historique-distant <adresse>` : deja horodate a l'heure
// REELLE (le decalage est lu et applique a l'ecriture) et deja nomme par
// code-barres. Rien a corriger, rien a deviner.
function lireHistoDistant(f) {
const lignes = [];
const l = lireTexte(f).trim().split('\n');
const cols = l[0].split(',');
const iC = cols.indexOf('c1_mV');
for (const ligne of l.slice(1)) {
const c = ligne.split(',');
if (c.length < iC + 15) continue;
for (let k = 0; k < 15; k++) {
const mv = +c[iC + k];
if (!(mv > 1000)) continue;
lignes.push([c[0], c[1], k + 1, mv, c[4] === '' ? null : +c[4],
c[3] === '' ? null : +c[3], c[2] || null, 'historique']);
}
}
return lignes.length ? { module: l[1].split(',')[1], lignes } : null;
}
// --------------------------------------------------------------------- suivi
function lireSuivi(f) {
const lignes = [];
@@ -157,7 +179,10 @@ const paquets = [];
for (const f of fichiers.sort()) {
const n = path.basename(f);
try {
if (n.endsWith('-suivi.csv')) {
if (n.includes('-histo-distant-')) {
const r = lireHistoDistant(f);
if (r) { paquets.push(r.lignes); console.log(` ${n}\n ${r.module}, ${r.lignes.length / 15} enregistrements, horodates a l'export`); }
} else if (n.endsWith('-suivi.csv')) {
const r = lireSuivi(f);
if (r) { paquets.push(r.lignes); console.log(` ${n} suivi, ${r.lignes.length / 15} releves, modules ${r.modules.join(' ')}`); }
} else if (/histor/i.test(n) && n.endsWith('.txt')) {