Sonos Modul

Hallo,

willst Du mir sagen, dass die Playlist in der App unter „Durchsuchen“ → „Musikbibliothek“ → „Importierte Playlisten“ nicht auftaucht?
Das würde mich sehr wundern, denn ich mache ja nur eine Query in das Sonos system.

Gruß,
Thorsten

Hallo
im app ist alles vorhanden will ich aber im Sonos Splitter die Listen aktualisieren kommt diese Fehlermeldung:

Fatal error: Uncaught TypeError: preg_replace(): Argument #3 ($subject) must be of type array|string, SimpleXMLElement given in C:\ProgramData\Symcon\modules\.store\de.kugelberg.sonos\SonosSplitter\module.php:571
Stack trace:
#0 C:\ProgramData\Symcon\modules\.store\de.kugelberg.sonos\SonosSplitter\module.php(571): preg_replace(Array, Array, Object(SimpleXMLElement))
#1 C:\ProgramData\Symcon\scripts\__generated.inc.php(4183): SonosSplitter->UpdatePlaylists()
#2 C:\Windows\System32\-(62): SNS_UpdatePlaylists(46456)
#3 {main}
  thrown in C:\ProgramData\Symcon\modules\.store\de.kugelberg.sonos\SonosSplitter\module.php on line 571

und wenn ich versuche die Playlist zu starten bekomme ich diese Fehlermeldung:

Warning: Undefined variable $Statuiedergabeliste in C:\ProgramData\Symcon\scripts\10488.ips.php on line 10

Fatal error: Uncaught TypeError: preg_replace(): Argument #3 ($subject) must be of type array|string, SimpleXMLElement given in C:\ProgramData\Symcon\modules\.store\de.kugelberg.sonos\SonosPlayer\module.php:1988
Stack trace:
#0 C:\ProgramData\Symcon\modules\.store\de.kugelberg.sonos\SonosPlayer\module.php(1988): preg_replace(Array, Array, Object(SimpleXMLElement))
#1 C:\ProgramData\Symcon\scripts\__generated.inc.php(4087): SonosPlayer->SetPlaylist('')
#2 C:\ProgramData\Symcon\scripts\10488.ips.php(10): SNS_SetPlaylist(21342, '')
#3 {main}
  thrown in C:\ProgramData\Symcon\modules\.store\de.kugelberg.sonos\SonosPlayer\module.php on line 1988

danke gruß Stefan

Hallo,

Ah, so…
Die Fehlermeldung hatte ich in Deinem ersten Post nicht richtig gesehen.

Da scheint etwas irgendwie nicht so zu sein, wie erwartet.
„Argument #3 ($subject) must be of type array|string, SimpleXMLElement given“

Und ja, bei mir ist das auch so, aber kein Problem…
Könnte an Windows liegen, oder an der PHP Version.

