Servus,
ich brauche mal Eure Hilfe.
Mein FHEM läuft als LXC auf einem ProxmoxHost mit AMD-Ryzen CPU.
Dort liest SYSMON leider nicht die CPU-Temperatur aus.
Auf meiner vorherigen Hardware (Intel-Celeron J41xx) wurde die Temperatur korrekt ausgelesen.
Wenn ich nun folgendende Befehle ausführe:
pi@fhem:~$ for i in /sys/class/hwmon/hwmon*; do echo "$i: $(cat $i/name 2>/dev/null)"; done
/sys/class/hwmon/hwmon0: r8169_0_100:00
/sys/class/hwmon/hwmon1: nvme
/sys/class/hwmon/hwmon2: k10temp
/sys/class/hwmon/hwmon3: amdgpu
pi@fhem:~$ cat /sys/class/hwmon/hwmon2/temp1_input | awk '{print $1/1000}'
45
Bekomme ich zumindest in der Shell eine CPU-Temperatur angezeigt.
Wenn ich in der 42_SYSMON.pm nach "hwmon" suche, stosse ich auf folgende Codezeilen:
#------------------------------------------------------------------------------
# leifert CPU Temperature (mehrere Kerne eines ?)
#------------------------------------------------------------------------------
sub
SYSMON_getCPUTemp_X($$;$) {
my ($hash, $map, $cpuNum) = @_;
if($hash->{helper}->{excludes}{'cputemp'}) {return $map;}
$cpuNum = 0 unless defined $cpuNum;
my $val = SYSMON_execute($hash, "cat /sys/class/hwmon/hwmon0/device/hwmon/hwmon0/temp".($cpuNum+1)."_input 2>&1");
$val = int($val);
my $val_txt = sprintf("%.2f", $val/1000);
$map->{"cpu".$cpuNum."_temp"}="$val_txt";
my $t_avg = sprintf( "%.1f", (3 * ReadingsVal($hash->{NAME},"cpu".$cpuNum."_temp_avg",$val_txt) + $val_txt ) / 4 );
$map->{"cpu".$cpuNum."_temp_avg"}=$t_avg;
$map = SYSMON_getComputeStat($hash, $map, $val_txt, "cpu".$cpuNum."_temp"."_stat");
return $map;
}
Wenn ich den Pfad wie folgt anpasse:
my $val = SYSMON_execute($hash, "cat /sys/class/hwmon/hwmon2/temp1".($cpuNum+1)."_input 2>&1");
alternativ
my $val = SYSMON_execute(
$hash,
'for d in /sys/class/hwmon/hwmon*; do ' .
' [ "$(cat $d/name 2>/dev/null)" = "k10temp" ] && cat $d/temp1_input && exit; ' .
'done'
);
bringt das nicht den gewünschten Erfolg. Wer kann hier bitte helfen ?