Sonos steuern

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

Vorheriges Thema - Nächstes Thema

Reinerlein

Hallo zusammen,

ich war dieses Adventswochenende etwas eingespannt, deshalb erst jetzt kurze Statements.

@djhans: Im Normallfall sollte das kein Problem sein. Bei mir gibt es nämlich eine ähnliche Konstellation. Dort wird bei meinem Schlafzimmer-Play5 beim Neuanstecken automatisch ein Radiosender geladen, und die Lautstärke umgestellt.
Das funktioniert mittlerweile problemlos. Kannst du anhand der Logs (auf der Konsole, notfalls den Level hochdrehen) etwas erkennen?

@Jens: Ich habe dafür etwas eingebaut, bin mir aber gerade nicht sicher, ob die Version schon veröffentlicht wurde.
Zu dem Absturz nach 30 Sekunden: Kann es sein, dass er nach genau 120 Sekunden auftritt? Dann deutet das auf ein Problem mit den Ping-Berechtigungen hin. Dazu müsste dann aber etwas im Log stehen.
Wenn es nach 30 Sekunden ist, dann deutet das auf das von dir beschriebene Phänomen hin, und die öffentliche Version enthält das eben doch noch nicht.

Ich denke, dass ich demnächst (nach Doku-Nachziehen) die Version erstmal veröffentliche. Da fehlt halt noch der Part mit den Gruppenlautstärken, was ich so noch nicht nachvollzogen bekomme...
Aber dann habt ihr schon mal den ganzen Rest...

Grüße
Reiner

JR

Hallo Reiner,

hab' sicherheitshalber noch ein paar Tests gemacht. Die 30 Sekunden sind nicht fix; beim letzten Versuch kam der Crash schon nach 12 Sekunden. Nach genau 120 Sekunden passierte aber nie etwas, und im Log finde ich nichts zum Thema Ping-Berechtigungen.
Nach dem geplanten Update werde ich also weiter testen. Vielen Dank schonmal!

Gruß
  Jens

Reinerlein

Hallo zusammen,

so, wie versprochen, hier erstmal ein Zwischenrelease.

wie immer mit dem Befehl

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

installierbar.

Folgende Features/Fehlerbereinigungen sind enthalten (aus dem Changelog):

  • Die Antwort von 'SetCurrentPlaylist' wurde korrigiert. Dort kam vorher 'SetToCurrentPlaylist' zurück.
  • VolumeStep kann nun auch als Attribut definiert werden. Das fehlte in der zulässigen Liste noch.
  • Speak kann nun auch für lokale Binary-Aufrufe konfiguriert werden.
  • Speak kann nun einen Hash-Wert auf Basis des gegebenen Textes in den Dateinamen einarbeiten, und diese dann bei Gleichheit wiederverwenden (Caching)
  • Sonos kann nun ein "set StopAll" oder "set PauseAll" ausführen, um alle Player/Gruppen auf einen Schlag zu stoppen/pausieren
  • Beim Discover-Event wird nun genauer geprüft, ob sich überhaupt ein ZonePlayer gemeldet hat
  • Die UserIDs für Napster und Spotify werden wieder korrekt ermittelt. Damit kann auch wieder ein Playlistenimport erfolgen.
  • Loudness Einstell- und Abfragbar
  • Bass Einstell- und Abfragbar
  • Treble Einstell- und Abfragbar
  • Volume kann nun auch als RampToVolume ausgeführt werden
Wie man die einzelnen Features verwendet/einrichtet, steht im Wiki und der lokalen Dokumentation...

Wie immer: Bitte testen (auch die Doku), damit ich auch reagieren kann :-)

Grüße
Reiner

djhans

Hallo Reinerlein,
ich bin begeistert! Habe das Update geladen und bislang funzt es gut.

Eine Frage zu dem RampToVolume Typ 1:
Wenn ich beispielsweise die Mucke langsam ausschalten möchte, dann mache ich das mit dem Kommando:
set Sonos_Schlafzimmer Volume 0 1
Das bedeutet aber, dass der Player auf "Play" bleibt.
Wenn ich direkt hinter das Kommando ein
set Sonos_Schlafzimmer Stop absetzte, dann bricht er das langsame herunterfahren der Musik ab und schaltet direkt auf Stop.
Kann man das irgendwie beeinflussen?

djhans.

Reinerlein

Hi djhans,

also, ich habe bei mir z.B. ein Eventhandler auf Volume 0 festgelegt, der nach einem Timer von 2 Sekunden den Player anhält. Wenn die Lautstärke vor Ablauf wieder hochgesetzt wird, bleibt der Player in Betrieb, indem der Timer wieder gelöscht wird.
Vielleicht wäre das auch eine Option bei dir?

Das Problem mit deinem nachgesetzten Stop ist, dass das sofort in der internen Warteschlange abgearbeitet wird, und somit vor dem Ende der Rampe ausgeführt wird. Es wartet ja nix auf die Ausführung beim Player (damit Fhem auf keinen Fall ausgebremst wird).

Ansonsten kann ich mir mal anschauen, ob ich irgendeine Mitteilung vom Player bekomme, wenn die Rampe fertig ist, und vielleicht ein Event erzeugen.

Grüße
Reiner

djhans

#500
Hi Reiner,
danke!  Ich denke man muss dann mit dem notify und dem info Summarize3 arbeiten. Ich verstehe allerdings die Syntax von infoSummarize noch nicht ganz. Wie kann ich dann auf die einzelnen Elemente wie "Lautstärke" von Summarize zugreifen? Gibt es irgendwo ein Beispiel? Sorry, aber ich lerne am Besten durch Beispiele, die ich ausprobieren kann...wäre also klasse, wenn es dazu etwas gäbe...

Im wiki habe ich mir das Bsp. zum Loggen der Titel angesehen, hat aber noch nicht "klick" gemacht, da hier alle Infos ausgelesen werden. Die Syntax ".{2,}" versteh´ich hier noch nicht...

Herzlichen Dank für die Geduld,
Christian.

Reinerlein

Hi Christian,

InfoSummarize ist eher ein Hilfsmittel, um Anzeigen innerhalb Fhem zu ermöglichen. Darauf sollte man keine Events legen (obwohl es natürlich geht :-)

In diesem Fall meinte ich ein Event auf Volume, also z.B.:

define Sonos_Wohnzimmer_Notify_VolumeZero notify Sonos_Wohnzimmer:.0 set Sonos_Wohnzimmer Stop

In diesem Beispiel wird direkt auf Volume 0 reagiert (in diesem Fall ohne Verzögerung).
Der Punkt vor der 0 kommt daher, da dies ein regulärer Ausdruck ist, der kein Leerzeichen haben darf.

Daher kommt auch der Konstrukt

.{2,}

der bedeutet nichts anderes als "mindestens 2 beliebige Zeichen".

Grüße
Reiner

JR

Hallo Reiner,

erstmal vielen Dank für die neue Version!
Hat in meinem Fall leider nicht geholfen, der Thread stürzt immer noch kurz nach dem fhem-Start ab. Sieht jetzt aber anders aus als vorher, nur der eigentliche Crash ist derselbe. Konsolen-Ausgabe:
Current: "fhem.pl", gPath: "./FHEM"
Use of uninitialized value $volumeLeft in negation (-) at 00_SONOS.pm line 2690, <$client> line 2.
Use of uninitialized value $volumeRight in addition (+) at 00_SONOS.pm line 2690, <$client> line 2.
Use of uninitialized value $currentVolume in concatenation (.) or string at 00_SONOS.pm line 2693, <$client> line 2.
Use of uninitialized value $value in concatenation (.) or string at 00_SONOS.pm line 4510, <$client> line 2.
Use of uninitialized value $value in concatenation (.) or string at 00_SONOS.pm line 4510, <$client> line 2.
Thread 1 terminated abnormally: Can't use string ("
    ") as an ARRAY ref while "strict refs" in use at lib/UPnP/Common.pm line 190, <$client> line 2.


Eine Log-Datei schicke ich per PM. Vielleicht hast Du noch eine Idee?

Gruß
  Jens

Reinerlein

Hi Jens,

kannst du mir mal eine Auflistung deiner Komponenten angeben, und vielleicht kannst du auch ermitteln bei welcher konkreten Sonos-Komponente das Problem auftritt.
Die von dir geschriebene Fehlermeldung deutet darauf hin, dass ein angefragter Player keine Lautstärkeinformationen zurückliefert. Das sollte eigentlich nicht so sein.
Das könnte aber auch ein Indiz für eine Sonos-fremde Komponente sein, die ich da einfach mal wieder verwende. Das kann man so aber gar nicht beurteilen...

Das Log (möglichst auf Level 5) kann hier vielleicht weiteres zu Tage förden. Leider kann man hier keine Dateien an eine PM hängen. Deshalb sende es mir doch einfach an meine E-Mail Adresse zu...

Grüße
Reiner

JR

Hi Reiner,

das mit der betroffenen Sonos-Komponente ist einfach: Es gibt (noch) nur einen Play1, via Bridge mit dem Hausnetz verbunden. Die Controller auf den Macs bzw. auf einem iPhone zeigen mir die korrekte Lautstärke des Play1 an, das funktioniert also im Prinzip.

Die Frage ist also in der Tat, ob nicht eine Sonos-fremde Komponente dazwischenfunkt. In Frage kämen ggf. einige Geräte mit UPnP (Fernseher, Drucker, ein Raspberry PI mit OpenElec und ein MythTV-Server sind eigentlich immer an, manchmal eine PS3 (gestern aber nicht)).

War das Log (Level 5) angekommen? Ich hatte es einfach in die PM kopiert.

Gruß
  Jens

djhans

Hallo Reiner,
danke für das Beispiel. Aber es funktioniert nicht. Der Player bleibt an.
define Sonos_Schlafzimmer_Notify_VolumeZero notify Sonos_Schlafzimmer:.0 set Sonos_Schlafzimmer Stop
Was ich nicht verstehe ist, wie weiß das System, dass .0 für Volume=0 steht. 0 ist der Wert und das ist klar, aber wieso steht die .0 nicht beispielsweise für "SleepTimer" beendet.
Was übersehe ich, SleepTimer abgelaufen ist doch auch ein Event.

Ich habe da noch ein grundlegendes Verständnißproblem....

djhans.

Reinerlein

Hallo zusammen,

@Christian: Ich glaube, du hast kein Verständnisproblem, sondern ich war paddelig bei dem Beispiel :-) Das ist, wenn man das aus dem Kopf niederschreibt, und nicht testet...
Natürlich hast du recht: Da muss noch das Feld selbst dazwischen:

define Sonos_Schlafzimmer_Notify_VolumeZero notify Sonos_Schlafzimmer:Volume.*0 set Sonos_Schlafzimmer Stop

Zur Sicherheit habe ich aus dem einen Punkt eine beliebige Anzahl Punkte gemacht (bzw. natürlich beliebige Zeichen, ist ja ein regulärer Ausdruck), da ich nicht mehr genau weiss, ob bei einer Zahl nicht noch ein Platzhalter für das Vorzeichen vorkommt, auch wenn es nicht da ist. Sonst mal testen...

@Jens: Bei mir ist noch keine Nachricht angekommen. Hast du die hier über das Forum versendet?
Und ja, das mit dem Text sollte eigentlich funktionieren...

Grüße
Reiner

djhans

Hallo Reiner,
nochmals herzlichen Dank!

Im Moment kann ich leider nicht weitertesten, da ich beruflich unterwegs bin....melde mich spätestens nächste Woche...dann wird mein Sonos-System auch um einen Play 1 reicher sein.....
Gruß,
Christian.

djhans

#508
Hallo,
da bin ich wieder.....
Kleiner Zwischenbericht!

Habe heute meinen Play 1 bekommen. Ins Sonos Netz eingebunden und spielt fabelhaft. Das so viel aus so einer kleinen Kiste kommt, hätte ich nicht gedacht....

Fhem hat die Kiste nicht automatisch erkannt. Hing mehrere Stunden im Netz, aber fhem ist bei der alten Konfiguration geblieben. Dann habe ich die Geräte auch noch umbenannt.

Play 1 ist nun Bad
der alte Play 3 aus dem Bad, ist nun Büro.
Das hat das Modul auch nicht gemerkt!

Habe dann die Sonos Komponenten in der Sonos.cfg gelöscht und nur die eine Zeile
define Sonos SONOS localhost:4711 30
dringelassen..
Nach einem Neustart wurden alle Geräte erkannt...
Ist das Verhalten normal?
Gruß,
Christian

Reinerlein

Hi Christian,

das Modul hat ein Problem damit, wenn ein Player im laufenden Betrieb eingerichtet und umbenannt wird.
Da die Geräte dann schon fertig eingerichtet sind, passen die Namen halt nicht mehr mit der Realität zusammen (was ja auch gar nicht anders lösbar ist, da ich ja nicht einfach Fhem-Komponenten umbenennen kann)...
Das wird das Problem mit der fehlenden Erkennung am Anfang gewesen sein...

Am Besten ist es, wenn die Einrichtung in Abwesenheit von Fhem erfolgt, bzw. so bereinigt wird, wie du das getan hast. Player die umbenannt werden (mit dem Sonos-Controller) sollte man in Fhem entfernen, oder sauber mit umbenennen...
Hängt man fertig eingerichtete Player wieder ins Netz (was ja bei einem Anschalten eines Player passiert), sollte das eigentlich gut funktionieren...

Leider kann man hier nicht viel machen. Das ganze ist im Rahmen einer Hausautomatisierung ja auch eher unüblich :-)
Da hat man sowas wie einen Einrichtungszeitpunkt, und einen Normalbetrieb...

Grüße
Reiner