FHEM Forum

FHEM - Hausautomations-Systeme => Sonstige Systeme => Thema gestartet von: neyzen am 16 Oktober 2019, 09:35:06

Titel: Dummy Zeitdifferenz berechnen
Beitrag von: neyzen am 16 Oktober 2019, 09:35:06
Hallo Forum,

ich habe einen Dummy in der ich einmal am Tag eine Uhrzeit reinschreiben lasse. Diese Uhrzeit steht im state und ändert sich jeden Tag.
Ich möchte gerne so eine Art counter, der mir die verbleibende Zeit bis zu dieser Uhrzeit im Dummy ausrechnet.
Wie kann ich das am einfachsten machen?

Vielen Dank
Titel: Antw:Dummy Zeitdifferenz berechnen
Beitrag von: Otto123 am 16 Oktober 2019, 10:01:33
Hallo,

da die Infos zu wenige sind - erstmal dieser aktuelle Fall zum Lesen https://forum.fhem.de/index.php/topic,104521.msg983878.html#msg983878

Gruß Otto
Titel: Antw:Dummy Zeitdifferenz berechnen
Beitrag von: rabehd am 16 Oktober 2019, 10:05:26
(Dummystate in Unix-Zeit) minus (Jetzt in Unix-Zeit)  ist gleich Zeit von jetzt bis zur eingestellten Uhrzeit.

Ein Counter soll sich doch ändern? Wofür  diese Info?

Wie Otto schon schreibt, zu wenig Infos.
Was willst Du , was hast Du (Format...)?
Titel: Antw:Dummy Zeitdifferenz berechnen
Beitrag von: neyzen am 16 Oktober 2019, 20:47:41
Mein Dummy sieht wie folgt aus.

Internals:
   FUUID      5d98904c-f33f-2b39-cdc4-2980959b2414496b
   NAME       Aksam
   NR         151
   STATE      18:41
   TYPE       dummy
   READINGS:
     2019-10-16 20:33:04   state           18:41
   helper:
     bm:
       dummy_Set:
         cnt        22
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        16.10. 20:33:04
         max        0.0145821571350098
         tot        0.0226759910583496
         mAr:
           HASH(0x3d536c8)
           Aksam
           18:41
Attributes:
   room       Namaz
   sortby     05


Die Uhrzeit im state, hier 18:41 schreibe ich mir mit einem at Befehl jeden Tag vom HTTPMOD raus.

Internals:
   COMMAND    set Aksam {(ReadingsVal('Namaz','05_Abendgebet','18:00'))}
   DEF        *02:00:45 set Aksam {(ReadingsVal('Namaz','05_Abendgebet','18:00'))}
   FUUID      5d9903c1-f33f-2b39-3cab-1393bc8a4454e2bf
   NAME       Gebet_Aksam_aktualisieren
   NR         157
   PERIODIC   yes
   RELATIVE   no
   REP        -1
   STATE      Next: 02:00:45
   TIMESPEC   02:00:45
   TRIGGERTIME 1571270445
   TRIGGERTIME_FMT 2019-10-17 02:00:45
   TYPE       at
   READINGS:
     2019-10-16 02:00:45   state           Next: 02:00:45
   helper:
     bm:
       at_Set:
         cnt        17
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        15.10. 21:24:28
         max        0.000164985656738281
         tot        0.00147318840026855
         mAr:
           HASH(0x3d87450)
           Gebet_Aksam_aktualisieren
           ?
Attributes:
   room       Namaz


Diese Uhrzeit ändert sich jeden Tag.
Ich möchte nur die Verbleibende Zeit berechnen. Also JetztZeit - DummyZeit.
Dieses soll später nur als Information dienen die ich auch auf dem FTUI darstellen möchte.

Titel: Antw:Dummy Zeitdifferenz berechnen
Beitrag von: rabehd am 16 Oktober 2019, 21:11:28
Ich denke, dann ist die Frage hier falsch und gehört ins Unterforum FTUI.

Es wäre Unsinn ein Reading jede Sekunde oder Minute zu berechnen und dann in FTUI darzustellen.
Das geht wohl in z.B. Javaskript.
Titel: Antw:Dummy Zeitdifferenz berechnen
Beitrag von: Otto123 am 16 Oktober 2019, 21:14:47
Vorschlag userReading
attr Aksam userReadings ZeitSec {time_str2num(strftime("%Y-%m-%d", localtime)." ".ReadingsVal($name,"state",""))-time}
liefert die Zeit bis zum "state" in Sekunden.
Man kann den Perlcode aber anderweitig und in anderen Geräten verwenden, dann ist  $name durch "Aksam" zu ersetzen. Für den "counter" müsste dann der Code geeignet getriggert werden. Da gäbe es sicher viele viele Varianten ...

Vom Rest hab ich keine Ahnung :)

Gruß Otto
Titel: Antw:Dummy Zeitdifferenz berechnen
Beitrag von: rabehd am 16 Oktober 2019, 22:46:07
ZitatVorschlag userReading
War auch meine erste Idee, aber dann braucht man einen Auslöser, der die Neuberechung anstößt und am Ende erzeugt man unnötige Last. Solche Wünsche sollte das Anzeigesystem erfüllen, nicht FHEM.
Titel: Antw:Dummy Zeitdifferenz berechnen
Beitrag von: Otto123 am 16 Oktober 2019, 22:52:30
Hast ja zu 100% Recht. Aber genau genommen war die Aktualisierung nicht gefragt :) oder nur "versteckt" formuliert. Und von Aktualisierungsfrequenz war gar keine Rede. "Nur als Information und später ..." - alles sehr wage :)

Wenn der Lösungsansatz nicht genannt wird,... - Dann versuch ich einfach nur die Frage zu beantworten ;)
Titel: Antw:Dummy Zeitdifferenz berechnen
Beitrag von: rabehd am 17 Oktober 2019, 07:08:17
Den Lösungsansatz finde ich schon im Eröffungsbeitrag, sogar das Wort "counter".
Was fehlt ist der Anwendungsfall, von FTUI war am Anfang auch nicht die Rede.
Ich sehe es wie Du, zu wenig Info.
Man kann eine schnelle Antwort geben, die zwar die Frage beantwortet, aber nicht das wirkliche Problem löst.

Wir haben beide unser bestes getan und ihm ist hoffentlich geholfen.
Was wären die vielen Nutzer ohne Deine Aktivität hier. Ich schätze Deine Beiträge sehr.

Da wäre noch einer mit dem Problem https://forum.fhem.de/index.php/topic,104573.msg984533.html#msg984533 (https://forum.fhem.de/index.php/topic,104573.msg984533.html#msg984533)
Titel: Antw:Dummy Zeitdifferenz berechnen
Beitrag von: neyzen am 17 Oktober 2019, 09:33:30
Ich danke euch beiden. 8)
Titel: Antw:Dummy Zeitdifferenz berechnen
Beitrag von: neyzen am 18 Oktober 2019, 20:06:35
Zitat von: Otto123 am 16 Oktober 2019, 21:14:47
Vorschlag userReading
attr Aksam userReadings ZeitSec {time_str2num(strftime("%Y-%m-%d", localtime)." ".ReadingsVal($name,"state",""))-time}
liefert die Zeit bis zum "state" in Sekunden.
Man kann den Perlcode aber anderweitig und in anderen Geräten verwenden, dann ist  $name durch "Aksam" zu ersetzen. Für den "counter" müsste dann der Code geeignet getriggert werden. Da gäbe es sicher viele viele Varianten ...

Vom Rest hab ich keine Ahnung :)

Gruß Otto

Leider bin ich erst jetzt dazu gekommen das einzupflegen.
Otto nochmals Danke für deinen Code, funktioniert!
Allerdings, wie bekomme ich diese Zahl als Uhrzeit dargestellt in HH:MM Format?

Internals:
   FUUID      5d98904c-f33f-2b39-cdc4-2980959b2414496b
   NAME       Aksam
   NR         151
   STATE      20:34
   TYPE       dummy
   READINGS:
     2019-10-18 20:02:42   ZeitSec         1878
     2019-10-18 20:02:42   state           20:34
   helper:
     bm:
       dummy_Set:
         cnt        85
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        16.10. 20:33:04
         max        0.0145821571350098
         tot        0.0981221199035645
         mAr:
           HASH(0x3d536c8)
           Aksam
           18:41
Attributes:
   room       Namaz
   sortby     05
   userReadings ZeitSec {time_str2num(strftime("%Y-%m-%d", localtime)." ".ReadingsVal($name,"state",""))-time}
Titel: Antw:Dummy Zeitdifferenz berechnen
Beitrag von: Otto123 am 18 Oktober 2019, 20:23:52
Dazu brauchst Du z.B. int() und % (modulo)
Nach folgendem Schema, probier es einfach aus:
{my $var=7322;;int($var/3600)}
{my $var=7322;;$var%3600}
Tipp
Die Stunde hat 3600 sec
Die Minute hat 60 sec
;D
Hab noch sowas gefunden:
{my $sec=7322;; my $min=$sec/60;;my $st=int($min/60);;my $restmin=$min%60;; my $restsec=$sec%60;; my $ergebnis="$st h $restmin min $restsec sek";; return $ergebnis}

Ob es eine einfachere Gesamtfunktion gibt weiß ich nicht :-[

Gruß Otto
Titel: Antw:Dummy Zeitdifferenz berechnen
Beitrag von: neyzen am 18 Oktober 2019, 21:47:31
Otto, vielen vielen Dank. 8)

Internals:
   FUUID      5d98904c-f33f-2b39-cdc4-2980959b2414496b
   NAME       Aksam
   NR         151
   STATE      22:33
   TYPE       dummy
   READINGS:
     2019-10-18 21:45:18   RestZeit        0 h 47 min 42 sek
     2019-10-18 21:45:18   ZeitSec         2862
     2019-10-18 21:45:18   state           22:33
   helper:
     bm:
       dummy_Set:
         cnt        342
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        18.10. 21:18:32
         max        0.0289838314056396
         tot        0.536463975906372
         mAr:
           HASH(0x3d536c8)
           Aksam
           21:33
Attributes:
   room       Namaz
   sortby     05
   userReadings ZeitSec {time_str2num(strftime("%Y-%m-%d", localtime)." ".ReadingsVal($name,"state",""))-time},
RestZeit {my $sec=ReadingsVal("Aksam","ZeitSec",0);; my $min=$sec/60;;my $st=int($min/60);;my $restmin=$min%60;; my $restsec=$sec%60;; my $ergebnis="$st h $restmin min $restsec sek";; return $ergebnis}