NEWS
Befehl, erst wenn vorheriger bestätigt wurde (Ack-State)
-
Hallo zusammen,
ich stehe aktuell vor dem Problem, dass ich meine Raffstores nicht ordentlich anfahren kann, da sich die Befehle gegenseitig killen/überlagern.
Daher benötige ich eine Strategie für folgendes Szenario: Start der Funktion "Schließe Rolladen mit übergebenen Variablen x und y"
x ist dabei die Höhe des Raffstores und y der Neigungswinkel der einzelnen Lamellenfunction Raffstore (x,y) {
SetState(ID,x);
Hier würde ich gerne einen Delay haben, solange die Endposition x nicht erreicht und der Wert nicht bestätigt wurde.
SetState(ID,y);
Hier würde ich gerne einen Delay haben, solange die Position y nicht erreicht und der Wert nicht bestätigt wurde.
...
weiterer Programmcode
}Gibt es hierfür Möglichkeit? Entweder gerne per Blockly oder JavaScript.
-
Hallo zusammen,
ich stehe aktuell vor dem Problem, dass ich meine Raffstores nicht ordentlich anfahren kann, da sich die Befehle gegenseitig killen/überlagern.
Daher benötige ich eine Strategie für folgendes Szenario: Start der Funktion "Schließe Rolladen mit übergebenen Variablen x und y"
x ist dabei die Höhe des Raffstores und y der Neigungswinkel der einzelnen Lamellenfunction Raffstore (x,y) {
SetState(ID,x);
Hier würde ich gerne einen Delay haben, solange die Endposition x nicht erreicht und der Wert nicht bestätigt wurde.
SetState(ID,y);
Hier würde ich gerne einen Delay haben, solange die Position y nicht erreicht und der Wert nicht bestätigt wurde.
...
weiterer Programmcode
}Gibt es hierfür Möglichkeit? Entweder gerne per Blockly oder JavaScript.
@SaschaS sagte:
Gibt es hierfür Möglichkeit?
Versuche mal den Ansatz (nicht getestet):
const idRollo = '...'; var move = false; var timer = null; var soll = getState(idRollo).val; function raffstore(x, y) { soll = x; setState(idRollo, soll); move = true; timer = setInterval(function() { if(!move) { soll = y; setState(idRollo, soll); move = true; clearInterval(timer); } }, 1000); } on(idRollo, function(dp) { if(dp.state.ack && dp.state.val == soll) move = false; }); if(!move) raffstore(50, 45); else { timer = setInterval(function() { if(!move) { clearInterval(timer); raffstore(50, 45); } }, 1000); } -
@SaschaS sagte:
Gibt es hierfür Möglichkeit?
Versuche mal den Ansatz (nicht getestet):
const idRollo = '...'; var move = false; var timer = null; var soll = getState(idRollo).val; function raffstore(x, y) { soll = x; setState(idRollo, soll); move = true; timer = setInterval(function() { if(!move) { soll = y; setState(idRollo, soll); move = true; clearInterval(timer); } }, 1000); } on(idRollo, function(dp) { if(dp.state.ack && dp.state.val == soll) move = false; }); if(!move) raffstore(50, 45); else { timer = setInterval(function() { if(!move) { clearInterval(timer); raffstore(50, 45); } }, 1000); }