Hauptmenü

Sonos und FHEM

Begonnen von 87insane, 13 Juni 2019, 10:12:15

Vorheriges Thema - Nächstes Thema

aski71

Weiß jemand, ob mit der kommenden, neuen Version der Sonos App (scheinbar komplettes Redesign), die im Rahmen der neuen Playbar kommt, die fhem Integration weiter funktionieren wird?

Otto123

Die Schnittstelle ist UPNP - das hat mit der App zunächst nichts zu tun. Solange wie das nicht geändert wird...
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

87insane

Übersetzung: Es ist einfach eine andere Art an die Sache ran zu gehen. Das SONOS Modul ist bereits lange etabliert und sonos2mqtt ist einfach eine Art Bridge, die am Ende augenscheinlich das gleiche macht für Dich als Person aber eben komplett anders läuft. Das ist aber die technische Sicht.

aski71

Zitat von: Otto123 am 04 Juni 2020, 20:44:47
Die Schnittstelle ist UPNP - das hat mit der App zunächst nichts zu tun. Solange wie das nicht geändert wird...

Eben. Solange wie das nicht geändert wird. Ich habe eben einen Artikel gelesen, dass ,,mit der neuen App" andere Gruppierungsmöglichkeiten von Räumen auch nach Stockwerken gemacht werden und manche ,,alte" Lautsprecher von der ,,neuen App" nicht mehr unterstützt werden.
Bei solcherlei Aussagen gehen bei mir alle Warnlampen an, dass sich da eventuell auch die APIs massiv ändern könnten.
Daher die Frage, ob das schon jemand weiß. Der Autor des Moduls beispielsweise.

is2late

#49
Nach diversem ergebnislosem nächtlichem Probieren flehe ich um Hilfe:

Hab in FUIP das Template von stenny installiert https://forum.fhem.de/index.php/topic,100246.0.html, deren maßgeblicher Inhalt offenbar buchstabengetreu auf Reinerleins template_musik_sonos.html aus dem Sonos-Wiki zurückgeht https://wiki.fhem.de/wiki/SONOS.

Durch FUIP ergeben sich keine Probleme; ich habe das UI nur der Vollständigkeit halber erwähnt.

Nun ist es so, dass der Player an sich funktioniert, dh man kann den Titel abspielen, den Sonos gerade (zB via Alexa oder auch durch Anwahl in FHEM) auf der Pfanne hat. Alles andere - nämlich das Aufrufen einer Playlist, eines Radiosenders oder einer Abspielliste - ist nicht möglich, weil die Dropdown-Fenster leer bleiben, s. Anlage.

Im HTML finden sich im Zusammenhang mit data "Adressen" (sorry, kenne den Fachterminus nicht; zB data list="FavouritesList"), die das Reading in meiner FHEM-Installation nicht hergibt - dort ist nur von "Favourites" die Rede. Ich nehme an, dass das Problem hier liegt, und habe im Austausch eine Reihe vorhandener Readings eingesetzt, aber erfolglos. Hier das HTML der Rubrik"Bedienung"
<div class="top-space">
<div data-type="switch" data-device="<fuip-field fuip-name='device' fuip-type='device'>sonos</fuip-field>" data-get="Mute" data-set="Mute"
data-icon="fa-deaf" data-background-icon="-"
data-on-color="#aa6900" data-off-color="gray"
data-get-on="1" data-get-off="0"
data-set-on="1" data-set-off="0" class="inline mini">
</div>

<div data-type="classchanger" data-device="<fuip-field fuip-name='device' fuip-type='device'>sonos</fuip-field>" data-get="currentNormalAudio" data-get-on="1" data-off-class="hide" class="inline top-space">
<div data-type="switch" data-device="<fuip-field fuip-name='device' fuip-type='device'>sonos</fuip-field>" data-get="Repeat" data-set="Repeat"
data-icon="fa-repeat" data-background-icon="-"
data-on-color="#aa6900" data-off-color="gray"
data-get-on="1" data-get-off="0"
data-set-on="1" data-set-off="0" class="inline mini">
</div>

