NEWS
Fortführende Alexa Fragen zu Gruppierungen und Lautstärkenregelung mit Sonos/Harmony Adapter
-
Danke dir. Habe das Script probiert, aber leider noch immer das gleiche Bild. Radio läuft, Lautstärke wird auf 0 gesetzt.
Log:
` > javascript.0 2017-06-30 13:58:12.232 warn Wrong type of sonos.0.root.192_168_178_70.volume: "string". Please fix, while deprecated and will not work in next versions.javascript.0 2017-06-30 13:58:12.232 info script.js.Schalter.EG_-Küche-6-fach(Mitte): [object Object]5
javascript.0 2017-06-30 13:58:12.231 info script.js.Schalter.EG_-Küche-6-fach(Mitte): [object Object]
sonos.0 2017-06-30 13:58:12.241 info try to control id sonos.0.root.192_168_178_70.volume with {"val":"volume_kueche","ack":false,"ts":1498831092235,"q":0,"from":"system.adapter.javascript.0","lc":1498831092235}
javascript.0 2017-06-30 13:58:12.229 info script.js.Schalter.EG_-Küche-6-fach(Mitte): Lautstärke erhöhen `
Ich habe aber keine andere Variable für "Volume".
-
Ah object object jetzt leuchtet es Mir!
Bitte
getState('sonos.0.root.192_168_178_70.volume');
Ändern nach
getState('sonos.0.root.192_168_178_70.volume').val
Wir vergessen den wert auszulesen zu dum das ich das nicht vorher gesehen habe logs helfen….
~Dutch
Send from mobile device
-
Geht leider noch immer nicht… :shock:
Aber das Log gibt neue Infos.
` > sonos.0 2017-06-30 17:55:35.687 info try to control id sonos.0.root.192_168_178_70.volume with {"val":"volume_kueche","ack":false,"ts":1498845335684,"q":0,"from":"system.adapter.javascript.0","lc":1498845335684}
javascript.0 2017-06-30 17:55:35.673 warn Wrong type of sonos.0.root.192_168_178_70.volume: "string". Please fix, while deprecated and will not work in next versions.
javascript.0 2017-06-30 17:55:35.672 info script.js.Schalter.EG_-Küche-6-fach(Mitte): 18
javascript.0 2017-06-30 17:55:35.672 info script.js.Schalter.EG_-Küche-6-fach(Mitte): 13
javascript.0 2017-06-30 17:55:35.671 info script.js.Schalter.EG_-Küche-6-fach(Mitte): Lautstärke erhöhen `
-
Jipie!!! Hab es! Habe mir gerade nochmal die anderen Skripte angesehen und die Variable abgeändert…
setState("sonos.0.root.192_168_178_70.volume", volume_kueche);
Vielen Dank für deine Unterstützung!
-
Na super! Sorry hätte schneller gehen können aber hatte auch was übersehen.
Der goldene tip ist mit Log arbeiten Dan sieht man was passiert und wo es schief geht.
Btw: bitte topic noch auf gelöst setzen, danke und viel Spass damit !
–-----------------------
Send from mobile device
-
Kann ich das topic auf "gelöst" setzen? Das Thema wurde damals von "Stormbringer" eröffnet.
-
Kann ich das topic auf "gelöst" setzen? Das Thema wurde damals von "Stormbringer" eröffnet. `
ehm nope das muesste Stormbringer dan machen
-
Ähm ne das war eigentlich nicht mein Problem. Beim Skripten bin ich noch gar nicht. Ich hätte gerne die Datenpunkte von on/off und Lautstärke zusammengefügt in einem Alexa Befehl. Laut Anleitung soll gleicher Smartname das regeln. Tut es aber nicht… Kann man die Datenpunkte manuell zusammen fügen?
PS: Freut mich aber, dass dein Problem gelöst wurde Seehofweg
-
Noch einmal nachgefragt: Du möchtest über Alexa einen SONOS Lautsprecher einschalten, ausschalten und die Lautstärke anpassen?
Das ist eigentlich kein großer Akt.
1.) im cloud-Adapter ein neues Smart Gerät anlegen (+ Taste)
2.) vom entsprechenden SONOS Gerät das Objekt "volume" auswählen
3.) einen aussagekräftigen Namen wählen - sagen wir zum Beispiel "Sonos Wohnzimmer"
4.) als Grundlautstärke einen angenehmen Wert einstellen (z.B. 25%)
5.) in der Alexa App "Smart Geräte suchen" lassen und prüfen ob "Sonos Wohnzimmer" angekommen ist
-
mit "Alexa, schalte Sonos Wohnzimmer ein" wird mit der "Lautstärke 25" die letzte Musikquelle abgespielt
-
mit "Alexa, stelle Sonos Wohnzimmer auf 30%" wird die Lautstärke entsprechend gesetzt
-
mit "Alexa, schalte Sonos Wohnzimmer aus" wird die Lautstärke auf "0" gesetzt
Ich habe das ganze noch um Scripte ergänzt:
Wenn Lautstärke von Sonos Wohnzimmer > 5 dann setze "play" auf "true", "stop" auf "false", "state" auf "play"
Wenn Lautstärke von Sonos Wohnzimmer < 5 dann setze "play" auf "false", "stop" auf "true", "state" auf "stop"
1917_sonos-smart_ger_t.jpg -
-
Hallo Heiko,
tolle Anleitung.
Statt eines Skriptes könnte man nun auch eine Szene verwenden, aber das ist ja nur Feintuning. Super Arbeit.
Gruß
Pix
-
@pix:Statt eines Skriptes könnte man nun auch eine Szene verwenden, aber das ist ja nur Feintuning. Super Arbeit. `
Ganz genau, ich nutze zum Beispiel eine Szene für den "Party-Modus"Ich bin noch nicht dazu gekommen das mal in Feinschrift als "How-To" oderTipp aufzusetzen, ich kann aber gerne schon vorab mal eine "Kladde" zur Verfügung stellen:
1.) alle SONOS zusammen im Party-Modus betreiben
-
eine Szene mit dem Namen "SONOS Party" anlegen
-
dieser Szene folgende Elemente (aus <u>jedem</u> SONOS Gerät/Objekt) hinzufügen
a.) "coordinator" (dieses Element gibt es erst seit der Adapter Version v.1.6.0)!!!
b.) "state"
c.) "volume"
- in den Einstellungen der "coordinator" Elemente kommt bei
"true" - überall die Adresse des "Gruppenleiters" rein (z.B. "192_168_178_55")
"false" -überall die eigene Adresse reinschrieben
- in den Einstellungen der "state" Elemente kommt bei
"true" - überall "play" rein
"false" - überall "stop" rein
- in den Einstellungen der "volume_level" Elemente kommt bei
"true" - überall die Lautsträrke rein die Du beim Start ideal findest
- bsp. bei mir: Bad = 20; Diele = 25; Schalfzimmer = 18
"false" - überall "0" rein
Jetzt solltes Du bereits die Szene "starten" und "stoppen" können.
Sofern Du beim "Gruppenleiter" zuletzt eine Radiosender oder anderen Favoriten laufen hattest, sollte dies nun als Vorgabe für die Gruppenmusik funktionieren.
Was passiert beim setzen der Szene auf "ja"?!
-
alle Geräte bekommen den gleichen Gruppencoordinator
-
alle Geräte werden auf "play" gesetzt
-
alle Geräte erhalten die voreingestellte Lautstärke
Was passiert also beim setzen der Szene auf "Nein"?!
-
alle Geräte erhalten als "coordinator" sich selbst (werden somit aus der Gruppe genommen)
-
alle Geräte werden auf "stop" gesetzt
-
alle Geräte werden auf Lautstärke "0" (aus) gesetzt
Nun wird im cloud-Adapter vom ioBroker noch ein Smart-Gerät angelegt:
-
"+"-Taset zum hinzufügen eines neuen Smart-Gerätes
-
unter den Objekten die Szene "SONOS Party" auswählen
-
den Eintrag so ändern, dass nur "SONOS Party" als Eintrag dort stehen bleibt
-
in der Alexa-App Smart-Home Geräte aktualisieren, damit Alexa das neue Gerät findet
-
anhand "Alexa, schalte SONOS Party ein"
-
und/oder "Alexa, schalte SONOS Party aus"
Testen
-
-
Ich habe das ganze noch um Scripte ergänzt:
Wenn Lautstärke von Sonos Wohnzimmer > 5 dann setze "play" auf "true", "stop" auf "false", "state" auf "play"
Wenn Lautstärke von Sonos Wohnzimmer < 5 dann setze "play" auf "false", "stop" auf "true", "state" auf "stop" `
Ich habe das nun auch mit einem Skript gemacht.Mein Skript überwacht dabei alle Geräte, aller Instanzen auf eine Änderung im Datenpunkt "volume" und setzt dann die anderen States. Übrigens habe ich "play" und "stop" nicht mehr, nur noch "state". Dazu habe ich noch ein evtl. "mute" ausgeschaltet, wenn der Sonos eingeschaltet wird.
Man kann nun in die Subscription noch ein "from:" einbauen und die Ausführung eingrenzen auf Änderungen, die vom Cloud-Adapter (also Alexa) ausgehen. Da muss ich aber erst noch weiter testen, ob das nötig ist.
Die variable "regex_vol" ist recht lange geraten (geht auch kleiner) :lol: , aber so reagiert sie auf valide IP-Adressen.
/* Alexa_Sonos_schalten reagiert auf Lautstärkeänderungen Alexa Smartname zeigt auf .volume sSonos-Adapter Version 1.6.0 voraus! http://forum.iobroker.net/viewtopic.php?f=37&p=75526#p75526 15.07.2017 erstellt von pix nach Idee von BBTown */ const logging = true; // sonos.0.root.192_168_178_XXX.volume var regex_vol = /^sonos\.[0-9]\.root\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)_(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)_(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)_(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.volume$/; on({ id: regex_vol, // evtl from: cloud-Adapter change: 'ne' }, function(data) { var pfad = getIdByName(data.channelName); if (logging) log(data.channelName + ' (' + pfad + '.' + data.name + ') Lautstärke auf ' + data.state.val + '% geändert'); if (data.state.val >= 5) { setState(pfad + '.muted', false); setState(pfad + '.state', 'play'); setState(pfad + '.play', true); setState(pfad + '.stop', false); } if (data.state.val < 5) { setState(pfad + '.state', 'stop'); setState(pfad + '.play', false); setState(pfad + '.stop', true); } });
Gruß
Pix
EDIT: Skript angepasst auf SONOS Adapter 1.6.0
-
Dann mache ich mal mit einer einfachen Blockly-Variante (ist für jedes SONOS Gerät anzulegen) mit 8-)
Die Werte sind entsprechend der tatsächlichen SONOS-Objekte anzupassen.
In diesem Beispiel müssen also die Angaben "192._168_178_61" durch die tatsächlichen Werte des SONOS Gerätes ersetzt werden
! ````
<xml xmlns="http://www.w3.org/1999/xhtml"><block id="dbjr?Bo*P5BB-X|8a
)" type="on_ext" x="-412" y="-212"><mutation items="1"></mutation>
<field name="CONDITION">ne</field><value name="OID0"><shadow id="NIZw?^l|a|~Az]6-ODC`" type="field_oid"><field name="oid">sonos.0.root.192_168_178_61.volume</field></shadow></value> <statement name="STATEMENT"><block id="/P]OaJvPo(8t|_b@_DWg" type="controls_if"><value name="IF0"><block id="F}%}QU.H.2ReY*27Vujw" type="logic_compare"><field name="OP">GT</field> <value name="A"><block id="2pVgp@S^Gkk4m*FcYp/@" type="get_value"><field name="ATTR">val</field> <field name="OID">sonos.0.root.192_168_178_61.volume</field></block></value> <value name="B"><block id="?*,meW}Ty_jsc#/(d2jk" type="math_number"><field name="NUM">1</field></block></value></block></value> <statement name="DO0"><block id="M7=jamTO`f_Vy3asBWy_" type="control"><mutation delay_input="false"></mutation> <field name="OID">sonos.0.root.192_168_178_61.state</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"><block id="Cp/7yeWv1Aei%jeL-SQl" type="text"><field name="TEXT">play</field></block></value> <next><block id="0^SZ=tQeC/|]-Su_(|=k" type="control"><mutation delay_input="false"></mutation> <field name="OID">sonos.0.root.192_168_178_61.play</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"><block id=":f1y3j};K,ER@r(@VEc#" type="logic_boolean"><field name="BOOL">TRUE</field></block></value> <next><block id="]C+RB`OFy[Nq.:xeJFeJ" type="control"><mutation delay_input="false"></mutation> <field name="OID">sonos.0.root.192_168_178_61.stop</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"><block id="WGj!w{y;A:*[^G+z?23+" type="logic_boolean"><field name="BOOL">FALSE</field></block></value></block></next></block></next></block></statement> <next><block id="?|=4%gRKMF*SU8f-4qaQ" type="controls_if"><value name="IF0"><block id="eRFu+k!9zXX,SBm`-?Xv" type="logic_compare"><field name="OP">LT</field> <value name="A"><block id="C{^ngt;Ddf@.VWP6Fi83" type="get_value"><field name="ATTR">val</field> <field name="OID">sonos.0.root.192_168_178_61.volume</field></block></value> <value name="B"><block id="4?Z!^[,Mzgu0uyx!)N48" type="math_number"><field name="NUM">2</field></block></value></block></value> <statement name="DO0"><block id=".GJO4s}Fbo6P/hJxl`@v" type="control"><mutation delay_input="false"></mutation> <field name="OID">sonos.0.root.192_168_178_61.state</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"><block id="!-]HLRwr%H%Ts]2~`8a:" type="text"><field name="TEXT">stop</field></block></value> <next><block id="jS#;~DOdAs]o3D?3W|sf" type="control"><mutation delay_input="false"></mutation> <field name="OID">sonos.0.root.192_168_178_61.stop</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"><block id="kzfnxW5)Rze:pthw-ik)" type="logic_boolean"><field name="BOOL">TRUE</field></block></value> <next><block id="F?~^/4!sN_J]Vp4uOvH@" type="control"><mutation delay_input="false"></mutation> <field name="OID">sonos.0.root.192_168_178_61.play</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"><block id="r@4()cyk@FckKsuiGR/q" type="logic_boolean"><field name="BOOL">FALSE</field></block></value></block></next></block></next></block></statement></block></next></block></statement></block></xml>
! ````
1917_sonos_blockly.jpg -
a.) "coordinator" (dieses Element gibt es erst seit der Adapter Version v.1.6.0)!!! `
Hab das Update auf 1.6.0 gemacht, aber sehe den Datenpunkt nicht.Lösung: Leider muss die bestehende Instanz erst gelöscht werden. Also Einstellungen merken, dann Sonos Instanz löschen, dann von Github 1.6.0 installieren und die Einstellungen wieder einfügen.
Dort werden dann auch die Datenpunkte stop und play und einige andere sichtbar…
Entsprechend (passend für die neuen Datenpunkte) ändere ich das Skript oben.
Gruß
Pix
-
Hallo Heiko,
danke für die Antwort und die Arbeit die du dir gemacht hast mit der Anleitung
Unterm Strich würde das mein Problem schon lösen aber ich hätte die einfachere Variante gesucht. Ich versuch das Ganze nochmal von Vorne zu erklären.
Laut Cloudadapter Anleitung werden doch Datenpunkte mit dem selben Smartnamen gruppiert?
http://www.iobroker.net/docu/?page_id=5859&lang=de
Das macht mein Adapter auch aber nur bei den Sachen wo er es nicht machen soll :lol:
Kann man nicht den Sonos Punkt "On" und "Volume" kombinieren damit er dann im Cloud Adapter so gelistet wird wie auf dem Bild in der Anleitung mit "%, Pfeil hoch runter, on, off"? Dachte das macht der Adapter automatisch wenn die Punkte beide in z. B. Gewerk "Sonos" und Raum "Bad" eingruppiert sind?
2548_alexa_009_cloud_adapter_4.jpg -
Hallo,
ein kleiner Hinweis für Nutzer die auf 1.6 updaten:
Die oben von Heiko erklärten Einstellungen im Smartname Reiter verschwinden beim Update des Sonos Adapters auf 1.6. Vielleicht deshalb, weil die Datenpunktstruktur sich ändert. In der Alexa App sind diese "Smarthome Geräte" noch vorhanden, aber beim Ansprechen starteten meine Sonos Geräte mit voller Lautstärke (100%)
:shock: :!:
Also bitte nach dem Update die Smartnames erneuern und wieder mit dem "volume"-Datenpunkt verbinden.
Gruß
Pix
-
Das macht mein Adapter auch aber nur bei den Sachen wo er es nicht machen soll :lol:
Kann man nicht den Sonos Punkt "On" und "Volume" kombinieren damit er dann im Cloud Adapter so gelistet wird wie auf dem Bild in der Anleitung mit "%, Pfeil hoch runter, on, off"? `
Moin Stormbringer,das ist zwar kein spezifisches "alexa/SONOS" Problem, vielleicht habe ich dennoch eine Idee warum Du nicht zum erwünschten Ergebnis kommst.
Im Screenshot erfolgt die Gruppierung von gleichartigen Objekten/Objekttypen/Rollen/Datenpunkten (.level).
So wie Du es schilderst versuchst Du hingegen unterschiedliche Objekte zu Gruppieren.
Die werden unterscheidlich angesprochen.
"Alexa, schalten an/aus"
"Alexa, stelle Lautsärke auf x%"
Das könnte der Grund sein weshalb diese Objekte sich nicht Gruppieren öassen?!?
-
@pix:Das könnte der Grund sein weshalb diese Objekte sich nicht Gruppieren öassen?!? `
Scheint leider so, dachte das könnte man dann irgendwie manuell zusammenführen.
Sonos geht also nicht, danke
Aber Hue müsste doch gehen? Da bekomme ich auch bei "on" und "bri" immer getrennte Alexapunkte.
-
Scheint leider so, dachte das könnte man dann irgendwie manuell zusammenführen.
Sonos geht also nicht, danke
Aber Hue müsste doch gehen? Da bekomme ich auch bei "on" und "bri" immer getrennte Alexapunkte. `
"An/Aus" ist ein "logischer Datenpunkt (boolean)" und kennt die Zusrtände "true/false""Lautstärke" ist ein "Zahlenwert" (0 - 100)
Wie sollte da <u>ein</u> cloud/alexa-Kommando lauten, dass beide bedienen kann?
"Alexa, schalte SONOS Wohnzimmer ein" setzt z.B. den Status von "play" auf "true"
Die Lautstärke benötigt aber eine Zahl die hast Du aber gar nicht übermittelt - und andersherum genauso
-
@pix:// sonos.0.root.192_168_178_XXX.volume var regex_vol = /^sonos\.[0-9]\.root\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)_(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)_(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)_(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.volume$/; ```` `
Moin Pix,
erst einmal vielen Dank für dein Script
Kann es sein, dass dein Script (die enthaltene regex) derzeit den IP Adressbereich "192_168_178xxx" voraussetzt und andere Bereiche (z.B. "192_1681xxx" oder "192_1680_xxx") so nicht ohne weiteres erkannt werden?