Sonos steuern

Begonnen von Will, 05 Januar 2013, 15:51:12

Vorheriges Thema - Nächstes Thema

Reinerlein

Hallo Andy,

ich habe es gerade mal selber probiert.
Du musst das folgende angeben:

set Sonos_Player LoadRadio 100%26apos%3B5%20DAS%20HITRADIO.

Sonos behandelt intern die Apostrophe immer als "'". Wenn man das URL-encoded, kommt da "%26apos%3B" raus. Dann noch die Leerzeichen in %20 umwandeln, und los geht's :)

Die optisch schönere Alternative ist mit einem regulären Ausdruck möglich:

set Sonos_Player LoadRadio /(?i)das.hitradio/
Damit läßt man einfach den Apostroph-Kram aussen vor (und mit dem "(?i)" ist die Groß-/Kleinschreibung egal).

Grüße
Reiner

Andy89

Wow. Danke für die vielen Antworten. Hab mittlerweile (am Weekend) den Favoriten per PC App umbenannt und damit geht's nun auch ohne Probleme.
Die Alternative mit einem regulären Ausdruck finde ich auch am schönsten :) werde ich mir auf jeden Fall im Hinterkopf behalten!
Danke trotzdem für eure Mühe und Hilfe :)
Beste Grüße
Andy


Gesendet von iPhone mit Tapatalk
FHEM 6.0 auf rPi4 docker (mit Alexa & Siri); dbLog, FTUI, Sonos, XiaomiMapCreator auf rPi4 docker;
raspimatic auf rPi3+ > diverse Aktoren und Sensoren;
LGW > (PCA301),EC3000,LaCrosse; MQTT2 > WLAN-Steckdosen,Xiaomi Map;
Harmony Hub;Sonos;Onkyo AVR;RGB WLAN Controller;Netatmo;Withings;Unifi;AMAD

Reinerlein

Hallo Ralli,

ich habe gerade eine neue Version eingecheckt :)

Grüße
Reiner

Ralli

#2448
Hallo Reiner,

Dankeschön  ;D !

Klappt ! Sehr fein  8) .
Gruß,
Ralli

Proxmox 8.4 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.4 dev, virtualisierte RaspberryMatic (3.83.6.20250705) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.4.1) und HMW-GW, FRITZBOX 7490 (07.59), FBDECT, Siri und Alexa

Elektrolurch

Hallo Reinerlein,

zum Thema "Gruppieren" habe ich einige Fragen / bzw. ein Problem:

Hintergrund: Meine Sonos -Player können alle über FS20 Funksteckdosen aus der Ferne eingeschaltet werden. Ich möchte auf Kommando alle einschalten, zu einer Gruppe zusammenfassen und dann ev. "unliebsame" Gäste "erschrecken".


1. Der Befehl "addMember" kann als Argument wohl nur einen Player und keine Liste verarbeiten.

set Sonos_Arbeitszimmer addMember Sonos_G_stezimmer,Sonos_Marinas_Zimmer,Sonos_Wohnzimmer

2016.03.31 15:05:04 1: SONOS0: The Method 'SONOS_getDeviceDefHash' cannot find the FHEM-Device according to 'Sonos_G_stezimmer,Sonos_Marinas_Zimmer,Sonos_Wohnzimmer'. This should not happen!


Wäre also ev. noch ein Erweiterungswunsch.

Gut. Habe also als Workaround nun eine Schleife gebaut und rufe mit 1 Sek. Abstand den "addMember" Befehl nun auf.

Leider funktioniert das nur unzuverlässig.
Was anscheinend ein Problem  ist:
An zwei Sonos-Player sind an den externen Eingängen TVs angeschlossen. Die werden natürlich auch mit eingeschaltet und das externe Signal schaltet den Player auf den externen Eingang automatisch um.

Wenn ich nun den "set Sonos_Arbeitszimmer addMember Sonos_Wohnzimmer" - Befehl (Sonos_Wohnzimmer spielt den TV ab) passiert beim ersten Mal nichts, d.h. der Player spielt weiterhin das TV - Programm ab und nicht die Musik des Masters (Sonos_Arbeitszimmer).
Beim zweiten Mal verstummt nun der Player ohne die Quelle des Masters abzuspielen. Dafür gibt es dann im log folgnde Einträge:

