Moin,
Sysmon zeigt nach fhem-umzug keine temp's auf einem frischne debian. woran kann das liegen?
Infos liefer ich gerne, wüsste nur aus dem stand nicht was ich noch angeben sollte
Hi!
SYSMON liest CPUTemp mit folgenen Befehlen aus:
1. (RPI etc.):
cat /sys/class/thermal/thermal_zone0/temp
2. (BeagleBoneBlack, etc.):
cat /sys/class/hwmon/hwmon0/device/temp1_input
3. (FritzBox):
ctlmgr_ctl r cpu status/StatTemperature
Wie bekommt man die Daten auf (d)einer Z-Box?
mm ist ein ganz normaler pc mit intel celeron und intel chipsatz,
Zitatroot@SRV01:~# ls /sys/class/hwmon/hwmon0
device power subsystem uevent
unter /sys/class/hwmon/hwmon0/device/
Zitatroot@SRV01:~# ls /sys/class/hwmon/hwmon0/device/
driver temp2_crit temp3_crit_alarm temp4_input temp5_label
hwmon temp2_crit_alarm temp3_input temp4_label temp5_max
modalias temp2_input temp3_label temp4_max uevent
name temp2_label temp3_max temp5_crit
power temp2_max temp4_crit temp5_crit_alarm
subsystem temp3_crit temp4_crit_alarm temp5_input
liegen die ganzen infos wohl. tempX_..... X = core's mit 2 beginnend 2 = core 1 , 3 = core 2 , 4 = core 3 , 5 = core 4
ein cat /sys/class/hwmon/hwmon0/device/temp2_crit ergibt dann zum beispiel 105000
Zitattemp2_crit = crit-temp zb 105000 = 105.0 °C
temp2_input = die aktuelle temp zb 50000 = 50.0 °C
temp2_label = name zb Core 0
temp2_max = ????? zb 105000 = 105.0 °C
habe mir lm sensors installiert. die sensoren werden als Intel digital thermal sensor (driver `coretemp') erkannt.
eine abfrage der temp erfolgt dann so
Zitatroot@SRV01:~# sensors
coretemp-isa-0000
Adapter: ISA adapter
Core 0: +50.0°C (high = +105.0°C, crit = +105.0°C)
Core 1: +50.0°C (high = +105.0°C, crit = +105.0°C)
Core 2: +50.0°C (high = +105.0°C, crit = +105.0°C)
Core 3: +49.0°C (high = +105.0°C, crit = +105.0°C)
root@SRV01:~#
ich hab da im Hauptthread doch mal meinen Code geposted:
user-fn sensorCPU:1:cpu0_temp:cpu1_temp:cpu2_temp:cpu3_temp
und dann in der myUtils:
## CPU-Temperatur
sub sensorCPU()
{
my ($hash) = @_;
my $val;
my @val_txt;
for(my $i = 2; $i < 6; $i++){
$val = SYSMON_execute($hash, "cat /sys/devices/platform/coretemp.0/hwmon/hwmon0/device/temp" . $i ."_input 2>&1");
$val = int($val);
push( @val_txt, sprintf("%.2f", $val/1000) . "°C");
}
return @val_txt;
}
Es kann auch sein, dass der Befehl cat /sys/devices/platform/coretemp.0/hwmon/hwmon0/temp" . $i ."_input 2>&1 sein muss, war bei franky so
hier würdest du dich aber auf max 4 kerne festlegen wie ich das sehe. die anzahl der cores ließt sysmon ja bereits aus und müsste damit variable auch in
/sys/devices/platform/coretemp.0/hwmon/hwmon0/device/temp_XXX die werte lesen können.
statt
for(my $i = 2; $i < 6; $i++)
wäre denke ich sowas wie
my $cores = [anzahl aller kerne] + 2
for(my $i = 2; $i <= $cores; $i++)
besser (in hinblick auf systeme mit 6 oder 8 cores)
das wär flexiebler ja.
Aber da das ja so und so in die myUtils kommt, da es ja userdefinierte readings sind, muss das halt jeder selbst anpassen :)
Problem ist auch, dass es seitens Sysmon (noch?) nicht möglich ist, diesen Funktionen werte zu übergeben.
Zitat von: Kuzl am 20 März 2015, 08:15:07
$val = SYSMON_execute($hash, "cat /sys/devices/platform/coretemp.0/hwmon/hwmon0/device/temp" . $i ."_input 2>&1");
Kleiner Hinweis: Perl hat einen sehr gut funktionierenden Befehl, um eine Datei zu öffnen. Nennt sich "open()".
"cat" zu starten, nur um aus einer Datei einen Integer-Wert auszulesen, ist ein bisschen sehr ineffizient.
Hab ich noch gar nicht gekannt. Macht cat nicht im prinzip das gleiche? Naja egal die zbox hat ja genug power :)
cpu_freq bekommt sysmon auch (noch) nicht hin. sapnnung wäre auch toll wenn mans auslesen kann
Zitat von: smurfix am 20 März 2015, 10:54:02
Kleiner Hinweis: Perl hat einen sehr gut funktionierenden Befehl, um eine Datei zu öffnen. Nennt sich "open()".
"cat" zu starten, nur um aus einer Datei einen Integer-Wert auszulesen, ist ein bisschen sehr ineffizient.
Das ist richtig, SYSMON macht das an allen stellen so. Das Problem ist, die Befehle werden aber ggf. auch auf Remote-System gesendet. Da wird mit dem open() nichts. Eine gezielte Unterscheidung einzubauen wäre aufwendig.
Zitat von: Kuzl am 20 März 2015, 08:34:02
Problem ist auch, dass es seitens Sysmon (noch?) nicht möglich ist, diesen Funktionen werte zu übergeben.
Kannst ja so angeben:
{MyMethod('MyParam')}:1:ReadingName
für mich ist eigentlich nur die frage:
- wird sysmon mehr als 2 kerne bei freq unterstützen und wird es das auslesen der temp unterstützen?
beides ist denke ich sinnvoll da die zbox nicht das einizige system mit "normaler" hardware ist welches mit debian als fhem-server dient
Bei mir liefert SYSMON auf Ci320 mit Ubuntu Server 14.04 cpu1_freq und cpu_freq. lm-sensors ist nicht installiert. Für cpu_temp0-3 habe ich folgendes:
user-defined
cpu_temp0:1:CPU Temperatur:cat /sys/devices/platform/coretemp.0/temp2_input|cut -b1-2,cpu_temp1:1:CPU Temperatur:cat /sys/devices/platform/coretemp.0/temp3_input|cut -b 1-2,cpu_temp2:1:CPU Temperatur:cat /sys/devices/platform/coretemp.0/temp4_input|cut -b1-2,cpu_temp3:1:CPU Temperatur:cat /sys/devices/platform/coretemp.0/temp5_input|cut -b1-2
MfG
hole mir nun die temps auch per user-defined...
cpu_temp0:1:CPU Temperatur:cat /sys/class/hwmon/hwmon0/device/hwmon/hwmon0/temp2_input|cut -b1-2,cpu_temp1:1:CPU Temperatur:cat /sys/class/hwmon/hwmon0/device/hwmon/hwmon0/temp3_input|cut -b1-2,cpu_temp2:1:CPU Temperatur:cat /sys/class/hwmon/hwmon0/device/hwmon/hwmon0/temp4_input|cut -b1-2,cpu_temp3:1:CPU Temperatur:cat /sys/class/hwmon/hwmon0/device/hwmon/hwmon0/temp5_input|cut -b1-2,
bekomm ich irgendiwe die ausgabe von
cpu2_freq:1:CPU Temperatur Core3:cat /sys/devices/system/cpu/cpu2/cpufreq/scaling_cur_freq,cpu3_freq:1:CPU Temperatur Core4:cat /sys/devices/system/cpu/cpu2/cpufreq/scaling_cur_freq
,zb 499813, in user-defined so formtiert das immer alles ausgegeben wird was vor den letzten 3 ziffern steht (also die zahl mit 3 nachkommastellen und disese dann weglassen)
Holt euch die letzte SYSMON-Version aus SVN (oder eben morgen per Update). Dann sollten Frequenz für bis zu 8 CPU-Cores angezeigt werden. Wäre nett, wenn jemand testet. Mein System hat nur 2 CPUs ;)
gerade mal gezogen.
Zitat
cpu1_freq 499 2015-03-23 06:21:00
cpu2_freq 708 2015-03-23 06:21:00
cpu3_freq 499 2015-03-23 06:21:00
cpu_freq 499 2015-03-23 06:21:00
scheint zu funktionieren, danke dir!
ich würde allerdings aus cpu_freq cpu
0_freq machen. die sortierung in den readings sieht sonst doof aus (und die wenigen mit einem kern können sicher mit der 0 leben).
wenn du jetzt noch die cpu-temp für aller kerne einbindest wäre das top!
habe darüber auch schon nachgedacht. Aber wenn ich das ändere, wird bestimmt jemand damit unglücklich. Evtl. belasse ich beide.
Wie bekomme ich Temperatur für die einzelene Kerne?
die temps hole ich mit aktuell in sysmon per user-definde so
Zitatcpu_temp0:1:CPU Temperatur:cat /sys/class/hwmon/hwmon0/device/hwmon/hwmon0/temp2_input|cut -b1-2,
cpu_temp1:1:CPU Temperatur:cat /sys/class/hwmon/hwmon0/device/hwmon/hwmon0/temp3_input|cut -b1-2,
cpu_temp2:1:CPU Temperatur:cat /sys/class/hwmon/hwmon0/device/hwmon/hwmon0/temp4_input|cut -b1-2,
cpu_temp3:1:CPU Temperatur:cat /sys/class/hwmon/hwmon0/device/hwmon/hwmon0/temp5_input|cut -b1-2
49 °C werden in der datei so dargestellt 49000, also 3 nachkommastellen quasi
ZitatAber wenn ich das ändere, wird bestimmt jemand damit unglücklich.
mmm. evtl eine prüfung rein? wenn nur ein core cpu_freq und cpu_temp, wenn mehr cpu0 usw
Kann ich einbauen. Was mich ein wenig irretiert, ist dass hwmon/hwmon0 zwei mal vorkommt. In Sysmon ist ja derzeit nur folgendes ingebaut: cat /sys/class/hwmon/hwmon0/device/temp1_input
Müssen die Pfade nicht /sys/class/hwmon/hwmon0/device/temp2_input heißen (bzw sind diese evtl. gleichwertig)? Kannst Du mal ausprobieren?
funktioniert das hier?
zeigt keine temps an.
zum pfad. ich habe gerade gesehen das die hwmon-verzeichnisse nur verknüpfungen zu
/sys/devices/platform/coretemp.0/hwmon/hwmon0
sind. darunter liegen dann wirklich die files temp2_input
hm... schade, dann hoffentlich das hier... Blöd zu testen, wenn man die Hardware nicht selbst hat ;)
Die Links zu nutzen ist allerdings schon sinnvoll, soweit ich weis, diese sind dafür da, damit die auf verschiedenen Maschinen gleich bleiben.
leider noch nicht. allerdings scheint das auslesen zu klappen. anbei verbose 5 aus dem log
Zitat2015.03.26 21:41:10 5: SYSMON SysMon: Exec_Local.3771 Execute '[ -f /sys/class/hwmon/hwmon0/device/hwmon/hwmon0/temp2_input ] && echo 1 || echo 0'
2015.03.26 21:41:10 5: SYSMON SysMon: Set.702 SysMon ?
2015.03.26 21:41:10 5: SYSMON SysMon: Get.620 SysMon ?
2015.03.26 21:41:10 5: SYSMON SysMon: Exec_Local.3784 Result '1'
2015.03.26 21:41:10 5: SYSMON SysMon: Exec_Local.3771 Execute 'cat /sys/class/hwmon/hwmon0/device/hwmon/hwmon0/temp2_input 2>&1'
2015.03.26 21:41:10 5: SYSMON SysMon: Exec_Local.3784 Result '50000'
2015.03.26 21:41:10 5: SYSMON SysMon: Exec_Local.3771 Execute '[ -f /sys/class/hwmon/hwmon0/device/hwmon/hwmon0/temp3_input ] && echo 1 || echo 0'
2015.03.26 21:41:10 5: SYSMON SysMon: Exec_Local.3784 Result '1'
2015.03.26 21:41:10 5: SYSMON SysMon: Exec_Local.3771 Execute 'cat /sys/class/hwmon/hwmon0/device/hwmon/hwmon0/temp3_input 2>&1'
2015.03.26 21:41:10 5: SYSMON SysMon: Exec_Local.3784 Result '50000'
2015.03.26 21:41:10 5: SYSMON SysMon: Exec_Local.3771 Execute '[ -f /sys/class/hwmon/hwmon0/device/hwmon/hwmon0/temp4_input ] && echo 1 || echo 0'
2015.03.26 21:41:10 5: SYSMON SysMon: Exec_Local.3784 Result '1'
2015.03.26 21:41:10 5: SYSMON SysMon: Exec_Local.3771 Execute 'cat /sys/class/hwmon/hwmon0/device/hwmon/hwmon0/temp4_input 2>&1'
2015.03.26 21:41:10 5: SYSMON SysMon: Exec_Local.3784 Result '51000'
2015.03.26 21:41:10 5: SYSMON SysMon: Exec_Local.3771 Execute '[ -f /sys/class/hwmon/hwmon0/device/hwmon/hwmon0/temp5_input ] && echo 1 || echo 0'
2015.03.26 21:41:11 5: SYSMON SysMon: Exec_Local.3784 Result '1'
2015.03.26 21:41:11 5: SYSMON SysMon: Exec_Local.3771 Execute 'cat /sys/class/hwmon/hwmon0/device/hwmon/hwmon0/temp5_input 2>&1'
2015.03.26 21:41:11 5: SYSMON SysMon: Exec_Local.3784 Result '51000'
2015.03.26 21:41:11 5: SYSMON SysMon: Exec_Local.3771 Execute '[ -f /sys/class/hwmon/hwmon0/device/hwmon/hwmon0/temp6_input ] && echo 1 || echo 0'
2015.03.26 21:41:11 5: SYSMON SysMon: Exec_Local.3784 Result '0'
2015.03.26 21:41:11 5: SYSMON SysMon: Exec_Local.3771 Execute '[ -f /sys/class/hwmon/hwmon0/device/hwmon/hwmon0/temp7_input ] && echo 1 || echo 0'
2015.03.26 21:41:11 5: SYSMON SysMon: Exec_Local.3784 Result '0'
2015.03.26 21:41:11 5: SYSMON SysMon: Exec_Local.3771 Execute '[ -f /sys/class/hwmon/hwmon0/device/hwmon/hwmon0/temp8_input ] && echo 1 || echo 0'
2015.03.26 21:41:11 5: SYSMON SysMon: Exec_Local.3784 Result '0'
Result '50000' sieht ja schon ganz gut aus, nur werden die readings nicht erzeugt
aber jetzt ;)
;) Daumen hoch
cpu_freq ist denke ich mal qus konpatibilitätsgründen zu 1 kernern noch enthalten.
allerdings gibt es eine cpu1-4_freq und cpu1-4_temp(_avg) aber keine cpu_temp / cpu0_temp zu cpu_freq /cpu0_freq.
evtl sollte man hier überlegen ob man bei 0 oder 1 anfängt zu zählen.
ansonsten scheints zu laufen
Es sollte eigentlich auch mit 0 anfangen.
noch nicht ganz. cpu4_freq fehlt und cpu0_freq/cpu_freq wären dann überflüssig
Die Readings ohne Zahl lasse ich erstmal drin, auch wenn dies dann doppelt ist.
Ansonsten sollte die Numerierung von 0 bis 7 gehen.
Klappt bei dieser Version?
es fehlt 4_freq
Nö, es fehlt 0_temp und 4_temp ist zu viel. :)
Ich muss mal heute Abend sehen, warum.
Zitat von: chris1284 am 24 März 2015, 06:08:24
cpu_temp0:1:CPU Temperatur:cat /sys/class/hwmon/hwmon0/device/hwmon/hwmon0/temp2_input|cut -b1-2,
cpu_temp1:1:CPU Temperatur:cat /sys/class/hwmon/hwmon0/device/hwmon/hwmon0/temp3_input|cut -b1-2,
cpu_temp2:1:CPU Temperatur:cat /sys/class/hwmon/hwmon0/device/hwmon/hwmon0/temp4_input|cut -b1-2,
cpu_temp3:1:CPU Temperatur:cat /sys/class/hwmon/hwmon0/device/hwmon/hwmon0/temp5_input|cut -b1-2
Was ich nicht verstehe, warum hir die Zählung mit 2 anfängt? Und bei 1 liegt kein Sensor? Hier kann man schwer etwas allgemeingültiges aufbauen... ???
kann ich nicht beurteilen. wenn man danach googled findet man immder direkt leute die die cpu-remp auslesen wollen und die fangen bei 2 an.
dazu steck ich aber nicht tief genug in der linuxmaterie
Moin,
ich denke das hängt mit den Daten zusammen, die der Prozessor liefert. Hier drei Rechner, unterschiedliche CPU, gleiches Betriebssystem:
ralf@server:~$ dmesg | grep smpboot ; uname -a ; cd /sys/class/hwmon/hwmon0/device ; ls ; cat temp?_label
[ 0.000000] smpboot: Allowing 4 CPUs, 0 hotplug CPUs
[ 0.060543] smpboot: CPU0: Intel(R) Core(TM) i3-4130T CPU @ 2.90GHz (fam: 06, model: 3c, stepping: 03)
[ 0.103646] smpboot: Total of 4 processors activated (23193.29 BogoMIPS)
Linux server 3.13.0-48-generic #80-Ubuntu SMP Thu Mar 12 11:16:15 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
driver power temp1_input temp2_crit_alarm temp3_crit temp3_max
hwmon subsystem temp1_label temp2_input temp3_crit_alarm uevent
modalias temp1_crit temp1_max temp2_label temp3_input
name temp1_crit_alarm temp2_crit temp2_max temp3_label
Physical id 0
Core 0
Core 1
ralf@backup:~$ dmesg | grep smpboot ; uname -a ; cd /sys/class/hwmon/hwmon0/device ; ls ; cat temp?_label
[ 0.000000] smpboot: Allowing 4 CPUs, 0 hotplug CPUs
[ 0.095390] smpboot: CPU0: Intel(R) Atom(TM) CPU D2550 @ 1.86GHz (fam: 06, model: 36, stepping: 01)
[ 0.247857] smpboot: Total of 4 processors activated (14932.64 BogoMIPS)
Linux backup 3.13.0-48-generic #80-Ubuntu SMP Thu Mar 12 11:16:15 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
driver modalias power temp2_crit temp2_input temp3_crit temp3_input uevent
hwmon name subsystem temp2_crit_alarm temp2_label temp3_crit_alarm temp3_label
Core 0
Core 1
ralf@fhem:~$ dmesg | grep smpboot ; uname -a ; cd /sys/class/hwmon/hwmon0/device ; ls ; cat temp?_label
[ 0.000000] smpboot: Allowing 4 CPUs, 0 hotplug CPUs
[ 0.087783] smpboot: CPU0: Intel(R) Celeron(R) CPU N2930 @ 1.83GHz (fam: 06, model: 37, stepping: 08)
[ 0.145341] smpboot: Total of 4 processors activated (14667.25 BogoMIPS)
Linux fhem 3.13.0-48-generic #80-Ubuntu SMP Thu Mar 12 11:16:15 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
driver subsystem temp2_max temp3_max temp4_max temp5_max
hwmon temp2_crit temp3_crit temp4_crit temp5_crit uevent
modalias temp2_crit_alarm temp3_crit_alarm temp4_crit_alarm temp5_crit_alarm
name temp2_input temp3_input temp4_input temp5_input
power temp2_label temp3_label temp4_label temp5_label
Core 0
Core 1
Core 2
Core 3
Wenn ich das richtig interpretiere, beginnen die echten Temp-Daten immer mit temp2.
MfG
ZitatWenn ich das richtig interpretiere, beginnen die echten Temp-Daten immer mit temp2.
Schön wäre. Auf meinem Cubietruck gibt es keinen tempX_label und die 'echte' CPU-Temperatur liegt unter temp1_input.
Guten Morgen,
das mit "label" war auch nur mehr zur Info gedacht. Ich schau nachher mal auf anderen Rechnern, ob das bei anderen Linuxen anders dargestellt wird. Vielleicht kann man das auch unterscheiden via uname -i oder uname -p. Nur so eine Idee ...
MfG
Hallo,
nicht so einfach. Selbst bei Ubuntu ist das bei "Server" und "Desktop" unterschiedlich.
Server hat einen Link:
ralf@server:/sys/class/hwmon/hwmon0$ ls -l device
lrwxrwxrwx 1 root root 0 Apr 3 11:34 device -> ../../../coretemp.0
Desktop hat keinen Link:
ralf@yoda:/sys/devices/platform/coretemp.0$ cd /sys/class/hwmon/hwmon0/device
bash: cd: /sys/class/hwmon/hwmon0/device: Datei oder Verzeichnis nicht gefunden
Um das Modul auch für Exoten universell zu machen könnte man doch ein optionales Attribut z.B. "Erstes Device" integrieren. Dort wird dann das erste auszulesende Device inklusive Pfad eingetragen. Jetzt ließt das Modul für alle vorhandenen Temperaturen aus. Wenn nur ein Device nur einmal, wenn acht vorhanden sind achtmal. Alles bisher im Modul vorhande bleibt wie es ist und arbeitet auch wie bisher gut. Nur mal so als lockerer Gedankengang.
MfG
Die Idee verstehe ich schon... Jetzt überlege ich hin und her. Ganz schön komplex. Wie soll der Pfad dann aussehen, dass das Programm auch versteht, an welcher Stelle und wie dieser zu modifizieren ist? Ich befürchte, dass das für die Benutzer recht unverständlich sein wird. Und auch schon sehr nah an user-fn...
Hast Du ein Vorschlag, wie das möglichst Verständlich im Attribut dargestellt werden kann?
Hallo!
firstTempFile <tempfile inkl. Pfad>
z.b.
attr mySysmon firstTempFile /sys/class/hwmon/hwmon0/device/temp2_input
Wie schon geschrieben, dann wäre es universell, egal wie viele Kerne und egal wo auch immer die Temperatur im Dateisystem stehen. Und die Anwender sollten damit umgehen können, gibt es in anderen Modulen auch. Wenn es zu viel Arbeit macht, lass es einfach. Das Modul kann es ja. Ich persönlich komme mit userReadings bestens klar.
MfG
Wenn der Pfad universell sein soll, wie soll dann SYSMON erkennen, welche Ziffer hochgezählt werden soll? In diesem Fall haben wir eine Null und eine Zwei. :(
Wenn das Modull "wissen" soll, dass tempX_input gemeinet ist, braucht man das gar nicht anzugeben, dann reicht einfach eine "2".
SYSMON schaut nur noch nach, ob in /sys/class/hwmon/hwmon0/device/ weitere Dateien tempX_input größer 2 vorhanden sind. Bei anderen Pfaden z.B. /sys/bus/platform/drivers/coretemp/ oder /irgend/ein/Pfad/zur/Temperatur/ nur dort.
MfG
Und wenn dort auch mehrfche Werte vorhanden sind? Mir gefällt nicht, dass SYSMON hier ein Teilwissen haben muss: den kompletten Pfad zwar nicht, aber temp2_imput :(
Dann einfach alles lassen wie es ist. Funktioniert ja.
MfG
Bis uns etwas besseres einfällt, müssen wir wohl das so lassen.