FHEM Forum

FHEM => Sonstiges => Thema gestartet von: mabula am 23 Januar 2022, 10:51:48

Titel: Beliebige Icons dynamisch einfärben
Beitrag von: mabula am 23 Januar 2022, 10:51:48
Habe mir den AirSniffer-CO2 zusammengebaut. Die Luftqualität wird am Gerät mit einer LED, die sich von grün bis rot färbt, einfach dargestellt. Ich wollte dies auch in Fhem so darstellen. Idee war ein Icon mit variabler Farbe. Eine direkte Lösung habe ich nicht gefunden, nur verschiedene Teilstücke. Anbei Die Lösung, falls noch jemand sucht.
Habe mir ein weiteres DOIF definiert: "define AirQual DOIF ##". Die Luftqualität wird im Bereich 0 - 500 angezeigt und damit habe ich einen einfachen 8bit RGB Farbwert berechnet. Das DOIF besteht eigentlich nur aus folgenden Attributen:

attr AirQual devStateIcon {my $rgb = ReadingsVal('AirQual', 'color', '000000');; return ".*:rc_dot@#$rgb"}
attr AirQual do always
attr AirQual event_Readings Luftqualitaet:[AirSniffer:Luftqualitaet]
attr AirQual userReadings color { my $f1 = ReadingsVal("AirQual","Luftqualitaet",0)/2;; my $f2 = 255 - $f1;; uc sprintf("%02X%02X%02X", $f1,$f2,0) }

Damit wird der Icon rc_dot dynamisch eingefärbt.

Gruß H-J
Titel: Antw:Beliebige Icons dynamisch einfärben
Beitrag von: TomLee am 23 Januar 2022, 11:30:57
Hallo,

die direkte Lösung in FHEM wäre meiner Meinung nach die Funktion pahcolor (https://wiki.fhem.de/wiki/Color) zu verwenden, die rechnet für dich um und das Farbmodell bestimmt man einfach mit dem fünften Parameter (hier default 0):

defmod DemoX dummy
attr DemoX devStateIcon {\
my $pc = substr(Color::pahColor(0,250,500,ReadingsNum($name,'moisture',0),0),0,6);;\
FW_makeImage('rc_dot@#'.$pc)}
attr DemoX readingList moisture
attr DemoX room Test
attr DemoX setList moisture:slider,0,1,500
attr DemoX webCmd moisture

setstate DemoX 2022-01-23 11:18:41 moisture 500


Da du DOIF verwendest, ganz unten im Wiki ist die Verwendung damit verlinkt.

Gruß

Thomas


edit:

so gehts natürlich auch, hab ich nicht einmal dran gedacht:
{\
my $pc = substr(Color::pahColor(0,15,30,ReadingsNum($name,'moisture','0'),0),0,6);;\
".*:rc_dot@#$pc"}
Titel: Antw:Beliebige Icons dynamisch einfärben
Beitrag von: mabula am 23 Januar 2022, 15:40:27
Hallo,
danke für die Info. Es sind soviel Funktionen, schwer alles zu finden. Mit meiner Methode kann ich einfacher die einzelnen RGB Kanäle ansprechen.

Gruß H-J