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
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.