DOIF greift nicht / keine Fehlermeldung

Begonnen von choetzu, 05 April 2019, 23:17:17

Vorheriges Thema - Nächstes Thema

choetzu

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
Raspi3, EnOcean, Zwave, Homematic

Ellert

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?

Damian

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.

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

choetzu

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..
Raspi3, EnOcean, Zwave, Homematic

amenomade

#4
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?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Ellert

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.

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

choetzu

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
Raspi3, EnOcean, Zwave, Homematic