Releve des cellules sur le Synology .17 + garde anti-blocage
Le releve tournait sur le PC portable (deploy/releve-cellules/lancer.sh) : ferme, il ne releve plus, et le 20/09 son @reboot a refuse de relancer sur un faux positif du garde anti-doublon -> 4 jours de trou dans la table cellule, Grafana "No data". Le portable n'a pas vocation a rester allume. Deplacement vers le Synology .17 (ARCHIVE3, DS920+), toujours allume : - compose.yaml : conteneur node:20 en uid 1026:100 (le montage NFS peut ecraser root ; le dossier CSV est g+w pour users), device /dev/ttyUSB0 mappe, depot monte en /depot. Ecrit les CSV comme avant ; le service d'historisation du .22 les ingere sans changement. restart:unless-stopped remplace la boucle lancer.sh. - charger-pilotes.sh : DSM embarque usbserial.ko + ftdi_sio.ko mais ne les charge pas d'office. Script root (Planificateur DSM au boot) qui insmod les deux et ouvre les droits de /dev/ttyUSB0. - README.md : deploiement, bascule depuis le portable, verification. Garde anti-blocage dans pylontech-console.mjs (--suivi) : lireJusqua resout au timeout au lieu de rejeter, donc un port fige renvoie du vide en boucle sans jamais crasher -- exactement le hang du 20/09. Un controle du mtime du CSV force process.exit(1) apres 3x le pas sans ecriture, pour que le superviseur (conteneur ou lancer.sh) rouvre le port. Menage : modified/*.bak-* (rollbacks locaux) ignores comme prepush-* ; ajout des relevés de mesure batterie des sessions 16-20/09. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GwpFpy2aQ2rJok6tNQSbVj
This commit is contained in:
@@ -405,6 +405,22 @@ async function main() {
|
||||
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');
|
||||
// Garde anti-blocage : si la ligne serie se fige (adaptateur qui ne repond
|
||||
// plus, module eteint), les lectures reviennent VIDES sans jamais lever
|
||||
// d'erreur (lireJusqua resout au timeout au lieu de rejeter), et le CSV
|
||||
// cesse de grossir en silence. On force alors la sortie pour que le
|
||||
// superviseur rouvre le port : conteneur restart:unless-stopped sur le
|
||||
// Synology, ou boucle lancer.sh sur le poste. C'est le hang qui a tue la
|
||||
// version portable le 20/09 (releve muet 4 jours sans que rien ne crashe).
|
||||
const STALL_MS = Math.max(pas * 3, 180) * 1000;
|
||||
setInterval(() => {
|
||||
let age = Infinity;
|
||||
try { age = Date.now() - fs.statSync(f).mtimeMs; } catch { /* fichier absent */ }
|
||||
if (age > STALL_MS) {
|
||||
console.error(`${horodate()} aucun releve ecrit depuis ${Math.round(age / 1000)} s (> ${STALL_MS / 1000} s) : sortie pour relance.`);
|
||||
process.exit(1);
|
||||
}
|
||||
}, 30000).unref();
|
||||
for (;;) {
|
||||
if (adresses.length) {
|
||||
// Un `pwr` pour toute la chaine, avant la boucle par module. Si la
|
||||
|
||||
Reference in New Issue
Block a user