FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: DD am 25 Februar 2017, 23:00:37

Titel: Beschränktes Ausführen eines Befehls
Beitrag von: DD am 25 Februar 2017, 23:00:37
Hallo,
ich möchte nach Statusänderung eines Schalters ein Licht ein bzw. ausschalten.
Aus irgend einem Grund wird dieses Programm aber nicht immer ausgeführt:

DEF    

(
  [Taster_A02:press_short]
)
(
   IF ([A2_Galerie:state] eq "on")
      (set A2_Galerie off)
   ELSE
      (set A2_Galerie on)
)

Das Licht schaltet immer nur ein mal.
Ich muss jedesmal die Definition aufmachen und wieder speichern um den nächsten Schaltbefehl aus zu führen.
Woran liegt das?
Titel: Antw:Beschränktes Ausführen eines Befehls
Beitrag von: Damian am 25 Februar 2017, 23:09:55
Zitat von: DD am 25 Februar 2017, 23:00:37
Hallo,
ich möchte nach Statusänderung eines Schalters ein Licht ein bzw. ausschalten.
Aus irgend einem Grund wird dieses Programm aber nicht immer ausgeführt:

DEF    

(
  [Taster_A02:press_short]
)
(
   IF ([A2_Galerie:state] eq "on")
      (set A2_Galerie off)
   ELSE
      (set A2_Galerie on)
)

Das Licht schaltet immer nur ein mal.
Ich muss jedesmal die Definition aufmachen und wieder speichern um den nächsten Schaltbefehl aus zu führen.
Woran liegt das?

Zitat aus der Commandref des Moduls:

ZitatDas DOIF-Modul arbeitet mit Zuständen. Jeder Ausführungszweig DOIF/DOELSEIF..DOELSEIF/DOELSE stellt einen eigenen Zustand dar (cmd_1, cmd_2, usw.). Das Modul merkt sich den zuletzt ausgeführten Ausführungszweig und wiederholt diesen standardmäßig nicht. Ein Ausführungszweig wird erst dann wieder ausgeführt, wenn zwischenzeitlich ein anderer Ausführungszweig ausgeführt wurde, also ein Zustandswechsel stattgefunden hat. Dieses Verhalten ist sinnvoll, um zu verhindern, dass zyklisch sendende Sensoren (Temperatur, Feuchtigkeit, Helligkeit, usw.) zu ständiger Wiederholung des selben Befehls oder Befehlsabfolge führen.

und die Lösung

https://fhem.de/commandref_DE.html#DOIF_do_always

Titel: Antw:Beschränktes Ausführen eines Befehls
Beitrag von: Thorsten Pferdekaemper am 25 Februar 2017, 23:19:10
...oder ungefähr so:

define blabla notify Taster_A02:press_short.* IF ([A2_Galerie:state] eq "on") (set A2_Galerie off) ELSE (set A2_Galerie on)

Je nach Device geht auch das:

define blabla notify Taster_A02:press_short.* set A2_Galerie toggle

...oder am elegantesten, wenn es z.B. beides Homematic oder Homematic Wired ist: Direkt verknüpfen.
Gruß,
   Thorsten
Titel: Antw:Beschränktes Ausführen eines Befehls
Beitrag von: DD am 25 Februar 2017, 23:29:33
Super, Danke!

Direkt verknüpfen ist in diesem Fall leider nicht möglich da ich noch weitere Bedingungen einfügen möchte