NEWS
Brauche Starthilfe mit Sonos und SayIt
-
Servus zusammen!
Ich habe die Tage ioBroker entdeckt. Direkt auf der Synology installiert und den sonos und sayit Adapter eingerichtet. Toll wie das alles funktioniert!!!
Im Tab Skripte habe ich dann folgendes geschrieben:
var idSonos = "sonos.0.root.192_168_10_24"; var idSayIt = "sayit.0.tts.text"; var curVol = getState(idSonos + ".volume").val; var curTitle = getState(idSonos + ".current_title").val; setState(idSayIt, "Ding Dong" );
Wenn ich das Skript starte höre ich den Ankündigungs-Ton und meine aktuelle Playlist startet. Drücke ich dann in der Sonos-App auf Pause kommt die Sprachausgabe mit "Ding Dong". Das passiert dreimal beim Pause/Start drücken und dann ist alles wieder normal.
Was tut er da nur!?
VG Tristan
-
Hi und willkommen,
Freut mich zu hören das dir das System soweit Freude bereitet
Ist die dein komplettes Script ? Ich sehe keinen trigger eventuell wird da was doppelt aufgerufen ?
Verzonden vanaf mijn iPad met Tapatalk
-
Hi Dutchmann,
vielen Dank für Dein schnelles Feedback.
Habe es in eine for-Schleife gesetzt:
for (var i = 0; i < 1 ;i++){ var idSonos = "sonos.0.root.192_168_10_25"; var idSayIt = "sayit.0.tts.text"; var curVol = getState(idSonos + ".volume").val; var curTitle = getState(idSonos + ".current_title").val; setState(idSonos + ".volume", 10); setState(idSayIt, "Ding Dong" ); }
Das ändert aber nichts am Verhalten. Was mich so wunder ist, dass der Pause-Button in der Sonos App so einen Quatsch macht. Als ob ein Script den Button überwachen würde und dann etwas tut. Aber es gibt keines außer s.o.
Läuft mein Script eigentlich nonstop im Loop? Dann müsste die Sonos ja ununterbrochen sprechen…?
VG!
-
Läuft mein Script eigentlich nonstop im Loop? Dann müsste die Sonos ja ununterbrochen sprechen…?
VG! `
Eigentlich nicht darum auch meine Frage ob dies das komplette Script ist ich sehe keinen Trigger (oder bin wohl blind)
~Dutch
–-----------------------
Send from mobile device
Das schöne ios hat Auto Korrektur zum k****
Wer Schreibfehler findet darf sie behalten oder auf eBay verkaufen, mindest Umsatz 10% für die community
-
Achso, ja, das ist mein komplettes einzigstes Script. Ich drücke auf den Playbutton und erwarte, dass es dann einmal durchläuft…
Womit kann ich denn ohne Hardware am einfachsten einen Trigger simulieren? Ein VIS anlegen mit einem Button?
-
Achso, ja, das ist mein komplettes einzigstes Script. Ich drücke auf den Playbutton und erwarte, dass es dann einmal durchläuft…
Womit kann ich denn ohne Hardware am einfachsten einen Trigger simulieren? Ein VIS anlegen mit einem Button? `
Lege ein object an mit createState() und benutze dieses als Trigger
Script hast du nicht in dem global Ordner gespeichert hoffe ich ?
–-----------------------
Send from mobile device
Das schöne ios hat Auto Korrektur zum k****
Wer Schreibfehler findet darf sie behalten oder auf eBay verkaufen, mindest Umsatz 10% für die community
-
Ok, so langsam wirds. Wall Plug und z-wave Stick sind angekommen und laufen.
Ich habe jetzt folgendes Script, das alle 60 Sek prüft, ob die Waschmaschine noch Strom braucht. Und wenn nein, dann kommt eine Ansage über Sonos.
Funktioniert soweit!!! Vielen Dank also schonmal!
function myScript() { if(getState("zwave.0.NODE2.SENSOR_MULTILEVEL.Power_1").val < 0.8){ var idSonos = "sonos.0.root.192_168_10_25"; var idSayIt = "sayit.0.tts.text"; setState(idSayIt, "Waschmaschine ist fertig" ); }else{ console.log("Es wird noch Strom verbraucht."); } } schedule("* * * * *", myScript);
Die Ansage kommt natürlich alle 60 Sekunden, bis ich die Waschmaschine wieder anmache. Ich muss also die Zustände speichern und verwalten und Logik rein stecken… Das gibts doch bestimmt schon fertig, oder?
-
Hallo Tristan,
du solltest dich von der Überwachung auf Zeitbasis verabschieden. Das ist gar nicht nötig. Dein zwave Sensor liefert an ioBroker und ioBroker merkt selbst, wenn der Wert sich ändert.
Daher überwache den Datenpunkt auf Änderungen.
const idQuelle = "zwave.0.NODE2.SENSOR_MULTILEVEL.Power_1"; const idSonos = "sonos.0.root.192_168_10_25"; const idSayIt = "sayit.0.tts.text"; on(idQuelle, function (obj) { // zwave wird auf Änderung überwacht (Kurzschreibweise) // Abfrage, ob aktueller Wert unter 0.8 und letzter ankommender Wert über 0.8 // -> dadurch nur einmal Benachrichtigung if (obj.state.val < 0.8 && obj.oldState.val => 0.8) { setState(idSayIt, "Waschmaschine ist fertig" ); // Ansage log("Waschmaschine fertig"); // Log } });
Wenn deine Waschmaschine tatsächlich nur einmal zum Ende weniger als 0.8 Einheiten verbraucht, dann geht das so. Du kannst sonst den OldState-Wert auch höher setzen, das musst aus dem Diagramm (History-Adapter?) mal ablesen.
Gruß
Pix
-
Sehr geil, jetzt hab ich das auch kapiert!
Vielen Dank für den Hinweis!!