Sonos steuern

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

Vorheriges Thema - Nächstes Thema

chregu

Hallo zusammen

Ich schein ein neues Problem zu haben. Der SONOS Perl prozess hängt sich nach kurzer Zeit auf (erzeugt 100% CPU lasst). Ich hab mal alle definitionen gelöscht, fhem neu gestartet und dann sonos neu definiert

folgendes krieg ich dann im log


2013.12.30 08:42:04 1: SONOS0: 00_SONOS.pm is listening to Port 4711
@2013.12.30 08:43:38 1: SONOS0: Connection accepted from localhost:48050
2013.12.30 08:43:38 3: SONOS0: Received: 'disconnect'
2013.12.30 08:43:38 3: SONOS0: Disconnecting client...
2013.12.30 08:43:40 1: SONOS0: Connection accepted from localhost:48051
2013.12.30 08:43:41 3: SONOS0: Received: 'SetData:Sonos:none::'
2013.12.30 08:43:41 3: SONOS0: Received: 'StartThread'
2013.12.30 08:43:41 3: SONOS1: UPnP-Thread gestartet.
2013.12.30 08:43:42 1: SONOS2: Restore-Thread gestartet. Warte auf Arbeit...


2013.12.30 08:45:16 4: SONOS1: Discover-Event: Description-Document: <?xml version="1.0" encoding="utf-8" ?>
<root xmlns="urn:schemas-upnp-org:device-1-0">
  <specVersion>
    <major>1</major>
    <minor>0</minor>
  </specVersion>
  <device>
    <deviceType>urn:schemas-upnp-org:device:ZonePlayer:1</deviceType>
    <friendlyName>192.168.1.34 - Sonos BRIDGE</friendlyName>
    <manufacturer>Sonos, Inc.</manufacturer>
    <manufacturerURL>http://www.sonos.com</manufacturerURL>
    <modelNumber>ZB100</modelNumber>
    <modelDescription>Sonos BRIDGE</modelDescription>
    <modelName>Sonos ZoneBridge ZB100</modelName>
    <modelURL>http://www.sonos.com/store/products/BRIDGE</modelURL>
    <softwareVersion>24.0-69180</softwareVersion>
    <hardwareVersion>1.5.0.0-2</hardwareVersion>
    <serialNum>00-0E-58-68-51-76:0</serialNum>
    <UDN>uuid:RINCON_000E5868517601400</UDN>
    <iconList>
      <icon>
        <id>0</id>
        <mimetype>image/png</mimetype>
        <width>48</width>
        <height>48</height>
        <depth>24</depth>
        <url>/img/icon-ZB100.png</url>
      </icon>
    </iconList>
    <minCompatibleVersion>22.0-00000</minCompatibleVersion>
    <displayVersion>4.2</displayVersion>
    <extraVersion></extraVersion>
    <roomName>BRIDGE</roomName>
    <displayName>BRIDGE</displayName>
    <zoneType>4</zoneType>
    <feature1>0x00000000</feature1>
    <feature2>0x00008173</feature2>
    <feature3>0x00030000</feature3>
    <internalSpeakerSize>-1</internalSpeakerSize>
    <serviceList>
      <service>
        <serviceType>urn:schemas-upnp-org:service:DeviceProperties:1</serviceType>
        <serviceId>urn:upnp-org:serviceId:DeviceProperties</serviceId>
        <controlURL>/DeviceProperties/Control</controlURL>
        <eventSubURL>/DeviceProperties/Event</eventSubURL>
        <SCPDURL>/xml/DeviceProperties1.xml</SCPDURL>
      </service>   
      <service>
        <serviceType>urn:schemas-upnp-org:service:SystemProperties:1</serviceType>
        <serviceId>urn:upnp-org:serviceId:SystemProperties</serviceId>
        <controlURL>/SystemProperties/Control</controlURL>
        <eventSubURL>/SystemProperties/Event</eventSubURL>
        <SCPDURL>/xml/SystemProperties1.xml</SCPDURL>
      </service>   
      <service>
        <serviceType>urn:schemas-upnp-org:service:ZoneGroupTopology:1</serviceType>
        <serviceId>urn:upnp-org:serviceId:ZoneGroupTopology</serviceId>
        <controlURL>/ZoneGroupTopology/Control</controlURL>
        <eventSubURL>/ZoneGroupTopology/Event</eventSubURL>
        <SCPDURL>/xml/ZoneGroupTopology1.xml</SCPDURL>
      </service>   
      <service>
        <serviceType>urn:schemas-upnp-org:service:GroupManagement:1</serviceType>
        <serviceId>urn:upnp-org:serviceId:GroupManagement</serviceId>
        <controlURL>/GroupManagement/Control</controlURL>
        <eventSubURL>/GroupManagement/Event</eventSubURL>
        <SCPDURL>/xml/GroupManagement1.xml</SCPDURL>
      </service>
    </serviceList>
    <deviceList>
    </deviceList>
  </device>
</root>

2013.12.30 08:45:16 4: SONOS1: RoomName: 'BRIDGE', SaveRoomName: 'BRIDGE', ModelNumber: 'ZB100', DisplayVersion: '4.2', SerialNum: '00-0E-58-68-51-76:0', IconURI: '/img/icon-ZB100.png', IconOrigPath: 'http://192.168.1.34:1400/img/icon-ZB100.png', IconPath: 'icoSONOSPLAYER_icon-ZB100.png'
2013.12.30 08:45:16 2: SONOS1: Discover Sonosplayer 'BRIDGE' (ZB100) Software Revision 4.2 with ID 'RINCON_000E5868517601400_MR'
2013.12.30 08:45:19 4: SONOS1: ControlProxies wurden gesichert
2013.12.30 08:45:19 1: SONOS1: ZoneGroupState: <ZoneGroups><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="35"/><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="38"/><ZoneGroupMember UUID="RINCON_000E5889C19001400" Location="http://192.168.1.36: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="33"/><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"/></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>


und dann ist die CPU bei 100%. Ich hatte das schon immer ab und zu, aber ein neustart hat dann meistens geholfen. Jetzt scheint's immer sehr schnell auf 100% zu gehen.

Wenn mir jemand sagen kann, wie ich sowas am besten debugge, kann ich auch noch bessere/nähere Informationen liefern (ich hab einiges Erfahrung in Programmierung, weniger in Perl-Debugging, resp. ist schon lange her ;))

Gruss

chregu

Er scheint sich hier aufzuhängen


if ($SONOS_ZoneGroupTopologyProxy{$udn}) {
my $zoneGroupState = $SONOS_ZoneGroupTopologyProxy{$udn}->GetZoneGroupState()->getValue('ZoneGroupState');
SONOS_Log undef, 1, 'ZoneGroupState: '.$zoneGroupState;

# Ist dieser Player in einem ChannelMapSet (also einer Paarung) enthalten?
while ($zoneGroupState =~ m/ChannelMapSet="(.*?)"/i) {

my $mapSet = $1;
if ($mapSet =~ m/$udnShort/i) {
...
# Wenn wir einen Eintrag gefunden haben, dann können wir beenden. Die anderen sollten identische Informationen enthalten.
last;
}
}


$mapSet matched nicht auf $udnShort und drum endet das in einer endlos schlaufe.

Fehlt bei dem while evt. einfach ein /g beim Regex, damit er da wirklich auch durch alle Resultate durchschlauft? Jedenfalls läuft's mit einem g bei mir durch jetzt gerade, ich beobachte das noch ein bisschen

$zoneGroupState sieht so aus in einem Versuch



<ZoneGroups>
    <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="35"/>
        <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="38"/>
        <ZoneGroupMember UUID="RINCON_000E5889C19001400" Location="http://192.168.1.36: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="33"/>
        <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"/>
    </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>



Reinerlein

Hi Christian,

das ist richtig, und zeigt mir, dass man nicht mehr Nachts an solchen Ausdrücken arbeiten sollte :-)
Ich habe das bei mir nun auch eingesetzt.

Läuft das denn jetzt mit der Anpassung sauber durch?
Werden jetzt alle Namen korrekt ermittelt?

Dann wäre das Thema mal durch...

Grüße
Reiner

chregu

Ich hatte heute Living_Room Living_Room_X und Living_Room_X_X als Namen. Es lief aber grundsätzlich durch. Ich teste später nochmals genauer.

Reinerlein

Hi Christian,

das bedeutet, dass die Surround-Suche immer noch nicht klappt.

Die Sache mit den "_X"-Erweiterungen habe ich als Sicherheits-Fallback dringelassen. Damit auf jeden Fall alle Komponenten in Fhem angelegt werden.
Eigentlich sollten aber vorher schönere Namen erzeugt werden...

Ich schaue da noch mal rein... das muss ja zu finden sein...

Grüße
Reiner

chregu

ich hab sie dann einfach von Hand umbenannt ;) jedenfalls gute Idee mit dem Fallback.

bapou

Hallo Reiner,

vor einiger Zeit hatte ich einmal ein Weckzeit Feature angefragt. Dieses hast du dann schnell implementiert aber ich hatte mich lange nicht mehr
um FHEM und SONOS gekuemmert. Nun in der Weihnachtszeit habe ich es eingebaut und verwende nun die Weckzeitauslesung aus SONOS um erfolgreich um damit eine Weckbeleuchtung + Heizungsteuerung auszuloesen. Es funktioniert sehr gut!
Herzlichen Dank für deine Arbeit.

Gruss,
Thom

herman

Zitat von: Reinerlein am 25 Dezember 2013, 19:13:34

Gehen wir doch mal Schrittweise durch:
Du versuchst ja Gruppen zu bilden, bzw. aufzulösen. Bitte stell doch im ersten Schritt sicher, dass alle Player von Fhem erkannt und angelegt wurden.
Danach kannst du bitte mal ein "get Sonos Groups" ausführen. Da solltest du deine Sonos-Player in ihren Gruppen angezeigt bekommen.
Desweiteren sollte am Sonos-Device das Reading "ZoneGroupState" gefüllt sein, das sollte aber der Fall sein, wenn die Ausgabe von "get Sonos Groups" erfolgreich war...

Außerdem solltest du auf jeden Fall sicherstellen, dass du wirklich nur ein Sonos-Device konfiguriert hast. Sonst dürfte da auch einiges schief gehen...

Und du solltest dem ganzen nach einem Neustart etwas Zeit geben, die Player zu erkennen und zu aktualisieren. Das kann schon mal 30 Sekunden dauern (ja nach Maschine auch länger, oder natürlich auch kürzer :-).

Klappt das denn schon mal?


Hallo Reiner,

prinzipiell funktioniert alles wenn ich FHEM neu starte und ein paar Minuten warte. Ich verlasse dann das Haus und starte ein Skript das alle Steckdosen ausschaltet. Abends funktioniert das selbe Skript (einschalten der Steckdosen und mit at-Befehl nach 5 Minuten Ansteuern der Sonoskomponenten) nicht. Ich muss FHEM neu starten, manchmal sogar den SUB-Sonos-Prozess killen und dann FHEM neu starten.
Das Problem ist nicht deterministisch. Ich kann das "weggehen" und "sonos starten" Skript mehrfach hintereinander starten, so dass es funktioniert.

Gibt es eine Möglichkeit die Ausgabe des Sub-Prozesses zu loggen, so dass Fehlermeldungen nachvollzogen werden können?

Viele Grüße,
Merhan

Reinerlein

Hallo Merhan,

der Subprozess gibt mit dem Fhem-Loglevel seine Ausgaben direkt auf der Konsole aus. Das bedeutet, dass du die Ausgabe in eine Datei umlenken kannst...

Wenn du alles sehen möchtest, musst du den Loglevel auf 5 hochdrehen...

Grüße
Reiner

Reinerlein

Hallo Christian,

da müsste es während des Erkennungsprozesses eine Log-Ausgabe mit "Found HTSatChanMapSet:" geben. Kannst du mir diese ganzen Ausgaben mal zukommen lassen?

Ich muss diesem kleinen Fehler im regulären Ausdruck auf Spur kommen...

Danke schon mal...

Grüße
Reiner

P.S.: Thom, schön dass es bei dir funktioniert :-)

chregu

Hallo Reiner

Ich hab leider noch gar kein Playbar, "nur" eine Zone mit 2xPlay:5 und 1x Sub (neben 2 anderen einfacheren Zonen), drum kann ich dir da leider nicht weiterhelfen.

Reinerlein

Hi Christian,

ok, dann hast du doch eine analoge Ausgabe mit "Found ChannelMapSet:" .
Das Problem mit der Benennung ist das gleiche, da der reguläre Ausdruck genauso aufgebaut ist.

Kannst du mir dazu die Ausgabe zusenden?

Grüße
Reiner

chregu

Hallo Reiner

Hier die entsprechenden Stellen aus meinem Log (hab nochmals alle SONOS Einträge gelöscht und neu generieren lassen):


console.log:2013.12.31 09:32:29 1: SONOS1: Found ChannelMapSet: RINCON_000E585B03CC01400:LF,LF;RINCON_000E5889C19001400:RF,RF;RINCON_000E5899F9CE01400:SW,SW
console.log-2013.12.31 09:32:29 1: SONOS1: Retrieved TopoType: _SW
console.log-2013.12.31 09:32:29 4: SONOS1: Retrieve Current Volumelevels. Master: "5", Balance: "0"
console.log-2013.12.31 09:32:29 1: SONOS1: Successfully autocreated SonosPlayer 'Living_Room' (Sub) Software Revision 4.2 with ID 'RINCON_000E5899F9CE01400_MR'
console.log-2013.12.31 09:32:29 2: SONOS1: SonosPlayer 'Living_Room' is now updated

console.log:2013.12.31 09:32:58 1: SONOS1: Found ChannelMapSet: RINCON_000E585B03CC01400:LF,LF;RINCON_000E5889C19001400:RF,RF;RINCON_000E5899F9CE01400:SW,SW
console.log-2013.12.31 09:32:58 1: SONOS1: Retrieved TopoType: _RF
console.log-2013.12.31 09:32:58 4: SONOS1: Retrieve Current Volumelevels. Master: "5", Balance: "0"
console.log-2013.12.31 09:32:58 2: SONOS1: New Fhem-Name neccessary for 'Living Room' -> 'Sonos_Living_Room_X', ID 'RINCON_000E5889C19001400_MR'
console.log-2013.12.31 09:32:58 1: SONOS1: Successfully autocreated SonosPlayer 'Living_Room_X' (S5) Software Revision 4.2 with ID 'RINCON_000E5889C19001400_MR'
console.log-2013.12.31 09:32:58 2: SONOS1: SonosPlayer 'Living_Room_X' is now updated

console.log:2013.12.31 09:33:20 1: SONOS1: Found ChannelMapSet: RINCON_000E585B03CC01400:LF,LF;RINCON_000E5889C19001400:RF,RF;RINCON_000E5899F9CE01400:SW,SW
console.log-2013.12.31 09:33:20 1: SONOS1: Retrieved TopoType: _LF
console.log-2013.12.31 09:33:20 4: SONOS1: Retrieve Current Volumelevels. Master: "5", Balance: "0"
console.log-2013.12.31 09:33:20 2: SONOS1: New Fhem-Name neccessary for 'Living Room' -> 'Sonos_Living_Room_X', ID 'RINCON_000E585B03CC01400_MR'
console.log-2013.12.31 09:33:20 2: SONOS1: New Fhem-Name neccessary for 'Living Room' -> 'Sonos_Living_Room_X_X', ID 'RINCON_000E585B03CC01400_MR'
console.log-2013.12.31 09:33:20 1: SONOS1: Successfully autocreated SonosPlayer 'Living_Room_X_X' (S5) Software Revision 4.2 with ID 'RINCON_000E585B03CC01400_MR'
console.log-2013.12.31 09:33:20 2: SONOS1: SonosPlayer 'Living_Room_X_X' is now updated



Andere Frage: Hast du irgendwo ein öffentliches SVN oder GIT Repo deines Codes? Wär noch spannend, mitzuverfolgen, was du so änderst, um besser und schneller in den Code reinzukommen (und evt. auch mal mithelfen)

Gruss

christian

chregu

Hab noch nen Fehler entdeckt.

Zeile 948, in der SONOS_Set funktion ist is_array benutzt, die funktion gibt's aber nicht in Perl. Müsste wohl heissen:


my $reftype  = reftype $elemHash;
if (!defined($reftype) || $reftype ne 'HASH') {



Das is_array führte manchmal bei einem
set Sonos Groups [Sonos_Bedroom, Sonos_Bathroom, Sonos_Living_Room]
zum Absturz vom ganzen FHEM (es ist nicht wirklich immer reproduzierbar)

Gruss

Christian

Reinerlein

Hi Christian,

ich habe den Code in einem lokalen Repository bei mir im Haus liegen, aber leider nicht öffentlich erreichbar.

Ursprünglich wollte ich das ja einfach in das SVN von Fhem legen, das ist aber daran gescheitert, dass es Rudi und Martin zu groß und zu unrelevant für die meisten Benutzer erschien. Daraufhin habe ich das ja bei mir auf den Webserver gelegt, und über den Thirdparty-Mechanismus eingebunden...

Danke für die "is_array"-Geschichte. Das ist wohl ein gedankliches Überbleibsel aus PHP gewesen :-)
Ich habs korrigiert.

Das mit der Log-Ausgabe hat schon mal geholfen, Danke. Ich forsche nochmal weiter, und melde mich dann wieder...

Grüße
Reiner