Use of uninitialized value in concatenation (.) or string at ./FHEM/00_SONOS.pm line 4241, <$client> line 9.
Use of uninitialized value in concatenation (.) or string at ./FHEM/00_SONOS.pm line 4241, <$client> line 9.
binmode() on closed filehandle MPFILE at ./FHEM/00_SONOS.pm line 4248, <$client> line 9.
print() on closed filehandle MPFILE at ./FHEM/00_SONOS.pm line 4249, <$client> line 9.
Use of uninitialized value in concatenation (.) or string at ./FHEM/00_SONOS.pm line 4241, <$client> line 9.
Use of uninitialized value in concatenation (.) or string at ./FHEM/00_SONOS.pm line 4241, <$client> line 9.
binmode() on closed filehandle MPFILE at ./FHEM/00_SONOS.pm line 4248, <$client> line 9.
print() on closed filehandle MPFILE at ./FHEM/00_SONOS.pm line 4249, <$client> line 9.
Use of uninitialized value in concatenation (.) or string at ./FHEM/00_SONOS.pm line 4241, <$client> line 9.
Use of uninitialized value in concatenation (.) or string at ./FHEM/00_SONOS.pm line 4241, <$client> line 9.
binmode() on closed filehandle MPFILE at ./FHEM/00_SONOS.pm line 4248, <$client> line 9.
print() on closed filehandle MPFILE at ./FHEM/00_SONOS.pm line 4249, <$client> line 9.
Use of uninitialized value in concatenation (.) or string at ./FHEM/00_SONOS.pm line 4241, <$client> line 9.
Use of uninitialized value in concatenation (.) or string at ./FHEM/00_SONOS.pm line 4241, <$client> line 9.
binmode() on closed filehandle MPFILE at ./FHEM/00_SONOS.pm line 4248, <$client> line 9.
print() on closed filehandle MPFILE at ./FHEM/00_SONOS.pm line 4249, <$client> line 9.



Und danach reagiert Sonos überhaupt nicht mehr auf die "addMember" - Befehle.
Ich kann den Master alerdings weiterhin über fhem bedienen, z.B. Radiosender umschalten oder Lautstärke ändern.
Erst nach einem reboot von fhem gehts dann wieder.
Zwei kleine Randbedingungen, die m.M.n. aber keine Rolle spielen sollten:
a) der Sonos_Arbeitszimmer ist bereits ein Stereo-Paar.
b) Seit zwei Wochen habe ich OpenVPN auf dem Cubie laufen. Damit ich über den Tunnel auch ins Internet komme, habe ich für TCP und UDP eine allow-Regel für iptables anlegen müssen. Muss wg. Sonos ev. da noch eine für ICMP dazu?
Eigentlich ja nicht, da: pingType tcp

Für Tipps wäre ich wie immer zu allertiefstem Danke verpflichtet....

Elektrolurch


configDB und Windows befreite Zone!

Reinerlein

Hallo Elektrolurch,

das mit den mehreren Playern bei AddMember schaue ich mir an.

Zwischenzeitlich kannst du aber auch mit dem Groups-Befehl am Sonos-Device arbeiten:

set Sonos Groups [Sonos_Arbeitszimmer, Sonos_Wohnzimmer, Sonos_Schlafzimmer, Sonos_Bad]
Das baut eine Gruppe mit den genannten Playern auf, wobei der erste (hier "Sonos_Arbeitszimmer") der Master wird.

Die von dir beschriebene Fehlermeldung tritt bei einem Speak-Befehl auf. Warum sie allerdings auftritt, kann ich leider auch nicht sagen.
Dazu bräuchte ich ein größeres Log (min. 4 oder 5) das sind ja anscheinend nur Einträge, die auf StdErr rausgekommen sind...

Grüße
Reinerlein

Elektrolurch

Hallo Reinerlein,

danke schon Mal für die rasche Antwort.

Zitat:
set Sonos Groups [Sonos_Arbeitszimmer, Sonos_Wohnzimmer, Sonos_Schlafzimmer, Sonos_Bad]

mit [] ? -> ok, das würde aber auch das tun, was ich möchte. Baue ich mal ein....

