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
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
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
Hi Marc,
freut mich, dass es bei dir funktioniert. Zu deinem Problem: Das mit dem String (MesageId) habe ich gesehen, stellt aber keinb Problem dar, da ich das s durchgängig vergessen habe. Wenn du die Variable geändert hast, musst du auch den Aufruf nach MessageID ändern: index.php?zone=MeineZone&do=sendMessage&MessageId=1. Deine Nachricht muss unter dem Namen der aufgerufenen MessageID abgespeichert sein, z.B.: 1.mp3. Des weiteren musst du in der von dir beschriebenen Zeile den Pfad zu deiner Nachricht anpassen. Dieser muss auch zwingend von deinem Sonos aus erreichbar sein. Dies kannst du am besten testen, in dem du versuchst diese Nachricht direkt mit Sonos abzuspielen. Dann ist sichergestellt, das dein Sonos darauf Zugriff hat. Wenn das alles passt, kannst du das Script zum Testen auch direkt im Browser aufrufen: index.php?zone=MeineZone&do=sendMessage&MesageId=1.
Hallihallo,
ich hatte alle Änderungen wie oben schon verändert. Leider komme ich nicht weiter. 1.mp3 habe ich in einen Verzeichnis gepackt und Sonos hat es indiziert, wird auch von Sonos in der Playlist abgespielt.
Mein Aufruf im Browser ist:
http://qnap/index.php?zone=Kueche&do=sendMessage&MessageId=1
Hast du noch einen Tip? Anbei meine index.php
Vielen Dank und Gruß
Marc
-Script entfernt-
Hi Marc,
ich habe den Fehler gefunden *schäm*. Der Aufruf war nicht vollständig. Der korrekte Aufruf der Funktion lautet:
index.php?zone=Kueche&do=sendMessage&MessageId=1&Volume=30
Du musst noch die gewünschte Lautstärke (Wert zwischen 0 und 100) mitgeben. Ich werde es oben im Beitrag auch gleich noch ändern.
Juhuu, vielen Dank, klappt alles 🙂
Super,
freut micht, wenn alles klappt. Interessehalber: Für welche Nachrichten nutzt du es?
Ich habe einen Klingelton bzw. Mp3 was abgespielt wird, wenn jemand an der Tür ist.
Auch nicht schlecht. So eine Art High-End Multiroom-Klingel 🙂 Meine melden aktuell „Die Waschmaschine ist fertig“. Mit dem Trockner klappt es noch nicht so ganz 🙁
Toll. Das sind ja super Features. Kann man vielleicht auch im Sonos-System gespeicherte Playlisten auslesen und (vielleicht als m3u) abspeichern?
Hi, komplette Playlisten habe ich bisher nicht als Kommando, ich meine aber das es schon mit anderen Tools wie z.B. sonosweb ausgelesen wurde, sollte also möglich sein.
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
Hi Thomas,
freut mich, dass es bei dir läuft.
>Habt Ihr für Playlisten oder Radio Favoritenanwahl schon was ausgebaut?
Was schwebt dir hier vor?
Viele Grüße
Thomas
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
Ich habe vor einer Weile an dem Script gebaut, da es bei mir mit den Messages auch Probleme gab (weiß aber leider nicht mehr genau warum, ist schon eine Weile her). Ich schaue, dass ich die neue Version hier die Tage online stelle. Dann kannst du es damit mal probieren.
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
Hi Thomas,
du meinst, wenn du einen Radio Stream einstellen willst? Die brauchst du nicht, bzw. kannst du mit der Funktion $sonos->SetRadio einen Radiosender ohne Angabe der Mac-Adresse einstellen.
In meinem Script gibt es auch noch die Funktion nextRadio(); Damit kannst du deine Radiosender in einer Datenbank speichern und bequem durchzappen (nutze ich auf einem Taster im Bad und in der Küche).
Ich habe die Version oben gegen die aktuelle ausgetauscht. viel Spaß beim testen.
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): PHPSonos->sendPacket(‚POST /MediaRend…‘) #1 C:\xampp\htdocs\sonos.php(250): PHPSonos->Play() #2 C:\xampp\htdocs\sonos.php(87): nextRadio() #3 {main} thrown in C:\xampp\htdocs\PHPSonos.inc.php on line 502
Hast du eine Idee was hier falsch läuft ?
Gruss Thomas
Wie du ja schon per Email geschrieben hast lag es an einer leeren MySQL-Tabelle.
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 –
2 Tabellen Gesamt 4 MyISAM hp8_bin 3,2 KiB 0 Bytes
markierte: Alle auswählen / Auswahl entfernen
vollständige Textfelder id radio url
Bearbeiten Löschen 1 Radio7 players.creacast.com/creacast/radio7/playlist.m3u
Bearbeiten Löschen 2 SWR3 mp3-live.swr3.de/swr3_m.m3u
Bearbeiten Löschen 3 Donau3FM server1.webradiostreaming.de:2640
Bearbeiten Löschen 4 Bayern3 http://streams.br-online.de/bayern3_2.asx
Hat jemand eine Ahnung wo der Fehler liegt. Vielen Dank und ein schönes Wochenende. Marc
Hi Marc,
das liegt vermutl. daran, dass bei dir in der Tabelle settings noch nichts drin steht. Dort wird der zuletzt gehörte Radiosender gespeichert. Schreib da z.B. mal eine 1 rein, dann müsste es gehen:
INSERT INTO `settings` (`act_id`) VALUES (1);
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 /MediaRend…‘) #1 /share/MD0_DATA/Qweb/index.php(245): PHPSonos->Play() #2 /share/MD0_DATA/Qweb/index.php(82): nextRadio() #3 {main} thrown in /share/MD0_DATA/Qweb/PHPSonos.inc.php on line 502
Hast Du noch eine Idee?
Hi Marc,
verdammt schwierig ohne aussagekräftige Fehlermeldung zu debuggen. Hast du ein PHPmyadmin am laufen? Dann den Query am besten dort mal testen und schauen was du für eine Fehlermeldung bekommst:
SELECT s.act_id, MAX(r.id) AS max_id FROM settings s, radiostation r
Moinmoin,
vielen Dank für die Info. Ich habe Phpmyadmin auf der Qnap installiert. Ich habe diesen Befehl: #1140 – Mixing of GROUP columns (MIN(),MAX(),COUNT(),…) with no GROUP columns is illegal if there is no GROUP BY clause
auf der Datenbank „sonos“ ausgeführt, die Antowrt war:
#1140 – Mixing of GROUP columns (MIN(),MAX(),COUNT(),…) with no GROUP columns is illegal if there is no GROUP BY clause
Gruß Marc
Hi,
dann scheint dein MySQL Server wohl etwas strikter eingestellt zu sein und schon bei leichteren vergehen zu maulen. Ersetze mal den Query im Script damit:
SELECT s.act_id, MAX(r.id) AS max_id FROM settings s, radiostation r GROUP BY s.act_id
Dann sollte es eigentlich gehen.
Vielen Dank, bin jetzt einen Schritt weiter:
Zeige Datensätze 0 – 0 (1 insgesamt, die Abfrage dauerte 0.0030 sek.)
Jetzt habe ich die Fehlermeldung:
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(410): PHPSonos->sendPacket(‚POST /MediaRend…‘) #1 /share/MD0_DATA/Qweb/index.php(244): PHPSonos->SetRadio(‚Bayern3‘, ‚x-rincon-mp3rad…‘) #2 /share/MD0_DATA/Qweb/index.php(82): nextRadio() #3 {main} thrown in /share/MD0_DATA/Qweb/PHPSonos.inc.php on line 502
Hast Du evtl. noch ein Idee,
vielen Dank
Marc
Hi Marc,
sorry für die späte Antwort, bin momentan gerade viel unterwegs:
Die Funktion an sich funktioniert jetzt aber? Dann würde ich die Fehlermeldung gerne auf später aufschieben, ich denke es ist nur eine Unschönheit (falsche Content Länge).
Hallo Thomas
Habe das selbe Problem (Script liegt auf einer Synolgy-DiskStation), hast du einen Lösungsansatz – die Funktion ist einfach zu sexy…
Danke
Stefan
Servus Thomas, tolle Sache!!
Hab jedoch noch ein paar kleine Fragen:
Im Script gibt es auch den Befehl Volume, um direkt einen Wert an den Player zu senden. Leider krieg ich das nicht hin, wenn ich:
http://192.168.120.100:9050/Sonos/index.php?zone=Wohnzimmer&do=Volume=10 eintrage kommt die Meldung „Wrong Command“ schreibe ich
http://192.168.120.100:9050/Sonos/index.php?zone=Wohnzimmer&do=Volume dann meldet das Script „Wrong Volume“.
Ich hab auch noch ca. 10 andere Varianten probiert, leider ohne Erfolg. Ich hab auch schon alle Arten von Klammern probiert, da im Script auch Klammern angegeben sind.
Weiters: Kann man eine im Sonos Controller gespeicherte Playliste per Befehl aufrufen? In der Squeezeboxwelt geht das mit Playlist Play. Dann kann man diese per Bustaster dynamisch aufrufenlassen. Z.B. um Oldies zu Spielen wenn der Papa Duschen geht, der Sohnemann zieht sich die Liste Techno rein. Die Playlisten kann man bequem im Controller erstellem.
Hi Martin,
freut mich, dass es dir gefällt. Die korrekte Syntax für das Anfahren einer definierten Lautstärke lautet:
http://192.168.120.100:9050/Sonos/index.php?zone=Wohnzimmer&do=Volume&Volume=10
Mit Playlisten habe ich bis jetzt noch nichts gemacht.
Vielen Dank, Lautstärke setzen funktioniert.
So, nun kämpfe ich mit dem Radioaufruf:
case ‚Test‘:
$sonos->ClearQueue();;
break;
zum Testen, wenn ich einen case „TEST“ anlege funktioniert.
wenn ich das nun ändere um einen Radiosender anzuwählen z.B.:
case ‚Test‘:
$sonos->SetRadio(Martin, „x-rincon-mp3radio://http://streams.br-online.de/bayern3_2.asx“);
$sonos->Play();
break;
oder
case ‚Test‘:
$sonos->SetRadio(‚Martin‘, „x-rincon-mp3radio://’http://streams.br-online.de/bayern3_2.asx'“);
$sonos->Play();
break;
und noch etliche andere Varianten (samt php Server Absturz) durchteste, ich komm leider nicht dahinter!
Weiters hab ich gesehen, dass es auch eine „$sonos->SetQueue“ gibt. Kann man nicht damit eine Playlist aufrufen?
Wäre dir einerseits für deine Hilfe bei meiner Erarbeitung der Probleme (ich will ja auch was lernen)dankbar , andererseits stelle ich die Frage, ob du mir gegen Aufwandsentschädigung folgende Funktionen realisieren könntest: Aufruf einer gespeicherten Playlist, Aufruf eines gespeicherten Radiosenders. Mit „gespeichert“ meine ich die Einträge im Sonos Controller. Den Rest könnte ich ja im Script dann selber erstellen.
lg. Martin
Hi Martin,
ich habe dich nicht vergessen, bin jedoch im Moment sehr beschäftigt und komme leider nicht dazu dir zu helfen.
Hallo Martin,
vielleicht kann ich weiterhelfen …
x-rincon-mp3radio://streams.br-online.de/bayern3_2.asx
lg FTZ
Sieht so aus:
//$sonos->SetQueue("x-rincon-queue:RINCON_"."HIER DIE MAC DES PLAYERS ZB: FFEEDDCCBBAA"."01400#0"); //Playlist auswählen (Nötig, wenn Radio vorher ausgewählt war)
Radioaufruf ist doch mitsamt DB-Anbindung schon im Script enthalten. Einfach eine MySQL Datenbank mit den Radiosendern anlegen.
Wenn du direkt einen Radiosender aufrufen willst, lautet die Syntax wie in Zeile 242:
$sonos->SetRadio($radio, "x-rincon-mp3radio://$url");
$url must du mit der Url deines Radiosenders ersetzen
Danke, aber wie muss denn die komplette Befehlszeile dann ausschauen?
so z.B:
$sonos->SetRadio(x-rincon-mp3radio://streams.br-online.de/bayern3_2.asx);
oder gehört da noch was dazu? wie ‚ oder “
ich kann das leider erst morgen am abend testen
lg. Martin
So, nun hab ich das getestet. Der Befehl lautet korrekt:
$sonos->SetRadio(„x-rincon-mp3radio://URL_DES_SENDERS“, „ANGEZEIGTER_NAME“);
z.B.:
$sonos->SetRadio(„x-rincon-mp3radio://www.antenne.de/webradio/channels/das-schlager-karussell.m3u“, „Schlager“);
ohne den Eintrag „ANGEZEIGTER_NAME“ gibts nämlich eine Fehlermeldung.
Ein $sonos->Play();
hab ich auch noch drangesetzt.
Ich hoffe irgendjemand kann das irgendwann mal brauchen!
So nun zu „$sonos->SetQueue“ , wie oben beschrieben braucht man das um die aktuelle Playliste nach dem Radiobetrieb wieder anzusteuern. Jedoch habe ich das nicht gemeint, Ich möchte einfach eine benannte Playliste aus dem Bereich „Sonos-Playlisten“ per Befehl aufrufen. Damit könnte man dann seine Playlisten im Sonoscontroller ganz einfach anlegen und dann per Tastendruck z.B.: Oldies aufrufen.
Vielleicht hat da mal jemand eine Idee.
lg. Martin
Mit der aktuellen Klasse:
$sonoslists=$sonos->GetSONOSPlaylists();
print_r($sonoslists); // DEBUG
foreach($sonoslists as $sonoslist)
{
if ($sonoslist[‚title‘]==’Testlist‘) {
echo („Starting: „.urldecode($sonoslist[‚file‘]).“…\n\r“);
$sonos->SetQueue(urldecode($sonoslist[‚file‘]));
}
}
$sonos->Play();
Grüße, Benjamin
Hi, schonmal vielen Dank für das Skript, läuft super! bräuchte allerdings noch folgende Funktion: gerät soll auf den audioeingang schalten. Ist so ein Befehl irgendwie möglich?
Ja, das geht so:
http://www.ip-symcon.de/forum/f53/php-sonos-klasse-ansteuern-einzelner-player-7676/index7.html#post115268
Hallo!
Versuche mich nun schon seit geraumer Zeit an dem Script leider läuft es bei mir aber alles andere als rund. Die Mute Funktion bringt mir nur die Fehlermeldung „undefined Index Mute“ beim Rest sieht es zwar so aus als ob es durchläuft, meine Sonos Komponenten reagieren aber nur ab und an darauf. Kennt jemand diese Phänomen?
Grüße René
Hi,
super script! Vielen Dank. Hat jemand eine Lösung zur nicht funktionierenden Mute Funktion gefunden?
Beste Grüße
Jürgen
Hallo
Erstmal Danke für das Script!
Frage: ist ein Aufruf der Radiosender auch ohne DB möglich? Ist die DB zwingend?
Danke
Pat
Hi Pat,
zwingend erforderlich ist die DB keineswegs. Du musst das Script dann halt umschreiben und die Sender z.B. in einem Array oder einer Textdatei ablegen.
Hallo.
Aber ist es denn nicht möglich die Radiosender im Sonos direkt aufzurufen? Warum muss eine zus. Quelle (DB) vorhanden sein? Die Radio Quellen sind ja alle bereits im Sonos hinterlegt.
Oder verstehe ich hier was falsch?
Danke
Pat
Hi Pat,ich kenne keine Möglichkeit, SONOS mitzuteilen einen bestimmten Radiosender von den hinterlegten abzuspielen.
Viele Grüße
Thomas
Thomas,
ich habe noch das Problem bei den Messages. Einfügen und abspielen geht, jedoch wird die MP3 nicht mehr aus der Liste gelöscht. Beim erneuten aufrufen des Skriptes wird die MP3 dann nochmals und abermals in die Liste eingefügt (und natürlich alle abgespielt).
any ideas?
pat
Hallo,
die Radio Favoriten kann man mit der aktuellsten PHPSonos Klasse über die Funktion Browse abfragen.
So kann man beispielsweise den ersten Favoriten aufrufen:
$browselist = $sonos->Browse(„R:0/0″,“c“);
print_r($browselist); // DEBUG
$sonos->SetRadio(urldecode($browselist[0][‚res‘]));
$sonos->Play();
Viele Grüße, Benjamin
Hallo!
Nach einem Script wie diesem suche ich schon seit Wochen. Hatte mich anfangs durch das IP-Symcon-Forum gewühlt, bin aber nicht schlauer geworden.
Mir reicht es, meine einzelnen Player mittels URL-Aufruf zu starten oder zu stoppen. Das funktioniert mit Deinem Script ja schon mal super. Heißen dank dafür- war schon kurz vorm Aufgeben.
Ich würde nun gerne einen Radiosender ebenfalls per URL-Aufruf starten. Da ich nur einen Sender höre, brauche ich keine DB. Wie hinterlege ich diesen einen Stream in der index.php und mit welcher URL bringe ich die Player dann dazu, den Stream abzuspielen?
Gruß
Oli
Hi,
die Antwort zu deiner Frage steht weiter oben in den beiträgen. du wirst dazu das Script anpassen müssen:
Wenn du direkt einen Radiosender aufrufen willst, lautet die Syntax wie in Zeile 242:
$sonos->SetRadio($radio, "x-rincon-mp3radio://$url");
Hi Thomas,
ja, das hatte ich gelesen. Aber das kann doch unmöglich die URL sein, mit der ich dann letztendlich den Player dazu bringe, den Sender abzuspielen. Mit URL meine ich etwas nach dem Schema „http://localhost/sonos/index.php?zone=Kueche&do=TogglePlayStop“
Oli
Hi,
Wie bereits gesagt: Dazu wirst du das Script selbst anpassen müssen. Solch eine URL gibt es momentan nicht.
Jetzt hab ich’s verstanden. Danke.
Oli
Hallo Thomas
Super Sache mit dem Script. Habe aber Probleme mit dem Radioaufruf (MySQL Datenbank)
DB habe ich angelegt und die 4 Radiostationen erfasst. Bekomme aber mit der Funktion nextRadio immer folgende Fehlermeldung.
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/21.4-61160c (ZP120) Connection: close s:ClientUPnPError‘ in /mnt/disk1/sonos/htdocs/sonos/PHPSonos.inc.php:502 Stack trace: #0 /mnt/disk1/sonos/htdocs/sonos/PHPSonos.inc.php(410): PHPSonos->sendPacket(‚POST /MediaRend…‘) #1 /mnt/disk1/sonos/htdocs/sonos/index.php(240): PHPSonos->SetRadio(‚SWR3‘, ‚x-rincon-mp3rad…‘) #2 /mnt/disk1/sonos/htdocs/sonos/index.php(78): nextRadio() #3 {main} thrown in /mnt/disk1/sonos/htdocs/sonos/PHPSonos.inc.php on line 502
Alles andere krieg ich hin PLAY,STOP,VOLUME ….!Der Webserver und MySQL läuft auf einer Buffalo Linkstation.
memo
Hi,
schwierig dir hier Remote zu helfen, zumal ich diese Funktion selbst nicht nutze. Ich vermute mal, dass die Content Länge des Befehls nicht stimmt.
Hi
Das kapier ich nicht,also den Befehl führe ich mit http://192.168.0.129:100/sonos/index.php?zone=Wohnzimmer&do=nextRadio aus,und dann kriege ich diese Fehlermeldung.
Oder stimmt die Ausführung vom Befehl nicht?
Hi,
deine Ausführung stimmt. Kannst du mir bitte mal die Radiosender, die du in der DB angegeben hast mitteilen? Dann schau ich mir es hier einmal an.
Hallo Thomas
Ich meine den Fehler gefunden zu haben.Im index.php habe ich die folgende Zeile abgeändert
242 : $sonos->SetRadio(„x-rincon-mp3radio://$url“, „$radio“);
Danach hatte ich keine Fehlermeldungen mehr und die Umschaltung zwischen den Radiosendern (laut DB) funktioniert jetzt auch.
Jezt hab ich ein anderes Problem.Manche url Adressen von den Radiosendern funktionieren nicht beim
Sonos,kriege vom Sonos Fehlermeldungen wie ,Server nicht erreichbar od. Titel ist nicht korrekt codiert obwohl die url Adressen von der Homepage korrekt sind!Mit dem Iphone kann ich im Sonos-Favoriten umschalten,sehe aber nicht die url Adressen dort.
Hast du vieleicht eine Idee wie ich an die richtigen Adressen rankomme,oder gibt es mittlerweile eine
andere Möglichkeit direkt im Sonos Favoriten umzuschalten?
Hi, sorry, kann ich dir nicht wirklich weiterhelfen, da ich die Funktion eigentlich nicht mehr nutze. Kann evtl. sein dass es sich um Playlisten handelt. Dann ist unter der Url eine Datei hinterlegt, in der dann die urL zu Stream steckt.
Hallo zusammen!
Vorab: DANKE für diese gute Anleitung.
Ich bleibe jedoch schon am Anfang stecken. Habe die beiden Dateien auf meinen PHP-Webserver gepackt und die Index.php mit meinen Zonen angepasst.
Wenn ich im Browser jetzt aber zB http://192.168.178.24/index.php?zone=Stephan&do=TogglePlayStop auswähle tut sich gar nichts, das Browserfenster bleibt weiß und das Sonos-System bleibt stumm.
Gibt es eine Grundlage die offensichtlich übersehen habe?
Viele Grüße
Stephan Schommer
Bist du dir sicher, dass dein Sonos unter der angegebenen IP zu erreichen ist? Was anderes fällt mir momentan nicht ein. Dein Webserver kann die Sonos erreichen (Firewall o.ä.)?
Hi,
ich mal das Script schnell in 5 minten per Web Aufruf zum laufen gebracht. Bin begeistert!
Kann man die erhöhung der Volume steuern? also nicht um 1 erhöhen pro Tastendruck sondern um 2 oder 3 oder 4?
index.php?zone=MeineZone&do=VolumeUp: Lautstärke wird pro Aufruf um 1 erhöht
Gruß
Andreas
Hi,
du wirst dafür das Skript anpassen müssen. Als Schnellösung kannst du folgende Stelle im Skript suchen und die Zahl deinen Wünschen anpassen:
$volume += 1;
Grüße
Thomas
Hi, ich bekomme GetMute nicht zum laufen. Hat das jemand schon hinbekommen ?
Wenn ja, wie ?
Hi,
ich versuche seit längerem die Datenbank in Betrieb zu nehmen zur Wiedergabe von Radiosendern.
Der Datenbankzugriff funktioniert und die Datenbank ist auch korrekt beschrieben.
Beim Aufruf von […]/do=nextRadio sollte nun einer der Radiosender aufgerufen werden (URL’s sind getestet), jedoch erhalte ich diese Fehlermeldung:
„Beim Abrufen von http://IP/Sonos/index.php?zone=Wohnzimmer&do=nextRadio ist auf der Website ein Fehler aufgetreten. Möglicherweise wird sie gerade gewartet oder ist falsch konfiguriert.“
Da ich den Fehler Serverseitig (Apache2, php5, debian wheezy) vermutete habe ich getestet (ohne Erfolg):
– Erhöhen von memory_limit
– Prüfen von mod_rewrite
Hat jemand eine Idee wo der Fehler liegt?
Vielen Dank im Voraus und danke für das Skript: alles andere was ich getestet habe oder selbst geändert habe läuft super!
Hi,
schalte in PHP die Fehlerausgabe ein, dann solltest du eine aussagekräftige Fehlermeldung bekommen
Dadurch konnte ich zumindest einige Warnings aufheben und komme zu folgender Fehlermeldung:
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/22.0-65180b (ZPS3) Connection: close s:ClientUPnPError‘ in /var/www/Sonos/PHPSonos.inc.php:509 Stack trace: #0 /var/www/Sonos/PHPSonos.inc.php(417): PHPSonos->sendPacket(‚POST /MediaRend…‘) #1 /var/www/Sonos/index.php(246): PHPSonos->SetRadio(‚SWR3‘, ‚x-rincon-mp3rad…‘) #2 /var/www/Sonos/index.php(84): nextRadio() #3 {main} thrown in /var/www/Sonos/PHPSonos.inc.php on line 509
Wie weiter oben beschrieben habe ich im Skript
„SELECT s.act_id, MAX(r.id) AS max_id FROM settings s, radiostation r GROUP BY s.act_id“ geändert, jedoch ohne Änderung…
lg
Hi,
evtl. Hilft dir der Beitrag von weiter oben:
Ich meine den Fehler gefunden zu haben.Im index.php habe ich die folgende Zeile abgeändert
242 : $sonos->SetRadio(“x-rincon-mp3radio://$url”, “$radio”);
Danach hatte ich keine Fehlermeldungen mehr und die Umschaltung zwischen den Radiosendern (laut DB) funktioniert jetzt auch.
Jezt hab ich ein anderes Problem.Manche url Adressen von den Radiosendern funktionieren nicht beim
Sonos,kriege vom Sonos Fehlermeldungen wie ,Server nicht erreichbar od. Titel ist nicht korrekt codiert obwohl die url Adressen von der Homepage korrekt sind!Mit dem Iphone kann ich im Sonos-Favoriten umschalten,sehe aber nicht die url Adressen dort.
Hast du vieleicht eine Idee wie ich an die richtigen Adressen rankomme,oder gibt es mittlerweile eine
andere Möglichkeit direkt im Sonos Favoriten umzuschalten?
@ Thomas:
Das ist alles sehr interessant – für mich als Laie…
Frage: Dein Aufruf „Waschmaschine ist Fertig“ – wie bekommst du den Befehl / Kontakt vom EIB ?
Waschmaschine mit EIB-Modul, Schaltaktor mit Stromüberwachung, oder wie geht das ?
Danke für deine Info.
LG vom Bodensee
DANIEL
PS: Das „Es klingelt jemand an der Haustüre“ brauche ich auch :-))
Hi,
Richtig erraten: Schaltaktor mit Stromüberwachung und dann Webseitenaufruf mit Gira Homeserver:)
Bin wirklich schwer begeistert von diesem Skript, war schon nahe am Aufgeben!!! Hab das Skript bei mir am Synology NAS (DS214+) zum Laufen gebracht.
=====
1.) Interessanterweise funktioniert das Skript bei all meinen Sonos Geräten bis auf eines – auf dem bekomme ich die Meldung: „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/24.0-71060 (ZP90) Connection: close s:ClientUPnPError‘ in /volume1/web/PHPSonos.inc.php:502 Stack trace: #0 /volume1/web/PHPSonos.inc.php(133): PHPSonos->sendPacket(‚POST /MediaRend…‘) #1 /volume1/web/index.php(306): PHPSonos->SetVolume(’30‘) #2 /volume1/web/index.php(165): sendMessage(‚2′, ’30‘) #3 {main} thrown in /volume1/web/PHPSonos.inc.php on line 502“ ==> Hat jemand eine Idee?
2.) Beim Befehl „SendMessage“ kann meinem Verständnis nach dzt. nur ein Player angesteuert werden. Kann man im Skript irgendwie auch alle Player in einer Gruppe zusammenfassen (damit die Message dann auf allen Playern gleichzeitig ausgegeben wird) und dann wieder den alten (vorherigen) Gruppenstatus herstellen?
Lg und vielen Dank nochmals für das tolle Skript!
Hallo Günther
Ich nehme an das du die Fehlermeldung dann bekommst,wenn beim ZP eine Radioquelle angewählt war.
Hast du diese Funktion schon mit Playlists(mp3) probiert?
Moin,
nettes Tutorial, jedoch macht es bei mir Probleme.
Und zwar befinden sich die Scripte auf einem Raspberry-Computer der als Server fungiert. Ich kann die Scripte auch ohne Probleme in den Browser eingeben, es funktioniert alles.
Unter Gira klappt das leider nicht so. „Web-Seiten/IP-Feräte“ habe ich nach deinem Beispiel aufgebaut, jedoch tut sich da nichts.
In der Debug-Seite wird der Aufruf bestätigt („GET /index.php?zone=Buero&do=Play HTTP/1.0 Host: raspberrypi Connection: Close „) und alles was zurückkommt habe in ein K-Objekt geladen – welches jedoch immer leer ist.
Ich hoffe du hast einen Rat für mich.
Ich konnte den Fehler selbst entdecken.
Der Gira-Server kann scheinbar keine Hostnamen im eigenem Netz verarbeiten. Ich bekomme ständig DNS-Errors und bei Direkteingabe der IP läuft alles.
Hi,
dann hast du wahrscheinlich eine Fritzbox. Die löst intern nicht auf. Dort musst du die internen Domains, für die sie auflösen soll eintragen. Oder einen anderen DNS Server verwenden. Ich verwende seit der Abschaffung meines Windows Servers den meines Synology’s. Dort kann man auch eigene Zonen einrichten.
Hey,
ist es mithilfe dieses Scriptes und den Webseiten-Aufrufe im HS möglich, auch via KNX Tastsensor diese „Befehle“ aufzurufen?
Wie schaffe ich die Verknüpfung zwischen einer Gruppenadresse und den „Website-Aufrufen“?
Gruß Bernd
Ja, klar, hier im Einsatz. Deswegen habe ich es ja geschrieben. Im Logikeditor kannst du die Gruppenadressen mit den Webseitenaufrufen verknüpfen.
Hey Thomas,
da ich noch nie mit dem Logikeditor gearbeitet habe tu ich mir da grad etwas schwer…
Wie bekomm ich denn eine „neue, freie“ Gruppenadresse hin?
Kannst du mir einen Screenshot schicken wie das ganze aussehen muss im LogikEditor?!
Wäre super, vielen Dank!
Gruß Bernd
Hi,
sorry, ich habe meinen Windows Rechner mit dem Experten gerade nicht in Reichweite. Wenn du dazu Fragen hast, empfehle ich dir das KNX-User-Forum: http://knx-user-forum.de/
Grüße
Thomas
Follow up zu meinem Eintrag vom 8. Feb 2014:
@Memo und all: Wie ihr seht, bin ich nicht der schnellste – Baby und Frau hatten in den letzten Wochen Vorrang 🙂
Hab mein Problem endlich nachvollziehen können. Besagtes Sonos Gerät (an der Stereoanlage angeschlossener ZP-90), für das mir das PHP Skript stets Fehler ausgibt, ist auf „festgelegten Ausgangspegel“ (denn der wird ja über die Stereoanlage eingestellt) eingestellt. Wenn ich auf „variabler Ausgangspegel“ umstelle, funktioniert alles.
Hab jetzt noch versucht, den Ausgangspegel in der Einstellung „festgelegter Ausgangspegel“ auszulesen – es wird der Wert 100 verwendet. Wenn ich nun index.php?zone=Wohnzimmer&do=sendMessage&MessageId=4&Volume=100 verwende, haut es das Skript dennoch „auf den Bauch“ – habt ihr Ideen, was man ändern müsste, um das zum funktionieren zu bringen?
Hat noch jemand einen Vorschlag zu meinem Pkt 2.) vom 8. Feb 2014? – wie kann man mehrere Sonos Geräte in einem PHP Skript gruppieren und dann wieder gemäß der vorigen Einstellung „auseinanderdividieren“?
Vielen Dank + lg
Günther
Und gleich noch’n Update: Hab’s doch geschafft, einige meiner „Probleme“ zu lösen: Hab meine PHPs etwas umgebaut – man kann jetzt bei mir einen Wert von 200 für die Lautstärke übergeben (normalerweise geht’s nur bis 100) – bei Übergabe von 200 wird schlicht und einfach von der Sonos Library keine Volumeeinstellung vorgenommen ==> somit funktioniert auch mein Sonos ZP90 mit Einstellung „festgelegter Ausgangspegel“ perfekt (wenn ich Volume = 200 übergebe).
Wenn somit jemand meine Türklingel drückt, wird (dzt. nur auf 1, ich arbeite noch an den anderen) auf den Sonos Geräten der Big Ben Chime ausgegeben und ein email an mein Handy geschickt (dann kann ich wenn ich nicht zuhause bin, über Video nachsehen, wer da rumklingelt…)
Hab mal ein kleines Youtube Video von meiner Hard- und Software gemacht: http://www.youtube.com/watch?v=Bajl2kY-M2w
Meine Hardware:
* Synology DS 214+ mit aktiviertem PHP Server Paket
* Arduino Uno R3 mit Ethernet Shield (mit dem WLAN Shield ginge es genau so…)
* 6 verschiedene Sonos Geräte der Typen ZP90, Sonos S1, Sonos S5 und 1 Bridge
Wie ihr sehen könnt, habe ich keinen Gira Homeserver, aber die Problemstellung ist exakt dieselbe.
Ich habe mich lange mit vielen Vergleichen der verschiedenen Home Server auseinandergeschlagen, nachdem ein Arduino nur 23 EUR (im Gegensatz zum Figaro für rund 1000 EUR) kostet, habe ich mich für Arduino entschieden. Ich war extrem positiv überrascht, wie einfach das Ding zu programmieren ist (da braucht man wirklich kein Techniker zu sein – es hilft zugegebenermaßen…) und was man mit dem alles machen kann.
Viel Spaß! – Fragen gerne willkommen. Wenn jemand meine Source Codes haben will – auch kein Problem…
Sehr schön 🙂
Korrektur: Sollte natürlich heissen: Figaro und nicht Figaro…
Das gibts ja wohl nicht – Autokorrektur? FI B ARO !
Es gibt eine neue Version: http://trautner.net/547-sonos-mit-gira-homeserver-steuern-neue-version
Pingback: MP3 Ausgabe über Sonos
Pingback: HOWTO: Visualisierung von Kabel/Sat Receiver EPG + Steuerung - Page 3
Hi Thomas,
Is it possible to play a whole album from a local hard drive using this code?
hallo
ich kann die Liste der möglichen Befehle nicht finden
gibt es da einen Link dazu
danke
Hi,
schau mal bitte ob du auch die neueste Version hast. Du bist hier im alten Beitrag gelandet. hier geht es zur neuen Version: http://trautner.net/547-sonos-mit-gira-homeserver-steuern-neue-version
Hier findest du die Readme der aktuellen Version, da stehen auch die Kommandos drin: https://github.com/ThomasTr/sonos
Hier geht es zur aktuellen Version: http://trautner.net/547-sonos-mit-gira-homeserver-steuern-neue-version
Damit es hier keine Missverständnisse gibt, mache ich die Kommentare zu.