[gelöst] - ReadingsAge in HH:mm / Zeitspannen berechnen

Begonnen von 87insane, 12 April 2018, 16:00:12

Vorheriges Thema - Nächstes Thema

87insane

Ich bin und war an einem Ergebnis interessiert, (möglichst) ohne variablen. Das hat ja auch geklappt. Das ich viel viel üben muss und auch testen, ist klar. Hab eure Lösungen für mein Verständnis ja auch durch probiert bis ich sie verstanden habe. Dazu kann man die Variante hier genau so variabel einsetzen wie eure.

Zudem habe ich (lange ist es her) beim programmieren gelernt, das kein Programmierer seinen Quelltext extra lang macht. Er muss verständlich sein, flexibel und so kurz wie möglich. Alle diese Anforderungen empfinde ich nicht als sonderlocke.

Viele Wege führen nach Rom. Da kann es doch nicht nur einen richtigen geben. Ich weiß nicht warum solche Dinge nicht mit etwas mehr lachen und Freude gefeiert werden. Wirkt fast als hätte ich dich persönlich beleidigt.
Schade ! Wenn dem so sein sollte, wollte ich das sicher nicht.

Gesendet von meinem LG-H850 mit Tapatalk


Beta-User

Zitat von: Beta-User am 13 April 2018, 13:33:46
Mach mal localtime und das "-" da weg ;) ...
Das war so gemeint:
{strftime("%H:%M", ReadingsAge('s_trockner','running',0))}
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

betateilchen

Bei mir kommt da ein Syntaxfehler.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Ganz ohne Variable:


{(split(' ', gmtime(7123)))[3]}


Liefert völlig korrekt: 01:58:43

Antatt gmtime(7123) kann man natürlich auch das gewünschte ReadingsAge() einbauen.

Noch weniger Variablen geht nicht, ich hoffe, das Thema ist damit durch.

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

CoolTux


sub sec2time($) {
    my ($sec) = @_;

    # return human readable format
    my $hours = ( abs($sec) < 3600 ? 0 : int( abs($sec) / 3600 ) );
    $sec -= ( $hours == 0 ? 0 : ( $hours * 3600 ) );
    my $minutes = ( abs($sec) < 60 ? 0 : int( abs($sec) / 60 ) );
    my $seconds = abs($sec) % 60;

    $hours   = "0" . $hours   if ( $hours < 10 );
    $minutes = "0" . $minutes if ( $minutes < 10 );
    $seconds = "0" . $seconds if ( $seconds < 10 );

    return "$hours:$minutes:$seconds";
}
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

betateilchen

boah, die Lösungen werden ja immer komplizierter...

Trotzdem finde ich, mein Vorschlag mit gmtime() ganz ohne Variablen hat den meisten "Charme", auch wenn er die Einschränkung besitzt, bei mehr als 24 Stunden nicht mehr zu funktionieren :)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

87insane

Ich muss ganz ehrlich sagen -> DANKE! Mega Geil!
Das ist genau wonach ich suchte.

Ich hoffe über so was muss man nicht mehr diskutieren sondern findet verschiedene Lösungen. Freut mich das der Sache noch mehr Personen anteil genommen haben.

betateilchen

Zitat von: 87insane am 13 April 2018, 21:45:16
Ich hoffe über so was muss man nicht mehr diskutieren

man hätte auch jetzt nich so lange diskutieren müssen, wenn Du Dir einmal die "Mühe" gemacht hättest, google zu befragen und/oder Dir ein paar perl Grundlagen anzueignen

Zitat von: 87insane am 13 April 2018, 21:45:16
sondern findet verschiedene Lösungen

Was willst Du damit sagen? Immerhin warst doch Du derjenige, der mit "verschiedenen Lösungen" nicht zufriedenzustellen war. Wobei da durchaus universellere und bessere Lösungen dabei waren als der jetzt präferierte quick-and-dirty-Hack
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

scheich

Hier nochmal ein "One-Liner" für TAGE:STUNDEN:MINUTEN:SEKUNDEN

{sprintf "%02d:%02d:%02d:%02d", (gmtime(ReadingsAge('<device>','<reading>',0)))[7,2,1,0]}

87insane