Temperatur des Raspberry auf der Kommandozeile auslesen
Als Besitzer eines oder mehrerer Raspberry Pis ensteht sicherlich irgendwann das Interesse an der Überwachung der CPU-Temperatur. Insbesondere, wenn die CPU (vielleicht sogar außerhalb des „erlaubten“ Bereiches) übertaktet wird. Die notwendigen Werkzeuge dazu sind bereits in der Standarddistribution Raspian enthalten. Dennoch führen wie immer mehrere Wege zum Ziel.
Möglichkeit 1
Der Befehl
vcgencmd measure_temp
liefert eine die Temperatur in folgendem Syntax:
root@himbeere:~# vcgencmd measure_temp temp=34.2'C
Der Befehl „vcgencmd“ bietet aber noch mehr Möglichkeiten:
root@himbeere:~# vcgencmd measure_volts volt=1.20V
root@himbeere:~# vcgencmd measure_clock arm frequency(45)=700072000
Möglichkeit 2
Es gibt noch eine einfachere Möglichkeit, die Temperatur auszulesen. Zudem ist das Ausgabeformat deutlich besser geeignet, um in Scripts weiterverarbeitet zu werden:
root@himbeere:~# cat /sys/class/thermal/thermal_zone0/temp 33628
Dividiert man diesen Wert durch Tausend, erhält man die aktuelle Kerntemperatur der Himbeere. Dies in einem kleinen Script zusammengefasst:
#!/bin/bash INPUT=$(awk "BEGIN {print $(/bin/cat /sys/class/thermal/thermal_zone0/temp)/1000}") echo $INPUT
Diese könnte nun beispielsweise in openHAB eingebunden werden, was in diesem Beitrag beschrieben wird.
Einbindung in openHAB (Kurzfassung)
In der Konfigurationsdatei der Items definieren wie ein neues Objekt:
Number TEMP_HIMBEERE "Temperatur Himbeere [%.1f °C]" <temperature> { exec="<[/scripts/rbptemp.sh 60000:REGEX((.*?))]" }
und stellen dies in der Sitemap dar:
Text item=TEMP_HIMBEERE
Sollte, wie in diesem Artikel beschrieben, RRDJ4 eingesetzt werden, kann der Eintrag in der Sitemap auch die Diagramme enthalten:
Text item=TEMP_HIMBEERE { Switch item=CHART_PERIOD label="Zeitspanne" mappings=[0="Stunde", 1="Tag", 2="Woche"] Chart item=TEMP_HIMBEERE period=h refresh=300 visibility=[CHART_PERIOD==0, CHART_PERIOD=="Uninitialized"] Chart item=TEMP_HIMBEERE period=D refresh=1800 visibility=[CHART_PERIOD==1] Chart item=TEMP_HIMBEERE period=W refresh=3600 visibility=[CHART_PERIOD==2] }
Temperatur des Raspberry auf der Kommandozeile auslesen | www.HenryKoch.de
04.10.2016 @ 21:37
[…] Als Besitzer eines oder mehrerer Raspberry Pis ensteht sicherlich irgendwann das Interesse an der Überwachung der CPU-Temperatur. Insbesondere, wenn die CPU (vielleicht sogar außerhalb des “erlaubten” Bereiches) übertaktet wird (weiter lesen) […]
Daniel Wenzel
20.01.2016 @ 05:04
Dann versuch mal folgenden Aufruf:
bash /scripts/rbptemp.sh
Klappt es diesmal?
Michael Langhauser
18.01.2016 @ 11:05
Hallo,
es steht genau das gleiche in der ersten Zeile. Ich habe die Datei mit Notepad++ erstellt. Ich suche weiter muss doch irgendwie funktionieren.
Gruss Michael
Daniel Wenzel
17.01.2016 @ 22:22
Hallo,
schau mal in deinem Script auf die erste Zeile, da scheint was falsch zu sein. Richtig muss es lauten:
#!/bin/bash
Grüße
Michael Langhauser
17.01.2016 @ 18:48
Hallo,
habe es noch einmal versucht und bekomme wenn ich es testen will nach der Eingabe in Putty
/scripts/rbptemp.sh
die Fehlermeldung.
-bash: /scripts/rbptemp.sh: /bin/bash^M: bad interpreter: No such file or directory
Gruss Michael
1techone
24.11.2015 @ 19:27
Suuuuuper, danke ! …..es funktioniert einwandfrei !
Mir fehlt halt das nötige Hintergrundwissen.
Danke für die schnelle Hilfe und die wunderbaren Seiten.
Daniel Wenzel
24.11.2015 @ 17:25
Hallo,
die Meldung
./raspitemp.sh: Zeile 3: bc: Kommando nicht gefunden
sagt mir, dass du den bash-calculator mit
apt-get install bc
installieren musst, weil dieser noch nicht auf deinem System vorhanden ist.
1techone
24.11.2015 @ 15:12
Ich habe vergessen, das wichtigste zu erwähnen.
Es ist alles neu aufgesetzt mit Raspbian-Jessie und Openhab 1.7.1 .
Danach ist alles anders, andere Verzeichnisse usw (zB. die Uhrzeit über NTP bekommen ich auch nicht mehr.)
1techone
24.11.2015 @ 14:29
Leider habe ich noch ein Problem! Ich bekomme es nicht in Openhab eingebunden. Wenn ich das script raspitemp.sh (das ich mit sudo nano eingegeben und durch „chmod +X raspitemp.sh“ ausführbar gemacht habe):
#!/bin/bash
INPUT=$(/bin/cat /sys/class/thermal/thermal_zone0/temp)
echo $INPUT/1000 |bc -l| python -c „print round(float(raw_input()),2)“
ausführen will, kommt folgende Fehlermeldung:
pi@OpenhabPi /// $ ./raspitemp.sh
./raspitemp.sh: Zeile 3: bc: Kommando nicht gefunden.
Traceback (most recent call last):
File ““ line 1, in
EOFError: EOF when reading a line
pi@OpenhabPi /// $
(Leider kann ich keine Bildschirmkopien hier reinkopieren)
Aber der Befehl „./raspitemp.sh“ müsste doch ausführbar sein und so ohne Fehlermeldung laufen, oder?
Wo ist mein Fehler, warum kennt mein Raspi „bc“ nicht ?
1techone
02.11.2015 @ 18:22
es hat geklappt !!
es funktioniert jetzt !!
danke für die tollen Seiten und die schnelle Hilfe.
Daniel Wenzel
02.11.2015 @ 15:31
Eine gute Frage, wo der Fehler lag. Ich vermute, dass beim direkten Kopieren aus dem Beitrag irgendwas schief gegangen ist. Versuch beim nächsten Mal einfach den kleinen Button rechts oben neben dem Quelltext, der das Script in die Zwischenablage kopiert (Copy).
Ansonsten danke für das Lob!
1techone
02.11.2015 @ 13:43
Hallo,
pi@raspberrypi ~ $ sudo nano /scripts/rbptemp.sh
pi@raspberrypi ~ $ sudo chmod +x /scripts/rbptemp.sh
>>>>>> ich habe das Leerzeichen entfernt und Klammern gesetzt,
ergebnis:
pi@raspberrypi ~ $ /scripts/rbptemp.sh
File „“, line 1
“print
^
SyntaxError: invalid syntax
pi@raspberrypi ~ $ sudo nano /scripts/rbptemp.sh
pi@raspberrypi ~ $ sudo chmod +x /scripts/rbptemp.sh
>>>>>Daraufhin habe ich alles gelöscht und jede Zeile des Scrips einzeln kopiert und eingefügt. Das Ergebnis:
pi@raspberrypi ~ $ /scripts/rbptemp.sh
41.16
pi@raspberrypi ~ $
>>>>>>Es funktioniert perfekt, warum!?! :-)
>>>>>>Vorher hatte ich immer das gesamte Script:
#!/bin/bash
INPUT=$(/bin/cat /sys/class/thermal/thermal_zone0/temp)
echo $INPUT/1000 |bc -l| python -c “print round(float(raw_input()),2)”
>>>>>>als ganzes kopiert und eingefügt, nun habe ich Zeile für Zeile kopiert und eingefügt. Kann dadurch der Fehler entstanden sein?
Wie dem auch sei, es funktioniert nun einwandfrei, danke !!
[ man will ja gerne aus seinen Fehlern lernen, wenn man nur weiss, woran das Scheitern lag :-) !! ]
Nochmals danke für die tollen Seiten und die schnelle Hilfe.
Daniel Wenzel
02.11.2015 @ 12:41
Ich denke der Fehler lässt sich mit dem entfernen des Leerzeichens zwischen dem $ und der öffnenden Klammer beheben.
Die Klammern müssen aber auf jeden Fall mit angegeben werden.
Melde dich, obs geklappt hat oder nicht, dann sehen wir weiter.
1techone
02.11.2015 @ 12:36
Hallo,
ich bekomme das Script auf einem PI2 nicht zum Laufen.
Bei mir kommt die Fehlermeldung, dass das Wort „(“ ein Syntaxfehler ist.
siehe Kopie der Ausgaben:
Mit einem RaspiPi 2 auf dem Openhab einwandfrei läuft:
pi@raspberrypi ~ $ /scripts/rbptemp.sh
/scripts/rbptemp.sh: Zeile 2: Syntaxfehler beim unerwarteten Wort `(‚
/scripts/rbptemp.sh: Zeile 2: `INPUT=$ (/bin/cat /sys/class/thermal/thermal_zone0/temp)‘
Da Fehlermeldung Zeile 2 geändert: „(„ und “)“ entfernt
pi@raspberrypi ~ $ sudo nano /scripts/rbptemp.sh
geändert in:>>> INPUT=$/bin/cat /sys/class/thermal/thermal_zone0/temp
pi@raspberrypi ~ $ sudo chmod +x /scripts/rbptemp.sh
Ergebnis:
pi@raspberrypi ~ $ /scripts/rbptemp.sh
41160
/scripts/rbptemp.sh: Zeile 3: Syntaxfehler beim unerwarteten Wort `(‚
/scripts/rbptemp.sh: Zeile 3: `echo $INPUT/1000 |bc -l| python -c “print round(float(raw_input()),2)”‘
Zeile 2 scheint zu funktionieren, aber Zeile 3 nicht (ist nicht durch 1000 geteilt worden)
Warum wird das „Wort `(` “ als Syntaxfehler angezeigt?
Kann jemand mir nach diesen Angaben weiterhelfen?
Danke für die schönen Seiten!
Daniel Wenzel
18.04.2015 @ 10:26
Hallo,
ich habs grad getestet und diese Anleitung funktioniert auch mit einem Raspberry 2.
Erstelle zum Beispiel im ordner „/scripts/“ eine neue Datei, hier im Beispiel die „rbptemp.sh“.
Das geht z.B. mit dem Texteditor „nano“ ->
mkdir /scripts/
nano /scripts/rbptemp.sh
Dann fügst du das Script aus der Anleitung ein:
#!/bin/bash
INPUT=$(/bin/cat /sys/class/thermal/thermal_zone0/temp)
echo $INPUT/1000 |bc -l| python -c „print round(float(raw_input()),2)“
Mit der Tastenkombination STRG+X verlässt du nano wieder. Vorher fragt er dich, ob du die
Änderungen speichern willst. Dann erlaubst du im Anschluss die Ausführung des neuen Scripts:
chmod +x /scripts/rbptemp.sh
Sollte das Tool „bc“ auf deinem System nicht installiert sein, kannst du das nachholen mit:
apt-get install bc
Jetzt kannst du das Script testen mit:
/scripts/rbptemp.sh
und anschließend wie in der Anleitung gezeigt in openHAB einbinden. So wie ich es jetzt beschrieben
habe ist Bedingung, dass openHAB auf dem Raspberry läuft, von dem auch die Temperatur ausgelesen werden
soll. Für ein entferntes System würde das Ganze noch ergänzt werden müssen.
Ich hoffe, geholfen haben zu können.
Michael Langhauser
17.04.2015 @ 20:23
Hallo,
ich versuche die Temperatur eines Raspberry Pi 2 in Openhab anzuzeigen was muss in die Datei rbptemp.sh kopiert werden. Ich bin Anfänger in Openhab und verstehe die Anleitung nicht so richtig. Ansonsten habe ich schon vieles gelernt. Danke für diese Webseite.
Gruss Michael
MarZ
29.12.2014 @ 23:56
Mit vcgencmd lassen sich sehr viele Werte auslesen.
Ich hab mal ein kleines Script für Nagios / check_mk geschrieben.
https://github.com/imbaMarZ/raspberrypi/tree/master/check_mk