Ja, mit dem Speak da muss wohl was damit passiert sein. Ich habe die Funktion (Einbrecher verjagen) gebaut und sie ging ja nicht. Beim Testen der Einzelschritte ist mir dann aufgefallen, dass das "speak" - directory falsche  Schreibrechte hatte. Beim "Sichermachen" des Bubies muss ich die wohl falsch gesetzt haben.
Werde es morgen dann noch mal testen.

Elektrolurch
configDB und Windows befreite Zone!

Reinerlein

Hi Elektrolurch,

ja, mit den Klammern. Man kann gleichzeitig mehrere Gruppen aufbauen/umbauen:

set Sonos Groups [Sonos_Arbeitszimmer, Sonos_Bad, Sonos_Schlafzimmer], [Sonos_Kueche, Sonos_Kinderzimmer]


Grüße
Reinerlein

Marius82

Hallo,

Wie stelle ich ein, das Sonos nicht jedes bisschen ins Logfile schreibt? Irgendwo soll man Verbose auf null setzen, aber ich weiß nicht wo/wie?

Über Hilfe würde ich mich sehr freuen!

Reinerlein

Hi Marius82,

allgemein für Fhem: entweder am Device "global" auf 0, oder direkt an jedem Device, für welches es wirken soll.

In deinem Fall also mindestens am zentralen Sonos-Device, und bei Bedarf an jedem Sonosplayer-Device...
Dann landen nur noch ein/zwei Zeilen beim Start des SubProzesses im Log. Wenn du es am "global"-Device definiert hast, dann noch nicht mal diese...

Grüße
Reinerlein

Marius82


Benni

Zitat von: Reinerlein am 01 April 2016, 12:25:52
Wenn du es am "global"-Device definiert hast, dann noch nicht mal diese...

... und auch keine mehr von anderen Devices.
Das erschwert im Problemfall erst einmal die Suche nach möglichen Ursachen.

Elektrolurch

Hallo Reinerlein,

leider noch Mal mit dem Thema gruppieren:

Wenn ich:

set Sonos Groups [Sonos_Marinas_Zimmer,Sonos_G_stezimmer,Sonos_Arbeitszimmer,Sonos_Wohnzimmer]

eingebe dann ist das Ergebnis relativ unvorhersehbar.
get Sonos Groups liefert nach einiger Zeit dann:

[Sonos_Arbeitszimmer, Sonos_Arbeitszimmer_RF], [Sonos_Marinas_Zimmer, Sonos_G_stezimmer], [Sonos_Wohnzimmer]

d.h. nur das Gästezimmer wurde zu Marinas_Zimmer hinzugefügt.
Wenn ich Pech habe, muss ich danach Sonos mit
attr Sonos disable 1
neu starten, da es überhaupt nicht mehr auf Gruppierungsbefehle reagiert.
Ich habe mal für Sonos verbose auf 5 gesetzt und hänge das log-File hier an.

Da es etwas länglich ist, habe ich noch ein logfile mit verbose 4
erzeugt.


Da mache ich folgendes:
set Monitor Audio Volume=5 type=ALARM pause=60 Achtung! Unbefugte Personen befinden sich im Haus. Einbruch! |sounds/Daueralarm|


Auszug aus dem SonosVerb4-log.log:

2016.04.02 13:22:41 1: Alarmausgabe gestartet
2016.04.02 13:22:41 1: main::AktivMon_Set: p Sonos_Marinas_Zimmer switch Mz_Media for ALARM
2016.04.02 13:22:41 1: main::AktivMon_Set: p Sonos_Wohnzimmer switch Wz_Media for ALARM
2016.04.02 13:22:42 1: main::AktivMon_Set: p Sonos_Arbeitszimmer switch Az_Media for ALARM
2016.04.02 13:22:42 1: main::AktivMon_Set: p Sonos_G_stezimmer switch Gz_Media for ALARM
2016.04.02 13:22:42 2: main::SonosCC_Attr: cmd set name SonosCC attr AutostartRadio val 0
2016.04.02 13:22:42 1: main::AktivMon_Set: master Sonos_Marinas_Zimmer cmd: set Sonos Groups [Sonos_Marinas_Zimmer,Sonos_Wohnzimmer,Sonos_Arbeitszimmer,Sonos_G_stezimmer] 
2016.04.02 13:22:42 1: main::AktivMon_Set: master Sonos_Marinas_Zimmer cmd: set Sonos_Marinas_Zimmer Speak 5 de |sounds/Gong| Achtung! Unbefugte Personen befinden sich im Haus. Einbruch! |sounds/Daueralarm| 

Das sind die Befehle, wie sie in die interne Zeitsteuerung geschrieben werden.
Danach werden sie entsprechnd der Zeitintervale an Sonos gesendet.

1. Die Geräte werden eingeschaltet.
2. Nach einer Minute werden alle Geräte gruppiert. (Befehl steht im log)
3. Es wird ein Speak - Befehl an den Master gesendet.
Der Text wird nur auf dem Sonos_G_stezimmer (und nicht auf allen Geräten) ausgegeben, die Abfrage der Gruppierung ergibt, dass nichts gruppiert wurde.

Besonderheit: An Sonos_Wohnzimmer und Sonos_Marinas_Zimmer ist der externe Eingang über den TV aktiviert, Sonos_Arbeitszimmer ist ein Stereo-Paar.


Ich hatte bei den Experimenten vor zwei Tagen vergessen, die Sonos-Prozesse zu beenden. Am nächsten Morgen stand fhem mit der Meldung im log, dass von Sonos ein thread mit der Nummer 19 versucht wurde zu starten. Leider hatte ich versehentlich das log gelöscht. Offensichtlich bringe ich irgendwie mit den Gruppierungsexperimenten einer der Sonos-Subprozesse aus dem Tritt.....

LG

Elektrolurch
configDB und Windows befreite Zone!

Reinerlein

Hi Elektrolurch,

hmm... leider kann ich ausser einer (korrekt gelieferten und weitergereichten) Fehlerantwort vom Player (501er Fehler) nichts entdecken, was das Modul da falsch machen könnte...

Hast du mal versucht, dieses Gruppieren Stück für Stück manuell aufzubauen? Also ausschließen, dass es ein Timing-Problem ist...
Wenn das geht, dann beim "Set Groups"-Befehl erstmal einen Player dazunehmen, und Schritt für Schritt erweitern...

Es kann schon was damit zu tun haben, dass du da eine TV-Quelle laufen hast (auf die auch automatisch umgeschaltet wird) die ja vielleicht von Sonos irgendwie Priorisiert wird...
Aber das müssen wir leider erstmal eingrenzen.

Grüße
Reinerlein

Elektrolurch

#2459
Hallo Reinerlein,

an ein timing-Problem hatte ich auch schon gedacht. Habe den Mechanismus für das Gruppieren nun abgändert:

Ich triggere auf das Ereignis "appered" bei den Sonos-Playern. Den ersten, den ich nach dem Einschalten des Stroms finde, mache ich zum Master, alle anderen Player werden dann im "appeared" - Event mit
set $master addMember $player
hinzugefügt.

Dabei konnte ich folgendes beobachten:
Der zweite Player, der hinzugefügt werden sollte, wurde ignoriert.
Der vierte Player ist ein zu einem Stereopaar gekoppelter Sonos Player1, damit scheint es überhaupt nicht zu gehen.
Im log steht da z.B.
2016.04.04 11:01:11 2: main::SonosCC_Player_not: Party füge Sonos_Marinas_Zimmer zu Sonos_Wohnzimmer hinzu
2016.04.04 11:01:11 2: main::SonosCC_Group:  memplayer: Sonos_Marinas_Zimmer
2016.04.04 11:01:11 2: main::SonosCC_Group: new member: set Sonos_Wohnzimmer AddMember  Sonos_Marinas_Zimmer
# Marinas_Zimmer wurde erfolgreich hinzugefügt

2016.04.04 11:01:14 2: main::SonosCC_Player_not: Party füge Sonos_G_stezimmer zu Sonos_Wohnzimmer hinzu
2016.04.04 11:01:14 2: main::SonosCC_Group:  memplayer: Sonos_G_stezimmer
2016.04.04 11:01:14 2: main::SonosCC_Group: new member: set Sonos_Wohnzimmer AddMember  Sonos_G_stezimmer
# Der G_stezimmer ist nicht in Gruppe von Wohnzimmer

