42_SYSMON - keine CPU-Temp auf Z-Box Ci320

Begonnen von chris1284, 19 März 2015, 22:28:18

Vorheriges Thema - Nächstes Thema

chris1284

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

hexenmeister

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?


chris1284

#2
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:~#

Kuzl

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

chris1284

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)

Kuzl

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.

smurfix

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.

Kuzl

Hab ich noch gar nicht gekannt.  Macht cat nicht im prinzip das gleiche? Naja egal die zbox hat ja genug power :)

chris1284

cpu_freq bekommt sysmon auch (noch) nicht hin. sapnnung wäre auch toll wenn mans auslesen kann

hexenmeister

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.

hexenmeister

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

chris1284

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

Ralf W.

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
http://twitter.com/RWausD
Schon gewusst, dass Haarausfall zu einer Glatze führen kann?

FHEM: NUC7PJYH2, Ubuntu Server 22.04.2 LTS, HMCCU - RaspberryMatic, DE ConBee II, diverse Sensoren und Aktoren.

chris1284

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,

chris1284

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)