Hallo zusammen,
ich habe mir die PHPSonos-Klasse geschnappt, um über meine Hausautomation (FHEM) meinen Sonos-Player steuern zu können.
Dabei habe ich einige Funktionen drumherum gebaut, die ich hiermit der Allgemeinheit zum Ausschlachten und als Ideengrundlage zur Verfügung stellen will.
Mein System besteht im Wesentlichen aus einem PHP-Skript, welches die PHPSonos-Klasse kapselt, damit ich einfach Kommandozeilenparameter übergeben kann.
Dabei übergebe ich den Parameter „Zone“, welcher bei mir der Name der Zone ist. Um das dann in eine IP-Adresse umwandeln zu können, habe ich zur Beschleunigung des Zugriffs eine kleine Textdatei erzeugt, in der diese Informationen stehen.
Diese Textdatei kann mit demselben Skript generiert werden, Dabei werden alle Zoneplayer des Netzes erkannt und in die Datei geschrieben. Damit kann man also in Polling-Intervallen die Informationen aktualisieren lassen (wie oft ändern sich die Player und ihre IP-Adresse schon wirklich?)
Desweiteren habe ich ein Skript geschrieben, welches exemplarisch (an meinem Exemplar zeigt, wie man sich für die Aktualisierung von Titelinformationen (wie Abspielzustand und Titel usw.) registrieren kann, und die Informationen verarbeiten kann.
Das ist aber wirklich nur exemplarisch zu verstehen, da das dann sehr speziell auf mich zugeschnitten ist. Ich triggere bei mir FHEM an, damit dieser mir meinen Verstärker für diesen ZonePlayer anmacht (ich habe einen ZP90 da stehen).
Für diesen ganzen UPnP-Kram verwende ich die PHP-Erweiterung GUPNP (http://php.net/manual/en/book.gupnp.php), für die man vielleicht ein bißchen Mühe investieren muss, um sie installiert zu bekommen
Dann hat man aber in seinen PHP-Skripten die Möglichkeit sauber auf UPnP zuzugreifen, und die Player finden zu lassen bzw. benachrichtigt zu werden, wenn sich was ändert.
Desweiteren verwende ich in meinen Code eine Funktion namens xml2array (xml2array() - XML Parser for PHP < PHP < Bin-Co), die aber im Code enthalten ist, und nicht extra installiert werden muss.
Der Rest ist auf meinem Mist gewachsen, etwas kommentiert, aber es ist schon eine Menge
Nun zu einer kurzen Übersicht des ZIP:
- PHPSonos.inc.php -> Original-Sonos-Klasse, wie man sie hier im Forum finden kann
- sonos.php -> Kommandozeilentool zum vereinfachten Steuern von Sonos. Aufruf ohne Parameter gibt die Hilfe aus
- sonos_event.php -> Kommandozeilentool als Event-Listener auf Abspielzustandsänderungen, momentan hardcoded auf „Wohnzimmer“ (in Zeile 83), damit mein FHEM getriggert werden kann.
- zones.txt -> Wird von beiden Skripten verwendet, um Zonennamen in IP-Adressen o.ä. umzuwandeln. Kann mit dem Kommando „php sonos.php action=getzonelist“ erzeugt werden.
Sooo… Viel Text
Viel Spaß damit, und ich hoffe, ich konnte dem einen oder anderen etwas Arbeit abnehmen.
Grüße Reiner
sonos.zip (22.4 KB)