Aktuelle Temperatur eines Raspi, laufendes Update einer Zeile

temperatur eines raspberry laufend anzeigen

Wenn man wissen will, wie heiß die CPU eines Raspberry it, kann man sich einfach den Inhalt der Datei /sys/class/thermal/thermal_zone0/temp anzeigen lassen.

Das liefert die Temperatur in °C multipliziert mit 1000 als Ganzzahl.

Den Wert würde ich mir gerne in einem Terminal-Fenster oder per SSH anzeigen lassen, aber mit einer Stelle nach dem Komma und immer in der gleichen Zeile. Also ohne das sich der Bildschirm füllt.

Da gibt es zwei Probleme:
1. Wie überschreibe ich eine Zeile?
2. Wie rechne ich in der Kommandozeile / bash?

Nun, in bash kann man den Cursor bewegen, also auch nach links verschieben, bis man wieder am Anfang der Zeile ist.
Das ist hier beschrieben: https://tldp.org/HOWTO/Bash-Prompt-HOWTO/x361.html

\033[33D schiebt den Cursor also 33 Stellen nach links.
Aber Achtung, das funktioniert nicht, wenn man es in doppelte Anführungszeichen stellt! echo -ne "\033[33D" funktioniert also nicht.
Daher habe ich die Ausgabe des Wertes und das Verschieben des Cursor in zwei separaten Zeilen.

Um die Temperatur mit einer Nachkommastelle auszugeben, müssen wir ein wenig tricksen, denn bash kann nicht mit Floating Point Variablen umgehen. In bash ist alles Integer.

Wie man trotzdem mit Kommazahlen rechnet, ist hier erklärt: https://www.shell-tips.com/bash/math-arithmetic-calculation/

Ich habe mich für die printf-Methode entschieden.
printf "%.1f" "$((10**3 * 45874/1000))e-3" würde 45,9 ausgeben.

Die seltsame Konstruktion mit 10**3 und e-3 sorgt dafür, das 3 Stellen nach dem Komme berechnet werden (auch wenn davon nur eine angezeigt wird. Ansonsten ergibt 45874/1000 nämlich glatte 45.

Letztendlich kommt folgendes Skript dabei heraus, das ich als temp gespeichert habe. Nicht vergessen, es mit chmod a+x temp ausführbar zu machen.

#!/bin/bash
up="\[\033[1A\]\[\033[5D\]"
while true; do
temp=`cat /sys/class/thermal/thermal_zone0/temp`
printf "Aktuelle CPU Temperatur: %.1f °C" "$((10**3 * $temp/1000))e-3"
echo -ne '\033[33D'
sleep 1
done

 

Lass andere teilhaben...

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.