FHEM Forum

FHEM => Codeschnipsel => Thema gestartet von: der-sigi am 03 August 2017, 22:50:57

Titel: Zeit in Sekunden in Tage umrechnen
Beitrag von: der-sigi am 03 August 2017, 22:50:57
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
Titel: Antw:Zeit in Sekunden in Tage umrechnen
Beitrag von: amenomade am 03 August 2017, 23:50:12
Und warum nicht ein userReading, das "uptime" nutzen würde?
Titel: Antw:Zeit in Sekunden in Tage umrechnen
Beitrag von: der-sigi am 04 August 2017, 00:03:21
Danke für die Info. Kann man klar auch nehmen. Mir gings vor allem um die Ergebnis-Darstellung.
Titel: Antw:Zeit in Sekunden in Tage umrechnen
Beitrag von: amenomade am 04 August 2017, 00:33:11
{sprintf("%d %02d:%02d:%02d",SYSMON_decode_time_diff(ReadingsVal("SystemUse","uptime",0)))}

;)
Titel: Antw:Zeit in Sekunden in Tage umrechnen
Beitrag von: der-sigi am 04 August 2017, 08:54:57
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?
Titel: Antw:Zeit in Sekunden in Tage umrechnen
Beitrag von: der-sigi am 04 August 2017, 09:21:42
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.
Titel: Antw:Zeit in Sekunden in Tage umrechnen
Beitrag von: amenomade am 04 August 2017, 13:02:34
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... ;)