🛠 Surveillance thermique et fréquence sous contrainte 256 Mo
Objetivos
- Leer la temperatura, la frecuencia y los flags de throttling del firmware: el BCM2835 reduce la frecuencia por encima de 85 °C o en caso de subtensión.
- Construir un historial ligero (los 256 MB no están pensados para una verdadera TSDB) con cron y RRD o CSV.
- Establecer una alerta cuando la frecuencia máxima caiga por debajo de 700 MHz.
Hardware
- Modelo A, idealmente en una carcasa (la ventaja de este modelo: bajo calentamiento en un recinto sellado).
- Fuente de alimentación micro-USB de 5 V de calidad — una subtensión limita la frecuencia tanto como el calor.
- Opcional: disipador adhesivo.
Código completo
#!/usr/bin/env bash
# /usr/local/bin/thermonut.sh — un point de mesure par minute
T=$(vcgencmd measure_temp | cut -d= -f2 | tr -d "'C")
F=$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq)
U=$(vcgencmd get_throttled | cut -d= -f2)
echo "$(date -Is),$T,$F,$U" >> /var/log/thermonut.csv
# Bit 0 de throttled = sous-tension ; bits 16-18 = bridage fréquence atteinte
[ $(( 0x$U & 0x10000 )) -ne 0 ] && logger -p user.warning "THERMIQUE: bridage détecté"
# /etc/cron.d/thermonut (ligne unique)
* * * * * root /usr/local/bin/thermonut.sh
# Consulter
vcgencmd get_throttled && tail /var/log/thermonut.csv
Verificación esperada
El CSV se rellena cada minuto; bajo carga (yes > /dev/null &) la temperatura sube y, al alcanzar el umbral de 85 °C, scaling_cur_freq cae por debajo de 700000 kHz mientras que el flag get_throttled se activa. >
Errores frecuentes
- Interpretar
get_throttled=0x50000como una avería: estos bits memorizan un evento pasado, un reinicio los restablece a cero. - Culpar al calor cuando solo está activo el bit de subtensión (0x1): el problema es la fuente de alimentación o el cable.
- Almacenar el historial en la RAM (/tmp): todo desaparece al reiniciar, y la tarjeta SD no tolera bien las escrituras cada segundo.
- Usar
bc/herramientas pesadas para la aritmética: bash es suficiente, ahorra los 256 MB.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
led_blink.pyPythonbutton_led.pyPythonservo_sweep.pyPythondht_temp.pyPythonoled_i2c.pyPythonmcp3008_read.pyPython