Sonos steuern

Begonnen von Will, 05 Januar 2013, 15:51:12

Vorheriges Thema - Nächstes Thema

Will

Hallo,

betreibe seit einigen Tagen FHEM auf einer Fritzbox (Schaltsteckdosen, Temperaturmessung) und frage mich nun, ob es moeglich ist mein Sonos System ueber FHEM zu steuern. Wollte das erst mal ganz simpel machen --> Pause / Play auf Knopfdruck oder per notify bei Event, spaeter vielleicht abspielen einer speziellen Playlist bei Knopfdruck (Stichwort WAF).
Muss dazu sagen, dass ich keinerlei Erfahrung mit Perl oder PHP habe.

Bei recherchieren bin ich unter anderem auf diese Projekte gestossen:

http://www.purple.org/sonos/  (wohl in Perl programmiert)

http://www.ip-symcon.de/wiki/PHPSonos   (PHP Modul fuer IP symcon)

Da es fertige Loesungen fuer andere Plattformen gehe ich davin aus, dass das prinzipiell funktionieren kann. Sniffen der BEfehle mit Wireshark bringt mich nicht weiter, da ich nicht weiss, wie und was ich dann davon in FHEM bringen muss.

Hat sich irgendjemand schon damit beschaeftigt bzw. koennt ihr mir sagen, ob ein fertiges Modul mit wenig Aufwand fuer FHEM einsetzbar waere?

Vielen Dank schon mal.

W


Reinerlein

Hi,

ich bin seit einer Woche dabei ein Sonos-Modul für FHEM zu schreiben.
Bis jetzt habe ich die Konsumentenseite fertig. Ich kann also auf Ereignisse meines Player reagieren (Songwechsel, Abspielzustandsänderungen wie Play und Pause, an und abschalten des Players) und weiteres.

Jetzt kommt die Steuerung dran, sodass ich den Player z.B. starten kann.

Allgemein gilt: Da die Grundlage der Kommunikation mit den Zoneplayern UPnP ist, wird dieses Modul auch nur mit installiertem UPnP-Perl-Modul funktionieren.
Das wird zum einen nicht auf jeder Hardware laufen, zum anderen muss man sich mal Gedanken über die Auslieferung dieser Library machen. Man könnte sie theoretisch auch mit FHEM ausliefern...

Ich denke, dass ich in ein paar Tagen hier was einigermaßen stabiles Veröffentlichen kann.

Grüße Reinerlein

Will

Hi reinerlein,

Das klingt ja super - habe mich ehrlich gesagt gewundert, dass da noch nichts verfügbar ist. Integration des sonos macht meiner Ansicht nach voll Sinn.
Wenn du sagst "läuft nicht auf jeder Hardware" klingt das erst mal so als wuerde eine fritzbox nicht ausreichen? Raspberry Pi?

Warte dann mal gespannt auf dein Ergebnis.

Danke!

W

Reinerlein

Hi,

das mit der Hardware ist znächst mal eine Vermutung, da hier im Forum immer wieder erwähnt wird, das man auf der FritzBox manchmal Probleme mit extra Modulen hat. Auf einem Raspberry wird es auf jeden Fall laufen, da es dort bei mir eingesetzt werden soll :-) Fritzbox werde ich nicht testen können. Da müsste dann jemand testen, der sowas laufen hat...
Momentan entwickeln tue ich auf einem Windows 2003, dort läuft es also auch schon mal...

Für die Ausführung werden auch Threads eingesetzt, da man ständig lauschen muss, und aus dem UPnP Aufruf nicht mehr zurückkommt - damit wäre FHEM dann aktiv blockiert :-) Das könnte also auch noch ein Engpass für Hardware werden...

Also, wie gesagt, es kann/wird noch ein paar Tage dauern, da das leider nicht ganz so trivial ist, wie es auf den ersten Blick scheint. Bin aber dran :-)

Grüße Reinerlein

det.

Hallo Reinerlein,

Das klingt ja vielversprechend! Ich nutze FHEM seit ca. 1 Jahr, der SONOS Zoneplayer hängt mit dem Rest der Musikanlage an einer FS20 Schaltsteckdose. Wenn ich die mittels iPad über FHEM einschalte, startet auch der SONOS. Danach muss ich jetzt in die SONOS App. wechseln. Die Playlistenauswahl und der Zugriff auf die Ordner auf dem Heimserver über die App. finde ich sehr gelungen , das fehlt mir nicht in FHEM. Was ich als absolutes Highlight einer Integration in FHEM finden würde: nach SONOS Start über einen Button meine Lieblingsradiostation Radio Paradise starten und die Lautstärke steuern. Das wäre für mich der richtige Schritt in Richtung Hausautomatisierung in dem Zusammenhang.
Programmieren kann ich es leider nicht, aber mit testen gern, sowohl auf FB7390 als auch auf RasPi.
LG
det.

Will

Ich sehe das ähnlich. Wäre erst auch nicht an einer sonos Oberfläche in fhem interessiert (hat abet was)  
Ich würde steuern wollen:
Auf Knopfdruck / notify play/pause/mute/leiser/lauter
Auf Knopfdruck vordefinierte playlist abspielen (Max 3)


In anderen Foren machen die Jungs durchsagen über Events gesteuert :-) , nicht mein Plan.

W

Reinerlein

Hi zusammen,

seit meiner letzten Mitteilung sind nun ein paar Tage vergangen, und ich wollte mal ein kurzes Update einwerfen:
Das Modul nimmt Form an. Ich habe jetzt einen Stand, der bereits eine ganze Menge kann.
Aus diesem Grunde werde ich mal ein kurzes Feature-Freeze einwerfen, und die Doku nachziehen.

In der Doku werden die Mittlerweile doch recht umfangreichen Möglichkeiten und auch zu berücksichtigende Dinge beschrieben. Desweiteren werde ich gleich ein paar Beispiele reinpacken.
Parallel dazu teste ich das ganze natürlich in meiner Umgebung. Leider habe ich nur einen ZonePlayer, so dass bei euch mit mehreren Playern durchaus noch etwas auftreten kann was gefixt werden muss.

Ein Abriss, was bei mir zum Testen bereits läuft:
- Alle Player werden automatisch erkannt und in FHEM mit den wichtigsten Attributen angelegt. Desweiteren wird das Icon des Players heruntergeladen und als Attribut zugewiesen
- An/Aus des Players. Das wird einfach über einen Ping-Check realisiert, da ich dazu keine Mitteilungen bekomme. Natürlich werden dazu dann FHEM-Events generiert, auf die reagiert werden kann
- Anzeige aller Titel, Interpreten und Album-Informationen, sofern verfügbar. Das erfolgt Event-gesteuert. Also in dem Augenblick, wo eine Information am Sonos wechselt. Dazu werden dann auch FHEM-Events generiert, auf die wieder reagiert werden kann. z.B. Interpret == Psy, dann die Steckdose schnell wieder ausmachen :-)
- Das aktuelle Cover wird auf den FHEM-Rechner heruntergeladen, und kann per Weblink o.ä. angezeigt werden
- Nahezu vollständige Steuerung des Players (z.B. Play, Stop, Pause, Next, Previous, Leiser, Lauter, Lautstärke einstellen, Mute, Playlists laden/speichern/leeren)
- Informationstexte können frei (per XML-ähnlicher Notation) zusammengestellt werden (bis zu vier verschiedene Definitionen). Damit kann man z.B. LCD-Anzeigen mit fertigen Textzeilen beliefern (natürlich Event-getriggert)
- Leider sind Radiostationen nicht trivial in der Einbindung, da Sonos die Favoriten nicht im System ablegt, sondern vom Controller selbst aus dem Internet geholt werden. Da muss ich mir noch was einfallen lassen, um die URL eines bestimmten Senders herauszufinden/zu speichern. Desweiteren kann man momentan auch nur Playlisten laden. Nicht direkt selber Titel angeben. Kommt aber noch... mal schauen... Nach dem First Release :-)

Ich habe hier auch mal zwei einfache Notify-Zeilen im Zusammenspiel mit dem FB_Callmonitor geschrieben, welche bei einem Anruf die Lautstärke um 20 Einheiten runter dreht, und bei Beendigung des Anrufs wieder zurück auf die vorhergehende Stellung geht. Das berücksichtigt keine Sonderfälle oder so, sondern ist einfach ein Cooles Beispiel :-)

Also, ich stürze mich jetzt auf die Doku und den Test, und komme bald wieder durch...

Grüße Reinerlein

P.S.: Im Anhang mal ein Screenshot meiner Übersichtsanzeige in FHEM. So sieht das aus, wenn es automatisch erzeugt wurde, inkl. Weblink, Gruppe und dem Original-Bezeichner des ZonePlayers. Lediglich der FileLog ist Handarbeit...

Will

Hi reinerlein,

Klingt sehr vielversprechend. Kanns kaum erwarten das bei mir zu testen. Sag bescheid wenn du versuchskan inchen brauchst. :-)

W

Christoph

Zitat von: Reinerlein schrieb am Fr, 11 Januar 2013 02:21- Leider sind Radiostationen nicht trivial in der Einbindung, da Sonos die Favoriten nicht im System ablegt, sondern vom Controller selbst aus dem Internet geholt werden. Da muss ich mir noch was einfallen lassen, um die URL eines bestimmten Senders herauszufinden/zu speichern. Desweiteren kann man momentan auch nur Playlisten laden. Nicht direkt selber Titel angeben. Kommt aber noch... mal schauen... Nach dem First Release :-)

Oder die Favoriten in Fhem anlegen und über die URL aufrufen
Zwar keine schöne Lösung aber es funktioniert. ;-)


$sonos->SetRadio("x-rincon-mp3radio://mp3-live.swr3.de/swr3_m.m3u", "SWR3");
$sonos->Play();


Stelle mich auch gerne zum testen zur Verfügung, hab nen Play3 + Connect +Bridge.

Gruß Christoph

Reinerlein

Hi Christoph,

ich habe die Radiostationen (Favoriten) doch noch im Player gefunden. Die waren etwas versteckt: normalerweise ist der komplette Inhalt selbstbeschreibend hierarchisch, nur hier muss man zwischendurch nochmal eine kleine Root-ID beim Browse angeben, und erhält dann die Definition der Radioabteilung.

Also, das ist auch schon drin.
Außerdem gibt es immer noch Probleme, wenn der Player verschwindet und wieder auftaucht. Es gibt ungünstige Zeitpunkte für sowas, da muss ich mal schauen, ob man sowas ähnliches wie ein "Exception Handling" in Perl gebaut bekommt. Die Fehler treten nämlich in der von mir benutzten Klasse für den UPnP Zugriff auf (der versucht gerade irgendwas vom Player zu laden).
Allerdings ist das Auftauchen eines Players (ich denke das wichtigere) im großen und ganzen stabil. In meinem Szenario wird dann per FHEM-Event beim Auftauchen des Players einer Playlist geladen, die Lautstärke gesetzt, ein bestimmter Titel in der Liste angesprungen und dann das Abspielen gestartet.
Das ist doch schon mal was...

Die Doku geht auch voran. Dann kann es ans Testen bei euch gehen.

Grüße Reinerlein

det.

Hallo Reinerlein,

Das klingt ja sehr erfreulich! Mein Wochenende Lieblingsfrühstücksradio mit einem Klick aus FHEM starten - bisher erst Strom an über FHEM, dann SONOS App. starten, warten bis die verbunden ist, 5x klicken bis Radiosender läuft... Das wird eine wesentliche Erleichterung mit hohem WAF!
Ich freue mich schon auf's Testen.
LG
det.

Will


Reinerlein

Hallo zusammen,

nun ist es also soweit. Ich habe meinen internen Umzug auf meinen produktiven Raspberry Pi erfolgreich durchgeführt. Dabei sind noch ein paar Bugs behoben worden :-)

Also:
Unter http://www.fhemwiki.de/wiki/Sonos_Anwendungsbeispiel habe ich einen Wiki-Eintrag erzeugt, der sowohl die Installation als auch die Einrichtung und Beispiele bringt.

Die Dateien habe ich hier an den Forumseintrag gehangen. Solange das Modul noch nicht offiziell ist, werden wir das hierüber abwickeln...

Zum Start braucht man nur in die Eingabezeile oben ein
define Sonos SONOS
einzugeben. Der Rest sollte dann bereits automatisch erkannt und eingerichtet werden. Dann braucht man sich noch nichts in die Konfiguration schreiben...

Dann erstmal viel Spaß, und hoffentlich sind nicht mehr soviele Bugs drin...

Grüße Reinerlein

det.

Hallo Reinerlein,

hab es sofort mal getestet, bin leider nicht der Linuxcrack - nach dem setzen der File Rechte entsprechend der anderen Modulen tat sich auf meinem RasbPi was:

reload 00_SONOS.pm ->

Can't locate UPnP/ControlPoint.pm in @INC (@INC contains: /usr/share/fhem/FHEM/lib/UPnP/lib /etc/perl /usr/local/lib/perl/5.14.2 /usr/local/share/perl/5.14.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.14 /usr/share/perl/5.14 /usr/local/lib/site_perl . /usr/share/fhem/FHEM) at /usr/share/fhem/FHEM/00_SONOS.pm line 64.
BEGIN failed--compilation aborted at /usr/share/fhem/FHEM/00_SONOS.pm line 64.


Sorry
LG
det.