Hauptmenü

Integration Sonos

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

Vorheriges Thema - Nächstes Thema

fhem-challenge

#15
Also ich hab es nun doch anders gelöst.

1.) Ich detze via userReadings das reading "FavTabletUI" mit den Favouriten, die dann ":" getrennt sind und entferne das \".

2.) In TabletUI verwende ich dann die in 1.) erzeugte data-list="FavTabletUI" zur Auswahl

3.) Damit setze ich ein dummy "sonos_play_fav"

4.) Mit dem notify sonos_play_favourites trenne ich dann den jeweiligen SONOS Player ab sowie den Favouriten der gespielt werden soll, uri_escape diesen, und setze "startFavourite" auf mein gewählten Favouriten. zusätzlich setze ich ich noch reading am jeweiligen SONOS Player "lasPlayedFav", der dann im TabletUI als "aktiv" angezeigt wird.


... das ist für mich die beste Lösung, da ich in TabletUI nicht die uri_escap'tenEinträge habe und es gleichermassen für alle meine Player funktioniert.

Anbei meine Lösung:

userRading am SONOS Player:
# userReadings für jeden SONOS Play setzen
set Sonos_Kueche userReadings FavTabletUI:LastActionResult.*?GetFavourites:.* {
if (ReadingsVal("Sonos_Kueche", "LastActionResult", "") =~ m/.*?: (.*)/) {
my $returnvalue = $1;
$returnvalue =~ s/","/:/g;
$returnvalue =~ s/\"//g;
return $returnvalue;
}
}


Dummy definieren:

# Dummy definieren
define sonos_play_fav dummy



Auswahl (select) in TabletUI:

<!-- in TabletUI select der Favouriten -->
<div
      data-type="select"
      data-device="Sonos_Kueche"
      data-list="FavTabletUI"
      data-get="lastPlayedFav"
      data-cmd="set sonos_play_fav"
  class="cell w2x">


notify zum abspielen des Favouriten:
# SONOS Favouriten spielen  
define sonos_play_favourites notify sonos_play_fav {
my $player=substr($EVENT,0,index($EVENT, " "));
my $part2=substr($EVENT,index($EVENT, " ")+1,length($EVENT)-index($EVENT, " "));
my $fav=substr($part2,index($part2, " ")+1,length($part2)-index($part2, " "));
my $favourite=uri_escape($fav);
fhem ("set $player startFavourite $favourite");
fhem ("setreading $player lastPlayedFav $fav");
Log 0,"Play on $player the favourite:$fav"
}



Viele Grüße!

Andreas

Nobby1805

Zitat von: uniqueck am 11 April 2016, 00:31:58
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.
Was heißt wirr ?
Bei mir zum Beispiel http://192.168.1.64:1400/getaa?u=x-file-cifs%3a%2f%2fHOMESERVER%2fMusik%2fPassport%20On%20Stage%2f1%20-%2001%20-%20Doldinger,%20Klaus%20-%20Ataraxia.flac&v=587und da kommt dann ein Bild

PS hier ist das Cover Bestandteil des flac ... bei dir auch? oder hast du die Cover außerhalb der Musik-Datei als JPG ?
FHEM-Featurelevel: 6.2   (fhem.pl:28227/2023-11-29) auf Windows 10 Pro mit Strawberry Perl 5.32.1.1-32bit
TabletUI: 2.7.15
IO: 2xHMLAN(0.965)|HMUSB2(0.967)

uniqueck

Zitat von: Nobby1805 am 11 April 2016, 10:39:32
Was heißt wirr ?
Bei mir zum Beispiel http://192.168.1.64:1400/getaa?u=x-file-cifs%3a%2f%2fHOMESERVER%2fMusik%2fPassport%20On%20Stage%2f1%20-%2001%20-%20Doldinger,%20Klaus%20-%20Ataraxia.flac&v=587und da kommt dann ein Bild

