Ich versuche gerade in einem Dashboard eine Sonos Steuerung zu integrieren. Hierbei möchte ich gerne die vorhandenen Playlisten über ein Dropdwon Menü auswählbar machen und nach der Auswahl starten.
Mein Lösungsansatz hierzu wäre es, zunächst ein Dummy zu definieren, in dem ich die Playliste ablege und diesen Dummy dann in einer readingsGroup einzubinden.
Also in etwa wie:
set PlaylistDummy dummy
attr setList {fhem "get Sonos_Wohnzimmer getPlaylists"}
Bisher habe ich leider keine Lösung gefunden und frage mich nun, ob ich ein Attribut überhaupt mit einer Perl Funktion befüllen kann. Falls das nicht geht, hat vielleicht jemand andere Lösungsansätze?
Hallo,
klar geht das.
Aber das was Du da geschrieben hast, ist nicht korrekt:
set PlaylistDummy dummy
attr setList {fhem "get Sonos_Wohnzimmer getPlaylists"}
define Playlist dummy
attr Playlist setList ....
Und das kann Du dann auch in eine Subroutine in perl einbauen:
sub GetPlayList()
{
my $liste = ... # woher die immer auch kommt
fhem("attr Playliste setList $liste");
}
Gruß
Elektrolurch
Danke für die Antwort, werde ich dann nochmal testen. Bei meinen bisherigen Versuchen direkt im Frontend bei der Definition des Dummy hat es irgendwie nicht geklappt. Entweder bekam ich eine Fehlermeldung (meist irgendwas wie eine Klammer vergessen) oder in setlist tauchte der komplette Text inklusive geschweifter Klammern auf. Eine funktion wurde in diesen Fällen also gar nicht aufgerufen.
Hallo zusammen,
ich möchte dieses Thema nochmal aufgreifen, da ich es selbst gerade anwenden möchte aber es nicht funktionieren will.
Ich habe ein Dummy-Device und möchte dem Attribut setList die Werte mit einer PERL-Funktion zuweisen (wie es hier im Thread bereits beschrieben wurde).
define dummy_test dummy
attr dummy_test readingList name
attr dummy_test room Testkrams
attr dummy_test setList name:{get_setlist_values()}
attr dummy_test webCmd name
Die Funktion get_setlist_values holt eine Komma getrennte Liste von einem Server und die Werte sollen dann in dem DropDown des Dummy auswählbar sein.
sub get_setlist_values()
{
return GetFileFromURL("http://192.168.113.3/get_setlist_values.php");
}
Wenn ich diese Funktion manuell mit {get_setlist_values()} in der Kommandozeile ausführe erhalte die Zeichenkette "Wert_1,Wert_2,Wert_3". Aber im Dummy wird im DropDown immer nur eine Zeile mit der Auswahl "{get_setlist_values()}" angezeigt. Wenn ich die Rückgabe der Funktion manuell im setList-Attribut hinterlege wird mir das DropDown wie gewünscht befüllt.
Muss ich noch irgendetwas aktivieren, damit das funktioniert oder ist es am Ende doch nicht möglich setList auf diesem Wege zu befüllen.
Viele Grüße
Mark
Wenn ich das richtig verstehe ist ein dynamisches setzen eben nicht möglich, sprich die Funktion zu setzen als Parameter.
Daher wie im Beispiel von Elektrolurch setzen. Wenn sich die Liste regelmässig ändert könnte man das mit einem *at lösen und periodisch die Methode aufrufen zum befüllen versch. Listen.
Zitat von: error500 am 19 März 2018, 09:13:56
Hallo zusammen,
ich möchte dieses Thema nochmal aufgreifen, da ich es selbst gerade anwenden möchte aber es nicht funktionieren will.
Ich habe ein Dummy-Device und möchte dem Attribut setList die Werte mit einer PERL-Funktion zuweisen (wie es hier im Thread bereits beschrieben wurde).
define dummy_test dummy
attr dummy_test readingList name
attr dummy_test room Testkrams
attr dummy_test setList name:{get_setlist_values()}
attr dummy_test webCmd name
Die Funktion get_setlist_values holt eine Komma getrennte Liste von einem Server und die Werte sollen dann in dem DropDown des Dummy auswählbar sein.
sub get_setlist_values()
{
return GetFileFromURL("http://192.168.113.3/get_setlist_values.php");
}
Wenn ich diese Funktion manuell mit {get_setlist_values()} in der Kommandozeile ausführe erhalte die Zeichenkette "Wert_1,Wert_2,Wert_3". Aber im Dummy wird im DropDown immer nur eine Zeile mit der Auswahl "{get_setlist_values()}" angezeigt. Wenn ich die Rückgabe der Funktion manuell im setList-Attribut hinterlege wird mir das DropDown wie gewünscht befüllt.
Muss ich noch irgendetwas aktivieren, damit das funktioniert oder ist es am Ende doch nicht möglich setList auf diesem Wege zu befüllen.
Viele Grüße
Mark
setList Commands müssen durch ein Leerzeichen getrennt werden
Danke für die Antworten.
Allmählich sehe ich es wie arallon. Ein dynamisches setzten z.B. via PERL-Funktion scheint nicht möglich zu sein.
Wenn ich die Liste mit Leerzeichen getrennt in das Attribut setList speichere erhalte ich die Werte als Auswahl für Commands mit einem Werte-Eingabefeld dahinter. Aber das war ja nicht mein Ziel. Das "select:" am Anfang, gefolgt von einer Liste deren Werte durch ein Komma getrennt werden (und keine Leerzeichen enthalten dürfen) erzeugt bei mit das Feld so wie ich benutzen möchte.
Viele Grüße
Mark