Sonos steuern

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

Vorheriges Thema - Nächstes Thema

Reinerlein

Hi,

ich lasse meine Player eigentlich immer an. Ich habe hauptsächlich Dinge eingerichtet, die bei meinen Play:5 nach dem Transportieren wieder bestimmte Playlisten lädt, und die Tasten für Start, Stop, Forward usw. einrichtet.

Spaßeshalber hatte ich mal sowas wie Durchsagen bei Anrufen und Türklingeln eingerichtet. Aber das habe ich wieder entfernt. Das ganze gesabbel war auf Dauer nervig :-)
Eigentlich habe ich das ganze Modul Hauptsächlich für das Anschalten meines Verstärkers hinter meinem Connect gebaut :-) Der ganze Rest ist für die anderen Fhem-User gebaut :-)

Meine persönliche Meinung zum Wecken (oder SleepTimer) ist, dass das im Sonos-System gut aufgehoben ist. Dort kann jeder aus dem Haus den Alarm noch verändern (besonders die Frau neben einem :-)
Aber das kann auf beiden Seiten gut gelöst werden. Man erhält ja im Fhem auch ein Event bei SleepTimer- und Alarmereignissen...

Das mit der Offline-Sprachausgabe kann ich relativ einfach einbauen. Ich würde dass dann allg. definieren, sodass man selber konfigurieren kann, welches man verwenden möchte. Das sollte kein Problem sein.
Welches Offline-System würdest du denn empfehlen?
Dann kann ich das zum Testen verwenden...

Grüße
Reiner

JoeALLb

espeak ist einfach zu verwenden, ich verwende es für ein Navi-Projekt. Interessant fände ich auch ein Caching von bereits generierten MP3s, damit nicht jedes mal eine neue geladen werden muss, was zu einem hörbaren Delay führt.


Heute hatte ich wieder einen Abtzurz mit dieser Meldung, die gleich vielfach angezeigt wurde.
Unsubscription request failed with error: 412 Precondition Failed at FHEM/lib/UPnP/ControlPoint.pm line 1001 thread 1.


Hilft diese Zeile weiter?
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

Reinerlein

Hi JoeALLb,

das mit espeak schaue ich mir mal an.
Das mit dem Caching wird etwas schwierig werden, da man ja eine Art Datenbank vorhalten müsste, welche Datei mit welchem Text generiert wurde.
Ich denke, dass es da einfacher ist, sich eine Datei genieren zu lassen, und anschließend an einem anderen Ort mit sprechenden Dateinamen abzulegen, und dann immer diese Datei abspielen zu lassen. Das kann man dann mittels "PlayURITemp" durchführen.

Diese "Abstürze" sind manchmal leider normal. Die kommen immer mal wieder dann, wenn die Subscriptions erneuert/auf- oder abgebaut werden sollen, und sind ein Fehler in der verwendeten Library "perlupnp". In meinen Tests hatte das aber keinen Einfluss auf die Funktionalität. Geht denn irgendwas danach nicht mehr?

Grüße Reiner

FHEM-Freak

Beim mir läuft ein Sonos Play3 über Fhem der mit einem HM-PB-2-WM55 geschalten wird wobei ein Radiostream ein und ausgeschalten wird.
Seit ich Fhem mit root rechte laufen lassen gibt es keine Probleme mehr mit Verzögerungen oder abstürze seitens Fhem.
Werde das sicher noch ausbauen mit Temperatur ansage und weiteren Sonos Komponenten.
Hoffe das die bald erhältlichen Sonos Play1 auch funktionieren.
Perfekt Reiner weiter so und Danke dafür.
8)
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

peter79

Hallo Reiner,

ich bin leider immer noch nicht wirklich weitergekommen - ausgeführt wird fhem definitiv per root.
Mit folgender Meldung verabschiedet sich Thread 1 nach relativ kurzer, unbestimmter Zeit ( 1-10 Minuten / sowohl auf meinem Pi, wie auch in einer Ubuntu VM):

root@ubufhem:/opt/fhem# Thread 1 terminated abnormally: Can't use string ("
    ") as an ARRAY ref while "strict refs" in use at FHEM/lib/UPnP/Common.pm line 219, <$client> line 2.

Habe echt schon viel ausprobiert - komme hier aber irgendwie nicht weiter und das Problem scheint ja bei anderen auch nicht aufzutreten... Falls Du mehr Infos benötigst oder irgendeine Idee hast, lasse es mich bitte wissen.

Dank und Gruß,
Peter

