Select Widget - selektierte wert bevor an device abgeben wird anpassen

Begonnen von Avatar, 05 Mai 2016, 09:21:40

Vorheriges Thema - Nächstes Thema

FHEm2005

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
Raspi3: FHEM, CULV3 (V1.61), EnOcean Pi 868, nanoCUL433, HUE-Bridge; Raspi4: Node-red, MQTT, Gaszähler auslesen mit ESP32-CAM, BSB-LAN

setstate

Man kann auch ein anderes Device angeben:

data-list="DeviceB:ReadingListe"

FHEm2005

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
Raspi3: FHEM, CULV3 (V1.61), EnOcean Pi 868, nanoCUL433, HUE-Bridge; Raspi4: Node-red, MQTT, Gaszähler auslesen mit ESP32-CAM, BSB-LAN

setstate

Werde ich mir ansehen und optimieren. Ich habe nuf gerade wenig Zeit dafür.

FHEm2005

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
Raspi3: FHEM, CULV3 (V1.61), EnOcean Pi 868, nanoCUL433, HUE-Bridge; Raspi4: Node-red, MQTT, Gaszähler auslesen mit ESP32-CAM, BSB-LAN

n4rrOx

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

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!

FHEm2005

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
Raspi3: FHEM, CULV3 (V1.61), EnOcean Pi 868, nanoCUL433, HUE-Bridge; Raspi4: Node-red, MQTT, Gaszähler auslesen mit ESP32-CAM, BSB-LAN

n4rrOx

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

FHEm2005

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
Raspi3: FHEM, CULV3 (V1.61), EnOcean Pi 868, nanoCUL433, HUE-Bridge; Raspi4: Node-red, MQTT, Gaszähler auslesen mit ESP32-CAM, BSB-LAN

FHEm2005

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
Raspi3: FHEM, CULV3 (V1.61), EnOcean Pi 868, nanoCUL433, HUE-Bridge; Raspi4: Node-red, MQTT, Gaszähler auslesen mit ESP32-CAM, BSB-LAN

setstate

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

FHEm2005

Klasse!!! Tausend Dank!
Wenn ich  jetzt ein Update mache, habe ich das LM eingespielt?
Raspi3: FHEM, CULV3 (V1.61), EnOcean Pi 868, nanoCUL433, HUE-Bridge; Raspi4: Node-red, MQTT, Gaszähler auslesen mit ESP32-CAM, BSB-LAN

setstate

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??

FHEm2005

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
Raspi3: FHEM, CULV3 (V1.61), EnOcean Pi 868, nanoCUL433, HUE-Bridge; Raspi4: Node-red, MQTT, Gaszähler auslesen mit ESP32-CAM, BSB-LAN

FHEm2005

Nach einer Wartezeit von 3,5 Stunden ist der Fehler verschwunden. Warum immer bei mir so etwas? Somit ist alles ok.

Gruß Eberhard
Raspi3: FHEM, CULV3 (V1.61), EnOcean Pi 868, nanoCUL433, HUE-Bridge; Raspi4: Node-red, MQTT, Gaszähler auslesen mit ESP32-CAM, BSB-LAN