sysstat

Begonnen von justme1968, 25 Januar 2013, 17:43:34

Vorheriges Thema - Nächstes Thema

Masterfunk

Ja, hab ich. Bekomme ja auch alle anderen Werte.

Gruß Detlef

justme1968

schau mal unter welcher mib die werte stehen. dann baue ich die noch mit ein.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Masterfunk

Werd am WE mal auf die Suche gehen.

berbar

Hi,

hab mal eine Frage bzgl. des BananaPi. Bei mir funktioniert das Auslesen der Temperatur nicht. Gibt es da einen Unterschied zum Rasp?

Beste Grüße
BananaPi, Fritz Box 7590, MapleCul, nanoCUL 1.67,  HM LAN, ZigBee II, deconz, FHEM 6.0
ESP-01 Garagentorsteuerung,  5xFS20ST, 1xFS20SU, 1xFS20SM4, 1xFS20SD, 12xMüller Tint GU10
2xHM-CC-TC, 4x HM-CC-VC, 8xHM-CC-RT-DN, 1xHM-TC-IT-WM-W-EU
Alexa-Fhem auf OrangePi One, FHEM2FHEM

justme1968

ja. gibt es. ich meine das hatte ich nicht eingebaut weil mir damals niemand sagen konnte wo die temperatur auszulesen ist.

im sysmon modul ist es glaube ich inzwischen drin.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

viegener

Ich habe gelegentlich eine falsche Anzeige der Uptime, wo ein zusätzliches "0 days," for der uptime steht. Ich habe dies mehrfach beobachtet aber noch kein sicheres Pattern identifiziert.

Es könnte sein, dass es damit zusammenhängt, dass uptime auf meinem raspberry so etwas ausgibt:


$ uptime
18:52:21 up 26 days, 55 min,  1 user,  load average: 0.05, 0.05, 0.05


Normalerweise aber so:


$ uptime
19:30:26 up 26 days,  1:33,  1 user,  load average: 0.07, 0.03, 0.05


Vermutung wäre dass es an der "xx min" Info anstatt einer "hh:mm" Angabe liegt, ich habe aber den regexp in SYSSTAT noch nicht daraufhin abgeklopft...

Hat das schonmal jemand beobachtet?

Gruss,
Johannes
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

viegener

Ich habe mal eine Korrektur für die falsche uptime-Anzeige für meine raspberry angefertigt.
Dazu müssten im Modul 32_SYSSTAT.pm in der Routine SYSSTAT_getUptime($) die Berechnung aus dem Ergebnis des Befehls uptime geändert werden (Ich habe auch eine modifizierte Version des Moduls als Attachment angehängt):

Bisher steht da (Zeilen 599-614)

  my $uptime = SYSSTAT_readCmd($hash,"uptime",0);

  $uptime = $1 if( $uptime && $uptime =~ m/[[:alpha:]]{2}\s+(((\d+)\D+,?\s+)?(\d+):(\d+))/ );
  $uptime = "0 days, $uptime" if( $uptime && !$2);

  if( AttrVal($name, "uptime", 0) == 2 ) {
    my $days = $3?$3:0;
    my $hours = $4;
    my $minutes = $5;

    $uptime = $days * 24;
    $uptime += $hours;
    $uptime *= 60;
    $uptime += $minutes;
    $uptime *= 60;
  }



dies sollte ersetzt werden durch

  my $uptime = SYSSTAT_readCmd($hash,"uptime",0);

  ############# match uptime time statement with the different formats seen on linux
  # examples
  #     18:52:21 up 26 days, 21:08,  2 users,  load average: 0.04, 0.03, 0.05
  #     18:52:21 up 26 days, 55 min,  1 user,  load average: 0.05, 0.05, 0.05
  #     18:52:21 up 55 min,  1 user,  load average: 0.05, 0.05, 0.05
  #     18:52:21 up 21:08,  1 user,  load average: 0.05, 0.05, 0.05
  #
  # complex expression to match only the time parts of the uptime result
  # $1 is complete up time information of uptime result
  # $2 is # days part of the uptime
  # $3 just the # from the "# days"" part or nothing if no days are given
  # $4 is complete hour/minutes or # min information
  # $5 is hours part if hours:min are given
  # $6 is minutes part if hours:min are given
  # $7 is minutes if # min is given
  $uptime = $1 if ( $uptime && $uptime =~ m/[[:alpha:]]{2}\s*(((\d*)\s*[[:alnum:]]*,?)?\s+((\d+):(\d+)|(\d+)\s+[[:alpha:]]+in[[:alpha:]]*)),?/ );
  $uptime = "0 days, $uptime" if( $uptime && !$2);
  if( AttrVal($name, "uptime", 0) == 2 ) {
    my $days = $3?$3:0;
    my $hours = $5?$5:0;
    my $minutes = $6?$6:$7;

    $uptime = $days * 24;
    $uptime += $hours;
    $uptime *= 60;
    $uptime += $minutes;
    $uptime *= 60;
  }


Im wesentlichen geht es darum den regexp für mehr verschiedene Varianten fit zu machen. Die verschiedenen Varianten sind auch im Kommentar zusammen mit den "geparsten" Elementen des regexp enthalten.

Eigentlich wäre wahrscheinlich ein Auslesen von /proc/uptime die sauberere Lösung, ich habe aber daran mal nichts geändert.

Vielleicht kann das ja Einzug in die nächste Version halten?

Gruss,
Johannes
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

justme1968

sorry für die späte antwort. ich habe gerade wenig zeit.

ja. das problem ist die unterschiedliche ausgabe von uptime in unterschiedlichen linux versionen.

inzwischen gibt es ein neben SYSSTAT_readCmd auch ein SYSSTAT_readFile und ich würde das ganze damit eigentlich lieber auf das auslesen von /proc/uptime umstellen.

falls du zeit und lust dazu hast würde ich lieber einen solchen patch einbauen :) wenn nicht tut es erst diese version. die ist vor allem mit deinen kommentaren schon mal viel besser wie die alte.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

viegener

Zitat von: justme1968 am 24 Mai 2015, 11:20:04
sorry für die späte antwort. ich habe gerade wenig zeit.

Das kenne ich sehr gut ...

Zitat von: justme1968 am 24 Mai 2015, 11:20:04
inzwischen gibt es ein neben SYSSTAT_readCmd auch ein SYSSTAT_readFile und ich würde das ganze damit eigentlich lieber auf das auslesen von /proc/uptime umstellen.

falls du zeit und lust dazu hast würde ich lieber einen solchen patch einbauen :) wenn nicht tut es erst diese version. die ist vor allem mit deinen kommentaren schon mal viel besser wie die alte.

OK, hier ist ein Vorschlag (wieder an der selben Stelle einzusetzen):


  my $uptime = SYSSTAT_readFile($hash,"/proc/uptime","");
  if($uptime) {
 
    $uptime = $1 if ( $uptime && $uptime =~ /^\s*([0-9.]+)\s+([0-9.]+)/ );

    if( AttrVal($name, "uptime", 0) != 2 ) {
      # cut off partial seconds
      $uptime = int( $uptime );
      my $seconds = $uptime % 60;
      $uptime = int($uptime / 60);
      my $minutes = $uptime % 60;
      $uptime = int($uptime / 60);

      my $hours = $uptime % 24;
      my $days = int($uptime / 24);

      $uptime = sprintf( "%d days, %d:%.2d", $days, $hours, $minutes);
      Log3 $name, 4, "$name: uptime returned :$uptime: via proc-uptime file ";    # JVI
    }

  # fallback if by any reason parsing /proc/uptime does not work
  } else {
    my $uptime = SYSSTAT_readCmd($hash,"uptime",0);

    ############# match uptime time statement with the different formats seen on linux
    # examples
    #     18:52:21 up 26 days, 21:08,  2 users,  load average: 0.04, 0.03, 0.05
    #     18:52:21 up 26 days, 55 min,  1 user,  load average: 0.05, 0.05, 0.05
    #     18:52:21 up 55 min,  1 user,  load average: 0.05, 0.05, 0.05
    #     18:52:21 up 21:08,  1 user,  load average: 0.05, 0.05, 0.05
    #
    # complex expression to match only the time parts of the uptime result
    # $1 is complete up time information of uptime result
    # $2 is # days part of the uptime
    # $3 just the # from the "# days"" part or nothing if no days are given
    # $4 is complete hour/minutes or # min information
    # $5 is hours part if hours:min are given
    # $6 is minutes part if hours:min are given
    # $7 is minutes if # min is given
    $uptime = $1 if ( $uptime && $uptime =~ m/[[:alpha:]]{2}\s*(((\d*)\s*[[:alnum:]]*,?)?\s+((\d+):(\d+)|(\d+)\s+[[:alpha:]]+in[[:alpha:]]*)),?/ );
    $uptime = "0 days, $uptime" if( $uptime && !$2);
    if( AttrVal($name, "uptime", 0) == 2 ) {
      my $days = $3?$3:0;
      my $hours = $5?$5:0;
      my $minutes = $6?$6:$7;

      $uptime = $days * 24;
      $uptime += $hours;
      $uptime *= 60;
      $uptime += $minutes;
      $uptime *= 60;
    }
    Log3 $name, 4, "$name: uptime returned :$uptime: via cmdline ";    # JVI
  }


