[Gelöst] Automatische Befehlsausführung nach dem „enablen“ eines DOIF

Begonnen von ComputerZOO, 17 Mai 2018, 21:13:54

Vorheriges Thema - Nächstes Thema

ComputerZOO

Nabend,

vielleicht habe ich es überlesen, aber ist es möglich, dass z.B. cmd_1 ausgeführt, sobald ich ein DOIF mit set xxx enable eingeschaltet habe?

Der Hintergrund ist folgender:
Ich habe ein DOIF, welches (wenn es durch einen Bewegungsmelder eingeschaltet wird) minütlich die Uhrzeit an ein Matrix-Display sendet. Wenn man nun um 20:15:10 den Raum betritt, dann wird das cmd_1 ja erst 50 Sekunden später ausgeführt.

Hier ein List des DOIF:
Internals:
   .eventMapCmd startClock:noArg on:noArg off:noArg
   DEF        ([+:01]) {
  showPAROLA("edot.esp.parola", uhrzeit("hhmm"), "[$SELF:displayEffect]", "", "", "", "", 25, 58500, "[$SELF:displayBrightness]", 1, "[$SELF:displayFont]");
}
   MODEL      FHEM
   NAME       di.sys.uhr
   NR         529
   NTFY_ORDER 50-di.sys.uhr
   STATE      disabled
   TYPE       DOIF
   .attraggr:
   .attrminint:
   READINGS:
     2018-05-17 05:51:00   cmd             1
     2018-05-17 05:51:00   cmd_event       timer_1
     2018-05-17 05:51:00   cmd_nr          1
     2018-05-13 22:18:43   displayBrightness 15
     2018-05-13 22:31:13   displayEffect   up
     2018-05-13 22:24:08   displayFont     bigfont
     2018-05-17 18:45:34   last_cmd        disabled
     2018-05-17 18:45:34   mode            disabled
     2018-05-17 18:45:34   state           disabled
     2018-05-17 21:12:00   timer_01_c01    17.05.2018 21:13:00
   Regex:
   condition:
     0          DOIF_time_once($hash,0,$wday)
   days:
   devices:
   do:
     0:
       0          {   showPAROLA("edot.esp.parola", uhrzeit("hhmm"), "[di.sys.uhr:displayEffect]", "", "", "", "", 25, 58500, "[di.sys.uhr:displayBrightness]", 1, "[di.sys.uhr:displayFont]"); }
     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:
   intervalfunc:
   itimer:
   localtime:
     0          1526584380
   perlblock:
   readings:
   realtime:
     0          21:13:00
   time:
     0          +:01
   timeCond:
     0          0
   timer:
     0          0
   timers:
     0           0
   triggertime:
     1526584380:
       localtime  1526584380
       hash:
   uiState:
   uiTable:
Attributes:
   alias      Uhrzeit anzeigen
   cmdIcon    startClock:control_home
   devStateIcon disabled:general_aus@red:enable .*:general_an@green:disable
   do         always
   eventMap   /cmd_1:startClock/enable:on/disable:off/
   group      90_FHEM
   icon       clock
   readingList displayBrightness,displayFont,displayEffect
   room       Küche,System->Logik
   setList    displayBrightness:selectnumbers,-5,1,15,0,lin
displayFont:tiny7Seg,tiny7SegFramed,small7Seg,numeric7Seg,ExtASCII,bigfont
displayEffect:print,fade,printfade,fadeprint,left,right,leftright,rightleft,up,down,downup,updown,growup,growdown,growupdown,growdownup,open,close,openclose,closeopen,open_cursor,close_cursor,openclose_cursor,closeopen_cursor,wipe,wipe_cursor,slice,mesh,fade,dissolve,random,cornerleft,cornerright
   webCmd     displayFont:displayEffect:displayBrightness:startClock
   webCmdLabel Schrift:Effekt:Helligkeit:Start

Frank_Huber

Set Doif cmd_1 oder set doif checkall sollte das machen.
Musst dann nur dem enable als zweiten Befehl mitgeben.

Gesendet von meinem S60 mit Tapatalk


ComputerZOO

Das funktioniert nicht, set doif cmd_1 funktioniert nur, wenn das DOIF bereits bereits ,,enabled" ist. Wenn es noch auf disable steht, wird set doif cmd_1 nicht ausgeführt.

Frank_Huber

Zitat von: ComputerZOO am 17 Mai 2018, 21:45:39
Das funktioniert nicht, set doif cmd_1 funktioniert nur, wenn das DOIF bereits bereits ,,enabled" ist. Wenn es noch auf disable steht, wird set doif cmd_1 nicht ausgeführt.
Lies nochmal langsam meinen post.
Vor allem die zweite Zeile...

Gesendet von meinem S60 mit Tapatalk


ComputerZOO

Hmm, stehe wohl auf der Leitung,

Das
set doif enable;
set doif cmd_1;

funktioniert ist klar, aber was meinst du mit:
Zitat...Musst dann nur dem enable als zweiten Befehl mitgeben...
???

Frank_Huber

Zitat von: ComputerZOO am 17 Mai 2018, 21:56:51
Hmm, stehe wohl auf der Leitung,

Das
set doif enable;
set doif cmd_1;

funktioniert ist klar, aber was meinst du mit:???
Genau das was du jetzt gemacht hast.
Deinem enable Befehl einen zweiten Befehl mitgeben. [emoji6]

Gesendet von meinem S60 mit Tapatalk


ComputerZOO

Ok, danke, das war ja nicht das, was ich gesucht habe, ich dachte, das DOIF so etwas irgendwie ,,out-of-the-box" kann.
Dann schreibe ich mir halt nen Notify oder DOIF, welches die Events zur Aktivierung überwacht und mir dann das cmd_1 des eventauslösenden DOIF startet.

ComputerZOO

#7
So, hier die Lösung:

defmod n.uhr.enabled notify di.*.uhr:mode:.enabled {
  fhem ("set $NAME startClock");
}

Frank_Huber

Wie enablest du denn das doif?

Gesendet von meinem S60 mit Tapatalk


ComputerZOO

Zitat von: Frank_Huber am 17 Mai 2018, 22:28:27
Wie enablest du denn das doif?

Gesendet von meinem S60 mit Tapatalk
In meinem Fall mit set di.wz.uhr on

(on, off, startClock über die eventMap)

Per

Habe gerade kein FHEM zum Testen hier, aber könnte man ein DOIF auf den eigenen Enable-Event reagieren lassen?

Frank_Huber

Zitat von: Per am 18 Mai 2018, 11:46:14
Habe gerade kein FHEM zum Testen hier, aber könnte man ein DOIF auf den eigenen Enable-Event reagieren lassen?
Gute Idee Per. $SELF eq "initialized" sollte das sein.

Gesendet von meinem S60 mit Tapatalk