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
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"}
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