Hallo Gemeind,
Ich würde gerne die Batterieanzeige aus der Wiki https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg (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
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.
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
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.
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?
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