SONOS Favouriten durchschalten

Begonnen von ripperle, 30 Oktober 2018, 10:59:08

Vorheriges Thema - Nächstes Thema

ripperle

Hallo zusammen,

ich habe ein Problem und komme nicht so richtig weiter, vllt kann mir hier jemand helfen.

Was will ich tun?
Bei meinem Sonos Lautsprecher die Favouriten Liste durchschalten.

Was habe ich bis jetzt gemacht?
Über eine Perl Funktion (geschrieben in myUtils) kann ich:

  • mit get Favourites die aktuellen Favouriten auslesen
  • mit set StartFavourite einen beliebigen Favouriten starten (Leerzeichen müssen mit "%20" ersetzt werden)
  • mit dem reading currentSource den aktuell spielenden Favouriten ermitteln

Wo liegt das Problem
Ich möchte aus der Liste der Favouriten herausfinden welcher aktuell gespielt wird, um dann den nächsten zu starten. Also z.B. habe ich folgende Favouriten aus der get Favourites Liste in einem array gewonnen (mittels Regex etc.):
Favourite[0]='Radio 1'
Favourite[1]='Hitradio 2'
Favourite[2]='Classic Radio 3'

Nun suche ich in einer schleife ob bzw. welcher Favourite gerade gespielt wird (pseudo code):
nextIndex = -1;
for(my $i=0; $i <= $#Favourite; $i++){
  if(currentSource == Favourite[i]){
    nextIndex = i + 1;
    last;
  }
}
if(nextIndex < 0){
# no favourite found!
  return;
}
if(nextIndex > $#Favourite){
  nextIndex = 0;
}

fhem(set Sonos_Wohnzimmer StartFavourite $Favourite[nextIndex]);



Leider stimmt die currentSource welche ich über das reading currentSource bekomme, nicht mit dem favouriten namen überein. So heist Favourite[2] z.B. "The Classic Radio 3" oder evtl. auch "Classic" anstatt "Classic Radio 3"

Hat jemand ein ähnliches Problem gehabt und kann mir hier einen tipp geben wie man das lösen kann?

Gruß
ripperle

binford6000

Hallo ripperle,
zunächste denke ich mal dass dein Post im Bereich "Multimedia" besser aufgehoben wäre...

ZitatLeider stimmt die currentSource welche ich über das reading currentSource bekomme, nicht mit dem favouriten namen überein. So heist Favourite[2] z.B. "The Classic Radio 3" oder evtl. auch "Classic" anstatt "Classic Radio 3"

Hast du mal versucht anstatt currentSource currentFavouriteName zu verwenden?
VG Sebastian

ripperle

Zitatzunächste denke ich mal dass dein Post im Bereich "Multimedia" besser aufgehoben wäre...
...Geschmacksache :)


ZitatHast du mal versucht anstatt currentSource currentFavouriteName zu verwenden?
Gute Frage! Da steht bei mir leider nichts drin...  :o

Esjay

Zitat von: ripperle am 30 Oktober 2018, 11:23:53
...Geschmacksache :)
Du erwartest Unterstützung in Bezug auf Sonos, von daher wäre ein Blick in die Maintainer.txt. ganz gut gewesen. Die besagt nämlich folgendes:

ZitatFHEM/00_SONOS.pm             Reinerlein           Multimedia

Da nicht jeder überall mitlesen möchte, ist das immer recht hilfreich!

Grüße

binford6000

ZitatGute Frage! Da steht bei mir leider nichts drin...  :o
Hmmm... bei mir schon. Leider das gleiche:

currentFavouriteName RADIO BOB! BOBs Hardrock
currentSource        RADIO BOB! BOBs Hardrock

VG Sebastian

ripperle

#5
Aha das ist ja Interessant. Dann stellt sich die Frage warum das reading bei mir leer ist?!

Das steht im zugehörigen Sonos Artikel:
ZitatcurrentFavouriteName: Enthält den Namen des Quellfavoriten, der den aktuellen Titel zur Liste hinzugefügt hat. Dazu müssen die Favoriten mittels "get FavouritesWithCover" ermittelt worden sein, und die Liste im Reading "Favourites" zur Verfügung stehen.

Leider bleibt das reading currentFavouriteName bei mir leer...

@binford6000
Könnte es an irgendwelchen alten Versionen bei mir liegen? Habe gerade nochmal ein update all durchgeführt, allerdings ohne Erfolg?!


Gruß

EDIT:
Screenshot hinzugefügt

binford6000

Moin,
das ist merkwürdig denn mal kurz Hitradio antenne 1 als Favourite hinzugefügt
und get FavouritswithCovers gemacht:
currentFavouriteName Hitradio antenne 1 2018-10-31 08:17:09
currentNormalAudio 0 2018-10-31 07:52:15
currentOriginalTrackNumber 2017-10-12 10:11:01
currentPlaylistName 2018-10-06 11:26:07
currentRadioName 2018-10-31 08:17:09
currentSender Hitradio antenne 1 2018-10-31 08:17:09
currentSenderCurrent 2018-10-29 17:15:41
currentSenderInfo MAX GIESINGER - ZUHAUSE 2018-10-31 08:17:26
currentSource Hitradio antenne 1 2018-10-31 08:17:09
currentStreamAudio 1 2018-10-31 07:39:47
currentTitle 2018-10-31 07:39:47


Was zeigt denn ein version? Bei mir siehts so aus:
00_SONOS.pm                 16658 2018-04-25 06:00:12Z Reinerlein
21_SONOSPLAYER.pm           16478 2018-03-24 22:47:43Z Reinerlein


VG Sebastian

ripperle

@binford6000
Kannst du bitte mal noch nachschauen wie der Radiosender "Hitradio antenne 1" bei dir in der Favoritenliste heist? Bei mir steht da eben "antenne 1" drin, was ja genau mein Problem ist?!

Vielen Dank!

binford6000

Zitat von: ripperle am 31 Oktober 2018, 09:54:24
@binford6000
Kannst du bitte mal noch nachschauen wie der Radiosender "Hitradio antenne 1" bei dir in der Favoritenliste heist? Bei mir steht da eben "antenne 1" drin, was ja genau mein Problem ist?!

Vielen Dank!

Im Favourites Reading wir er so angezeigt:
'Title' => 'Hitradio antenne 1',

currentFavouriteName Hitradio antenne 1

currentSource Hitradio antenne 1

VG Sebastian

ripperle

Mhh weis jetzt nicht ob wir das gleiche meinen...

Wenn ich get Favourites aufrufe bekomme ich das:
LastActionResult
GetFavourites: "DASDING","Radio Swiss Jazz (Jazz)","SWR3 Elchradio","antenne 1","bigFM"
2018-10-31 15:46:01


Die readings 'Title' oder auch 'currentFavouriteName' bleiben leer., das reading 'currentSource' liefert 'Hitradio antenne 1' (und NICHT 'antenne 1')...

Wenn ich get FavouritesWithCovers aufrufe bekomme ich ebenfalls kein Inhalt in den readings 'Title' oder auch 'currentFavouriteName'...

Die Module sehen gleich aus...
00_SONOS.pm 16658 2018-04-25 06:00:12Z Reinerlein
21_SONOSPLAYER.pm 16478 2018-03-24 22:47:43Z Reinerlein



binford6000

Das ist wirklich komisch...  ::)
Reden wir denn vom selben "Hitradio antenne 1" aus TuneIn?

binford6000

Selbst in LastActionResult stehts korrekt drin:
GetFavouritesWithCovers: {'...,'Title' => 'Hitradio antenne 1'},'FV:2/42' => {'Ressource' => 'x-sonosapi-stream:s143782?sid=254&flags=8224&sn=0','Cover' => 'http://cdn-radiotime-logos.tunein.com/s143782g.png',...}}

VG Sebastian

ripperle

Ja genau diesen radio Sender von tunein meine ich...

GetFavouritesWithCovers: {..... 'Title' => 'antenne 1','Ressource' => 'x-sonosapi-stream:s25770?sid=254&flags=8224&sn=0','Cover' => 'http://cdn-profiles.tunein.com/s25770/images/logog.jpg'}}

