Funktion im Set-Command anwenden möglich?

Begonnen von Tobias, 20 September 2016, 10:05:00

Vorheriges Thema - Nächstes Thema

Tobias

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
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

setstate

Was passiert, wenn du beim select-Widget data-quote='"' benutzt?

Tobias

funktioniert leider nicht, hab ich schon gecheckt.
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

Tobias

#3
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
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter