Sonos steuern

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

Vorheriges Thema - Nächstes Thema

eppi

Hallo Rainer
Zitat von: Reinerlein am 22 Dezember 2013, 11:38:37
Ich bräuchte also mal jemanden mit einem Surround-System (am Besten komplett eine PlayBar, 2 Rear-Boxen und ein Sub, halt das meiste, was geht :-)
Wer sowas (auch annähernd) hat, könnte mir bitte mal den kompletten Inhalt des Readings "ZoneGroupState" des zentralen Sonos-Devices zukommen lassen.
Ich fühle mich angesprochen ;) Ich habe eine Playbar mit Sub und 2 Rear-Box, alles zusammengeschlossen in einem Surround-System. Jedoch verfüge ich über kein Reading "ZoneGroupState". Mit der neuen DEV Version sind nun die Rear-Boxen auch sichtbar.

Kannst du mir sagen, wo ich schauen muss?
Gruss Dani

Reinerlein

Hi Dani,

das ist ja schon mal super :-)
Das Reading befindet sich an dem Device, welches man meist als einzigstes selber anlegt (also das einzige Device vom Typ SONOS). Die einzelnen SONOSPLAYER haben das Reading nicht...

Da drin befindet sich eine XML-Struktur, die mir die Informationen bzgl. aller deiner Player und der jeweiligen Konstellation liefert....

Grüße
Reiner

JoeALLb

#542
Featurerequest: Kann man das einschalten/ausschalten von Wifi
in das Modul einbinden? Folgende URL-Aufrufe sind dazu nötig.
Ich würde damit gerne WiFi ausschalten, solange das Bad aus ist, denn nur dort benötige ich wlan.
Sobald jemand die Funksteckdose für das Bad einschaltet,
soll Wifi auf dem SonosSystem wieder aktiviert werden.....
    Wifi off, until next reboot
    http://[sonosip]:1400/wifictrl?wifi=off
    Wifi off, persistent
    http://[sonosip]:1400/wifictrl?wifi=persist-off
    Wifi on
    http://[sonosip]:1400/wifictrl?wifi=on


Schön wäre auch, wenn man in FHEM erkennen könnte, ob ein Sonos ber Kabel oder per Lan angeschlossen ist...
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

Reinerlein

Hi JoeAllb,

das mit dem URL-Aufruf kann ich gerne noch reinpacken, und man kann zumindest rausfinden, ob ein Player an seinen beiden LAN-Buchsen etwas aktives drinstecken hat (für jeden Port einzeln).
Allerdings habe ich spontan nichts gefunden, wie ich herausfinden kann, ob WLAN aktiv ist, oder nicht. Man kann es nur über deine URL setzen (zumindest habe ich dazu nix gefunden)

Das ganze wäre dann ein Schritt in den Bereich der Nicht-Offiziell-Supporteten Befehle. Bislang läuft alles über die offiziellen UPnP-Befehle... keine Hacks o.ä. :-)

Aber als zusätzliche Funktionalität kann man das sicherlich überlegen. Andererseits kann man sich das auch schnell in eine eigene Routine packen, da man die Grund-Adresse jedes Players über das Reading "location" herausbekommt...

Ich versuche aber auch nochmal diese Informationen vielleicht per UPnP zu bekommen/bzw. setzen zu können...

Grüße
Reiner

eppi

Hallo Reiner
Ich habe dir eine PM gesendet mit dem Reading.

Gruss Dani

John

#545
Hallo Reiner,
vielen Dank für das tolle Sonos-Modul.

Ich habe jedoch noch einige ungeklärte Probleme:
(verwende Sonos Play 1 mit Bridge)

Das Sonos-Modul habe ich installiert via
update thirdparty http://fhem.lmsoft.de/sonos sonos

Es sind mehrere Playlisten definiert (siehe Anhang)

jedoch liefert
get Sonos_Wohnzimmer Playlists

folgendes
Zitat2013.12.23 09:49:06 3: SONOS0: Received: 'DoWork:RINCON_000E58CBFB7C01400_MR:getPlaylists:'

Zu erwarten wäre doch eine Liste der Playlists.

John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

John

Hallo Reiner,

folgendes funktioniert bei mir grundsätzlich

set Sonos_Wohnzimmer Speak 20 de Temperatur im Wohnzimmer 19 Grad


Reading : Repeat 0

Logausgabe:

Zitat2013.12.23 10:03:53 3: SONOS1: Start temporary playing of "http://pi/sonos/RINCON_000E58CBFB7C01400_MR_Speak.mp3"
2013.12.23 10:03:55 3: SONOS1: SleepTimer berechnet die Laufzeit des Titels selber, da keine Wartezeit uebermittelt wurde!
2013.12.23 10:03:55 1: SONOS1: Da keine Endzeit ermittelt werden konnte, wird kein Restoring durchgeführt werden!

Allerdings wird die Ausgabe permanent wiederholt.

Wie kann ich das ändern, so dass der Text nur 1x ausgegeben wird ?

John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

John

Hallo Reiner,

wenn ich die Playlist durch schnelles Drücken am Sonos Play zum nächsten Titel schalte,
erhalte ich in FHEM keine Information darüber. (fehlende Events)

Demnach wird das Reading CurrentTrack nicht aktualisiert.
Der Sonos-Controller jedoch führt die Informationen nach.

Lässt sich dies ändern ?

Vielleicht hat in diesem Zusammenhang folgende Log-Ausgabe eine Bedeutung:
Zitat
2013.12.23 10:29:29 3: SONOS1: Transport-Event: device 'Sonos_Wohnzimmer' disabled. No Events/Data will be processed!

John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

Reinerlein

Hi John,

ich versuche das mal in einer Mail abzuwickeln:

  • Da die Aufrufe an die Sonos-Player alle Asyncron ablaufen, erhält man niemals eine direkte Antwort bei einem Get (ausser bei "Alarm", was nur eine Hilfe zum Auslesen des gleichnamigen Readings darstellen soll). Das Ergebnis wird nach Fertigstellung durch den Player im Reading "LastActionResult" abgelegt.
    Das bedeutet, das dort nach dem Aufruf von "get Sonos_Wohnzimmer Playlists" die Liste mit den Playlists auftaucht.
    Die Ausgabe im Log heißt nur, dass die Anweisung an den Subprozess weitergeleitet wurde.
  • Mit der Endloswiedergabe hatte hier noch jemand ein Problem gehabt, welches durch einen Neustart des Player behoben werden konnte.
    Allerdings gehe ich bei dir eher davon aus, dass das Modul die Datei nicht per HTTP lesen kann. Sonos selbst natürlich schon, da er dieses dann als Radiostream behandelt, und dann natürlich auch endlos abspielt (wie jeden Radiostream).
  • Aus irgendeinem Grund scheint das Attribut "disable" an dem Player auf "1" gestellt zu sein. Dann werden alle Events an diesen Player ignoriert.
    Das solltest du mal löschen.

Das Modul bringt nochmal ein bißchen Komplexität mit sich, die sich leider nicht vermeiden läßt. Aber es lohnt sich :-)

Grüße
Reiner

John

Hall Reiner,
vielen Dank für deine Antwort

ZitatMit der Endloswiedergabe hatte hier noch jemand ein Problem gehabt, welches durch einen Neustart des Player behoben werden konnte.
Allerdings gehe ich bei dir eher davon aus, dass das Modul die Datei nicht per HTTP lesen kann. Sonos selbst natürlich schon, da er dieses dann als Radiostream behandelt, und dann natürlich auch endlos abspielt (wie jeden Radiostream).

Allerdings habe ich immer noch das Problem, dass die Ausgabe sich ewig wiederholt.
Ich habe nun analog zum Beispiel des Samba-Servers ein eigenes Verzeichnis angelegt, diese mit den Rechten von FHEM versorgt
und via Alias in Apache eingebunden.


Zitat2013.12.23 20:35:52 3: SONOS1: Start temporary playing of "http://pi/sonos/speak/RINCON_000E58CBFB7C01400_MR_Speak.mp3"
2013.12.23 20:35:54 3: SONOS1: SleepTimer berechnet die Laufzeit des Titels selber, da keine Wartezeit uebermittelt wurde!
2013.12.23 20:35:54 1: SONOS1: Da keine Endzeit ermittelt werden konnte, wird kein Restoring durchgeführt werden!

Die Rechte sollten auch passen:
-rw-r--r-- 1 fhem dialout 27648 Dez 23 20:35 RINCON_000E58CBFB7C01400_MR_Speak.mp3


Ich kann die Datei über HTTP-von aussen lesen.

Was kann ich noch tun ?

John

CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

Reinerlein

Hi John,

sowohl vom Modul aus, als auch von Sonos aus muss der Zugriff über eine Samba-Freigabe erfolgen (bzw. vom Modul aus ist es ja meist ein Zugriff auf das lokale Filesystem).

Sobald Sonos per http zugreift, wird das ganze als Webradio angesehen, und endlos abgespielt.

Mal kurz zur Verdeutlichung:
- Das Attribut "targetSpeakDir" wird vom Modul zum Schreiben der MP3-Datei verwendet.
- Das Attribut "targetSpeakURL" wird an Sonos übergeben, um die MP3-Datei von "aussen" (ausserhalb deiner Fhem-Maschine) zu erreichen. Wenn dort was von "http://" steht, macht Sonos das von dir beobachtete Verhalten. Das Verzeichnis muss also nicht per Apache veröffentlicht werden, sondern mittels Samba...

Grüße
Reiner

Reinerlein

Hi zusammen,

hier mal ein kurzer Status...

Es formiert sich. Ich habe jetzt noch die Anregung bzgl. Reboot, WifiCtrl und EthernetPort-Informationen eingebaut.
Ich bin zusammen mit Dani noch auf der Suche nach einem Problem bzgl. der Namensvergabe bei Surround-Konfigurationen. Das werden wir aber noch vor dem Release lösen...

Was noch offen ist (und vermutlich auch nicht im Weihnachtsrelease gelöst sein wird), ist, was bei Verlust (z.B. durch Stromtrennung) eines Players in einer solchen Gruppierung passiert. Das ist wohl noch ein Problem.
Außerdem gibt es noch bei jemanden das Problem, dass die Sache mit dem Subprozess nicht sauber startet. Das sieht nach einem Threading-Problem aus, muss aber noch genauer untersucht werden.

Grüße
Reiner

herman

#552
Hallo,

vielen Dank für dieses Modul.

Ich teste gerade den Betrieb mit Funksteckdosen, FHEM und Sonos. Ich habe öfter das Verhalten, dass FHEM die Songs Komponenten nicht mehr steuern kann. Ich konnte noch nicht reproduzierbar rausfinden wann das der Fall ist. Der Sonos Prozess scheint mit einer hohen CPU Auslastung zu hängen - das zeigt ein ps -aux

fhem     16332 57.3  8.3  59596 37336 ?        Rl   Dez24 825:14 perl FHEM/00_SONOS.pm 4711 3
fhem     16587  2.9  6.9  36692 31268 ?        S    00:48  24:10 /usr/bin/perl fhem.pl fhem.cfg

nach einem Neustart von FHEM geht es erst mal wieder.

Folgenden Befehl habe ich im Verdacht: set sonot groups [Sonos_Kueche] ...

Im Log erschien dann Folgendes:

2013.12.25 15:11:14 3: SONOS0: Received: 'DoWork:RINCON_000E58A9DED201400_MR:makeStandaloneGroup:'
Thread 3 terminated abnormally: mismatched tag 'stateVariable'

Die nächsten Befehle kamen nicht bei den Songs Geräten an:

2013.12.25 15:11:24 3: SONOS0: Received: 'DoWork:RINCON_000E58CA720801400_MR:addMember:RINCON_000E58A9DED201400_MR'
2013.12.25 15:11:40 3: SONOS0: Received: 'DoWork:RINCON_000E58A9DED201400_MR:setRelativeVolume:7'
2013.12.25 15:11:54 3: SONOS0: Received: 'DoWork:RINCON_000E58A9DED201400_MR:setRelativeVolume:7'
2013.12.25 15:11:54 3: SONOS0: Received: 'DoWork:RINCON_000E58A9DED201400_MR:setRelativeVolume:7'
2013.12.25 15:12:17 3: SONOS0: Received: 'DoWork:RINCON_000E58CA720801400_MR:addMember:RINCON_000E58A9DED201400_MR'
2013.12.25 15:12:31 3: SONOS0: Received: 'DoWork:RINCON_000E58CA720801400_MR:pause:'

Ein Delete Sonos und Neudefinition in FEHM führten zum Absturz:

2013.12.25 15:13:14 3: SONOS0: Received: 'disconnect'
2013.12.25 15:13:14 3: SONOS0: Disconnecting client...
2013.12.25 15:13:14 3: SONOS0: Trying to kill Sonos_Thread...
Can't use string ("") as a HASH ref while "strict refs" in use at ./FHEM/21_SONOSPLAYER.pm line 291.


Wie könnte ich den Sachverhalt sinnvoll untersuchen?

Danke & Grüße,
Merhan

Reinerlein

Hallo Merhan,

hmmm... das klingt erstmal komisch. Ich habe das bei mir mal ausgeführt, aber wie das so ist, da geht es natürlich :-)

Ich würde dich kurz bitten, auf die Developer-Version upzudaten. Erstens sind dort u.U. einige Fehler bereits behoben, und zweitens passen deine Fehlermeldungszeilennummern zu dem Code in meinem Editor :-)

update thirdparty http://fhem.lmsoft.de/sonos_dev sonos


Danach nochmal beobachten, und mir die neuen Fehlermeldungen mit den von mir nachvollziehbaren Zeilennummern zusenden.

Danke schon mal...

Grüße
Reiner

herman

Halo Reiner,

Danke für Deine schnelle Unterstützung :-)

Ich bin auf die Dev gegangen und bekomme folgende Fehlermeldung

Can't use string ("") as a HASH ref while "strict refs" in use at ./FHEM/00_SONOS.pm line 956

vorher hatte ich den Befehl set Sonos groups [Sonos_Kueche] .... und weitere Player von denen zwei nicht mit Strom versorgt  und aktuell auch nicht bekannt waren.

Dieser Fehler lässt sich reproduzieren. Der Aufruf mit vorhandenen Geräten funktioniert.

Nach dem Neustart bekam ich bei dem Befeht get Songs groups folgende Meldung:

Can't use an undefined value as a HASH reference at ./FHEM/00_SONOS.pm line 857.

Grüße,
Merhan