NEWS
Verallgemeinerung zur Weiterverwendung
-
So langsam bekomme ich es ja hin. Leider habe ich noch ein anderes Problem.
Ich habe eine Basis von Bluefox genommen, um einen Countdown zu erstellen, nur dass dabei im Log jeweils 4 Einträge erscheinen. Was mache ich falsch?
function CountDown (seconds) {
var sekunden = seconds;
function count() {
setTimeout(function () {
var timer = sekunden || 10 ;
if (timer > 1) {
sekunden=timer-1;
log ("Im Count " + sekunden,"info")
count();
} else {
sekunden=0;
}
}, 1000);
}
count();
}
CountDown(10);
2016-02-10 19:37:58.954 - info: javascript.0 script.js.Countdown: Im Count 9
2016-02-10 19:37:58.965 - info: javascript.0 script.js.Countdown: Im Count 9
2016-02-10 19:37:58.971 - info: javascript.0 script.js.Countdown: Im Count 9
2016-02-10 19:37:58.994 - info: javascript.0 script.js.Countdown: Im Count 9
2016-02-10 19:37:59.958 - info: javascript.0 script.js.Countdown: Im Count 8
2016-02-10 19:37:59.969 - info: javascript.0 script.js.Countdown: Im Count 8
2016-02-10 19:37:59.979 - info: javascript.0 script.js.Countdown: Im Count 8
2016-02-10 19:38:00.000 - info: javascript.0 script.js.Countdown: Im Count 8
2016-02-10 19:38:00.962 - info: javascript.0 script.js.Countdown: Im Count 7
2016-02-10 19:38:00.972 - info: javascript.0 script.js.Countdown: Im Count 7
2016-02-10 19:38:00.985 - info: javascript.0 script.js.Countdown: Im Count 7
2016-02-10 19:38:01.005 - info: javascript.0 script.js.Countdown: Im Count 7
2016-02-10 19:38:01.968 - info: javascript.0 script.js.Countdown: Im Count 6
2016-02-10 19:38:01.980 - info: javascript.0 script.js.Countdown: Im Count 6
2016-02-10 19:38:01.990 - info: javascript.0 script.js.Countdown: Im Count 6
2016-02-10 19:38:02.008 - info: javascript.0 script.js.Countdown: Im Count 6
2016-02-10 19:38:02.972 - info: javascript.0 script.js.Countdown: Im Count 5
2016-02-10 19:38:02.984 - info: javascript.0 script.js.Countdown: Im Count 5
2016-02-10 19:38:02.994 - info: javascript.0 script.js.Countdown: Im Count 5
2016-02-10 19:38:03.011 - info: javascript.0 script.js.Countdown: Im Count 5
2016-02-10 19:38:03.977 - info: javascript.0 script.js.Countdown: Im Count 4
2016-02-10 19:38:03.988 - info: javascript.0 script.js.Countdown: Im Count 4
2016-02-10 19:38:03.998 - info: javascript.0 script.js.Countdown: Im Count 4
2016-02-10 19:38:04.014 - info: javascript.0 script.js.Countdown: Im Count 4
2016-02-10 19:38:04.983 - info: javascript.0 script.js.Countdown: Im Count 3
2016-02-10 19:38:04.991 - info: javascript.0 script.js.Countdown: Im Count 3
2016-02-10 19:38:05.001 - info: javascript.0 script.js.Countdown: Im Count 3
2016-02-10 19:38:05.017 - info: javascript.0 script.js.Countdown: Im Count 3
2016-02-10 19:38:05.988 - info: javascript.0 script.js.Countdown: Im Count 2
2016-02-10 19:38:05.994 - info: javascript.0 script.js.Countdown: Im Count 2
2016-02-10 19:38:06.006 - info: javascript.0 script.js.Countdown: Im Count 2
2016-02-10 19:38:06.023 - info: javascript.0 script.js.Countdown: Im Count 2
2016-02-10 19:38:06.992 - info: javascript.0 script.js.Countdown: Im Count 1
2016-02-10 19:38:07.000 - info: javascript.0 script.js.Countdown: Im Count 1
2016-02-10 19:38:07.010 - info: javascript.0 script.js.Countdown: Im Count 1
2016-02-10 19:38:07.027 - info: javascript.0 script.js.Countdown: Im Count 1
-
Was mir auffällt ist das du setTimeout nicht an eine var über geben hast, das musst du aber tun …..
Var x = setTimeout (function ......
Findest du in der JavaScript doku bzw einige Beispiele hier im forum.
Gesendet vom Handy
-
Da hast du recht, nur dass die Variable nur benötigt wird, wenn ich den Timeout wieder abbrechen will.
In meinem Fall kann dieser ruhig zu Ende laufen
-
count() wird innerhalb der Funktion count() aufgerufen !
function CountDown (seconds) { var sekunden = seconds; function count() { setTimeout(function () { var timer = sekunden || 10 ; if (timer > 1) { sekunden=timer-1; log ("Im Count " + sekunden,"info") count(); // Aufruf innerhalb von count() ! } else { sekunden=0; } }, 1000); } count(); } CountDown(10);
Weshalb verwendest Du nicht setInterval() ?
-
Das Count ist auch notwendig, da er sonst nur einmal durchläuft.
Mit setIntervall habe ich noch nicht gearbeitet. Daher habe ich noch nicht den Ansatz.
Wenn du einen Vorschlag dafür hättest, wäre ich dir dankbar.
-
Wenn du einen Vorschlag dafür hättest, wäre ich dir dankbar. `
var counter; function CountDown (seconds) { counter = seconds; var timer = setInterval(function () { if (counter > 0) { counter = counter - 1; log ("Im Count " + counter,"info") } else { clearInterval(timer); timer = null; } }, 1000); } CountDown(10);
-
Hier habe ich aber genau das gleiche Ergebnis.
2016-02-10 21:39:02.290 - info: javascript.0 script.js.Countdown1: Im Count 9
2016-02-10 21:39:02.330 - info: javascript.0 script.js.Countdown1: Im Count 9
2016-02-10 21:39:02.340 - info: javascript.0 script.js.Countdown1: Im Count 9
2016-02-10 21:39:02.349 - info: javascript.0 script.js.Countdown1: Im Count 9
2016-02-10 21:39:03.294 - info: javascript.0 script.js.Countdown1: Im Count 8
2016-02-10 21:39:03.333 - info: javascript.0 script.js.Countdown1: Im Count 8
2016-02-10 21:39:03.345 - info: javascript.0 script.js.Countdown1: Im Count 8
2016-02-10 21:39:03.354 - info: javascript.0 script.js.Countdown1: Im Count 8
2016-02-10 21:39:04.298 - info: javascript.0 script.js.Countdown1: Im Count 7
2016-02-10 21:39:04.335 - info: javascript.0 script.js.Countdown1: Im Count 7
2016-02-10 21:39:04.349 - info: javascript.0 script.js.Countdown1: Im Count 7
2016-02-10 21:39:04.357 - info: javascript.0 script.js.Countdown1: Im Count 7
2016-02-10 21:39:05.304 - info: javascript.0 script.js.Countdown1: Im Count 6
2016-02-10 21:39:05.338 - info: javascript.0 script.js.Countdown1: Im Count 6
2016-02-10 21:39:05.352 - info: javascript.0 script.js.Countdown1: Im Count 6
2016-02-10 21:39:05.362 - info: javascript.0 script.js.Countdown1: Im Count 6
2016-02-10 21:39:06.309 - info: javascript.0 script.js.Countdown1: Im Count 5
2016-02-10 21:39:06.344 - info: javascript.0 script.js.Countdown1: Im Count 5
2016-02-10 21:39:06.358 - info: javascript.0 script.js.Countdown1: Im Count 5
2016-02-10 21:39:06.365 - info: javascript.0 script.js.Countdown1: Im Count 5
2016-02-10 21:39:07.315 - info: javascript.0 script.js.Countdown1: Im Count 4
2016-02-10 21:39:07.358 - info: javascript.0 script.js.Countdown1: Im Count 4
2016-02-10 21:39:07.365 - info: javascript.0 script.js.Countdown1: Im Count 4
2016-02-10 21:39:07.369 - info: javascript.0 script.js.Countdown1: Im Count 4
2016-02-10 21:39:08.320 - info: javascript.0 script.js.Countdown1: Im Count 3
2016-02-10 21:39:08.364 - info: javascript.0 script.js.Countdown1: Im Count 3
2016-02-10 21:39:08.371 - info: javascript.0 script.js.Countdown1: Im Count 3
2016-02-10 21:39:08.374 - info: javascript.0 script.js.Countdown1: Im Count 3
2016-02-10 21:39:09.324 - info: javascript.0 script.js.Countdown1: Im Count 2
2016-02-10 21:39:09.367 - info: javascript.0 script.js.Countdown1: Im Count 2
2016-02-10 21:39:09.376 - info: javascript.0 script.js.Countdown1: Im Count 2
2016-02-10 21:39:09.377 - info: javascript.0 script.js.Countdown1: Im Count 2
2016-02-10 21:39:10.328 - info: javascript.0 script.js.Countdown1: Im Count 1
2016-02-10 21:39:10.372 - info: javascript.0 script.js.Countdown1: Im Count 1
2016-02-10 21:39:10.382 - info: javascript.0 script.js.Countdown1: Im Count 1
2016-02-10 21:39:10.382 - info: javascript.0 script.js.Countdown1: Im Count 1
2016-02-10 21:39:11.330 - info: javascript.0 script.js.Countdown1: Im Count 0
2016-02-10 21:39:11.378 - info: javascript.0 script.js.Countdown1: Im Count 0
2016-02-10 21:39:11.385 - info: javascript.0 script.js.Countdown1: Im Count 0
2016-02-10 21:39:11.384 - info: javascript.0 script.js.Countdown1: Im Count 0
-
Das Count ist auch notwendig, da er sonst nur einmal durchläuft.
Mit setIntervall habe ich noch nicht gearbeitet. Daher habe ich noch nicht den Ansatz.
Wenn du einen Vorschlag dafür hättest, wäre ich dir dankbar. `
Hi,
ich habe wirklich keinen Schimmer vom programmieren, aber was Paul meint ist denke ich richtig. (Wenn man seinen Beiträgen so folgt, hat er ziemlich viel Ahnung davon… :roll: )
Ich habe mal versucht dein Programm zu verstehen, und natürlich hast du recht das count() nochmals aufgerufen werden muss! Aber nur innerhalb der Methode/function setTimeout, und nicht direkt innerhalb der count function :?: :oops: :oops:
PS. hab mich mit der Variable belesen, hast recht das man sie nur zum clear.. braucht! Danke für den Tip
-
Problem gelöst. Es lag an der javascript-Version. Nachdem ich auf 1.1.12 (vorher war 1.1.11 installiert) aktualisiert habe, laufen beide Lösungen.
Trotzdem Danke für Eure Hilfe.
1043_bildschirmfoto_2019-01-20_um_10.16.32.png
1043_bildschirmfoto_2019-01-20_um_10.16.03.png
1043_bildschirmfoto_2019-01-20_um_10.15.33.png -
Ich habe ja versprochen mein Ergebnis hier bereitzustellen.
Den Countdown habe ich von Bluefox übernommen und an meine Bedürfnisse angepasst. Vielen Dank an Bluefox.
/* Enthaltene Funktionen: */ /* CountDown(objekt) Stellt einen CountDown zur Verfügung und schreibt die Werte nach objekt */ /* CountDown1(sekunden,objekt) Wie CountDown als Alternativlösung */ /* Rechnersysteme direkt hoch und herunterfahren */ /* -------------------------------------------------------------------------------------------------- */ function CountDown (objekt) { function count() { setTimeout(function () { var timer = getState(objekt).val; if (timer > 1) { timer=timer-1; if (getState(objekt).val != 0) {setState(objekt, timer)}; count(); } else { setState(objekt, 0); } }, 1000); } count(); } /* -------------------------------------------------------------------------------------------------- */
Im zweiten Teil steuere ich drei Rechnersysteme. Dies kann um weitere Systeme erweitert werden, indem in der Markierung 1 weitere Rechnernamen eingetragen werden und die on-Statements jweils kopiert und hinten angehängt werden. Die Variable i muss jeweils zweimal um eins erhöht werden. Bei Markierung 3 können die eigenen Befehle eingetragen werden, die nach Ablauf des Sleeptimers ausgeführt werden sollen.
Wenn jemanden noch Verbesserungen oder Optimierungen auffallen, dann gerne kommentieren.
/* –------------------------------------------------------------------------------------------------ */
`var idSayIt = "sayit.0.tts.text"; var hosts = [ "Sonne", "Nuc","Galaxy"]; //MARKIERUNG 1 var anzahl_hosts = hosts.length; var timeout = new Array(anzahl_hosts); for (i=1;i<anzahl_hosts;i++) 0/1/3/60/{/createstate/(hosts[i]+'.sleeptimer',-1);/(hosts[i]+'.sleeptimer_dauer',15);/(hosts[i]+'.countdown',900);/(hosts[i]+'.shutdown_befehl','wget/-o/dev/null/http:/192.168.2.25/remote_'+hosts[i]/+/'_shutdown.php');/(hosts[i]+'.wol_befehl','wget/'_wol.php');/(hosts[i]+'.aktivieren',0);/}/function/start_sleeptimer(host)/setstate/(idsayit,/"sleeptimer/"/host/aktiviert/getstate("javascript.0."+host/".sleeptimer_dauer").val/minuten")/;/setstate("javascript.0."/".countdown",/*/);/countdown("javascript.0."+host/".countdown");/mytimeout="setTimeout(function" ()/timer/ist/abgelaufen")/markierung/".sleeptimer",/-1);/wert/wieder/zurücksetzen/},/getstate("javascript.0."+host+".sleeptimer_dauer").val/1000*60);/return(mytimeout)/stop_sleeptimer/(host,mytimeout)/"+host+"/gestoppt")/cleartimeout(mytimeout);/setstate("javascript.0."+host+".sleeptimer",/setstate("javascript.0."+host+".countdown",/0);/------------------------------------------------------------------------------------------------------/dies/der/auslöser/für/die/aktivierung/des/sleeptimers/wenn/sleeptimer/auf/gesetzt/wird,/wird/ein/countdown/ausgelöst/und/nach/ablauf/aktion/ausgeführt/während/aktiven/countdowns/agbebrochen/beiden/aktinen/sleelptimer/selbst/-1/gesetzt./i="0;" on("javascript.0."+hosts[i]+".sleeptimer",/function(obj)/if/(obj.newstate.val="==" 1)/timeout[i]="start_Sleeptimer(hosts[i]);" else/0)/stop_sleeptimer(hosts[i],timeout[i]);/nichts/tun/});/<e=""></anzahl_hosts;i++)>`[/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i]