Funktioniert bei mir soweit gut, allerdings habe ich es ja erst heute eingebaut. Ich habe mal meine vorherige Version dringelassen als fallback, wenn /proc/uptime nichts liefern sollte (auf BSD-Systemen ?), auch wenn das vermutlich overkill ist, aber wenn ich schonmal mehr Kommentare als Code schreibe  ;D

Gruss,
Johannes



Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

justme1968

danke. habe eingecheckt.

man könnte jetzt noch den wert des uptime attributes auswerten um direkt zwischen /proc/uptime und uptime zu wählen. aber das mache ich wenn sich jemand beschwert das es ohne zu langsam ist :)

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Kai-Alfonso

Hi,

ich hab mal eine Frage, was mir auch nach durchlesen von den 9 Seiten noch nicht klar ist, ob es geht und wie.

Ich will per SNMP Daten von per Netzwerk erreichbaren Geräten abfragen - SNMP ist natürlich aktiviert, MIBS müsste ich noch herausfinden. Ich hab hier zum Beispiel einen Homeserver von HP, wo ich Temperatur und Lüftergeschwindigkeit in FHEW visualisieren möchte. Geht das eigentlich?

Danke und nen schönen Sonntag
Raspi2|nanoCul433|nanoCul868|CCU2
Energie-USBZähler|homebrew HM Devices
DBLog|DBRep|Homematic|Baumarktsteckdosen
Hue|Webcams mit DS-Station (Synology)|Bewegungsmelder|Rollladen|Schalter (IT|HM)

justme1968

die mibs sind zur zeit nicht konfigurierbar. es wird nur eine hand voll standard mibs abgefragt.

ich wollte das zwar schon vor einer weile einbauen, aber es schein kaum jemand zu brauchen :)

ein wichtiger punkt ist auch das fhem keine traps empfängt sondert aktiv pollt. es gibt also eine grenze bis zu welcher anzahl an mibs das überhaupt sinnvoll ist.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

justme1968

probier mal die angehängte version. es gibt ein neues attribut mibs. hier kannst du eine liste aus mit leerzeichen getrennten <mib>:<reading> werten hinterlegen die dann gepollt werden.

was damit nicht geht sind indirekte mibs abfragen. d.h. nur mibs in denen direkt der anzuzeigende wert steht funktionieren damit. wenn der wert noch aufbereitet oder formatiert werden muss würde ich das über ein user reading machen.

vermutlich wäre es bei mehr als ein paar wenigen reading sinnvoll das ganze asynchron im hintergrund zu machen. das mache ich wenn es doch genug anwender gibt.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Spiff

Hi Andre,

Zitat von: justme1968 am 14 Dezember 2014, 20:55:49
könntest du damit leben wenn der : im reading durch einen . ersetzt wird ?

Hattest du das eigentlich schon geändert? Ich würde das Modul gerne wieder benutzen :)

Gruß
Spiff

justme1968

stimmt. da war noch was...

das problem ist nicht der : sondern der \.

bitte bau mal vor zeile 305 das hier ein: $name =~ s.\\./.g;damit werden die \ zu / und es sollte gehen.

wenn das funktioniert baue ich es ein.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968