Zeit in Sekunden in Tage umrechnen

Begonnen von der-sigi, 03 August 2017, 22:50:57

Vorheriges Thema - Nächstes Thema

der-sigi

Hallo

ich finde das Modul SYSMON super. Allerdings sind nicht alle Angaben so wie ich die gerne hätte. Man kann ja nicht alles haben und es muß auch nicht alles gemacht werden. Trotzdem ein dickes Dankeschön an den "hexenmeister".

Ich möchte wissen, wie lange mein Raspi mit FHEM schon rennt. Mit Watchdog und USV und deren Überwachung bekommt man nicht immer mit, wann der oder FHEM neu gestartet wurde. Da gefällt mir beispielsweise die Text Ausgabe von "starttime" nicht so dolle. Somit habe ich das für mich ein bißchen erweitert.

In die "./FHEM/99_myUtils.pm" habe ich Folgendes eingetüdelt:


# --- calculate formatted days out of given seconds
sub calcDaysBySeconds($) {
  # --- get parameter
  my ($sec) = @_;
  my $min = int($sec / 60);
  $sec = $sec - ($min * 60);
  my $hour = int($min / 60);
  $min = $min - ($hour * 60);
  my $day = int($hour / 24);
  $hour = $hour - ($day * 24);
  my $running = sprintf("%d %02d:%02d:%02d",$day,$hour,$min,$sec);
  return $running;
}


So, nun kann ich in der "fhem.cfg" Folgendes nutzen (als Beispiel in Ausschnitten):


define SystemUse SYSMON 60
...
define SystemUseJob at +*00:05:00 {\
  ...
  my $running = calcDaysBySeconds(time() - ReadingsVal("SystemUse","starttime",0));;\
  ...
}


Das ergibt dann in der Variable "$running" eine Ausgabe der vergangenen Zeit seit (in diesem Fall) Start des Raspi im Format "T HH:MM:SS", also Tage mit Stunden, Minuten und Sekunden. In echt also ein String mit "115 13:50:07". Damit sehe ich seit wieviel Tagen der Raspi rennt.

Ich finde das praktisch, vielleicht kanns jemand gebrauchen.

Viele Grüße
Sigi

amenomade

Und warum nicht ein userReading, das "uptime" nutzen würde?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

der-sigi

Danke für die Info. Kann man klar auch nehmen. Mir gings vor allem um die Ergebnis-Darstellung.

amenomade

{sprintf("%d %02d:%02d:%02d",SYSMON_decode_time_diff(ReadingsVal("SystemUse","uptime",0)))}

;)
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

der-sigi

Na, warst ja noch früh unterwegs.   ;)

Ich bekomme 'ne Fehlermeldung:


2017.08.04 08:50:18 1: PERL WARNING: Missing argument in sprintf at (eval 568927) line 2.
2017.08.04 08:50:18 3: eval: {
  Log 1, {sprintf("%d %02d:%02d:%02d",SYSMON_decode_time_diff(ReadingsVal("SystemUse","uptime",0)))};
}


Das sprintf() ist ja soweit ok, aber was SYSMON_decode_time_diff() zurück bringt kann ich nicht nachvollziehen. Ich habe das nirgends gefunden. Wie kommt man auf sowas?

der-sigi

Habs gefunden:

SYSMON_decode_time_diff() ist eine interne Routine in FHEM/42_SYSMON.pm. Allerdings wurde die mal geändert, da sind jetzt keine Sekunden mehr drin. Braucht man ja auch eigentlich nicht.


{sprintf("%d %02d:%02d",SYSMON_decode_time_diff(ReadingsVal("SystemUse","uptime",0)))}


oder


{sprintf("%d %02d:%02d:%02d",SYSMON_decode_time_diff(ReadingsVal("SystemUse","uptime",0)),0)}


hilft dann.

Allerdings zeigt das, warum ich keine internen Routinen verwende. Wenn die geändert werden, gibts ein Problem.

amenomade

ZitatAllerdings zeigt das, warum ich keine internen Routinen verwende. Wenn die geändert werden, gibts ein Problem.
Gebe ich zu.

Zitatkeine Sekunden mehr drin. Braucht man ja auch eigentlich nicht.
Zumal, da standardmässig das Pollinginterval des Moduls auf 1 Minute gesetzt ist... ;)
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus