SYSMON auf Intel NUC DN2820FYKH0

Begonnen von Ma_Bo, 15 Januar 2015, 17:45:54

Vorheriges Thema - Nächstes Thema

StefanD

Hier noch ein Screenshot des daraus resultierenden Plots
HW: Intel NUC8i5 mit ESXi7 mit Ubuntu Server 18.04 LTS und FHEM als DockerContainer

hexenmeister

Zitat von: StefanD am 09 Februar 2015, 16:56:42
Ich habe mir mit einer eigenen Funktion in der 99_myUtils.pm selbst beholfen. Folgende Parameter waren Basis für meine Umsetzung:

  • keine Manipulation der 42_SYSMON.pm um bei Updates des fhem nicht nachbessern zu müssen, sofern sich hier etwas ändert
  • keinen separates Dummy Device, somit auch kein seperates LogFile
  • Readings des Sysmon Device ergänzen und bestehende nicht verändern/überschreiben
  • Temperatur der Cores und jeweilige Frequenz sollen zeitgleich protokolliert werden
[...]

Ab morgen kannst Du das eleganter lösen. SYSMON unterstützt jetzt das EInbinden von benutzerdefinierten Perl-Funktionen.

Zitat
user-fn <fn_name>:<Interval_Minutes>:<reading_name1>:<reading_name2>...[:<reading_nameX>],...
Liste der benutzerdefinierten Perlfunktionen.
Als <fn_name> können entweder Name einer Perlfunktion oder ein Perlausdruck verwendet werden. Die Perlfunktion bekommt den Device-Hash als Übergabeparameter und muss ein Array mit Werte liefern. Diese Werte werden entsprechend den Parameter <reading_nameX> in Readings übernommen.
Ein Perlausdruck muss in geschweifte Klammer eingeschlossen werden und kann folgende Paramter verwenden: $HASH (Device-Hash) und $NAME (Device-Name). Rückgabe wird analog einer Perlfunktion erwartet.
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

Ma_Bo

Hallo Hexenmeister, da ich jetzt die Funktion von StefanD zu laufen bekommen habe, könntest du mir kurz erklären oder ein Beispiel nennen, wie ich das jetzt mit der neuen Funktion bzw. mit dem einbinden für Sysmon hinbekomme.

Grüße Marcel
NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.

hexenmeister

Zitat
user-fn <fn_name>:<Interval_Minutes>:<reading_name1>:<reading_name2>...[:<reading_nameX>],...
Liste der benutzerdefinierten Perlfunktionen.
Als <fn_name> können entweder Name einer Perlfunktion oder ein Perlausdruck verwendet werden. Die Perlfunktion bekommt den Device-Hash als Übergabeparameter und muss ein Array mit Werte liefern. Diese Werte werden entsprechend den Parameter <reading_nameX> in Readings übernommen.
Ein Perlausdruck muss in geschweifte Klammer eingeschlossen werden und kann folgende Paramter verwenden: $HASH (Device-Hash) und $NAME (Device-Name). Rückgabe wird analog einer Perlfunktion erwartet.

attr <sysmon> user-fn myPrettyFunction:1:myValue1:myValue2:myValueN


sub myPrettyFunction() {
my value1="some";
my value2="values";
my valueN="here";

return (value1,value2,valueN);
}
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

Ma_Bo

NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.

uwete

Danke StefanD!

Habe dein myutils übernommen.
Nur sehen bei mir mit Debian 11 auf Brix N3000 (Celeron Zweikern) die Pfade so aus:
my $CpuInfo;
sub CpuInfo ()
{
my $mDevice = "sysmon";
my $Cpu0Freq = sprintf("%d",(qx "cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq 2>&1")/1000);
my $Cpu1Freq = sprintf("%d",(qx "cat /sys/devices/system/cpu/cpu1/cpufreq/scaling_cur_freq 2>&1")/1000);
my $Cpu0Temp = sprintf("%0.1f",(qx "cat /sys/devices/platform/coretemp.0/hwmon/hwmon1/temp2_input")/1000);
my $Cpu1Temp = sprintf("%0.1f",(qx "cat /sys/devices/platform/coretemp.0/hwmon/hwmon1/temp3_input")/1000);
my $CpuMaxTemp = $Cpu0Temp;
if($Cpu0Temp < $Cpu1Temp) { $CpuMaxTemp = $Cpu1Temp };
fhem ("setreading $mDevice xCPU0_Freq $Cpu0Freq; setreading $mDevice xCPU1_Freq $Cpu1Freq; setreading $mDevice xCPU_0_Temp $Cpu0Temp; setreading $mDevice xCPU_1_Temp $Cpu1Temp; setreading $mDevice xCPU_Max_Temp $CpuMaxTemp; ");
}


Ich lasse mir auch beide Kerntemperaturen anzeigen.