FHEM Forum

FHEM => Frontends => TabletUI => Thema gestartet von: Basti1981 am 03 März 2016, 15:42:16

Titel: SONOS - MasterPlayer des SONOS-Device im data-device-Attribut?
Beitrag 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
Titel: Antw:SONOS - MasterPlayer des SONOS-Device im data-get-Attribut?
Beitrag von: zap am 03 März 2016, 16:10:13
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.

Titel: Antw:SONOS - MasterPlayer des SONOS-Device im data-device-Attribut?
Beitrag von: Basti1981 am 03 März 2016, 17:01:08
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?
Titel: Antw:SONOS - MasterPlayer des SONOS-Device im data-device-Attribut?
Beitrag von: Basti1981 am 09 März 2016, 10:58:24
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
Titel: Antw:SONOS - MasterPlayer des SONOS-Device im data-device-Attribut?
Beitrag von: ArminK am 15 März 2016, 17:17:11
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
Titel: Antw:SONOS - MasterPlayer des SONOS-Device im data-device-Attribut?
Beitrag von: Basti1981 am 23 März 2016, 08:47:52
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