Textfelder und Klapmenüs

Begonnen von Elektrolurch, 06 August 2013, 15:22:17

Vorheriges Thema - Nächstes Thema

Elektrolurch

Hallo,
nachdem ich erst vor einigen wenigen Wochen angefangen habe, ist jetzt doch schon eine Menge perl-Code zusammengekommen - und es funktioniert auch alles. Nun gehts nach dem ersten Bauabschnitt zur Verschönerung. Einen slider fürs Dimmen habe ich schon gefunden, bzw. den nutze ich auch fürs Einstellen der Zeit eines Treppenhauslichtautomaten. Aber was ich partout nicht finden kann, sind Klappmenüs für einzelne Objekte und/oder Textfelder  fürs Setzen von Werten. Ich denke, dass es so etwas geben muss... aber wo sind die in der Commandref beschrieben?

Elektrolurch
configDB und Windows befreite Zone!

UliM

Hi,
schau mal nach setList.
Gruß, Uli
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

Tobias

zeig mal den Slider (und den downloadlink) ;)
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

Elektrolurch

@Tobias: hier der Code
attr Mz_Deckenfluter eventMap /on:ein/off:aus/
attr Mz_Deckenfluter group Beleuchtung
attr Mz_Deckenfluter model fs20di
attr Mz_Deckenfluter room MarinasZimmer
attr Mz_Deckenfluter setList dim:slider,0,6.25,100
attr Mz_Deckenfluter webCmd ein:dim:aus

# die zwei letzten Zeilen hätte ich ganz gerne einmal softwaretechn. von jemanden ordentlich erklärt bekommen. Sie funktionieren, aber ich verstehe nicht warum. Da hilft auch keine CommandRef.

@Uli:
Also, in der akt. CommandRef kommt setList genau zweimal vor:

Zitat:
The first specified command is looked up in the "set device ?" list (see the setList attribute for dummy devices). If there it contains some known modifiers (colon, followed by a comma separated list), then a different widget will be displayed:
▪if the modifier is ":time", then a javascript driven timepicker is displayed.
▪if the modifier is of the form ":slider,<min>,<step>,<max>", then a javascript driven slider is displayed
▪else a dropdown with all the modifier values is displayed
If the command is state, then the value will be used as a command.
Examples for the modifier:
define d1 dummy
attr d1 webCmd state
attr d1 setList state:on,off
define d2 dummy
attr d2 webCmd state
attr d2 setList state:slider,0,1,10
define d3 dummy
attr d3 webCmd state
attr d3 setList state:time
Note: this is an attribute for the displayed device, not for the FHEMWEB instance.



Der Hinweis auf das drop-down Menü ist etwas versteckt. Auch muss man wohl erst einmal wissen, dass wohl in jedem device auch ein dummy steckt oder verstehe ich dann den Hinweis nicht richtig?
Das steht leider auch nirgendswo richtig erklärt.

Und wie bekommt man ein Textfeld für eine freie Eingabe?

Elektrolurch


configDB und Windows befreite Zone!

justme1968

Zitatattr Mz_Deckenfluter setList dim:slider,0,6.25,100
damit sagst du das das kommando dim mit einem slider dargestellt wird der werte von 0 bis 100 in stufen von 6.25 annehmen kann.

Zitatattr Mz_Deckenfluter webCmd ein:dim:aus
damit sagst du das in der raum übersicht für das device die kommandos ein, dim und aus dargestellt werden sollen und dim wie oben definiert dargestellt werden soll.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Elektrolurch

Hallo,
das ist mir schon klar. Aber die Übersetzung auf Programmebene verstehe ich nicht.
dim
+ Java Script für den Slider müssen ja auf den Wert zusammen zu: " "dim 65" (z.B.) zusammengeführt werden, damit dann in webCmd die Sequenz off:dim:on zu der Sequenz off:dim 65:on ersetzt wird. Das ist leider nirgends wo richtig erklärt. Steckt da eine $_, die in der CommandRef nicht dokumentiert ist?
Ich möchte eigentlich folgendes machen: <off> <slider für dimmer> <on> <schlummer> <klappmenü für Zeit für den ramp-down>
Um so etwas zu realisieren, möchte ich gerne die Mechanismen dahinter verstehen.
Wäre das z.B. so: setList schlummer rampdown 00:05:00,rampdown 00:10:00,rampdown 00:20:00
 -> das müsste ja ein Klappmenü ergeben, da mit Komma getrennt.

und dannn:
webCmd off:dim:on:schlummer

?
Dann sollte ja bei Schlummer ein Klappmenü erscheinen. Mit den Zeiten ist natürlich noch etwas Useranfrendly. Da müsste im Menü so etwas stehen: "Schlummern 15 Minuten".

Elektrolurch
configDB und Windows befreite Zone!

justme1968

also dein menü bekommst du wenn du rampdown in der setList als rampdown:05,10,20 angibst und dann bei webCmd nur rampdown.

vor dem doppelpunkt steht das kommando und danach die möglichen werte mit komma getrennt.

das set wird dann aus dem kommando und dem wert zusammen gebaut.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Elektrolurch

Hallo,

leider kommt da kein Menü, sondern nur ein Link für das "Schlummern", der dann in "ramp-aus-time" übersetzt wird.
Beleuchtung
Deckenfluter
ramp-aus-time
ein
0
aus
schlummern

Da wo die 0 ist, ist der slider fürs dimmen. Das geht alles.
Code:
attr Mz_Deckenfluter alias Deckenfluter
attr Mz_Deckenfluter eventMap /on:ein/off:aus/ramp-off-time:schlummern/
attr Mz_Deckenfluter group Beleuchtung
attr Mz_Deckenfluter model fs20di
attr Mz_Deckenfluter room MarinasZimmer
attr Mz_Deckenfluter setList schlummern:05,10,20
attr Mz_Deckenfluter webCmd ein:dim:aus:schlummern


Elektrolurch

configDB und Windows befreite Zone!

justme1968

bitte nimm mal statt schlummern direkt ramp-off-time in der setList und im webCmd bzw versuch es erst mal ohne die eventMap.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Elektrolurch

Hallo Andre,
so hatte ich es natürlich auch zuerst gemacht: statt schlummern -> ramp-off-time.
Aber da gab es statt des Klappmenüs, wie es ja mit der Def. im setList und den Komma getrennten Werten hätte erscheinen müssen, nur einen Link "ramp-off-time". Wenn man den drückte, dann wurde der Status durch das eventmapping off:aus in "ramp-aus-time" übersetzt und angezeigt. Die Lampe macht da nichts, da es ja keine Zeitangabe gibt.
Daher habe ich das mapping von schlummern nach ramp-off-time definiert, wenn mann jetzt "schlummern" klickt, wird der Status mit "ramp-aus-time" angezeigt, quasi zweimal übersetzt. fhem bringt keine Fehlermeldung. Das würde es ja machen, wenn man ein unbekanntes Kommando an eine fs20 senden wollte.
Also:
1. Warum kein Klappmenü, obwohl es eine Werteliste für setList gibt?
2. Schönheitsfehler: Wie kriegt man das hin, dass der Status richtig angezeigt wird?

Elektrolurch
configDB und Windows befreite Zone!

justme1968

setList gibt es nur für dummys. du versuchts aber glaube ich gerade es für ein 'echtes' fs20 device zu verwenden.

ich fürchte das was du möchtest geht zur zeit so nicht weil du die liste der kommandos die ein device bereit stellt nicht ändern kannst. das geht nur bei einem dummy den du ja selbst unter kontrolle hast.

mir fällt jetzt nur ein einen dummy zu bauen der alles macht was du möchtest und den per notify an das echte device zu koppeln.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Elektrolurch

Hallo Jusme,

aber attr setList dim:Slider...
und attr webCmd aus:dim:ein
funktioniert doch für eine fs20.
Und das Kommando "ramp-off-time" gibt es doch auch für eine fs20.
Also, warum geht es für dim mit slider? Die erste Frage war ja: Warum kommt mit setList ramp-off-time:05,10,20 kein Klappmenü? Das hat doch zunächst einmal nichts mit der fs20 zu tun.

Elektrolurch
configDB und Windows befreite Zone!

justme1968

dein setList geht schon schief. wenn du suchst wirst du einen fehler dafür finden.

das dim geht deshalb weil das fs20fi device dim selber schon mit einem slider definiert.

gib mal 'set Mz_Deckenfluter ?' ein diese liste ist die die du bei den webCmd verwenden kannst. nicht mehr.

bei einem dummy baust du sozusagen genau diese liste mit dem setList selber zusammen. das geht aber nur für dummys.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Elektrolurch

Hallo Andre,

Unknown argument ?, choose one of dim06% dim100% dim12% dim18% dim25% dim31% dim37% dim43% dim50% dim56% dim62% dim68% dim75% dim81% dim87% dim93% dimdown dimup dimupdown off off-for-timer on on-100-for-timer-prev on-for-timer on-old-for-timer on-old-for-timer-prev on-till ramp-off-time ramp-on-time reset sendstate timer toggle dim:slider,0,6.25,100 blink intervals off-till

Da gibt's doch ramp-off-time. Warum sollte ich das nicht in einer webCmd verwenden können?
Mit setList möchte ich ja nur noch den Zeitwert dahinter hängen. Wie das mit dem "dim" und dem slider auch geht.
Ich sehe da nicht, wo da die Einschränkung liegen soll

Elektrolurch
configDB und Windows befreite Zone!

justme1968

du kannst diese liste nicht verändern! der modulautor bestimmt was es für kommandos gibt und du kannst es nicht änderen.

nur bei dummys kannst du die liste selber bestimmen und das machst du mit setList. das geht aber NUR bei dummys.

das dim geht weil es der modulautor schon so vorgesehen hat. in der dritten zeile steht dim:slider,0,6.25,100.

ramp-off-time steht in der liste ohne zusätzliche parameter. du kannst keine anängen. du kannst es natürlich als teil von webCmd verwenden. aber nicht so wie du es möchtest als menü sondern nur z.b. so: attr <device> eventMap /ramp-off-time 05:aus-05/ramp-off-time 10:aus-10/ramp-off-time 20:aus-20
attr <device> webCmd aus-05:aus-10:aus-20
also nicht als menü sondern nur als direkten link.

das menü geht nur wenn es der modulautor so vorgesehen hat. oder beim dummy. da bist du sozusagen selber autor.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968