surveillance-temperature.sh

Raspberry Pi Compute Module 5 (compute-module-5) · Archivo : surveillance-temperature.sh · Lenguaje : Bash · Uso : Surveiller la température du processeur et alerter en cas de chauffe

Sin ninguna dependencia, este script lee el sensor térmico expuesto por el kernel Linux, registra temperatura y frecuencia de la CPU en CSV y muestra una alerta al superar un umbral. Perfecto para dimensionar la refrigeración pasiva.

Hardware necesario

Un Compute Module 5 (BCM2712 + RP1) en una CM5 IO Board, alimentado a 5 V por USB-C (hasta 25 W por PD), con Raspberry Pi OS Bookworm. Ninguno: la placa mide su propia temperatura (sensor del SoC).

Cableado

Sin cableado. Comprobar que existe /sys/class/thermal/thermal_zone*/temp (si no, cargar el módulo térmico del SoC).

Funcionamiento

El kernel expone la temperatura en mili-°C en sysfs; el script la convierte, la compara con el umbral y añade una línea CSV con marca de tiempo. La frecuencia actual confirma el limitación térmica. En Bookworm: sudo apt install python3-gpiozero y ejecute python3 su_script.py. Los 28 GPIO del conector reutilizan la numeración BCM del Pi 5; el módulo añade un botón PWR_BUT y un RTC (VBAT).

Para ir más lejos

Añadir ventilación forzada (pwm-fan en sysfs), o enviar el CSV a un servidor con curl en el mismo 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

← Volver a la ficha