NEWS
[Frage] Wie 5 Sekundentakt innerhalb einer If-Bedingung
-
Guten Morgen,
ich bräuchte mal wieder Hilfe, ich möchte in Abhängigkeit einer Variablen meine Yeelight Rgb-Lampen alle 8 Sekunden die Farbe wechseln lassen. Dazu habe ich eine kleine If-Bedingung, wird diese positiv ausgewertet möchte ich eben die Farben wechseln lassen, wird diese negativ ausgewertet wird eine voreingestellte Farbe zugewiesen.
Ich bekomme es nun nicht hin dass der schedule Befehl nur bei "ja" ausgeführt und bei "nein" gestopt wird. Es wird zwar gestartet aber nicht gestoppt.
Ich wollte bewusst den ganzen schedule Befehl in die If-Bedingung packen um bei ausgeschalteter Lampe nicht trotzdem alle 8 Sekunden einen Durchlauf zu haben. Anscheinend geht das jedoch nicht.
Hier mal ein Auszug von dem Versuch der Umsetzung:
//Sonstige Steuerungen // // Zufallsfarbe alle x sekunden im Wechsel on({id: "javascript.0.Yeelight.Automatischer_Farbwechsel"}, function (dp) { if(dp.state.val){ schedule("*/8 * * * * *", function () { var min = 0; var max = 255; var r = Math.round(Math.random() * (max - min)) + min; var g = Math.round(Math.random() * (max - min)) + min; var b = Math.round(Math.random() * (max - min)) + min; log(r + ' ' + g + ' ' + b); setState("javascript.0.Yeelight.RGB_Lampe_1.rgb"/*RGB-Farbwerte*/, r + ' ' + g + ' ' + b); setState("javascript.0.Yeelight.RGB_Lampe_2.rgb"/*RGB-Farbwerte*/, r + ' ' + g + ' ' + b); }); } else{ setState("javascript.0.Yeelight.RGB_Lampe_1.rgb"/*RGB-Farbwerte*/, '203 26 209'); setState("javascript.0.Yeelight.RGB_Lampe_2.rgb"/*RGB-Farbwerte*/, '203 26 209'); } });
Hoffe jemand hat ne Idee
Gruß
Peoples
-
das geht nicht
ein schedule läuft systemseitig und das halt immer ..
schedule("*/8 * * * * *", function () { if (getState('javascript.0.Yeelight.Automatischer_Farbwechsel').val) { var min = 0; var max = 255; var r = Math.round(Math.random() * (max - min)) + min; var g = Math.round(Math.random() * (max - min)) + min; var b = Math.round(Math.random() * (max - min)) + min; log(r + ' ' + g + ' ' + b); setState("javascript.0.Yeelight.RGB_Lampe_1.rgb"/*RGB-Farbwerte*/, r + ' ' + g + ' ' + b); setState("javascript.0.Yeelight.RGB_Lampe_2.rgb"/*RGB-Farbwerte*/, r + ' ' + g + ' ' + b); } else{ setState("javascript.0.Yeelight.RGB_Lampe_1.rgb"/*RGB-Farbwerte*/, '203 26 209'); setState("javascript.0.Yeelight.RGB_Lampe_2.rgb"/*RGB-Farbwerte*/, '203 26 209'); } });
-
Das ist nicht ganz korrekt. Es geht.
schedule gibt eine id zurück die man verwenden kann um das schedule zu stoppen.
mySchedule = schedule(…);
clearSchedule(mySchedule);
-
Naja oder eben setInterval und clearInterval.
Gruß
Pix
EDIT VORSCHLAG:
! ````
var interval = setInterval(farbwechsel, 8000);
! function farbwechsel() {
var min = 0;
var max = 255;
var r = Math.round(Math.random() * (max - min)) + min;
var g = Math.round(Math.random() * (max - min)) + min;
var b = Math.round(Math.random() * (max - min)) + min;
log(r + ' ' + g + ' ' + b);
setState("javascript.0.Yeelight.RGB_Lampe_1.rgb"/RGB-Farbwerte/, r + ' ' + g + ' ' + b);
setState("javascript.0.Yeelight.RGB_Lampe_2.rgb"/RGB-Farbwerte/, r + ' ' + g + ' ' + b);
}
! on({id: "javascript.0.Yeelight.Automatischer_Farbwechsel"}, function (dp) {
if (dp.state.val) {
farbwechsel();
} else {
clearInterval(interval);
setState("javascript.0.Yeelight.RGB_Lampe_1.rgb"/RGB-Farbwerte/, '203 26 209');
setState("javascript.0.Yeelight.RGB_Lampe_2.rgb"/RGB-Farbwerte/, '203 26 209');
}
});>! Und schließlich sollte ein EIN/AUS der Lampe noch überwacht werden. Wenn aus, dann clearInterval
-
Tausend Dank euch werde es gleich mal probieren
Gruß
Peoples