NEWS
[gelöst] Sonos Adapter einfach nur ein aus?
-
Kaum habe ich angefangen, scheitere ich schon wieder. Eigentlich möchte ich nur ein kleines Problem lösen:
Der Sonos Adapter soll, ereignis- oder zeitbezogen, einen bestimmten Radiosender abspielen. Und dann wieder stoppen.
Dafür benötige ich drei Dinge: den Radiosender, den play und den stop Befehl in JavaScript. Der Sender ist in den Favoriten hinterlegt. Ich habe zwar play und stop gefunden. Aber das sind ja Buttons.
- Wie löse ich die in JavaScript aus?
- Und wie sage ich dem Adapter: spiele den Sender x?
- Wie stoppe ich das Ganze wieder?
Ich habe das Forum durchsucht. Da steht viel Blockly drin, das ich aber nicht benutze.
Danke für Euere Hilfe schon im voraus.
-
Abspielen kannst du mit
setState("sonos.0.root.x_x_x_x.favorites_set"/*favorites_set*/, HIER DER SENDER);
Der Sender muss in deinen Sonos Favoriten gespeichert sein (glaube ich)
stoppen mit
setState("sonos.0.root.x_x_x_x.state", "stop");
-
tempestas, ich bin begeistert. Danke. Das klappt. Wenn ich das Programm komplett habe, werde ich es hier posten.
-
Noch mal kurz eine Anfängerfrage an die Javascript Gurus:
Ich habe mir testweise dieses Script geschrieben:
raum = "192_168_XX_XX"; //Küche laut = getState('sonos.0.root.raum.volume').val;
also: den Raum in eine Variable geschrieben (um nicht jedesmal in allen Anweisungen den Raum ändern zu müssen) und dann diese Variable in die getState Anweisung übernommen. Das funktioniert aber nicht. Fehlermeldung
19:01:06.169 [warn] javascript.0 at script.js.common.Test.Test_Sonos_Radio_ein_u__Volume:27:8
Was mache ich da falsch?
-
Du hast jetzt eine id, die Sonos.0.raum.volume heißt durch die Anführungszeichen.
Die Id gibt's aber nicht.
Probier Mal
laut = getState('sonos.0.root.' + raum + '.volume').val;
-
ahhhh. Die Notation in JavaScript muss ich wirklich noch verinnerlichen. Vielen Dank.
-
so, es läuft. AAAAAAber, ich bekomme immer noch eine Warnmeldung.
Das Script:
! laut = "10";//<–----hier gewünschte LAUTSTÄRKE eintragen
! // ************************************************
! // Anweisung zur Raumwahl:
! // Büro: 192_168_xx_xx
! // Wohnzimmer: 192_168_xx_xx
! // Terrasse: 192_168_xx_xx
! // Schlafzimmer: 192_168_xx_xx
! // Küche: 192_168_xx_xx
! // ************************************************
! raum = "192_168_0_xx";//<------hier gewünschten RAUM eintragen
! // ************************************************
! // Auswahl Radiosender
! // Sender muß in Favoriten vorhanden sein
! // momentan: 104.6 RTL Weihnachtsradio, RTL Deutschlands Hit-Radio
! // ************************************************
! sender = "RTL Deutschlands Hit-Radio"; //<------hier gewünschten SENDER eintragen
! // Befehle ausführen
! // ************************************************
! // Befehl zum play
! // ************************************************
! setState("sonos.0.root." + raum + ".volume", laut);
! setState("sonos.0.root." + raum + ".favorites_set"/favorites_set/,sender);Die Warnung:
10:11:19.996 [info] javascript.0 Stop script script.js.common.Test.Test_start 10:11:20.033 [info] javascript.0 Start javascript script.js.common.Test.Test_start 10:11:20.034 [warn] javascript.0 at script.js.common.Test.Test_start:30:1 10:11:20.034 [info] javascript.0 script.js.common.Test.Test_start: registered 0 subscriptions and 0 schedules
Ich weiß nicht, was die Warnmeldungen (generell) bedeuten (wo kann man das evtl nachlesen?).
Aber ausgehend von der Annahme, es handelt sich hier um Zeile 30, dann geht es um die Zeile "setState("sonos.0.root." + raum + ".volume", laut);". Was wäre da falsch oder einer Warung würdig. Sehe ich den Wald vor lauter Bäumen nicht? Jedenfalls wird das Script korrekt ausgefühhrt-
-
Ich bin, glaube ich, selber drauf gekommen. die Variable "laut" darf nicht als string, also laut = "10" gesetzt werden. Wenn man also laut = 10 schreibt, verschwindet die Warnung. Funktioniert hat es allerdings trotzdem
-
so, hier nun die komplette Beschreibung:
Vorbemerkung: bisher lief das alles ohne iobroker, direkt auf derCCU mit dem Sonosscript. Allerdings ist mein Lieblingssender pötzlich nicht mehr verfügbar. Und die Umstellung auf den neuen Sender funktioniert aus mir unbekannten Gründen auf der CCU nicht mehr.
1. auf der CCU läuft ein Programm, welches nach Auslösen durch einen Bewegungsmelder seinerseits morgens eine CCU Variable Sayit auslöst (diese benötige ich noch für andere Funktionen. Sayit löst nun wieder die CCU Variabe SayItRadio aus (schaltet auf true), und zwar nach 50 sec und schaltet das Radio nach 45 min wieder ab, also stellt die Variable SayItRadio auf false. (warum habe ich das mit Hilfe der CCU gelöst: weil mir das einfacher von der Hand geht, als das in Javascript zu lösen)
2. das Javascript
! //*******************************************
! //Javascript zum Schalten von Sonos
! //*******************************************
! //Trigger aus CCU holen, hier: Variable Sayit
! var idRadio = "hm-rega.0.1726"/SayItRadio/;
! // Trigger setzen
! on({id: idRadio, val: true}, function (data) {
! //*******************************************
! // Definitionen
! //*******************************************
! // ************************************************
! // Anweisung setzen LAUTSTAERKE
! // var laut;
! // ************************************************
! laut = 8;//<–----hier gewünschte LAUTSTÄRKE eintragen
! // ************************************************
! // Anweisung zur Raumwahl:
! // Büro: 192_168_xx_xx
! // Wohnzimmer: 192_168_xx_xx
! // Terrasse: 192_168_xx_xx
! // Schlafzimmer: 192_168_xx_xx
! // Küche: 192_168_xx_xx
! // ************************************************
! raum = "192_168_xx_xx";//<------hier gewünschten RAUM eintragen
! // ************************************************
! // Auswahl Radiosender
! // Sender muß in Favoriten vorhanden sein
! // momentan: 104.6 RTL Weihnachtsradio, RTL Deutschlands Hit-Radio
! // ************************************************
! sender = "RTL Deutschlands Hit-Radio"; //<------hier gewünschten SENDER eintragen
! // Befehle ausführen
! // ************************************************
! // Befehl zum play
! // ************************************************
! setState("sonos.0.root." + raum + ".volume", laut);
! setState("sonos.0.root." + raum + ".favorites_set"/favorites_set/,sender);
! // ************************************************
! // Befehl zum stop
! // ************************************************
! // setState("sonos.0.root." + raum + ".state", "stop");
! });wird nun ausgelöst, wenn die CCU Variable SayItRadio auf true gesetzt ist und schaltet das Radio im gewünschten Raum mit der gewünschten Lautstärke ein.
Das Ausschalten funktioniert quasi im gleichen Script, indem man die beiden Anweisungen
setState("sonos.0.root." + raum + ".volume", laut); setState("sonos.0.root." + raum + ".favorites_set"/*favorites_set*/,sender);
mit "//" ausschaltet und bei
// setState("sonos.0.root." + raum + ".state", "stop");
die beiden // rausnimmt. Und natürlich in der "on" Anweisung die Bedingung "true" auf "false" stellt.
Bei mir funktioniert das!
Vielen Dank den vielen Helfern, tempestas und pix. Frohe Weihnachten allerseits.
-
Hallo skorpil,
schön, dass es läuft.
Ich kann dir nur empfehlen, von der CCU ganz wegzugehen (außer als Hub für die Homematic Sachen). Habe ich vor langer Zeit auch getan und es ist einfach viel einfacher und sinniger, Skripte und Co an nur einem Platz in nur einer Systematik zu haben.
Mein erstes Skript bzw erster Kontakt mit JavaScript war übrigens damals auch mit dir
viewtopic.php?f=21&t=3351&p=64569#p64569
Frohe Weihnachten