(gelöst) Timer wieder auf Anfang, geht nicht

Begonnen von Robert1963, 27 Juli 2017, 08:46:59

Vorheriges Thema - Nächstes Thema

Robert1963

Hallo,

hab schon den 3. Tag immer wieder gesucht, gelesen und versucht.
Aber entweder hab ich das gelesene nicht verstanden oder falsch umgesetzt.

Ich wollte, eben mal auf die schnelle, einen kleinen Timer definieren der mir die Zeit anzeigt wie lange mein Monitor noch an ist. Ausgelöst wird das durch den gleichen Dummy (von einem Bewegungsmelder gesteuert) der den Monitor ein schaltet.

Das ganze funktioniert auch, der Timer verlängert sich auch wenn das Ereignis zwischendurch wieder eintritt.

Aber ich hätte gern das jedes mal wenn das Ereignis eintritt, das DOIF wieder von vorne anfängt.
Hört sich einfach an, habs aber nicht gepeilt. Das DOIF bleib immer im grade akt. Ausführungsteil und verlängert den dazugehörigen wait.
Hab div. waitdel, resetwait  etc. probiert, aber es trotz intensiven lesens der Command Ref nicht hin bekommen. Wobei mir waitdel nicht so ganz erschließt.

Würde gern mein Versändniss des DOIF wait Attributes verbessern.
Hier das List vom DOIF:
ZitatInternals:
   CFGFN
   DEF        ([ku_bewg_switch:"on"])

   (setreading $SELF Timer 5 Min)        

   (setreading $SELF Timer 4 Min)        

   (setreading $SELF Timer 3 Min)        

   (setreading $SELF Timer 2 Min)        

   (setreading $SELF Timer 1 Min)           

   (deletereading $SELF Timer )
   NAME       act_DOIF_Monitor_Zeit
   NR         3770
   NTFY_ORDER 50-act_DOIF_Monitor_Zeit
   STATE      5 Min
   TYPE       DOIF
   READINGS:
     2017-07-27 07:54:36   Device          ku_bewg_switch
     2017-07-27 07:53:09   Timer           5 Min
     2017-07-27 07:53:09   cmd             1.1
     2017-07-27 07:53:09   cmd_event       ku_bewg_switch
     2017-07-27 07:53:09   cmd_nr          1
     2017-07-27 07:53:09   cmd_seqnr       1
     2017-07-27 07:54:36   e_ku_bewg_switch_events off
     2017-07-27 07:53:09   state           5 Min
     2017-07-27 07:54:26   wait_timer      27.07.2017 07:55:26 cmd_1_2 ku_bewg_switch
   condition:
     0          EventDoIf('ku_bewg_switch',$hash,'on',1)
   devices:
     0           ku_bewg_switch
     all         ku_bewg_switch
   do:
     0:
       0          setreading act_DOIF_Monitor_Zeit Timer 5 Min
       1          setreading act_DOIF_Monitor_Zeit Timer 4 Min
       2          setreading act_DOIF_Monitor_Zeit Timer 3 Min
       3          setreading act_DOIF_Monitor_Zeit Timer 2 Min
       4          setreading act_DOIF_Monitor_Zeit Timer 1 Min
       5          deletereading act_DOIF_Monitor_Zeit Timer
     1:
   helper:
     event      off
     globalinit 1
     last_timer 0
     sleepdevice ku_bewg_switch
     sleepsubtimer 1
     sleeptimer 0
     timerdev   ku_bewg_switch
     timerevent on
     triggerDev ku_bewg_switch
     timerevents:
       on
     timereventsState:
       state: on
     triggerEvents:
       off
     triggerEventsState:
       state: off
   internals:
   itimer:
   readings:
   regexp:
     0:
     all:
   state:
     device      act_DOIF_Monitor_Zeit
     STATE:
   trigger:
     all         ku_bewg_switch
Attributes:
   do         resetwait
   fp_Haus    298,1092,0,act_DOIF_Monitor_Zeit,
   group      Monitor
   room       System
   state      [$SELF:Timer]
   wait       0,60,60,60,60,60

Kann mir jemand auf den richtigen Weg helfen. (Hoffe ich habs nicht zu kompliziert erklärt)

Danke,
      Robert
Nuc 7i7, Ubuntu 20.04.2 LTS, FS20, Homematic, EnOcean, Hue, Conbee, Fritzbox 6490kd,

