Sonos steuern

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

Vorheriges Thema - Nächstes Thema

Reinerlein

Hi Christian,

soo, ich hätte da mal einen weiteren Versuch. Könntest du nochmal einen kurzen Test durchführen?

Danke schon mal...

Grüße
Reiner

chregu

Ja, scheint zu funktionieren, hab jetzt

Sonos_Living_Room_RF, Sonos_Living_Room_LF, Sonos_Living_Room_SW

generiert gekriegt. Vielen Dank.

Reinerlein

Hi Christian,

leider noch nicht ganz. Du dürftest jetzt kein AlbumArt-Element haben.
Einer der Komponenten sollte als sogenannter "Master" angelegt werden.
Dieser erhält den normalen Raumnamen als Komponentennamen und zu diesem wird auch der AlbumArt-Eintrag angelegt. Damit soll bereits bei der Namensvergabe klar sein, welches der "wichtige" Player ist...

Ich habe mal wieder eine Änderung gemacht... Sorry, aber ich hoffe, das es das bald war...

Grüße
Reiner

chregu

Leider immer noch dieselbe Antwort. Was mit aufgefallen ist, ich hab folgendes XML, wenn ich mehrere Zonnen zu einer Gruppe zusammenfasse:



<ZoneGroups>
    <ZoneGroup Coordinator="RINCON_000E5868517601400" ID="RINCON_000E5868517601400:0">
        <ZoneGroupMember UUID="RINCON_000E5868517601400" Location="http://192.168.1.34:1400/xml/device_description.xml" ZoneName="BRIDGE" Icon="x-rincon-roomicon:viper" Configuration="1" Invisible="1" IsZoneBridge="1" SoftwareVersion="24.0-69180" MinCompatibleVersion="22.0-00000" BootSeq="9"/>
    </ZoneGroup>
    <ZoneGroup Coordinator="RINCON_000E582B613C01400" ID="RINCON_000E582B613C01400:147">
        <ZoneGroupMember UUID="RINCON_000E5899F9CE01400" Location="http://192.168.1.40:1400/xml/device_description.xml" ZoneName="Living Room" Icon="x-rincon-roomicon:living" Configuration="1" Invisible="1" SoftwareVersion="24.0-71060" MinCompatibleVersion="22.0-00000" ChannelMapSet="RINCON_000E585B03CC01400:LF,LF;RINCON_000E5889C19001400:RF,RF;RINCON_000E5899F9CE01400:SW,SW" BootSeq="40"/>
        <ZoneGroupMember UUID="RINCON_000E585B03CC01400" Location="http://192.168.1.37:1400/xml/device_description.xml" ZoneName="Living Room" Icon="x-rincon-roomicon:living" Configuration="1" SoftwareVersion="24.0-71060" MinCompatibleVersion="22.0-00000" ChannelMapSet="RINCON_000E585B03CC01400:LF,LF;RINCON_000E5889C19001400:RF,RF;RINCON_000E5899F9CE01400:SW,SW" BootSeq="43"/>
        <ZoneGroupMember UUID="RINCON_000E582B613C01400" Location="http://192.168.1.38:1400/xml/device_description.xml" ZoneName="Bedroom" Icon="x-rincon-roomicon:bedroom" Configuration="1" SoftwareVersion="24.0-71060" MinCompatibleVersion="22.0-00000" BootSeq="8"/>
        <ZoneGroupMember UUID="RINCON_000E58C9D7E201400" Location="http://192.168.1.39:1400/xml/device_description.xml" ZoneName="Bathroom" Icon="x-rincon-roomicon:bathroom" Configuration="1" SoftwareVersion="24.0-71060" MinCompatibleVersion="22.0-00000" BootSeq="10"/>
        <ZoneGroupMember UUID="RINCON_000E5889C19001400" Location="http://192.168.1.35:1400/xml/device_description.xml" ZoneName="Living Room" Icon="x-rincon-roomicon:living" Configuration="1" Invisible="1" SoftwareVersion="24.0-71060" MinCompatibleVersion="22.0-00000" ChannelMapSet="RINCON_000E585B03CC01400:LF,LF;RINCON_000E5889C19001400:RF,RF;RINCON_000E5899F9CE01400:SW,SW" BootSeq="35"/>
    </ZoneGroup>
</ZoneGroups>


Der Coordinator ist da aus ner anderen Zone, drum matcht der wohl nicht.

Aber auch wenn ich die Zonen trenne und alles nochmals starte, will er nicht, das XML sieht dann so aus



<ZoneGroups>
    <ZoneGroup Coordinator="RINCON_000E585B03CC01400" ID="RINCON_000E582B613C01400:147">
        <ZoneGroupMember UUID="RINCON_000E5899F9CE01400" Location="http://192.168.1.40:1400/xml/device_description.xml" ZoneName="Living Room" Icon="x-rincon-roomicon:living" Configuration="1" Invisible="1" SoftwareVersion="24.0-71060" MinCompatibleVersion="22.0-00000" ChannelMapSet="RINCON_000E585B03CC01400:LF,LF;RINCON_000E5889C19001400:RF,RF;RINCON_000E5899F9CE01400:SW,SW" BootSeq="40"/>
        <ZoneGroupMember UUID="RINCON_000E585B03CC01400" Location="http://192.168.1.37:1400/xml/device_description.xml" ZoneName="Living Room" Icon="x-rincon-roomicon:living" Configuration="1" SoftwareVersion="24.0-71060" MinCompatibleVersion="22.0-00000" ChannelMapSet="RINCON_000E585B03CC01400:LF,LF;RINCON_000E5889C19001400:RF,RF;RINCON_000E5899F9CE01400:SW,SW" BootSeq="43"/>
        <ZoneGroupMember UUID="RINCON_000E5889C19001400" Location="http://192.168.1.35:1400/xml/device_description.xml" ZoneName="Living Room" Icon="x-rincon-roomicon:living" Configuration="1" Invisible="1" SoftwareVersion="24.0-71060" MinCompatibleVersion="22.0-00000" ChannelMapSet="RINCON_000E585B03CC01400:LF,LF;RINCON_000E5889C19001400:RF,RF;RINCON_000E5899F9CE01400:SW,SW" BootSeq="35"/>
    </ZoneGroup>
    <ZoneGroup Coordinator="RINCON_000E582B613C01400" ID="RINCON_000E582B613C01400:148">
        <ZoneGroupMember UUID="RINCON_000E582B613C01400" Location="http://192.168.1.38:1400/xml/device_description.xml" ZoneName="Bedroom" Icon="x-rincon-roomicon:bedroom" Configuration="1" SoftwareVersion="24.0-71060" MinCompatibleVersion="22.0-00000" BootSeq="8"/>
    </ZoneGroup>
    <ZoneGroup Coordinator="RINCON_000E58C9D7E201400" ID="RINCON_000E58C9D7E201400:149">
        <ZoneGroupMember UUID="RINCON_000E58C9D7E201400" Location="http://192.168.1.39:1400/xml/device_description.xml" ZoneName="Bathroom" Icon="x-rincon-roomicon:bathroom" Configuration="1" SoftwareVersion="24.0-71060" MinCompatibleVersion="22.0-00000" BootSeq="10"/>
    </ZoneGroup>
    <ZoneGroup Coordinator="RINCON_000E5868517601400" ID="RINCON_000E5868517601400:0">
        <ZoneGroupMember UUID="RINCON_000E5868517601400" Location="http://192.168.1.34:1400/xml/device_description.xml" ZoneName="BRIDGE" Icon="x-rincon-roomicon:viper" Configuration="1" Invisible="1" IsZoneBridge="1" SoftwareVersion="24.0-69180" MinCompatibleVersion="22.0-00000" BootSeq="9"/>
    </ZoneGroup>
</ZoneGroups>


Was mir auffällt, ist dass die beiden Player, die nicht coordinator sind, das attribute  Invisible="1" haben, evt. hilft das weiter beim Parsen.

Gruss

christian

Reinerlein

Hi Christian,

das mit dem Invisible war auch meine erste Überlegung gewesen, und wenn ich mir die Problematik mit den Gruppierten Gruppenplayern ansehe, ist das wohl auch die einzig Gangbare Lösung.
Ich habe die Erkennung des "Masters" nun auf das fehlende Invisible-Flag umgebaut (Ich musste da noch eine Sonderlocke für die ZoneBridge einbauen, die auch Invisible ist :-).

Könntest du nochmal?

Grüße
Reiner

chregu

Cool, jetzt hat's geklappt. Vielen Dank.

Reinerlein

Hi Christian,

super, dann haben wir das schon mal vom Tisch. Jetzt fehlt nur noch das Surround-System.
Da das aber analog programmiert ist, sollte das nun auch laufen...

@Dani: Kannst du das denn noch kurz testen?
Dann können wir das vielleicht bald releasen...

Danke schon mal...
Grüße
Reiner

eppi

Hallo Reiner
Zitat@Dani: Kannst du das denn noch kurz testen?
Dann können wir das vielleicht bald releasen...
Gerne, klar  ;)
Mein Naming sieht nach dem Update wie folgt aus:
list Sonos_.*
Sonos_Bad
Sonos_Kueche
Sonos_Wohnzimmer
Sonos_Wohnzimmer_LR
Sonos_Wohnzimmer_RR
Sonos_Wohnzimmer_SW


Und mein Server hat folgendes Reading:
list Sonos
Internals:
   CFGFN      /opt/fhem/FHEM/fhem_music.cfg
   DEF        localhost:4711 30
   DeviceName localhost:4711
   FD         62
   INTERVAL   30
   NAME       Sonos
   NR         584
   PARTIAL   
   STATE      opened
   TYPE       SONOS
   Readings:
     2013-12-31 16:40:51   ZoneGroupState  <ZoneGroups><ZoneGroup Coordinator="RINCON_000E58BA006601400" ID="RINCON_000E58BA006601400:49"><ZoneGroupMember UUID="RINCON_000E58BA006601400" Location="http://192.168.2.65:1400/xml/device_description.xml" ZoneName="Wohnzimmer" Icon="x-rincon-roomicon:living" Configuration="1" SoftwareVersion="24.0-71060" MinCompatibleVersion="22.0-00000" HTSatChanMapSet="RINCON_000E58BA006601400:LF,RF;RINCON_000E58C4C97401400:RR;RINCON_000E58C5408201400:LR;RINCON_000E589ABC9A01400:SW" BootSeq="8"><Satellite UUID="RINCON_000E589ABC9A01400" Location="http://192.168.2.45:1400/xml/device_description.xml" ZoneName="Wohnzimmer" Icon="x-rincon-roomicon:living" Configuration="1" Invisible="1" SoftwareVersion="24.0-71060" MinCompatibleVersion="22.0-00000" HTSatChanMapSet="RINCON_000E58BA006601400:LF,RF;RINCON_000E589ABC9A01400:SW" BootSeq="4"/><Satellite UUID="RINCON_000E58C4C97401400" Location="http://192.168.2.51:1400/xml/device_description.xml" ZoneName="Wohnzimmer" Icon="x-rincon-roomicon:living" Configuration="1" Invisible="1" SoftwareVersion="24.0-71060" MinCompatibleVersion="22.0-00000" HTSatChanMapSet="RINCON_000E58BA006601400:LF,RF;RINCON_000E58C4C97401400:RR" BootSeq="6"/><Satellite UUID="RINCON_000E58C5408201400" Location="http://192.168.2.38:1400/xml/device_description.xml" ZoneName="Wohnzimmer" Icon="x-rincon-roomicon:living" Configuration="1" Invisible="1" SoftwareVersion="24.0-71060" MinCompatibleVersion="22.0-00000" HTSatChanMapSet="RINCON_000E58BA006601400:LF,RF;RINCON_000E58C5408201400:LR" BootSeq="4"/></ZoneGroupMember></ZoneGroup><ZoneGroup Coordinator="RINCON_000E58C4F08801400" ID="RINCON_000E58C4F08801400:206"><ZoneGroupMember UUID="RINCON_000E58C4F08801400" Location="http://192.168.2.64:1400/xml/device_description.xml" ZoneName="Bad" Icon="x-rincon-roomicon:bathroom" Configuration="1" SoftwareVersion="24.0-71060" MinCompatibleVersion="22.0-00000" BootSeq="7"/></ZoneGroup><ZoneGroup Coordinator="RINCON_000E58F3272E01400" ID="RINCON_000E58F3272E01400:49"><ZoneGroupMember UUID="RINCON_000E58F3272E01400" Location="http://192.168.2.46:1400/xml/device_description.xml" ZoneName="Küche" Icon="x-rincon-roomicon:kitchen" Configuration="1" SoftwareVersion="24.0-71060" MinCompatibleVersion="22.0-00000" BootSeq="4"/></ZoneGroup></ZoneGroups>
Attributes:
   pingType   syn
   room       Sonos

Aus meiner Sicht ist nun alles optimal und funktioniert perfekt! Nochmals herzlichen Dank an dieser Stelle für deine Arbeit, great Job!! :D
Gruss Dani

chregu

Hallo Rainer

Hier noch ein anderer Error, den ich öfters kriege. Ich schalte den Strom meiner Sonos Geräte aus, wenn ich weggehe und wieder an, wenn ich zurückkomme. Da passiert öfters, dass ich ein

Thread 1 terminated abnormally: multiple roots, wrong element 'dataType'

habe (Unterschiedliche Errormeldungen, aber klingt immer noch XML errors)

Ich nehm an, die kommen vom package UPnP::Common::Parser in FHEM/lib/UPnP/Common.pm und dem package UPnP::Common::Parser dort, resp. eigentlich dem XML::Parser::Lite package, der die'd, wenn das XML invalid ist und das UPnP package fängt das nicht ab. Ich hab auf die schnelle keine Ahnung, ob man das von "ausserhalb", also von deinem Code aus irgendwie abfangen kann, laut http://perl-xml.sourceforge.net/faq/#error_handling müsste man das mit einem eval machen. Aber eben, bei all den Callbacks bin ich grad überfordert.

Lass dir dadurch nicht den Release vermiesen, ich kann für den Moment damit leben, aber falls du ne Idee hast, wo ich genauer hingucken müsste, kann ich mich auch mal dahinter setzen

Gruss

Christian

Reinerlein

Hallo zusammen,

tataa...
Das Weihnachtsrelease, wenigstens noch in diesem Jahr :-)

Wie immer hier der Changelog dazu (Version 2.4):

  • Initiale Lautstärkenermittlung wurde nun abgesichert, falls die Anfrage beim Player fehlschlägt
  • Verbesserte Gruppenerkennung für die Anzeige der Informationen wie Titel usw.
  • Fallback (Log) für den Aufruf von Log3 geschaffen, damit auch alte FHEM-Versionen funktionieren
  • Es wurde eine Korrektur im verwendetetn UPnP-Modul gemacht, die eine bessere Verarbeitung der eingehenden Datagramme gewährleistet (dafür Danke an Sacha)
  • Es werden nun zusätzliche Readings (beginnend mit 'next') mit den Informationen über den nächsten Titel befüllt. Diese können natürlich auch für InfoSummarize verwendet werden
  • Es kann nun ein Eintrag aus der Sonos-Favoritenliste gestartet werden (Playlist oder Direkteintrag)
  • Das Benennen der Sonos-Fhem-Devices wird nun auf Namensdoppelungen hin überprüft, und der Name eindeutig gemacht. Dabei wird im Normalfall das neue Reading 'fieldType' an den Namen angehangen. Nur der Master einer solchen Paarung bekommt dann den Original-Raumnamen als Fhem-Devicenamen
  • Es gibt ein neues Reading 'fieldType', mit dem man erkennen kann, an welcher Position in einer Paarung dieser Zoneplayer steht
  • Diverse Probleme mit Gruppen und Paarungen beim neu Erkennen der Sonos-Landschaft wurden beseitigt
  • Es gibt jetzt einen Getter 'EthernetPortStatus', der den Status des gewünschten Ethernet-Ports liefert
  • Es gibt jetzt einen Setter 'Reboot', der einen Neustart des Zoneplayers durchführt
  • Es gibt jetzt einen Setter 'Wifi', mit dem der Zustand des Wifi-Ports eines Zoneplayers gesetzt werden kann
  • Wenn ein Player als "Disappeared" erkannt wird, wird dem Sonos-System dies mitgeteilt, sodass er aus allen Listen und Controllern verschwindet
  • Kleinere Korrektur, die eine bessere Verarbeitung der Kommunikation zwischen Fhem und dem Subprozess bewirkt
Viel passiert, lange hat's gedauert... trotzdem noch dieses Jahr geschafft :-)

Sehr interessant dürften zum einen die Namensgebung bei Surround- und Paarsystemen, und zum anderen die Geschichte mit der "Disappeared"-Erkennung sein.
Ich habe eine Möglichkeit gefunden, wie ich dem Sonos-System mitteilen kann, das ein Player weg ist (das bedingt aber, das mindestens ein Player oder eine Bridge übrig ist, u.U. darf auch nur ein Player auf einmal verschwinden, dass müsste noch getestet werden). Danach sollte der Player aus den Zonenlisten der Controller verschwinden...

Ach ja, Installation wie immer:

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


Viel Spaß damit, guten Rutsch ins neue Jahr und alles gute...
Reiner

FHEM-Freak

Reiner dir auch alles Gute im neuen Jahr und natürlich allen Fhem begeisterten.
Danke für deine tolle Arbeit.
Update hat funktioniert und läuft.
Banana Pi
HMLAN
3 x HM-CC-TC + HM-CC-VC
1 x HM-PB-2-WM55, 1 x HM-WDS10-TH-O
1 x HM-WDS30-T-O, 1 x HM-WDS40-TH-I

det.

Hallo Reiner
Danke für Deine super Arbeit und viel Erfolg im Jahr 2014! Update läuft und SONOS macht was es soll.
LG
det.

Will

Wahnsinn was aus dem thread geworden ist - alle Erwartungen übergriffen. Für mich DAS knüllermodul in fhem. Wertet die Sonos installation noch einmal auf.
Ein großes danke an reiner und alle die hier aktiv mitarbeiten. Bei mir läuft das Modul schon seit längerem unauffällig. Grüße W

Sent from my Nexus 7 using Tapatalk


Will

Hallo reiner, da du dich jetzt intensivst mit dem sonos Protokoll beschäftigt hast: denkst du es ist möglich mit einem rpi ein sonos zu emulieren? Ich nutze dein Modul für durchsagen (funktioniert prima) , will jetzt aber nicht für Überfall einen sonos player kaufen wenn es nur um durchsagen geht- einen raspi mit aktivlautsprecher  schon eher. Denkbar?

Danke.

Sent from my Nexus 7 using Tapatalk


Reinerlein

Hi Will,

ich hatte am Anfang auch mal diesen Gedanken, dass es cool wäre, sowas zu haben. Aber Abseits der UPnP-Steuerung zu den Controllern (und Fhem :-) kommunizieren die Player auf irgendeine, mir unbekannte, Art und Weise auch miteinander. Da wird abgestimmt, koordiniert und gesteuert...

Vielleicht könnte man noch eine Schnittstelle bauen, die sich dann in einem Controller als Player melden könnte. Aber ob das dann auch zusammen mit den anderen Playern laufen würde, weiss ich auch nicht...

Das wird von meiner Seite aus eher nix, da der Aufwand doch sehr hoch sein dürfte...
Aber für deine Anwendung gäbe es ja auch noch andere Lösungen, das wäre dann nur nicht von den Sonos-Controllern aus steuerbar...

Grüße
Reiner