MODULES=1,2,3,4,5. Le cinquieme etait vivant et ignore depuis la mise en service du releve : constate le 16/09, la chaine enumerait un module 5 a 50,7 V / 14,6 A / 80 % que personne ne lisait. Son code-barres est K220803C30160323 — le seul module sain de l'ANCIEN parc (zero cellule marquee, zero compteur, cf. §51), que le proprietaire a garde. Ecart de cellules 6 mV contre 2 a 4 pour les quatre Y230202C de 2023 : acceptable. ⚠️ Il faut relancer le SUPERVISEUR et pas seulement son fils : lancer.sh lit MODULES a son demarrage, donc tuer le processus node laisse le superviseur relancer avec l'ancienne liste. ⚠️ TROU DE 44 H dans la table cellule, du 14/09 17:01 au 16/09 13:02, explique : le cable console etait sur le PACK 1 pendant cette periode, et les US5000 n'emettent pas le meme tableau console que les US2000C — colonnes Tlow.Id, Thigh.Id, Vlow.Id, Vhigh.Id presentes chez les uns, absentes chez les autres. Le parseur du releve ne sait lire que le format US2000C : sur le pack 1 il journalise « module N : illisible » et n'ecrit rien. Rien d'autre ne le signale. A traiter si le releve doit un jour couvrir le pack 1. ⚠️ Et mes propres commandes console s'entrelacent avec le releveur sur le meme port serie : la garde anti-doublon de lancer.sh ne filtre que son propre motif. Les « illisible » de 12:42 et 12:52 sont de mon fait. Arreter le releveur avant toute lecture manuelle. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GwpFpy2aQ2rJok6tNQSbVj
51 lines
2.0 KiB
Bash
Executable File
51 lines
2.0 KiB
Bash
Executable File
#!/bin/bash
|
|
# Lance et surveille le releve continu des cellules Pylontech.
|
|
#
|
|
# Appele par une entree @reboot de la crontab utilisateur. On ne passe PAS par
|
|
# `systemctl --user` : sans « linger », aucun gestionnaire de services
|
|
# utilisateur ne tourne au demarrage, et la commande echouerait faute de
|
|
# XDG_RUNTIME_DIR. Le choix a ete fait de ne pas activer le linger, qui aurait
|
|
# aussi fait demarrer une douzaine de services graphiques sans session ouverte.
|
|
#
|
|
# Ce script fait donc lui-meme le travail d'un superviseur : garde
|
|
# anti-doublon, redemarrage apres echec, journal borne.
|
|
|
|
DEPOT=/mnt/projects/EVCS/EVCS
|
|
PORT=/dev/ttyUSB0
|
|
JOURNAL="$HOME/.local/state/releve-cellules.log"
|
|
# ⚠️ Le pack 2 compte CINQ US2000, pas quatre. Constate le 16/09 : la chaine
|
|
# enumerait un module 5 vivant (50,7 V, 14,6 A, 80 %) que ce releve ignorait.
|
|
# La liste doit suivre le parc — la verifier apres toute intervention physique.
|
|
MODULES=1,2,3,4,5
|
|
PAS=600
|
|
|
|
mkdir -p "$(dirname "$JOURNAL")"
|
|
|
|
# Garde anti-doublon : deux processus sur le meme port serie entrelacent leurs
|
|
# lectures et produisent des relevés faux, sans que rien ne le signale.
|
|
if pgrep -f "pylontech-console.mjs --port $PORT" >/dev/null; then
|
|
echo "$(date '+%F %T') deja en cours, on ne relance pas" >> "$JOURNAL"
|
|
exit 0
|
|
fi
|
|
|
|
cd "$DEPOT" || { echo "$(date '+%F %T') depot introuvable" >> "$JOURNAL"; exit 1; }
|
|
|
|
while true; do
|
|
# Le journal est tronque au-dela de 5 Mo : une semaine sans surveillance ne
|
|
# doit pas remplir la partition.
|
|
[ -f "$JOURNAL" ] && [ "$(stat -c%s "$JOURNAL")" -gt 5242880 ] && : > "$JOURNAL"
|
|
|
|
if [ ! -e "$PORT" ]; then
|
|
echo "$(date '+%F %T') $PORT absent, nouvelle tentative dans 60 s" >> "$JOURNAL"
|
|
sleep 60
|
|
continue
|
|
fi
|
|
|
|
echo "$(date '+%F %T') demarrage du releve" >> "$JOURNAL"
|
|
/usr/bin/node tools/pylontech-console.mjs \
|
|
--port "$PORT" --suivi "$PAS" --modules "$MODULES" >> "$JOURNAL" 2>&1
|
|
|
|
echo "$(date '+%F %T') arret (code $?), reprise dans 60 s" >> "$JOURNAL"
|
|
sleep 60
|
|
done
|