Toggle-Befehl eines Dummys wird von notify ignoriert

Begonnen von draylin, 18 März 2018, 10:25:38

Vorheriges Thema - Nächstes Thema

draylin

Guten Tag zusammen,

ich habe gestern angefangen, meine alte OpenHAB-Installation auf FHEM zu migrieren und bin auf ein kleines Problemchen gestoßen.

Ziel:
Ein Dummyschalter mit den webCmds "on","off" und "toggle", welcher meine Elro-Funksteckdosen ein-, aus- und umschaltet.

Weg:
define elro_stecker2 dummy
attr elro_stecker2 webCmd toggle:on:off
define elro_stecker2_off_exec notify elro_stecker2:off {system "sudo bash /opt/scripts/switch/switch.sh 1 2 0&"}
define elro_stecker2_on_exec notify elro_stecker2:on {system "sudo bash /opt/scripts/switch/switch.sh 1 2 1&"}
define elro_stecker2_toggle notify elro_stecker2:toggle { if (OldValue("elro_stecker2") eq "on") {fhem("set elro_stecker2 off")} else {fhem("set elro_stecker2 on")} }


Problem:
Die Befehle "on" und "off" funktionieren problemlos und "toggle" setzt erfolgreich die "set"-Befehle ab, welche auch Eventlog erscheinen und den Status des Dummys ändern. Allerdings bekommen die Notifies "elro_stecker2_off_exec" und "elro_stecker2_on_exec" davon nichts mit, wodurch die Funkdosen nicht geschaltet werden.

Workaround:
Wenn ich mit fhem() einen Sleep vor dem Set ausführen lasse, funktioniert alles einwandfrei:
define elro_stecker2_toggle_exec notify elro_stecker2:toggle { if (OldValue("elro_stecker2") eq "on") {fhem("sleep 1;; set elro_stecker2 off")} else {fhem("sleep 1;; set elro_stecker2 on")} }

Entweder ich habe etwas vergessen oder FHEM ist ein bisschen überfordert, wenn Events zu schnell nacheinander ausgeführt werden. Das ist doch sicher nicht so gewünscht, oder?  ???

rudolfkoenig

ZitatAllerdings bekommen die Notifies "elro_stecker2_off_exec" und "elro_stecker2_on_exec" davon nichts mit, wodurch die Funkdosen nicht geschaltet werden.
Klar, du hast dem dummy auch nicht beigebracht, dass du mit toggle je nach STATE on oder off meinst.
Das kann man mit
attr elro_stecker2 setList on off
attr elro_stecker2 useSetExtensions

Btw. statt { system "...&" } wuerde ich "..." verwenden, das leitet auch stdout/stderr ins FHEM-Log um.

draylin

Danke für die Hilfe.  :)

Mit deiner Methode funktioniert das Ganze jetzt wie gewünscht. Durch die useSetExtensions konnte ich den notify elro_stecker2_toggle auch einsparen.

Allerdings müsste ich durch
define elro_stecker2_toggle notify elro_stecker2:toggle { if (OldValue("elro_stecker2") eq "on") {fhem("set elro_stecker2 off")} else {fhem("set elro_stecker2 on")} }
doch bereits das Verhalten bei toggle definiert haben, oder nicht? Das hat ja sogar funktioniert, nur die on und off notifies sind nicht angesprungen.