Habe zwischenzeitlich nen workaround, bei dem ich in nem dummy device einfach ne Zahl speicher und die dann einfach hoch zähle...
Wenn man dann natürlich über die app den Sender verstellt bekomme ich das nicht mit... Net ganz so schön aber naja...

Wäre trotzdem schön wenn wir noch raus finden was da los ist...  ;D

juemuc

#13
Hallo,

ich habe das über 2 DOIF gelöst.
defmod Bad_Favoriten_V_DOIF DOIF ([Sonos_Bad:"UD"] and \
[Sonos_Bad:transportState] eq "PLAYING") \
({my @fav = split(/\|/,"[Sonos_Bad:FavouritesListAlias]");;;;\
my $pos = SONOS_posInList("[currentFavouriteName_Bad]",\
   @fav);;;;\
my $anz=$#fav;;;;\
if ($pos < $anz)\
   {$pos=$pos+1}\
else\
   {$pos=0};;;;\
my $next_current_favorit=$fav[($pos)];;;;\
my $ncf = urlEncode($next_current_favorit);;;;\
fhem("set Sonos_Bad StartFavourite $ncf")})
attr Bad_Favoriten_V_DOIF do always
attr Bad_Favoriten_V_DOIF initialize initialized

defmod Bad_Favoriten_Z_DOIF DOIF ([Sonos_Bad:"DU"] and \
[Sonos_Bad:transportState] eq "PLAYING") \
({my @fav = split(/\|/,"[Sonos_Bad:FavouritesListAlias]");;;;\
my $pos = SONOS_posInList("[currentFavouriteName_Bad]",\
   @fav);;;;\
my $anz=$#fav;;;;\
if ($pos > 0)\
   {$pos=$pos-1}\
else\
   {$pos=$anz};;;;\
my $next_current_favorit=$fav[($pos)];;;;\
my $ncf = urlEncode($next_current_favorit);;;;\
fhem("set Sonos_Bad StartFavourite $ncf")})
attr Bad_Favoriten_Z_DOIF do always
attr Bad_Favoriten_Z_DOIF initialize initialized


Allerdings erkennt FHEM das Drücken der Tasten nicht immer.

Viele Grüße
Jürgen

PS: Ich empfehle auch den Bereich Multimedia. Dies war Zufall, dass ich hier lese.
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).

ripperle

Das Problem ist das ich
a) überhaupt kein reading mit dem currentFavouriteName habe
b) alle anderen readings die man nutzen könnte um den aktuellen favourite zu ermitteln etwas anderes drin steht wie mir get favourites oder get favorites with cover liefert...
Im konkreten Beispiel bekomme ich nur "antenne 1" anstatt "Hitradio Antenne 1" sodass ich nicht ermitteln kann, welcher favourite gerade abgespielt wird..

binford6000

Zitat von: ripperle am 31 Oktober 2018, 23:28:44
Das Problem ist das ich
a) überhaupt kein reading mit dem currentFavouriteName habe
b) alle anderen readings die man nutzen könnte um den aktuellen favourite zu ermitteln etwas anderes drin steht wie mir get favourites oder get favorites with cover liefert...
Im konkreten Beispiel bekomme ich nur "antenne 1" anstatt "Hitradio Antenne 1" sodass ich nicht ermitteln kann, welcher favourite gerade abgespielt wird..

Wie juemuc (und ich) schon vorgeschlagen haben:
Am besten du verschiebst den Thread nach Multimedia. Dann ist die Chance größer dass noch andere Sonos Nutzer mitlesen [emoji6]

Ich kann mir leider nicht erklären warum deine Readings nicht korrekt gefüllt sind.
VG Sebastian


Gesendet von iPad mit Tapatalk

ripperle

ZitatAm besten du verschiebst den Thread nach Multimedia. Dann ist die Chance größer dass noch andere Sonos Nutzer mitlesen

Erl. Wusste ehrlich gesagt nicht wie das funktioniert, aber habe jetzt den richtigen Knopf gefunden  ::) :o

Noch eine andere Sache die mir aufgefallen ist und evtl. relevant ist:

Es gibt ja im Player unten userReadings:
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; } }

Wenn ich diesen abgefahrenen perl Ausdruck richtig interpretiere, sollten 3 readings im device auftauchen (Favourites,Radios,Playlists), welche über den LastActionResult und wildem regex z.B. direkt die Favoriten extrahieren. Ich sehe bei mir keins dieser readings?!
Desweiteren werden ja auch userReadings angelegt, z.B. Sonos_KuecheRG_Favourites, welche ebenfalls bei mir leer sind?! (Auch wenn ich davor GetFavouritesWithCovers ausgeführt habe)

Gruß
ripperle

binford6000

Moin,
probier mal folgendes:
attr Sonos getListsDirectlyToReadings 1
und lösche das Userreading am Sonos_Player. Dann werden die Favoriten, Playlists und Radios direkt in die Readings geschrieben.
VG Sebastian

ripperle

Uhhh das wars!! Bekomme jetzt das
currentFavouriteName
antenne 1
2018-11-01 10:06:06
currentFavouriteNameMasked
antenne.1
2018-11-01 10:06:06
currentNormalAudio
0
2018-11-01 07:00:45
currentOriginalTrackNumber
2018-01-31 16:32:25
currentPlaylistName
2018-01-31 16:32:25
currentPlaylistNameMasked
2018-11-01 10:02:00
currentRadioName
2018-01-31 16:32:25
currentRadioNameMasked
2018-11-01 10:02:00
currentSender
Hitradio antenne 1
2018-11-01 10:06:06
currentSenderCurrent
2018-10-26 21:48:50
currentSenderInfo
2018-11-01 10:06:06
currentSource
Hitradio antenne 1
2018-11-01 10:06:06


Mit dem müsste ich arbeiten können... Wenn ich das richtig sehe werden sogar im reading currentFavouriteNameMasked die Sonderzeichen direkt durch ein Punkt ersetzt damit ich es besser im perl script verarbeiten kann... Melde mich nochmal sobald ich Zeit habe es zu testen...

Vielen Dank!!

ripperle

#19
Also wie erwartet funktioniert das jetzt so wie ich das vor hatte

Vielen Dank!!!

Hätte trotzdem noch paar fragen wenn wir schon dabei sind :):

  • Damit das Reading "FavouritesList" befüllt wird, muss soweit ich das verstanden habe get Favourites aufgerufen werden. Gibt es eine Möglichkeit bei einer durch die Sonos App geänderte Favouritenliste dieses reading "automatisch" zu aktualisieren?
  • Das starten eines Favoriten mittels "set StartFavourite" mit Sonderzeichen (zum Beispiel Leerzeichen bei "antenne 1") funktioniert nicht.
    Habe gedacht hierfür wären die Readings currentFavouriteNameMasked oder FavouritesList, welche diese Sonderzeichen mit Punkten ersetzen.
    Leider tut das auch nicht. Ich greife also immer noch auf die readings mit Sonderzeichen zu und ersetzte die Leerzeichen mit %20, dann tuts. Gibt es hier eine bessere Möglichkeit?
  • Kann ich die readingGroups und notifys löschen oder brauch man die zwingend? (Habe eig keine Verwendung dafür)

Gruß

binford6000

#20
Zu 1:
Mach doch einfach ein tägliches at  ;)

Zu 2:
set mySonos_Bad StartFavourite /antenne.1/

Zu 3:
Welche notifys?
Wenn du die readingsGroups nicht brauchst -> löschen
Kannst halt darüber auch die Favoriten/Radios Playlists ansteuern

VG Sebastian

juemuc

zu 1)

Ein notify hilft  8)
defmod Sonos_Favoritenupdate_K notify Sonos_Kueche:FavouritesVersion:.* \
get Sonos_Kueche Favourites


Viele Grüße
Jürgen
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).

binford6000

Zitat von: juemuc am 01 November 2018, 22:18:01
zu 1)

