#!/usr/bin/env bash # qualifier-borne.sh — squelette de qualification d'un plugin de borne sur banc. # # Suit le journal nymead et n'imprime que les TRANSITIONS : les événements de # branchement vus par le moteur, et les traces du plugin qualifié. Horodate # chaque ligne pour qu'on puisse mesurer les écarts (délai de confirmation d'un # débranchement, durée d'un faux positif, latence d'une consigne). # # Il ne conclut rien : il rend le cycle LISIBLE. Les trois questions auxquelles # il sert à répondre sont dans AGENTS.md § QUALIFIER UN PLUGIN DE BORNE. # # ./qualifier-borne.sh [utilisateur] # ./qualifier-borne.sh 10.0.0.12 V2C # ./qualifier-borne.sh 10.0.0.12 Keba admin # # La catégorie est celle du Q_LOGGING_CATEGORY du plugin (« V2C », « Keba »…) ; # elle doit être activée côté box, sinon les traces du plugin n'existent pas : # Environment="QT_LOGGING_RULES=.debug=true" # dans un drop-in systemd de nymead, puis daemon-reload + restart. # # Aucune adresse n'est codée en dur : cf. AGENTS.md § Miroir public. set -uo pipefail HOTE="${1:-}" CATEGORIE="${2:-}" UTILISATEUR="${3:-etm}" if [ -z "$HOTE" ] || [ -z "$CATEGORIE" ]; then sed -n '2,20p' "$0" exit 2 fi SSH=(ssh -o BatchMode=yes -o ConnectTimeout=10 -o ServerAliveInterval=30 "${UTILISATEUR}@${HOTE}") # Garde-fou : sans la catégorie activée, le script tournerait en silence et on # conclurait à tort « la borne ne fait rien ». Mieux vaut refuser tout de suite. if ! "${SSH[@]}" 'systemctl show nymead -p Environment --value' \ | grep -q "${CATEGORIE}.debug=true"; then echo "!! ${CATEGORIE}.debug n'est PAS actif sur ${HOTE}." >&2 echo " Les traces du plugin ne seront pas journalisées — activer la" >&2 echo " catégorie dans un drop-in systemd de nymead, puis relancer." >&2 exit 1 fi echo "=== qualification : ${CATEGORIE} sur ${HOTE} — Ctrl-C pour arrêter ===" echo " cycle à jouer : brancher → charger → ARRÊTER LA CHARGE (câble en" echo " place) → débrancher → rebrancher. Relever les valeurs à chaque" echo " transition ; les écarts de temps se lisent dans l'horodatage." echo # « plugged in / unplugged » viennent du MOTEUR : c'est ce que verrait un # consommateur naïf de pluggedIn. Les comparer aux traces du plugin est # précisément ce qui révèle un faux positif de débranchement. "${SSH[@]}" 'journalctl -u nymead -f -n0 --no-pager' 2>&1 \ | grep --line-buffered -iE "${CATEGORIE}|plugged in|unplugged" \ | while IFS= read -r ligne; do printf '%s | %s\n' "$(date '+%T')" "$ligne" done