Hallo liebe Leserinnen und Leser!
[Update 14.12.2014] Leider habe ich mit dem ursprünglich veröffentlichten Script fälschlicherweise die Temperatur des PMU (Power Management Unit) ausgelesen, statt der SOC-Temperatur (also der CPU-Temperatur). Ich habe daher den Artikel nocheinmal komplett überarbeitet.
Heute möchte ich euch kurz zeigen, wie ihr die SOC (=CPU)- und PMU-Temperatur eures Banana Pi auslesen könnt und wie ihr euch bei einem Überschreiten einer vorher festgelegten Grenztemperatur benachrichtigen lassen könnt. Als OS setze ich auch hier wieder das schlanke Bananian ein.
1. Auslesen der SOC- und PMU-Temperatur über das Terminal
Bananian hat die Funktionen zum Auslesen der SOC- und PMU-Temperatur bereits standardmäßig implementiert. Die Temperaturen lassen sich daher sehr einfach über das Terminal abrufen. Die Befehle müssen jeweils mit Root-Rechten ausgeführt werden.
Der Befehl für die SOC-Temperatur (=CPU-Temperatur) lautet:
1 | soctemp |
Der Befehl für die PMU-Temperatur lautet:
1 | pmutemp |
2. (Python-) Script zur Mail-Benachrichtigung bei hoher SOC- oder PMU-Temperatur
Analog zum Python-Script vom Raspberry Pi habe ich auch für den Banana Pi wieder ein entsprechendes Script zur automatisierten Benachrichtigung per Mail bei erhöhten CPU-Temperaturen erstellt.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #!/usr/bin/env python # -*- coding: utf-8 -*- import os import smtplib import time from email.mime.text import MIMEText day = repr(time.localtime()[2]) + "."+repr(time.localtime()[1])+"."+repr(time.localtime()[0]) zeit = repr(time.localtime()[3]) + ":" + repr(time.localtime()[4]) + ":"+ repr(time.localtime()[5]) def getSOCtemperature(): res = os.popen('soctemp').readline() return(res.replace("approx. ","").replace("°C\n","")) temp_float = float(getSOCtemperature()) if (temp_float > 50): server = smtplib.SMTP('smtp.web.de', 587) server.ehlo() server.starttls() server.ehlo() server.login("sender", "sender_pw") value = "Die aktuelle SOC-Temperatur des Banana Pi liegt bei "+ str(temp_float)+" Grad Celsius.\n Zeit: "+zeit+ " am " + day msg = MIMEText(value) msg['Subject'] = "[Warnung] Temperatur "+ str(temp_float)+" Grad!" msg['From'] = "BPi Temperatur" server.quit() |
In der if-Schleife könnt ihr den gewünschten Schwellwert anpassen, ab dem ihr benachrichtigt werden wollt. Erfahrungsgemäß bleibt der Banana Pi relativ kühl im Idle-Betrieb, sodass die 50°C wie hier gewählt wohl nie erreicht werden. Die Wahl eines niedrigeren Werts macht also wahrscheinlich je nach Anwendungsfall mehr Sinn. Natürlich müsst ihr auch noch die Mail-Daten anpassen, damit es funktionstüchtig ist.
Speichert das Script unter dem Namen „temperature_soc.py“ auf eurem Banana Pi. Um das Script aufrufen zu können, benötigt ihr wieder Root-Rechte. Der Aufruf erfolgt also über sudo python temperature_soc.py.
Um die gleiche Funktion für die PMU-Temperatur zu realisieren, habe ich auch hierzu ein kleines Python-Script geschrieben:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #!/usr/bin/env python # -*- coding: utf-8 -*- import os import smtplib import time from email.mime.text import MIMEText day = repr(time.localtime()[2]) + "."+repr(time.localtime()[1])+"."+repr(time.localtime()[0]) zeit = repr(time.localtime()[3]) + ":" + repr(time.localtime()[4]) + ":"+ repr(time.localtime()[5]) def getPMUtemperature(): res = os.popen('pmutemp').readline() return(res.replace("approx. ","").replace("°C\n","")) temp_float = float(getPMUtemperature()) if (temp_float > 50): server = smtplib.SMTP('smtp.web.de', 587) server.ehlo() server.starttls() server.ehlo() server.login("sender", "sender_pw") value = "Die aktuelle PMU-Temperatur des Banana Pi liegt bei "+ str(temp_float)+" Grad Celsius.\n Zeit: "+zeit+ " am " + day msg = MIMEText(value) msg['Subject'] = "[Warnung] Temperatur "+ str(temp_float)+" Grad!" msg['From'] = "BPi Temperatur" server.quit() |
Die Anwendung dieses Scripts über das Terminal ist analog zum oben aufgeführten Script. Speichert also das Script unter dem Namen „temperature_pmu.py“ auf eurem Banana Pi. Um das Script aufrufen zu können, benötigt ihr wieder Root-Rechte. Der Aufruf erfolgt also über sudo python temperature_pmu.py.
Zusätzlich macht es natürlich hier Sinn, diese Scripte via cron automatisiert aufrufen zu lassen, um eine regelmäßige, automatisierte Überwachung eures Banana Pi zu realisieren.
Bei Fragen, Problemen oder Anregungen könnt ihr natürlich wie immer das Kommentarfeld unter diesem Artikel benutzen.
Viel Erfolg bei der Umsetzung!
Moin,
ich habe folgende Fehlermeldungen nach Aufruf des Scriptes:
[email protected] ~ # python temperature_soc.py
sh: 1: sudo: not found
Traceback (most recent call last):
File „temperature_soc.py“, line 12, in
temp_float = float(getSOCtemperature())
ValueError: could not convert string to float:
Hi,
da ist mein Python-Script etwas ungünstig entworfen. Ich habe die „sudo“s rausgeworfen, da man das Script ja sowieso mit Root-Rechten aufrufen muss und es bei fehlender sudo-Installation so zu Fehlern kommen konnte.
Jetzt sollte das Script (hoffentlich) funktionieren. Sorry für den Fehler!
Hintergrund: Ich habe neben dem Standard-Nutzer noch einen Nutzer „pi“ samt sudo angelegt. Normalerweise ist sudo aber bei bananian nicht dabei, daher der Fehler bei dir.
Jetzt läuft es. Danke schön.
Hi,
in welchem Paket/en befidnen sich die Tools pmutemp & soctemp?
Ein ‚apt-cache search soctemp‘ brachte nichts zu Tage.
=========================================================
Hach ja … warum nicht einfach mal Google anschmeissen …
https://github.com/Bananian/bananian/tree/master/tools
Ich habe Raspian anstatt Bananian auf meiner Banane.
Da fehlen diese Tools natuerlich.
=========================================================
Gut.
Das ist auf Rasbian so nicht ohne weiteres uebertragbar.
Dem Kernel scheinen die Module zu fehlen.
Demnach kann man davon ausgehen, dass es ein Bananian-Weg ist, die Temperaturen auszulesen und ich muss mir andere Wege suchen. ;)
Dennoch super Script!
Hi hirnwunde,
ja richtig, die beiden Scripte werden nur bei Bananian direkt mitgeliefert. Unter Raspbian müssten sich die Temperaturen aber auch auslesen lassen, nur damit habe ich mich bislang noch nicht beschäftigt ;)
Hi,
wie kann ich mit bananian einen python script ausführen?
Konsole gibt nur zurück: command not found.
Wenns dann funktioniert, kann ich den script aus der rc.local ausführen?
Hallo Artemis,
das Script erst auf dem Banana Pi unter gewünschten Namen (z.B. „temperature_soc.py“) speichern und dann über „sudo python temperature_soc.py“ (sofern installiert und ein anderer Nutzer als root verwendet wird) bzw. „python temperature_soc.py“ aufrufen.
Wie das mit der rc.local aussieht, weiß ich nicht, aber als cronjob lässt es sich zumindest problemlos ausführen. Wenn es nur zum Systemstart gestartet werden soll, sollte natürlich noch eine Unendlich-Schleife mit Unterbrechungsintervallen für die Abfragen im Script ergänzt werden.
Hi Alex, danke für das Tutorial. Bin kurz davor, mir einen Banana Pi zu kaufen. Leider finde ich keinerlei Infos, wie heiß das Gerät so üblicherweise im Gehäuse (Allnet Banana Pi Box) wird. Hast Du Erfahrungswerte?
Hey harpooneer,
der Banana Pi wird bei mir in diesem Gehäuse nicht sehr warm. PMU liegt z.B. gerade (idle) bei knapp 30°C, der SOC bei knapp 35°C.
Hallo,
bekomme immer den Fehler, das der String nicht in den Float geschrieben werden kann. Warum?
sudo python /media/smb/t.py
Traceback (most recent call last):
File „/media/smb/t.py“, line 15, in
temp_float = float(getSOCtemperature())
ValueError: invalid literal for float(): 40.7?
Scheint so als würde ein Zeichen nicht entfernt werden…
Hi Fighter232,
ich habe meinen Banana Pi leider gerade nicht hier und kann dir erst am Montag eine „richtige“ Antwort geben. So wie es aussieht wird noch ein „?“ nach dem Temperaturwert übergeben, was er natürlich nicht in eine Zahl umwandeln kann. Woher das kommt kann ich gerade nicht sagen – da muss ich dann auf meinem Banana Pi erst einmal selbst nachsehen.
Nutzt du die aktuelle Version von Bananian oder eine vorherige?
Hallo nochmal,
habe es gerade auf meinem Banana Pi getestet – das Script funktioniert hier nach wie vor.
Hast du evtl. das utf8-Encoding oben vergessen?
Großartiges Tutorial! Aber eine Frage hätte ich noch: braucht man das oder fährt der Banana Pu automatisch runter, wenn er zu warm wird (wie der Raspberry)?
Danke!
Hallo Zippi,
gute Frage – das weiß ich jetzt selbst nicht. Bisher hatte ich noch keine derartigen Temperaturprobleme, dass er instabil wurde oder sich gar heruntergefahren hat. Ob er das wie der Raspberry macht, müsste ich erst mal recherchieren.
Fazit nach den heißen Sommertagen: brauche ich auf meinem Banana Pi nicht, er bleibt weiterhin relativ kühl.
Hallo Obelix,
ja – meine Banane wurde auch nicht wirklich heiß, solange diese nicht stark ausgelastet ist, sollte man das Script auch eigentlich nicht brauchen. Falls aber doch mal ein Prozess die CPU auslastet und warm laufen lässt, ist es mMn doch recht praktisch ;)
Hallo Alexander,
bei mir funktionieren beide Skript nicht. ich bekommen folgenden Meldung:
~$ sudo python temperature_soc.py
sudo: Hostname bpi02 kann nicht aufgelöst werden
sh: 1: soctemp: not found
Traceback (most recent call last):
File „temperature_soc.py“, line 15, in
temp_float = float(getSOCtemperature())
ValueError: could not convert string to float:
ich habe hier einen Banana pi M3
Hallo Jochen,
nutzt du Bananian? Das Programm „soctemp“ gibt es m.W.n. nur dafür.