Sonos steuern

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

Vorheriges Thema - Nächstes Thema

Reinerlein

Hallo zusammen,

ich wollte mal kurz eine aus-dem-Urlaub-zurück-Meldung geben.

Das Thema mit den Weckern werde ich die nächsten Tage angehen. Allerdings bin ich mir noch nicht ganz über das erwartete Verhalten bei gruppierten Zonen sicher. Es kann sein, dass ich dazu auf die Möglichkeit eines zweiten Players warten muss, um zu sehen, was da so für Informationen geliefert werden...

Also frohes schaffen nach den verschneiten Ostertagen :-)

Grüße Reiner

bapou

Hallo Reiner,

inzwischen habe ich auch einen Raspberry Pi und damit dein SONOS Modul zum laufen bekommen. Herzlichen Dank.
Da ich das SONOS Modul vor allem wegen der Verbindung des SONOS Weckers mit dem Rest installiert habe, wuerde ich
mich natuerlich freuen wenn du bei dem auslesen der Weckzeit weiter kommst.

Herzlicher Gruss,
Thom

Reinerlein

Hi Thom,

das ist ja schon mal super... leider muss ich mich echt für meine Langsamkeit entschuldigen.
Ich habe wegen des Gartensaisonstarts und den vorhergehenden Sturmzeiten leider von meiner Frau eine komplette Terrassensichtschutzwanderneuerung auf den Tisch gelegt bekommen.
Das muss ich jetzt erstmal Ansatzweise wieder loswerden.

Ich werde (und habe auch schon) zwischendurch an dem Sonos-Modul weiter arbeiten. Leider wird es sich noch etwas verzögern.

Grüße Reiner

det.

Hallo Reiner,

immer schön den WAF hochhalten, das ist wichtig, spätestens im Investitionsprozess für die nächsten Anschaffungen zur Hausautomatisierung. Mein SONOS Modul läuft inzwischen prima - DANKE! - auf einem neuen RPI, nur wenn ich über die Woche arbeiten bin und dabei natürlich daheim keine Musik höre beschwert sich FHEM bei Anrufen. Callmonitor läuft auf der FB und schaltet normalerweise erfolgreich über FHEM2FHEM mit dem RPI die Musik in der Stube bei Anruf ab. Hast Du dazu eine Idee?define CALL notify .*CM.* {fhem "set Sonos_Wohnzimmer Mute on"}
2013.04.22 18:44:41 3: set Sonos_Wohnzimmer Mute on : ERROR: SonosPlayer disappeared
2013.04.22 18:44:41 3: CALL return value: ERROR: SonosPlayer disappeared
2013.04.22 18:44:45 3: SONOS1: ProxyObject does not exists
und so geht das weiter bis der Anrufende merkt, dass niemand daheim ist.
LG
det.

Reinerlein

Hi Detlev,

die Fehlermeldung ist im Prinzip korrekt, da du ja versuchst einen Befehl abzusenden, und dieser nur nicht ausgeführt werden kann.

Du müsstest also eher folgendes schreiben:
define CALL notify .*CM.* { if (ReadingsVal("Sonos_Wohnzimmer", "presence", "disappeared") eq "appeared") { fhem "set Sonos_Wohnzimmer Mute on" } }Damit wird das nur ausgeführt, wenn der Player präsent ist.

Grüße Reiner

det.

Hallo Reiner,

vielen Dank, habe es eingeändert und schaue heute Abend, ob es funktioniert hat. Entschuldige meine Faulheit, aber bei der Wahl zwischen try and error oder Reiner fragen konnte ich nicht widerstehen, Letzteres zu wählen.
Habe da leider noch einen Patienten:define Radio_Paradise dummy
attr Radio_Paradise room Sonos
attr Radio_Paradise setList on off
attr Radio_Paradise sortby 1
define Radio_AN notify Radio_Paradise {fhem "set Sonos_Wohnzimmer LoadRadio Radio%%20Paradise";;\
fhem "set Sonos_Wohnzimmer Volume 15";;\
fhem "set Sonos_Wohnzimmer Play"}
Da der Sonos direkt am Netzkabel hängt (ohne Bridge) und über FS20 Schaltsteckdose am Wochenende früh eingeschaltet wird braucht er recht lange zum Start. Wenn ich den Radiosende s.o. zu früh "einschalte" stürzt FHEM auf dem RPI ab. Hast Du eine Idee, wie ich das verhindern kann?
LG
det.

Reinerlein

Hi Detlev,

kein Problem, solange ich noch Ideen habe :-)

Zu deinem anderen Patienten:
Ich fürchte das wird etwas komplizierter.

Du müsstest einen Notify wie aus dem Wiki mit deinem Dummy und dem Notify für deine Steckdose kombinieren:
define Radio dummy
attr Radio setList on off

define Sonos_Wohnzimmer_Appeared_Notify notify Sonos_Wohnzimmer:presence:.appeared { \
if (Value("Radio") eq "on") { \
fhem "set Sonos_Wohnzimmer LoadRadio Radio%%20Paradise" ;; \
fhem "set Sonos_Wohnzimmer Volume 15" ;; \
fhem "set Sonos_Wohnzimmer Play" \
} \
}
Das sorgt erstmal dafür, daß beim Melden des Players der Radiosender geladen wird, wenn der Dummy "on" ist.

Jetzt noch dein Schalter-Notify:define fernbedienungsschalter FS20 ....

define fernbedienungsschalter_on notify fernbedienungsschalter:on set Radio,Steckdose on
define fernbedienungsschalter_off notify fernbedienungsschalter:off set Radio,Steckdose off
Damit schaltest du mittels einer FS20 Fernbedienung (hier alles nur exemplarisch und Auszugsweise) die Steckdose an, und den Wunsch, danach Radio hören zu wollen (was dann ja beim Appearen des Players abgefragt wird).

Du musst da u.U. noch ein paar Seiteneffekte beseitigen, z.B. dafür sorgen. dass der Radio-Dummy irgendwann auch sicher auf off geschaltet wird, sonst hörst du beim Einschalten des Zoneplayers immer deinen Radiosender :-)
Desweiteren kannst du das natürlich beliebig erweitern, indem du weitere Radio-Dummies definierst, und beim Appeared-Notify entsprechend darauf reagierst.

Also, viel Potential zum Spielen :-)

Grüße Reiner

det.

Hallo Reiner,
funktionierte so noch nicht, da der Player nach dem FHEM Neustart ( update ) noch nicht an war. Dabei hat er nur folgenden state:
(siehe Anhang / see attachement)
LG
det.

Reinerlein

Hi Detlev,

der Zustand ist normal, solange sich der Player noch nicht gemeldet hat.
Was passiert denn, wenn in diesem Zustand der Player angeschaltet wird? Bleibt das dann so? Eigentlich sollten sich dann alle Werte aktualisieren, und im Presence-Reading dann auch was von "appeared" stehen...

Wenn sich da nix aktualisiert, kannst du mir die Logs dazu senden?

Grüße Reiner

det.

Hallo Reiner,

Danke für Deine schnellen Bemühungen. Ich bekomme da offenbar mindestens 2 ungünstige state Zustände (1 und 3), auf die es im Falle eines Telefonanrufes unterschiedlich zu reagieren gilt.
1* SONOS ohne 220V und noch nicht gestartet nach dem letzten shutdown restart: initialized
2* SONOS nur 220V eingeschaltet, sonst nichts angewählt oder abgespielt: appeared
3* SONOS nach 2* - 220V einfach wieder ausgeschaltet - state ändert sich da leider nicht: appeared
und dann noch die bekannten state, beim Musik abspielen etc, da funktioniert ja alles.
LG
det.

Reinerlein

Hi Detlev,

für deine Telefon-Mute-Schaltung solltest du nicht auf den State abfragen. Im Endeffekt ist für eine Steuerung des Players seitens Fhem nur wichtig, ob der Player da ist, und Befehle empfangen kann. Deshalb dafür immer das Reading "presence" abfragen (was du aber vermutlich schon tust).

In meinem Beispiel prüfe ich explizit, ob dieses Reading "appeared" ist, was nur der Fall sein sollte, wenn der Player noch/schon erreichbar ist.

Wenn dieses Reading nicht sauber auf "disappeared" gesetzt wird, dann versuch doch bitte mal den pingType zu setzen (an der Sonos-Zentralkomponente). Standardmäßig wird dort "syn" verwendet.
Bei mir funktioniert das leider nur manchmal sicher (ich vermute da als Übeltäter meinen Managed-Switch, der die ARP-Adresse zu lange puffert, und deshalb ein Syn-Paket einfach an den zuletzt bekannten Port weiterleitet, egal ob dort der Zoneplayer noch lebt, oder nicht).
Ich habe das bei mir auf "icmp" umgestellt. Dafür braucht der Prozess aber mehr Rechte (root).

