Hilfe zu Anwendung di_uiTable_hsv

Begonnen von Der Neuling, 16 Oktober 2022, 17:36:31

Vorheriges Thema - Nächstes Thema

Der Neuling

Hallo Gemeind,
Ich würde gerne die Batterieanzeige aus der Wiki https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg - bei hsv-Funktion für Farbskalierungen
im unteren Drittel anwenden. Nur mir fehlt das Verständnis dafür.
Die weiter oben angefürhrten Beispiele (di Icon Ring ...Temp/Batterie/Ladestation) konnte ich durch anpassen der Datenquellen und ausprobieren nachvollziehen und funktionieren schon lange. :D - soweit verstanden.
Es gibt bei mir schon eine readingsGroup_Batteriestatus. Diese wollte ich jetzt halt "bunt " anzeigen lassen.
Wo liegt mein Denkfehler?

Andi

DetlefR

Ohne konkretes Beispiel ist es schlecht Hilfe zu geben. Ich versuche es trotzdem mal.
Reduziere das Beispiel mal auf sub bat_icon2  und die 5. Beispielzeile

hsv ($value,$min_value,$max_value,$min_hue,$max_hue,$saturation,$lightness)
hsv ($val,0,100,0,120,90,100)

Um bei den Batterien zu bleiben, wenn in den Readings Prozentwerte drin stehen kann das Beispiel so bleiben. Die erste 0 steht für 0% die 100 danach für 100%. Für die nächsten beiden Zahlen suchst Du dir ein Beispiel für einen HSV Farbraum (Wikipedia). Wenn jetzt z.B. die Batterie auf 50% steht, dann wird ein HUE Wert von 60 genommen. Das ist dann irgendwas Gelbes.
Die letzten beiden Zahlen sind optional. Die können eigentlich entfallen oder wie im Beispiel eingetragen werden.
Wenn die Readings nun aber die eigentliche Spannung anzeigen dann muss 0,100 angepasst werden. Als Beispiel meine Heizkörperthermostate. Die geben irgendwas zwischen 2,4 und 3,5 zurück.
Da Kommas oder Punkte an der Stelle ungünstig sind, sollte zuerst $val mit 10 multipliziert werden und dann sieht die Zeile ungefähr so aus
hsv ($val,24,35,0,120,90,100)
Da wird es dann bei 3.0V Gelb.

Der Neuling

Danke für die schnelle Antwort.
In meinem Fall geht es um folgendes Beispiel:

   DEF        sensor 4  IODev=deCONZ
   FUUID      62b823db-f33f-6009-7bee-8163e471910a8471
   FVERSION   31_HUEDevice.pm:0.262040/2022-07-09
   ID         S4
   INTERVAL   
   IODev      deCONZ
   NAME       HUESensor4
   NR         55
   STATE      nomotion
   TYPE       HUEDevice
   eventCount 636
   has_events 1
   lastannounced 2022-10-16T06:13:52Z
   manufacturername IKEA of Sweden
   modelid    TRADFRI motion sensor
   name       Bewegungsmelder oben
   on         1
   reachable  1
   swversion  2.0.022
   type       ZHAPresence
   uniqueid   94:34:69:ff:fe:66:a1:b4-01-0006
   READINGS:
     2022-10-10 20:58:50   IODev           deCONZ
     2022-10-17 06:16:25   battery         87
     2022-10-17 06:16:25   batteryPercent  87
     2022-10-17 06:16:25   dark            1
     2022-10-17 06:16:25   lastseen        2022-10-17T04:15Z
     2022-10-17 06:16:25   reachable       1
     2022-10-17 06:16:25   state           nomotion
   helper:
     devtype    S
     state      nomotion
     update_timeout 1
     configList:
     json:
       ep         1
       etag       8a91d9acc3df0987bd46f8407d9e78bc
       lastannounced 2022-10-16T06:13:52Z
       lastseen   2022-10-17T04:25Z
       manufacturername IKEA of Sweden
       modelid    TRADFRI motion sensor
       name       Bewegungsmelder oben
       swversion  2.0.022
       type       ZHAPresence
       uniqueid   94:34:69:ff:fe:66:a1:b4-01-0006
       config:
         alert      none
         battery    87
         delay      180
         duration   60
         group      4
       state:
         lastupdated 2022-10-17T04:16:25.262
     setList:
Attributes:
   IODev      deCONZ
   alias      Bewegungsmelder oben
   devStateIcon nomotion:status_away_1@blue:motion motion:user_available@green:nomotion
   event-on-change-reading .*
   group      HUESensor
   icon       motion_detector
   model      TRADFRI motion sensor
   room       HUEDevice[/td]

Hier als Beispielabfrage HUESensor4:battery - ist bei den - in der Wiki - Icon-Ringen kein Problem.
Muss ich dieses hsv-Doif nun Global oder Gerätebezogen betrachten? Meine andere Batterieabfrage funktioniert ja Global.    - hat sich erledigt. wer Lesen kann ist im Vorteil ::) siehe unten in der List zu di_uiTable_hsv - ist NOTIFYDEV  global
Hier ein kurzer Auszug:

DEF        .*:battery

   FUUID      6176891c-f33f-2180-0a4f-4291519592529ae9
   NAME       rg_battery
   NR         572
   NTFY_ORDER 50-rg_battery
   STATE      Initialized
   TYPE       readingsGroup
   changed    0
   CONTENT:
.......................
fhem:
     lastDefChange 1
     last_update 1665934713.13392
   helper:
     DEF       
     valueIcon:
       battery.low measure_battery_0@red
       battery.ok measure_battery_100@green
Attributes:
   alias      Batteriestatus
   room       System
   valueIcon  {'battery.ok' => 'measure_battery_100@green', 'battery.low' => 'measure_battery_0@red'}[/td]

Der Content hab ich weggelassen. Sprengt den Rahmen :)
Und hier die List zum di-uiTable_hsv - hoffentlich richtig eingekürzt.
Internals:
   DEF        ##
   FUUID      626e4378-f33f-6009-1985-e3275a835991f195
   MODEL      FHEM
   NAME       di_uiTable_hsv
   NOTIFYDEV  global
   NR         44
   NTFY_ORDER 50-di_uiTable_hsv
   STATE      initialized
   TYPE       DOIF
   VERSION    26182 2022-06-29 18:57:26
   eventCount 4
   READINGS:
     2022-10-14 18:15:32   cmd             0
     2022-10-14 18:15:32   mode            enabled
     2022-10-14 18:15:32   state           initialized
   Regex:
     accu:
     collect:
   condition:
   do:
     0:
   helper:
     NOTIFYDEV  global
     globalinit 1
     last_timer 0
     sleeptimer -1
   uiState:
   uiTable:
     header     
<table uitabid='DOIF-di_uiTable_hsv' class=' block wide uiTabledoif doif-di_uiTable_hsv ' style='border-top:none;'>
     package    package ui_Table;
     table:
       0:
         0:
         1:
           0:
             0          package ui_Table;bat_icon2(0)
         2:
           0:
             0          package ui_Table;bat_icon2(10)
         3:
           0:
             0          package ui_Table;bat_icon2(20)
         4:
           0:
             0          package ui_Table;bat_icon2(30)
         5:
           0:
             0          package ui_Table;bat_icon2(40)
         6:
           0:
             0          package ui_Table;bat_icon2(50)
       1:
         0:
         1:
           0:
             0          package ui_Table;bat_icon2(60)
         2:
           0:
             0          package ui_Table;bat_icon2(70)
         3:
           0:
             0          package ui_Table;bat_icon2(80)
         4:
           0:
             0          package ui_Table;bat_icon2(90)
         5:
           0:
             0          package ui_Table;bat_icon2(100)
     tc:
     td:
       0:
       1:
     tr:
Attributes:
   uiTable    {
  package ui_Table;
  ## eigene uiTable-Funktionen vom Typ 1 mit einem Rückgabewert als HTML-Code
 

   
  sub bat_icon2 {## zusätzlich zum Farbwert wird ein entsprechendes Icon bestimmt
    my($val)=@_;
my $icon;
if ($val==0) {
  $icon="measure_battery_0";
} elsif ($val<=25) {
  $icon="measure_battery_25";
} elsif ($val<=50) {
  $icon="measure_battery_50";
} elsif ($val<=75) {
  $icon="measure_battery_75";
} else {
  $icon="measure_battery_100";
}

my $output=ICON("$icon\@".hsv ($val,0,100,0,120,90,100));
    return($output);
  }
}

## Beispiel 5 der Batterieanzeige

## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon2
|bat_icon2(0)|bat_icon2(10)|bat_icon2(20)|bat_icon2(30)|bat_icon2(40)|bat_icon2(50)
|bat_icon2(60)|bat_icon2(70)|bat_icon2(80)|bat_icon2(90)|bat_icon2(100)


Dieser Beitrag ist jetzt nicht Lebenswichtig. Ich will nur Wissen, wo mein Denkfehler liegt bzw. das ganze verstehen.
Vielen Dank
Andi

Damian

Du bist hier im TabletUI-Unterforum, möchtest eine Funktion aus DOIF-uiTable-Package in ReadingsGroup verwenden.

Das sind drei verschiedene Welten, die zunächst keine Gemeinsamkeiten haben.

Die hsv-Funktion befindet sich im package ui_Table und ist daher woanders nicht bekannt. Wenn du die Perl-Funktion irgendwo anders (z.B. in ReadingsGroup) in FHEM benutzen willst, dann musst du das package davor schreiben: ui_Table::hsv(...). Die Funktion hsv ruft intern die Funktion DOIF_hsv auf, diese befindet sich in main-package und hat die gleichen Parameter, daher kannst du statt der hsv(...) die DOIF_hsv(...) woanders (im main package von FHEM) direkt aufrufen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

DetlefR

ZitatMuss ich dieses hsv-Doif nun Global oder Gerätebezogen betrachten? Meine andere Batterieabfrage funktioniert ja Global.    - hat sich erledigt. wer Lesen kann ist im Vorteil ::) siehe unten in der List zu di_uiTable_hsv - ist NOTIFYDEV  global
Da ist ein wenig durcheinander gekommen. NOTIFYDEV  global hat nichts damit zu tun, dass eine Funktion global ist.

Aber jetzt bin ich mir nicht mehr sicher was du erreichen willst. :-\
Die hsv Funktion in Readingsgroup verwenden oder das Beispiel so anpassen, dass es für dich funktioniert?

Der Neuling

Danke für die Hilfe.
Werde mich besser mit dem Thema befassen, einlesen, Versuchs Pi aufbauen und ausprobieren.
Dass ich dachte die di_uiTable_hsv ist Teil der TableUI - mein denkfehler. ;)
@DetlefR
Ich wollte die Baterieanzeigen "bunter" gestalten.
@ Admin
Bitte in richtige Rubrik verschieben
Ich setze hier mal auf gelöst