surveillance-temperature.sh

Orange Pi PC (Allwinner H3) · File : surveillance-temperature.sh · Language : Bash · Use case : Surveiller la température du processeur et alerter en cas de chauffe

With zero dependencies, this script reads the thermal sensor exposed by the Linux kernel, logs CPU temperature and frequency to CSV and prints an alert past a threshold. Perfect to size passive cooling.

Hardware

An Orange Pi PC (Allwinner H3 quad Cortex-A7, 1 GB) running Armbian or the Orange Pi image, connected over Ethernet. None: the board measures its own temperature (SoC sensor).

Wiring

No wiring. Check /sys/class/thermal/thermal_zone*/temp exists (otherwise load the SoC thermal module).

How it works

The kernel exposes temperature in milli-°C in sysfs; the script converts it, compares with the threshold and appends a timestamped CSV line. The current frequency confirms thermal throttling.

Running it

On Armbian: apt install gpiod python3-gpiod, identify the chip with gpiodetect and pins with gpioinfo, then run the script (possibly with sudo the first time).

Variants

Add forced cooling (pwm-fan in sysfs), or push the CSV to a server with curl in the same 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

← Back to the board