DOIF mehrere Kommandos werden nicht ausgeführt?

Begonnen von Tommyland78, 06 Dezember 2014, 12:11:43

Vorheriges Thema - Nächstes Thema

Tommyland78

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

Brockmann

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.

Tommyland78

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

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

Brockmann

sleep in einem DOIF ist blocking, hält Fhem also für diesen Zeitraum komplett an. Von daher ist das ein etwas problematischer Workaround.

dieda

Aus diesem Grund wollte ich auch kein Sleep nehmen, gibt es da was Ähnliches wie beim Wakeup-Beispiel aus der Einsteigerdoku (Seite: 43)?
Komponenten:
Sensoren und Aktoren: FS20, Max!, Zigbee, Zwave
IODev:  Cul1101, MaxLan, ZWAVE, Deconz
Router: KD-Fritte (6360)
Sonstiges: Raspberries,  1x LMS,1 FHEM, 1 x zum Testen,  Logitech-Clients,  Onkyo, SamsungTV, Squeezebox, TabletUIs

Brockmann

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 ";"!

dieda

Komponenten:
Sensoren und Aktoren: FS20, Max!, Zigbee, Zwave
IODev:  Cul1101, MaxLan, ZWAVE, Deconz
Router: KD-Fritte (6360)
Sonstiges: Raspberries,  1x LMS,1 FHEM, 1 x zum Testen,  Logitech-Clients,  Onkyo, SamsungTV, Squeezebox, TabletUIs

td