Hallo,
ich habe folgendes Problem: ich möchte mit einem Taster meine Rollläden schliessen (funktioniert, mit Komma-separierten Befehlen und ohne die Waits). Die Rollläden sollen nun aber zeitlich nacheinander schliessen, auch wenn ich den Taster bereits los gelassen habe. So sieht der modifizierte DOIF-Code aus:
([Wemos_Taster3:Switch] eq "on") (set EZ_Rolladen_L down) (set EZ_Rolladen_R down) (set WZ_Rolladen_L down) (set WZ_Rolladen_R down) (set Flur_Rolladen down)
Attr Alle_Rolladen_zu_Wemos wait 1,1,1,1
Das funktioniert zwar so mit den zeitlichen Verzögerungen, aber nur solange ich den Taster gedrückt halte. Der Taster soll aber ein Taster bleiben. Grund: wenn ich nochmal drücke, kann ich die Rollläden so stoppen (ggf. nach Ablauf der Zeitverzögerung). Wie kann ich das Problem lösen?
setze das Attribut do auf always
Zitat von: rih am 08 November 2017, 23:09:50Der Taster soll aber ein Taster bleiben. Grund: wenn ich nochmal drücke, kann ich die Rollläden so stoppen
Erweitere doch erstmal dein
DOIF dahingehend, die Lösung mit dem
do always funktioniert nur mit einem Einzeiler.
do always allein wird nicht helfen. Mit einem notify und sleep lässt sich es aber einfach realisieren.
Mit DOIF sehe ich nur diese Möglichkeit:
([Wemos_Taster3:Switch] eq "on")
(set EZ_Rolladen_L down)
(set EZ_Rolladen_R down)
(set WZ_Rolladen_L down)
(set WZ_Rolladen_R down)
(set Flur_Rolladen down)
(set $SELF cmd_0)
DOELSEIF (0)
und mit
attr do always
att wait 0,1,1,1,1,0
Ich weiss aber nicht, was Du noch im DOIF plannst. Mit set $SELF cmd_2 würde es auch funktionieren. Wichtig ist, dass:
- der DOIF keine Möglichkeit hat, in einem anderen Zustand zu wechseln, wenn der Taster nicht mehr "on" ist, dewegen das DOELSEIF (0)
- am Ende der Befehlsequenz, er nicht bei cmd_1 blockiert bleibt (deswegen das set $SELF)
Zitat von: amenomade am 12 November 2017, 23:44:07 (set $SELF cmd_0)
Wobei ich eher auf cmd_2 setzen würde. cmd_0 sehe ich eher bei "noch nicht ausgelöst".