Hallo zusammen,
ich habe Herausforderung mehrere Kommandos ausführen zu wollen, wenn ein Ereignis eintritt.
Dies mache ich derzeit so:
define Tom_at_Home_Workflow DOIF ([Tom_at_Home:state] eq "present") (set FHEM_Tablet ttsSay Tom ist zu Hause,set FHEM_Tablet screenBrightness 255,set FHEM_Tablet keepScreenOn on) DOELSE (set FHEM_Tablet ttsSay Tom hat die Wohnung verlassen,set FHEM_Tablet keepScreenOn off)
Problem an der Sache, die Sprachausgabe funktioniert, allerdings wird die Helligkeit oder das Screen-on verschluckt und nicht übertragen.
Entweder ist mein Syntax falsch oder es müsste eine kleine Pause zwischen den Kommandos eingefügt werden?
Kann der Code verbessert werden?
Danke fürs Helfen
Der Tom
Zitat von: Tommyland78 am 06 Dezember 2014, 12:11:43
define Tom_at_Home_Workflow DOIF ([Tom_at_Home:state] eq "present") (set FHEM_Tablet ttsSay Tom ist zu Hause,set FHEM_Tablet screenBrightness 255,set FHEM_Tablet keepScreenOn on) DOELSE (set FHEM_Tablet ttsSay Tom hat die Wohnung verlassen,set FHEM_Tablet keepScreenOn off)
Problem an der Sache, die Sprachausgabe funktioniert, allerdings wird die Helligkeit oder das Screen-on verschluckt und nicht übertragen.
Entweder ist mein Syntax falsch oder es müsste eine kleine Pause zwischen den Kommandos eingefügt werden?
Die Syntax ist korrekt. Ich denke auch nicht, dass dies ein DOIF-Problem ist. Soweit ich weiß, gibt oder gab es dieses Problem bei WebViewControl. Ich weiß nicht, ob es mittlerweile gelöst wurde. Vielleicht schaust Du mal in den entsprechenden Thread rein (auch wenn der mittlerweile sehr lang ist).
Als erste Hilfe würde ich mal versuchen, die Reihenfolge umzutauschen, also erst screenBrightness und keepScreenOn setzen und dann das ttySay.
Hallo zusammen,
in der Tat scheint es eine Lösung zu geben, wenngleich dies wohl eher als Workaroud zu bezeichnen ist.
Grundlegend, es hilft.
Hier der Link zum Beitrag:
http://forum.fhem.de/index.php/topic,20592.msg141292.html#msg141292 (http://forum.fhem.de/index.php/topic,20592.msg141292.html#msg141292)
Um es kurz zu machen, offensichtlich hilft ein sleep2 oder sleep3 zwischen jedem Befehl,
Ein Beispiel:
set FHEM_Tablet toastMessage hallo;sleep 3;set FHEM_Tablet screenBrightness 120;sleep 3;set FHEM_Tablet keepScreenOn on;sleep 3;set FHEM_Tablet ttsSay Hallo Tom
Ich baue das jetzt in meinen Code ein und teste weiter. Sollte sich noch etwas zusätzliches ergeben, poste ich das gern.
Grüße
Der Tom
sleep in einem DOIF ist blocking, hält Fhem also für diesen Zeitraum komplett an. Von daher ist das ein etwas problematischer Workaround.
Aus diesem Grund wollte ich auch kein Sleep nehmen, gibt es da was Ähnliches wie beim Wakeup-Beispiel aus der Einsteigerdoku (Seite: 43)?
Zitat von: dieda am 09 Dezember 2014, 20:14:21
Aus diesem Grund wollte ich auch kein Sleep nehmen, gibt es da was Ähnliches wie beim Wakeup-Beispiel aus der Einsteigerdoku (Seite: 43)?
Was heißt "was Ähnliches"? Man kann es genau so machen:
(
set FHEM_Tablet toastMessage hallo,
define at_tmp1 at +00:00:03 set FHEM_Tablet screenBrightness 120,
define at_tmp2 at +00:00:06 set FHEM_Tablet keepScreenOn on,
define at_tmp3 at +00:00:09 set FHEM_Tablet ttsSay Hallo Tom
)
Wichtig: Die Sekundenzahlen bei den ats jeweils aufaddieren, weil alle drei ats sofort definiert werden. Wenn man überall +00:00:03 hinschreibt, werden nach drei Sekunden alle ats auf einmal ausgeführt.
UND: Bei Verwendung in einem DOIF müssten es zwischen den Befehlen "," sein und nicht ";"!
Danke, werde es mal testen.
Evtl. hilft
http://forum.fhem.de/index.php/topic,29549.0.html (http://forum.fhem.de/index.php/topic,29549.0.html)
weiter?
td