farbige State-Icons für Dimmer per devStateIcon

Begonnen von vbs, 08 Februar 2015, 12:13:07

Vorheriges Thema - Nächstes Thema

vbs

Ich habe mich mal daran gemacht, ein devStateIcon-Attribut zu definieren, das Lampen-Dimmern ein ordentliches Icon zuweist, da ich die reine Zahlendarstellung nicht so schön fand. Ich poste das hier einfach mal, in der Hoffnung, dass da evtl. noch jemand Verwendung für hat. Verbesserungsvorschläge sind natürlich auch gerne genommen!
Sicherlich ist das nix neues und ihr habt vielleicht sogar schon bessere Varianten gebastelt, aber das ist zumindest mein Stand im Moment...

Bisheriges Aussehen:
(https://dl.dropboxusercontent.com/u/24641738/fhem/alt.png)

Mit Icons:
(https://dl.dropboxusercontent.com/u/24641738/fhem/neu.png)

Der Code dazu sieht so aus (Beispiel an einem Device):

attr wz_lightRed devStateIcon { my $mystate = Value($name);;my $roundVal = 0;;if ($mystate eq "off") { $roundVal = 0 }elsif ($mystate eq "on") { $roundVal = 100 }else { $roundVal = int(($mystate / 10.0) + 0.5) * 10}if ($roundVal == 0) { $roundVal = "00" }my $col255 = int($roundVal * 2.55 + 0.5);;my $hexCol = uc sprintf("%02x%02x00",$col255,$col255);;return ".*:light_light_dim_$roundVal\@$hexCol";;}

marvin78

Mit RegEx arbeiten. Beispiel für Rolladen:

attr Rolladen devStateIcon off:fts_window_2w@yellow on:fts_shutter_100@grey 1\d.*:fts_shutter_10 2.*:fts_shutter_20 3.*:fts_shutter_30 4.*:fts_shutter_40 5.*:fts_shutter_50 6.*:fts_shutter_60 7.*:fts_shutter_70 8.*:fts_shutter_80 9.*:fts_shutter_90

vbs

Hm, ist natürlich ein ganz anderer Ansatz. Auch nicht schlecht. Mag jedoch weniger, dass dabei soviel Logik händisch ausformuliert und gedoppelt werden muss. Besteht keine Möglichkeit, im Perl-Code den Namen des aktuellen Device nutzen zu können? Bei readingsGroups zB gibt es ja die Variable $DEVICE, die das aktuelle Device angibt. Konnte sowas aber nicht für devStateIcon finden.

marvin78


vbs


justme1968

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

vbs

Komisch, obwohl ich Color.pm habe, bekomme ich bei "{Color_devStateIcon(ReadingsVal("wz_lightRed","rgb","000000"))}" die Meldung "Undefined subroutine &main::Color_devStateIcon called at (eval 11047) line 1.". Das gleiche bei "Color::devStateIcon".

justme1968

das file wird nicht automatisch geladen. wenn du kein modul hast das es verwendet dann musst du es selber laden.

das kannst du z.b. mit define colorInit notify global:INITIALIZED {use Color}

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

vbs

Danke! Funktioniert jetzt! Ist sicherlich Geschmackssache, aber ich finde diese schlichteren Dimmer-Icons schicker. Der Ansatz mit dieser sauberen Funktion, welche die devStateIcons erzeugt, gefällt mir aber sehr gut.

justme1968

was meinst du mit 'schlichten' icons? für einen dimmer sollte die routine etwas liefern das ziemlich genau so ausschaut wie deine version.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

vbs

Also ich meine die SVG-Icons (zB "light_light_dim10.svg").
Wenn ich eintrage "{Color::devStateIcon($name,"dimmer","state",undef)}", dann klappt es zwar, es kommen die Bitmap-Icons (zB dim68%.png) ohne Farb-Overlay. Hab ich noch was übersehen?

justme1968

du musst die svg icons vor den png icons im iconPath haben:attr web iconPath openautomation:fhemSVG:default

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

vbs

Danke! Jetzt hab ich zwar die SVG-Icons aber ohne irgendwelche Farb-Overlays. Das letzte Glied in der Kette fehlt mir wohl immer noch?
Sorry, bin ja mal wieder der letzte Depp heute  :-\

bailsone

Super klappt perfekt. ich habe ein bissle rumprobiert diese Hexcol variable abzuaendern, aber begreife die logik dahinter einfach nicht.
Durch simples austauschen der Argumente habe ich es hinbekommen ein Rot oder ein Gruen als Overlay zu erzeugen. Ich dachte das waere ne simple RGB Steuerung aber irgendwie klappt das nicht mit weiß. Es muesste doch auch klappen die lampe zwischen schwarz und weiß oder besser noch grau und weiß im color overlay anzuzeigen oder ? Sry habe leider nur duerftige programmier Erfahrungen waere super wenn mir jemand weiter helfen koennte.

genau genomen geht es um diesen teil
my $hexCol = uc sprintf("%02x%02x00",$col255,$col255)
ich dachte das waere (R,G,B) aber anscheinend begreif ich dieses sprintf davor net so richtig. $col255 sollte ja die variable sein die sich aufgrund des Dimmvalues veraendert. Aber wie wuerde das mit nem weißem overlay ablaufen.

($col255,$col255,$col255) hatte nicht funktioniert  :'(

Vielen Dank. Vorab.

bailsone

Hatte jetzt doch geklappt. Hatte noch was zu diesem sprintf gefunden.
Hiermit klappts dann auch fuer eine weisse Lampe.

{ my $mystate = Value($name);my $roundVal = 0;if ($mystate eq "off") { $roundVal = 0 }elsif ($mystate eq "on") { $roundVal = 100 }else { $roundVal = int(($mystate / 10.0) + 0.5) * 10}if ($roundVal == 0) { $roundVal = "00" }my $col255 = int($roundVal * 2.55 + 0.5);my $hexCol = uc sprintf("%02x%02x%02x",$col255,$col255,$col255);return ".*:light_light_dim_$roundVal\@$hexCol";}

oder hier nur die sprintf

$hexCol = uc sprintf("%02x%02x%02x",$col255,$col255,$col255)

justme1968

und was spricht gegen das hier: attr <name> devStateIcon {Color::devStateIcon($name,"dimmer",undef,"state")} so sie es im wiki beschrieben ist?
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

willib

#16
Das klappt soweit für meinen Homematic Dimmer. Das Verhalten weicht aber vom an/aus Icon und vom Hue Icon ab. Ich hätte gerne dass das Off Icon Weiß ist und ab der kleinsten Dimmstufe dann gelb wird. Was muss da noch angepasst werden? Ich habe es mit {Color::devStateIcon($name,"rgb","Fakergb","pct")} versucht. Fakergb ist ein Userreading mit dem Gelbton den ich bei eingeschalteter Leuchte sehen will. Jetzt wird Off nicht mehr richtig angezeigt. Im ausgeschalteten Zustand sehe ich eine gelbes SVG lamp Icon mit einem Strich. Wenn ich {Color::devStateIcon($name,"dimmer",undef,"pct")} verwende funktioniert es. Halt ohne gelb. Ist das der richtige Ansatz den ich verfolge? Was muss ich machen?
FHEM in Debian 10 LXC unter Proxmox auf NUC, Homematic, Hue, Intertechno, Jeelink, RFXTRX, Harmony Hub, VU+ Uno 4K, Sonos, AMAD

willib

Ich habe es folgendermaßen hinbekommen:
Mein User Reading
Fakergb {return 'FFB87B'}, Fakestate {if(ReadingsVal($name,"level",0)==0) {"off"} elsif (ReadingsVal($name,"level",0)==100) {"on"} else {ReadingsVal($name,"level",0)}}
Und mein devstateicon
{Color::devStateIcon($name,"rgb","Fakergb","Fakestate")}
Den rgb wert des eingeschalteten Icons muss ich noch an den FHEM Standard anpassen. Kennt den jemand? Aber so ist das Verhalten konsistent.
FHEM in Debian 10 LXC unter Proxmox auf NUC, Homematic, Hue, Intertechno, Jeelink, RFXTRX, Harmony Hub, VU+ Uno 4K, Sonos, AMAD