NEWS
Sayit-Script + Schedule
-
Hallo,
ich möchte gerne folgendes Script jeden Werktag (Mo-Fr) um 6.30 Uhr ausführen lassen und am WE um 10 Uhr.
Kann mir jemand helfen wie ich das umsetzte?
var Temperatursensor = getState ("hm-rpc.0.LEQ0798935.1.TEMPERATURE"); /*Temperatursensor:1.TEMPERATURE*/ var temperatur = Temperatursensor.val.toString(); temperatur = temperatur.replace('\.', '\,'); var idSayIt = "sayit.1.tts.text"; // Hier die SayIt Text ID var idSonosfav = getState ("sonos.0.root.192_168_178_218.favorites_set").val; //speichern des aktuellen Senders var idSonosplay = getState ("sonos.0.root.192_168_178_218.state_simple").val; //Status des Speakers if (idSonosplay === true) { //Wenn Radio läuft setState (idSayIt, "30;Guten Morgen. Die aktuelle außentemperatur beträgt " + temperatur + " Grad."); //Ausgabe setTimeout(function () { setState ("sonos.0.root.192_168_178_218.favorites_set", 'Radio'); //nach 7 Sekunden gespeicherten Favoriten Sender wieder starten }, 6000); setState("sonos.0.root.192_168_178_218.volume",'8'); } else if (idSonosplay === false) //Wenn Radio nicht läuft setState (idSayIt, "30;Guten Morgen. Die aktuelle außentemperatur beträgt " + temperatur + " Grad.");
-
Dein Script 1:1 übernommen und ungetestet:
// https://github.com/iobroker/ioBroker.javascript/blob/master/README.md#time-schedule // ich möchte gerne folgendes Script jeden Werktag (Mo-Fr) um 6.30 Uhr ausführen lassen und am WE um 10 Uhr. // siehe schedule() am Ende des Scripts // Variablen ausserhalb der Funktion deklarieren, wenn Sie noch an anderer Stelle im Script genutzt werden sollen var idSayIt = "sayit.1.tts.text"; // Hier die SayIt Text ID function meineAnsage() { // Variablen nur innerhalb der Funktion gültig. // in diesem Fall werden auch jedes Mal die Werte zum Zeitpunkt des Funktionsaufrufs benötigt var Temperatursensor = getState ("hm-rpc.0.LEQ0798935.1.TEMPERATURE"); /*Temperatursensor:1.TEMPERATURE*/ var idSonosplay = getState ("sonos.0.root.192_168_178_218.state_simple").val; //Status des Speakers // wird im Script nicht mehr verwendet? var idSonosfav = getState ("sonos.0.root.192_168_178_218.favorites_set").val; //speichern des aktuellen Senders var temperatur = Temperatursensor.val.toString(); temperatur = temperatur.replace('\.', '\,'); if (idSonosplay === true) { //Wenn Radio läuft setState (idSayIt, "30;Guten Morgen. Die aktuelle außentemperatur beträgt " + temperatur + " Grad."); //Ausgabe setTimeout(function () { setState ("sonos.0.root.192_168_178_218.favorites_set", 'Radio'); //nach 7 Sekunden gespeicherten Favoriten Sender wieder starten }, 6000); setState("sonos.0.root.192_168_178_218.volume",'8'); } else if (idSonosplay === false) //Wenn Radio nicht läuft setState (idSayIt, "30;Guten Morgen. Die aktuelle außentemperatur beträgt " + temperatur + " Grad."); } } schedule("30 6 * * 1-5", function () { log("Montag - Freitag, 06:30 Uhr"); meineAnsage(); }); schedule("00 10 * * 6-7", function () { log("Samstag - Sonntag, 10:00 Uhr"); meineAnsage(); });
Mit der Funktion schedule() kannst Du zu definierten Zeiten (Mo-Fr, 6:30 Uhr), Zeitabständen (alle 20 Minuten) oder Astrozeiten (immer bei Sonnenaufgang) Script ausführen lassen.
Beschreibung:
https://github.com/iobroker/ioBroker.ja … e-schedule
Funktioniert das mit dem Radio sauber?
Dann gratuliere ich. Dann hast Du die Lösung für das Problem, was die Meisten noch haben
Die Variable idSonosfav verwendest Du im weiterem Script nicht mehr.
-
Danke! Teste ich heute mal.
Ja Radio funktioniert. Aber nur ein fest eingestellter Sender. NICHT der zuletzt abgespielte.
Also egal was vorher gelaufen ist, nach ausführen des Script wir der Sender eingestellt welcher im Script definiert ist.
-
Füg am Ende des Scripts noch ein meineAnsage(); ein.
Dann wird die Funktion mit der Ansage direkt gespielt und Du musst nicht bis 6:30 Uhr warten
Das ist ja interessant, dass das mit dem Radio so funktioniert. Ich teste das mal. Wenn das so bei Dir funktioniert, dann müsste auch folgendes funktionieren:
Wenn Du Deine Radiosender unter Favoriten hast, dann kannst kannst Du über .favorites_list die Liste der Favoriten auslesen und mit .current_title vergleichen. Wird .current_title in .favorites_list gefunden, dann kannn man über .favorites_set den Sender wieder herstellen. Wird der Eintrag nicht gefunden, nimmt man einen Default-Wert.
Dann würde zu mindestens schon einmal alle Radiosender unter Favoriten wieder korrekt fortgeführt.
-
Ich häng mich hier mal kurz rein.
Also ich verstehe nicht ganz warum du am Ende
setState ("sonos.0.root.192_168_178_218.favorites_set", 'Radio');
machst, du speicherst doch vorher den aktuellen Sender, da schreib ihn doch einfach wieder rein.
Ich mach das z.B. so
var idSonosfav = getState("sonos.0.root.192_168_66_40.favorites_set").val; var idSonosplay = getState ("sonos.0.root.192_168_66_40.state_simple").val; if (obj.newState.val ==="green" && idSonosplay === true) { setState (idSayIt, "Alles in Ordnung, der CO2 Gehalt liegt bei" + getState('hm-rega.0.1968').val); setTimeout(function () { setState ("sonos.0.root.192_168_66_40.favorites_set", idSonosfav); }, 9000); });