Grüße Reiner

mullischlumpf

Hallo zusammen,

bin nun ebenfalls stolzer Anwender von FHEM ;-)

Zu meinem aktuellen Glück fehlt mir nur noch die erfolgreiche Einrichtung meiner Sonos-Player.

Ich habe mich an den Wiki Eintrage gehalten und alle CPAN Module installiert, sowie die Files entsprechend abgelegt. Wenn ich nun ein define Sonos SONOS in die fhem.cfg schreibe bekomme ich im Log leider folgende Fehlermeldung mit der ich nichts anfangen kann:

2013.05.01 13:18:35 1: reload: Error:Modul 00_SONOS deactivated:
 Attempt to reload threads.pm aborted.
Compilation failed in require at /usr/local/FHEM/share/fhem/FHEM/00_SONOS.pm line 60, <$fh> line 59.
BEGIN failed--compilation aborted at /usr/local/FHEM/share/fhem/FHEM/00_SONOS.pm line 60, <$fh> line 59.

2013.05.01 13:18:35 0: Attempt to reload threads.pm aborted.
Compilation failed in require at /usr/local/FHEM/share/fhem/FHEM/00_SONOS.pm line 60, <$fh> line 59.
BEGIN failed--compilation aborted at /usr/local/FHEM/share/fhem/FHEM/00_SONOS.pm line 60, <$fh> line 59.


Hat mir hier jemand einen Hinweis woran es liegen könnte?

Danke euch :-)

Reinerlein

Hi Thorsten,

schön dich hier zu haben :-)

Zu deiner Fehlermeldung:
Kann es sein, dass du nicht ganz die aktuellste Version des Sonos-Moduls laufen hast?
Zeile 60 ist in der aktuellen Version eine Kommentarzeile bzgl. Releasenotes :-)

Das momentan aktuellste wurde von mir in diesem Post hochgeladen:
Link

Ansonsten wäre die Frage, auf welcher Hardware du das laufen hast? Threads-Probleme kenne ich bislang nur von der Fritzbox. Da wärst du aber schon weiter gekommen, als so mancher anderer hier. Normalerweise läuft es auf der Fritzbox einfach nicht :-)

Grüße Reiner


mullischlumpf

Hallo Reiner,

danke für den Hinweis. Jetzt habe ich mir die aktuellen Files abgelegt. Dadurch hat sich die Meldung leider nur um ein paar Zeilen verschoben ;-)

Ich versuche das Ganze auf einer Synology NAS laufen zu lassen. Hoffe mal da besteht die Chance es ans laufen zu bringen. Ansonsten habe ich das aktuellste FHEM 5.4.

2013.05.01 23:01:39 1: reload: Error:Modul 00_SONOS deactivated:
 Attempt to reload threads.pm aborted.
Compilation failed in require at /usr/local/FHEM/share/fhem/FHEM/00_SONOS.pm line 117, <$fh> line 59.
BEGIN failed--compilation aborted at /usr/local/FHEM/share/fhem/FHEM/00_SONOS.pm line 117, <$fh> line 59.

2013.05.01 23:01:39 0: Attempt to reload threads.pm aborted.
Compilation failed in require at /usr/local/FHEM/share/fhem/FHEM/00_SONOS.pm line 117, <$fh> line 59.
BEGIN failed--compilation aborted at /usr/local/FHEM/share/fhem/FHEM/00_SONOS.pm line 117, <$fh> line 59.

Gruß

justme1968

es kommt drauf an welche diskstation du hast und welche perl version.

das perl aus  optware ist ohne thread support kompiliert. beim perl von marin fischer weiss ich es nicht.

falls du eine der intel basierten diskstations hast kannst du es mal mit aktive perl versuchen. die linux version lässt sich ganz normal installieren.

ob es daran liegt kannst du rausfinden wenn du die jeweilige perl version mit -V aufrufst. in der liste sollte ein 'useithreads=define' auftauchen wenn der thread support da ist. ansonsten ein 'useithreads=undef'.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968