Könntest Du mal versuchen in der SonosPlayer/module.php in Zeile 1988 aus dem
if (preg_replace($this->getPlaylistReplacementFrom(), $this->getPlaylistReplacementTo(), $item->xpath('dc:title')[0]) == $name) {
ein
if (preg_replace($this->getPlaylistReplacementFrom(), $this->getPlaylistReplacementTo(), (string) $item->xpath('dc:title')[0]) == $name) {

in Zeile 2000 aus
if (preg_replace($this->getPlaylistReplacementFrom(), $this->getPlaylistReplacementTo(), $container->xpath('dc:title')[0]) == $name) {
ein
if (preg_replace($this->getPlaylistReplacementFrom(), $this->getPlaylistReplacementTo(), (string) $container->xpath('dc:title')[0]) == $name) {
zu machen?
Dann müsste das setzen der Playlist wieder gehen.

Für das update Playlist müssen in SonosSplitter/module.php die Zeilen 558 und 571 vergleichbar um ein „(string)“ erweitert werden.

Wenn das funktioniert, übernehme ich es in das Modul.

Gruß,
Thorsten

Teste ich später einmal und melde mich dann
Danke

Danke jetzt geht wider alles.
danke
gruß stefan

Das ist die typische Fehlermeldung von PHP 8.

Hallo,

So, da 6.4 jetzt da ist, habe ich alle änderungen in den Variablen gemacht. Wieder erstmal als Beta.

TRANSITION is jetzt -1.
Es gibt aber auch Konstanten dafür (wenn man die sonosAccess.php einbindet…):
SonosAccess::PREVIOUS
SonosAccess::STOP
SonosAccess::PLAY
SonosAccess::PAUSE
SonosAccess::NEXT
SonosAccess::TRANSITIONING

Zu guter Letzt ist auch das Problem mit den Playlisten von @somm gelöst.

Feedback ist erwünscht, ansonsten gebe ich das Ganze in kürze als stable frei.

Gruß,
Thorsten

3 „Gefällt mir“

Cool, danke. Probiere es nach Möglichkeit gleich morgen, also heute… :sweat_smile:

Hallo,

ich erhalte in letzter Zeit immer folgenden Fehler:

16.06.2023, 04:21:09 | TimerPool            | Sonos Discovery (Sonos Discovery): 
Warning: SimpleXMLElement::__construct(): Entity: line 130: parser error : EndTag: '</' not found in C:\ProgramData\Symcon\modules\.store\de.kugelberg.sonos\SonosDiscovery\module.php on line 155

Warning: SimpleXMLElement::__construct(): 	    <eventSubURL>/MediaServer/ConnectionManager/ in C:\ProgramData\Symcon\modules\.store\de.kugelberg.sonos\SonosDiscovery\module.php on line 155

Warning: SimpleXMLElement::__construct(): 	                                                ^ in C:\ProgramData\Symcon\modules\.store\de.kugelberg.sonos\SonosDiscovery\module.php on line 155

Fatal error: Uncaught Exception: String could not be parsed as XML in C:\ProgramData\Symcon\modules\.store\de.kugelberg.sonos\SonosDiscovery\module.php:155
Stack trace:
#0 C:\ProgramData\Symcon\modules\.store\de.kugelberg.sonos\SonosDiscovery\module.php(155): SimpleXMLElement->__construct('<?xml version="...')
#1 C:\ProgramData\Symcon\modules\.store\de.kugelberg.sonos\SonosDiscovery\module.php(38): SonosDiscovery->DiscoverDevices()
#2 C:\ProgramData\Symcon\scripts\__generated.inc.php(1003): SonosDiscovery->Discover()
#3 C:\Windows\System32\-(1): SNS_Discover(15897)
#4 {main}
  thrown in C:\ProgramData\Symcon\modules\.store\de.kugelberg.sonos\SonosDiscovery\module.php on line 155
Abort Processing during Fatal-Error: Uncaught Exception: String could not be parsed as XML in C:\ProgramData\Symcon\modules\.store\de.kugelberg.sonos\SonosDiscovery\module.php:155
Stack trace:
#0 C:\ProgramData\Symcon\modules\.store\de.kugelberg.sonos\SonosDiscovery\module.php(155): SimpleXMLElement->__construct('<?xml version="...')
#1 C:\ProgramData\Symcon\modules\.store\de.kugelberg.sonos\SonosDiscovery\module.php(38): SonosDiscovery->DiscoverDevices()
#2 C:\ProgramData\Symcon\scripts\__generated.inc.php(1003): SonosDiscovery->Discover()
#3 C:\Windows\System32\-(1): SNS_Discover(15897)
#4 {main}
  thrown
   Error in Script C:\ProgramData\Symcon\modules\.store\de.kugelberg.sonos\SonosDiscovery\module.php on Line 155

Mache ich was falsch ???

Grüße
Proxima

Perfekt, funktioniert! :+1::slightly_smiling_face:

Schönen guten Tag,

nach der Installation auf IPS7 Testing habe ich folgenden Fehler, wenn ich eine MP3 Datei an eine Sonos sende.

Befehel:
SNS_PlayFiles (14136 Sonos Küche (Programmierung\Multimedia\Küche), json_encode (array( „//192.168.2.100/tts/tuerinfo/terrassemittegeoeffnet.mp3“)), 40);

Fehler:

Warning: Undefined array key 0 in /var/lib/symcon/modules/.store/de.kugelberg.sonos/SonosPlayer/module.php on line 1359
Fatal error: Uncaught TypeError: json_decode(): Argument #1 ($json) must be of type string, null given in /var/lib/symcon/modules/.store/de.kugelberg.sonos/SonosPlayer/module.php:1359
Stack trace:
#0 /var/lib/symcon/modules/.store/de.kugelberg.sonos/SonosPlayer/module.php(1359): json_decode(NULL, true)
#1 /var/lib/symcon/scripts/__generated.inc.php(6871): SonosPlayer->PlayFiles(‚[„//192.168.2…‘, ‚40‘)
#2 /-(4): SNS_PlayFiles(14136, ‚[“//192.168.2…‘, 40)
#3 {main}
thrown in /var/lib/symcon/modules/.store/de.kugelberg.sonos/SonosPlayer/module.php on line 1359

nach dem Zurückspielen auf IPS 6.4 ist das Problem weg.

mfg

Kann es sein, dass du noch eine ältere Version des Moduls installiert hast? Probiere mal die Beta Version des Moduls.

Hallo,

ich habe die Aktuelle Stable Version installiert, sobald ich auf die Beta umschwenke, funktioniert es.
Wird das ganze bald auch in der Stable Version funktionieren?

Moin,

da ich keine Beschwerden bekommen habe, habe ich jetzt mal die Beta als Stable eingereicht.
Sollte also bald kommen.

Gruß,
Thorsten

Sorry, dass ich mich jetzt erst melde.
Mir ist eine Sache aufgefallen, der Wiedergabestatus bleibt bei mir auf „Play“ stehen, auch wenn ich auf Stop gedrückt habe.
Wenn ich übers Webinterface auf Stop drücke, stoppt die Sonos wohl aber er geht wieder auf den Status „Play“ zurück. das ist nicht weiter problematisch, leider habe ich ein zwei Automatisierungen, die davon abhängig sind, ob Musik abgespielt wird oder nicht.

mfg

Hallo,

das sieht mir in Deinem Video nach einer eigenen Visu aus. Zumindest wundert es mich, dass ich da nur „play“ und „stop“ sehe.
=> Die Werte für play stop, etc. haben sich geändert.

Jetzt ist es:
image

Vorher war es:

Also:
Play war 1, ist jetzt 2
Stop war 3 ist jetzt 1

Kann es daran liegen?

Gruß,
Thorsten

Perfekt, daran lag es :partying_face:
Ja, ist ein eigenes Button Profil dafür, die anderen Sachen brauche ich nicht und so ist es aufgeräumter :+1:
Dankeschön für die schnelle Hilfe.

Hallo Thorsten,
ich komme erst jetzt wieder dazu mich diesem Thema zu widmen. In der Zwischenzeit bin ich auf eine Synology DSM7 umgestiegen, auf dem IPS im Docker läuft und ich versuche mich nun erneut daran eine Ansage als mp3 abzuspielen.
Ich habe sie in der Filestation in diversen Unterordnern abgelegt. Ich würde sie gerne hier lassen und nicht im Symcon-Verzeichnis ablegen, da ich nicht weiß, ob sie noch vorhanden sind, wenn ich über Docker den Container mal löschen und neu installieren muss.

Nach zig Versuchen, obwohl ich die Dokumentation meines Erachtens beachtet habe, bekomme ich nun nach Ausführung keine Fehlermeldung mehr im Skript.

<?php

SNS_PlayFiles(20061, json_encode( Array( "////[IP-Adresse]/[Pfad]/Wäsche-fertig.mp3") ), 30);

Allerdings unterbricht die Musik nach Ausführung des Skiptes nur ganz kurz und in der Sonos-App kommt die Fehlermeldung "Wiedergabe von „Wäsche-fertig.mp3“ nicht möglich - Datei //[IP-Adresse]/[Pfad]/Wäsche-fertig.mp3 nicht gefunden.

Nach direkt doppelt hintereinander ausgeführtem Skript (siehe oben) erhalte ich folgenden Fehler im Skript:

Fatal error: Uncaught Exception: Error during Soap Call: UPnPError s:Client 701 (ERROR_AV_UPNP_AVT_INVALID_TRANSITION) in /var/lib/symcon/modules/.store/de.kugelberg.sonos/libs/sonosAccess.php:812
Stack trace:
#0 /var/lib/symcon/modules/.store/de.kugelberg.sonos/libs/sonosAccess.php(482): SonosAccess->processSoapCall('/MediaRenderer/...', 'urn:schemas-upn...', 'Play', Array)
#1 /var/lib/symcon/modules/.store/de.kugelberg.sonos/SonosPlayer/module.php(1424): SonosAccess->Play()
#2 /var/lib/symcon/scripts/__generated.inc.php(6051): SonosPlayer->PlayFiles('["\\/\\/192.168.2...', '30')
#3 /var/lib/symcon/scripts/53872.ips.php(3): SNS_PlayFiles(20061, '["\\/\\/192.168.2...', 30)
#4 {main}
  thrown in /var/lib/symcon/modules/.store/de.kugelberg.sonos/libs/sonosAccess.php on line 812

Interessanterweise springt nach doppelter Ausführung des Durchsage-Skriptes das Lied immer auf das Nächste Lied weiter, statt einfach die Wiedergabe fortzusetzen.

Hier der Dump:
gelöscht

Kannst du mir hier weiterhelfen?
Viele Grüße
Marvin

Hi,

Das bedeutet ja nichts anderes, als dass SONOS nicht an die Datei kommt.
Es muss halt ohne user/passwort, sondern komplett anonym funktionieren. Da kann ich Dir nicht wirklich helfen, aber ich bin mir sicher, dass es diesbezüglich einiges an HowTos gibt…

ERROR_AV_UPNP_AVT_INVALID_TRANSITION bedeutet, dass Du etwas ausführen möchtest, was (zu diesem Zeitpunkt) nicht erlaubt ist. Da es sich hier um Play() handelt würde ich tippen, dass exakt zu diesem Zeitpunkt keine wiedergabequelle gesetzt ist.

Da das SONOS Modul nicht das einzige ist, was die Player steuern kann, kann es immer sein, dass dies vorkommt.
Ich sehe keine Möglichkeit dies zu verhindern. Und dann die Exception zu werfen finde ich richtig.

Gruß,
Thorsten