Hauptmenü

Integration Sonos

Begonnen von gloob, 12 Februar 2016, 08:56:18

Vorheriges Thema - Nächstes Thema

gloob

Hallo,

Hat jemand ein schönes Beispiel für eine Integration von Sonos Lautsprechern?
Ich habe aktuell 3 Lautsprecher Gruppen die ich auch schon in FHEM eingebunden habe und auch über einen Button starten und stoppen kann.

Allerdings fehlt mir noch ein Beispiel wie man es schön und elegant lösen könnte.

Ich würde gerne unterschiedliche Radiosender oder Playlisten auswählen können und sehen ob der Lautsprecher gerade aktiv oder gestoppt ist.
Raspberry Pi 3 | miniCUL 433MHz | nanoCUL 868 MHz | nanoCUL 433 MHz | MySensors WLAN Gateway | LaCrosse WLAN Gateway | SignalESP 433 MHz | SignalESP 868 MHz | HM-MOD-UART WLAN Gateway | IR - 360 Grad WLAN Gateway

coolice

Warum nimmst Du nicht das Sonos Modul?


Gesendet von meinem iPhone mit Tapatalk

gloob

Ich habe die Geräte ja schon mit dem Sonos Modul integriert. Mir geht es jetzt um eine ansprechende Visu in TabletUI.
Raspberry Pi 3 | miniCUL 433MHz | nanoCUL 868 MHz | nanoCUL 433 MHz | MySensors WLAN Gateway | LaCrosse WLAN Gateway | SignalESP 433 MHz | SignalESP 868 MHz | HM-MOD-UART WLAN Gateway | IR - 360 Grad WLAN Gateway

matzemoerk

So hab ich es gelöst.


<li class="transparent50" data-row="1" data-col="5" data-sizex="3" data-sizey="2">
<header>SONOS Schlafzimmer</header>
<div data-type="image" data-device="Sonos_Schlafzimmer" data-get="currentAlbumArtURL" data-size="65%" class="top-space"></div>
</li>

<li class="transparent50" data-row="3" data-col="5" data-sizex="3" data-sizey="1">

<div class="container cell top-space-2x">
<div data-type="label" class="" data-device="Sonos_Schlafzimmer" data-get="infoSummarize1"></div><br>
<div data-type="label" class="darker" data-device="Sonos_Schlafzimmer" data-get="infoSummarize3"></div><br>
</div>
</li>   


<li class="transparent50" data-row="4" data-col="5" data-sizex="3" data-sizey="1">

<div class="cell  top-space">

    <div data-type="push" data-device="Sonos_Schlafzimmer"
    data-icon="fa-step-backward" data-background-icon="-"
             data-set-on="Previous" class="inline">
        </div>
        <div data-type="push" data-device="Sonos_Schlafzimmer"
             data-icon="fa-stop" data-background-icon="-"
             data-set-on="Stop" class="inline">
        </div>
        <div data-type="push" data-device="Sonos_Schlafzimmer"
             data-icon="fa-play" data-background-icon="-"
             data-set-on="Play" class="inline">
        </div>
        <div data-type="push" data-device="Sonos_Schlafzimmer"
             data-icon="fa-step-forward" data-background-icon="-"
             data-set-on="Next" class="inline">
        </div>
       
    </div> 
   
    <div class="cell">
<div data-type="push"
            data-set-on="VolumeD"
            data-icon="fa-volume-off"
            data-background-icon="-"
            data-device="Sonos_Schlafzimmer"
            class="inline"></div>

        <div data-type="push"
            data-set-on="VolumeU"
            data-icon="fa-volume-up"
            data-background-icon="-"
            data-device="Sonos_Schlafzimmer"
            class="inline"></div>
    </div>
</li>         

<li class="transparent50" data-row="5" data-col="5" data-sizex="3" data-sizey="1">
<div class="cell wider left top-space-2x">
    <div data-type="select" data-device="Sonos_Schlafzimmer" data-list="FavTabletUI" data-set="startFavourite" class="cell w2x" ></div>
        <div data-type="label" class="cell">Favouriten</div>
    </div>

<div class="right top-space-2x right-space">


<div data-type="push" data-device="Sonos_Schlafzimmer"
             data-icon="fa-volume-down"
             data-set-on="Volume 8"
             class="cell inline">
</div>

<div data-type="push" data-device="Sonos_Schlafzimmer"
             data-icon="fa-volume-off"
             data-set-on="Volume 15"
             class="cell inline">
</div>

  <div data-type="push" data-device="Sonos_Schlafzimmer"
             data-icon="fa-volume-up"
             data-set-on="Volume 30"
             class="cell inline">
</div>
     <div data-type="label" class="cell">Lautstärke</div>
</div>
</li>


<li class="transparent50" data-row="1" data-col="8" data-sizex="3" data-sizey="2">
<header>SONOS Büro</header>
<div data-type="image" data-device="Sonos_Buero" data-get="currentAlbumArtURL" data-size="65%" class="top-space"></div>
</li>

<li class="transparent50" data-row="3" data-col="8" data-sizex="3" data-sizey="1">

<div class="container cell top-space-2x">
<div data-type="label" class="" data-device="Sonos_Buero" data-get="infoSummarize1"></div><br>
<div data-type="label" class="darker" data-device="Sonos_Buero" data-get="infoSummarize3"></div><br>
</div>
</li>   


<li class="transparent50" data-row="4" data-col="8" data-sizex="3" data-sizey="1">

<div class="cell  top-space">

    <div data-type="push" data-device="Sonos_Buero"
    data-icon="fa-step-backward" data-background-icon="-"
             data-set-on="Previous" class="inline">
        </div>
        <div data-type="push" data-device="Sonos_Buero"
             data-icon="fa-stop" data-background-icon="-"
             data-set-on="Stop" class="inline">
        </div>
        <div data-type="push" data-device="Sonos_Buero"
             data-icon="fa-play" data-background-icon="-"
             data-set-on="Play" class="inline">
        </div>
        <div data-type="push" data-device="Sonos_Buero"
             data-icon="fa-step-forward" data-background-icon="-"
             data-set-on="Next" class="inline">
        </div>
       
    </div> 
   
    <div class="cell">
<div data-type="push"
            data-set-on="VolumeD"
            data-icon="fa-volume-off"
            data-background-icon="-"
            data-device="Sonos_Buero"
            class="inline"></div>

        <div data-type="push"
            data-set-on="VolumeU"
            data-icon="fa-volume-up"
            data-background-icon="-"
            data-device="Sonos_Buero"
            class="inline"></div>
    </div>
</li>         

<li class="transparent50" data-row="5" data-col="8" data-sizex="3" data-sizey="1">
<div class="cell wider left top-space-2x">
    <div data-type="select" data-device="Sonos_Buero" data-list="FavTabletUI" data-set="startFavourite" class="cell w2x" ></div>
        <div data-type="label" class="cell">Favouriten</div>
    </div>

<div class="right top-space-2x right-space">


<div data-type="push" data-device="Sonos_Buero"
             data-icon="fa-volume-down"
             data-set-on="Volume 8"
             class="cell inline">
</div>

<div data-type="push" data-device="Sonos_Buero"
             data-icon="fa-volume-off"
             data-set-on="Volume 15"
             class="cell inline">
</div>

  <div data-type="push" data-device="Sonos_Buero"
             data-icon="fa-volume-up"
             data-set-on="Volume 30"
             class="cell inline">
</div>
     <div data-type="label" class="cell">Lautstärke</div>
</div>
</li>

Ludozine

Hi,
super Sache, wie du Sonos in der UI integriert hast.
Bei mir klappt nur die Anzeige der Favoriten nicht.
Bin dankbar für jeden Tip

Viele Grüße
Detlef

Dedi75

Ja das mit den Favoriten würde mich auch interessieren (funktioniert bei mir auch nicht so).
Habe es zwar nun hinbekommen, dass die Liste angezeigt wird, allerdings funktioniert die Auswahl nicht bzw. ich bekomme das nicht vernünftig ausgelesen.
Würde das dann gerne mit Favoriten, Playlists und Radios bei mir anwenden. Das wäre schon recht genial.

setstate

So etwas brauche ich auch noch: eine Media-List für Playlists, Alben oder Favoriten für das MPD Modul oder für Mopidy direkt.
Ist aber noch nichts geworden, steht aber noch auf der ToDo Liste.

Dedi75

Das Problem liegt wohl am auslesen (Reading) der Playlists.
Die Formatierung der Liste ist nicht gegeben, dass muss wohl noch irgendwie getan werden.
Hab aber keine Idee wie ich das anpassen soll. Dachte wenn ich schon ein Reading auf die Playlist mache, dass mir eine Liste mit genau den Infos untereinander angezeigt wird.
Er macht irgendwo willkürlich einen Umbruch in der Liste.

fhem-challenge

Zitat von: Dedi75 am 23 März 2016, 13:30:39
Das Problem liegt wohl am auslesen (Reading) der Playlists.
Die Formatierung der Liste ist nicht gegeben, dass muss wohl noch irgendwie getan werden.
Hab aber keine Idee wie ich das anpassen soll. Dachte wenn ich schon ein Reading auf die Playlist mache, dass mir eine Liste mit genau den Infos untereinander angezeigt wird.
Er macht irgendwo willkürlich einen Umbruch in der Liste.

Die Beipiele hier sind leicht fehlerhaft.


Erzeuge bei Deinem SONOS ein userReadings (hier am Beispiel mit Namen:userReadings)

FavTabletUI:LastActionResult.*?GetFavourites.* {
if (ReadingsVal("Sonos_Kueche", "LastActionResult", "") =~ m/.*?: (.*)/) {
my $returnvalue = $1;
$returnvalue =~ s/,/:/g;
$returnvalue =~ s/"//g;
return $returnvalue;
}
}


... dann wird dadurch eine Liste erzeugt , die durch ":" getrennt ist (und es werden auch die \" entfernt).

Die Liste (bzw. das reading  FavTabletUI) kannst Du in tabletUI dann mit ...

    <div data-type="select" data-device="Sonos_Kueche" data-list="FavTabletUI" data-get="FavTabletUI" data-set="startFavourite" class="cell w2x" ></div>
        <div data-type="label" class="cell">Favoriten</div>
    </div>


... auslesen und auch setzen.

Damit funktionierts.

Viele Grüße!

Andreas

Dedi75

Ok Danke - werde das heute Abend dann mal ausprobieren.

Momentan ist bei mir im userReading folgendes definiert:
Favourites:LastActionResult.*?GetFavouritesWithCovers.* { if (ReadingsVal("Sonos_Wohnzimmer", "LastActionResult", "") =~ m/.*?: (.*)/) { return $1; } }, Radios:LastActionResult.*?GetRadiosWithCovers.* { if (ReadingsVal("Sonos_Wohnzimmer", "LastActionResult", "") =~ m/.*?: (.*)/) { return $1; } }, Playlists:LastActionResult.*?GetPlaylistsWithCovers.* { if (ReadingsVal("Sonos_Wohnzimmer", "LastActionResult", "") =~ m/.*?: (.*)/) { return $1; } }, currentTrackPosition:LastActionResult.*?GetCurrentTrackPosition.* { if (ReadingsVal("Sonos_Wohnzimmer", "LastActionResult", "") =~ m/.*?: (.*)/) { return $1; } }

Da werde ich dann mal deinen Code anhängen.

Ist es nun auch machbar das ich diesen direkt in Fhem anzeigen lassen kann?
Aktuell sind z.B. die Playlists, Favoriten und Radios über als Listen über ReadingGroups angelegt mit folgender DEF:
Sonos_Wohnzimmer:<{SONOS_getListRG($DEVICE,"Playlists")}@Playlists>

Gruß
Dedi

Andy89

Zitat von: fhem-challenge am 31 März 2016, 14:51:45
FavTabletUI:LastActionResult.*?GetFavourites.* {
if (ReadingsVal("Sonos_Kueche", "LastActionResult", "") =~ m/.*?: (.*)/) {
my $returnvalue = $1;
$returnvalue =~ s/,/:/g;
$returnvalue =~ s/"//g;
return $returnvalue;
}
}


Vielen Dank für deinen Code  :) :) :) Ich hab ihn noch um eine Zeile erweitert:

$returnvalue =~ s/ /%20/g;

Damit werden die Leerzeichen für Sonos richtig ersetzt =) mein Sonos mag zumindest keine Leerzeichen.

Beste Grüße
Andy
FHEM 6.0 auf rPi4 docker (mit Alexa & Siri); dbLog, FTUI, Sonos, XiaomiMapCreator auf rPi4 docker;
raspimatic auf rPi3+ > diverse Aktoren und Sensoren;
LGW > (PCA301),EC3000,LaCrosse; MQTT2 > WLAN-Steckdosen,Xiaomi Map;
Harmony Hub;Sonos;Onkyo AVR;RGB WLAN Controller;Netatmo;Withings;Unifi;AMAD

fhem-challenge

Zitat von: Andy89 am 01 April 2016, 18:31:52
Vielen Dank für deinen Code  :) :) :) Ich hab ihn noch um eine Zeile erweitert:

$returnvalue =~ s/ /%20/g;

Damit werden die Leerzeichen für Sonos richtig ersetzt =) mein Sonos mag zumindest keine Leerzeichen.

Beste Grüße
Andy

Ja das ist einen gute Variante, ich habe es umgekehrt gemacht. Ich habe "uri_escape" verwendet und dann alle "%22" gelöscht bzw. "%2C" durch ":" ersetzt.



Favourites:LastActionResult.*?GetFavouritesWithCovers.* { if (ReadingsVal("Sonos_Kueche", "LastActionResult", "") =~ m/.*?: (.*)/) { return $1; } },
Radios:LastActionResult.*?GetRadiosWithCovers.* { if (ReadingsVal("Sonos_Kueche", "LastActionResult", "") =~ m/.*?: (.*)/) { return $1; } },
Radios:LastActionResult.*?GetRadios.* { if (ReadingsVal("Sonos_Kueche", "LastActionResult", "") =~ m/.*?: (.*)/) { return $1; } },
Playlists:LastActionResult.*?GetPlaylists.* { if (ReadingsVal("Sonos_Kueche", "LastActionResult", "") =~ m/.*?: (.*)/) { return $1; } },
Playlists:LastActionResult.*?GetPlaylistsWithCovers.* { if (ReadingsVal("Sonos_Kueche", "LastActionResult", "") =~ m/.*?: (.*)/) { return $1; } },
FavTabletUI:LastActionResult.*?GetFavourites:.* {
if (ReadingsVal("Sonos_Kueche", "LastActionResult", "") =~ m/.*?: (.*)/) {
my $returnvalue = uri_escape($1);
$returnvalue =~ s/%22//g;
$returnvalue =~ s/%2C/:/g;
return $returnvalue;
}
}




Ich werde mir noch etwas ausdenken müssen, dass in den Favourites im FTUI nicht die %20 in der Auswahl zusehen ist.

Viele Grüße!

Andreas

uniqueck

Habt ihr für das Anzeigen der Covers etwas machen müssen, bei mir kommt da immer so eine ganz wirre Url bei raus und da findet er dann immer kein Bild.

zap

Zitat von: fhem-challenge am 04 April 2016, 13:39:01
Ich werde mir noch etwas ausdenken müssen, dass in den Favourites im FTUI nicht die %20 in der Auswahl zusehen ist.

Du könntest "data-alias" verwenden.
2xCCU3 mit ca. 100 Aktoren, Sensoren
Entwicklung: FHEM auf Proxmox Debian VM
Produktiv inzwischen auf Home Assistant gewechselt.
Maintainer: HMCCU, (Fully, AndroidDB)

fhem-challenge

Zitat von: zap am 11 April 2016, 07:32:55
Du könntest "data-alias" verwenden.


Hmm ... leider nicht. data-alias ist eine statische Liste, die dann nicht mehr mit der dynamischen Liste in "data-list" korrelliert, wenn diese sich ändert. Ich sehe zumindest keine Möglichkeit, bei data-alias ein "reading" als Liste anzugeben. Zumindest funktioniert es nicht.


Viele Grüße!

Andreas