surveillance-temperature.sh

Banana Pi BPI-M2 Zero (Allwinner H2+ / H3) · Fichier : surveillance-temperature.sh · Langage : Bash · Usage : Surveiller la température du processeur et alerter en cas de chauffe

Sans aucune dépendance, ce script lit le capteur thermique exposé par le noyau Linux, journalise température et fréquence CPU en CSV et affiche une alerte au-delà d'un seuil. Parfait pour dimensionner un refroidissement passif.

Matériel requis

Un Banana Pi BPI-M2 ZERO (Allwinner H2+, format Pi Zero) sur image Armbian, alimenté en 5 V par son port micro-USB dédié, avec son connecteur 40 broches compatible Raspberry Pi. Aucun : la carte mesure elle-même sa température (sensor SoC).

Branchement

Aucun câblage. Vérifier la présence de /sys/class/thermal/thermal_zone*/temp (sinon, charger le module thermique du SoC).

Fonctionnement

Le noyau expose la température en milli-°C dans sysfs ; le script la convertit, la compare au seuil et append une ligne CSV horodatée. La fréquence courante confirme la limitation thermique. Sous Armbian : sudo apt install gpiod, puis gpiodetect (gpiochip0 = banques PA-PE, gpiochip1 = PL) et gpioinfo pour retrouver les lignes du connecteur (noms CON2-Pxx).

Pour aller plus loin

Ajouter un coup de vent forcé (pwm-fan dans sysfs), ou pousser le CSV vers un serveur via curl dans le même cron.

surveillance-temperature.sh

#!/bin/bash
# Surveillance thermique : /sys/class/thermal + journalisation + alerte.
# Aucune dependance : sysfs et bash uniquement.

SEUIL_C="${SEUIL_C:-70}"     # degres avant alerte (variable d'env)
INTERVALLE="${INTERVALLE:-5}" # secondes entre deux mesures
JOURNAL="${JOURNAL:-/tmp/cpu-temp.csv}"

[ -f "$JOURNAL" ] || echo "horodatage,temp_c,frequence_mhz" > "$JOURNAL"

# Premier capteur thermique expose par le noyau (varie selon la carte)
ZONE=$(ls /sys/class/thermal/ | grep ^thermal_zone | head -1)
[ -n "$ZONE" ] || { echo "aucun capteur thermique dans /sys/class/thermal"; exit 1; }
echo "Capteur : $ZONE"

while true; do
  TEMP=$(($(cat /sys/class/thermal/$ZONE/temp) / 1000))  # milli-C -> C
  FREQ=$(awk 'NR==1{print $1/1000}' \
        /sys/devices/system/cpu/cpufreq/policy0/scaling_cur_freq 2>/dev/null || echo 0)
  TS=$(date -Is)
  echo "$TS,$TEMP,$FREQ" >> "$JOURNAL"
  if [ "$TEMP" -ge "$SEUIL_C" ]; then
    echo "$(date +%T) ALERTE : ${TEMP}C >= ${SEUIL_C}C (freq ${FREQ} MHz)"
  else
    echo "$(date +%T) temp ${TEMP}C  freq ${FREQ}MHz"
  fi
  sleep "$INTERVALLE"
done

← Retour à la fiche