<div data-type="push" data-device="<fuip-field fuip-name='device' fuip-type='device'>sonos</fuip-field>"
data-icon="fa-step-backward" data-background-icon="-"
data-off-color="#fff" data-on-color="#aa6900"
data-set-on="Previous" class="inline mini">
</div>

<div data-type="push" data-device="<fuip-field fuip-name='device' fuip-type='device'>sonos</fuip-field>"
data-set="CurrentTrackPosition"
data-icon="fa-backward" data-background-icon="-"
data-off-color="#fff" data-on-color="#aa6900"
data-set-on="-30" class="inline mini">
</div>
</div>

<div data-type="switch"
data-device="<fuip-field fuip-name='device' fuip-type='device'>sonos</fuip-field>"
data-get="transportState"
data-states='["PLAYING","PAUSED_PLAYBACK","STOPPED"]'
data-set-states='["Pause","Play","Play"]'
data-background-icon="fa-circle-thin"
data-background-colors='["#aa6900","white","white"]'
data-colors='["#aa6900","white","white"]'
data-icons='["fa-pause","fa-play","fa-play"]'
class="inline small">
</div>

<div data-type="classchanger" data-device="<fuip-field fuip-name='device' fuip-type='device'>sonos</fuip-field>" data-get="currentNormalAudio" data-get-on="1" data-off-class="hide" class="inline">
<div data-type="push" data-device="<fuip-field fuip-name='device' fuip-type='device'>sonos</fuip-field>"
data-set="CurrentTrackPosition"
data-icon="fa-forward" data-background-icon="-"
data-off-color="#fff" data-on-color="#aa6900"
data-set-on="+30" class="inline mini">
</div>

<div data-type="push" data-device="<fuip-field fuip-name='device' fuip-type='device'>sonos</fuip-field>"
data-icon="fa-step-forward" data-background-icon="-"
data-off-color="#fff" data-on-color="#aa6900"
data-set-on="Next" class="inline mini">
</div>

<div data-type="switch" data-device="<fuip-field fuip-name='device' fuip-type='device'>sonos</fuip-field>" data-get="Shuffle" data-set="Shuffle"
data-icon="fa-random" data-background-icon="-"
data-on-color="#aa6900" data-off-color="gray"
data-get-on="1" data-get-off="0"
data-set-on="1" data-set-off="0" class="inline mini">
</div>
</div>

<div data-type="popup" class="inline" data-width="650px" data-height="210px">
<div data-type="push"
data-icon="fa-list" data-background-icon="-"
data-off-color="#fff" data-on-color="#aa6900"
class="mini">
</div>

<div class="dialog">
<header><div data-type="joinedlabel" data-device="<fuip-field fuip-name='device' fuip-type='device'>sonos</fuip-field>" data-mask="Musikauswahl[ für $1]" data-get='["roomName"]' class="inline"></div></header>

<div class="top-space-10 left-align left-space">
<div>
<div class="large middle inline">Favoriten: </div>
<div data-type="select"
data-device="<fuip-field fuip-name='device' fuip-type='device'>sonos</fuip-field>"
data-list="FavouritesList"
data-alias="FavouritesListAlias"
data-delimiter="|"
data-quote="/"
data-get="currentFavouriteNameMasked"
data-set="StartFavourite"
class="inline w3x"
onchange="$('.dialog-close').trigger('click');"></div>
</div>

<div>
<div class="large middle inline">Playlists: </div>
<div data-type="select"
data-device="<fuip-field fuip-name='device' fuip-type='device'>sonos</fuip-field>"
data-list="PlaylistsList"
data-alias="PlaylistsListAlias"
data-delimiter="|"
data-quote="/"
data-get="currentPlaylistNameMasked"
data-set="StartPlaylist"
class="inline w3x"
onchange="$('.dialog-close').trigger('click');"></div>
</div>

<div>
<div class="large middle inline">Radios: </div>
<div data-type="select"
data-device="<fuip-field fuip-name='device' fuip-type='device'>sonos</fuip-field>"
data-list="RadiosList"
data-alias="RadiosListAlias"
data-delimiter="|"
data-quote="/"
data-get="currentRadioNameMasked"
data-set="StartRadio"
class="inline w3x"
onchange="$('.dialog-close').trigger('click');"></div>
</div>

<div>
<div class="large middle inline">Audio-Eingang: </div>
<div data-type="select"
data-device="<fuip-field fuip-name='device' fuip-type='device'>sonos</fuip-field>"
data-list="Sonos:LineInPlayerList"
data-alias="Sonos:LineInPlayerListAlias"
data-delimiter="|"
data-get="currentAlbum"
data-set="PlayURI"
class="inline w3x"
onchange="$('.dialog-close').trigger('click');"></div>
</div>

<div>
<div class="large middle inline">Abspielliste: </div>
<div data-type="select"
data-device="<fuip-field fuip-name='device' fuip-type='device'>sonos</fuip-field>"
data-list="QueueList"
data-alias="QueueListAlias"
data-delimiter="|"
data-get="currentTrack"
data-set="Track"
class="inline w3x"
onchange="$('.dialog-close').trigger('click');"></div>
</div>
</div>
</div>
</div>
</div>


Und hier das der Rubrik "Position":

<div data-type="classchanger" data-device="<fuip-field fuip-name='device' fuip-type='device'>sonos</fuip-field>" data-get="currentNormalAudio" data-get-on="1" data-off-class="hide">
<div data-type="label" data-device="<fuip-field fuip-name='device' fuip-type='device'>sonos</fuip-field>" data-get="currentTrackPositionSimulated" class="inline" style="width: 3em;"></div>
<div data-type="slider"
data-device="<fuip-field fuip-name='device' fuip-type='device'>sonos</fuip-field>"
data-set="CurrentTrackPosition"
data-get="currentTrackPositionSimulatedSec"
data-max="currentTrackDurationSec" data-min="0"
data-step="1"
data-handle-diameter="5"
data-width="250"
class="horizontal tap inline">
</div>
<div data-type="label" data-device="<fuip-field fuip-name='device' fuip-type='device'>sonos</fuip-field>" data-get="currentTrackDuration" class="inline" style="width: 3em;"></div>

<div class="newline">
<div data-type="label" data-device="<fuip-field fuip-name='device' fuip-type='device'>sonos</fuip-field>" data-get="currentTrack" class="inline center-align" style="width: 3em;"></div>
<div data-type="slider"
data-device="<fuip-field fuip-name='device' fuip-type='device'>sonos</fuip-field>"
data-set="Track"
data-get="currentTrack"
data-max="numberOfTracks" data-min="0"
data-step="1"
data-handle-diameter="5"
data-width="250"
class="horizontal tap inline">
</div>
<div data-type="label" data-device="<fuip-field fuip-name='device' fuip-type='device'>sonos</fuip-field>" data-get="numberOfTracks" class="inline center-align" style="width: 3em;"></div>
</div>
</div>

<div data-type="classchanger" data-device="<fuip-field fuip-name='device' fuip-type='device'>sonos</fuip-field>" data-get="currentStreamAudio" data-get-on="1" data-off-class="hide">
<div style="height: 40px;"> </div> <!-- Leerer Ersatz für die bei Streams fehlende Positionsanzeige -->
</div>


Und schließlich die Rubrik"Titel":

<div class="large top-space">
<div data-type="classchanger" data-device="<fuip-field fuip-name='device' fuip-type='device'>sonos</fuip-field>" data-get="currentNormalAudio" data-get-on="1" data-off-class="hide">
<div style="height: 21px;">
<div style="width: 355px; position: absolute; overflow: hidden; height: 21px; margin-left: 10px; margin-right: 10px;">
<div style="position: absolute;">
<div id="Device_Title" data-type="joinedlabel" data-device="<fuip-field fuip-name='device' fuip-type='device'>sonos</fuip-field>" data-mask="[$1]" data-get='["currentTitle"]' data-onupdate="checkFlowAnimation('#Device_Title');" class="bold"></div>
</div>
</div>
</div>

<div style="height: 21px;">
<div style="width: 355px; position: absolute; overflow: hidden; height: 21px; margin-left: 10px; margin-right: 10px;">
<div style="position: absolute;">
<div id="Device_Interpret" data-type="joinedlabel" data-device="<fuip-field fuip-name='device' fuip-type='device'>sonos</fuip-field>" data-mask="[$1][ ~ $2]" data-get='["currentArtist","currentAlbum"]' data-onupdate="checkFlowAnimation('#Device_Interpret');" class="">
</div>
</div>
</div>
</div>
</div>
<div data-type="classchanger" data-device="<fuip-field fuip-name='device' fuip-type='device'>sonos</fuip-field>" data-get="currentStreamAudio" data-get-on="1" data-off-class="hide">
<div style="height: 21px;">
<div style="width: 355px; position: absolute; overflow: hidden; height: 21px; margin-left: 10px; margin-right: 10px;">
<div style="position: absolute;">
<div id="Device_SenderInfo" data-type="joinedlabel" data-device="<fuip-field fuip-name='device' fuip-type='device'>sonos</fuip-field>" data-mask="[$1]" data-get='["currentSenderInfo"]' data-onupdate="checkFlowAnimation('#Device_SenderInfo');" class="bold"></div>
</div>
</div>
</div>

<div style="height: 21px;">
<div style="width: 355px; position: absolute; overflow: hidden; height: 21px; margin-left: 10px; margin-right: 10px;">
<div style="position: absolute;">
<div id="Device_Sender" data-type="joinedlabel" data-device="<fuip-field fuip-name='device' fuip-type='device'>sonos</fuip-field>" data-mask="[$1][: $2]" data-get='["currentSender","currentSenderCurrent"]' data-onupdate="checkFlowAnimation('#Device_Sender');"class=""></div>
</div>
</div>
</div>
</div>
</div>


Es gibt dann  noch eine weitere Rubrik namens "Guppierung", die vermutlich hier ohne Bedeutung ist, da ich nur einen Sonos1 nutze.

Seht Ihr etwas Verdächtiges, o Erleuchtete?

LG is2late

PS: Bin gerade auf den Begriff "FavouritesList" in diesem Beitrag gestoßen https://forum.fhem.de/index.php?topic=105536.0, kann ihn aber nicht einordnen.
Pi4, Tahoma Jalousien, Hue, Echo, Sonos, Lupusec XT3, FritzBox

is2late

Hat niemand eine Idee?
Pi4, Tahoma Jalousien, Hue, Echo, Sonos, Lupusec XT3, FritzBox

87insane

Ich glaube das es sehr wohl mit der UI zu tun hat.
Wie du richtig gesagt hast, hast du dir ein Template installiert.... Da muss du immer mal wieder dran rum schrauben. Da ich das nicht nutze kann ich aber auch nicht helfen. Am besten in einen Thread, passend zum Thema im Forum?

Gruß,
87Insane

is2late

Vielen Dank für Deine Mühe!

Mittlerweile ist das Problem gelöst. In Sonos waren  verschiedene Gets nicht gesetzt - getListsDirectlyToReadings, getFavouritesListAtNewVersion etc. Funktioniert jetzt (nahezu) einwandfrei.

LG is2late
Pi4, Tahoma Jalousien, Hue, Echo, Sonos, Lupusec XT3, FritzBox