Hallo,
ich würde gerne mehrere Rollladen mit ein paar Sekunden Abstand hintereinander fahren lassen, ohne für jeden Rollladen ein eigenes "at" zu definieren. Getestet habe ich folgenden code (mit 15 Rollladen):
define Rollladen_rauf at *{sunrise(0,"07:00:00","09:00:00")} {if (!$we) {\
fhem("set sz_R 100");;\
fhem("sleep 5");;\
fhem("set bad_R 100");;\
fhem("sleep 5");;\
fhem("set to_R 100");;\
}\
}
Allerdings fährt mit diesem code der erste Rollladen normal und dann passiert erstmal nix mehr. Im log file erscheinen die Kommandos im richtigen zeitlichen Abstand. Nach ewiger Verzögerung fahren dann plötzlich alle restlichen Rollladen, wobei der eigentlich zweite nur ein paar Zentimeter gefahren ist (evtl. timeout?) und dann gedacht hat, er sei komplett gefahren.
aus der Referenz (http://fhem.de/commandref_DE.html#sleep (http://fhem.de/commandref_DE.html#sleep)) hatte ich eigentlich verstanden, dass ein sleep im at kein Einfrieren verursachen würde.
Nebenbei ist mir aufgefallen, dass dort steht, dass die Verzögerung in Millisekunden angegeben wird, laut log file sind es aber Sekunden (ich glaube die deutsche Übersetzung ist hier falsch. Richtig müsste es eher heißen "Wartet für die angegebene Anzahl von Sekunden (mit einer Millisekunden-Genauigkeit)".
Was habe ich falsch gemacht :-\ ?
schöne Grüße
Jo
Hallo,
ich würde das mal so versuchen
define Rollladen_rauf at *{sunrise(0,"07:00:00","09:00:00")} {if (!$we) {
fhem("set sz_R 100");
fhem("define naechster_1 at +00:00:05 set bad_R 100");
fhem("define naechster_2 at +00:00:10 set to_R 100");
}
}
Es wird automatisch für jeden Rollladen ein at definiert - nur eben 5 Sekunden, 10 Sekunden ... nachdem das "Haupt-at" zugeschlagen hat.
Was machen die Rollläden dann?
Achtung! Der Code ist nur und ausschliesslich für das DEF gedacht und nicht! für die fhem.cfg
Grüße
du musst alles zusammen in einen einzigen fhem() Aufruf packen.
intern funktioniert das sleep so das alles was nach dem sleep kommt mit einem at verzögert ausgeführt wird. wenn hinter dem sleep nichts mehr kommt kann auch nichts verzögert werden und dann wird doch aktiv gewartet.
also fhem("set sz_R 100;sleep 5;set bad_R 100;sleep 5;set to_R 100");
mit dem verdoppeln der ; musst du etwas spielen. je nach dem wo du es eingibst 2 oder 4 fach.
gruss
andre
Super. Danke Euch beiden für die schnelle Antwort! Jetzt habe ich was zum Testen ;D
Nachtrag: Die Lösung von Andre funktioniert bestens. Es lag daran, dass ich die Befehle nicht in ein einziges fhem("xxx") gepackt habe.
schöne Grüße
Jo