Autor Thema: uiTable-Elemente zur Darstellung des state  (Gelesen 1104 mal)

Offline gestein

  • Hero Member
  • *****
  • Beiträge: 1207
uiTable-Elemente zur Darstellung des state
« am: 23 Februar 2022, 16:59:11 »
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")}

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 9756
Antw:uiTable-Elemente zur Darstellung des state
« Antwort #1 am: 23 Februar 2022, 19:24:09 »
Die Farbe des Textes entspricht der Farbe des Balkens.

Sie muss an den markierten Stellen angegeben werden:

Zitat
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")}
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)
« Letzte Änderung: 23 Februar 2022, 19:26:49 von Damian »
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Offline gestein

  • Hero Member
  • *****
  • Beiträge: 1207
Antw:uiTable-Elemente zur Darstellung des state
« Antwort #2 am: 23 Februar 2022, 22:27:55 »
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

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 9756
Antw:uiTable-Elemente zur Darstellung des state
« Antwort #3 am: 23 Februar 2022, 22:39:09 »
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

Offline gestein

  • Hero Member
  • *****
  • Beiträge: 1207
Antw:uiTable-Elemente zur Darstellung des state
« Antwort #4 am: 25 Februar 2022, 15:24:24 »
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

Offline gestein

  • Hero Member
  • *****
  • Beiträge: 1207
Antw:uiTable-Elemente zur Darstellung des state
« Antwort #5 am: 30 März 2022, 21:19:22 »
Hallo Damian,

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

Lg, Gerhard

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 9756
Antw:uiTable-Elemente zur Darstellung des state
« Antwort #6 am: 01 April 2022, 20:07:24 »
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

Offline gestein

  • Hero Member
  • *****
  • Beiträge: 1207
Antw:uiTable-Elemente zur Darstellung des state
« Antwort #7 am: 01 April 2022, 21:39:29 »
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

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 9756
Antw:uiTable-Elemente zur Darstellung des state
« Antwort #8 am: 01 April 2022, 22:32:40 »
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

Offline gestein

  • Hero Member
  • *****
  • Beiträge: 1207
Antw:uiTable-Elemente zur Darstellung des state
« Antwort #9 am: 02 April 2022, 09:28:57 »
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

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 9756
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Offline gestein

  • Hero Member
  • *****
  • Beiträge: 1207
Antw:uiTable-Elemente zur Darstellung des state
« Antwort #11 am: 01 Juli 2022, 13:43:24 »
Hallo Damian,

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

Tolle Arbeit!
Lg, Gerhard