Der Raspberry Pi bietet die Möglichkeit die Temperatur der CPU und der GPU auszulesen. Aus verschiedenen Gründen (Gehäuseeinbau, Overclocking, ...) kann es sinnvoll sein diese Temperaturen im Auge zu behalten. Auf meinem betroffenen Pi läuft schon eine
Cacti Installation, also warum diese nicht für diesen Zweck benutzen. Codebeispiele zum Auslesen der Temperaturen findet man leicht im Netz, hier zwei Beispiele:
Shell
#!/bin/bash
cpuTemp0=$(cat /sys/class/thermal/thermal_zone0/temp)
cpuTemp1=$(($cpuTemp0/1000))
cpuTemp2=$(($cpuTemp0/100))
cpuTempM=$(($cpuTemp2 % $cpuTemp1))
gpuTemp0=$(/opt/vc/bin/vcgencmd measure_temp)
gpuTemp0=${gpuTemp0//\'C/}
gpuTemp0=${gpuTemp0//temp=/}
echo gpu_temp:$gpuTemp0 cpu_temp:$cpuTemp1"."$cpuTempM
Python
import commands
def get_cpu_temp():
tempFile = open( "/sys/class/thermal/thermal_zone0/temp" )
cpu_temp = tempFile.read()
tempFile.close()
return float(cpu_temp)/1000
# Uncomment the next line if you want the temp in Fahrenheit
#return float(1.8*cpu_temp)+32
def get_gpu_temp():
gpu_temp = commands.getoutput( '/opt/vc/bin/vcgencmd measure_temp' ).replace( 'temp=', '' ).replace( '\'C', '' )
return float(gpu_temp)
# Uncomment the next line if you want the temp in Fahrenheit
# return float(1.8* gpu_temp)+32
def main():
print "cpu_temp:{0:.1f} gpu_temp:{1:.1f}".format(get_cpu_temp(),get_gpu_temp())
if __name__ == '__main__':
main()
Nach dem Test der Skripte in der shell fehlt - um die Temperaturen mit Cacti zu loggen - also nur noch eine Cacti "Data Input Method", die eins der Skripte aufruft, eine Cacti "Data Source" und ein Cacti "Graph", der die Temperaturen anzeigt.
Leider stellte sich der Erfolg nicht umgehend ein. Das RRD file blieb leer und ein Blick in das Cacti log file zeigte:
CMD: bash /home/pi/cacti/pitemp.sh, output: U
Diese Zeile bedeutet, daß bei der Ausführung des Skripts irgendetwas schiefgegangen ist. Leider weiß ich nicht wie man mehr Details zu dem aufgetretenen Fehler rauskriegen kann (für Hinweise wie man das macht wäre ich dankbar). Da das Skript außerhalb von Cacti funktioniert, lohnt es sich hier die Rechtevergabe genauer unter die Lupe zu nehmen. Die Cacti poller.php, welche die einzelnen Skripte zum Daten
sammeln aufruft läuft bei meiner Installation unter dem Benutzer "www-data", ich
habe allerdings an verschiedener Stelle auch schon von anderen Benutzern (z.B. "cactiuser") gelesen. Ein Blick in
die crontab verschafft hier Klarheit.
Es stellte sich das Kommando zum Auslesen der GPU Temperatur als Übeltäter heraus.
sudo -u www-data /opt/vc/bin/vcgencmd measure_temp
VCHI initialization failed
Um die GPU Temperatur mit obigem Kommando auslesen zu können muß der Benutzer, unter welchem die poller.php ausgeführt wird, in die Gruppe "video" aufgenommen werden.
usermod -a -G video www-data
Man sollte seine Skripte also immer unter dem Benutzer testen, welcher auch die poller.php von Cacti ausführt. Ein erneuter Blick in das Cacti log file zeigt nun, daß das Skript korrekt ausgeführt wird.
CMD: bash /home/pi/cacti/pitemp.sh, output: gpu_temp:42.2 cpu_temp:42.2
Wem die GPU Temperatur nicht so wichtig ist, z.B. im headless Betrieb wo die GPU Temperatur wahrscheinlich nie höher als die CPU Temperatur ist, der liest im Skript einfach nur die CPU Temperatur aus, was für alle Benutzer ohne weiteres möglich ist.
Das Ergebnis, noch ohne Overclocking, Pi liegt ohne Gehäuse im Schrank:
 |
Raspberry Pi CPU und GPU Temperatur einer Woche in Cacti (RRDTool) |
Zu Cacti
Das Speichern sowie Konsolidieren der Daten in einer Round Robin Database (RRD) und das Erzeugen der Graphen erfolgt mittels
RRDTool. RRDTool kann auch ohne Cacti benutzt werden. Ich verwende Cacti, da hiermit ein Webinterface für die Administration und die Anzeige der verschiedenen Graphen zur Verfügung steht. Cacti erledigt auch das regelmäßige Polling der verschiedenen Datenquellen (z.B. das hier vorgestellte script) um die darzustellenden Daten einzusammeln und per RRDTool in die Datenbank zu schreiben.
Die Installation von Cacti auf dem Raspberry Pi erfolgt einfach über den Paketmanager, hierzu finden sich viele Anleitung im Netz.