Releve cellules : garde contre les debranchements (timer 5 min sur le .17)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011uJ47NxgfpGnuuMr3f2n7Z
This commit is contained in:
@@ -90,3 +90,32 @@ Le panneau Grafana « Sante des modules » ne montre que les modules vus dans le
|
||||
Le cable est sur le **pack 2** (5x US2000C). Le **pack 1** (4x US5000) reste
|
||||
hors surveillance cellule jusqu'a un 2e cable. La courbe de capacite et le SOC,
|
||||
eux, couvrent tout le parc (agregat du Cerbo).
|
||||
|
||||
## Garde contre les debranchements (25/09/2026)
|
||||
|
||||
Debrancher puis rebrancher le cable recree `/dev/ttyUSB0` accessible a root
|
||||
seul : le conteneur (uid 1026) meurt (« EIO: i/o error ») et ne repart pas.
|
||||
`surveiller-port.sh` corrige cela toutes les 5 minutes, en root : pilotes
|
||||
recharges si absents, droits du port rouverts, conteneur relance s'il est
|
||||
arrete. Il ne fait rien si le cable est debranche, et ne journalise (tag
|
||||
`evcs-releve`, `journalctl -t evcs-releve`) que lorsqu'il agit.
|
||||
|
||||
Pose en timer systemd (le Planificateur DSM n'a pas d'ajout en ligne de
|
||||
commande ; meme choix que `openclaw-session-rotate.timer`) :
|
||||
|
||||
/etc/systemd/system/evcs-releve-port.service # ExecStart=/bin/sh <depot>/deploy/releve-cellules/surveiller-port.sh
|
||||
/etc/systemd/system/evcs-releve-port.timer # OnBootSec=3min, OnUnitActiveSec=5min
|
||||
|
||||
⚠️ Pour ARRETER volontairement le releve, arreter d'abord le timer, sinon il
|
||||
relance le conteneur dans les 5 minutes :
|
||||
|
||||
sudo systemctl stop evcs-releve-port.timer && sudo systemctl disable evcs-releve-port.timer
|
||||
|
||||
⚠️ Une mise a jour majeure de DSM peut effacer ces fichiers (elle a deja
|
||||
efface le sudo NOPASSWD, voir plus haut) : reverifier
|
||||
`systemctl list-timers | grep evcs` apres chaque MAJ.
|
||||
|
||||
⚠️ Seuls les cables a puce **FTDI** fonctionnent sur ce NAS : DSM (noyau 4.4)
|
||||
n'embarque pas de pilote Prolific PL2303, et le modele `067b:23a3` n'est de
|
||||
toute facon reconnu que par des noyaux recents (verifie sur la Spark et le PC
|
||||
maison, noyaux 7.0). Essai du 25/09 : cable PL2303 illisible, retire.
|
||||
|
||||
42
deploy/releve-cellules/surveiller-port.sh
Normal file
42
deploy/releve-cellules/surveiller-port.sh
Normal file
@@ -0,0 +1,42 @@
|
||||
#!/bin/sh
|
||||
# Garde du releve des cellules sur le Synology .17 (ARCHIVE3). A LANCER EN ROOT,
|
||||
# toutes les 5 minutes (timer systemd evcs-releve-port.timer, voir README).
|
||||
#
|
||||
# Pourquoi (25/09/2026) : debrancher puis rebrancher le cable FTDI recree
|
||||
# /dev/ttyUSB0 en crw------- root. Le conteneur, qui tourne en uid 1026, ne
|
||||
# peut plus l'ouvrir : il meurt (« EIO: i/o error ») et ne repart pas seul.
|
||||
# charger-pilotes.sh ne tourne qu'au demarrage du NAS, donc sans cette garde
|
||||
# chaque debranchement coupait le releve jusqu'a une intervention manuelle.
|
||||
#
|
||||
# Ce script ne fait RIEN quand tout va bien, et n'ecrit une ligne dans le
|
||||
# journal systeme (tag evcs-releve) que lorsqu'il agit. Idempotent.
|
||||
|
||||
PORT=/dev/ttyUSB0
|
||||
CONTENEUR=evcs-releve-cellules
|
||||
DOCKER=/usr/local/bin/docker
|
||||
DIR=$(dirname "$0")
|
||||
dire() { logger -t evcs-releve "$*"; echo "$*"; }
|
||||
|
||||
# Pilotes decharges (ne devrait arriver qu'apres une MAJ DSM) : on les recharge.
|
||||
if ! /sbin/lsmod | grep -q "^ftdi_sio "; then
|
||||
dire "ftdi_sio absent : rechargement des pilotes"
|
||||
/bin/sh "$DIR/charger-pilotes.sh" >/dev/null 2>&1
|
||||
fi
|
||||
|
||||
# Cable debranche : rien a faire, le conteneur ne peut de toute facon pas
|
||||
# demarrer sans son device. On attend le rebranchement.
|
||||
[ -e "$PORT" ] || exit 0
|
||||
|
||||
# Droits perdus au rebranchement : on les rouvre.
|
||||
if [ "$(stat -c %a "$PORT")" != "666" ]; then
|
||||
chmod 666 "$PORT"
|
||||
dire "droits de $PORT rouverts (cable rebranche ?)"
|
||||
fi
|
||||
|
||||
# Conteneur arrete : on le relance.
|
||||
etat=$("$DOCKER" inspect -f '{{.State.Running}}' "$CONTENEUR" 2>/dev/null)
|
||||
if [ "$etat" != "true" ]; then
|
||||
"$DOCKER" start "$CONTENEUR" >/dev/null 2>&1 \
|
||||
&& dire "$CONTENEUR relance" \
|
||||
|| dire "$CONTENEUR : echec de la relance"
|
||||
fi
|
||||
Reference in New Issue
Block a user