Raspberry Pi Temperatur überwachen

Der Raspberry Pi wird sehr häufig im Dauerbetrieb eingesetzt. Je nach Einsatzzweck und Ort können hierbei auch mal höhere Temperaturen erreicht werden, die dem Einplatinencomputer schaden können. Eine zusätzliche Kühlung ist nicht zwangsläufig erforderlich. Jedoch schadet es nicht, die Temperaturen im Auge zu behalten. Als fauler Mensch möchte man das natürlich nicht selbst tun, sondern möchte nur informiert werden, sollte die Raspberry Pi Temperatur tatsächlich zu hoch sein. Um dies zu automatisieren, habe ich ein Skript geschrieben, welches mir die komplette Arbeit abnimmt. Es werden die Temperaturen der CPU und der GPU ausgelesen und mit Datum in ein Logfile geschrieben.

Wird ein definierter Grenzwert überschritten, kann zusätzlich eine Email versendet werden. Das Skript wird unter „/usr/local/bin“ abgelegt.

sudo nano /usr/local/bin/measure_temp.sh
#!/bin/bash

# Author: Michi Doenselmann
# Date: 06.07.2016
# URL: https://blog.doenselmann.com
# Version: 1.0

#-----------------
# GLOBAL VARIABLES

# mail receipient (optional)
mail="your@email.com"

# define log path
log="/var/log/raspi_temp.log"

# Define maximum CPU and GPU temperature in Grad Celsius
max_cpu_temp="75"
max_gpu_temp="75"
#-----------------

# checking CPU temperature
cpu_temp="$(cat /sys/class/thermal/thermal_zone0/temp)"

if [ "$cpu_temp" -ge "$(($max_cpu_temp*1000))" ]; then
        cpu_state="is too high!"
else
        cpu_state="is fine"
fi

# bringing CPU temperature in right format
cpu_temp="$(($cpu_temp/1000))'C"

# checking GPU temperature
gpu_temp="$(/opt/vc/bin/vcgencmd measure_temp)"
gpu_temp="$(echo $gpu_temp | grep -o -E '[0-9]+' | head -1 | sed -e 's/^0\+//')"

if [ "$gpu_temp" -ge "$max_gpu_temp" ]; then
        gpu_state="is too high!"
else
        gpu_state="is fine"
fi


# send email if CPU or GPU temperature is too high
if [[ "$cpu_state" == *"high"* ]] || [[ "$gpu_state" == *"high"*  ]]; then
        echo "Raspberry Pi temperature is too high. Please check logfile at '$log'" | mail -s "Raspi temperature too high" $mail
fi

# create logfile
echo "-----------------------" >> $log
echo "Date: `date +%d.%m.%Y`" >> $log
echo "Time: `date +%H:%M:%S`" >> $log
echo "CPU temp=$cpu_temp $gpu_state" >> $log
echo "GPU $(/opt/vc/bin/vcgencmd measure_temp) $gpu_state" >> $log
echo "-----------------------" >> $log
echo "" >> $log

exit

Innerhalb des Skripts müssen die Werte „mail receipient“, „log“, „max_cpu_temp“ und „max_gpu_temp“ ggf. an die eigenen Bedürfnisse angepasst werden. Der Rest bleibt am besten so wie er ist. Das Skript muss jetzt noch ausführbar gemacht werden.

sudo chmod +x /usr/local/bin/measure_temp.sh

Damit das automatische Versenden von Emails funktioniert, wird ein MTA benötigt. Falls noch kein MTA vorhanden ist, kann ssmtp konfiguriert werden. Das Skript muss jetzt regelmäßig ausgeführt werden, um die Raspberry Pi Temperatur zu überprüfen bzw. zu überwachen. Dafür gibt es zwei Möglichkeiten. Entweder Systemd oder Cron. Beide Varianten werden beschrieben.

Mit systemd:

Um das Skript mit systemd ausführen zu lassen, wird eine Timer Datei und eine Service Datei benötigt. Der Timer sorgt dafür, dass die Service Datei das Skript einmal pro Stunde ausführt.

sudo nano /etc/systemd/system/raspi-temp.timer
[Unit]
Description=Timer for raspberry pi temp measure script 

[Timer]
OnBootSec=2min
OnUnitActiveSec=1h
Unit=raspi-temp.service

[Install]
WantedBy=multi-user.target

Das eigentliche Skript wird dann über die .service Datei aufgerufen.

sudo nano /etc/systemd/system/raspi-temp.service
[Unit]
Description=Monitor the raspberry pi temperature

[Service]
Type=simple
ExecStart=/usr/local/bin/measure_temp.sh

Der Dienst kann jetzt aktiviert und gestartet werden.

sudo systemctl enable raspi-temp.timer
sudo systemctl start raspi-temp.timer

Mit Cron:

sudo crontab -e
@hourly sh /usr/local/bin/measure_temp.sh

Raspberry Pi Temperatur

Ab jetzt läuft das Skript jede Stunde los und überprüft die Raspberry Pi Temperatur. Die Ergebnisse werden in ein Logfile geschrieben. Das Ausführungsintervall kann natürlich beliebig angepasst werden. Für Fragen und Anregungen stehen wie immer die Kommentare zur Verfügung.