FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: choetzu am 05 April 2019, 23:17:17

Titel: DOIF greift nicht / keine Fehlermeldung
Beitrag von: choetzu am 05 April 2019, 23:17:17
Hallo,

ich habe einen EnOcean Taster (Nodon), welcher auf meiner Terasse das Licht ein- resp ausschaltet.
Nun möchte ich, dass wenn am Abend meine Terassenkamera (Arlo) aktiviert ist, dass diese ausgeschaltet wird, sobald ich das Licht mit dem Taster anmache. Und wenn ich das Licht wieder ausmache, soll es dann wieder aktivieren.

Mein DOIF sieht wie folgt aus:

(["Aktor_L_Terasse_NodOn6$:^buttons:.pressed$"]
and [?Timer_Arlo_DOIF:cmd_nr] eq "3"
and [?Aktor_L_Terasse_NodOn6] eq "off")
(set Arlo_BasisSecurity disarm)
(set Steingarten_D_FUD61 on)

DOELSEIF
(["Aktor_L_Terasse_NodOn6$:^buttons:.pressed$"]
and [?Timer_Arlo_DOIF:cmd_nr] eq "3"
and [?Aktor_L_Terasse_NodOn6] eq "on")
(set Arlo_BasisSecurity mode Aussen)
(set Steingarten_D_FUD61 off)


Wenn ich nun drücke, passiert nix. Auch keine Fehlermeldung. Es geht lediglich das Licht an, wie immer.

Hier noch ein Listing:
Internals:
   DEF        (["Aktor_L_Terasse_NodOn6$:^buttons:.pressed$"]
and [?Timer_Arlo_DOIF:cmd_nr] eq "3"
and [?Aktor_L_Terasse_NodOn6] eq "off")
(set Arlo_BasisSecurity disarm)
(set Steingarten_D_FUD61 on)

DOELSEIF
(["Aktor_L_Terasse_NodOn6$:^buttons:.pressed$"]
and [?Timer_Arlo_DOIF:cmd_nr] eq "3"
and [?Aktor_L_Terasse_NodOn6] eq "on")
(set Arlo_BasisSecurity mode Aussen)
(set Steingarten_D_FUD61 off)


   FUUID      5ca0c351-f33f-8001-c97a-cbb23a6a202beee2
   MODEL      FHEM
   NAME       Sitzplatz_Lampe_DOIF
   NR         648
   NTFY_ORDER 50-Sitzplatz_Lampe_DOIF
   STATE      initialized
   TYPE       DOIF
   VERSION    18890 2019-03-13 18:56:41
   Helper:
     DBLOG:
       cmd:
         Logging:
           TIME       1554498751.08733
           VALUE      0
       mode:
         Logging:
           TIME       1554498751.08733
           VALUE      enabled
       state:
         Logging:
           TIME       1554498756.35002
           VALUE      checkall
   READINGS:
     2019-04-05 23:12:31   cmd             0
     2019-04-05 23:12:31   mode            enabled
     2019-04-05 23:12:31   state           initialized
   Regex:
     accu:
     cond:
       :
         0:
           "Aktor_L_Terasse_NodOn6$:^buttons:.pressed$" Aktor_L_Terasse_NodOn6$:^buttons:.pressed$
         1:
           "Aktor_L_Terasse_NodOn6$:^buttons:.pressed$" Aktor_L_Terasse_NodOn6$:^buttons:.pressed$
   condition:
     0          ::EventDoIf('Aktor_L_Terasse_NodOn6$',$hash,'^buttons:.pressed$',0) and ::ReadingValDoIf($hash,'Timer_Arlo_DOIF','cmd_nr') eq "3" and ::InternalDoIf($hash,'Aktor_L_Terasse_NodOn6','STATE') eq "off"
     1          ::EventDoIf('Aktor_L_Terasse_NodOn6$',$hash,'^buttons:.pressed$',0) and ::ReadingValDoIf($hash,'Timer_Arlo_DOIF','cmd_nr') eq "3" and ::InternalDoIf($hash,'Aktor_L_Terasse_NodOn6','STATE') eq "on"
   devices:
   do:
     0:
       0          set Arlo_BasisSecurity disarm
       1          set Steingarten_D_FUD61 on
     1:
       0          set Arlo_BasisSecurity mode Aussen
       1          set Steingarten_D_FUD61 off
     2:
   helper:
     globalinit 1
     last_timer 0
     sleeptimer -1
     triggerDev
   internals:
     0           Aktor_L_Terasse_NodOn6:STATE
     1           Aktor_L_Terasse_NodOn6:STATE
     all         Aktor_L_Terasse_NodOn6:STATE
   itimer:
   readings:
   uiState:
   uiTable:
Attributes:
   do         always
   room       01_Automatisierung


was mach ich falsch?

lg c
Titel: Antw:DOIF greift nicht / keine Fehlermeldung
Beitrag von: Ellert am 06 April 2019, 15:43:26
Vermutlich hat ein Operand nicht den gewünschten Wert. Du könntest einen Log-Befehl in die Bedingung einbauen, der die Operanden ausgibt, dann kannst Du das prüfen.
(Log 1, ReadingsVal(...)."|".<usw.>; <Hier die Bedingung>; <oder hier den Log-Befehl>)

Funktioniert die direkte Befehlaausführung per set-Befehl?
Titel: Antw:DOIF greift nicht / keine Fehlermeldung
Beitrag von: Damian am 06 April 2019, 22:01:44
Zitat von: Ellert am 06 April 2019, 15:43:26
Vermutlich hat ein Operand nicht den gewünschten Wert. Du könntest einen Log-Befehl in die Bedingung einbauen, der die Operanden ausgibt, dann kannst Du das prüfen.
(Log 1, ReadingsVal(...)."|".<usw.>; <Hier die Bedingung>; <oder hier den Log-Befehl>)

Funktioniert die direkte Befehlaausführung per set-Befehl?

Die direkte Befehlsausführung per set-Befehl kann hier gar nicht funktionieren, da ["Aktor_L_Terasse_NodOn6$:^buttons:.pressed$"] ein reiner Ereignistrigger mit and-Verknüpfung ist, beide Bedingungen sind dann garantiert nicht wahr.

Titel: Antw:DOIF greift nicht / keine Fehlermeldung
Beitrag von: choetzu am 07 April 2019, 11:29:09
danke für die Worte. Wie kann ich dieses Problem lösen.

Ich muss auf "pressed" triggern, und zwar nur wenn das Licht aus ist. Auf "on" kann ich nicht triggern, da ich bei Motion der Cam die Lampe einschalte um beim Aufnehmen der Motion zusätzlich Licht zu haben. Und wenn ich da auf "on" triggere würde es grad wieder die Cam ausschalten. Also, es muss eine manuelle Betätigung des Schalters sein (also pressed) damit das geht.

Aber eben, ich komm da nicht weiter..
Titel: Antw:DOIF greift nicht / keine Fehlermeldung
Beitrag von: amenomade am 07 April 2019, 11:39:45
Zitat von: Damian am 06 April 2019, 22:01:44
Die direkte Befehlsausführung per set-Befehl kann hier gar nicht funktionieren, da ["Aktor_L_Terasse_NodOn6$:^buttons:.pressed$"] ein reiner Ereignistrigger mit and-Verknüpfung ist, beide Bedingungen sind dann garantiert nicht wahr.
Das verstehe ich nicht ganz. "...pressed" ist ja ein Ereignis Trigger, aber es wird dann in der and Verknüpfung den STATE geprüft? Warum sollten die nicht beide gleichzeitig wahr sein?
Titel: Antw:DOIF greift nicht / keine Fehlermeldung
Beitrag von: Ellert am 07 April 2019, 16:25:15
Zitat von: Damian am 06 April 2019, 22:01:44
Die direkte Befehlsausführung per set-Befehl kann hier gar nicht funktionieren, da ["Aktor_L_Terasse_NodOn6$:^buttons:.pressed$"] ein reiner Ereignistrigger mit and-Verknüpfung ist, beide Bedingungen sind dann garantiert nicht wahr.

Bisher wurde doch bei set <DOIF-Name> cmd_<x> die Bedingung nicht geprüft. Aber man kann testen, ob die Befehle funktionieren.
Titel: Antw:DOIF greift nicht / keine Fehlermeldung
Beitrag von: Damian am 07 April 2019, 17:57:56
Zitat von: Ellert am 07 April 2019, 16:25:15
Bisher wurde doch bei set <DOIF-Name> cmd_<x> die Bedingung nicht geprüft. Aber man kann testen, ob die Befehle funktionieren.

Du hast Recht, da habe ich wohl checkall im Kopf gehabt.

Da in den Readings des DOIFs keine Events festgehalten wurden, wurden offenbar keine passenden Events geliefert.

Ich denke, da muss man einfach mal im Eventmonitor sich die vermeintlichen Events genauer anschauen.
Titel: Antw:DOIF greift nicht / keine Fehlermeldung
Beitrag von: choetzu am 07 April 2019, 22:05:58
guten Abend

nun geht es. Ich habe es wie folgt gelöst.

(["Aktor_L_Terasse_NodOn6$:^buttons:.pressed$"]
and [?Timer_Arlo_DOIF:cmd_nr] eq "3"
and [?Aktor_L_Terasse_NodOn6:dim] ==0)
(set Arlo_BasisSecurity disarm)
(set Steingarten_D_FUD61 on)

DOELSEIF
(["Aktor_L_Terasse_NodOn6$:^buttons:.pressed$"]
and [?Timer_Arlo_DOIF:cmd_nr] eq "3"
and [?Aktor_L_Terasse_NodOn6:dim] >=1)
(set Arlo_BasisSecurity mode Aussen)
(set Steingarten_D_FUD61 off)


Ich beobachte den Zustand aus dem Reading "dim" mit "and [?Aktor_L_Terasse_NodOn6:dim] ==0" anstelle von "and [?Aktor_L_Terasse_NodOn6] eq "off"", siehe oben. Es klappt. Aber wieso es nicht mit mit dem UrsprungsDOIF ging, weiss ich immer noch nciht.

danke für die Hilfen.

lg c