[Gelöst]Probleme mit Homebridge und Sonos Volume

Begonnen von xxAvarlonxx, 24 April 2017, 10:49:34

Vorheriges Thema - Nächstes Thema

xxAvarlonxx

Hallo zusammen,

ich hoffe die Frage gehört noch zu dem Bereich Anfängerfragen, wenn nicht werde ich das Thema in den Homebridge Thread schieben. Aber ich vermute meine Frage ist so trivial wahrscheinlich, dass diese auch hier beantwortet werden kann.

Zu meinem Problem/Frage: Ich habe eine Sonos bei mir stehen und diese in FHEM eingebunden und über Homekit verfügar gemacht.
Das homebridgeMapping des SONOSPLAYERS habe ich wie folgt gesetzt


On=transportState, ValueOn=PLAYING, ValueOff=STOPPED, cmdOn=Play,cmdOff=Pause Brightness=Volume::Volume, nocache


Mit der Einstellung funktioniert die Sonos in Homekit einwandfrei.
Jetzt möchte ich aber gerne meine favorisierten Radiosender in Sonos immer direkt über Homekit anschalten. Dazu habe ich für jeden Sender einen eigenen Dummy angelegt. Hier ein Beispiel:


defmod WZ.Sonos_Leidergeil dummy
attr WZ.Sonos_Leidergeil genericDeviceType switch
attr WZ.Sonos_Leidergeil group Musik
attr WZ.Sonos_Leidergeil room Homekit,Wohnzimmer
attr WZ.Sonos_Leidergeil setList on on-for-timer off


Weiterhin habe ich ein DOIF noch hinzugefügt, der einerseits dafür sorgt, dass beim Einschalten der Dummys auf der Sonos der jeweilige Sender startet und andererseits dafür sorgt, dass beim Einschalten eines Sender-Dummys alle anderen SenderDummys ausgeschaltet werden (Prinzip: Radio-Button)


define WZ.di_sonos_sender DOIF (["WZ.Sonos_Leidergeil:on"]) (set WZ.Sonos_Muenster off , set Sonos_Esszimmer StartFavourite FFH%20Leider%20Geil)\
DOELSEIF (["WZ.Sonos_Muenster:on"]) (set WZ.Sonos_Leidergeil off , set Sonos_Esszimmer StartFavourite ANTENNE%20M%C3%9CNSTER)\
DOELSEIF (["WZ.Sonos_Leidergeil:off"]) (set Sonos_Esszimmer Pause)\
DOELSEIF (["WZ.Sonos_Muenster:off"]) (set Sonos_Esszimmer Pause)


Funktioniert auch super. Wenn ich über Homekit jetzt ein Sender einschalte, geht der andere aus und das Device mit dem Sonos-Player geht auch an, sobald ich ein Sender einschalte bzw. ausschalte.

Jetzt möchte ich den umgekehrten Weg aber auch gerne in Homekit hinbekommen. Sprich wenn ich direkt das Sonos-Device einschalte in Homekit und er spielt automatisch den Sender "LeiderGeil" weiter, dass auch das Dummy Device Leidergeil automatisch als angeschaltet dargestellt wird in Homekit.

Naiv habe ich gedacht ich erreiche das mit folgenden homebridgeMapping an den Dummy - Sender - Devices


On=Sonos_Esszimmer:currentSender, ValueOn=FFH+Leider+Geil


Das hat nur leider nicht funktioniert. Hat jemand eine Idee wie man das realisieren könnte?

Weiterhin habe ich noch ein kleines Mini-Problkem, was auch zu dem Bereich gehört:

Ich habe wie oben erwähnt die Sonos direkt zu Homekit/Homebridge hinzugegügt. Um auch die Laustärke darüber regulieren zu können, habe ich folgendes Homebridgemapping am Sonos-Device hinzugefügt


Brightness=Volume::Volume, nocache


und habe den genericDeviceType = light gesetzt.

Funktioniert super in Homekit, ich kann über das Stichwort Helligkeit die Laustärke regulieren und er zeigt sie mir auch korrekt dann in Homekit an. Nach einer Zeit steht aber in Homekit auf einmal 0% bei der Helligkeit, obwohl die Sonos noch läuft und z.B. auf 20% steht, sprich er verliert nach einer Zeit die korrekte Einstellung aus FHEm. Ebenso wenn ich die App Homekit beende, zeigt er mir stumpf wieder 0% an, obwohl die Sonos läuft. Womit hängt das zusammen bzw. was mache ich falsch?

Danke schonmal im Voraus.

Gruß
xxAvarlonxx

justme1968

erzeugen deine sonos devices events für die laustärke änderung? wenn nicht -> im wiki betrag zu sonos steht wie man das aktiviert.

für deine sender ist es einfacher die /.../ regex version für die values zu verwenden. ansonsten schau dir an was homebridge ausgibt.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

xxAvarlonxx

#2
Hallo Justme,

ja stimmt, das hatte ich noch gar nicht geprüft, klassischer Anfängerfehler. Das prüfe ich nachher mal, ob er die Lautstärke überhaupt per Event rauspustet. Aber dann habe ich auch die Homebridge falsch verstanden. ich dachte sie cacht den letzten bekannten Wert solan ge bis per Event ein neuer Wert für das Reading kommt.

Zum 2. Punkt:
Du meinst so müsste das gehen


On=Sonos_Esszimmer:currentSender, valueOn=/FFH+Leider+Geil/, valueOff=/.*/ ?


Update:
Lös ich mein Problem nicht sogar am einfachsten, wenn ich die Sender einfach als ReadingProxy einbinde. Dann habe ich ja
den bidirektionalen Weg in FHEM und brauche kein HomebridgeMapping, welches den für mich abbildet?

Gruß
xxAvarlonxx

justme1968

in der regex ist ein . oder \s für das leerzeichen richtig. nicht +.

für readingsProxy gibt es auf der harmony seite im wiki ein beispiel. und im readme zu homebridge gibt es ein beispiel wie das ganz ohne dummy geht.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Fixel2012

Ich Klinke mich hier auch mal kurz ein, gibt es eine Möglichkeit den Sonos mit Lautstärke anstatt Helligkeit anzusprechen?
Fhem 5.8 auf Raspi 3, HMLAN und 868MHz CUL mit einigen Komponenten, Z-Wave Rollladenaktoren, Tablet UI, 433 MHz CUL mit Baumarktsteckdosen und Temp Sensoren, Amazon Echo, Echo Dot, 2x SONOS  play1, 1x SONOS Connect AMP,  presence, HUE, Lightify

xxAvarlonxx

#5
Zitat von: Fixel2012 am 25 April 2017, 14:45:35
Ich Klinke mich hier auch mal kurz ein, gibt es eine Möglichkeit den Sonos mit Lautstärke anstatt Helligkeit anzusprechen?

Die Hoffnung hatte ich erst auch, aber ich glaube nein, weil Homekit die Regulierung von Lautstärke nicht kennt. Vielleicht haben wir ja mit iOS 11 Glück und Homekit wird dementsprechend erweitert.

Wenn man allerdings Alexa hat und dort mit einem Custom Skill! (der Smart Home Skill kann es auch nicht) arbeitet, dann kann sich die Befehlssätze selber zusammenbauen und dann auch mit dem Wort "Lautstärke" das ganze regulieren.
Allerdings habe ich bei der Einbidnung von Alexa das Gefühl gehabt, das sollte man erst tun wenn man ein sauberes Homebridge Setup hat (falls man eins hat), dann ist die Portierung nach Alexa deutlich einfacher.


Zitat von: justme1968 am 25 April 2017, 11:57:45
in der regex ist ein . oder \s für das leerzeichen richtig. nicht +.

für readingsProxy gibt es auf der harmony seite im wiki ein beispiel. und im readme zu homebridge gibt es ein beispiel wie das ganz ohne dummy geht.

Ja genau das Beispiel habe ich auch entdeckt + deine vehementen Forderungen doch bitte ReadingsProxies zu benutzen und nicht Dummys  ;) :). Ich probiers nachher mal auf und werde in dem Thread berichten.

Danke und Gruss


Fixel2012

Danke für die Erläuterung, habe nur Alexa, aber baut ja aufeinander auf!

Hatte gehofft mit dem Smarthome skill es zu bewältigen.

Gesendet von meinem ONEPLUS A3003 mit Tapatalk

Fhem 5.8 auf Raspi 3, HMLAN und 868MHz CUL mit einigen Komponenten, Z-Wave Rollladenaktoren, Tablet UI, 433 MHz CUL mit Baumarktsteckdosen und Temp Sensoren, Amazon Echo, Echo Dot, 2x SONOS  play1, 1x SONOS Connect AMP,  presence, HUE, Lightify

xxAvarlonxx

Zitat von: Fixel2012 am 25 April 2017, 16:00:51
Danke für die Erläuterung, habe nur Alexa, aber baut ja aufeinander auf!

Hatte gehofft mit dem Smarthome skill es zu bewältigen.

Gesendet von meinem ONEPLUS A3003 mit Tapatalk



Ne der Smart Home Skill ist noch dümmer als Homekit. Der kann nur diese 8 Befehle:

"Alexa, schalte <gerät/raum> ein"
"Alexa, schalte <gerät/raum> aus"
"Alexa, stelle <gerät/raum> auf <wert> Prozent"
"Alexa, stelle <gerät/raum> auf <anzahl> Grad"
"Alexa, erhöhe <gerät/raum> um <anzahl> Prozent"
"Alexa, reduziere <gerät/raum> um <anzahl> Prozent"
"Alexa, erhöhe <gerät/raum> um <anzahl> Grad"
"Alexa, reduziere <gerät/raum> um <anzahl> Grad"


Im Custom Skill habe ich es so gemacht, dass ich im AlexaMapping und im InteractionModel des Skills ein "VolumeIntent" hinzugefügt habe und dann den Sonos-Lautsprecher beim homebridgeMapping die Characterisc


Volume=Volume,maxValue=50


hinzugefügt habe. Weiß nicht, ob das Vorgehen so richtig ist, aber bei mir hat es geklappt.

Gruß

Fixel2012

Zitat von: xxAvarlonxx am 25 April 2017, 16:10:52
Ne der Smart Home Skill ist noch dümmer als Homekit. Der kann nur diese 8 Befehle:

"Alexa, schalte <gerät/raum> ein"
"Alexa, schalte <gerät/raum> aus"
"Alexa, stelle <gerät/raum> auf <wert> Prozent"
"Alexa, stelle <gerät/raum> auf <anzahl> Grad"
"Alexa, erhöhe <gerät/raum> um <anzahl> Prozent"
"Alexa, reduziere <gerät/raum> um <anzahl> Prozent"
"Alexa, erhöhe <gerät/raum> um <anzahl> Grad"
"Alexa, reduziere <gerät/raum> um <anzahl> Grad"


Im Custom Skill habe ich es so gemacht, dass ich im AlexaMapping und im InteractionModel des Skills ein "VolumeIntent" hinzugefügt habe und dann den Sonos-Lautsprecher beim homebridgeMapping die Characterisc


Volume=Volume,maxValue=50


hinzugefügt habe. Weiß nicht, ob das Vorgehen so richtig ist, aber bei mir hat es geklappt.

Gruß
Uff muss mich da echt nochmal genauer einlesen, danke dir für die Infos!

Gesendet von meinem ONEPLUS A3003 mit Tapatalk

Fhem 5.8 auf Raspi 3, HMLAN und 868MHz CUL mit einigen Komponenten, Z-Wave Rollladenaktoren, Tablet UI, 433 MHz CUL mit Baumarktsteckdosen und Temp Sensoren, Amazon Echo, Echo Dot, 2x SONOS  play1, 1x SONOS Connect AMP,  presence, HUE, Lightify

xxAvarlonxx

#9
Also ich habe es mithilfe folgender Videos relativ einfach hinbekommen:

https://haus-automatisierung.com/hardware/fhem/2017/01/14/fhem-tutorial-reihe-part-23-amazon-echo-alexa-fhem-steuern.html => Alexa Smart Home Skill

und

https://haus-automatisierung.com/hardware/fhem/2017/01/21/fhem-tutorial-reihe-part-24-amazon-echo-alexa-fhem-custom-skill.html => Alexa Custom Skill

Viel Erfolg

Zu meinem Versuch gestern mit den ReadingsProxy: Hat für Sonos und auch meine Harmony Scenes hervorragend funktioniert.
Die Lautstärke der Sonos geht jetzt auch nicht verloren, ich habe in der Tat das Reading Volume in der event-on-update vergessen.



xxAvarlonxx

Ich muss dieses Thema leider hier noch mal wiederbeleben bzgl. der Laustärkesteuerung der Sonos über Homekit :(
Es funktioniert doch nicht wie gedacht. Das Problem scheint eigntlich ganz offentsichtlich. Mit dem Mapping:


Brightness=Volume::Volume


kann ich laut Homebridge Log wunderbar die Laustärke regulieren.


Sonos_Esszimmer: executing set cmd for Brightness with value 19
[2017-5-1 12:40:33] [FHEM-Automatisierung]   executing: http://127.0.0.1:8083/fhem?cmd=set%20Sonos_Esszimmer%20Volume%2019&XHR=1


Aber die "Rückantwort" von der Sonos bzw. das Event der Sonos über die neue Laustärke wird von der Homebride nicht bemerkt. Deswegen wird auch der neue Wert nicht in den cache geschrieben.d.h. irgendwann spingt er stumpf auf den alten gecachten Wert zurück. Wenn ich in den Event Monitor schaue, erkenne ich auch warum:


2017-05-01 12:40:34 SONOSPLAYER Sonos_Esszimmer LastActionResult: SetVolume: 18


Heißt das neue Volume wird über das Reading LastActionResult versendet. Jetzt habe ich nur keine Ahnung wie ich das am besten in einem Homebridgemapping unterbekomme.

Hat niemand mit na Sonos das schon hinbekommen?

Gruß

justme1968

schau ob das sonos modul volume events erzeugt. wenn nicht musst du das aktivieren. siehe wiki.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

xxAvarlonxx

Hallo Andre,

ja da habe ich ja längst geschaut und die 2 Atrribute (generateVolumeEvent=1 und maxVolume=50) gefunden mit denen angeblich eine Lautsärkeänderung per Event gemeldet wird.So steht es im WIKI:


Volume: Enthält im Normalfall die am Player eingestellte Laustärke zum Zeitpunkt der Erkennung. Wenn eines der beiden Attribute minVolume oder maxVolume gesetzt wurde, wird diese Lautstärke bei jeder Änderung am Player mit aktualisiert.
Wenn zusätzlich noch das Attribut generateVolumeEvent gesetzt ist, erzeugt jede Änderung der Lautstärke  auch ein FHEM-Event. Standardmäßig ist dies aus Zeitgründen deaktiviert, da FHEM-Events an jeden(!) notify innerhalb FHEM gemeldet werden. Dies kann u.U. zu Verzögerungen bei dem ZonePlayer führen.

Das tut er ja auch dann, aber anders als man es erwarten würde.

Das Event pustet er dann so raus:


2017-05-01 12:40:34 SONOSPLAYER Sonos_Esszimmer LastActionResult: SetVolume: 18


und nicht


2017-05-01 12:40:34 SONOSPLAYER Sonos_Esszimmer Volume: 18


Genau das ist mein Problem.

xxAvarlonxx

Okay mit ein bißchen Gehirnschmalz habe ich selber eine Lösung für mich gefunden. Ich schreibe die jetzt mal hin, weil garantiert mehrere Leute mit na Sonos und Homebridge auf dieses Problem stoßen werden.

Wie man in meiner letzten Nachricht sieht, haut Sonos alle durchgeführten Aktionen als Event über LastActionResult raus. Wenn man die Lautstärke ändert, kommt folgendes Event raus:


2017-05-01 12:40:34 SONOSPLAYER Sonos_Esszimmer LastActionResult: SetVolume: 18


Hat man vielleicht gerade erst auf Play gedrückt dann steht in LastActionResult folgendes drin:


2017-05-02 20:15:02 SONOSPLAYER Sonos_Esszimmer LastActionResult: Play: Success!


Meine erste Idee war, um die aktuelle Lautstärke in Homekit immer anzuzeigen als Helligkeit setze ich folgendes Mapping


Brightness=Volume::LastActionResult,part=1,minValue=0,maxValue=50


Das funktioniert nur leider nur solange man nichts anderes an der Sonos macht außer die Lautstärke zu regulieren. Sobald man die Sonos ausschaltet z.b. steht in Homekit wieder 0%. Der Grund liegt auf der Hand, in dem reading LastActionResult steht nicht mehr SetVolume: 18 sondern z.b. Play: Success! Ergo die Homebridge kann den Wert nicht mehr initial lesen aus dem hinterlegten Reading.

Also brauchte ich ein Reading, welches dauerhaft immer die Values aus SetVolume abspeichert. Um keine Schleifen zu erzeugen, habe ich mich daher dafür entschieden einfach ein eigenes Reading in Sonos zu hinterlegen, welches immer wenn SetVolume in LastActionresult kommt, den Wert speichert. Dazu muss man das bereits gesetzte Attribut userReadings erweitern um folgenden Eintrag:


currentVolume:LastActionResult.*?SetVolume.* {if (ReadingsVal("Sonos_Esszimmer", "LastActionResult", "") =~ m/.*?: (.*)/) {return $1;}}


Ab dann passiert immer folgendes im Eventmonitor


2017-05-02 20:14:19 SONOSPLAYER Sonos_Esszimmer LastActionResult: SetVolume: 15
2017-05-02 20:14:19 SONOSPLAYER Sonos_Esszimmer currentVolume: 15


Jetzt noch das Homebridgemapping angepasst:


Brightness=Volume::currentVolume,minValue=0,maxValue=50


Und schon läuft es top, immer wenn ich Homekit starte steht da der aktuelle Wert aus currentVolume. Auch nachdem ich die Sonos ausgemacht und wieder einschalte. Setzen des Volumes klappt auch. Ergo es funktioniert.

Ich hoffe ich kann damit in Zukunft einigen anderen Verzweifelten helfen.

Gruß

justme1968

also meine sonos player erzeugen ganz normale volume events wie man es erwartet. ohne user reading

wenn das bei dir nichts ist stimmt etwas mit der konfiguration nicht.

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

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