Hauptmenü

DOIF setzt Zeit falsch.

Begonnen von AmunRe, 31 Dezember 2017, 19:04:15

Vorheriges Thema - Nächstes Thema

AmunRe

Hallo Zusammen,


Ich habe ein DOIF mit dem ich mir die Uhrzeit setze.


Das sieht so aus: define di_uhrzeitsetzen DOIF ([+:01])({fhem("set fp_time $hour:$min")})({fhem("setreading fp_time datum $mday.$month.$year")})



Wenn das auslöst setzt er mir aber in dem Device nicht die aktuelle Uhrzeit, sondern immer die von der Minute davor. Wenn ich das in der neuen minute auslöse, sollte er doch auch die neue Minute setzen?


Internals:
   CFGFN     
   DEF        ([+:01])({fhem("set fp_time $hour:$min")})({fhem("setreading fp_time datum $mday.$month.$year")})
   NAME       di_uhrzeitsetzen
   NR         32211
   NTFY_ORDER 50-di_uhrzeitsetzen
   STATE      cmd_1
   TYPE       DOIF
   Helper:
     DBLOG:
       cmd:
         DBLogging:
           TIME       1514738486.97188
           VALUE      0
       state:
         DBLogging:
           TIME       1514738486.97188
           VALUE      initialized
   READINGS:
     2017-12-31 19:00:00   cmd             1.2
     2017-12-31 19:00:00   cmd_event       timer_1
     2017-12-31 19:00:00   cmd_nr          1
     2017-12-31 19:00:00   cmd_seqnr       2
     2017-12-31 19:00:00   state           cmd_1
     2017-12-31 19:00:00   timer_01_c01    31.12.2017 19:01:00
   Regex:
   condition:
     0          DOIF_time_once($hash,0,$wday)
   days:
   devices:
   do:
     0:
       0          {fhem("set fp_time $hour:$min")}
       1          {fhem("setreading fp_time datum $mday.$month.$year")}
     1:
   helper:
     DOIF_Readings_events
     DOIF_eventas
     event      timer_1
     globalinit 1
     last_timer 1
     sleeptimer -1
     timerdev   
     timerevent timer_1
     timereventsState
     triggerDev
     timerevents:
       timer_1
     triggerEvents:
       timer_1
   internals:
   interval:
   itimer:
   localtime:
     0          1514743260
   readings:
   realtime:
     0          19:01:00
   time:
     0          +:01
   timeCond:
     0          0
   timer:
     0          0
   timers:
     0           0
   triggertime:
     1514743260:
       localtime  1514743260
       hash:
   uiState:
   uiTable:
Attributes:
   DbLogExclude .*
   do         always
   event-on-change-reading .*
   room       Befehle,Kontrollraum





Internals:
   CFGFN     
   NAME       fp_time
   NR         178
   STATE      19:12
   TYPE       dummy
   READINGS:
     2017-12-31 19:13:00   datum           31.12.2017
     2017-12-31 19:13:00   state           19:12
Attributes:
   DbLogExclude .*
   alias      Uhrzeit
   group      Uhrzeit   room       Uebersicht,technik
4 x Echo Dot, HMLAN Gateway, und diverse HM Komponenten, Philips Hue + OSRAM Plugs

Ellert

ZitatWenn das auslöst setzt er mir aber in dem Device nicht die aktuelle Uhrzeit
Woran machst Du das fest?

AmunRe

#2
Zitat von: Ellert am 31 Dezember 2017, 19:45:13
Woran machst Du das fest?


Naja schau dir mal das fp_time an. Ich hatte das list angehängt im ersten Post.


Da steht
Zitat2017-12-31 19:13:00   state           19:12


Die erste zeit ist die vom Reading, wann die letzte Änderung erfolgt ist und dann kommt der gesetzte Wert. dh gesetzt wurde um 19:13 die Zeit 19:12.


Außerdem seh ich es auch, wenn ich mir das fp_time device anschaue, es hängt immer eine Minute zurück


Oder bin ich jetzt völlig banane?
4 x Echo Dot, HMLAN Gateway, und diverse HM Komponenten, Philips Hue + OSRAM Plugs

Ellert


AmunRe

Zitat von: Ellert am 31 Dezember 2017, 20:32:42
Was passiert, wenn Du die Zeit über strftime setzt?
http://search.cpan.org/~dexter/POSIX-strftime-GNU-0.0305/lib/POSIX/strftime/GNU.pm


Dann bin ich raus, ich versteh die Function nämlich nicht. :(


Aber danke für den Hinweis
4 x Echo Dot, HMLAN Gateway, und diverse HM Komponenten, Philips Hue + OSRAM Plugs

betateilchen

warum um alles in der Welt macht man sowas per DOIF und nicht per at ?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Ellert

Zitat von: AmunRe am 31 Dezember 2017, 21:56:43

Dann bin ich raus, ich versteh die Function nämlich nicht. :(


Aber danke für den Hinweis

Bei mir gibt es keinen Unterschied bei den Zeitstempeln.
Zitatdefmod uhrzeit DOIF ([+:01]) (setreading $SELF time {(POSIX::strftime('%H.%M.%S', localtime))}, {(fhem "setreading $SELF time2 $hour:$min:$sec")})
attr uhrzeit do always

setstate uhrzeit cmd_1
setstate uhrzeit 2018-01-01 00:18:00 cmd 1
setstate uhrzeit 2018-01-01 00:18:00 cmd_event timer_1
setstate uhrzeit 2018-01-01 00:18:00 cmd_nr 1
setstate uhrzeit 2017-12-31 20:49:44 mode enabled
setstate uhrzeit 2018-01-01 00:18:00 state cmd_1
setstate uhrzeit 2018-01-01 00:18:00 time 00.18.00
setstate uhrzeit 2018-01-01 00:18:00 time2 0:18:0
setstate uhrzeit 2018-01-01 00:18:00 timer_01_c01 01.01.2018 00:19:00


AmunRe

#7
Zitat von: Ellert am 01 Januar 2018, 00:22:29
Bei mir gibt es keinen Unterschied bei den Zeitstempeln.


Bei mir schon, aber dank deiner Function weiß ich jetzt warum.


ZitatInternals:
   CFGFN     
   NAME       fp_time
   NR         178
   STATE      02.47.59
   TYPE       dummy
   READINGS:
     2018-01-01 02:46:00   datum           1.1.2018
    2018-01-01 02:48:00   state           02.47.59
Attributes:
   DbLogExclude .*
   alias      Uhrzeit
   group      Uhrzeit
   room       Uebersicht,technik


Er führt das DOIF wohl zu früh aus?


Zitat von: betateilchen am 31 Dezember 2017, 22:09:43
warum um alles in der Welt macht man sowas per DOIF und nicht per at ?


Weil ich es mit DOIF verständlicher finde. und so genau auf die Minute triggern kann (Zumindest theoretisch).
4 x Echo Dot, HMLAN Gateway, und diverse HM Komponenten, Philips Hue + OSRAM Plugs

Damian

DOIF benutzt die gleichen Zeit-Trigger-Mechanismen, wie at, diese sind in fhem.pl programmiert.  Warum es bei dir zu früh ausgeführt wird, kann ich dir nicht sagen.

Als Workaround kannst auch definieren:

DOIF ([([+:01]+1)]) ....
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF