Hallo Zusammen
Ich würde gerne den Wert aus dem "Select Widget", welcher selektiert wurde, bevor der an das Device übergeben wird anpassen.
In der Art, value=uri_escape(value).
geht dies?
Grüsse
Eric
Hallo Eric,
die auszuwählenden Werte stehen doch unter data-alias, die dazugehörenden Werte liest Du in data-list aus fhem aus bzw. ein.
In dem Device würde ich ein userReadings hinzufügen und mit einer Liste füllen, in der die Sonderzeichen mit ESC-Sequenzen gefüllt sind. Die Listeeinträge müssen mit ":" separiert werden. Dann würde aus der data-alias-Liste der zugehörige Wert aus dem UserReadings gelesen werden.
Beispiel :
in FHEM:
attr <device> userreadings FAVSTR_SORT {my $t="Heart_Beat_Radio_Memory_Hits:Bear_Family_Radio:ANTENNE_BAYERN_Oldies_but_Goldies:1LIVE_-_Das_junge_Radio_des_WDR:WDR2_Aachen_und_Region:WDR3_-_Aus_Lust_am_Hoeren:WDR4_-_Melodien_fuer_ein_gutes_Gefuehl:WDR5_-_Hoeren_erleben";return($t)}
in FTUI:
data-list="FAVSTR_SORT"
data-alias='["Memory Hits FM","Bear Family","Antenne Bayern Oldies but Goldies","1Live","WDR2","WDR3","WDR4","WDR5"]'
So mache ich es mit einer Auswahl von Sendern, bei deren Auswahl der ohne Sonderzeichen "modifizierte" Wert an den Server gesendert wird.
Gruß Eberhard
Hallo Eberhard
Danke für dein Feedback. Das wäre ok, wenn die liste statisch wäre. Nur ist meine Playliste dynamisch. Einfacher wäre es, wenn ich den Wert dann an das format anpassen könnte was ich dann übergeben sollte, da er sonst nicht schön lesbar in der Liste wäre.
Ich könnte natürlich über ein dummy gehen und ein notify darauf setzen, aber dies gefällt mir nicht wirklich.
Grüsse
Eric
Hallo Eric,
welcher Player? Die Liste der PL muss doch im Player vorliegen (unbearbeited) sie wird ja vom SErver an den Player übermittelt.
PL in Variable $xy packen, mit dem Perl-Befehl my $encoded = uri_escape($xy); und mit return($encoded) in ein UserReading zurückgeben. Achtung ungetestet!
Das Modul URI::ESCAPE muss installiert sein. Ob es bereits in FHEM vorhanden ist, entzieht siich meiner Kenntnis.
Gruß Eberhard
Edit: Für FTUI ist der Datensatztrenner ein ":" , in FHEM kann ein anderer Trenner not wendig werden z.B. ein ",". Das müsste noch geändert werden.
Ich bin eh gerade an einem widget_medialist dran. Das kann man dann für Playlisten, TV Programm oder Senderliste nutzen, links das Coverbild in klein, rechts Text und Zeiten, wie Artist, Titel usw.
Das Ganze soll scrollbar sein und bei Click auf ein Item, dessen ID an den Player geschickt werden.
Ich versuche das generisch zu machen, obwohl ich das für zu aller erst für mein MPD Player und Spotify brauche.
Hallo Setstate, das finde ich eine sehr gute Idee.
@Eberhard
Das ist genau so wie ich es mache, nur wenn du die Liste dann mit mit dem Select Widget anschaust, ist sie nicht sehr schön lesbar. Ich mache es mit dem Sonos. Schön wäre ein UserReading, normal lesbar - und da sind eben spaces als spaces drinnen. Nur in dem Format kannst Du es dem Player nicht übergeben.
Beispiel wenn ich in der Select Liste den Wert auswähle : "94.1FM GOLD COAST | (Unterhaltungsmusik)" kann ich den an Sonos Player nur wie folgt übergeben:
set Sonos_Wohnzimmer playFavourite 94.1FM%20GOLD%20COAST%20%7C%20%28Unterhaltungsmusik
Wenn ich die Select liste mit uri_escape bereitstelle, dann ist es eben nicht schön/gut lesbar.
Grüsse
Eric
Man kann den zu sendenden String auch in Anführungszeichen setzen
data-quote='"'
Hallo Setstate
Das hatte ich auch versucht, leider geht dies bei dem Sonos (Sonos modul) nicht.
du kannst beim sonos modul die regex varainte verwenden: /das.ist.mein.sender/ das ist meist lesbarer.
gruss
andre
Hallo Andre
Danke für den Tip, ich weiss dass ich meine Favourites in Songs umbenennen kann. Ich würde gerne diese Umgehungslösung nicht einsetzen wenn es gehen würde.
Es wäre einfach schön, den Wert entsprechend anpassen zu können bevor ich den übergebe.
Grüsse
Eric
Hallo Avatar,
poste doch mal bitte den Teil der Select-Liste. Ich habe in der Küche zwei Sonos, da kann ich mal probieren.
Gruß Eberhard
Ich baue gerne nich ein url-encode in das select ein, wenn es notwendig ist. Aber vielleicht haben die Sonos-Besitzer noch eine Idee. :D
Vorab: Diesen Beitrag hatte ich bereits fälschlicherweise in einem anderen Thread gepostet.
Ich bin fast fertig, habe nur ein kleines Problem.
Das UserReadings sieht wie folgt aus:
FAV_FTUI: ANTENNE BAYERN Oldies but Goldies:Abba The Radio:Heart Beat Radio Memory Hits:Schwany 3 Volksmusik:Schwany 4 Blasmusik:Schwany 5 Oberkrain:Schwany Instrumental:WDR2 Rheinland
FAV_SEND: "/ANTENNE.BA/":"/Abba.The.R/":"/Heart.Beat/":"/Schwany.3./":"/Schwany.4./":"/Schwany.5./":"/Schwany.In/":"/WDR2.Rhein/"
Aus diesen Favoriten soll über ein PullDown Liste ein Sender für Sonos ausgewählt werden.
Die FTUI-Konfiguration sieht wie folgt aus:
<div data-type="select"
data-device="Sonos_Kueche_RF"
data-list="FAV_FTUI"
data-get="FAV_SEND"
data-set="StartFavourite"
data-cmd="set" >
</div>
Nach Auswahl eines Sender wird herausgesendet: set Sonos_Kueche_RF StartFavourite WDR2 Rheinland Es sollte aber: set Sonos_Kueche_RF StartFavourite /WDR2.Rhein/ gesendet werden.
Er hat also offensichtlich mit der FAV_SEND Probleme und benutzt einfach die FAV_FTUI. Gibt es einen Tipp für mich, wie ich es schaffe den Satz aus FAV_SEND nativ zu senden??
Gruß Eberhard
Zusatzfrage:
sind die Attribute data-items und data-alias des Select-Widgets wirklich statisch, oder kann man sie mit einem Perl-Ausdruck, der auf das Reading zeigt, befüllen? Wie müsste der Perl-Ausdruck denn dann aussehen?
Gruß Eberhard
nö, man kann auch ein data-list angeben. Im FHEM kannst du dann das Reading beliebig füllen. Wichtig, die Item müssen mit : getrennt sein .
data-list="inputs"
Zitatinputs AUX:Airplay:BD/DVD:BLUETOOTH:FM:NET:PHONO:SAT:Game:Webradio deleteattr
Wenn data-list="setList" ist, wird die setList Spezialität beachtet.
attr setList state1:wert1,wert2 state2:wert3,wert4
Hallo setstate,
das bedeutet aber immer noch, dass die Attribute aus dem gleichen Device kommen müssen. Ich dachte eher an ein :
data-list = "ReadingsVal("<device>","<reading>","")"Folgendes Szenario: Widget: select, device:Gerät A, data-list: aus Gerät B im Rading xy. Damit sollte das Event: set <Gerät A> <Befehl aus Reading xy des Gerätes B> möglich sein.
Zitat von: setstate am 07 Mai 2016, 16:59:23
Ich baue gerne nich ein url-encode in das select ein, wenn es notwendig ist. Aber vielleicht haben die Sonos-Besitzer noch eine Idee. :D
Ich bin nicht der Meinung, dass das notwendig ist, da es andere Lösungsmöglichkeiten gibt. Ich weise nur auf die Lösung von justme1968 hin, die bei mir tadellos funktioniert.
Gruß Eberhard
Man kann auch ein anderes Device angeben:
data-list="DeviceB:ReadingListe"
ZitatWenn data-list="setList" ist, wird die setList Spezialität beachtet.
Au-wio-wei, das ist (noch) zu hoch für mich. Ich hatte mich blöd ausgedrückt, jetzt muss ich mich nicht wuden, dass ich es nicht kapiere.
Ich habe eine Liste in einem userReadings - nennen wir sie FAV_SEND. Diese wird dynamisch mit aufbereiteten Werten in
data-list befüllt. Sie taugen aber nicht für das DropDown vom Select-Widget. Also sollte
data-alias zum Einsatz kommen: Die aufbereitete Liste ist ebenfalls dynamisch und liegt auch in einem userReading - nennen wir diese FAV_FTUI.
Frage: Wie kann ich diese dynamische Liste von FAV_FTUI für
data-alias zur Verfügung stellen? Würde es nicht Sinn machen
data-alias so zu erweitern, dass man/frau wie bei
data-list ein userReading ansprechen/anzeigen lassen kann? Dann könnte die Bearbeitung mit URI usw. bereits in einem userReading geschehen. Das hätte m.E. einen gewissen Charme.
BTW: Der Ausdruck :
data-list = "Sonos_Kueche_RF:FAV_SEND" geht auch nicht. Da bleibt DropDown ganz dunkel. ::) ::) ...und dabei liegt unter FAV_SEND ein sooo schöne Liste... ;D ;D ;D
Gruß Eberhard
Werde ich mir ansehen und optimieren. Ich habe nuf gerade wenig Zeit dafür.
Hallo setstate,
das ist hier Freizeitgestaltung, Stress haben wir alle im Leben genug. Also - lass Dir Zeit und melde Dich wenn Du was gemacht hast. Ich habe ja einen Workaround, nicht elegant, aber finktionsfähig.
Relaxte Grüße
Eberhard
Hi,
bin ebenfalls noch frisch bei FHEM und noch frischer bei FTUI angekommen ^^ ... hab bisher viel lernen können und will natürlich auch selbst unterstützen ... evtl. könnte Folgendes helfen:
Ich habe ebenfalls kürzlich Sonos Boxen erworben und diese nach folgendem Beispiel von jual in's FTUI integriert:
Dummy duSonosPlaylists für die Playlists in FHEM erstellt (ich hab das mit den Favoriten umgesetzt ... da sind auch die Radiosender mit dabei).
define duSonosPlaylists dummy
Ein notify, damit nach der Auswahl einer Playlist der Player direkt gestartet wird:
define notSonosPLaylist notify duSonosPlaylists {SonosPlaylistStarten($EVENT)}
Eine Funktion für das Auslesen und Aufbereiten der Daten aus dem Sonos System:
#aktuelle Playlist ermitteln und im Dummy als Liste speichern
sub MeinePlayList()
{
#Buero ist am Rooter und immer an, daher Playlist hier ermitteln
fhem("get Sonos_Buero Playlists; sleep 2;");
my $Playlist = ReadingsVal("Sonos_Buero", "LastActionResult", "Keine");
my @Playlists = split('GetPlaylists: ', $Playlist);
#zusätzllich noch unseren einzigen Radiosender dazu packen
my $playlistneu = '"SWR3 Elchradio",'.$Playlists[1];
#playlist für TABUI select aufbereiten
$playlistneu =~ s/,/:/g;
fhem("setreading duSonosPlaylists Playlist ".$playlistneu);
}
Eine für das Starten nach der Auswahl im Select:
sub SonosPlaylistStarten($)
{
my ($Playlist) = @_;
my @player = split(' ',$Playlist);
my @Liste = split($player[0]." ", $Playlist);
#List für Sonos aufbereiten und Leerzeichen maskieren
$Liste[1] =~ s/ /%20/g;
if($Playlist =~ /SWR3/)
{
fhem("set $player[0] StartRadio $Liste[1]");
}
else
{
fhem("set $player[0] StartPlaylist $Liste[1]");
}
}
Und der HTML-Code:
<li data-row="3" data-col="7" data-sizex="4" data-sizey="2">
<header>Sonos Bad</header>
<div class="container left wider" style="max-width:16em;">
<div data-type="image" data-device="Sonos_Bad" data-get="currentAlbumArtURL" data-size="40%"></div>
<div data-type="label" data-device="Sonos_Bad" data-get="infoSummarize2"></div>
<div data-type="select" data-device="duSonosPlaylists" data-list="Playlist" data-set="Sonos_Bad" "class="wider"></div>
</div>
<div class="container inline wider">
<div class="left">
<div data-type="push" data-device="Sonos_Bad" data-set="PLAY" data-icon="fa-play" class="cell bigger"></div><p></p>
<div data-type="push" data-device="Sonos_Bad" data-set="PAUSE" data-icon="fa-pause" class="cell bigger"></div><p></p>
</div>
<div class="right">
<div data-type="volume" data-device="Sonos_Bad" data-get="Volume" data-set="Volume" data-min="0" data-max="30" class=""></div>
<div data-type="label" data-device="Sonos_Bad" data-get="transportState"></div>
</div>
</div>
<div>
</li>
Quelle: https://forum.fhem.de/index.php/topic,34233.msg285942.html#msg285942 (https://forum.fhem.de/index.php/topic,34233.msg285942.html#msg285942)
Vielleicht hilft das ja weiter ..... bei mir sind übrigens auch Leerzeichen und Sonderzeichen in den Radio-Namen .... wird alles ohne Probleme an die Player übertragen!
Hallo n4rrOx,
mich hätte ehrlich gesagt DEINE Lösung mit den Favouriten und mehreren Radiosendern mehr interessiert. Sei doch so nett und poste mal DEINE Einezelheiten.
In der Zeile
$Liste[1] =~ s/ /%20/g;
werden ja gerade die Leerzeichen aus der $Liste[1] entfernt.
Kleiner Schönheitsfehler die Zeile (Klugscheisserei 8) 8) )
define duSonosPlaylists müsste sicher heißen: define duSonosPlaylists dummy
Die Funktion für das Auslesen und Aufbereiten der Favoriten-Daten aus dem Sonos-System habe ich als Userreading (UR) in den SONOSPLAYER Sonos_Kueche verlegt.
Bei der Installation wird ja bereits das UR 'Favourites' angelegt. Das sind die Favoriten aber mit Cover - das ist zu viel Overhead. Also gibt es bei mir ein zusätzlichen UR
'Favourite' (also ohne s)
ohne Cover, in dem die Favoriten in " " und mit Kommata getrennt aufgeführt sind. Hier der Code fur das UR Favourite - an sich nix neues.
attr Sonos_Kueche userReadings Favourite:LastActionResult.*?GetFavourites.* { if (ReadingsVal("Sonos_Kueche", "LastActionResult", "") =~ m/.*?: (.*)/) { return $1; } },
Und daraus wird dann mit einem weiteren UR die Liste für das Widget erzeugt, die ist dann über das Select-widget data-list direkt ansprechbar. Hier das UR FAV_FTUI für die Widget-Liste - es sind Teile von deiner geposteten Lösung enthalten, also nix umwerfend Neues.
attr Sonos_Kueche userReadings FAV_FTUI {my $k = ReadingsVal("Sonos_Kueche", "Favourite", ""); $k =~ s/","/:/g; $k =~ s/\"//g; return $k;},
Damit geht es gleich in Select-widget. Der Rest geht auch bei mir über dummy und notify.
ZitatVielleicht hilft das ja weiter ..... bei mir sind übrigens auch Leerzeichen und Sonderzeichen in den Radio-Namen .... wird alles ohne Probleme an die Player übertragen!
Wie werden die an den Player übergeben, ohne Aufbereitung? Und wie sieht das dann im select-widget aus? Das interessiert mich!
Gruß Eberhard
Hallo Eberhard,
danke für den Hinweis .... ist untergegangen ^^
Zu den Favoriten .... wie geschrieben habe ich die Lösung von jual im Einsatz, habe lediglich die $Playlist(s) mit $Favourite(s) ersetzt.
Momentan sind unter meinen Sonos-Favoriten nur Radio-Sender.
Aufbereitung für FTUI mit:
$playlistneu =~ s/,/:/g;
Siehe angehängtes Bild.
Bei der Auswahl im Select wird der state vom dummy duSonosPlaylists bzw. in meinem Fall duSonosFavourites gesetzt.
Wenn gesetzt wird, springt das notify an und startet SonosPlaylistStarten($) mit der Übergabe des states.
Beispiel:
state Sonos_Bad bigFM 89.5 (Adult Contemporary)
Die Aufbereitung für den Player wird ebenfalls in der SonosPlaylistStarten($) erledigt:
#List für Sonos aufbereiten und Leerzeichen maskieren
$Liste[1] =~ s/ /%20/g;
mit ...
fhem("set $player[0] StartFavourite $Liste[1]")
... wird der Sender gestartet (bei mir wie gesagt die Favorite).
Gruß
Mathias
Hallo Mathias,
ich sehe Du aktualisierst die Favouriten noch manuell. Ich habe das ins notify verlagert. Hier mein notify:
define sonosSendFavorite notify SonosSelectSensor {fhem "set Sonos_Kueche StartFavourite ".ReadingsVal("SonosSelectSensor","FAV_SEND"," ")};;{fhem "get Sonos_Kueche Favourites"}
Der erste Teil stellt den Ffavouriten ein und anschließend werden die Favouriten aktualisiert.
Gruß Eberhard
Hallo setstate,
ich möchte nicht aufdringlich sein, aber kannst Du Dich an dieses Thema des select-widgets erinnern? :
Zitat von: FHEm2005 am 11 Mai 2016, 13:28:37
Frage: Wie kann ich diese dynamische Liste von FAV_FTUI für data-alias zur Verfügung stellen? Würde es nicht Sinn machen data-alias so zu erweitern, dass man/frau wie bei data-list ein userReading ansprechen/anzeigen lassen kann? Dann könnte die Bearbeitung mit URI usw. bereits in einem userReading geschehen. Das hätte m.E. einen gewissen Charme.
Da die EVAL-Version weitgehend abgeschlossen scheint, könntest Du die data-alias Eigenschaften noch so ändern wie im Zitat beschrieben ? Das würde vielen Sonos-Besitzern das Leben erleichtern. :D
Viele Grüße Eberhard
Ist jetzt getan (in der Eval version):
data-alias kan jetzt auch auf eine Reading im Format DEVICE:READING oder READING zeigen, um sich von dort die Liste zu holen.
Viel Spaß damit 8)
Ein sonniges WE
setstate
Klasse!!! Tausend Dank!
Wenn ich jetzt ein Update mache, habe ich das LM eingespielt?
LM ???
Entweder das Update (siehe erste Zeile meiner Signatur)
Oder du suchst dir das widget_select.js in der Raw Version bei github Branch eval
Nachtrag:
Ich kann das File auch separat hier unten anhängen??
Ich habe es geschafft, ich hatte ein Problem mit den vergebenen Rechten.
Grundsätzlich funktioniert es tadellos. Wird die Liste aus eingelesenen Readingswerten in data-alias gößer als 9, werden die Werte aus data-list eingespielt. Magst Du das nochmal überprüfen? Ich hab' mich hier halb bekloppt gesucht :D :D.
Viele Grüße
Eberhard
Nach einer Wartezeit von 3,5 Stunden ist der Fehler verschwunden. Warum immer bei mir so etwas? Somit ist alles ok.
Gruß Eberhard
@setsate
LM = Leistungsmerkmal 8) 8) Bei Abkürzungen sollte die erste Verwendung ausgeschrieben werden und in Klammern die Abkürzung dahinter. Also hätte ich schreiben müssen/sollen Leistzungsmerkmal (LM).
Doof von mir. >:( >:( >:(
Gruß Eberhard