Hauptmenü

iconLabel Widget in uiTable

Begonnen von Reinhard.M, 12 März 2023, 18:32:33

Vorheriges Thema - Nächstes Thema

Reinhard.M


Hallo Damian,
ich kämpfe gerade mit der widget Funktion in uiTable. Hier mal die beiden Dummy Devices mit denen ich teste, zunächst das Rollo Device:
defmod myDumJaro dummy
attr myDumJaro group Test_Rollo
attr myDumJaro room Test
attr myDumJaro setList open:noArg closed:noArg stop:noArg pct:selectnumbers,0,10,100,0,lin
attr myDumJaro sortby 90
attr myDumJaro stateFormat pct
attr myDumJaro webCmd pct:open:stop:closed

Und hier das DOIF mit dem ich es steuern will:
defmod ui_DumRAU DOIF {}
attr ui_DumRAU room Teste
attr ui_DumRAU uiTable ## FHEM-Widgets mit Hilfe der WID-Funktion\
{\
  package ui_Table;;\
  $TABLE = "width:400px;;";;\
  $TC{1..3}="align='center'";;\
}\
"Rollos"\
\
"myDumJaro" |\
widget([myDumJaro:state],'iconLabel,.* 100,fts_shutter_10,.* 50,fts_shutter_50,.* 0,fts_shutter_100',"set stop") |\
widget([myDumJaro:pct],"selectnumbers,0,10,100,0,lin","set stop") |\
shutter([myDumJaro:pct],undef,2)

Mit dem 'iconLabel' widget möchte ich eigentlich ein Stop senden wenn ich eine Fahrt unterbrechen will. Über das 'selectnumbers' widget will ich die Höhe einstellen. Das "set stop" ist bei letzterem natürlich Blödsinn, zeigt aber ganz gut mein Problem. Klicke ich auf das iconLabel Icon passiert nichts, egal was ich für '$set' eintrage. Bei der selectnumbers Auswahl wird ein "set stop <Nummer>' gesendet. Das die selektierte Nummer mitgesendet wird hatte ich zwar nicht erwartet, aber das ist ja auch nicht der eigentliche Anwendungsfall von mir.
Bei dem Reading des iconLabel kann ich übrigens das ":state" auch weglassen, macht keinen Unterschied. Meine bescheidene Frage: Habe ich etwas falsch verstanden oder läuft da etwas falsch?


Gruß Reinhard


P.S.: Irgendwie stimmt heute etwas mit der Texteingabe nicht. Insbesondere wenn man Kommentare oder Code einfügen will. Ist das bei dir auch so?

Damian

#1
Die Widgets sind nicht DOIF-spezifisch. Die widget-Funktion bildet lediglich die Schnittstelle zu FHEM-Widgets. Das Verhalten sollte identisch sein. Die Widgets sind auch nicht von mir, viele hat Ellert programmiert.

Wichtig ist allerdings der dritte Parameter der widget-Funtion (siehe Dokumentation). Damit wird setreading, set oder ein eigener set-Befehl ermöglicht. Allerdings wird wohl der Wert des Widets immer drangehängt, daher wird "set stop" wohl so nicht funktionieren. Weil ja dann set <device> stop <Wert> ausgeführt wird.


Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Reinhard.M

Na ja, die Doku habe ich tatsächlich vor und zurück gelesen, der set Befehl erklärt auch nicht mehr als du gerade eben. Und genau so habe ich es auch angewandt. Am Dummy kommt das aber nicht an. BTW, ich habe auch alle möglichen Variationen ausprobiert. Nichts funktioniert. Anscheinend nimmt iconLabel keine set Befehle an. Kannst du mir sagen in welchem Forum ich richtig bin wenn nicht bei dir?

Damian

#3
Zitat von: Reinhard.M am 12 März 2023, 19:56:26
Na ja, die Doku habe ich tatsächlich vor und zurück gelesen, der set Befehl erklärt auch nicht mehr als du gerade eben. Und genau so habe ich es auch angewandt. Am Dummy kommt das aber nicht an. BTW, ich habe auch alle möglichen Variationen ausprobiert. Nichts funktioniert. Anscheinend nimmt iconLabel keine set Befehle an. Kannst du mir sagen in welchem Forum ich richtig bin wenn nicht bei dir?

Es funktioniert bei mir, wie beschrieben.

mit

widget([bla:state],"selectnumbers,0,10,100,0,lin","set stop")

kann ich bei mir Zahlen von 0 bis 100 auswählen. Wenn ich z. B. 30 auswähle, dann wird per set bla stop 30 der Dummy bla entsprechend gesetzt. Im Status landet "stop 30"

Da der Dummy mit dem stop Befehl nichts anfangen kann, landet die Befehlsfolge "stop 30" genau im Status. Das ist der Beweis, dass es funktioniert.

mit

widget([myDumJaro:pct],"selectnumbers,0,10,100,0,lin","set stop")

wird also die Sequenz bei Auswahl von 30: set myDumJaro stop 30 gesendet, was offenbar nicht sinnvoll ist.

Mit

widget([myDumJaro:pct],"selectnumbers,0,10,100,0,lin","set")

wird

set myDumJaro pct 30

gesendet, was auch

widget([myDumJaro:pct],"selectnumbers,0,10,100,0,lin","set pct")

entsprechen würde.

mit

widget([myDumJaro:pct],"selectnumbers,0,10,100,0,lin",undef)

wird dagegen:

setreading myDumJaro pct 30

gesendet werden, was wohl nicht sinnvoll ist.

Man kann also sagen, bei typischen set Befehlen wie z. B. beim pct, die auch ein passendes Reading pct im Device haben, reicht "set" anzugeben. Es gibt Module wie z. B. mein THRESHOLD, da ist das Reading und der Befehl unterschiedlich, der Befehl lautet set <device> desired <Wert>, das Reading dagegen desired_value. Also muss man angeben [<device>:desired_value] und beim dritten Parameter "set desired".

Es ist etwas verwirrend, aber weil es setreading- und set-Befehle in FHEM gibt und sich die Readingnamen von den Befehlen unterscheiden können, so muss man dieser Tatsache irgendwie Rechnung tragen und es entsprechend abbilden.

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Reinhard.M

Sorry, mein Fehler. Ich habe mich missverständlich ausgedrückt.
Das es mit dem Widget "selectnumbers" grundsätzlich funktioniert wie erwartet dachte ich gesagt zu haben. Da habe ich alles gesehen was du gerade beschriebenen hast.
Womit es nicht funktioniert ist das Widget "iconLabel". Wenn ich das verwende wird der "set" Befehl nicht ausgeführt. Wie du ganz richtig sagtest erscheint ja alles was kein Reading im Dummy darstellt im "state" des Dummy. Da ist bei "iconLabel" aber nichts angekommen. Also muss wohl der Inhalt von $set irgendwo verloren gegangen sein.

Damian

Irgendwie finde ich keine Doku zu den Widgets.

iconLabel ist ja nur zum Anzeigen von Icons anhand von Reading-Werten gedacht, da braucht man auch keinen Befehl, weil kein Befehl gesendet wird.

Bei mir funktioniert:

widget([bla:state],'iconLabel,10,fts_shutter_10,50,fts_shutter_50,100,fts_shutter_100')

getestet mit mit: set bla 10, set bla 50, set bla 100

Die Zahlen sind soweit ich mich erinnere die Obergrenzen zum passenden Icon.

Zum Schalten gibt es dagegen das Widget: iconSwitch
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Reinhard.M

"Set bla" funktioniert, ganz richtig. Nur halt nicht wenn man auf das Icon klick. Wie du ja erwähnst wohl deswegen, weil es in erster Linie Readings darstellen und nicht verändern soll. Ich werde wohl einen Switch hinzufügen müssen und diesen irgendwie als Button konfigurieren da ich nicht umschalten will sondern mit jedem Tastendruck das gleiche Signal "Stop". Trotzdem vielen Dank für deine Unterstützung  :)

Damian

#7
Zitat von: Reinhard.M am 12 März 2023, 22:56:00
"Set bla" funktioniert, ganz richtig. Nur halt nicht wenn man auf das Icon klick. Wie du ja erwähnst wohl deswegen, weil es in erster Linie Readings darstellen und nicht verändern soll. Ich werde wohl einen Switch hinzufügen müssen und diesen irgendwie als Button konfigurieren da ich nicht umschalten will sondern mit jedem Tastendruck das gleiche Signal "Stop". Trotzdem vielen Dank für deine Unterstützung  :)

siehe dazu auch: https://forum.fhem.de/index.php/topic,80835.msg728900.html#msg728900

und hier der Initialbeitrag: https://forum.fhem.de/index.php/topic,75696.msg675136.html#msg675136

und hier zum Problem mit iconSwitch und Ersatz iconRadio: https://forum.fhem.de/index.php/topic,124826.msg1193989.html#msg1193989
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF