FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: AutomationBaer am 13 März 2017, 19:24:49

Titel: DOIF auf State von Dummy Devices gelingt nicht
Beitrag von: AutomationBaer am 13 März 2017, 19:24:49
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...
Titel: Antw:DOIF auf State von Dummy Devices gelingt nicht
Beitrag von: Damian am 13 März 2017, 19:36:14
Es gelten die Perl-Operatoren: AND gibt es nicht, probiere and ;)
Titel: Antw:DOIF auf State von Dummy Devices gelingt nicht
Beitrag von: AutomationBaer am 13 März 2017, 19:47:47
Peinlich :-[ - kaum macht Mensch es richtig wird es besser ;D

Vielen Dank für die Lichtung des Nebels!
Titel: Antw:DOIF auf State von Dummy Devices gelingt nicht
Beitrag von: AutomationBaer am 14 März 2017, 19:30:02
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
Titel: Antw:DOIF auf State von Dummy Devices gelingt nicht
Beitrag von: Damian am 14 März 2017, 21:05:19
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