FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Jogi am 24 Februar 2022, 10:55:24

Titel: [gelöst] uitable: Darstellung von 3 Zuständen (wie devstateicon) möglich?
Beitrag von: Jogi am 24 Februar 2022, 10:55:24
Hallo,
ich möchte eine Visualisierung meiner VU mittels uiTable realisieren.
Diese kennt drei Zustände: on, off, absent
Ich schaffe es nicht die Icons mittels uiTable richtig darzustellen. Mit zwei Zuständen funktioniert es, aber nicht mit drei.
Das funktioniert:
"VU Alina",icon([VUZero_Alina:state],"rc_GREEN","rc_YELLOW","on","absent")|
Das nicht:
"VU Alina",icon([VUZero_Alina:state],"rc_STOP","rc_GREEN","rc_YELLOW","off","on","absent")|
Ist das generell nicht möglich oder mache ich etwas falsch?

Gruß,
Jogi
Titel: Antw:uitable: Darstellung von 3 Zuständen (wie devstateicon) möglich?
Beitrag von: Sany am 24 Februar 2022, 11:42:53
Moin,
icon geht wohl nur für 2 Zustände, du kannst aber ICON dafür verwenden. Ich nutze das häufig in dieser Form (auf dich zugeschnitten, aber nicht getestet):
ICON(([VUZero_Alina:state] eq "on")?"rc_GREEN":([VUZero_Alina:state] eq "absent")?"rc_YELLOW":"rc_STOP")

geht auch mit Angabe einer Farbe für das Icon: "<iconname>\@<color>" (also mit Backslash)

Viel Erfolg!


Sany
Titel: Antw:uitable: Darstellung von 3 Zuständen (wie devstateicon) möglich?
Beitrag von: Jogi am 25 Februar 2022, 10:48:54
Zitat von: Sany am 24 Februar 2022, 11:42:53
(auf dich zugeschnitten, aber nicht getestet):
ICON(([VUZero_Alina:state] eq "on")?"rc_GREEN":([VUZero_Alina:state] eq "absent")?"rc_YELLOW":"rc_STOP")

Vielen Dank für den Tipp, aber wenn ich das mit drei Zuständen so umsetze
ICON(([VUZero_Alina:state] eq "on")?"rc_GREEN":([VUZero_Alina:state] eq "absent")?"rc_YELLOW":"rc_STOP":([VUZero_Alina:state] eq "absent")?"rc_YELLOW":"rc_STOP"),
w

funktioniert es nicht. Ich bekomme dann gar kein Icon angezeigt.
Titel: Antw:uitable: Darstellung von 3 Zuständen (wie devstateicon) möglich?
Beitrag von: Sany am 25 Februar 2022, 13:34:10
Zitatwenn ich das mit drei Zuständen so umsetze....
....funktioniert es nicht
weil Du es nicht  richtig umgesetzt hast. Hast Du mein Beispiel probiert? Das ist schon für die 3 Zustände.
Vielleicht erkennst Du die Scchreibweise nicht, das ist der "ternary Operator", u.a. eine Kurzversion für if..then..else. Das kann man, wie auch if, schachteln, also if..then..if..then..else.
( "if" )? true-condition : false-condition
oder hier:
( "if" )? "true-condition" : ( "if" )? "true-condition2" : "false-condition"

genaueres z.B. hier: https://perlmaven.com/the-ternary-operator-in-perl (https://perlmaven.com/the-ternary-operator-in-perl)

Bei deinen 3 Zuständen mußt Du halt wissen, welche definitiv vorkommen und darauf die "true-condition" setzten, alles andere wird dann die "false-condition". Hängt halt davon ab, was der Sensor so liefert. Du kannst ja noch eine Stufe weitergehen, den 3ten Zustand auch auf true prüfen und für den 4ten Zustand (=alles andere) dann ein rotes Fragezeichen oder so nehmen....

Viel Erfolg!


Sany
Titel: Antw:uitable: Darstellung von 3 Zuständen (wie devstateicon) möglich?
Beitrag von: Jogi am 26 Februar 2022, 13:36:04
Zitat von: Sany am 25 Februar 2022, 13:34:10
weil Du es nicht  richtig umgesetzt hast. Hast Du mein Beispiel probiert? Das ist schon für die 3 Zustände.
Hallo Sany,
das geht ganz klar auf meine Kappe. Sorry!
Du hast absolut recht, dein Beispiel funktioniert.
Und du hast mit deiner Vermutung auch recht gehabt, ich habe den Code nicht verstanden.
Ich hatte deine Zeile eingebaut und auch ausprobiert, aber nicht für alle drei Zustände.
Ich hatte gedacht, es ist nur eine Gedankenanregung und ich müsste den Rest selbst reinbauen.
Daher bin ich gar nicht darauf gekommen, dass das schon perfekt passen könnte. Tut es aber.
Von daher vielen Dank dafür und auch Danke für Deine Erklärung. Hab ich zwar immer noch nicht zu 100% verstanden, aber es funktioniert jetzt.

Ist damit erledigt.

Titel: Antw:uitable: Darstellung von 3 Zuständen (wie devstateicon) möglich?
Beitrag von: Damian am 26 Februar 2022, 15:57:40
Zitat von: Jogi am 26 Februar 2022, 13:36:04
Hab ich zwar immer noch nicht zu 100% verstanden, aber es funktioniert jetzt.

ganz einfach:

Bsp.:

$b==1 ? 2 : 3

wenn b gleich 1 dann 2 ausgeben, sonst 3

$b==1 ? 2 : $c==1 ? 3 : 4

wenn b gleich 1 dann 2 ausgeben, sonst, wenn c gleich 1 dann 3 ausgeben, sonst 4