Sonos Modul

Hallo,

so, diese Funktion gibt es jetzt. Versuch es mal damit.

Ach du Kacke!
Nein, das hatte ich noch nicht gesehen.
Meine ganz klare Empfehlung ist, erstmal auf S1 zu bleiben, wenn man dieses Modul weiterhin verwenden möchte.

Ich gehe über die (nicht offiziell supportete) UPNP API. Da hat man immer die Gefahr, dass sie sich die API unangekündigt ändert, was aber eigentlich kein Problem ist, da die APP über die gleiche API geht.
In Bezug auf S2 gibt es aber noch keine Info, ob die UPNP API noch zur Verfügung steht. Ich habe mich mal im SONOS Forum an eine Frage drangehängt, aber da gibt es noch keine Antwort.
Ich schaue es mir aber im Detail an!

Gruß,
Thorsten

Vielen Dank für die neuen Funktionen.

Bei mir erscheinen nach wie vor folgende Fehlermeldungen im Log:

17.05.2020, 09:23:04 | TimerPool | Wohnzimmer (Sonos Update Status): <br />
<b>Notice</b>:  Undefined variable: sleeptimer in <b>/var/lib/symcon/modules/.store/de.kugelberg.sonos/SonosPlayer/module.php</b> on line <b>2253</b><br />

Die Variable Sleeptimer ist aber unterhalb der Instanz vorhanden. Ich habe zum Testen die Funktion „Sleeptimer“ in der Instanz testweise deaktiviert, ApplyChanges durchgeführt und danach weider aktiviert. Dies hat zu keiner Behebung des Fehlers geführt.

17.05.2020, 09:16:16 | ScriptEngine | Result for Event 29052
<br />
<b>Fatal error</b>:  Uncaught Exception: Sonos Player 192.168.29.151 ist nicht erreichbar, TimeOut: 1000 ms in /var/lib/symcon/modules/.store/de.kugelberg.sonos/SonosPlayer/module.php:2536
Stack trace:
#0 /var/lib/symcon/modules/.store/de.kugelberg.sonos/SonosPlayer/module.php(1096): SonosPlayer->getSonosAccess()
#1 /var/lib/symcon/scripts/__generated.inc.php(967): SonosPlayer->Play()
#2 /var/lib/symcon/scripts/35154.ips.php(5): SNS_Play(47703)
#3 {main}
  thrown in <b>/var/lib/symcon/modules/.store/de.kugelberg.sonos/SonosPlayer/module.php</b> on line <b>2536</b><br />

Und der Dauerbrenner - wenn ich einen Player vom Strom nehme, kommt diese Meldung. Das müsste noch irgendwie abgefangen werden.

Hallo,

„Undefined variable“ hat nichts mit der IPS Variablen zu tun, sondern mit einer „internen“ Variable im Modul Coding.
Da gab es eine Stelle, wo der Player eine Exception geraised hat, in der ich vergessen habe die Variable zu definieren.

Sollte jetzt erledigt sein.

Das wird auch immer so bleiben.
Du führst hier mit dem Script 35154 aktiv die Funktion SNS_Play(47703) aus. Wenn Du diesem Player vom Strom genommen hast, kann ich ihn nicht erreichen.
Und wenn jemand bewusst diese Funktion ausführt, muss es dann einen Fehler geben.

Gruß,
Thorsten

Hallo Zusammen,

ich wollte jetzt mal die Funktion von importierten Playlisten ausprobieren. Meine Musiksammlung liegt auf der NAS und ist auch in Sonos in der Musikbibliothek integriert.
Die CD’s werden mir auch angezeigt, z. B. „Alicia Keys - The Element Of Freedom“.
Allerdings kann ich die „CD“ nicht abspielen lassen. Fehler:

22.05.2020, 19:47:32 | PHP | Error: Notice: Undefined variable: container
   Error in Script C:\ProgramData\Symcon\modules\.store\de.kugelberg.sonos\SonosPlayer\module.php on Line 1745
  134 in scripts\IPSLibrary\app\core\IPSLogger\IPSLogger.inc.php (call IPSLogger_Out)
   44 in scripts\IPSLibrary\app\core\IPSLogger\IPSLogger_PhpErrorHandler.inc.php (call IPSLogger_Err)
  1745 in modules\.store\de.kugelberg.sonos\SonosPlayer\module.php (call IPSLogger_PhpErrorHandler)
  2336 in modules\.store\de.kugelberg.sonos\SonosPlayer\module.php (call SetPlaylist)
    3 in C:\Windows\System32\- (call RequestAction)

und

22.05.2020, 19:47:32 | PHP | Error: Error: Uncaught Error: Call to a member function xpath() on null in C:\ProgramData\Symcon\modules\.store\de.kugelberg.sonos\SonosPlayer\module.php:1745
Stack trace:
#0 C:\ProgramData\Symcon\modules\.store\de.kugelberg.sonos\SonosPlayer\module.php(2336): SonosPlayer->SetPlaylist('Abba - Gold - G...')
#1 C:\Windows\System32\-(3): SonosPlayer->RequestAction('Playlist', 18)
#2 {main}
  thrown
   Error in Script C:\ProgramData\Symcon\modules\.store\de.kugelberg.sonos\SonosPlayer\module.php on Line 1745
  134 in scripts\IPSLibrary\app\core\IPSLogger\IPSLogger.inc.php (call IPSLogger_Out)
   33 in scripts\IPSLibrary\app\core\IPSLogger\IPSLogger_PhpErrorHandler.inc.php (call IPSLogger_Err)
  121 in scripts\IPSLibrary\app\core\IPSLogger\IPSLogger_PhpErrorHandler.inc.php (call IPSLogger_PhpErrorHandler)
      in IPSLogger_PhpFatalErrorHandler

Aktuell ist meine Ordner Struktur: Genre / Name CD / Titel

Wenn ich die Bibliothek in Sonos direkt auswähle, wird alles korrekt abgespielt.
Wie muss denn die Ordnerstruktur auf der NAS aussehen, oder liegt ein anderes Problem vor?

Gruß Alex

Stimmt … so weit habe ich in dem Moment gar nicht gedacht. Besten Dank für die Fehlerbehebung.

Alles klar, das war mir so nicht bewusst. Macht aber Sinn. Ich habe ein Skript, welches auf den Playern bestimmter Räume etwas startet. Ich baue dann vorher eine Abfrage ein, ob der Player an ist.

Hallo,

oops.
Diese Funktion scheint ja nicht so oft verwendet zu werden…

Als ich die Debug-Meldungen eingebaut habe, ist mit ein copy&paste Fehler unterlaufen.
Sollte jetzt nach dem nächsten Update gehen.

Gruß,
Thorsten

Hallo Thorsten,

du bist mein Held, es funktioniert.
Vielen Dank für die Funktion.

VG Alex

Moin,

das mache ich jetzt öfters: Einen groben Fehler einbauen, und dann der Held sein, wenn man ihn behebt :smiley:
Warum klappt das im Geschäft nicht auch mal?!

Gruß,
Thorsten

Hallo Thorsten,

ich hoffe du wirst noch einmal mein Held bezüglich einer neuen Frage :D.
Ich setzt meine Sonos jeden Morgen per Script auf einen Sender zurück (z.B. Bayern 3 97.3 (Hot AC)), was auch wunderbar funktioniert.

Schalte ich nach dem „zurück setzten“ auf „Wiedergabe“ wird die Variable „Radio“ mit dem Wert 3 gefüllt und „Bayern 3“ erscheint. Soweit so gut.

Wenn die Box nun einige Stunden auf „Stop“ steht und ich drücke einfach nur die „Wiedergabe“ ohne Senderauswahl läuft zwar wieder der Sender „Bayern 3“, aber die Variable „Radio“ bleibt leer.

Gibt es eine Möglichkeit, das der Sender wieder angezeigt wird, sobald man nach einiger Teit wieder auf „Wiedergabe“ drückt?

VG Alex

Kurzes Feedback nach dem Upgrade auf die neue S2 App samt Update der Play:1 und Play:5 geht das wunderbare Modul auch weiterhin [emoji1360]

HI,

@someone
ich wollte gerade fragen wer sich getraut hat :smiley:

Habe noch eine Play:5 der alten Generation und weiß noch nicht ob ich die separiere (ist im Büro und wird eh selten gruppiert) oder gegen eine andere austausche.

Viele Grüße

Hallo,

Du bist ja wahnsinnig! Ohne Scherz, mich hätte es nicht gewundert, wenn nix mehr funktioniert hätte.
Ich hatte mich schon darauf vorbereitet vieles neu bauen zu müssen.

Ich habe mir extra noch zwei Symfonisk besorgt und wollte das mal isoliert testen.
(Und die Kinder freuen sich über Musik in ihrem Zimmer…)

Soweit bin ich gekommen:

  • Discover geht noch
  • Grundfunktionen auch noch
    • Play
    • Pause
    • Lautstärke anpassen
    • Radio setzen
    • update Status

Ich werde die Tage noch mal alle Funktionen durchtesten, fürs erste würde ich aber sagen: „Sieht ganz gut aus!“

Gruß,
Thorsten

Hallo zusammen,

So, alle Funktionen die ich testen kann habe ich getestet, und sie funktionieren.

Magels entsprechender Hardware nicht getestet sind:

[ul]
[li]SetAnalogInput
[/li][li]SetDialogLevel
[/li][li]SetHdmiInput
[/li][li]SetNightMode
[/li][li]SetSpdifInput
[/li][/ul]

Aber hier wäre ich mal optimistisch…

Das einige was mir aufgefallen ist, ist dass die „Liste der verfügbaren Gruppen“ (also die Knöpfe auf dem WebFront) nicht richtig upgedatet werden, wenn man „SNS_DelegateGroupCoordinationTo()“ ausführt.
Das hat aber bestimmt nix mit S2 zu tun.
Muss ich mir mal in einer ruhigen Minute ansehen…

Also dann: Hiermit ist S2 für dieses Modul freigegeben.

Gruß,
Thorsten

Hallo Thorsten,

gibt es schon eine Lösung zu Post #1529?
Wäre super, wenn es gefixt werden würde.

VG
Alex

Servus,
vlt. hat jemand eine Idee wo ich da den Knoten im Hirn habe.
Sonos Modul ist aufgesetzt, kann zB Radio darauf starten, Lautstärke ändern etc.
Nun wollte ich gerne mit Polly auch Sprache auf einer Sonos Box ausgeben. Aber es mag mir nicht ums verrecken gelingen. Alles was ich dazu las und als Vorlagen nutzte, hat nicht geklappt.

Sonos Instanz für den Speaker „Büro“ ist die 36459.
Polly hat die 28552.
Nun dachte ich es müsste so klappen.

SNS_PlayFiles(36459, TTSAWSPOLLY_GenerateData(28552, "Dies ist ein Test"), 30 ) ;

Tut es aber nicht. Die anderen Versuche erspare ich Euch weil keine klappte.
Was passiert ist, dass das abgespielte Radio auf Mute (glaub ich) geht, so als ob nun der Text käme, ich aber den Text nicht höre. Dann macht das Radio nach ca. 5 Sekunden weiter.

In der Konsole kommen diese Fehler
Warning: Invalid argument supplied for foreach() in C:\ProgramData\Symcon\modules.store\de.kugelberg.sonos\SonosPlayer\module.php on line 1117
Warning: Invalid argument supplied for foreach() in C:\ProgramData\Symcon\modules.store\de.kugelberg.sonos\SonosPlayer\module.php on line 1191

Unklar ist mir ob das mit „TTSAWSPOLLY_GenerateData“ auch so geht dass ich die Datei nicht erst speichern muss.
Wenn ich mit „TTSAWSPOLLY_GenerateFile(28552, „Dies ist ein Test“);“ die Datei von AWS erzeugen lasse, wird die auch abgespeichert und wenn ich sie unter Win abspiele passt das auch.

Symcon 5.4 läuft auf einem Win10 NUC.

Dankeschön!
Cheers Seppm

Hallo,

SNS_PlayFiles benötigt eine Datei, die per HTTP oder SMD Share (also per \server\datei.mp3) erreichbar ist.
das zweite Argument des Aufrufs muss ein JSON Array sein, mit allen Dateien die Abgespielt werden sollen. Also z.B. "["http://my.server.home/text.mp3","\my.other.server\was-auch-immer.mp3"]"

Ich kenne TTSAWSPOLLY_GenerateData nicht so gut, aber ich gehe davon aus, dass dies kein solches Array zurückliefert.

Gruß,
Thorsten

Hallo,

dass ich erst so spät antworte liegt daran, dass ich erwartet hätte, dass dies funktioniert.
Ich habe es gerade mal bei mir getestet, und es funktioniert. (zumindest wenn ich nur ein paar Minuten (so ca. 30) warte.

Hier was ich mache:
In der Funktion „SNS_UpdateStatus“ (die alle paar Sekunden automatisch läuft) frage ich die „MediaInfo“ ab. Das ist dann ein Array, und in dem steht in [‚CurrentURI‘] die URL die abgespielt wird.
Nach dieser suche ich dann zuerst in den Radiosendern aus dem Splitter ob ich diese URL da finde.
Wenn ja suche ich nach dem Sender im Profil und fertig.

–> Wenn das mal geht und mal nicht, muss das bedeuten, dass sich die URL im SONOS ändert :eek:

Da ich es aber nicht nachstellen kann, kann ich es nicht mit Sicherheit sagen.

Wenn Du willst, kannst Du folgendes machen:
in beiden Situationen dieses Script ausführen (Achtung: „$ip“ muss angepasst werden)


<?

if(file_exists('../modules/SymconSonos/Sonos/sonosAccess.php')){
  include_once '../modules/SymconSonos/Sonos/sonosAccess.php';
}elseif(file_exists('../modules/Sonos/libs/sonosAccess.php')){
  include_once '../modules/Sonos/libs/sonosAccess.php';
}elseif(file_exists('../modules/.store/de.kugelberg.sonos/libs/sonosAccess.php')){
  include_once '../modules/.store/de.kugelberg.sonos/libs/sonosAccess.php';
}else{
    die('sonosAccess.php not found');
}

// enter your IP here
  $ip = '192.168.1.56';
// 

$sonos = new SonosAccess($ip);

var_dump($sonos->GetMediaInfo()['CurrentURI']);

?>

Dann können wir ja mal vergleichen was da drin steht.
Weiterhin könntest Du in Splitter schauen, ob diese URL enthalten ist.

Gruß,
Thorsten

Hallo Thorsten,

natürlich musste ich gleich testen :D.

Meine Sonos laufen mehrer Stunden nicht, bevor ich sie wieder einschalte. Es ist auch egal, ob ich über die Visu schalte, oder direkt am Gerät einschalte. Über die Sonos-App habe ich es noch nicht probiert.

Heute morgen um 4 Uhr ist das Reset-Script auf Bayern 3 durchgelaufen.
Jetzt habe ich dein Script gestartet ohne das Sonos läuft:

string(176) "x-sonosapi-stream:s14991?sid=254&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;flags=8224&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;sn=0"

danach in der Visu auf „Wiedergabe“ gedrückt. Sonos spielt „Bayern 3“, das Logo und die Details werden in der Variable Details richtig angezeigt, aber die Variable „Radio“ bleibt leer

Dein Script zeigt das gleiche wie oben:

string(176) "x-sonosapi-stream:s14991?sid=254&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;flags=8224&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;sn=0"

Danach mein Reset-Script ausgeführt und wieder auf „Wiedergabe gedrückt“. Danach spielt Sonos wieder Bayern 3 und die Variable „Radio“ zeigt „Bayern 3…“. Es wurde also richtig erkannt.
Dein Script zeigt jetzt:

string(56) "x-sonosapi-stream:s14991?sid=254&flags=8224&sn=0"

Die Cover-ID wird ja schon mal immer erkannt, und die flags auch, aber soviele „amp“?

Dieses Verhalten ist auf allen Sonos gleich. Im Bad läuft sogar ein anderer Sender (Radio Gong). Es liegt also nicht am Sender.

Hilft dir das weiter?

VG Alex

Hallo,

in gewisser weise schon.
Wie hast Du denn die URL in den Splitter bekommen? Per Knopf „TuneIn Favoriten auslesen“?

Was steht da bei Dir für eine URL drin?
Ich habe das Gefühl. Dass das „&“ anstelle von „&“ hier das Problem sein könnten.
Update: Ich habe gerade mal eine neue Version bereitgestellt, in der ich nicht doppelt umwandle. Also wenn schon „&“ in der URL steht wird nun nicht mehr „&“ daraus gemacht. Das könnte es schon gewesen sein…

Gruß,
Thorsten

Jep, Sender habe ich mit „Tunein Favoriten einlesen“ eingelesen.
Aktuell stehen 4 Sender drin. Die URL von Bayern 3 = x-sonosapi-stream:s17494?sid=254&flags=8224&sn=0

Deine Vardump-Var zeigt aber: string(56) „x-sonosapi-stream:s14991?sid=254&flags=8224&sn=0“
und der die Var-Radio zeigt richtig „Bayern 3“. Nach ca. 4 Stunden stillstand (stop) und erneutem Sonos aktivieren steht: x-sonosapi- string(56) „x-sonosapi-stream:s14991?sid=254&flags=8224&sn=0“ in vardump.

Jetzt bist du dran;).

VG Alex