Ein Modul zur Erfassen von diversen RPi/Linux-Statistiken (SYSMON)

Begonnen von hexenmeister, 06 Dezember 2013, 17:44:38

Vorheriges Thema - Nächstes Thema

Tom111

nach dem heutigen Update habe ich schon wieder diese Fehlermeldung im LOG:
http://forum.fhem.de/index.php/topic,40502.0.html
hab es dann nochmal geändert, ich hoffe "hexenmeister" ändert das mal!  :)
FHEM 5.9 auf Raspberry Pi - 3B+ - Stretch-5.10.88+ | CUL868 CC1101 - USB - Lite module - V3 FW 1.67
Fritz!Box 7490 OS 07.29 / Fritz!Dect200 / Fritz!Powerline 546E
FS20ST-4/ FS20 DI-5/ FS20LS/ FS20 PIRI-2-KU/ FS20 TFK/ FS20S4A/FS20 SU-3/FS20 S20-3
HMS100TF/FHT80TF-2/ASH2200/S300TH/MiLight-Bridge V

hexenmeister

Werde ich mir nie merken, schreibe automatisch anders, finde Perl an dieser Stelle unlogisch :D
Habe angepasst.

PeMue

#1052
Zitat von: hexenmeister am 30 August 2015, 22:41:26
Habe angepasst.
yepp, aber die Version, die nicht auf der Fritz Box läuft  ;)

Gruß PeMue

Edit 1:
Ich habe wieder die letzte Version aus den Thread (die gepatchte # $Id: 42_SYSMON.pm 8998 2015-07-28 08:54:05Z hexenmeister $) genommen, die Firmwareversion kommt jetzt auch richtig:
fw_version_info             113.06.05


Edit 2:
Ich denke, ich müsste nur die Funktion mit den BarCharts rauswerfen, dann würde es wieder funktionieren ...
RPi3Bv1.2 rpiaddon 1.66 6.0 1xHM-CC-RT-DN 1.4 1xHM-TC-IT-WM 1.1 2xHB-UW-Sen-THPL-O 0.15 1x-I 0.14OTAU  1xCUNO2 1.67 2xEM1000WZ 2xUniroll 1xASH2200 3xHMS100T(F) 1xRFXtrx 90 1xWT440H 3xTFA30.3150 5xFA21
RPi1Bv2 LCDCSM 1.63 5.8 2xMAX HKT 1xMAX RT V200KW1 Heizung Wasser

hexenmeister


PeMue

RPi3Bv1.2 rpiaddon 1.66 6.0 1xHM-CC-RT-DN 1.4 1xHM-TC-IT-WM 1.1 2xHB-UW-Sen-THPL-O 0.15 1x-I 0.14OTAU  1xCUNO2 1.67 2xEM1000WZ 2xUniroll 1xASH2200 3xHMS100T(F) 1xRFXtrx 90 1xWT440H 3xTFA30.3150 5xFA21
RPi1Bv2 LCDCSM 1.63 5.8 2xMAX HKT 1xMAX RT V200KW1 Heizung Wasser

Soc

Ich habe das im WIKI beschriebene Verfahren implementiert und bin soweit zufrieden.
Was mir aber auffällt, dass die SVG (CPU) nicht für den Raspberry Pi 2 ausreichen.

Was muss ich wo ändern damit alle 4 CPUs berücksichtigt werden?
Der Tipp hier im Forum passt bei mir nicht, da im gplot File mit stat_cpu_percent gearbeitet wird und nicht mit stat_cpu0_diff, stat_cpu1_diff usw.

Ist stat_cpu_percent die prozentualle Auslastung von allen 4 CPUs?
Rein rechnerrisch kann das nicht sein...

Soc

volschin

Falls Du mit LogDB arbeitest, kannst Du Dir meinen Code aus Beitrag #1030 kopieren.
Intel NUC+Ubuntu 24.04+Docker+FHEM6
HomeMatic: HM-MOD-RPI-PCB+HM-USB-CFG2+hmland+diverse, HUE: Hue-Bridge, RaspBee+deCONZ+diverse
Amzn Dash-Buttons, Siro Rollos
4xRPi, 4xCO20, OWL+USB, HarmonyHub, FRITZ!Box 7690, Echo Dots+Show8, HomeBridge

Soc

Super, hat nach ein paar Anpassungen gut funktioniert.
Was man bloss nicht machen darf ist über die Weboberfläche irgendwelche Änderungen vornehmen.
Sonst schmeisst er die Ergänzungen

:::$val=~s/^(\d+)\s(\d+)\s(\d+)\s(\d+)\s(\d+)\s(\d+)\s(\d+)/sprintf("%.2f",($1+$2+$3+$5+$6+$7)\/($1+$2+$3+$4+$5+$6+$7)*100)/eg

wieder raus... mhhhh....

Hast Du für die anderen CPU SVGs auch Beispiele mit DBLog?

volschin

Da die anderen aus meiner Sicht für einen Zeitgraphen logisch nicht brauchbar sind, nein.  ;) 
Intel NUC+Ubuntu 24.04+Docker+FHEM6
HomeMatic: HM-MOD-RPI-PCB+HM-USB-CFG2+hmland+diverse, HUE: Hue-Bridge, RaspBee+deCONZ+diverse
Amzn Dash-Buttons, Siro Rollos
4xRPi, 4xCO20, OWL+USB, HarmonyHub, FRITZ!Box 7690, Echo Dots+Show8, HomeBridge

volschin

Hallo Alexander,
ich hatte vor einiger Zeit geschrieben, dass ich mit der CPU-Statistik immer nach einem Reboot Probleme mit einem falschen Wert habe.

Ich denke, ich habe die Ursache gefunden und die Routine in SYSMON_getCPUProcStat_intern ab Zeile 2191 erweitert

    my ($CPUuser, $CPUnice, $CPUsystem, $CPUidle, $CPUiowait, $CPUirq, $CPUsoftirq);

if($neuCPUuser < $altCPUuser) {
      $CPUuser    = $neuCPUuser;
      $CPUnice    = $neuCPUnice;
      $CPUsystem  = $neuCPUsystem;
      $CPUidle    = $neuCPUidle;
      $CPUiowait  = $neuCPUiowait;
      $CPUirq     = $neuCPUirq;
      $CPUsoftirq = $neuCPUsoftirq;
}
else {
      $CPUuser    = $neuCPUuser    - $altCPUuser;
      $CPUnice    = $neuCPUnice    - $altCPUnice;
      $CPUsystem  = $neuCPUsystem  - $altCPUsystem;
      $CPUidle    = $neuCPUidle    - $altCPUidle;
      $CPUiowait  = $neuCPUiowait  - $altCPUiowait;
      $CPUirq     = $neuCPUirq     - $altCPUirq;
      $CPUsoftirq = $neuCPUsoftirq - $altCPUsoftirq;
}


Da mit einem Reboot die CPU-Ticks zurückgesetzt werden, ergibt die erste Berechnung nach dem Neustart bisher immer einen negativen Wert. Das ist damit ausgeschlossen.

Kannst Du das mit einbauen?

Gruß
Veit
Intel NUC+Ubuntu 24.04+Docker+FHEM6
HomeMatic: HM-MOD-RPI-PCB+HM-USB-CFG2+hmland+diverse, HUE: Hue-Bridge, RaspBee+deCONZ+diverse
Amzn Dash-Buttons, Siro Rollos
4xRPi, 4xCO20, OWL+USB, HarmonyHub, FRITZ!Box 7690, Echo Dots+Show8, HomeBridge

hexenmeister

Das ist ja ein Luxus, die Nutzer, die bei Problemen gleich die Lösung mitliefern ;)
Eingecheckt.

PeMue

Hallo Alexander,

kleine Verbesserung:
dsl_rate  down: 13269 KBit/s, up: 2647 KBit/s 2015-09-12 17:55:04
Die Einheit würde in in kBit/s (kleines k) bezeichnen  ;)

Danke + Gruß

Peter
RPi3Bv1.2 rpiaddon 1.66 6.0 1xHM-CC-RT-DN 1.4 1xHM-TC-IT-WM 1.1 2xHB-UW-Sen-THPL-O 0.15 1x-I 0.14OTAU  1xCUNO2 1.67 2xEM1000WZ 2xUniroll 1xASH2200 3xHMS100T(F) 1xRFXtrx 90 1xWT440H 3xTFA30.3150 5xFA21
RPi1Bv2 LCDCSM 1.63 5.8 2xMAX HKT 1xMAX RT V200KW1 Heizung Wasser

hexenmeister


PeMue

Hallo Alexander,

kann es sein, dass SYSMON alle Werte, die nicht vom Modul selber kommen, ziemlich schnell "killt"?
Als "Unbelehrbarer" wollte ich mit einer Funktion in 99_MyUtils.pm
#------------------------------------------------------------------------------
sub FB_getsysmonvalues($$)
{
  my ($fb_addr, $device) = @_;

  #my $result = GetHttpFile($fb_addr, "/cgi-bin/system_status");
  my $result = GetFileFromURLQuiet("http://".$fb_addr."/cgi-bin/system_status", 4, , 1, , );
  #$result =~ tr/\<\/*html\>//d; # funktioniert nicht richtig
  #$result =~ tr/\<\/*body\>//d;
  $result =~ s/<\/*html>//g;
  $result =~ s/<\/*body>//g;
  my @val = split("-",$result);
  my $fb_type = $val[0]." Annex ".$val[1]." Revision ".$val[8];
  my $fb_brand = $val[9];
  # fb_totaltime will change in case Fritz Box is running
  my $fb_totaltime = int(substr($val[3],0,2))." Jahre ".int(substr($val[2],4,2))." Monate ".int(substr($val[2],2,2))." Tage ".int(substr($val[2],0,2))." Stunden";
  my $fb_reboots = int(substr($val[3],4,2)) + int(substr($val[3],2,2)*32);
  #$fb_reboots = $fb_reboots." Neustarts";

  $result = qx(cat /proc/sys/urlader/environment);
  # http://stackoverflow.com/questions/11294116/extract-the-required-substring-from-another-string-perl
  # The $1 built-in variable stores the last match from a regex.
  $result =~ m/cpufrequency(.*)\n/;
  my $fb_cpufreq = int($1)/1000000;
  $fb_cpufreq = $fb_cpufreq." MHz";

  $result = GetFileFromURLQuiet("http://".$fb_addr."/jason_boxinfo.xml", 4, , 1, , );
  $result =~ m/<j:Serial>(.*)<\/j:Serial>/;
  my $fb_serial = $1;

  fhem("setreading $device fb_type $fb_type");
  fhem("setreading $device fb_brand $fb_brand");
  fhem("setreading $device fb_totaltime $fb_totaltime");
  fhem("setreading $device fb_reboots $fb_reboots");
  fhem("setreading $device fb_cpufreq $fb_cpufreq");
  fhem("setreading $device fb_serial $fb_serial");
  Log 1, ("FB_getsysmonvalues done for $device: fb_type $fb_type");

  return;
}
#----- FB_getsysmonvalues -----------------------------------------------------

SYSMON einfach ein paar Werte "unterschieben", um diese dann anzuzeigen.
Die "totaltime" würde ich über ein Userreading aktualiseren. Mein Skript funktioniert wunderbar, aber dann scheint SYSMON irgendwann alle Werte zu löschen  >:(

So sieht es aus, bevor SYSMON löscht:
(http://forum.fhem.de/index.php?action=dlattach;topic=17201.0;attach=37103;image)

Naja, vielleicht gibt es ja einen Workaround.

Danke + Gruß

PeMue
RPi3Bv1.2 rpiaddon 1.66 6.0 1xHM-CC-RT-DN 1.4 1xHM-TC-IT-WM 1.1 2xHB-UW-Sen-THPL-O 0.15 1x-I 0.14OTAU  1xCUNO2 1.67 2xEM1000WZ 2xUniroll 1xASH2200 3xHMS100T(F) 1xRFXtrx 90 1xWT440H 3xTFA30.3150 5xFA21
RPi1Bv2 LCDCSM 1.63 5.8 2xMAX HKT 1xMAX RT V200KW1 Heizung Wasser

PeMue

Hallo zusammen,

jetzt habe ich die Werte halt in eine Dummy Instanz geschrieben und aus SYSMON die Werte per UserReadings rausgeholt. M.A.n. ist es sinnlos, einen Wert, der konstant bleibt, dauernd auszulesen  :) Für die Total Time habe ich mir eine Funktion in 99_myUtils gebaut, alles noch sehr hemdsärmelig.
Aber so sieht es dann aus:
(http://forum.fhem.de/index.php?action=dlattach;topic=17201.0;attach=37139;image)

Gruß PeMue
RPi3Bv1.2 rpiaddon 1.66 6.0 1xHM-CC-RT-DN 1.4 1xHM-TC-IT-WM 1.1 2xHB-UW-Sen-THPL-O 0.15 1x-I 0.14OTAU  1xCUNO2 1.67 2xEM1000WZ 2xUniroll 1xASH2200 3xHMS100T(F) 1xRFXtrx 90 1xWT440H 3xTFA30.3150 5xFA21
RPi1Bv2 LCDCSM 1.63 5.8 2xMAX HKT 1xMAX RT V200KW1 Heizung Wasser