GELÖST: DOIF: Verzögerung mit wait

Begonnen von OliS., 11 September 2015, 11:33:17

Vorheriges Thema - Nächstes Thema

OliS.

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
PVE auf MiniPC (N100) mit FHEM, Zigbee2MQTT, Homebridge, DeConz

scooty

Es fehlt ein Komma zwischen den beiden geklammerten set-Befehlen.

Andreas

Gesendet von meinem A0001 mit Tapatalk

Fhem auf Gigabyte Brix
CUL V3 HM / CUL V3 MAX / MaxCube aFW Homematic&MAX / ZWave.me ZME_UZB1 / SDuino 433 / Velux KLF200
Homematic / MAX / Logitech Hub / ZWave / Wifi LED / div. 433 Temperatursensoren / pywws WH1080 / IO Homecontrol

OliS.

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
PVE auf MiniPC (N100) mit FHEM, Zigbee2MQTT, Homebridge, DeConz

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

OliS.

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
PVE auf MiniPC (N100) mit FHEM, Zigbee2MQTT, Homebridge, DeConz

scooty

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
Fhem auf Gigabyte Brix
CUL V3 HM / CUL V3 MAX / MaxCube aFW Homematic&MAX / ZWave.me ZME_UZB1 / SDuino 433 / Velux KLF200
Homematic / MAX / Logitech Hub / ZWave / Wifi LED / div. 433 Temperatursensoren / pywws WH1080 / IO Homecontrol

Damian

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

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Barbercom

Versuch es mal mit einem Doppelpunkt die beiden unterschiedlichen Verzögerungen einzuleiten.
Bei mir funktioniert es.

Wait 600:300

Mit netten Gruß
von
Ralf

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF