19.02.2014

Raspberry Pi - CPU Temperatur mit Cacti loggen

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.

Keine Kommentare:

Kommentar veröffentlichen