surveillance-temperature.sh

Orange Pi PC (Allwinner H3) · 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

Una Orange Pi PC (Allwinner H3 cuatro Cortex-A7, 1 GB) con Armbian o la imagen de Orange Pi, conectada por Ethernet. 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.

Ejecución

En Armbian: apt install gpiod python3-gpiod, identifica el chip con gpiodetect y los pines con gpioinfo y ejecuta el script (quiza con sudo la primera vez).

Variantes

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