PS hier ist das Cover Bestandteil des flac ... bei dir auch? oder hast du die Cover außerhalb der Musik-Datei als JPG ?
Naja das ist die Musik welche ich als auto rip bei amazon habe. Bei meinen eigenen habe ich das noch gar nicht getestet. Es sieht ja nur dumm aus, wenn er es aufrund was weiß ich nicht laden kann. Dann wäre natürlich ein Standard Bild schön.  Ähnlich itunes widget von nesges, aber das funktioniert irgendwie auch nicht mehr.


Gesendet von meinem GT-N7100 mit Tapatalk


uniqueck

Also in der App von Sonos zeigt er mir auch für die bei Amazon gekauften Alben die Covers an, warum also nicht im TabletUI per image widget.
Wie kann ich da versuchen, dem Fehler auf die Schliche zu kommen, für meine eigene Musik, welche ich bei Amazon hochgeladen habe, bzw. welche ich auf meine NAS geladen habe, werden korrekt angezeigt.

Constantin

setstate

Ich benutze das itunes Widget von nesges in der FTUi version 2.* so wie auch schon zu 1.* Zeiten mit dieser Definition:


             <div data-type="itunes_artwork"
                      data-device="MPD1"
                      data-get='["artist","album","title"]'
                      data-size='200'
                      class="top-space">
             </div>


Eine angepasste Version für die ftui 2.2 ist hier im ersten Post zu finden: https://forum.fhem.de/index.php/topic,50945.0.html

uniqueck

Danke setstate,

mich hätte natürlich auch mal interessiert warum das nicht funktioniert. In der FHEM Oberfläche wird das Cover nämlich auch nicht richtig angezeigt.

Dann werde ich mal schauen was ich für tablet ui 2.1 bzw. 2.2 tun muss.

Gruß Constantin

Gesendet von meinem GT-N7100 mit Tapatalk


Nobby1805

Wird das Cover denn in der "normalen" Fhem-Oberfläche gezeigt ?
poste doch mal die URL die bei dir angezeigt wird wenn du mit rechtsklick > Eigenschaften auf das (nicht angezeigte) Cover klickst
FHEM-Featurelevel: 6.2   (fhem.pl:28227/2023-11-29) auf Windows 10 Pro mit Strawberry Perl 5.32.1.1-32bit
TabletUI: 2.7.15
IO: 2xHMLAN(0.965)|HMUSB2(0.967)

uniqueck

#22
Ne in der normalen fhem Oberfläche wird sie auch nicht angezeigt. Wenn ich zu Hause bin reiche ich sie nach.

Gesendet von meinem GT-N7100 mit Tapatalk

Hier wie gesagt die URL:

http://192.168.178.61:1400/getaa?s=1&u=x-sonos-http%3aamz%3atr%3a3b8d75d8-ef86-4b39-8f37-26ccbf93f456.mp3%3fsid%3d26%26flags%3d8224%26sn%3d1

Nobby1805

Zitat von: uniqueck am 14 April 2016, 19:15:01
Ne in der normalen fhem Oberfläche wird sie auch nicht angezeigt. Wenn ich zu Hause bin reiche ich sie nach.

Gesendet von meinem GT-N7100 mit Tapatalk
Dann würde ich die Anfrage in dem Sonos-Thread im Multimedia-Unterform stellen ... vermutlich hast du im Sonos-Modul etwas falsch eingestellt
FHEM-Featurelevel: 6.2   (fhem.pl:28227/2023-11-29) auf Windows 10 Pro mit Strawberry Perl 5.32.1.1-32bit
TabletUI: 2.7.15
IO: 2xHMLAN(0.965)|HMUSB2(0.967)

choetzu

Zitat von: fhem-challenge am 11 April 2016, 09:41:54


Anbei meine Lösung:

userRading am SONOS Player:
# userReadings für jeden SONOS Play setzen
set Sonos_Kueche userReadings FavTabletUI:LastActionResult.*?GetFavourites:.* {
if (ReadingsVal("Sonos_Kueche", "LastActionResult", "") =~ m/.*?: (.*)/) {
my $returnvalue = $1;
$returnvalue =~ s/","/:/g;
$returnvalue =~ s/\"//g;
return $returnvalue;
}
}



