[Erledigt] Sonos - get Favourite macht nix

Begonnen von bugster_de, 17 Mai 2018, 23:52:07

Vorheriges Thema - Nächstes Thema

bugster_de

Hi,

wenn ich bei meinem Sonos ein get mysonos Favourites aufrufe, dann macht er einfach nix. eder im Webfrontend noch am Modul selbst den get Button drücken und auch nicht wenn ich den Aufruf in einem Perl Skript mache.
Ich kann aber mit set mysonos LoadFavourite /Bibi und Tina/ den Favoriten wie im Sonos System definiert aufrufen.
Geht das noch nicht oder mach ich was falsch?

Laut commandref und Wiki sollte da doch eine komma-separierte Liste zurück kommen.

EDIT: oder habe ich das falsch verstanden und das get Favourites gibt selbst nichts zurück sondern die Liste der Favourites steht dann im Reading Favourites?

Otto123

Hi,

bei mir steht sie in LastActionResult

Aber ich habs nur probiert und habe kein weiters Wissen darüber.

Gruß Otto
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

bugster_de

#2
Hi,

hab mir das angesehen. Steht tatsächlich in LastActionResult. Das ist aber potentiell ungeschickt, wenn das so ist (erkläre ich gleich wieso).
Ich habe heute Nacht noch ein bisschen gefummelt:
wenn ich
get mysonos FavouritesWithCovers
mache, dann stehen die Favourites im Reading Favourites. Dieses Resultat ist aber eine vergleichsweise komplexe Art der Listendarstellung und damit nicht ganz einfach zu parsen.

Mein Anwendungsfall
via Alexa kommt der Wunsch in meine Perl Routine, etwas abzuspielen (z.B. "Bibi und Tina"). Nun unterscheidet das SONOS System ja mal zwischen Favoriten und Playlisten. Desweiteren ist "Bibi und Tina" der Name einer Serie, die ja verschiedene Folgen enthalten kann. Ich habe in meiner Perl-Routine deshalb folgenden Ablauf animplementiert
1. SONOS einen Update der Playlisten / Favoriten anfragen lassen
2. die Rückgabe durchsuchen, ob es da einen oder mehrere Matches gibt
3. "auskegeln", welchen der mehreren Matches man nimmt
4. dann den Sonos Player das spielen lassen

Wenn nun also die das Resultat der get Anfrage aus 1.) in LastActionResult steht, habe ich das Risiko, dass bevor meine Routine zu 2.) kommt, das Reading durch einen anderen Wert als Reaktion auf ein anderes Kommando überschrieben wird. Deshalb fände ich es cooler, wenn es im Reading Favourites steht und wenn es die einfache, komma separarierte Liste aus get Favourites habe.

Hinweis zu 3.): natürlich kann ich bei den SONOSPLAYERN /Bibi und Tina/ als RegEx übergeben und der SONOSPLAYER macht den Rest. Das führt aber dazu, dass immer die gleiche Folge abgespielt wird (der erste Match) was dann dazu führt, dass meiner Kleinen die Zornesröte ins Gesicht steigt. Auch möchte ich Sätze wie "spiel Bibi und Tina die mit dem Fohlen" verarbeiten können.

bugster_de

Hat sich erledigt: ich habe mir drei UserReadings angelegt, die die Favourites, Playlists und Radios anzeigen. Einfach an den Sonos-Playern die bereits bestehenden userReadings kopieren und entsprechend anpassen.
my_Favourites:LastActionResult.*?GetFavourites:.* { if (ReadingsVal($name, "LastActionResult", "") =~ m/.*?: (.*)/) { return $1; } }, my_Radios:LastActionResult.*?GetRadios:.* { if (ReadingsVal($name, "LastActionResult", "") =~ m/.*?: (.*)/) { return $1; } }, my_Playlists:LastActionResult.*?GetPlaylists:.* { if (ReadingsVal($name, "LastActionResult", "") =~ m/.*?: (.*)/) { return $1; } }

Reinerlein

Hi,

es gibt mehrere Attribute zu dem Thema:
getFavouritesListAtNewVersion (und die anderen Listen): Damit wird bei einer neuen Version der entsprechenden Liste automatisch eine Aktualisierung durchgeführt.
getListsDirectlyToReadings: Damit werden die Listen direkt in die entsprechenden Readings geschrieben. Eine Variante mit Userreadings ist dann nicht mehr notwendig.

Damit bekommst du schon mal deine Listen wie erwartet. Das ganze muss asyncron verarbeitet werden, da es immer eine Weile dauern kann...

Dann zum Heraussuchen:
Es gibt den Befehl StartSearchlist (bzw. LoadSearchlist):
Damit kannst du dir eine Abspielliste zusammenstellen lassen, die Suchkriterien entspricht. Schau mal für genaueres im Wiki nach.

Ein Beispiel:

StartSearchlist Tracks . (?i)bibi.und.tina *5-

Das braucht etwas länger, da es alle Track-Elemente durchsucht.

Akternativ, wenn der Albumname Bibi und Tina enthält:

StartSearchlist Albums /(?i)bibi.und.tina/ // *5-

Das geht schneller, da nur alle Albumnamen durchsucht werden müssen...

Das "*5-" heißt, dass die gefundene Titelmenge durchmischt wird, dann die ersten 5 Titel in die vorher geleerte Abspielliste eingetragen werden...
Das werden also immer 5 andere sein (natürlich nur, wenn es denn mehr als 5 Titel geben sollte :) )

Grüße
Reinerlein