DOIF auf State von Dummy Devices gelingt nicht

Begonnen von AutomationBaer, 13 März 2017, 19:24:49

Vorheriges Thema - Nächstes Thema

AutomationBaer

Ich möchte ein minimalen State-Automaten realisieren um meine Zeit gesteuerte Beleuchtung mit einem Bewegungsmelder zu kombinieren. Dazu habe ich zwei Dummy Devices angelegt:

Internals:
   CFGFN
   NAME       D_Motion_Treppenhaus
   NR         514
   STATE      off
   TYPE       dummy
   Readings:
     2017-03-13 19:01:09   state           off
Attributes:
   icon       user_unknown
   room       Treppenhaus



Internals:
   CFGFN
   NAME       D_Timer_Treppenhaus_Beleuchtung
   NR         362
   STATE      on
   TYPE       dummy
   Readings:
     2017-03-13 17:51:57   state           on
Attributes:
   icon       light_question
   room       Beleuchtung,Treppenhaus


Wenn mein Bewegungsmelder eine solche detektiert dann setzt ein Notify das Dummy-Device D_Motion_Treppenhaus entsprechend auf 'on'. Wenn die Zeitschaltuhr (abhängig von der Uhrzeit, dem Wochentag und der Twilight Beleuchtung) die Beleuchtung ein- bzw. ausschaltet wird entsprechend das Dummy-Device D_Timer_Treppenhaus_Beleuchtung getriggert.

Das verknüpfen der beiden Dummy-Devices in einem DOIF will mir aber nicht gelingen:

Internals:
   CFGFN
   DEF        ([D_Motion_Treppenhaus] eq "on" AND [D_Timer_Treppenhaus_Beleuchtung] eq "on")
(set D_Motion_Treppenhaus off)
DOELSE
(set D_Motion_Treppenhaus off, set Treppenhaus_Beleuchtung on-for-timer 213)
   NAME       motionControl_Treppenhaus_Beleuchtung
   NR         532
   NTFY_ORDER 50-motionControl_Treppenhaus_Beleuchtung
   STATE      initialized
   TYPE       DOIF
   Readings:
     2017-03-13 19:13:02   cmd             0
     2017-03-13 19:13:02   state           initialized
   Condition:
     0          InternalDoIf($hash,'D_Motion_Treppenhaus','STATE') eq "on" AND InternalDoIf($hash,'D_Timer_Treppenhaus_Beleuchtung','STATE') eq "on"
   Devices:
     0           D_Motion_Treppenhaus D_Timer_Treppenhaus_Beleuchtung
     all         D_Motion_Treppenhaus D_Timer_Treppenhaus_Beleuchtung
   Do:
     0:
       0          set D_Motion_Treppenhaus off
     1:
       0          set D_Motion_Treppenhaus off, set Treppenhaus_Beleuchtung on-for-timer 213
   Helper:
     globalinit 1
     last_timer 0
     sleeptimer -1
   Internals:
     0           D_Motion_Treppenhaus:STATE D_Timer_Treppenhaus_Beleuchtung:STATE
     all         D_Motion_Treppenhaus:STATE D_Timer_Treppenhaus_Beleuchtung:STATE
   Itimer:
   Regexp:
     All:
   State:
Attributes:
   icon       edit_settings
   room       Beleuchtung,Treppenhaus


Setze ich D_Motion_Treppenhaus von 'off' auf 'on' hätte ich erwartet, das abhängig vom Zustand des anderen Devices, eines der beiden Commands ausgeführt würde - doch es passiert nichts...

Damian

Es gelten die Perl-Operatoren: AND gibt es nicht, probiere and ;)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

AutomationBaer

Peinlich :-[ - kaum macht Mensch es richtig wird es besser ;D

Vielen Dank für die Lichtung des Nebels!

AutomationBaer

Leider immer noch nicht vollständig erfolgreich. Die DOIF Abfrage ist zwar jetzt syntaktisch richtig, sie scheint aber nicht immer 'zu feuern'. Ich kann im Log sehen, daß als heute D_Timer_Treppenhaus_Beleuchtung off war und eine Bewegung detektiert wurde (D_Motion_Treppenhaus auf 'on') das cmd_2 nicht ausgeführt wurde. Als später der Timer die Beleuchtung aktivierte und damit den Dummy D_Timer_Treppenhaus_Beleuchtung auf 'on' setze wurde offensichtlich das cmd_1 ausgeführt.

Auch wenn ich jetzt - D_Timer_Treppenhaus_Beleuchtung ist 'on' - den Dummy D_Motion_Treppenhaus manuell per 'set' auf 'on' setze wird das DOIF nicht ausgelöst...

Wie kann ich das Problem weiter eingrenzen?


Vielen Dank,
thomas

Damian

Probiere mal diese Lösung aus der Commandref zu DOIF aus:

define di_on_for_timer ([dein_bewegungs_melder:"motion"])
(set Treppenhaus_Beleuchtung on)
(set Treppenhaus_Beleuchtung off)
attr di_on_for_timer do resetwait
attr di_on_for_timer wait 0,213


Sie kommt ohne notify und ohne zusätzliche Dummys aus.

Weitere Vorteile:

- es wird nicht unnötig bei Bewegung geschaltet
- die Ausschaltzeit wird bei Bewegung verlängert, ohne dass die Lampe ausgeht

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