Sonos Modul

That’s it!!!

Es funktioniert!

Danke!!!

Sonos Modul erneut installiert.
Im Discovery sind meine 4 Player ersichtlich, keiner ist rot…
Wenn ich aber im WebFront eine Gruppenzuordnung machen will tauchen diese ‚Geisterplayer‘ auf, welche schon lange gelöscht sind. Zum Teil mehrmals derselbe Namen, wahrscheinlich so oft wie ich das Modul schon installiert und deinstalliert habe…
Hier das ganze Auswahlmenü…
image
image
image

Hallo,

kann sein. Ich habe mir gerade nochmals durchgelesen, was ich da so mache und um Altlasten kümmere ich mich scheinbar nicht. Auch wenn ich dachte, dass ich dies tue…

Dieses Script löscht alle „Associations“ (also die auswählbaren Instanzen) und fügt die hinzu, die aktuell Koordinator sind. So ist es dann richtig:

<?php

$Associations = IPS_GetVariableProfile('SONOS.Groups')['Associations'];

foreach ( $Associations as $Association ){
  if ( $Association['Value'] != 0 ){
    print "remove " . $Association['Value'] . ": ". $Association['Name'] . "\n";
    IPS_SetVariableProfileAssociation('SONOS.Groups', $Association['Value'], '', '', -1);
  }
}

$instances = IPS_GetInstanceListByModuleID('{52F6586D-A1C7-AAC6-309B-E12A70F6EEF6}');

foreach ( $instances as $instance ) {   
  if ( SNS_IsCoordinator($instance) == true ) {
    print "add " . $instance . ": ". IPS_GetName($instance) . "\n";
    IPS_SetVariableProfileAssociation('SONOS.Groups', $instance, IPS_GetName($instance), '', -1);
  }
}

Mal sehen, ob ich das irgendwo einbauen kann, dass es immer mal wieder automatisch aufräumt…

Gruß,
Thorsten

Hallo, bei hat es funktioniert. Die einzelnen Geräte waren scho 3 mal in der Liste drin.

Wir haben in einem WLAN zwei Controller, allerdings wird immer nur der eine über den Konfigursator gefunden.
@Kugelberg, kannst du mir da helfen?

Grüße,
Kai

Das wäre cool. Jedenfalls hat das Script mein Arsenal an SONOS-Playern drastisch reduziert und jetzt stimmt der Soll-Ist Bestand :joy:

Hallo,

seit kurzem funktioniert der Befehl

SNS_SetPlaymode

nicht mehr; es kommt die Meldung

Warning:
Fatal error: Uncaught Exception: Error during Soap Call: UPnPError s:Client 712 (ERROR_AV_UPNP_AVT_UNSUPPORTED_PLAY_MODE) in /var/lib/symcon/modules/.store/de.kugelberg.sonos/libs/sonosAccess.php:801
Stack trace:
#0 /var/lib/symcon/modules/.store/de.kugelberg.sonos/libs/sonosAccess.php(706): SonosAccess->processSoapCall(‚/MediaRenderer/…‘, ‚urn:schemas-upn…‘, ‚SetPlayMode‘, Array)
#1 /var/lib/symcon/modules/.store/de.kugelberg.sonos/SonosPlayer/module.php(2020): SonosAccess->SetPlayMode(‚SHUFFLE‘)
#2 /var/lib/symcon/modules/.store/de.kugelberg.sonos/SonosPlayer/module.php(2637): SonosPlayer->SetPlayMode(4)
#3 /-(3): SonosPlayer->RequestAction(‚PlayMode‘, 4)
#4 {main}
thrown in /var/lib/symcon/modules/.store/de.kugelberg.sonos/libs/sonosAccess.php on line 801
Abort Processing during Fatal-Error: Uncaught Exception: Error during Soap Call: UPnPError s:Client 712 (ERROR_AV_UPNP_AVT_UNSUPPORTED_PLAY_MODE) in /var/lib/symcon/modules/.store/de.kugelberg.sonos/libs/sonosAccess.php:801
Stack trace:
#0 /var/lib in /var/lib/symcon/scripts/35336.ips.php on line 7

Selbst über

RequestAction

kommt dieselbe Meldung.

Wie lässt sich der Fehler beheben?

Vielen Dank und Grüße…!

Hallo,

ich habe komische Effekte beim Abspielen von (langen) MP3 Dateien. Ich will gerne abends als Hintergrundgeräusch Wellenrauschen einspielen. Das startet ich mit dem Befehl:

SNS_PlayFiles(14351, "["http://symconserver:3777/user/musik/Wellenrauschen.mp3\„]“,„15“);

Die MP3 Datei ist ca. 3h lang.

Zum einen kommt das Skript, das nur den obigen Befehl enthält nicht mehr zurück. Der Sound startet auf dem angewählten Lautsprecher, aber das Skript zeigt nur die „Sanduhr“ und beendet sich nicht wieder.

Das Wellenrauschen läuft dann immer so ca. 50 Minuten und endete danach. Die Datei ist allerdings wie gesagt ca. 180 Minuten lang. Keine Fehlermeldung o.ä. im Log zu finden.

Hat jemand eine Idee?

Vielen Dank
Ralf

Hallo,

ja. Ich habe das damals so gebaut, dass in der Funktion PLayFiles darauf gewartet wird, dass die Datei abgespielt wurde, damit danach dann wieder das vorherige abgespielt werden kann.
Ich hatte dazu auch schon mal die eine oder andere Diskussion, ob und wie man das besser machen kann, aber das ist nicht so einfach möglich.

Das ist Grund dafür, dass das script nicht zurückkommt. Vorher schlägt halt die maximale Laufzeit für ein Script zu…
Warum es nach 50 Minuten aufhört, habe ich keine Ahnung. Wäre reine Spekuation.

Ich würde Dir ein anderes Vorgehen empfehlen (unter der Annahme, dass Du nicht die Vorhergehende Wiedergabe fortsetzen möchtest).
Du kannst mit SNS_SetTransportURI sagen, was abgespielt werden soll. Nichst anderes passiert im PlayFiles. Danach nicht vergessen die Wiedergabe zu starten:

SNS_SetTransportURI(14351, 'http://symconserver:3777/user/musik/Wellenrauschen.mp3');
SNS_Play(14351);

Gruß,
Thorsten

Hallo,

diese Fehlermeldung sagt aus, dass der mitgegebene Playmode (in Deinem Fall „SHUFFLE“) nicht unterstützt wird.

Ich habe es gerade versucht, und bei mir geht es grundsätzlich.
Wenn ich aber z.B. ein Radio auswähle (wo „SHUFFLE“ nicht unterstützt wird), dann kommt dieser Fehler.
Du solltest dann auch in der App nicht die Möglichkeit haben diesen Knopf zu drücken…

Gruß,
Thorsten

Hallo Thorsten,

vielen Dank für deine schnelle Antwort. Habe das Skript entsprechend umgebaut. Es kommt jetzt nach ca. 10 Sekunden zurück, dass passt. Leider hat auch diese Datei nach 51min aufgehört zu spielen.
Hast du eine Idee, wo man nachschauen könnte oder was man noch protokollieren sollte, um der Ursache auf die Schliche zu kommen.

Vielen Dank für deine Unterstützung
Ralf

Danke, Thorsten. Es ist eine normale Playlist, bei der es in der Sonos-App funktioniert. Was ich noch nicht versucht habe ist, ob die Fehlermeldung kommt, wenn der betreffende Mode bereits eingestellt ist… Ich schau mal, wenn ich wieder mal etwas Zeit habe.

Viele Grüße!

Was sagt mir diese Fehlermeldung:
23.02.2023, 03:20:30 | TimerPool | Sonos Splitter (Sonos Update Grouping):
Fatal error: Uncaught Exception: Error during Soap Call: Could not connect to host HTTP in /var/lib/symcon/modules/.store/de.kugelberg.sonos/libs/sonosAccess.php:803
Stack trace:
#0 /var/lib/symcon/modules/.store/de.kugelberg.sonos/libs/sonosAccess.php(435): SonosAccess->processSoapCall(‚/ZoneGroupTopol…‘, ‚urn:schemas-upn…‘, ‚GetZoneGroupSta…‘, Array)
#1 /var/lib/symcon/modules/.store/de.kugelberg.sonos/SonosSplitter/module.php(390): SonosAccess->GetZoneGroupState()
#2 /var/lib/symcon/scripts/__generated.inc.php(679): SonosSplitter->updateGrouping()
#3 /-(1): SNS_updateGrouping(12582)
#4 {main}
thrown in /var/lib/symcon/modules/.store/de.kugelberg.sonos/libs/sonosAccess.php on line 803

Hallo,

das bedeutet schlichtweg, dass Dein IPS nicht mit der Sonos Box kommunizieren konnte.

Gruß,
Thorsten

Hallo Thorsten, ich versuche gerade mein (sehr altes) Sonos mit IPS zu verbinden. Der Versuch, die Radio-Variable zu setzen, wirft einen Fehler: „Could not set value“

Fatal error: Uncaught Exception: Error during Soap Call: UPnPError s:Client 701 (ERROR_AV_UPNP_AVT_INVALID_TRANSITION) in C:\ProgramData\Symcon\modules.store\de.kugelberg.sonos\libs\sonosAccess.php:801 Stack trace: #0 C:\ProgramData\Symcon\modules.store\de.kugelberg.sonos\libs\sonosAccess.php(471): SonosAccess->processSoapCall(‚/MediaRenderer/…‘, ‚urn:schemas-upn…‘, ‚Play‘, Array) #1 C:\ProgramData\Symcon\modules.store\de.kugelberg.sonos\SonosPlayer\module.php(1300): SonosAccess->Play() #2 C:\ProgramData\Symcon\modules.store\de.kugelberg.sonos\SonosPlayer\module.php(2649): SonosPlayer->Play() #3 C:\Windows\System32-(3): SonosPlayer->RequestAction(‚Radio‘, 1) #4 {main} thrown in C:\ProgramData\Symcon\modules.store\de.kugelberg.sonos\libs\sonosAccess.php on line 801 Abort Processing during Fatal-Error: Uncaught Exception: Error during Soap Call: UPnPError s:Client 701 (ERROR_AV_UPNP_AVT_INVALID_TRANSITION) in C:\ProgramData\Symcon\modules.store\de.kugelberg.sonos\libs\sonosAccess.php:801 Stack trace: #0 C:\ProgramData\Symcon\modules.store\de.kugelberg.sonos\libs\sonosAccess.php(471): SonosAccess->processSoapCall(‚/MediaRenderer/…‘, ‚urn:schemas-upn…‘, ‚Play‘, Array) #1 C:\ProgramData\Symcon\modules.store\de.kugelberg.sonos\SonosPlayer\module.php(1300): SonosAccess->Play() #2 C:\ProgramData\Symcon\modules.store\de.kugelberg.sonos\SonosPlayer\module.php(2649): SonosPlayer->Play() #3 C:\Windows\System32-(3): SonosPlayer->RequestAction(‚Radio‘, 1) #4 {main} thrown Error in Script C:\ProgramData\Symcon\modules.store\de.kugelberg.sonos\libs\sonosAccess.php on Line 801 (Code: -32603)

Ich habe eine Liste mit einem Dutzend Stationen eingelesen, und die sind entsprechend in der Konfiguration des Splitters drinnen.

Allerdings kann ich nicht auf die Property „Radiostations“ programmatisch zugreifen, was vermutlich der Grund für die nicht-zu-setzende Variable ist.

allerdings sind die Radiostations hier schon zu finden:

Was tun? Vielen Dank um jeden Rat!

Hallo,

da sind ja einige Fragen versteckt:

Was meinst Du den mit „Radio-Variable setzen“?
Verwendest Du SNS_SetRadio( ) + SNS_Play( )?

ERROR_AV_UPNP_AVT_INVALID_TRANSITION bedeutet immer, dass Du etwas aufrufen möchtest, was nicht unterstützt ist.
So bekommst Du das (glaube ich) wenn keine Quelle gesetzt ist, aber trotzdem Play aufgerufen wird.

Auch hier wäre es hilfreich zu wissen, was genau Du aufrufst.

Nö. die Property heisst „RadioStations“, nicht „Radiostations“

Gruß,
Thorsten

1 „Gefällt mir“

Ja, habe ich nun geklärt. Wenn die „Radio“-Variable auf einen nicht-existenten Sender gesetzt wird, wirft der Skript einen offenbar nicht-aufgefangenen Fehler. Danke.

Magst du bei der Gelegenheit das Profil für die Variable Radio um den zulässigen Wert 0 erweitern? Den nimmt die Variable anscheinend ein, wenn nichts gespielt wird.

Versuche meine Sonos One Gen 2 einzubinden. Genau wie in diesem Post findet das Discovery-Modul das Gerät nicht.
Diese suche gibt ein leeres Array zurück:

var_dump(YC_SearchDevices(IPS_GetInstanceListByModuleID('{FFFFA648-B296-E785-96ED-065F7CEE6F29}')[0], 'urn:schemas-upnp-org:device:ZonePlayer:1'));

Im Netzwerk ist upnp erlaubt.
Wenn ich statt dessen z.B. nach ‚upnp:rootdevice‘ suche findet es auch andere Geräte (keine Sonos).
An was könnte das liegen? Ideen was ich testen könnte um das Problem einzugrenzen?

Hallo,

sorry, keine Ahnung.
Ich würde den einfachen weg gehen und die Instanz manuell anlegen…

Gruß,
Thorsten