Sonos steuern

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

Vorheriges Thema - Nächstes Thema

djhans

Hallo,
ich noch einmal: Ich habe immer noch keine richtige Idee, wie ich das Event für die Bildung einer Gruppe abfragen kann. Ich kriege zwar die Gruppenkonstellation ausgelesen, aber wie frage ich das Event beim erstellen un beim auflösen von Gruppen ab?

djhans

JoeALLb

Statusupdate:
Mein FHEM ist stabil, solange ich kein Sonosgerät abstecke oder vom Strom trenne.
Da ich das normalerweise nie mache, bin ich sehr zufrieden und glücklich, vielen Dank Reiner!!

Letzte Woche habe ich einen Stromausfall dadurch bemerkt, dass sich meine Temperatursensoren nicht mehr stellen konnte.
Nach einer Nachforschung habe ich gesehen, dass FHEM wieder hängte und ich die seltsamen Logeinträge von Sonos wieder erhalten habe.
Ein kurzer Neustart und alles ist wieder seit Tagen gut!
GGf. konfiguriere ich einen Watchdog um diesen Fehler zeitnah automatisiert zu beheben.


der glückliche Joe
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

der-Lolo

Hallo Joeallb,
Ich fragte schonmal ob du deine fhem Sonos Konfiguration mal ein bisschen erklären könntest, ich habe auch einen Raspi übrig und würde diesen gerne für Sonos nutzen...

JoeALLb

#888
Hast Du eine konkrete Frage?
Mein FHEM läuft auf einem RPI mit DBlog.
Ich betreibe 5 Sonos-Geräte im Netz. Die Verbindung mit FHEM über das Modul läuft gut und eröffnet ganz neue Möglichkeiten.
Beispielsweise habe ich einen Taster neben der Türe mit der Aufschrift "Alle Sonos an/aus". Ein Traum, wenn man dazu keinen Controller benötigt.
Den Wecker steuer ich derzeit über einen Google-Kalender, der auch über fhem das Sonos konfiguriert.
Somit kann ich jederzeit über den Kalender am Handy meinen Wecker umstellen, auch von der Arbeit aus.

Nachtrag Edit 1:
FHEm ich auch mit der Fritzbox verbunden und sstellt Sonos leider, wenn ein Anruf eingeht.
Gleichzeitig wird "Telefon" als Durchsage auc 3 Sonosgeräten ausgegeben. Läuft zuverlässig,
jedoch höre ich manchmal vor der Durchsage noch den am LineIN angehängten Fernseher....


Weitere Fragen?!? ;-)
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

der-Lolo

Ja, es gibt ja zwei Möglichkeiten fhem2fhem zu betreiben, nutzt du den Log Modus? Reagierst also quasi gegenseitig auf die logfiles - in deinem fall ja db...

JoeALLb

Jetzt verstehe ich, warum du mich fragst ;-)
Ich habe mittlerweile umgebaut: Mein Sonos war früher auf einem eighenen RPI, mittlerweile ist es am Produktivsystem.
Ich habe damals fhem2fhem im Logmodus verwendet und alles hat gut funktioniert. Dabei werden ja auch events mit übertragen!
Mit Logfiles selbst hat da snichts zu tun!
Geloggt habe ich nur am Produktivsystem, am DEV-System habe ich einfach kein "define xx logfile" angelegt.

Derzeit verwende ich fhem2fhem  nur zwischen der Fritzbox und dem RPI.
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

Info2:
Nach einem längeren Test kann ich nun definitiv sagen,
dass der Mediaserver auf einer Synology mein Sonos-system stört!
Immer mal wieder hatte ich seltsame Effekte wie zB das plötzliche Starten eines Players ohne manuellen Eingriff.

Heute hatte ich entdeckt, dass mein Küchenplayer immer ein Lied wieder startet, nachdem ich etwas anderes gestoppt habe (beispielsweise den Radio).
Danach war im Controller immer ein Lied eines Albums "geladen" und hat ein paar Sekunden zu spielen begonnen.

In diesem Modul hab man "während der Probleme" nur bemerkt, dass ein Umschalten von einem Lied zum anderen besonders lange dauert!

Wenn ihr also seltsame Probleme habt, überlegt auch, ob ihr eventuell andere Mediaserver im Netzt habt.
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

djhans

Hallo,
ich noch einmal: Ich habe immer noch das Problem mit meinen Sonos-Gruppen. Ich weiß immer noch nicht, wie ich auf das Event reagieren muss, wenn eine Gruppe gebildet bzw. wieder aufgelöst wird, damit ich die Visualisierung in fhem antriggern kann...

Gruß,
djhans

Reinerlein

Hallo djhans,

du brauchst doch nur ein Notify auf deinem zentralen Sonos-Device auf dem Reading "ZoneGroupState" zu machen:

define zoneChange notify Sonos:ZoneGroupState { doChanges(); }
Was in dem reading drinsteht, ist zunächst egal, da du in deinem Eventhandler einfach die Hilfsmethodik aufrufst:

fhem("get Sonos Groups");
dessen Ergebnis du allerdings noch sinnvoll zerlegen musst, und in Konfigurationsaufrufe für deine Oberflächenänderungen umwandeln musst...

Wie du letzteres machst, kann ich dir leider auch nicht sagen, da musst du mal experimentieren...

Grüße
Reiner

Capeghost

Hallo,
so, ich habe jetzt meine Ausstattung zusammen und mein SONOS lässt sich zumindest einwandfrei über das Web-Interface von FHEM steuern.
Jetzt möchte ich aber gerne, dass mein Sonos_Schlafzimmer (Play:5) auf Drücken der Taste Fern1Taste3links (von meiner FS20 S8 und schon in FHEM angelegt) den Radiosender aac://mp3.radiohamburg.c.nmdn.net/radiohamburg/livestream64.aac abspielt. Wie lautet da der entsprechende Befehl? Im Thread habe ich nur gefunden, wie man es definiert, dass ein bestimmter Sender beim Anschalten eines Sonos (z.B. über Funksteckdose) gespielt wird. Wie kann ich aber mein Vorhaben umsetzen?
Ich hoffe, ihr könnt mir helfen.
Danke schon mal.

djhans

Hi Reiner,
danke! Das probiere ich mal aus. Den String habe ich bereits mit regexp zerlegt; komme aber noch nicht so richtig weiter mit den readingsGroup....da muss ich mir noch mal Gedanken zu machen...

Wen es interessiert:
sub
SplitGroups($)
{
  my ($str) = @_;
  my @data = map { s/[^,]+(_SW|_RF)//g; s/^,|,$//g; s/,,/,/g; $_}
  $str =~ m{\[([^\]]+)\]}g;
  return (@data);


aufgeruden wird das Ganze mit:
my @x = SplitGroups (fhem("get Sonos Groups"))

set Sonos Groups liefert diesen String:
[Sonos_Buero], [Sonos_Schlafzimmer, Sonos_Schlafzimmer_RF, Sonos_Bad], [Sonos_Terrasse], [Sonos_Wohnzimmer, Sonos_Wohnzimmer_SW]

In x sieht das dann so aus:
x1:Sonos_Buero
x2:Sonos_Schlafzimmer, Sonos_Bad
x3:Sonos_Terrasse
x4: Sonos_Wohnzimmer


djhans

Reinerlein

Hallo Capeghost,

auch das kannst du einfach mit einem Notify erreichen, der auf dein Tastenevent reagiert, und die entsprechende Steuerung am Sonos übernimmt:

define Fern1Taste3linksNotify notify Fern1Taste3links:on set Sonos_Wohnzimmer PlayURI aac://mp3.radiohamburg.c.nmdn.net/radiohamburg/livestream64.aac
Der Name des Notify bleibt natürlich dir überlassen, und du musst schauen, ob da wirklich ein "on"-Event kommt...

Ich persönlich würde aber den Radiosender als Radiofavorit im Sonos ablegen, und im Notify dann diesen ansteuern. Dabei werden dann auch wieder alle üblichen Informationen bei dir im Controller angezeigt (falls die "aac"-URL überhaupt geht):

define Fern1Taste3linksNotify notify Fern1Taste3links:on set Sonos_Wohnzimmer LoadRadio RADIOSENDERNAME


Näheres zu den möglichen Befehlen des Moduls auch mal die Wiki-Seite durchgehen: http://www.fhemwiki.de/wiki/Sonos_Anwendungsbeispiel

Grüße
Reiner

Capeghost

Hallo Reinerlein,
danke.
Hat geklappt, jetzt habe ich auch endlich die Bedeutung des Notify verstanden. Kann ich eigentlich einen bestehenden Notify ändern oder geht das nur über Löschen und Neuanlage? Muss nämlich noch die Lautstärke einbauen.
Das Wiki zu dem Thema hatte ich mir angeschaut, aber für den konkreten Fall nichts gefunden, weil wohl das Gesamtverständnis fehlte.
Eine Frage habe ich noch: Wie komme ich dann an die zu verwendenden Sendernamen der Radiofavoriten? Habe das jetzt mit 'Get Sonos_Wohnzimmer Radios' versucht, aber wo sehe ich dann die Informationen?
Danke.

Gruß

Capeghost

Reinerlein

Hi Capeghost,

die Ergebnisse der Anfragen an die Sonos-Player werden meistens asynchron verarbeitet, sodass das Ergebnis dann im Normalfall irgendwann im Reading "LastActionResult" des jeweiligen Player-Fhem-Devices auftaucht...

Und du kannst ein Notify einfach über die Weboberfläche ändern, indem du bei dem Notify auf den Internals-Namen "DEF" klickst.
Schau dir für mehrere Befehle in Kette aber die Beschreibung von notify (und vielleicht auch ein Beispiel von der Wiki-Seite) an... da kann man einiges falsch machen :-)

Grüße
Reiner

Reinerlein

Hallo zusammen,

ich würde gerne demnächst mal wieder den Dev-Stand in den offiziellen Pfad übertragen. Damit wäre dann auch mal das Wiki wieder aktueller...

Ich bin der Meinung, dass die Dev-Version sehr stabil läuft. Das einzige war noch die Geschichte mit den Durchsagelautstärken bei Gruppen, die ich leider nicht selber nachvollziehen konnte.

Dazu habe ich aber eine Änderung eingebaut:
Es gibt bei Sonos die Methodik "SnapshotGroupVolume", die das aktuelle Lautstärkeverhältnis zwischen den diversen Gruppenteilnehmern festhält, um eine Lautstärkenänderung zu ganz klein (wo das Verhältnis immer mehr zusammenschrumpft) zurück nach ganz groß (wo man gerne das ursprüngliche Verhältnis wieder sehen würde) zu ermöglichen.
Das habe ich meiner Meinung zu oft aufgerufen :-)

Ich habe jetzt zum Einen den Setter "SnapshotGroupVolume" eingeführt, um dem Anwender zu ermöglichen das selber z.B. vor einem setGroupVolume aufrufen zu können (aber eben nicht automatisch zu müssen), und zum Anderen wird dieses SnapshotGroupVolume implizit einmal beim Starten einer Durchsage aufgerufen (aber nicht mehr beim Beenden wie bisher).

Ich hoffe, dass damit die Problematik ein bißchen weniger auftritt, bzw. mal ganz weg ist.

Irgendwelche Einwände gegen die Übertragung in den normalen Pfad? :-)

Grüße
Reiner