FHEM Forum

FHEM => Frontends => TabletUI => Thema gestartet von: Tobias am 20 September 2016, 10:05:00

Titel: Funktion im Set-Command anwenden möglich?
Beitrag von: Tobias am 20 September 2016, 10:05:00
Hi,
ich habe eine Select Widget mit mehreren Radiostationen in der auswahl. Nun soll bei Auswahl eines Items aber der String uri_encoded werden damit auch Leerzeichen sauber rüberkommen. Zumindest erwartet das Zieldevice einen uri_encode String

Bsp:
          <div data-type="select"
            data-device="sonos_Wohnzimmer"
            data-list="Radios"
            data-set="StartRadio"
            class="">
          </div>


Wenn ich jetzt den Eintrag "Bayern 3" auswähle, soll das FHEM Kommando "Set <device> StartRadio Bayern%203" abgesetzt werden.
Wie kann ich das realisieren ist eine entsprechende Erweiterung, bestenfalls irgendeine benutzerdefinierte Funktion global für alle Widgets möglich?

Bsp: data-value="fkt:MeineFunktion($v)" oder data-value="fkt:MeineFunktion(Device:Reading, Device:Reading)"
In einem User-JS wird dann MeineFunktion definiert, der Rückgabewert als String wird dann im Kommando eingesetzt

Damit könnte ich dann zb. auch im Slider welcher nur Prozentwerte anzeigt, den Prozenzwert in eine echte sekunden/minutenangabe umrechnen - exakt der string den das Zieldevice erwartet. Das würde ungeahnte Möglichkeiten im User-JS Customizing eröffnen
Titel: Antw:Funktion im Set-Command anwenden möglich?
Beitrag von: setstate am 20 September 2016, 10:25:54
Was passiert, wenn du beim select-Widget data-quote='"' benutzt?
Titel: Antw:Funktion im Set-Command anwenden möglich?
Beitrag von: Tobias am 20 September 2016, 11:06:23
funktioniert leider nicht, hab ich schon gecheckt.
Titel: Antw:Funktion im Set-Command anwenden möglich?
Beitrag von: Tobias am 20 September 2016, 14:25:16
Als Workarround habe ich es folgendermaßen gemacht:
          <div data-type="select"
            data-device="sonos_Wohnzimmer"
            data-list="RadioList"
            data-alias="RadioAlias"
            data-set="StartRadio"
            data-get="currentSender"
            class="">
          </div>


Und die zugehörigen Userreadings:
RadioList:LastActionResult.*?GetRadios.* { if (ReadingsVal("sonos_Wohnzimmer", "LastActionResult", "") =~ m/.*?: \"(.*)\"/) { my $ret=$1; $ret =~ s/\"\,\"/\:/g; $ret =~ s/\ /\%20/g; return $ret; } },
RadioAlias:LastActionResult.*?GetRadios.* { if (ReadingsVal("sonos_Wohnzimmer", "LastActionResult", "") =~ m/.*?: \"(.*)\"/) { my $ret=$1; $ret =~ s/\,/\:/g; $ret=~s/\"//g; return $ret; } },


Allerdings funktioniert damit data-get nicht korrekt. Der gewählte Sender im Reading "currentSender" heißt zb. "Bayern 3", warscheinlich wird aber auf data-list anstatt data-alias gematcht, denn würde "Bayern%203"  in "currentSender" stehen, wird der aktuelle Sender auch im SelectWidget augewählt

Nichts-destro-trotz: eine generelle Featureerweiterung ala: data-value="fkt:MeineFunktion($v)" oder data-value="fkt:MeineFunktion(Device:Reading, Device:Reading)"  favorisiere ich weiter. Wäre schön wenn soetwas oder ähnlich mal einfließen würde