Sonos steuern

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

Vorheriges Thema - Nächstes Thema

Reinerlein

Hallo zusammen,

@Peter: Das mit dem Stereopaar von Fhem aus war nur ein Beispiel. Wenn es sowieso ein festes Paar ist, dann brauchst du das natürlich nicht in Fhem machen. Aber achte immer darauf, dass du den Master für deine späteren Gruppierungen verwendest.
Wenn es bereits ein Paar bei der Erkennung durch Fhem war, dann gibt es einen Player, der z.B. "Sonos_Flur" heißt, und einen, der "Sonos_Flur_RF" oder so ähnlich heißt...
Dann musst du immer den ohne Kürzel verwenden...

@Andre: Du hast jetzt diese IgnoreIPs gefüllt, und hast erstmal Ruhe?

@Mario: Versuch doch mal bitte im Sonos-System mit dem Controller eine weitere zu indizierende Freigabe einzurichten (genauso wie deine normale), das können ja mehrere sein. Dort gibst du bitte die Freigabe deines Pi an, und läßt ihn indizieren.
Danach versuchst du die Dateien dort abzuspielen. Wenn das nicht geht, dann stimmt offensichtlich etwas mit den Rechten noch nicht, und du musst dort nochmal nachschauen...
Vergiss nicht bei Erfolg das wieder im Controller zu entfernen.

Das mit dem fehlenden Verzeichnis kann nicht die richtige Stelle sein. Das UPnP-Modul läuft ja offensichtlich, da es ja einen UPnP-Fehler liefert, als es versucht hat, dem Player das neue Stück zum Abspielen mitzuteilen...

Grüße
Reinerlein

Reinerlein

Hi Andre,

ich habe nun ein neues Attribut "ignoredIPs" am Sonos-Device eingeführt. Mit diesem kann man eine oder mehrere IP-Adressen komplett von der UPnP-Verarbeitung ausschließen.
Die IPs müssen mit Komma getrennt und ohne Leerzeichen aufgelistet werden...

Damit brauchst du nicht mehr etwas direkt im Code verdrahten.

Wie immer ab sofort im SVN oder ab nachher im Update...

Grüße
Reiner

justme1968

perfekt. das ganze hat tatsächlich geholfen. keine meldungen mehr. keine verzögerungen und keine verbindungsabbrüche.

gruß
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

John

ich kann das bestätigen, das Problem ist beseitigt und meine Skripte funktionieren wieder.

Folgende Ausgabe ohne für mich erkennbare negative Folgen hab ich noch:
Zitatutf8 "\xFC" does not map to Unicode at ./FHEM/00_SONOS.pm line 2721.
John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

Reinerlein

Hi John,

ist die Zeilennumer von der aktuellsten Version heute Morgen?
Hast du da vielleicht gerade versucht eine Playlist aus einer Dazei zu laden?

Dann könnte es ein Fehler in eben dieser Datei sein...

Grüße
Reiner

John

Hallo Reiner,

2x Ja, ich denke den Fehler kann man ignorieren.

Dank dir nochmal sehr für deine Arbeit und dein Engagement.

John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

peter0255

Hallo Reiner,

ich habe es mittlerweile hinbekommen mit createstereopair, habe nur noch das Problem, ich habe am Master, Sonos_Wohnzimmer linker Kanal "Set Sonos_Wohnzimmer CreateStereoPair Sonos_Wohnzimmer2" eingegeben, Stereo Paar wurde gebildet, aber er zeigt mir immer Sonos_Wohnzimmer2 als Master an und auch der Balance Regler geht in die falsche Richtung, also wenn ich ganz nach rechts gehe ist die rechte Seite stumm.
Hast Du vielleicht noch eine Idee?

Gruß Peter

Reinerlein

Hi Peter,

das klingt danach, als seien die beiden Player vertauscht. Ich würde das Stereopaar in Fhem erstmal wieder auflösen, und über den normalen Controller neu bilden. Dort gibt man ja per Tastendruck vor, welcher der Linke Player wird.

Anschließend kannst du dir in Fhem die Konstellation anhand des Readings "fieldType" anschauen.
Wenn da etwas vertauscht ist, würde ich das Sonos-Device per "disable" deaktivieren, die beiden fraglichen Player aus Fhem löschen, und das Sonos-Device wieder aktivieren (durch löschen des "disable"-Attributs).
Damit solltest du wieder eine klar erkennbare Basis haben.

Alternativ kannst du natürlich auch die Seriennummern an den Geräten mit dem Internal "UDN" vergleichen...

Grüße
Reiner

peter0255

Hi Reiner,

Du hast recht, es waren aus irgend einem Grund die beiden Adressen vertauscht. Ich habe in der cfg die Namen getauscht, jetzt passt es.
Vielen Dank für Deine tolle Unterstützung.

Gruß
Peter

Avatar

Hallo Reinerlein

Besteht die Möglichkeit einem Dummy die Favoriten zum Bsp der Radiosender (Im Sonos unter "Meine Radiosender" zu finden - gelten für alle Sonos Räume)  diese dem Dummy als drop-down liste (SetList) zuzuordnen, wie würde dies gehen?

define SonosRadiosFavoriten dummy
attr SonosRadiosFavoriten setList state: ........ -> hier die gewünschte liest der Radiosender aus dem Sonos - "Meine Radiosender"
attr SonosRadiosFavoriten webCmd state

um eine Unterstützung wäre ich dankbar.

Eric

Reinerlein

Hi Eric,

am Besten ist ein Notify auf einem Player deiner Wahl der auf "LastActionResult" lauscht und reagiert, wenn dort "GetRadios:" am Anfang steht.
Dort machst du einfach ein "set Attr" auf deinem Dummy.

Also sowas in der Art:

define radioDummy_Notify notify Sonos_Wohnzimmer:LastActionResult.*GetRadios: { if ('%' =~ m/GetRadios: (.*)/i) { CommandAttr(undef, 'radioDummy setList '.$1) } }
Alles ungetestet, nur aus dem Kopf geschrieben...

Grüße
Reinerlein

Avatar

Hallo Reinerlein

Vielen Dank, das hat sehr geholfen.

Habs jetzt so:
Sonos_Wohnzimmer:LastActionResult.*?GetRadios.* { if ('%' =~ m/GetRadios: (.*)/i) { CommandAttr(undef, 'radioDummy setList '.$1) } }

Damit wird die setList gefüllt. Mein Problem ist, dass ich das dummy "radioDummy" die Elemente in der Liste mit "space" vorhanden sind und so nicht richtig als Dropdown dargestellt werden. 

bsp: der setList eintrages:
"Energy Zürich 100.9 (Euro-Hits)","Juventus Radio","Kanal K 92.2 (Gemischtes/Vielfalt)"

Das Dummy zeigt es nicht korrekt als DropDown an, oder mache ich da was noch falsch?

Grüsse
Eric

Reinerlein

Hi Eric,

ja, Leerzeichen sind oft ein Problem :)

Du könntest die Zeile so anpassen:

Sonos_Wohnzimmer:LastActionResult.*?GetRadios.* { if ('%' =~ m/GetRadios: (.*)/i) { CommandAttr(undef, 'radioDummy setList '.uri_escape($1)) } }
Damit würde ein anschließender Aufruf an den Player schonmal passen :) Dort müssen die Leerzeichen nämlich auch weg...

Ob dann in der Auswahl komische %-Zahlen stehen weiß ich jetzt auch nicht, dass musst du probieren...

Grüße
Reinerlein

Reinerlein

Hi Eric,

ich habe das mal gerade nachgebaut.

Es muss doch mehr hin:

Sonos_Wohnzimmer:LastActionResult.*?GetRadios.* { if ('%' =~ m/GetRadios: (.*)/i) { my @@list = split(',', $1); @@list = map uri_escape(substr($_,1,-1)), @@list; CommandAttr(undef, 'radioDummy setList '.join(' ', @@list)) } }

Aber Leerzeichen in der setList gehen nicht. Und hiermit werden statt Leerzeichen dann die "%20" angezeigt (so wie die anderen Sonderzeichen auch)...

Das wird im Resultat nicht schön.
Ich würde dir eher eine Readingsgroup empfehlen.

Eine einfache Variante geht out-of-the-box pro Player:

define Sonos_Wohnzimmer_radioReadingsGroup readingsGroup Sonos_Wohnzimmer:<{SONOS_getListRG($DEVICE,"Radios",1)}@Radios>

Dazu gibt es aber auch eine Beschreibung im Wiki...

Grüße
Reinerlein

Spartacus

Hallo,
seit heute verstehe ich die Welt nicht mehr!
Kann mir mal jemand sagen, warum seit heute dieser Code nicht mehr läuft?
define SonosInit notify .*ZP.*:presence:.appeared  \
define Init_$NAME_Later at +00:02:00 \
{\
  my $reading =(ReadingsVal ("$NAME","playerType",""));;;;;;;;\
  if (($reading eq ("S1")) || ($reading eq ("S3")) || ($reading eq ("ZP120")))\
  {\
   if (ReadingsVal ("$NAME","currentTrackURI","") eq "")\
    {\
     SON_Init('$NAME', $reading)\
    }\
  }\
}
attr SonosInit disable 0
attr SonosInit group Sonos System
attr SonosInit room 98-Sonos
attr SonosInit sortby 1


Die INIT-Devices werden einfach nicht mehr angelegt! Irgendwie kann $NAME nicht mehr aufgelöst werden! Bis gestern ging das aber!
im Logfile sieht das so aus:
2015.02.02 20:54:32 5: Cmd: >attr KG.sk.SON.ZP_S3 room 98-Sonos<
2015.02.02 20:54:32 5: Cmd: >define SonosInit notify .*ZP.*:presence:.appeared 
define Init_$NAME_Later at +00:02:00
{
  my $reading =(ReadingsVal ("$NAME","playerType",""));;;;
  if (($reading eq ("S1")) || ($reading eq ("S3")) || ($reading eq ("ZP120")))
  {
   if (ReadingsVal ("$NAME","currentTrackURI","") eq "")
    {
     SON_Init('$NAME', $reading)
    }
  }
}<
2015.02.02 20:54:32 5: Cmd: >attr SonosInit disable 0<
2015.02.02 20:54:32 5: Cmd: >attr SonosInit group Sonos System<
2015.02.02 20:54:32 5: Cmd: >attr SonosInit room 98-Sonos<


liegt das am fhem Update von heute?
Christian
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R