Viele Grüße!

Andreas

Hallo Andreas,

ich versuche auch die Favoriten einzubinden. Ich habe z.Z. in der userReadings bereits einen Eintrag drin. Wenn ich nun deinen userReadings mache, lösche ich dann den aktuellen Eintrag? Oder kann ich den bestehenden userReadings nutzen?

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; } }

danke für die Hilfe.
lg c
Raspi3, EnOcean, Zwave, Homematic

Loredo

Ich würde die bestehenden userReadings drin lassen, wer weiß ob du die Readings dazu später nochmals verwenden möchtest und dann tust du dich leichter, wenn du sie noch hast  ;)


Ich ersetze die Leerzeichen übrigens durch Punkte (=Regex für "jedes Zeichen", also auch Leerzeichen) statt  %20. Damit ist die Liste dann wieder lesbar.  8)



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



Außerdem setze ich in TabletUI data-quote="/". Dann wird der gesamte String als Regex vom Sonos Modul interpretiert und es klappt mit allen Listeneinträgen wunderbar.

Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

choetzu

Zitat von: Loredo am 07 August 2016, 15:34:41
Ich würde die bestehenden userReadings drin lassen, wer weiß ob du die Readings dazu später nochmals verwenden möchtest und dann tust du dich leichter, wenn du sie noch hast  ;)


Ich ersetze die Leerzeichen übrigens durch Punkte (=Regex für "jedes Zeichen", also auch Leerzeichen) statt  %20. Damit ist die Liste dann wieder lesbar.  8)



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



Außerdem setze ich in TabletUI data-quote="/". Dann wird der gesamte String als Regex vom Sonos Modul interpretiert und es klappt mit allen Listeneinträgen wunderbar.

Danke für deine Hilfe. Wenn ich das userReadings nicht ändern soll, wo kann ich dann deinen Code resp das userReading von Andreas ergänzen? Danke für die Hilfe
Raspi3, EnOcean, Zwave, Homematic

Loredo

Du musst genau lesen: Du solltest es nicht überschreiben, aber erweitern geht natürlich :-)
Man kann die Einträge mit Komma voneinander trennen.
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

simon2207

Hallo Leute,

in meinem bestehenden Userreadings steht das drinne:

attr Sonos_Wohnzimmer_SW userReadings Favourites:LastActionResult.*?GetFavouritesWithCovers.* { if (ReadingsVal("Sonos_Wohnzimmer_SW", "LastActionResult", "") =~ m/.*?: (.*)/) { return $1;; } }, Radios:LastActionResult.*?GetRadiosWithCovers.* { if (ReadingsVal("Sonos_Wohnzimmer_SW", "LastActionResult", "") =~ m/.*?: (.*)/) { return $1;; } }, Playlists:LastActionResult.*?GetPlaylistsWithCovers.* { if (ReadingsVal("Sonos_Wohnzimmer_SW", "LastActionResult", "") =~ m/.*?: (.*)/) { return $1;; } }, currentTrackPosition:LastActionResult.*?GetCurrentTrackPosition.* { if (ReadingsVal("Sonos_Wohnzimmer_SW", "LastActionResult", "") =~ m/.*?: (.*)/) { return $1;; } }

Wenn ich nun den Code:

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

dahinter hängen soll - wie mache ich das? Wo kommen Leerzeichen hin... etc... will den eigentlich nur in die fhem.cfg bekommen - aber bekomme beim speichern immer Error Meldungen.

Auch der letzte Block erschliesst sich mir nicht - wie soll man den - und wo hinschreiben?

Danke Simon

lewej

Zitat von: fhem-challenge am 31 März 2016, 14:51:45
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

Hi,

ich versuche dieses Reading zu setzen:


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


Bekomme aber beim rereadcfg


Unknown command if, try help.
Unknown command my, try help.
Unknown command $returnvalue, try help.
Unknown command $returnvalue, try help.
Unknown command return, try help.
Unknown command }, try help.
Unknown command }, try help.


Hat jemand eine Idee, oder muss ich das anders schreiben?

Gruss
lewej