diff --git a/deploy/releve-cellules/lancer.sh b/deploy/releve-cellules/lancer.sh new file mode 100755 index 0000000..e55f07c --- /dev/null +++ b/deploy/releve-cellules/lancer.sh @@ -0,0 +1,47 @@ +#!/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" +MODULES=1,2,3,4 +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 diff --git a/docs/mesures/batteries/202609052031-suivi.csv b/docs/mesures/batteries/202609052031-suivi.csv new file mode 100644 index 0000000..16c213b --- /dev/null +++ b/docs/mesures/batteries/202609052031-suivi.csv @@ -0,0 +1,5 @@ +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-05T18:31:45.233Z,Y230202C30371426,,3290,3291,3292,3292,3292,3290,3291,3292,3292,3291,3290,3291,3292,3292,3292,2 +2026-09-05T18:31:45.388Z,Y230202C30371425,,3291,3292,3291,3292,3290,3290,3292,3292,3292,3290,3290,3292,3292,3292,3290,2 +2026-09-05T18:31:45.633Z,Y230202C30371431,,3290,3292,3292,3292,3291,3289,3292,3292,3292,3291,3290,3292,3292,3292,3291,3 +2026-09-05T18:31:45.788Z,Y230202C30371427,,3289,3291,3291,3291,3291,3289,3291,3291,3291,3291,3289,3291,3292,3292,3291,3 diff --git a/docs/mesures/batteries/202609052040-suivi.csv b/docs/mesures/batteries/202609052040-suivi.csv new file mode 100644 index 0000000..a8d3e17 --- /dev/null +++ b/docs/mesures/batteries/202609052040-suivi.csv @@ -0,0 +1,5 @@ +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-05T18:40:18.873Z,Y230202C30371426,,3304,3304,3304,3304,3303,3303,3304,3303,3304,3303,3304,3303,3304,3304,3303,1 +2026-09-05T18:40:19.033Z,Y230202C30371425,,3303,3303,3303,3304,3304,3303,3303,3303,3303,3303,3303,3303,3303,3303,3303,1 +2026-09-05T18:40:19.191Z,Y230202C30371431,,3303,3303,3304,3303,3303,3303,3303,3303,3303,3303,3303,3304,3303,3304,3303,1 +2026-09-05T18:40:19.348Z,Y230202C30371427,,3303,3303,3303,3303,3303,3303,3303,3303,3303,3303,3303,3303,3303,3303,3303,0