Les tensions de cellule entrent dans la base, avec leur decalage d'horloge

Nouvelle table cellule, indexee par CODE-BARRES et non par adresse :
chaque chaine renumerote ses modules a partir de 1, il existe donc
deux « module 1 » dans ce parc.

L'importeur lit les exports d'historique et les CSV de suivi. Deux
pieges corriges en le construisant : le tampon du BMS est circulaire,
donc le plus grand index n'est pas le plus recent - trier par index
donnait un decalage deduit de -865 h ; et les fichiers d'evenements
portent les memes colonnes sans decrire un echantillonnage regulier,
ils sont ecartes.

La deduction du decalage d'horloge reste approximative : sur BAT3 elle
donne huit heures la ou le chronometre en donne six. La console
inscrit desormais le decalage en tete de chaque export, mesure a la
seconde ou il commence ; l'importeur le prefere toujours a sa propre
deduction.

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 13:39:17 +02:00
parent 1132d3147f
commit f762616893
5 changed files with 592 additions and 0 deletions

View File

@@ -208,6 +208,25 @@ async function main() {
console.log(`Extraction de l'historique a partir de l'enregistrement ${depuis}.`);
console.log('Le module en garde 1798, un toutes les 30 minutes : comptez plusieurs minutes.');
const f = journal(nom, `# releve du ${horodate()} sur ${dev}\n`);
// L'horloge du module derive de plusieurs heures et chaque module a la
// sienne. On la CAPTURE ici, a la seconde ou l'export commence, plutot que
// de la deduire ensuite : le tampon d'historique est circulaire et contient
// des enregistrements anterieurs a des remises a l'heure, ce qui rend toute
// deduction a posteriori fausse de plusieurs heures.
const rtc = await commande(l, 'time', 8000);
const m = rtc.match(/RTC\s+(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})/);
if (m) {
const reel = new Date();
const mod = new Date(m[1].replace(' ', 'T') + 'Z');
const decMin = Math.round((mod.getTime() -
(reel.getTime() - reel.getTimezoneOffset() * 60000)) / 60000);
journal(nom, `# RTC module : ${m[1]}\n# heure reelle : ${reel.toISOString()}\n`
+ `# decalage_minutes : ${decMin}\n`);
console.log(`Horloge du module : ${m[1]} — decalage ${decMin} min sur l'heure reelle.`);
} else {
journal(nom, '# RTC module : non lu\n');
console.log('Horloge du module non lue : le decalage devra etre donne a l\'import.');
}
journal(nom, await commande(l, 'info', 8000));
// UNE seule commande suffit : le module pagine lui-meme jusqu'au dernier
// enregistrement, `commande` tourne les pages. Boucler sur des index