Reinerlein

Hi Peter,

die Meldung klingt auf jeden Fall erstmal komisch. Da scheint sich ein Device gemeldet zu haben, welches keine Kindelemente hat. Das sollte aber bei Sonos-Komponenten immer der Fall sein.

Kannst du mal den Loglevel hochschrauben (auf 5), und die Konsolenausgabe (nicht das Fhem-Log) hier posten, oder mir per PN zukommen lassen?
Vielleicht erkennt man dort etwas...

Um das zu vereinfachen kannst du den UPnP-Server auch selber starten, und danach Fhem starten.
Also z.B. erstmal Fhem komplett beenden, dann in dem FHEM-Verzeichnis:sudo perl 00_SONOS.pm 4711 5 > console.logausführen. Da müsste dann in der Datei "console.log" erstmal ungefähr folgende Ausgabe auftauchen:Current: "/etc/fhem/fhem/FHEM/00_SONOS.pm", gPath: ""
2013.10.16 00:49:09 1: SONOS0: /etc/fhem/fhem/FHEM/00_SONOS.pm is listening to Port 4711

Nun kannst du Fhem starten, wenn du dort allerdings eine andere Verbindung als localhost:4711 konfiguriert hattest, muss du das oben entsprechend anpassen. Sonst findet Fhem den Server nicht...

Wenn dein Fhem sich dann verbunden hat, kommt noch so was in der Art dazu:2013.10.16 00:49:10 1: SONOS0: Connection accepted from localhost:57254gefolgt von ganz vielen Ausgaben, das Threads gestartet wurden, und irgendwelche Events empfangen wurden...

Nun kannst du nach dem Auftreten des Fehlers bequem die Log-Datei weiterverarbeiten (z.B. mir senden :-)...

Grüße Reiner

JoeALLb

Zitat von: Reinerlein am 15 Oktober 2013, 11:37:50
Diese "Abstürze" sind manchmal leider normal. Die kommen immer mal wieder dann, wenn die Subscriptions erneuert/auf- oder abgebaut werden sollen, und sind ein Fehler in der verwendeten Library "perlupnp". In meinen Tests hatte das aber keinen Einfluss auf die Funktionalität. Geht denn irgendwas danach nicht mehr?

Meine Abstürze scheinen leider direkt damit zusammenhängen. Ich bekomme immer diese Sequenz vor einem Absturz.
Die CPU-Last geht bei der ersten Fehlermeldung auf 100% und fhem reagiert nicht mehr. Der Speicherverbrauch steigt.
Manchmal fängt sich das System wieder, häufig wird fhem jedoch abgeschossen. Manchmal, wenn die CPU-KLast zu lange hoch bleibt (über 30 Minuten),
dann rebootet der watchdog das Betriebssystem.
-> Ich versuche jetzt auch mal, fhem als root auszuführen?!!?

Unsubscription request failed with error: 412 Precondition Failed at FHEM/lib/UPnP/ControlPoint.pm line 1001 thread 1.
Argument "disconnect" isn't numeric in numeric ne (!=) at FHEM/00_SONOS.pm line 2575, <$client> line 2.
Argument "" isn't numeric in numeric ne (!=) at FHEM/00_SONOS.pm line 2562, <$client> line 2.
Argument "" isn't numeric in numeric ne (!=) at FHEM/00_SONOS.pm line 2575, <$client> line 2.
Argument "" isn't numeric in numeric ne (!=) at FHEM/00_SONOS.pm line 2562, <$client> line 2.
Argument "" isn't numeric in numeric ne (!=) at FHEM/00_SONOS.pm line 2575, <$client> line 2.
Argument "" isn't numeric in numeric gt (>) at FHEM/00_SONOS.pm line 3123, <$client> line 2.
Argument "" isn't numeric in numeric gt (>) at FHEM/00_SONOS.pm line 3123, <$client> line 2.
Argument "" isn't numeric in numeric gt (>) at FHEM/00_SONOS.pm line 3123, <$client> line 2.
Argument "" isn't numeric in numeric gt (>) at FHEM/00_SONOS.pm line 3123, <$client> line 2.
Argument "" isn't numeric in numeric gt (>) at FHEM/00_SONOS.pm line 3123, <$client> line 2.
Can't call method "kill" on an undefined value at FHEM/00_SONOS.pm line 4081, <$client> line 2.
Perl exited with active threads:
        2 running and unjoined
        0 finished and unjoined
        0 running and detached
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

JoeALLb

Zitat von: Reinerlein am 15 Oktober 2013, 11:37:50
Das mit dem Caching wird etwas schwierig werden, da man ja eine Art Datenbank vorhalten müsste, welche Datei mit welchem Text generiert wurde.
Hm, eine einfache Lösung, die für mich völlig reichen würde, wäre, den dateinamen als sha1-hash des Textes zu erzeugen, und vor einem download einfach zu prüfen, ob diese Datei schon vorhanden ist. Ich bezweifle, dass ich dadurch einen doppelten Dateinamen bei anderen Textmeldungen erhalten würde, und wenn doch, würde ich es als unkritisch einstufen. Ob die Lösung jedoch als "allgemeingültig" eingestuft werden kann, kann ich derzeit nicht beurteilen.
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

peter79

#428
Hi Reiner,

besten Dank für die Hinweise - die Logs bleiben aber leider leer und der Thread stürzt ab, wie beschrieben.

@Da scheint sich ein Device gemeldet zu haben, welches keine Kindelemente hat. Das sollte aber bei Sonos-Komponenten immer der Fall sein.
--> Das war jetzt aber trotzdem der entscheidende Hinweis :-)

Habe aufgrund dessen, einmal den Traffic in meinem Netz etwas genauer angeschaut:
--> da sprechen doch auch noch andere Komponenten UPnP... wie z.B. das IPMI meines Supermicro Mainboards im VM-Server (grr... kann noch nicht mal abgestellt werden, OK könnte sicher auch in ein anderes VLAN, aber ich will das zu hause mal nicht übertreiben...).
--> Genau dann, wenn sich das IPMI mit einer SSDP-Message meldet, scheint Dein Modul das IPMI als Device einbinden zu wollen und der Thread stürzt ab :-(

Da ich im Moment nicht sicher bin, ob dies an der UPnP-Lib oder Deinem Script liegt - ist es ggf. möglich die Prüfroutine der zulässigen Geräte etwas zu verfeinern (denke dass könnte mit anderen Devices auch noch Probleme geben...)?

Viele Grüße
Peter

Reinerlein

Hi Peter,

hmm... eigentlich sage ich in meiner Broadcast-Such-Anfrage, dass ich Geräte haben möchte, die den Typ "urn:schemas-upnp-org:device:ZonePlayer:1" haben. Alles andere sollte dann auch nicht gemeldet werden.

Aber du hast natürlich Recht, ich prüfe in meiner Callback-Methode dann nicht mehr, was sich da eigentlich gemeldet hat, sondern laufe einfach mit meiner Verarbeitung los :-)
Ich schaue mir das nochmal an, da kann man sicherlich noch eine Prüfung einbauen, mein Skript ist da nur etwas gutgläubig...

Allerdings sollte wirklich was auf der Konsole rauskommen, da wird so einiges gemeldet. Aber wir haben jetzt ja erstmal einen Anhaltspunkt den ich verfolgen/ausmerzen kann. Dann schauen wir weiter...

Grüße Reiner

JoeALLb

Bei einem Tastendruck liefert ein Notify mit folgendem Inhalt

set Sonos_Wohnzimmer RemoveMember Sonos_Schlafzimmer,Sonos_Kueche,Sonos_Bad;;
set Sonos_Wohnzimmer stop


diese Fehlermeldung...
Can't use string ("") as a HASH ref while "strict refs" in use at ./FHEM/21_SONOSPLAYER.pm line 486.
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

Reinerlein

Hi JoeALLb,

der Befehl "RemoveMember" ist momentan nur für das Entfernen von einem Mitglied der aktuellen Gruppe gebaut (genauso wie "AddMember" nur einen hinzufügen kann). Es kann also keine Liste übergeben werden, sondern nur ein Devicename.

Ich schreibe das mal auf meine Liste, dass dort auch mehrere Elemente möglich sein sollen.

Alternativ dazu kannst du am zentralen Sonos-Device den "Groups"-Befehl verwenden. Wenn du einen Zoneplayer alleine in einer Zone haben möchtest, kannst du das dort z.B. mit dem Befehlset Sonos Groups [Sonos_Wohnzimmer]erreichen.

Grüße Reiner

JoeALLb

Hallo Reinerlein,

danke für die Info, das habe ich wohl übersehen.

set Sonos Groups [Sonos_Wohnzimmer]
hat leider nur einmal funktioniert, seither macht es nichts mehr.... während andere Befehle aber noch angenommen werden.
Seltsam alles.... ich teste weiter!
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

JoeALLb

#433
Nachtrag:
Wenn ich alle Sonose getrennt einzeln angebe, löst er die Gruppen zuverlässig auf!
Bsp:
set Sonos Groups [Sonos_Bad], [Sonos_Kueche]


Folgendes fällt mir noch auf: Wenn ich diesen Befehl über ein notify starte,
set Sonos Groups [Sonos_Wohnzimmer,Sonos_Kueche];;set Sonos_Wohnzimmer LoadRadio BAYERN%203;;set Sonos_Wohnzimmer Play;;set Sonos_Wohnzimmer Volume 40;;set Sonos_Kueche Volume 40
kommt folgender Fehler.
Hier habe ich das % in Bayern 3 vergessen zu escapen.

String found where operator expected at (eval 617) line 1, near "Tirol",""
Bareword found where operator expected at (eval 617) line 1, near "","LoungeFM"
        (Missing operator before LoungeFM?)
String found where operator expected at (eval 617) line 1, near "LoungeFM",""
Bareword found where operator expected at (eval 617) line 1, near "","ORF"
        (Missing operator before ORF?)
String found where operator expected at (eval 617) line 1, near "4",""
        (Missing operator before ","?)
Bareword found where operator expected at (eval 617) line 1, near "","RTL"
        (Missing operator before RTL?)
Number found where operator expected at (eval 630) line 1, near "" not found. Choose one of: "95.5"
        (Missing operator before 95.5?)
Bareword found where operator expected at (eval 630) line 1, near "95.5 Charivari"
        (Missing operator before Charivari?)
String found where operator expected at (eval 630) line 1, near ")",""
        (Missing operator before ","?)
Bareword found where operator expected at (eval 630) line 1, near "","Antenne"
        (Missing operator before Antenne?)
Bareword found where operator expected at (eval 630) line 1, near "","BAYERN"
        (Missing operator before BAYERN?)
Number found where operator expected at (eval 630) line 1, near "BAYERN 3"
        (Do you need to predeclare BAYERN?)
String found where operator expected at (eval 630) line 1, near "3",""
        (Missing operator before ","?)
Bareword found where operator expected at (eval 630) line 1, near "","Bayern"
        (Missing operator before Bayern?)
Number found where operator expected at (eval 630) line 1, near "Bayern 2"
        (Do you need to predeclare Bayern?)
String found where operator expected at (eval 630) line 1, near "2",""
        (Missing operator before ","?)
Bareword found where operator expected at (eval 630) line 1, near "","Jamcast"
        (Missing operator before Jamcast?)
String found where operator expected at (eval 630) line 1, near "Jamcast",""
Bareword found where operator expected at (eval 630) line 1, near "","Life"
        (Missing operator before Life?)
String found where operator expected at (eval 630) line 1, near "Tirol",""
Bareword found where operator expected at (eval 630) line 1, near "","LoungeFM"
        (Missing operator before LoungeFM?)
String found where operator expected at (eval 630) line 1, near "LoungeFM",""
Bareword found where operator expected at (eval 630) line 1, near "","ORF"
        (Missing operator before ORF?)
String found where operator expected at (eval 630) line 1, near "4",""
        (Missing operator before ","?)
Bareword found where operator expected at (eval 630) line 1, near "","RTL"
        (Missing operator before RTL?)
Use of uninitialized value in string eq at ./FHEM/00_SONOS.pm line 3752.
Use of uninitialized value in string eq at ./FHEM/00_SONOS.pm line 3752.
Use of uninitialized value in string eq at ./FHEM/00_SONOS.pm line 3752.
Use of uninitialized value in string eq at ./FHEM/00_SONOS.pm line 3752.
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

Reinerlein

Hi JoeALLb,

Bei deinem Radiosender schnippelt Fhem das Prozent-Zeichen raus, und setzt dafür den Namen des Events ein.

Du musst in einem Notify "%%" schreiben, um ein Prozentzeichen durchzubekommen.

Zu den Gruppen: Der Befehl erzeugt die angegebenen Gruppenkonstellationen. Mein Tipp war eher eine Zweckentfremdung dessen, da ich davon ausgegangen bin, dass du gerne dein Wohnzimmer alleine haben wolltest :-) Wenn du alles in einzelne Zonen möchtest, musst du das so machen, wie du geschrieben hast. Korrekterweise auch noch mit dem Wohnzimmer:set Sonos Groups [Sonos_Bad], [Sonos_Kueche], [Sonos_Wohnzimmer]

Grüße Reiner