Ein notify hilft  8)
defmod Sonos_Favoritenupdate_K notify Sonos_Kueche:FavouritesVersion:.* \
get Sonos_Kueche Favourites


Viele Grüße
Jürgen

Und wieder was gelernt  :)
Danke!

Reinerlein

Hallo,

habe das gerade entdeckt.
Schön dass ihr es gelöst habt, dann bleibt mir nur noch ein Hinweis auf ein weiteres Attribut für diesen Zweck:

attr Sonos getFavouritesListAtNewVersion 1
Damit wird in Zusammenhang mit "getListsDirectlyToReadings" das Favourite-Reading bei einer Änderung im Sonos-System automatisch aktualisiert...

Grüße
Reinerlein

binford6000

Ok, notify wieder gelöscht :-)
Danke und VG Sebastian


Gesendet von iPad mit Tapatalk

juemuc

Und ich hatte beides  :o. Nun sind die notify-Einträge weg  ;D
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).

ripperle

ZitatHallo,

habe das gerade entdeckt.
Schön dass ihr es gelöst habt, dann bleibt mir nur noch ein Hinweis auf ein weiteres Attribut für diesen Zweck:
Code: [Auswählen]
attr Sonos getFavouritesListAtNewVersion 1
Damit wird in Zusammenhang mit "getListsDirectlyToReadings" das Favourite-Reading bei einer Änderung im Sonos-System automatisch aktualisiert...

Grüße
Reinerlein

Habe die userReading einträge in den Sonos Playern entfernt und das Attribut getFavouritesListAtNewVersion auf 1 gesetzt. Sollte nun tatsächlich ohne das ich ein get ausführe das reading FavouritesList sich ändern, wenn ich mit der App die Favoritenliste beabeite?!
Ich muss weiterhin ein get Favourites ausführen damit sich die Liste aktualisert...

Ansonsten tut aber alles super...

P.S.:
Falls es jemand interessiert, ich habe mit einem XIAOMI Cube eine 1A mini Fernbedienung gebaut  ;D

ripperle

Also mir ist aufgefallen das die favorite Version und das Favourite-Reading tatsächlich sofort aktualisiert wird... Nur das reading FavouritList und FavouritListMasked welche ich benutze werden nicht aktualisiert...
Habe jetzt dann doch ein notify gemacht, welches get Favourites aufruft wenn die favourite Version sich ändert...

Gruß

Jewe

Hallo,

leider klappt es bei mir auch nicht mit den Favoriten oder auch Playlisten. Die Attribute
getFavouritesListAtNewVersion oder getListsDirectlyToReadings habe ich nicht.
Muss ich dazu etwas spezielles installieren oder so ? Mein Fehm ist fast ganz aktuell.

Jens

binford6000

Hallo Jens,
was heißt denn "fast ganz aktuell"?!  ;D Und was sagt denn
version 00_SONOS.pm?

Sollte lauten:
00_SONOS.pm 16658 2018-04-25 06:00:12Z Reinerlein
Und dann gibts auch die Attribute
getFavouritesListAtNewVersion
getListsDirectlyToReadings
getPlaylistsListAtNewVersion
getRadiosListAtNewVersion


Diese werden am SONOS-Device eingestellt, nicht am SONOSPLAYER-device  ;)
Sobald ich in der SONOS App einen neuen Favorit anlege taucht der in FHEM auf.

VG Sebastian

Jewe

Hallo Sebastian,

habe die aktuelle Version. Und die Readings sind auch alle im SONOS-DEVICE da :-)
Dachte die ssind im Player....
Danke für die Aufklärung.

Jens

z0lt1

Hallo, ich hole diese Thema mal wieder aus dem Archiv, da hier über mein Anliegen gesprochen wurde. Also bei mir wird trotz

getFavouritesListAtNewVersion 1
getListsDirectlyToReadings 1


die Favoritenliste nicht aktiviert. Ich habe mir jetzt auch mit einem DOIF beholfen, fände es aber schöner wenn es so funktionieren würde wie es gedacht war. Hat jemand einen Tipp, was die Ursache sein könnte?

Besten Dank im voraus.