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.
-
-
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); });