Und nun das Stereo-Paar:
2016.04.04 11:01:30 2: main::SonosCC_Player_not: Party füge Sonos_Arbeitszimmer zu Sonos_Wohnzimmer hinzu
2016.04.04 11:01:30 2: main::SonosCC_Group:  memplayer: Sonos_Arbeitszimmer
2016.04.04 11:01:30 2: main::SonosCC_Group: new member: set Sonos_Wohnzimmer AddMember  Sonos_Arbeitszimmer

2016.04.04 11:32:57 1: SONOS0: The Method 'SONOS_getDeviceDefHash' cannot find the FHEM-Device according to 'Sonos_Arbeitszimmer_RS'. This should not happen!
2016.04.04 11:37:17 1: SONOS0: The Method 'SONOS_getDeviceDefHash' cannot find the FHEM-Device according to 'Sonos_Arbeitszimmer_RS'. This should not happen!
2016.04.04 11:39:10 1: SONOS0: The Method 'SONOS_getDeviceDefHash' cannot find the FHEM-Device according to 'Sonos_Arbeitszimmer_RS'. This should not happen!

Ein list Sonos_.* ergibt jedoch:
Sonos_Arbeitszimmer
Sonos_Arbeitszimmer_RF
Sonos_G_stezimmer
Sonos_Marinas_Zimmer
Sonos_Sauna
Sonos_Wohnzimmer

Sonos_Arbeitszimmer_RS gibt es also.


Wenn ich seitens fhem mit dem Stereo-Paar rede, spreche ich eigentlich immer nur Sonos_Arbeitszimmer und nicht Sonos_Arbeitszimmer_RS an.

Auch wenn ich mit

set Sonos Groups [Sonos_Wohnzimmer,Sonos_Marinas_Zimmer,Sonos_G_stezimmer,Sonos_Arbeitszimmer]

dann ist zwar nun das Gäöstezimmer mit in der Gruppe, Arbeitszimmer aber nicht.
Habe alternativ statt Sonos_Arbeitszimmer mal Sonos_Arbeitszimmer_RS (oder auch beide) probiert -> geht auch nicht.

set Sonos Groups [Sonos_Arbeitszimmer,Sonos_Wohnzimmer,Sonos_Marinas_Zimmer,Sonos_G_stezimmer]
gruppiert gar nichts.

Die Frage ist nun, lässt Sonos es überhaupt zu, ein Stereopärchen mit in eine Gruppe aufzunehmen und wie muss der korrekte Befehl lauten?

P.S.: Habe mal mit dem Sonos-Controller die Gruppierung vom Stereopaar und einem anderen Sonos-Player durchgeführt und siehe da, fhem zeigt per get Sonos Groups folgendes an:

[Sonos_Arbeitszimmer, Sonos_Arbeitszimmer_RS, Sonos_Wohnzimmer] bzw. wenn ich den Master anders herum definiere:
[Sonos_Wohnzimmer, Sonos_Arbeitszimmer, Sonos_Arbeitszimmer_RS].
Daraus folgt: Ein Stereo-Paar muss immer mit beiden Komponenten in eine Gruppe eingefügt werden, d.h. die Funktion
set $master addMember $player
geht schon mal nicht für ein Stereopaar.
Ich habe dann mit dem Befehl
set Sonos Groups [..]
weiter herum experimentiert.
Wenn ich zu der o.g. bestehenden Gruppe aus Arbeitszimmer / Wohnzimmer nun mit
set Sonos Groups [Sonos_Arbeitszimmer, Sonos_Arbeitszimmer_RS, Sonos_Wohnzimmer, Sonos_G_stezimmer]
den Player aus dem Gästezimmer hinzufügen will, dann zerfällt die Gruppe wieder in ihre Einzelnen Player ([][][][]).
Das würde dann auch das o.g. Verhalten erklären.
Also: Mit fhem kann ich derzeit wohl ein Stereopaar und einen Raum, aber nicht einen weiteren Raum gruppieren. Und es geht auch nur mit der set Sonos Groups - Funktion.
Soweit mein bescheidener Erkenntnisstand :-)


Gruß

Elektrolurch
configDB und Windows befreite Zone!