Hallo Damian,
die Idee ist folgende: für die Vereinigung von einem Dummy und einer DOIF-Definition wäre es schön, wenn bei dem set DOIF disable das DOIF ein letztes mal aufgerufen würde, um darauf triggern zu können, um eine Ende-Aktion durchzuführen. Ein DOIF kann sich beim Initialisieren offensichtlich selbst triggern, beim Disablen aber nicht.
Beispiel:
Internals: 
   CFGFN 
   DEF        ([Ambientelicht_Automatik_Test] eq "on") ({Log 3,"an"}) DOELSEIF ([Ambientelicht_Automatik_Test] eq "off") ({Log 3,"aus"}) 
   NAME       Ambientelicht_Automatik_Test 
   NR         3313 
   NTFY_ORDER 50-Ambientelicht_Automatik_Test 
   STATE      off 
   TYPE       DOIF 
   CHANGETIME: 
   Helper: 
     Dblog: 
       Device: 
         Eventlog: 
           TIME       1441464419.32019 
           VALUE      Ambientelicht_Automatik_Test 
       Cmd_event: 
         Eventlog: 
           TIME       1441464263.14614 
           VALUE      Ambientelicht_Automatik_Test 
       Cmd_nr: 
         Eventlog: 
           TIME       1441464263.14614 
           VALUE      1 
       E_ambientelicht_automatik_test_state: 
         Eventlog: 
           TIME       1441464419.32019 
           VALUE      on 
       Mode: 
         Eventlog: 
           TIME       1441464504.13084 
           VALUE      disabled 
       State: 
         Eventlog: 
           TIME       1441464504.13084 
           VALUE      disabled 
   Readings: 
     2015-09-05 16:48:24   mode            disabled 
     2015-09-05 16:48:24   state           disabled 
   Condition: 
     0          InternalDoIf('Ambientelicht_Automatik_Test','STATE','') eq "on" 
     1          InternalDoIf('Ambientelicht_Automatik_Test','STATE','') eq "off" 
   Devices: 
     0           Ambientelicht_Automatik_Test 
     1           Ambientelicht_Automatik_Test 
     all         Ambientelicht_Automatik_Test 
   Do: 
     0: 
       0          {Log 3,"an"} 
     1: 
       0          {Log 3,"aus"} 
   Helper: 
     globalinit 1 
     last_timer 0 
     sleeptimer -1 
   Internals: 
     0           Ambientelicht_Automatik_Test:STATE 
     1           Ambientelicht_Automatik_Test:STATE 
     all         Ambientelicht_Automatik_Test:STATE 
   Itimer: 
   State: 
   Timerfunc: 
Attributes: 
   devStateIcon on:general_an_fuer_zeit off:general_aus_fuer_zeit 
   eventMap   disable:off initialize:on 
   room       Einstellungen 
   stateFormat {ReadingsVal("Ambientelicht_Automatik_Test","state","") eq "disabled"?"off":"on"} 
   webCmd     on:off 
Klicke ich im Webfrontend auf "on", erhält das DOIF den STATE an und es führt auch eine entsprechende Aktion aus. Klicke ich im Webfrontend auf "off", erhält das DOIF den korrekten STATE, führt aber nicht mehr die Schlussaktion aus.
Oder könnte ich das bereits jetzt anders realisieren und ich habe einen Denkfehler?
			
			
			
				Zitat von: Ralli am 05 September 2015, 16:54:47
Hallo Damian,
die Idee ist folgende: für die Vereinigung von einem Dummy und einer DOIF-Definition wäre es schön, wenn bei dem set DOIF disable das DOIF ein letztes mal aufgerufen würde, um darauf triggern zu können, um eine Ende-Aktion durchzuführen. Ein DOIF kann sich beim Initialisieren offensichtlich selbst triggern, beim Disablen aber nicht.
Beispiel:
Internals: 
   CFGFN 
   DEF        ([Ambientelicht_Automatik_Test] eq "on") ({Log 3,"an"}) DOELSEIF ([Ambientelicht_Automatik_Test] eq "off") ({Log 3,"aus"}) 
   NAME       Ambientelicht_Automatik_Test 
   NR         3313 
   NTFY_ORDER 50-Ambientelicht_Automatik_Test 
   STATE      off 
   TYPE       DOIF 
   CHANGETIME: 
   Helper: 
     Dblog: 
       Device: 
         Eventlog: 
           TIME       1441464419.32019 
           VALUE      Ambientelicht_Automatik_Test 
       Cmd_event: 
         Eventlog: 
           TIME       1441464263.14614 
           VALUE      Ambientelicht_Automatik_Test 
       Cmd_nr: 
         Eventlog: 
           TIME       1441464263.14614 
           VALUE      1 
       E_ambientelicht_automatik_test_state: 
         Eventlog: 
           TIME       1441464419.32019 
           VALUE      on 
       Mode: 
         Eventlog: 
           TIME       1441464504.13084 
           VALUE      disabled 
       State: 
         Eventlog: 
           TIME       1441464504.13084 
           VALUE      disabled 
   Readings: 
     2015-09-05 16:48:24   mode            disabled 
     2015-09-05 16:48:24   state           disabled 
   Condition: 
     0          InternalDoIf('Ambientelicht_Automatik_Test','STATE','') eq "on" 
     1          InternalDoIf('Ambientelicht_Automatik_Test','STATE','') eq "off" 
   Devices: 
     0           Ambientelicht_Automatik_Test 
     1           Ambientelicht_Automatik_Test 
     all         Ambientelicht_Automatik_Test 
   Do: 
     0: 
       0          {Log 3,"an"} 
     1: 
       0          {Log 3,"aus"} 
   Helper: 
     globalinit 1 
     last_timer 0 
     sleeptimer -1 
   Internals: 
     0           Ambientelicht_Automatik_Test:STATE 
     1           Ambientelicht_Automatik_Test:STATE 
     all         Ambientelicht_Automatik_Test:STATE 
   Itimer: 
   State: 
   Timerfunc: 
Attributes: 
   devStateIcon on:general_an_fuer_zeit off:general_aus_fuer_zeit 
   eventMap   disable:off initialize:on 
   room       Einstellungen 
   stateFormat {ReadingsVal("Ambientelicht_Automatik_Test","state","") eq "disabled"?"off":"on"} 
   webCmd     on:off 
Klicke ich im Webfrontend auf "on", erhält das DOIF den STATE an und es führt auch eine entsprechende Aktion aus. Klicke ich im Webfrontend auf "off", erhält das DOIF den korrekten STATE, führt aber nicht mehr die Schlussaktion aus.
Oder könnte ich das bereits jetzt anders realisieren und ich habe einen Denkfehler?
Beim set ... initialize wird einfach nur der Status auf initialize gesetzt, der Mode disable und cmd_nr gelöscht, damit führt der nächster Trigger zur Ausführung, weil der vorherige Zustand gelöscht wurde.
DOIF triggert sich nicht selbst. Wenn der Mode disable gesetzt ist werden keine Trigger ausgewertet, die Timer laufen weiter.
Mit der Abfrage auf sich selbst bildest du eine Rekursion, die von FHEM beim zweiten Durchlauf unterbunden wird, da habe ich selbst nichts dazu programmiert. Das sind Mechanismen außerhalb von DOIF.
Gruß
Damian