surveillance-temperature.sh
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 Orange Pi 5 Plus (Rockchip RK3588, 4 Cortex-A76 + 4 Cortex-A55, jusqu'à 16 Go de RAM) sous Armbian/Debian, connecteur GPIO 40 broches et double Ethernet gigabit. Aucun : la carte mesure elle-même sa température (sensor SoC).
Câblage
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.
Exécution
Gravez Armbian pour RK3588, puis sudo apt install python3-gpiod gpiod. Identifiez la puce avec gpiodetect et les broches avec gpioinfo, adaptez le script et lancez-le (python3 ou ./script.sh).
Variantes
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