Sonos Modul

Hab noch nicht wirklich Plan von Modulen in IPS…kann man da selbst etwas anpassen? Dann in der „sonos.php“ vom Modul in der „public function Next()“ die Anpassungen vornehmen von 250 auf 329 und es sollte funktionieren.

Wenn es das nicht ist…keine Ahnung…ansonsten fällt mir spontan nichts anderes ein. Hatte bei mir im SonosBY auch oft diese Probleme mit falschen Content Längen und Fehler 500.

@kugelberg: Deswegen hatte ich bei mir mal eine Sonos-Versionsabfrage eingebaut, damit ich dann je nach Version die richtige Content-Length setzen kann. Aber überall hab ich das auch noch nicht umgesetzt…

Grüße,
Chris

…das ist eigentlich der sinnvollste Weg um das Modul dauerhaft nutzen zu können.
@Thosten: Wie findest du den Vorschlag?
Oder kann man die Version evtl. sogar auslesen und die Anpassungen im Script automatisch setzen…

Hast du mal probiert die Content Length bei dir anzupassen? Die Skripte müssen ja irgendwo bei dir liegen. Geht es dann wieder? Wenn nicht, dann wissen wir ja noch gar nicht zu 100%, ob es daran liegt :smiley: Auch wenn ich mir ziemlich sicher bin, aber das heißt ja nix :smiley:

Content Length auslesen braucht man nicht, aber man kann die wohl „berechnen“ aus der String Länge vom XML-Body, aber irgendwie hat das bei meinen Tests nie richtig gestimmt/funktioniert, als ob man da noch sonst irgendwas dazu rechnen muss oder kein Plan. Hab mich aber auch nicht sonderlich intensiv damit befasst.

Args…mir stinkt es, dass ich immer noch kein IPS4 nutzen und damit auch keine Module basteln kann :frowning: Und nur deswegen ein 2. IPS…ne…

Grüße,
Chris

ich habe mir Gestern noch die Daten des Moduls auf Git angeschaut und da steht wie du gesagt hast 250.
Leider kann man derzeit noch nicht direkt auf das Dateisystem der Symbox zugreifen und ich konnte es nicht schnell ändern um es zu testen.

Ich muss mich erst mal damit beschäftigen wie ich die Datei über PHP ändern kann oder runterladen, ändern und dann ersetzen.

Ok :slight_smile: Da kann ich dir leider auch nicht helfen. Wäre ja auch nur als Test gewesen, damit wir sicher wissen, ob es daran liegt. Bei einem Update durch Thorsten werden die Änderungen eh wieder überschrieben. Also muss das, falls es daran liegt, sowieso jemand bei ihm im GIT ändern.

Hast du mal die anderen Funktionen durchprobiert? Funktionieren die alle? Und hattest du beim NEXT-Test auch die Sonos am Abspielen, sonst kommt der Fehler auch, weil er NEXT nur machen kann, wenn er auch etwas abspielt und danach noch etwas in der Playlist ist.

Edit: Aber da die Sonos v5.5 vom Sonos Beta 6 Zweig kommt, ist die eh doof und hat die gleichen Bugs wie die Beta 6…sehr unschön… Und Bug-Reports interessieren Sonos nicht, die werden einfach geschlossen, ohne überhaupt eine Antwort oder eine weitere Antwort zu bekommen…

Grüße,
Chris

Hi,

Ich verwende die aktuelle Software. (Version 5.5; Build 29693270), und damit geht SNS_next(InstanceID); ohne Probleme.

Komisch.

Ich denke das ist es.
Wenn ich auf dem letzen Lied eine Liste bin, bekomme ich den gleichen Fehler:


Fatal error:  Uncaught exception 'Exception' with message 'Error sending command: HTTP/1.1 500 Internal Server Error
CONTENT-LENGTH: 347
CONTENT-TYPE: text/xml; charset="utf-8"
EXT: 
Server: Linux UPnP/1.0 Sonos/29.6-93090 (ZPS1)
Connection: close

s:ClientUPnPError' in /usr/share/symcon/modules/SymconSonos/Sonos/sonos.php:634
Stack trace:
#0 /usr/share/symcon/modules/SymconSonos/Sonos/sonos.php(340): PHPSonos->sendPacket('POST /MediaRend...')
#1 /usr/share/symcon/modules/SymconSonos/Sonos/module.php(389): PHPSonos->Next()
#2 /usr/share/symcon/scripts/__generated.inc.php(63): Sonos->Next()
#3 /usr/share/symcon/scripts/31250.ips.php(3): SNS_Next(31596)
#4 {main}
  thrown in /usr/share/symcon/modules/SymconSonos/Sonos/sonos.php on line 634

Könnte man, ja, bis zum nächsten Update,
Aber das wird nichts bringen. CONTENT-LENGTH gibt die länge des steuernden Elements an. Und das mitgesendete XML hat nun mal 250 Zeichen.
Oder ich habe da etwas grob falsch verstanden…

Gruß,
Thorsten

Hallo zusammen,

so, meine Frau war beim Elternabend im Kindergarten, da war mir langweilig :smiley:

Es gibt jetzt eine neue Funtion: SNS_PlayFiles(InstanceID: Integer, files: Array)
Also z.B.


SNS_PlayFiles(17265, Array( "//ipsymcon.fritz.box/sonos/bla.mp3",
                                                        "//ipsymcon.fritz.box/sonos/blubb.mp3"));

oder wenn man nur eine Datei abspielen will


SNS_PlayFiles(17265, Array( "//ipsymcon.fritz.box/sonos/laber.mp3" ));

Alle Dateien im Array werden dann nacheinander abgespielt, und jetzt kommts…danach wird die vorher aktive Wiedergabe an der gleichen Stelle fortgesetzt.:eek:
Wenn vorher nichts lief, ist es danach auch still.
Wenn die Instanz auf der die Datei abgespielt wird in einer Gruppe war, wird sie für die Zeit der Ansage aus der Gruppe genommen, und danach wieder reingehängt.
Wenn die Instanz der Gruppenkoordinator ist, kommt die Ansage auf allen Mitgliedern der Gruppe.

Evtl. werde ich noch einen optionalen Parameter einführen, der die Lautstärke anhebt.
Allerdings war mir das jetzt auf die schnelle zu kompliziert wegen der Gruppen und so.

Das Erzeugen der Dateien würde ich erstmal über eine der vorhandenen Bausteine machen.
Vielleicht kommen ja bald noch Module dafür :wink:

Feedback erwünscht.

Gruß,
Thorsten

Moin Thorsten :slight_smile:

Mit der Content-Legth…so hab ich das an sich auch gedacht. Aber schau mal in mein SonosBY, da muss ich bei unterschiedlichen Sonos-Versionen unterschiedliche Längen angeben, obwohl der Content gleich bleibt. Ich kann dir nicht sagen warum das so ist, aber mache ich es nicht, dann bekomm ich den erwähnten Fehler :confused:

Bzgl. alte Playlist/Lautstärke merken und nach dem Abspielen einer Sprachausgabe wiederherstellen kannst du ebenfalls mal einen Blick bei mir rein werfen. Da habe ich die Funktionen „$AlterZustandAR = SonosBY_AltenZustandLesen();“ für das auslesen aller Infos aus den Sonos Playern in ein Array und die Funktion „SonosBY_AltenZustandSetzen($AlterZustandAR);“ zum Wiederherstellen der gespeicherten Infos. Eventuell könnte man diese Infos auch in einer Hilfs-Variable zwischenspeichern, damit diese nicht nur während der Skriptlaufzeit verfügbar sind.

Grüße,
Chris

Hi,

hab´s gerade mal auf ´nem RasPi installiert und krieg den obigen Befehl nicht zum Laufen, wie muss der Parameter 2 aussehen?

0, 1, On, Off, on, off, true, false, True und False wollen nicht.

Wenn ich dann allerdings die Zeile 444 in der module.php betrachte kommt doch irgend wie der Verdacht auf:
könnte es sein dass meine alten Gurken (2x ZP90 und 1x LS120) das nicht unterstützen??

mfg

BerndJ

Hi Bernd!

Ich habe auch einen Sonos ZP90 (CONNECT und ZP90 sind doch das gleiche Produkt?!) und bei dem kann ich MUTE verwenden. Ich habe zwar nicht dieses Modul hier im Einsatz, aber der SOAP Befehl wird identisch sein.

Grüße,
Chris

Hi Chris,

mag zwar sein, aber:

Fehlermeldung
This function is not enabled for this instance

Im Zweifelsfall kann ich ja die Lautstärke auf 0 setzen.

Nur der Aufruf:

SNS_PlayFiles(51668, Array( „//usr/share/symcon/media/dog.mp3“));

erzeugt:

<br />
<b>Fatal error</b>: Uncaught exception ‚Exception‘ with message 'Error sending command: HTTP/1.1 500 Internal Server Error
CONTENT-LENGTH: 347
CONTENT-TYPE: text/xml; charset=„utf-8“
EXT:
Server: Linux UPnP/1.0 Sonos/29.6-93090 (ZP90)
Connection: close

s:ClientUPnPError’ in /usr/share/symcon/modules/SymconSonos/Sonos/sonos.php:650
Stack trace:
#0 /usr/share/symcon/modules/SymconSonos/Sonos/sonos.php(446): PHPSonos->sendPacket(‚POST /MediaRend…‘)
#1 /usr/share/symcon/modules/SymconSonos/Sonos/module.php(390): PHPSonos->SetAVTransportURI(‚x-file-cifs:usr…‘)
#2 /usr/share/symcon/scripts/__generated.inc.php(98): Sonos->PlayFiles(Array)
#3 /usr/share/symcon/scripts/14054.ips.php(6): SNS_PlayFiles(51668, Array)
#4 {main}
thrown in <b>/usr/share/symcon/modules/SymconSonos/Sonos/sonos.php</b> on line <b>650</b><br />

wobei ich vorher den Radiostream laufen hatte und die mp3 Datei im symcon/media Verzeichnis des RasPi liegt.

mfg

BerndJ

Hallo Thorsten,

ich habe versucht das Skript von Chris auf meinem Raspberry zum laufen zu kriegen.
Mir geht es hier in erster Linie um die „Text to speech“ Funktion.
Leider war ich erfolglos. Es wird zwar ein Google mp3-File auf dem Raspberry abgelegt, welches ich auch auf der Sonos-App sehen und auch abspielen kann, aber der direkte Zugriff des SonosBY.ips.php funktioniert leider nicht.

Kann Du mir sagen, ob es auf dem Raspberry mittelfristig möglich sein wird diese „Text to speech“ Funktion über eine Sonos Box zu realisieren?

Gruß

Axel

Hallo BerndJ,

bei mir funktioniert die Ausgabe einer MP3 Datei, wenn ich ein „NAS“ also ein Netzlaufwerk nutze.
Als Beispiel: - //192.168.100.100/meine/sound/datei.mp3 - wenn ich die MP3 auf dem Pi selbst habe
wie Du beschrieben hast bekomme ich die gleiche Meldung.
Voraussetzen muss ich das ich keine Samba freigabe auf dem Raspi installiert habe.
Gehe davon aus das es daran liegt, Problem mein NAS lässt die Platten nach x Zeit einschlafen.
Bemerkt habe ich das es dann nicht reibungslos funktioniert, der Radiostream schaltet sich ab
es wird still und der Radiostream kommt wieder ohne die MP3 abzuspielen.

Funktion ist so OK

SNS_PlayFiles(12345, Array( "//192.168.100.100/meine/sound/datei.mp3" ));

Wobei auf dem 192.168.100.100 die Samba Freigabe liegt

Glück Auf, D.Voss

Hallo Bernd,

du musst über eine Netzwerkfreigabe gehen, da Sonos ja einen Zugriff auf die Datei habe muss.
Ich mache es auch über ein Samba Freigabe.

@Axel,
Ich habe da noch ein Zusatz Modul gebaut, welches bei einem bestimmten Ereignis eine „Alarm Datei“ abspielt,
IPS merkt sich die alte Lautstärke und Radiosender, setzt neue Lautstärke und spielt die Datei ab, setzt alte Lautstärke und spielt den alten Radiosender weiter.
Das könnte auch mit „Text to speech“ Funktion gehen, man müsste das Modul halt erweitern.

Zu finden : git://icy.my-router.de/Ts_Module
Bitte in Kern Instanzen - Modules eintragen. Dort nach TS_SonosAlarm schauen.
Es sind aber noch andere Module enthalten…

lg Thomas

Hallo
Im Modul werden nicht alle Radio Sender Angezeigt um diese als Favorit einzustellen.
Mfg Stefan

Hallo,

das wird das Pronlem sein. symcon/media ist das Verzeichnis vom WebServer. Leider kann Sonos keine MP3 Dateien vom einem WebServer abspielen. Zumindest habe ich noch nicht herausgefunden wie. Ich lasse mich aber gerne eines besseren belehren,
Dafür braucht man einen Samba Share (Also muss z.B. von Windows aus per „\<server>&lt;Pfad>“ erreichbar sein.

Nicht nur mittelfristig, sondern sofort.

Voraussetzungen:

  1. Ein lokal zugreifbarer Share Via Samba.
    Ich habe auf dem Raspi einfach einen Samba Server installiert, der /data/sonos als „\ipsymcon.fritz.box\sonos“ exponiert.
    Wie man das Einrichtet findet man z.B. hier: Raspberry Pi: Samba Server installieren » Jan Karres (Keine Ahnung wie gut die Beschreibung ist, aber es ist eigentlich recht einfach)

  2. Eine funktionierende TTS Version.
    Da gibt es hier viele Angebote. Ich nutze derzeit noch die Google API.

Und so geht es:

  1. Per TTS eine Datei erzeugen
  2. In das Samba Verzeichnis (bei mir z.B. /data/sonos/datei.mp3) schreiben.
  3. per SNS_PlayFiles abspielen (z.B. SNS_PlayFiles(<InstanceID>, Array( „//ipsymcon.fritz.box/sonos/datei.mp3“ )); )

Sollte recht einfach sein. Wenn nicht einfach noch mal fragen.

Gruß,
Thorsten

Hallo,

diese Meldung kommt, wenn in der Config der Haken für die Funktion nicht gesetzt ist.
In diesem Fall also „Mute“.
Mute.png

Gruß,
Thorsten

Hallo,

oops, da muss ich unbedingst daran denken, die form.json auch anzupassen, wenn ich einen Radiosender hinzufüge…:rolleyes:

Ist jetzt erledigt.

Gruß,
Thorsten

Hallo nochmals,

mein letzter Post für heute :rolleyes:

Ich habe mal noch etwas Doku in die README.md im Git geschrieben:
SymconSonos/README.md at master · tkugelberg/SymconSonos · GitHub

Bei so etwas bin ich immer über verbesserungswünsche froh.

Ach ja, und ich habe mich zu Englisch durchgerungen, da paresy bei den Namen auf dem Instance config formular auch auf Englisch bestanden hat…

Gruß,
Thorsten

Abend!

Was mir beim Lesen aufgefallen ist…alles ist in Englisch, nur die Wörter „Testumgebung“ und „Weiter“ sind im Screenshot auf Deutsch :wink:

Grüße,
Chris