Amenophis86

Ich bin mir nicht sicher, aber du brauchst glaube eher ein Attr do always. Du willst ja, dass bei jeder erkannten Bewegung der Timer wieder neu beginnt. Also muss er jedes mal feuern und das macht do always.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Robert1963

#2
Auch do always verändert nur den akt. laufenden wait, auch damit wird das DOIF nicht, wieder von vorn angefangen.

Danke fürs mitdenken, aber so einfach ist es leider nicht.
Nuc 7i7, Ubuntu 20.04.2 LTS, FS20, Homematic, EnOcean, Hue, Conbee, Fritzbox 6490kd,

Damian

#3
Hier eine mögliche Lösung:
([ku_bewg_switch:"on"])
   (setreading $SELF Timer 5 Min)         
DOELSEIF ([$SELF:cmd] == 1)
   (setreading $SELF Timer 4 Min)         
   (setreading $SELF Timer 3 Min)         
   (setreading $SELF Timer 2 Min)         
   (setreading $SELF Timer 1 Min)

attr do always
attr selftrigger all
attr checkReadingEvent 1
attr wait 0:60,60,60,60


Edit: Da du Status aut Timer geändert hast musst du auf [$SELF:cmd]  abfragen
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Robert1963


Das funktioniert (natürlich).

Hab das für mich (Immer noch in den Anfängen) verständlicher gemacht und checkReadingEvent weggelassen.


([TST]) ##Test Dummy

   (setreading $SELF Timer 5 Min)
   
DOELSEIF ([$SELF:Timer] eq "5 Min")

   (setreading $SELF Timer 4 Min)         
   (setreading $SELF Timer 3 Min)         
   (setreading $SELF Timer 2 Min)         
   (setreading $SELF Timer 1 Min)


Scheint auch zu funktionieren, oder ist das so nicht korrekt?

Vielen Dank fürs mitdenken,
Robert




Nuc 7i7, Ubuntu 20.04.2 LTS, FS20, Homematic, EnOcean, Hue, Conbee, Fritzbox 6490kd,

Damian

Zitat von: Robert1963 am 29 Juli 2017, 06:14:26
Das funktioniert (natürlich).

Hab das für mich (Immer noch in den Anfängen) verständlicher gemacht und checkReadingEvent weggelassen.


([TST]) ##Test Dummy

   (setreading $SELF Timer 5 Min)
   
DOELSEIF ([$SELF:Timer] eq "5 Min")

   (setreading $SELF Timer 4 Min)         
   (setreading $SELF Timer 3 Min)         
   (setreading $SELF Timer 2 Min)         
   (setreading $SELF Timer 1 Min)


Scheint auch zu funktionieren, oder ist das so nicht korrekt?

Vielen Dank fürs mitdenken,
Robert

Wenn du checkReadingEvent weglässt, wird unnötig zwei mal getriggert, weil im Modul nicht nur cmd gesetzt wird, sondern dein Timer und noch andere Sachen. Du wirst das nur im Eventmonitor sehen und nicht merken, aber dein System wird unnötig belastet.

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Robert1963


Vielen Dank!

Wieder einiges gelernt  :)
Nuc 7i7, Ubuntu 20.04.2 LTS, FS20, Homematic, EnOcean, Hue, Conbee, Fritzbox 6490kd,

Robert1963


Für alle die das auch so machen wollen.

Es gab wohl durch den selftrigger all in der danach gestalteten Abfrage einen Fehler der zum kompl. abschalten des Servers führte.

Mit selftrigger await gehts!
Nuc 7i7, Ubuntu 20.04.2 LTS, FS20, Homematic, EnOcean, Hue, Conbee, Fritzbox 6490kd,

Damian

Zitat von: Robert1963 am 03 November 2017, 16:58:15
Für alle die das auch so machen wollen.

Es gab wohl durch den selftrigger all in der danach gestalteten Abfrage einen Fehler der zum kompl. abschalten des Servers führte.

Mit selftrigger await gehts!

Abgesehen davon, dass "selftrigger all" selten eine gute Idee ist, sollte das Problem auch bei "all" mit der neuen Version hier: https://forum.fhem.de/index.php/topic,77690.msg696203.html#msg696203
nicht mehr vorkommen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF