Sonos steuern

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

Vorheriges Thema - Nächstes Thema

FHEM-Freak

Zitat von: FHEM-Freak am 05 September 2014, 12:08:33
Stelle gerade um von raspberry pi auf banana pi und es läuft noch nix da ich es von Grund auf neu und sauber installieren möchte.

Anscheinend noch keiner getestet.
Zitat von: Spartacus am 05 September 2014, 14:35:33
Hallo FHEM-Freak,
sehr mutig von Dir, direkt an zwei Schrauben gleichzeitig zu drehen!

melde Dich mal, wenn der Sonos läuft....

Spartacus
Ist schon lange her aber vollständigkeitshalber natürlich die Info.
Fhem läuft am BananaPi und natürlich Sonos 5.2 auch mit den Sonos Modul.

Noch allen einen guten Rutsch und Dank an Reinerlein für seine tolle Arbeit.

Gruß FHEM-Freak
Banana Pi
HMLAN
3 x HM-CC-TC + HM-CC-VC
1 x HM-PB-2-WM55, 1 x HM-WDS10-TH-O
1 x HM-WDS30-T-O, 1 x HM-WDS40-TH-I

MandelHL

Danke, Reinerlein, danke Otto.

Ich hatte Eure Beiträge zunächst nicht gesehen, da sich scheinbar Tapatalk nicht aktualisiert hat.

Leider müssen wir bei mir wohl noch ein paar Schritte vorher anfangen. Hier sind alle schon so weit, dass ich wohl als Bremsklotz fungiere ...

Ja, ich glaube, das Sonos-Device gemäß der Anleitung richtig definiert zu haben. Und nein, es funktioniert leider nicht.

Ich bekomme die Fehlermeldung "Cannot load module SONOS" und dann "Please define SonosZP_Kueche first".

Zwei Fragen stelle ich mir in diesem Zusamenhang:
1. Bei "define Sonos SONOS localhost:4711 30 1 5" habe ich "Sonos" durch "SonosZP_Kueche", um damit anzufangen, ersetzt und bei "localhost" durch die ip-Adresse dieses Lautsprechers ersetzt. Alles andere habe ich so gelassen. Muss ich diese Portfreigabe noch unter Freigaben auf meiner Fritzbox vornehmen?
Später würde ich dann wohl alle Lautsprecher bis auf das Wohnzimmer ansprechen wollen, da hier der Connect andere Lautsprecher bedient, die über einen AV-Receiver laufen.
2. In dem Link http://fhem.lmsoft.de/sonos_dev/FHEM/00_SONOS.pm stehen neben den zu installierenden Modulen im Anwendungsbeispiel (http://www.fhemwiki.de/wiki/Sonos_Anwendungsbeispiel) Simple, UserAgent, Lite und Request auch noch HTML::Entities, Net::Ping, File::Path, Time::HiRes, * threads und Thread::Queue. Müssen die auch noch per "sudo cpan ..." nachinstalliert werden?

Danke für Eure Geduld und Unterstützung.

Mandel

Reinerlein

Hi Mandel,

ok, kein Problem...
du solltest dir auf jeden Fall die Wiki-Seite durchlesen: http://www.fhemwiki.de/wiki/Sonos_Anwendungsbeispiel
Dort kannst du viel über die Funktionsweise des Sonos-Systems und das Modul lernen.

Kurz zusammengefasst, für dich das wichtigste:
- Wirf alles aus der Fhem-Konfiguration bzgl. Sonos raus. Mir scheinen da einzelne Teile zu existieren, die nicht passen
- Mach ein Update in Fhem. Das Modul ist mittlerweile integraler Bestandteil von Fhem
- Installier die Perl-Module, wie im Wiki beschrieben. Es geht nur um die drei (bzw. vier) dort genannten Module. Die anderen sollten mittlerweile Standard von Perl sein. Falls du einen Pi oder ähnliches mit Debian hast, ist es besonders einfach: http://www.fhemwiki.de/wiki/Sonos_Anwendungsbeispiel#Hinweis_f.C3.BCr_Debian-Systeme
- Du musst *nie* einen Sonos-Player selber definieren. Das Modul erkennt automatisch *alle* Player im Netz und legt die entsprechenden Fhem-Devices an. Achte darauf, dass du gerade keine _temporären_ Stereopaare oder Gruppierungen bei Sonos hast. Sonst bekommst du komische Namen erzeugt...
- Du musst nur das Sonos-Device definieren. Die kürzeste Form dafür ist ein "define Sonos SONOS localhost:4711 30" in das Eingabefeld zu tippen, und Enter zu drücken. Die anderen Parameter sind Finetuning und erstmal noch nicht notwendig. Das localhost bezieht sich nicht auf einen Player, sondern auf die Adresse, unter der der SubProzess erreichbar sein wird...
- Sollten noch Fehlermeldungen auftauchen, sollten diese eigentlich nur auf fehlende Perl-Libraries hinweisen, dann nochmal prüfen, ob wirklich alles aus dem Wiki installiert ist. (Sollten andere Fehlermeldungen auftauchen, dann hier posten)
- Tauchen keine Fehler mehr auf, dann tauchen alle deine Player auf, und du kannst deinen Spaß damit haben :)

Grüße
Reinerlein

P.S.: Du musst erstmal keine Portfreigaben auf der Fritzbox machen. Das ist ja erstmal alles Hausintern...
P.P.S.: Gerade für das Wohnzimmer bietet sich das hier an. Dafür habe ich das Modul überhaupt erst geschrieben :). Wenn ich im Sonos-Controller die Musik im Wohnzimmer starte, bekommt Fhem das mit, und schaltet meinen Verstärker über eine Infrarotschnittstelle an. Wenn ich Stoppe, dann auch (etwas Zeitverzögert) wieder aus.

MandelHL

#1368
Super, Deine Anleitungen. Damit dürfte nichts schief gehen - Danke :-)

Allerdings bekomme ich eine Fehlermeldung bei der Installation des letzten Pakets, bei der ich mir nicht zu helfen weiß:
E: Paket libxml-parser-lite-perl kann nicht gefunden werden

Kannst Du mir hier noch einmal helfen und sagen, was ich tun muss? Die anderen beiden Pakete sind installiert.

Nachsatz: Das ist ja cool. Ich habe den Befehl trotzdem mal in die Kommandozeile geschrieben. Und Sonos ist jetzt da :-)
Brauche ich dann vielleicht gar nicht das "libxml-parser-lite"-Modul zu installieren?

Danke und viele Grüße
Mandel

Reinerlein

Hi Mandel,

ich sehe gerade, dass es das Paket gar nicht mehr in einem Stable-Zweig von Debian gibt. Auch habe ich festgestellt, dass ich das anscheinend gar nicht mehr verwende (zumindest habe ich keine entsprechende use-Anweisung mehr gefunden :) )

Es ist also gut möglich, dass es obsolet ist, und gar nicht mehr benötigt wird. Sorry für diese alte Dokumentationslage...

Kannst du einfach mal (wenn die anderen beiden Debian-Packages installiert sind, denn die werden wirklich benötigt) mit dem nächsten Schritt weitermachen?
Wenn das erfolgreich zum Ende kommt, werde ich die Doku an beiden Stellen (Wiki und Code) entsprechend anpassen und korrigieren.

Danke schon mal...

Grüße
Reinerlein

Reinerlein

Hi Mandel,

überschneidung :)

Ich werde die Doku entsprechend anpassen... Danke nochmal...

Grüße
Reinerlein

MandelHL

#1371
Das ist ja geil. Ich taste mich gerade ran.

Es sind alle Player von alleine da inkl. der Cover, nächster Song usw. cool. Allerdings kann ich so nicht erkennen, welche Player gerade laufen und welche nicht ...

Der Verbindungsaufbau dauert allerding eine Zeit. Das ist wohl aber normal, oder?

Aber sehr geile Arbeit. Nun muss ich noch ein wenig modifizieren und sehen, dass ich das mit der Sprachausgabe hinbekomme.

Danach frage ich Dich dann bestimmt noch einmal nach dem Infrarot-Modul, mit dem ich meinen AV Receiver anschalten kann.

Sehr geile Arbeit, Reinerlein. Ich freu mich.

Wenn ich mit der Tonausgabe noch Schwierigkeiten haben sollte, melde ich mich noch einmal ... Wahrscheinlich auch so ;-)

Nachsatz: Brauche ich denn in meier Sonos.cfg trotzdem noch den Befehl: define Sonos SONOS localhost:4711 30 1 5?

2. Nachsatz: Das mit der Sprachausgabe klappt leider nicht. Meine Sonos.cfg sieht so aus:
define Sonos SONOS localhost:4711 30 1 5
attr Sonos icon icoSONOSPLAYER_icon-ZP90.png
attr Sonos targetSpeakDir /mnt/SonosSpeak
attr Sonos targetSpeakFileTimestamp 1
attr Sonos targetSpeakURL \\localhost\SonosSpeak

Localhost hatte ich sowohl durch die ip-Adresse des Küchenlautsprechers als auch durch die das Raspberry Pi ersetzt. Ton kommt trotzdem nicht heraus. Weißt Du, was ich falsch mache?

Viele Grüße
Mandel

Reinerlein

Hi Mandel,

schön, das es jetzt geht. Ich habe das Wiki und die Doku gerade angepasst. Da war einfach noch was altes übrig geblieben...

Zu der Anzeige:
In der ersten Textzeile steht doch sowas wie "Pausiere Titel 1 von 20" oder "Spiele Titel 2 von 20". Das ist der Abspielstatus. Das ändert sich (dank longpoll) auch (nahezu) in Echtzeit mit. Auch kannst du das Cover des aktuellen Titels anklicken, und erhältst eine Vollbilddarstellung...

Zu dem Infrarot:
Ich habe das noch aus FS20-Zeiten. Da gibt es einen Infrarotsender (FS20 IRF), den man anlernen kann, sodass er gespeicherte Infrarot-Kommandos aussenden kann. Der liegt im Schrank bei meinem Verstärker (und Fernseher), und kann diese Komponenten dann optisch erreichen und schalten.
Dieses Gerät wird leider nicht mehr von ELV verkauft (wie ich gerade beim Heraussuchen des Links festgestellt habe). Die angekündigte Ersatzvariante von Homematic (avisiert für Ende 2014) wurde nochmal verschoben...

Es gibt aber auch eine modernere Variante mit Logitechs Harmony Hub...

Grüße
Reinerlein

rapster

Zitat von: Reinerlein am 03 Januar 2015, 02:19:38
schaltet meinen Verstärker über eine Infrarotschnittstelle an.

Hi Reinerlein,

welches Device nutzt du für die Infrarotkommunikation?

Bei mir wird glücklicherweiße zwar der AVR durch ein Fhem-Modul direkt unterstützt, allerdings bin ich schon seit einiger Zeit am Überlegen was ich benutzen soll um meine Dunstabzugshaube zu steuern welche nur Infrarot kann ;)

Danke und Gruß Claudiu

EDIT:
Danke für die Antwort die schon vor meiner Frage kam  ;D 8)

der-Lolo

Der Hamony Hub ist zu empfehlen, wen man etwas geschickt einkauft bekommt man eine super lösung für ~60€


Reinerlein

Hallo,

wow, alle wach :)

Zu der Sprachausgabe: Die IP-Adresse in dem Attribut "targetSpeakURL" muss die des per Windows-Freigabe erreichbaren Systems sein.

Du kannst das im ersten Schritt mit deinem normalen Computer testen (unter Windows z.B.: Start -> Ausführen -> \\192.168.178.149\SonosSpeak
Dann solltest du den Ordner von deinem Pi sehen. Wobei ich davon ausgehe, dass diese IP Adresse eher die von deinem Player ist.
Die Adressen von deinen Zoneplayern brauchst du mit diesem Modul *nie* zu wissen. Das UPnP-Protokoll abstrahiert davon (zumindest für dich als Anwender :) ).

Was du auch beachten musst: Wenn du ein Attribut des Sonos-Devices oder der Sonosplayer-Devices anpasst, dann musst du einen Neustart von Fhem durchführen. Die Attribute werden nur beim Start übertragen.
Das ist leider eine Enschränkung durch die Methodik die ich verwendet habe...

Grüße
Reinerlein

Reinerlein

Hi Mandel,

ich sehe gerade, dass noch eine Frage offengeblieben ist:
Ja, in der Konfiguration landet ein define-Zeile. In welcher Config-Datei die jetzt steht ist dann egal, sie muss nur *vor* allen Sonosplayer-Defines stehen, und es darf nur eine einzige in der gesamten Fhem-Config geben...

Grüße
Reinerlein

MandelHL

Ich habe die nicht in der fhem.cfg stehen, sondern per "include"-Befehl an die Sonos.cfg übergeben. Allerdings hätte ich einen automatischen Eintrag in der fhem.cfg erwartet, den ich dann übertragen hätte.

Nun doch noch einmal zur Sprachausgabe: Doch, das Verzeichnis ist das meines Rasperry Pi. Allerdings ist das noch leer. Nur zum Verständnis, muss ich denn hier eine mp3-Datei mit diesem Namen haben?

Als weitere Idee fällt mir gerade ein, dass es gar nicht schlecht wäre, die Musik der Kinder im Obergeschoss mit verschiedenen Nachrichten zu unterbrechen, wie z. B. "Essen ist fertig" oder "Schlafenszeit" ... Und das möglichst per einfachem Knopfdruck mit vielleicht hinterlegten Buttons für die Nachrichten.

Reinerlein

Hi Mandel,

das das Verzeichnis leer ist, ist schon mal gut. Setz mal folgenden Befehl ab:

set Sonos_Wohnzimmer Speak 10 de Dies ist ein Test
(passend zu deinem Player natürlich)
Daraufhin muss erstmal eine Datei in dem Verzeichnis auftauchen (kannst du ja wieder mit deinem Computer nachschauen).
Wenn die nicht da ist, dann stimmen die Dateirechte für den Ordner nicht, und Fhem hat keine Rechte dort hineinzuschreiben. Das musst du dann entsprechend anpassen z.B. mit:

sudo chmod 777 /mnt/SonosSpeak
Damit erhält alles und jeder das Schreibrecht auf diesem Ordner.

Wenn die Datei auftaucht, und Sonos die trotzdem nicht abspielt, dann müssen wir Logdateien durchschauen...

Und ja, wenn die Sprachausgabe funktioniert, kannst du das natürlich mit einem beliebigen Notify anstossen. Die Wiedergabe wird unterbrochen, Durchsage wird durchgeführt, Wiedergabe wird fortgeführt...
Du kannst auch von dir fertig gebaute MP3-Dateien temporär abspielen lassen (geht dann per "PlayURITemp").

Grüße
Reinerlein

MandelHL

#1379
Rechte habe ich geändert. Mein Problem ist auch, dass die Player häufig "disappearen" ...

Jetzt geht's ... Dauert ein wenig, bis die Musik wieder läuft, aber auch das klappt. Kann man die Pause nach der Sprachnachricht bis zur Wiederaufnahme der Musik verkürzen?

Nun muss ich mal sehen, dass ich das entsprechend in meine Befehle integriere und mp3-Dateien einsetze. Ansonsten haut mir das System ja den Ordner voll.
Oder geht es auch, die "translate_tts"-URL einzubauen, so dass die Übersetzung direkt aus dem Internet kommt?

Vielen Dank aber noch einmal. Das war tatsächlich mal wieder der Fehler.

"Pausiert" bzw. "Spiele" steht da, hatte ich übersehen.

Nachsatz: Obwohl ich jetzt versuche, die Sprachnachricht nur im Bad_EG abzuspielen, wird diese auch in der Küche übertragen. Woran mag das liegen?

Nachsatz 2: Fehler bemerkt. Ich hatte den Kindern gesagt, dass sie bitte keine Gruppen bilden sollen. Meine Frau hatte das aber nicht mitbekommen ;-)

Nachsatz 3: Kann das System eigentlich nur mp3 oder vielleicht auch m4a oder wma wiedergeben?

Nachsatz 4 ;-): #############################################################
#
# Sensor Badezimmerfenster EG
#
#############################################################
#
# Flag zum Behalten der Information das nach 30 Minuten eine Email zur Meldung des offene Fensters herausgegangen ist
# Wird nach diesen 30 Minuten das Fenster geschlossen, wird eine weitere Email versendet
# Flag_email_gesendet = 00 bedeutet: keine Email nach 30 Minuten offen gesendet
# Flag_email_gesendet = FF bedeutet: eine Email nach 30 Minuten offen gesendet
#
define Flag_email_gesendet dummy
#
# Festellung, dass das Fenster 30 Minuten offen war. Eine Email wird versendet. Flag Flag_email_gesendet wird gesetzt.
#
define watchdog_Badezimmerfensterkontakt watchdog Sensor_Badezimmerfenster_EG:open 00:30:00 Sensor_Badezimmerfenster_EG:closed {\
      DebianMail('XXXXXXXXX@gmail.com','Bitte Badezimmerfenster schliessen!','Badezimmerfenster steht seit mehr als 30 Minuten offen. Bitte schliessen!');;\
      Log 1, "Badezimmerfenster.cfg: Badezimmerfenster zu lange geöffnet";;\
      fhem('setstate watchdog_Badezimmerfensterkontakt defined');;\
      fhem('set Flag_email_gesendet FF');;\
}
attr watchdog_Badezimmerfensterkontakt regexp1WontReactivate 1
#
#
# Festellung, dass das Fenster, wenn es 30 Minuten offen war, danach geschlossen wurde. Es wird dann eine Email versandt und das Flag Flag_email_gesendet zurück gesetzt
#
define Badezimmerfenster_geschlossen_nach_30Min_offen notify Sensor_Badezimmerfenster_EG:closed  {\
    if (Value("Flag_email_gesendet") eq "FF")  {\
          DebianMail('XXXXXXXXXX@@gmail.com','Badezimmerfenster wurde geschlossen','Badezimmerfenster wurde nach mehr als 30 Minuten geschlossen.');;\
          Log 1, "Badezimmerfenster.cfg: Badezimmerfenster wurde geschlossen";;\
          fhem('set Flag_email_gesendet 00');;\
          }\
}


Neben der E-Mail würde ich nun zusätzlich noch die Sprachausgabe erhalten. Das heißt, es muss der Befehl "und" untergebracht werden.
Wie bringe ich dann
define Sonos_Haustuere_Auf notify TF.Sensor1:open set Sonos_Bad_EG,Sonos_Kueche, Sonos_Schlafzimmer PlayURITemp \\192.168.XXX.XXX\SonosSpeak\front%%20door%%20open.mp3 30
verändert hier unter?

Viele Grüße
Mandel