NEWS
[gelöst] Code Optimierung bei 6 Timern - wie
-
Liebe Leute,
ich hab wiedermal einen "einfach gestrickten" Code von mir, der mit einer neuen Anwendung nun an seine Grenzen stößt und ich nicht mehr weiter weiß.
Der unten angeführte Code macht nichts anderes, als nach 5, 6,7 8, 9 und 10 Minuten die Rollläden immer ein Stück weiter nach obenm zu stellen iund so im Zimmer langsam hell zu machen.
!
if ((getState(idLuxmeter).val >= 10 ) && (getState(idRollladenSZ).val === 0)){ var timer1 = null; var timer2 = null; var timer3 = null; var timer4 = null; var timer5 = null; var timer6 = null; if(timer1) clearTimeout(timer1); timer1 = setTimeout(function() {setState(idRollladenSZ, 13)}, 300000); if(timer2) clearTimeout(timer2); timer2 = setTimeout(function() {setState(idRollladenSZ, 23)}, 360000); if(timer3) clearTimeout(timer3); timer3 = setTimeout(function() {setState(idRollladenSZ, 35)}, 420000); if(timer4) clearTimeout(timer4); timer4 = setTimeout(function() {setState(idRollladenSZ, 52)}, 480000); if(timer5) clearTimeout(timer5); timer5 = setTimeout(function() {setState(idRollladenSZ, 70)}, 540000); if(timer6) clearTimeout(timer6); timer6 = setTimeout(function() {setState(idRollladenSZ, 100)}, 600000); } !
Nun möchte ich das einerseits vereinfachen und wieder a bisserl was lernen, andererseits aber eine Funktion einführen, die die Timer alle stoppt, sodern die Rollladen NICHT auf der eigentlich nun vorgegebenen Position stehen.
Also, z.B: es startet mit dem ersten Timer und der Rollladen geht ein Stück auf - nun möchte ich das aber nicht und stoppe die Bewegung am Schalter + stelle ihn wieder runter auf geschlossen.
Der nächste Timer soll somit immer nur dann ausgeführt werden, wenn der Rollladen an der Position des vorigen Timers steht, sonst nicht….
:?: :?: :?: wie geht das sinnvoll?
Ich würde die einzelnen Timer verschachteln und so immer nur den nächsten Starten wenn der vorige abgelaufen ist, aber dann hab ich ja mit dem If's 6 Co "Hunderte" Verschachtelungen in geschwungenen Klammern...das muss ja irgendwie einfacher gehen, oder?
Liebe Grüße
tom
-
Dafür sind die Funktionen setInterval() und clearInterval() in Zusammenhang mit einer Zählvariablen besser geeignet.
-
Dafür sind die Funktionen setInterval() und clearInterval() in Zusammenhang mit einer Zählvariablen besser geeignet. `
…perfekt, danke! Werd' ich mir anschauen.
Liebe Grüße
Tom
-
Liebe Leute,
irgendwie kappier ich die Funktion von setInterval nicht ganz - ich versuche die Dauer variabel zu gestalten, aber egal was für einen Wert ich im Objekt stehen hab, er macht immer den ersten Wert = 60 Sekunden….
! ````
setInterval(function(Anwesenheit_Timer_Tom) {helper = getState(id_Tom_count).val; ....... ....... ....... ....... setState(id_Tom_Intervall, Intervall); } });
}, getState("javascript.0.Anwesenheit.Tom.Telefon_Tom_Intervall"/Telefon_Tom_Intervall/).val);
! ````
Wie bringe ich ihn dazu diesen Wert in der letzten Zeile auch tatsächlich immer auszulesen?
Liebe Grüße
tom
-
@etv:nach 5, 6,7 8, 9 und 10 Minuten die Rollläden immer ein Stück weiter nach obenm zu stellen `
Die Funktion kann man mit einer festen Intervallzeit von 1 Minute realisieren.var timer = null; var cnt = 0; var pos = 0; function rollosHoch() { cnt = 0; pos = getState(idRollladenSZ).val; if (getState(idLuxmeter).val >= 10 && pos === 0) { timer = setInterval(function() { cnt++; if(cnt === 5) pos = 13; if(cnt === 6) pos = 23; if(cnt === 7) pos = 35; if(cnt === 8) pos = 52; if(cnt === 9) pos = 70; if(cnt === 10) { pos = 100; clearInterval(timer); timer = null; } if(pos) setState(idRollladenSZ, pos); }, 60000); // 1 Minute } }
@etv:stoppe die Bewegung am Schalter + stelle ihn wieder runter auf geschlossen. `
Beim Stopp per Schalter wird auch der Timer gestoppt.if(timer) { clearInterval(timer); timer = null; }
-
wow…..
Es ist immer ein Wahnsinn, wenn ich eure Scripte sehe - da muss ich dann erst mal 5 Minuten drüber nachdenken warum das überhaupt geht
Danke für den Input - bau ich gleich um!
Liebe Grüße
tom
-
Liebe Leute,
jetzt muss ich da nochmal was nachfragen zu dem Thema setInterval.
Wie muss der Aufbau der Funktion setInterval korrekt aussehen, wenn das Script bei jedem Ablauf des Intervalls die vorige setInterval Funktion wieder löscht und "sich selbst" erneut startet.
Also in etwa so:
timer = setInterval(function() {
….die Funktion läuft
...
...
clearInterval(timer);
timer = null;
}, 60000);
...und jetzt wieder von vorne starten aber mit anderem Intervall???
Liebe Grüße
tom
-
@etv:wenn das Script bei jedem Ablauf des Intervalls die vorige setInterval Funktion wieder löscht und "sich selbst" erneut startet. `
Nach jeder Intervalldauer stoppen entspricht der Funktion setTimeout(). setIntervall() verwendet man, wenn mehrere gleich lange Intervalle bis zu einer Abbruchbedingung ausgeführt werden sollen.function mache_verzoegert(delay) { // delay in s setTimeout(function() { // Hier die Aktion let delay_neu = // Berechnung neue Verzögerungszeit; if(!Abbruchbedingung) mache_verzoegert(delay_neu); // Schleife soll nicht ewig laufen ! }, 1000 * delay); } // Erster Aufruf mit 1 Minute Verzögerung mache_verzoegert(60);
-
@etv:wenn das Script bei jedem Ablauf des Intervalls die vorige setInterval Funktion wieder löscht und "sich selbst" erneut startet. `
Nach jeder Intervalldauer stoppen entspricht der Funktion setTimeout(). setIntervall() verwendet man, wenn mehrere gleich lange Intervalle bis zu einer Abbruchbedingung ausgeführt werden sollen.function mache_verzoegert(delay) { // delay in s setTimeout(function() { // Hier die Aktion let delay_neu = // Berechnung neue Verzögerungszeit; if(!Abbruchbedingung) mache_verzoegert(delay_neu); // Schleife soll nicht ewig laufen ! }, 1000 * delay); } // Erster Aufruf mit 1 Minute Verzögerung mache_verzoegert(60); ```` `
herzlichen Dank, dann hab ich da Äpfel und Birnen vermischt
Liebe Grüße
tom
PS: warum gibt's im Forum keine "DANKE"-Button mehr oder find' ich ihn nur nicht mehr?? :?: