GELÖST: Die richtige Definition lautet in diesem Fall
([Lampe_links] eq "on") (set Lampe_rechts on)(set Couchlampe on)
OHNE die einschließenden Klammern um die Befehlsfolge.
Ich versuche in einem DOIF eine verzögerte Befehlssequenz umzusetzen.
Internals:
DEF ([Lampe_links] eq "on") ((set Lampe_rechts on)(set Couchlampe on))
NAME Test_Doif
NR 568
NTFY_ORDER 50-Test_Doif
STATE cmd_1
TYPE DOIF
Readings:
2015-09-11 11:25:40 Device Lampe_links
2015-09-11 11:25:45 cmd_event Lampe_links
2015-09-11 11:25:45 cmd_nr 1
2015-09-11 11:25:40 e_Lampe_links_STATE on
2015-09-11 11:25:45 state cmd_1
2015-09-11 11:25:45 wait_timer no timer
Condition:
0 InternalDoIf('Lampe_links','STATE','') eq "on"
Devices:
0 Lampe_links
all Lampe_links
Do:
0:
0 (set Lampe_rechts on)(set Couchlampe on)
1:
Helper:
globalinit 1
last_timer 0
sleepdevice Lampe_links
sleepsubtimer -1
sleeptimer -1
Internals:
0 Lampe_links:STATE
all Lampe_links:STATE
Itimer:
Readings:
State:
Timerfunc:
Trigger:
Attributes:
wait 5,10
Es wird lediglich die erste Verzögerung von 5 Sekunden ausgeführt, anschließend schalten jedoch Lampe_rechts und Couchlampe sofort hintereinander ein. Ich habe es schon in allen möglichen Klammerkonstellationen probiert, mit Komma, Semikolon, Leerzeichen. Aber ich denke nach meinem Verständnis der Commandref sollte obige Definition schon korrekt sein.
ZitatDie Befehlsfolge muss zunächst mit Hilfe von Klammerblöcke aufgespaltet werden: (set lamp1 on)(set lamp2 on). Nun kann mit dem wait-Attribut nicht nur für den Beginn der Sequenz, sondern für jeden Klammerblock eine Verzögerung, getrennt mit Komma, definieren werden, hier also: wait 0,1. Damit wird lamp1 sofort, lamp2 nach einer Sekunden geschaltet.
Das Logfile macht mich auch nicht schlauer.
2015.09.11 11:27:40 5: Cmd: >set Lampe_links on<
2015.09.11 11:27:40 2: IT set Lampe_links on
2015.09.11 11:27:40 5: Triggering Lampe_links (1 changes)
2015.09.11 11:27:40 5: Notify loop for Lampe_links on
2015.09.11 11:27:40 5: Triggering Test_Doif (1 changes)
2015.09.11 11:27:40 5: Notify loop for Test_Doif wait_timer: 11.09.2015 11:27:45 cmd_1 Lampe_links
2015.09.11 11:27:45 5: Triggering Test_Doif (1 changes)
2015.09.11 11:27:45 5: Notify loop for Test_Doif wait_timer: no timer
2015.09.11 11:27:45 5: Cmd: >set Lampe_rechts on<
2015.09.11 11:27:45 2: IT set Lampe_rechts on
2015.09.11 11:27:45 5: Triggering Lampe_rechts (1 changes)
2015.09.11 11:27:45 5: Notify loop for Lampe_rechts on
2015.09.11 11:27:45 5: Cmd: >set Couchlampe on<
2015.09.11 11:27:45 2: IT set Couchlampe on
Oli
Es fehlt ein Komma zwischen den beiden geklammerten set-Befehlen.
Andreas
Gesendet von meinem A0001 mit Tapatalk
Zitat von: scooty am 11 September 2015, 12:27:04
Es fehlt ein Komma zwischen den beiden geklammerten set-Befehlen.
Wie gesagt, ich hatte die Definition schon mit allen möglichen Komma/Semikolon/Leerzeichen-Konstellationen ausprobiert. Unter anderem auch mit einem Komma zwischen den set-Befehlen. Das funktioniert leider auch nicht.
Oli
Zitat von: OliS. am 11 September 2015, 12:48:25
Wie gesagt, ich hatte die Definition schon mit allen möglichen Komma/Semikolon/Leerzeichen-Konstellationen ausprobiert. Unter anderem auch mit einem Komma zwischen den set-Befehlen. Das funktioniert leider auch nicht.
Oli
Bitte so angeben, wie in der Commandref steht:
([Lampe_links] eq "on") (set Lampe_rechts on)(set Couchlampe on)
Gruß
Damian
Das gibt's doch nicht! Ich hätte jetzt mein Haus darauf verwettet, dass ich diese Konstellation auch schon mehrfach ausprobiert hatte. Jetzt funktioniert es natürlich. :-\ Vielen Dank!
Die commandref zu dem Modul ist ja recht umfangreich. Speziell zu meinem Problemfall mit einem Ausführungsteil, ohne DOELSE, fehlte mir irgendwie ein konkretes, ausgeschriebenes Beispiel. Hättest Du was dagegen, wenn ich das im Wiki ergänze oder kann ich das gar nicht?
Oli
Und ich hätte meine ganze Hsusautomation darauf verwettet, dass es mit meinem Vorschlag funktioniert. :-)
Ich glaube, DOIF ist doch zu mächtig für mich, sorry für die Verwirrung.
Andreas
Zitat von: scooty am 11 September 2015, 13:29:37
Und ich hätte meine ganze Hsusautomation darauf verwettet, dass es mit meinem Vorschlag funktioniert. :-)
Ich glaube, DOIF ist doch zu mächtig für mich, sorry für die Verwirrung.
Andreas
Es handelt sich hier um neue Funktionalität. Mit Komma werden FHEM-Befehle getrennt, wenn sie hintereinander ohne Verzögerung ausgeführt werden sollen - das gab es immer schon. Neu ist, Befehle in Gruppen zusammenzufassen, diese werden dann in Klammern gesetzt. Pro Gruppe kann man dann eine Verzögerung angeben. Ich werde die Commandref um ein konkretes Beispiel erweitern.
Einen Wiki-Beitrag kann jeder erstellen, wie er möchte - ich konzentriere mich auf eine möglichst verständliche, vollständige Dokumentation des Moduls in der Commandref.
Gruß
Damian
Versuch es mal mit einem Doppelpunkt die beiden unterschiedlichen Verzögerungen einzuleiten.
Bei mir funktioniert es.
Wait 600:300
Mit netten Gruß
von
Ralf
Zitat von: Barbercom am 11 September 2015, 17:56:22
Versuch es mal mit einem Doppelpunkt die beiden unterschiedlichen Verzögerungen einzuleiten.
Bei mir funktioniert es.
Wait 600:300
Mit netten Gruß
von
Ralf
Doppelpunkt wird angegeben als Trennzeichen zwischen den Verzögerungen der einzelnen DO-Fälle. Komma trennt dagegen, Verzögerungen einer Sequenz von Befehlsfolgen innerhalb eines DO-Falls - das was hier gewünscht war.
Und bei einem DO-Fall do always nicht vergessen, sonst funktioniert es nur einmal.
Gruß
Damian