Raspberrymatic – Temperatur des Raspberry abfragen
Und wieder gibt es Neuigkeiten von Jerome. Mit folgendem Code ist es möglich, die Prozessortemperatur des Raspberry abzufragen und als Systemvariable in die WebUI zu übernehmen.
WICHTIG: Das funktioniert nur bei einem Raspberry, nicht bei der CCU1 oder CCU2.
Zuerst muss eine Systemvariable vom Typ „Zahl“ mit der Einheit „° C“ angelegt werden.
CPU Temperatur
Anschließend erstellen wir ein Programm, indem das Script läuft, bzw. ergänzen ein bestehendes Programm, welches zyklisch abläuft. Mir genügen alle 10 Minuten, da das Thema bereits in mehreren Beiträgen besprochen wurde und auch unter Höchstlast im Sommer selten mehr als 65° C erreicht wurden.
Das Script hier muss dann im „DANN“ Bereich eingetragen werden. (Nur bis einschließlich Raspberry 4)
string cmdline = "/usr/bin/vcgencmd measure_temp";
string stdout;
string stderr;
system.Exec(cmdline, &stdout, &stderr);
stdout = stdout.Replace("temp=","");
stdout = stdout.Replace("'C","");
dom.GetObject("CPU Temperatur").State(stdout.ToInteger());
Bei einem Raspberry 5 ist das Script wie folgt: (Danke Daniel)
string temp;
system.Exec(„cat /sys/class/thermal/thermal_zone0/temp | sed ’s/.\{3\}$/.&/'“, &temp);
if(temp != „“) {
dom.GetObject(ID_SYSTEM_VARIABLES).Get(„CPU Temperatur“).State(temp);
}
Wie immer kann als Ergänzung ganz unten getestet werden, welcher Wert zurückgeliefert wird. Hierzu muss am Ende des Scripts folgende Zeile eingefügt und anschließend auf „Ausführen“ geklickt werden.
WriteLine(stdout.ToInteger())
Wenn alles OK ist, dann speichern und je nach Wunsch weiterverarbeiten oder auf der Startseite unter „Benutzerverwaltung“ hinzufügen.
Hier noch ein hilfreicher Beitrag, der das ganze etwas tiefer aufgreift. (https://technikkram.net/2017/10/raspberrymatic-ueberwachung-und-auswertung-der-raspberry-pi3-temperatur)
Hi,
mit dem Raspberry 5 muss das Programm etwas anders aussehen:
string temp;
system.Exec(„cat /sys/class/thermal/thermal_zone0/temp | sed ’s/.\{3\}$/.&/'“, &temp);
if(temp != „“) {
dom.GetObject(ID_SYSTEM_VARIABLES).Get(„CPU Temperatur“).State(temp);
}
Quelle: https://homematic-forum.de/forum/viewtopic.php?f=65&t=82046&start=110
interne system.exec würde ich nicht nutzen sondern auf CUxD umstellen wegen der Stabilität. 😉