NEWS
Verallgemeinerung zur Weiterverwendung
-
Nachdem ich schon einige Anregungen aus dem Board bekommen habe, m
ö
chte ich nun ein gr
ö
ß
eres Projekt starten und bin auf ein Problem gestossen.Ich habe folgendes Script f
ü
r ein Rechnersystem erstellt (Siehe Dateianhang).Grunds
ä
tzliches:Das Rechnersystem heisst Sonne.
Sobald die Variable Sonne.Sleeptimer auf 1 gesetzt wird, l
ä
uft ein Countdown entsprechend der Variablen Sonne.Sleeptimer_Dauer an.Wird w
ä
hrend des Countdowns die Variable Sleeptimer auf 0 gesetzt, wird der Countdown abgebrochen.Soweit l
ä
uft das Script auch und tut genau was es soll.Frage / Bitte:
Wie muss das Script abge
ä
ndert werden, damit ich es auch f
ü
r andere Rechnersysteme verwenden kann.Beispiel: Das zweite Rechnersystem hei
ß
t Mars und besitzt genauso die eigenen Variablen Mars.Sleeptimer und Mars.Sleeptimer_DauerDas ich im on die verschiedenen Variablen angeben mu
ß
ist mir klar, aber alle anderen Werte sollten sich daraus ergeben.Wie ich das realisiere ist mir nicht klar.
Ziel ist es eine ganze Reihe von Rechnersystemen mit einem Script zu steuern, z.B. mit verschieden Timern, die ich
ü
ber Vis einstelle, das Herunterfahren nach Ablauf des Timers zu erm
ö
glichen.
1055_computersysteme.txt -
Wenn ich dich richtig verstanden hab m
ö
chtest du das script nehmen und der host name ist variabel aber die datenpunkte fix.Dann ist die L
ö
sung den host als variable zu setzen.Umsetzung dann in etwa so:
var varHost = Sonne;
varHost + '.Sleeptimer'
Gesendet von meinem Jolla mit Tapatalk
-
Neu: setState("javascript.0."+Host+".Sleeptimer", -1); `
Die ID ist lediglich ein String auf den man die String-Verkettung anwenden kann. Es sollte so funktionieren.
16431_states.jpg
16431_vis.jpg -
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
-
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() ?
-
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]
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden