uiTable-Elemente zur Darstellung des state

Begonnen von gestein, 23 Februar 2022, 16:59:11

Vorheriges Thema - Nächstes Thema

gestein

Hallo,

ich habe schon seit einiger Zeit ein Device, dass mir die Größe meiner fhem-Installation (samt Backup und logs) anzeigt.
Nun habe ich gelesen, dass man die uiTable-Elemente zur Darstellung des state verwenden kann.

Flugs mal ein "cylinder_bars" eingefügt. Klappt super und schaut gut aus - etwas groß, aber das ist wahrscheinlich eine Sache der Einstellungen.
Dann wollte ich noch die Farbe des Textes je nach Wert verändern, so wie hier https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Farbskalierte_Feuchtigkeitsanzeige_mit_Hilfe_der_Funktion_hum
Also noch ein "" eingefügt.

Aber das klappt leider nicht. Angezeigt wird "font-weight:bold;color:#5CE6CA".

Was mache ich falsch? Muss ich die html-Codes selbst dazufügen?
Ist das so beabsichtigt?

Danke, lg, Gerhard


defmod TE.FolderSize CustomReadings
attr TE.FolderSize alias FHEM Folder Size
attr TE.FolderSize comment https://mayach.de/fhem-ordnergroesse/
attr TE.FolderSize event-min-interval .*:3600
attr TE.FolderSize event-on-change-reading .*
attr TE.FolderSize icon it_remote_folder
attr TE.FolderSize interval 600
attr TE.FolderSize readingDefinitions fhem_used:qx(df -t ext4 | grep -e root | cut -d ' ' -f14 | cut -d '%' -f1 2>&1),kernel:qx(uname -r 2>&1),fhem_folder_size:qx(du -mc /opt/fhem | grep -e total -e insgesamt| cut -d 't' -f1 2>&1| cut -d 'i' -f1 2>&1),fhem_log_folder_size:qx(du -mc /opt/fhem/log | grep -e total -e insgesamt| cut -d 't' -f1 2>&1| cut -d 'i' -f1 2>&1),fhem_backup_folder_size:qx(du -mc /opt/fhem/backup | grep -e total -e insgesamt| cut -d 't' -f1 2>&1| cut -d 'i' -f1 2>&1)
attr TE.FolderSize room Zentrale,backup
attr TE.FolderSize stateFormat {ui_Table::hum(ReadingsVal("$name","fhem_used",0)).\
ui_Table::cylinder_bars("",0,50,"GB",undef,undef,undef,1,ReadingsVal("$name","fhem_backup_folder_size","0")/1000,30,"fhem_backup_folder",ReadingsVal("$name","fhem_folder_size","0")/1000,220,"fhem_folder",ReadingsVal("$name","fhem_log_folder_size","0")/1000,180,"fhem_log_folder")}

Damian

#1
Die Farbe des Textes entspricht der Farbe des Balkens.

Sie muss an den markierten Stellen angegeben werden:

Zitatui_Table::cylinder_bars("",0,50,"GB",undef,undef,undef,1,ReadingsVal("$name","fhem_backup_folder_size","0")/1000,30,"fhem_backup_folder",ReadingsVal("$name","fhem_folder_size","0")/1000,220,"fhem_folder",ReadingsVal("$name","fhem_log_folder_size","0")/1000,180,"fhem_log_folder")}
statt der 30 kannst du z. B. eine Funktion angeben, die dir zum Readingwert einen Farbwert (also eine Zahl) zwischen 0 und 360 liefert.

Für Feuchte habe ich z. B. intern eine Funktion hum_hue definiert, der Aufruf sieht dann so aus.

hum_hue(ReadingsVal("$name","fhem_backup_folder_size","0")/1000)

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

gestein

Hallo Damian,

Danke. Das versuche ich auch mal.

Ich dachte aber, dass der Aufruf von ,,ui_Table::hum(ReadingsVal("$name","fhem_used",0))" schon den vollen html-Code für die farbige Darstellung wie in Deinem Beispiel bringt.
Wenn ich das richtig verstehe, dann bringt ui_Table::hum aber nur einen css-Style für die Farbe. Richtig?

Das Einbinden als html-Code wäre dann wie folgt:
{"<text style=\"".ui_Table::hum(ReadingsVal("$name","fhem_used",0))."\">".ReadingsVal("$name","fhem_used",0)."% ".
ui_Table::cylinder_bars("",0,50,"GB",undef,undef,undef,1,ReadingsVal("$name","fhem_backup_folder_size","0")/1000,30,"fhem_backup_folder",ReadingsVal("$name","fhem_folder_size","0")/1000 ,220,"fhem_folder",ReadingsVal("$name","fhem_log_folder_size","0")/1000,180,"fhem_log_folder")}


Zumindest zeigt es den Text in der/einer Farbe an.

Dann probiere ich mal ein paar Funktionen von Dir durch.
Macht echt Spaß.
Und wahrscheinlich kann man das auch nur mit einem DOIF lösen - ohne CustomReadings.

Lg, Gerhard

Damian

Es hängt davon ab, welchen Text du einfärben willst. Ich ging von der Beschreibung der Balken aus und deren Farbe wird einfach durch Zahlen definiert (siehe color-Parameter). Bei der Überschrift (Header) ist keine Einfärbungsoption explizit programmiert.

Cylinder ist als SVG-Element programmiert.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

gestein

Hallo,

Danke, das funktioniert nun soweit.

Ich habe nun ein anderes Widget versucht, da das besser zur Darstellung passt: cylinder

https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#3d-Balkendarstellung_mehrerer_Zahlenwerten_mit_Hilfe_der_universellen_SVG-Funktion_cylinder
Das Beispiel aus dem Wiki ist schnell angepasst, aber leider wird im Diagramm nur ein Wert graphisch dargestellt - obwohl ich zwei angebe.
defmod TE.FolderSize CustomReadings
attr TE.FolderSize alias FHEM Folder Size
attr TE.FolderSize comment https://mayach.de/fhem-ordnergroesse/\
https://forum.fhem.de/index.php/topic,126404.msg1210151.html#msg1210151\
ring(ReadingsVal("$name","fhem_used",0),0,100,30,90,"%","100,1",undef,)\
ui_Table::cylinder_bars("",0,50,"GB",undef,undef,undef,1,ReadingsVal("$name","fhem_backup_folder_size","0")/1000,30,"fhem_backup_folder",ReadingsVal("$name","fhem_folder_size","0")/1000 ,220,"fhem_folder",ReadingsVal("$name","fhem_log_folder_size","0")/1000,180,"fhem_log_folder")\

attr TE.FolderSize event-min-interval .*:3600
attr TE.FolderSize event-on-change-reading .*
attr TE.FolderSize icon it_remote_folder
attr TE.FolderSize interval 600
attr TE.FolderSize readingDefinitions total_free:qx(df -t ext4 | grep -e root | cut -d ' ' -f11 | cut -d '%' -f1 2>&1),total_size:qx(df -t ext4 | grep -e root | cut -d ' ' -f8 | cut -d '%' -f1 2>&1),total_used:qx(df -t ext4 | grep -e root | cut -d ' ' -f9 | cut -d '%' -f1 2>&1),fhem_used:qx(df -t ext4 | grep -e root | cut -d ' ' -f14 | cut -d '%' -f1 2>&1),kernel:qx(uname -r 2>&1),fhem_folder_size:qx(du -mc /opt/fhem | grep -e total -e insgesamt| cut -d 't' -f1 2>&1| cut -d 'i' -f1 2>&1),fhem_log_folder_size:qx(du -mc /opt/fhem/log | grep -e total -e insgesamt| cut -d 't' -f1 2>&1| cut -d 'i' -f1 2>&1),fhem_backup_folder_size:qx(du -mc /opt/fhem/backup | grep -e total -e insgesamt| cut -d 't' -f1 2>&1| cut -d 'i' -f1 2>&1)
attr TE.FolderSize room Zentrale,backup
attr TE.FolderSize stateFormat {"<text style=\"".ui_Table::hum(100-ReadingsVal("$name","fhem_used",0))."\">".ReadingsVal("$name","fhem_used",0)."% belegt ".\
ui_Table::cylinder("",0,ReadingsVal("$name","total_size","0")/1000000,"GByte",undef,undef,undef,1,ReadingsVal("$name","fhem_backup_folder_size","0")/1000,"30.100.70","backup_folder",ReadingsVal("$name","fhem_log_folder_size","0")/1000,"60.100.70","log_folder")}


Wenn ich nur einen Wert angebe, dann wird der Balken richtig gezeichnet.
Wenn ich aber zwei (egal in welcher Reihenfolge) angebe, dann wird nur der zweite richtig dargestellt.
Die Zahlenwerte erscheinen richtig, nur im Diagramm wird nichts gezeichnet.

Könnte das bitte wer ausprobieren?
Ich finde den Fehler einfach nicht.

Danke im Voraus
lg, Gerhard

gestein

Hallo Damian,

Hast Du Dir da vielleicht mal was anschauen können?
Bediene ich das falsch?

Lg, Gerhard

Damian

Du musst die Reihenfolge der Readings und der passenden Farben geschickt wählen, weil sich die Zylinder überlappen.

mit

{package ui_Table}
cylinder("",0,33,"GByte",undef,undef,undef,1,22,"30.100.70","backup_folder",11,"60.100.70","log_folder")


sieht es wie im Anhang aus.

Die Werte 33, 22 und 11 entsprechen deinen Readingsangaben.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

gestein

Danke für die Erklärung.
D.h., die Werte werden nicht gestapelt - schade.

Wäre es vielleicht möglich das zu implementieren?

Danke im Voraus, lg, Gerhard

Damian

Ich habe zur Zeit noch andere Baustellen, daher wenig Zeit dafür.

Du kannst beide Werte zusammenaddieren, dann ist die sichtbare Differenz der eigentliche Wert.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

gestein

An das Summieren dachte ich auch.
Dann stimmen zumindest die Höhen der Säulen.
Aber die Zahlen stimmen dann halt nicht mehr.

Vielleicht hast Du ja irgendwann mal eine ruhige Minute 😉
Ist ja zum Glück nicht lebenswichtig.

Danke, Lg, Gerhard

Damian

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

gestein

Hallo Damian,

Vielen Dank für den Hinweis und natürlich für die Implementierung.
Habe upgedatet und es funktioniert.

Tolle Arbeit!
Lg, Gerhard