SONOS - MasterPlayer des SONOS-Device im data-device-Attribut?

Begonnen von Basti1981, 03 März 2016, 15:42:16

Vorheriges Thema - Nächstes Thema

Basti1981

Hi zusammen!

Bin seit längerer Zeit stiller Mitleser hier im Forum und möchte allen Beteiligten nun zuerst einmal danken - exzellente Arbeit.
Ich bin gerade, wie so viele hier, dabei, meine FTUI zu gestalten und stoße hin und wieder auf Probleme, die ich nach und nach lösen konnte. Nun stehe ich aber auf dem Schlauch und bräuchte Hilfe in meiner aktuellen Situation. Falls die Frage für die Profis hier lächerlich ist, dann tut es mir leid :-)

Ich baue gerade eine Sonos-Steuerung. Dazu habe ich über das Circlemenü auch die SONOS-Gruppierungsfunktionen in groben Zügen nachimplementieren können. Nun bin ich gerade bei der Anzeige des Covers und der Trackinformationen. Ich setze in meiner Konstellation voraus, dass es nur einen Masterplayer gibt, an den sich ggf. einige andere Boxen anschließen (-> es gibt keine zwei Zonen mit unterschiedlicher Musik). Um das Cover und die Trackinfos in FTUI anzeigen zu können, muss ich ja ein Reading bzw. ein Device angeben. Für eine konkrete Box funktioniert das natürlich easy (z.B. data-device="SONOS_Schlafzimmer" und data-get="currentAlbumArtURL"), aber ich brauche ja den aktuellen MasterPlayer, der sich ändern kann. Meine Frage ist nun, wie man das am besten bei unterschiedlichen MasterPlayern realisieren kann?
Im "Haupt"-Sonos-Device steht ja ein Reading "MasterPlayerPlaying". Wenn ich dieses Reading für mein data-device-Attribut nutzen könnte, wäre mir sehr geholfen. Nun meine Fragen:

- Darüber bekomme ich aber nur Strings wie "[SONOS_Schlafzimmer]" die ja so nicht in dem Attribut data-device nutzbar sind, oder kann ich Stringmanipulationen direkt im HTML-Code angeben oder geht das dann nur über extra JS-Code?
- Der Umweg wäre ja vermutlich (nach meinem Verständnis), ein eigenes Reading in FHEM anzulegen und das "MasterPlayerPlaying"-Reading entsprechend zu spiegeln und dort die Formatierung zu ändern? Wenn ja, wie realisiert man das?

Vielen Dank schon einmal und viele Grüße!!
Basti

zap

#1
M.W. ist ein dynamisches data-device nicht möglich. Auch über ein Dummy Device wirst Du das nicht hin bekommen.

Habe auch SONOS. Bisher habe ich aber separate Widgets für die einzelnen Player.

2xCCU3 mit ca. 100 Aktoren, Sensoren
Entwicklung: FHEM auf Proxmox Debian VM
Produktiv inzwischen auf Home Assistant gewechselt.
Maintainer: HMCCU, (Fully, AndroidDB)

Basti1981

Danke für deine Antwort. Einzelne Widgets für alle Räume plane ich für die Unterseiten auch, aber das sollte ja kein Problem sein. Bin schon froh, dass Gruppenkonstellationen mit dem Circlemenü funktionieren :-)

Hmm, wie löst man mein Problem denn dann?

Basti1981

Kommt man sonst per JavaScript an das aktuelle Reading im Feld "MasterPlayerPlaying" heran, sodass ich das data-device-Attribut händisch aktualisieren könnte? Weiss da jemand Bescheid?

Danke,
Basti

ArminK

Zitat von: Basti1981 am 03 März 2016, 15:42:16
Hi zusammen!

Bin seit längerer Zeit stiller Mitleser hier im Forum und möchte allen Beteiligten nun zuerst einmal danken - exzellente Arbeit.
Ich bin gerade, wie so viele hier, dabei, meine FTUI zu gestalten und stoße hin und wieder auf Probleme, die ich nach und nach lösen konnte. Nun stehe ich aber auf dem Schlauch und bräuchte Hilfe in meiner aktuellen Situation. Falls die Frage für die Profis hier lächerlich ist, dann tut es mir leid :-)

Ich baue gerade eine Sonos-Steuerung. Dazu habe ich über das Circlemenü auch die SONOS-Gruppierungsfunktionen in groben Zügen nachimplementieren können. Nun bin ich gerade bei der Anzeige des Covers und der Trackinformationen. Ich setze in meiner Konstellation voraus, dass es nur einen Masterplayer gibt, an den sich ggf. einige andere Boxen anschließen (-> es gibt keine zwei Zonen mit unterschiedlicher Musik). Um das Cover und die Trackinfos in FTUI anzeigen zu können, muss ich ja ein Reading bzw. ein Device angeben. Für eine konkrete Box funktioniert das natürlich easy (z.B. data-device="SONOS_Schlafzimmer" und data-get="currentAlbumArtURL"), aber ich brauche ja den aktuellen MasterPlayer, der sich ändern kann. Meine Frage ist nun, wie man das am besten bei unterschiedlichen MasterPlayern realisieren kann?
Im "Haupt"-Sonos-Device steht ja ein Reading "MasterPlayerPlaying". Wenn ich dieses Reading für mein data-device-Attribut nutzen könnte, wäre mir sehr geholfen. Nun meine Fragen:

- Darüber bekomme ich aber nur Strings wie "[SONOS_Schlafzimmer]" die ja so nicht in dem Attribut data-device nutzbar sind, oder kann ich Stringmanipulationen direkt im HTML-Code angeben oder geht das dann nur über extra JS-Code?
- Der Umweg wäre ja vermutlich (nach meinem Verständnis), ein eigenes Reading in FHEM anzulegen und das "MasterPlayerPlaying"-Reading entsprechend zu spiegeln und dort die Formatierung zu ändern? Wenn ja, wie realisiert man das?

Vielen Dank schon einmal und viele Grüße!!
Basti

Hallo Basti,

wie hast Du denn das mit den Sonos-Gruppierungen gelöst? Kannst Du einen "Codeschnipsel" posten? Ich stehe da auf dem Schlauch....Grüße

Armin
Raspberry Pi 3B mit fhem 5.8;1xCUL USB, 2xCUNO, 1xCUL Raspi über Fhem2Fhem, 2xHMLAN; diverse Homematic und FS20-Komponenten; 7 x Sonos-Player; diverse Eigenbauten mittels FS20 WUE, ESPEasy, MQTT, MySensors

Basti1981

Hi,

sorry für die verspätete Antwort.
Wie in meinem Post oben angedeutet, gibt es in meiner Konstellation nur eine Zone. Ich ermittele einfach den aktuellen MasterPlayer, manipuliere die Strings, damit die eckigen Klammern und Anführungszeichen wegfallen, und füge den Player, auf den in der UI geklickt wurde (als Parameter übergeben), hinzu. Hier der Kern-Codeausschnitt:


              my ($Player) = @_;
              my ($MasterPlayer) = ReadingsVal("Sonos","MasterPlayerPlaying","-1");

              # Stringmanipulation
              $MasterPlayer = substr $MasterPlayer, 2;
              my $Laenge = length($MasterPlayer);
              $MasterPlayer = substr $MasterPlayer, 0, $Laenge-2;
           
              #Player hinzufügen
              {fhem( "set $MasterPlayer AddMember Sonos_$Player" )};



Das dann natürlich in mehreren Verschachtelungen für deine Boxen und jeweils einer Abfrage, ob der jeweilige Player schon spielt. Ich habe insgesamt 10 Boxen in 8 Räumen, ist also eine recht lange Methode bei mir. Wenn dir das nicht weiterhilft, beschreib gerne, wo genau du hängst.

Grüße,
Basti