Ich steuere meine Sonos Player mittlerweile recht erfolgreich mithilfe eines kleinen PHP Skriptes, daß ich mal auf die schnelle geschrieben habe, über den Gira Homeserver. Damit kann man feine Dinge anstellen wie z.B. Radio An/Aus oder die Lautstärke auf einzelne Taster legen. Oder alle Radios beim Abschließen der Haustüre mittels eines Riegelschaltkontaktes ausgehen lassen.

Ich habe mich hauptsächlich der PHP – Sonos Klasse bedient, welche hier zu finden ist. Diese wurde von mehreren Leuten schon erweitert und mit allerhand Funktionen bestückt. Darum habe ich mir einen Wrapper gebaut, der die für mich relevanten Funktionen zur Verfügung stellt (die index.php). Dort müssen auch die einzelnen Player inkl. deren IP-Adresse eingefügt werden. Die Player verwenden normalerweise DHCP und müssen mittels DHCP Reservierungen auf feste IP Adressen gebracht werden.

Das Interessante ist, das mit diesem Script die Player auch ausgelesen werden und damit Funktionen wie Toggle Play / Pause oder Volume Up unabhängig deren letzten Status realisiert werden können (man muss nicht 2 x auf die Taste drücken weil der Player zwischenzeitlich mit einem anderen Gerät gesteuert wurde). Es können auch Ansagen abgespielt werden. Dabei wird das laufende Programm unterbrochen, die Ansage abgespielt und anschließend das Programm an der unterbrochenen Stelle wieder fortgesetzt.

Zur Installation einfach die beiden Dateien index.php und PHPSonos.inc.php auf einen PHP-fähigen Webserver kopieren. In der index.php die Player zusammen mit Ihrer IP-Adresse in das $zones Array (Zeile 13) eintragen. Zum Testen kann das Script einfach im Browser aufgerufen werden:

http://deinWebserver/Pfad/zum/Script/index.php?zone=NameDerZone&do=TogglePlayStop

Dieser Aufruf ist an die Gegebenheiten anzupassen.

Die zur Verfügung stehenden Funktionen findet man in der index.php im $_GET[‚do‘] switch ab Zeile 24. Die Interessantesten dürften sein:

index.php?zone=MeineZone&do=TogglePlayStop: schaltet um zwischen Play und Pause
index.php?zone=MeineZone&do=VolumeUp: Lautstärke wird pro Aufruf um 1 erhöht
index.php?zone=MeineZone&do=VolumeDown: Lautstärke wird pro Aufruf um 1 vermindert
index.php?zone=MeineZone&do=sendMessage&MesageId=1&Volume=30: Programm wird unterbrochen und Nachricht mit der ID 1 wird abgespielt. Die gewünschte Lautstärke wird über den Parameter Volume übergeben. Der Pfad zu den Nachrichten ist in Zeile 222 in der index.php anzupassen. Der Ordner muss vom Sonos aus erreichbar sein. Die Datei muss in folgendem Format dort gespeichert sein: MessageId.mp3 macht dann z.B. 1.mp3

Im Homeserver eine Webseitenabfrage wie auf den Screenshots dargestellt erstellen:

Es gibt eine neue Version: http://trautner.net/547-sonos-mit-gira-homeserver-steuern-neue-version

Image: „Home Automation“ (CC BY-NC-SA 2.0) by  multimedia_tech

Sortiert nach:   neuste | älteste | beste Bewertung
Marc Tegtmeyer
Gast

Hallo,
bisher habe ich auch mit Scripten und Sonos gearbeitet. Was hier beschrieben ist, ist aber um längen besser als meine Installation…
Radio hören und die Sendung wir unterbrochen von „Es klingelt jemand an der Tür.mp3“ 😉
Das habe ich immer gesucht, vielen Dank. Werde heute abend mal ein bisschen installieren….
Gruß Marc

Marc
Gast

Hi,
alles installiert, und klappt super. Ich hatte vorher verschiedene Skripte gebastelt, jetzt brauche ich nur noch die 2. Laut&Leiser ist super…

Nur ein Problem;-)
Ich bekomme die Klingel nicht an Laufen. Es wurde ein 1.mp3 erstellt und es dem Script zugewiesen.
Leider funktioniert es nicht…

Mir sind verschieden Strings aufgefallen MessageId und MesageId. Ist richtig?

Ich habe alle Mesage nach dem Test in Message geändert, bring auch nix.
$sonos->AddToQueue(„x-file-cifs://srv01/Music/Sprachmeldungen/$MessageId.mp3“);

Kann mir jemand helfen.

Vielen Dank und Gruß aus Halver
Marc

Marc
Gast

Juhuu, vielen Dank, klappt alles 🙂

Marc Tegtmeyer
Gast

Ich habe einen Klingelton bzw. Mp3 was abgespielt wird, wenn jemand an der Tür ist.

MC
Gast

Toll. Das sind ja super Features. Kann man vielleicht auch im Sonos-System gespeicherte Playlisten auslesen und (vielleicht als m3u) abspeichern?

Thomas Keller
Gast

Hallo

Funktioniert einwandfrei und stabil.Habe auf einem IIS PHP installiert und die Scripts kopiert.
Bisher hatte ich Barix im Einsatz. Eine Audioeinblendung musste ich über VB6 auf einem separaten System ausführen.

Habt Ihr für Playlisten oder Radio Favoritenanwahl schon was ausgebaut?

Vielen Dank und Gruss
Thomas

Thomas Keller
Gast

Hi Thomas

Habe unerwartet doch noch ein Problem mit dem Aufruf MessageID bekommen. Hat alles perfekt funtioniert.
Seit gestern bekomme ich immer eine Fehlermeldung nach Aufruf mit Messageid. (500 Serverresourcen nicht gefunden.)
Dies tritt nur auf wenn eine Radioquelle beim ZP aktiviert ist. Wenn in der Liste ein MP3 Song aktiviert ist funktioniert alles perfekt.
Hast du noch einen Tip was da passiert ist?

Vielen Dank und Gruss
Thomas

Thomas
Gast

Hallo Thomas
Vielen Dank im voraus.
Habe im Script noch gelesen, das bei Radio Stream die Mac-Adresse noch eine Rolle spielt. Habe nicht ganz verstanden wo ich diese mitgeben sollte.

Hoffen wir auf einen neuen Release.

Gruss Thomas

Thomas
Gast
Hallo Thomas Zuerst einmal vielen Dank für den neuen Script. Kämpfe noch mit den Details DB habe ich angelegt und die 4 Radiostationen erfasst. Bekomme aber mit der Funktion nextRadio immer folgende Fehlermeldung Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\sonos.php on line 230 Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\sonos.php on line 247 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/14.4-33290 (ZP90) Connection: close s:ClientUPnPError‘ in C:\xampp\htdocs\PHPSonos.inc.php:502 Stack trace: #0 C:\xampp\htdocs\PHPSonos.inc.php(56):… Read more »
Marc
Gast
Huhu, jetzt kämpfe ich auch ein bisschen mit dem Radiosendern. Habe auf meiner Qnap mysql installiert. Tabelle und Radiosender angelegt lt. index.php. Nun erhalte ich den Fehler: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /share/MD0_DATA/Qweb/index.php on line 216 Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /share/MD0_DATA/Qweb/index.php on line 224 Fatal error: Call to undefined function l_query() in /share/MD0_DATA/Qweb/index.php on line 239 Hier meine Tabelle: radiostation Anzeigen Struktur Suche Einfügen Leeren Löschen 4 MyISAM latin1_swedish_ci 2,2 KiB – settings Anzeigen Struktur Suche Einfügen Leeren Löschen 0 MyISAM latin1_swedish_ci 1,0 KiB –… Read more »
Marc
Gast
Vielen Dank für die Info, habe eine 1 in die Tabelle gepackt. Jetzt folgt der Fehler: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /share/MD0_DATA/Qweb/index.php on line 217 Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /share/MD0_DATA/Qweb/index.php on line 225 Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in /share/MD0_DATA/Qweb/index.php on line 242 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/14.4-33290 (ZPS5) Connection: close s:ClientUPnPError‘ in /share/MD0_DATA/Qweb/PHPSonos.inc.php:502 Stack trace: #0 /share/MD0_DATA/Qweb/PHPSonos.inc.php(56): PHPSonos->sendPacket(‚POST… Read more »
wpDiscuz