Sonos - Suchlisten und Kategorien

Begonnen von Elektrolurch, 15 Mai 2015, 09:51:58

Vorheriges Thema - Nächstes Thema

Elektrolurch

Hallo 'Reinerlein,

jetzt habe ich die ersten Schritte mit Deinem tollen Modul gemacht!!! Und mir sind da doch ein paar Dinge aufgefallen, die ich vielleicht auch nicht richtig verstehe.

1. get Befehl für Favourites, FavouriteswithCover, Playlists, PlaylistswithCovers, Radios, RadioswithCover

Wenn ich diese Befehle direkt in fhem eingebe, bekomme ich nichts zurück. Stattdessen wird ein reading im device angelegt und befüllt.
a) Läuft dieser Vorgang asynchron ab und wie bekomme ich mit, dass der  Befehl erfolgreich ausgeführt wurde?
b) Eigentlich sollten die Ergebnisse immer doch für alle Player gleich sein?
c) Ich bekomme auch nur die Readings befüllt, die ...withCover heißen, also den String auf den hash haben. Die reine Textdarstellung bekomme ich nicht.

2. get device SearchlistCategories
da kommt weder auf der fhem-Oberfläche was zurück, noch wird da ein reading angelegt.
Aus Zufall habe ich gesehen, dass das Ergebnis auch inreading "lastresult" (? oder so ähnlich, kann gerade nicht nachsehen) steht.

3. und damit wäre ich schon beim nächsten Punkt: unter den searchCategories gibt es kein "Radio".  Für mich wäre es auch interessant, in den verfügbaren Radiosendern zu suchen (die Sonos-App ist leider nicht barrierefrei, daher versuche ich mir das jetzt mit Hilfe von readingsGroup nachzubauen). Wäre das möglich, das noch zu ergänzen?


4. LoadSearchlist <Kategoriename> <KategorieElement> [[TitelfilterRegEx]/[AlbumfilterRegEx]/[ArtistfilterRegEx] [maxElem]]
a) Läuft das asynchron ab und wie bekomme ich mit, dass das Ergebnis vorliegt?
b) Wo finde ich das Ergebnis, wenn ich es vor dem Abspielen ev. noch Bearbeiten möchte? Oder zumindest anzeigen?
Sowas für Radiosender wäre auch wünschenswert. Siehe Punkt davor.

5. Zitat: Der Parameter sollte/kann URL-Encoded werden
Bin gestern gleich darüber gestolpert, denn der Radiosender enthielt Leerzeichen. Da ich nichts mit Web-Programmierung bislang am Hut hatte, solche Leute soll es auch geben :-), mit welcher Funktion wandelt man das um? (Hinweis im wiki, für die DAUs, wie mich)

Gruß

Elektrolurch
configDB und Windows befreite Zone!

Reinerlein

Hi Elektrolurch,

erstmal kurz auf die Schnelle, da ich gerade unterwegs bin.

Die Anweisungen, die wirklich etwas vom Player holen, sind immer asynchron und liefern das Ergebnis im Reading LastActionResult zurück. Darauf reagieren kannst du also z.B. mit einem Notify auf das Reading. Das Ergebnis wird immer mit dem Befehl und einem Doppelpunkt am Anfang dort reingeschrieben.
Für die Abfragen von FavouritesWithCovers, RadiosWithCovers und PlaylistsWithCovers gibt es bereits angelegte UserReadings, die das Ergebnis dann übertragen in die Readings Favourites, Radios und Playlists. Auf diesem Wege kannst du z.B. mit einem einfachen Notify auf diese Ziel-Readings reagieren...

Die Qualitativen Ergebnisse sind für alle Player gleich, allerdings ist die Cover-URL auf den jeweiligen Player zugeschnitten. Das bedeutet, dass der jeweilige Player zum Anzeigen der Cover auch angeschaltet sein muss :)
Außerdem ist das Ergebnis immer die textuelle Repräsentation eines Perl-Hashes, damit man das selber sauber weiterverarbeiten kann.

Es gibt bereits eine Vorlage-Perl-Prozedur, die man sich selber anpassen und in einer ReadingsGroup verwenden kann: "SONOS_getListRG(<device>, <reading>, <unorderedlistboolean>)". Diese erzeugt auch gleich die Schalt-Links für den jeweiligen Player, sodass man direkt bedienen kann.
Wie gesagt, am Besten als Kopiervorlage verwenden und unter einem neuen Namen in die myUtils.pm packen.

Dieser Befehl "searchListCategories" bildet direkt die Struktur aus dem Sonos-System ab, da das ganze durch rekursive Aufrufe an den Player realisiert ist.
Die Radiosuche (also das Heraussuchen eines "neuen" Radiosenders aus der riesigen Liste an Sendern), ist im Controller implementiert, und damit nicht vom Modul an einem Player abfragbar (so wie die Suche in Spotify auch).
Da könntest du höchstens versuchen eine API direkt von TuneIn zu suchen, und damit die Radiosender herauszusuchen...

Zu deinem vierten Punkt: Das Ergebnis spielt sich direkt in der aktuellen Abspielliste des jeweiligen Players ab. Es wird also nichts zurückgeliefert, sondern die Liste aktualisiert.
Deswegen hat z.B. der Parameter "maxElem" auch ein paar Sonderfunktionen, wie das optionale Minus-Zeichen am Ende, mit dem die aktuelle Liste vorher geleert wird.
Auch hier gibt es natürlich keinen Zugriff auf die verfügbaren Radiosender...

Zu 5: Die Leute gibt es wirklich, und das ist auch gut so :)
es gibt die Perl-Anweisung "uri_escape()" dafür, oder wenn man es selber manuell schreiben möchte reicht es zu wissen, dass ein Leerzeichen als "%20" geschrieben werden muss. Andere Sonderzeichen sind sowieso kein Problem... Ich trage das im Wiki noch nach...
Du kannst aber auch oft eine regulären Ausdruck verwenden, und an der Stelle einfach einen Punkt hinschreiben...

Grüße
Reinerlein