FHEM Forum

FHEM => Frontends => Thema gestartet von: vbs am 08 Februar 2015, 12:13:07

Titel: farbige State-Icons für Dimmer per devStateIcon
Beitrag von: vbs am 08 Februar 2015, 12:13:07
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";;}
Titel: Antw:farbige State-Icons für Dimmer per devStateIcon
Beitrag von: marvin78 am 08 Februar 2015, 12:19:51
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
Titel: Antw:farbige State-Icons für Dimmer per devStateIcon
Beitrag von: vbs am 08 Februar 2015, 12:30:20
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.
Titel: Antw:farbige State-Icons für Dimmer per devStateIcon
Beitrag von: marvin78 am 08 Februar 2015, 12:32:11
Probiere mal $name. Ungetestet.
Titel: Antw:farbige State-Icons für Dimmer per devStateIcon
Beitrag von: vbs am 08 Februar 2015, 12:34:13
Klasse, klappt! Danke!
Titel: Antw:farbige State-Icons für Dimmer per devStateIcon
Beitrag von: justme1968 am 08 Februar 2015, 12:50:15
schau mal hier: http://www.fhemwiki.de/wiki/Color#Farbige_Lampen_Icons

gruß
  andre
Titel: Antw:farbige State-Icons für Dimmer per devStateIcon
Beitrag von: vbs am 08 Februar 2015, 14:35:23
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".
Titel: Antw:farbige State-Icons für Dimmer per devStateIcon
Beitrag von: justme1968 am 08 Februar 2015, 14:39:15
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
Titel: Antw:farbige State-Icons für Dimmer per devStateIcon
Beitrag von: vbs am 08 Februar 2015, 15:49:20
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.
Titel: Antw:farbige State-Icons für Dimmer per devStateIcon
Beitrag von: justme1968 am 08 Februar 2015, 16:20:39
was meinst du mit 'schlichten' icons? für einen dimmer sollte die routine etwas liefern das ziemlich genau so ausschaut wie deine version.
Titel: Antw:farbige State-Icons für Dimmer per devStateIcon
Beitrag von: vbs am 08 Februar 2015, 17:06:12
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?
Titel: Antw:farbige State-Icons für Dimmer per devStateIcon
Beitrag von: justme1968 am 08 Februar 2015, 17:12:55
du musst die svg icons vor den png icons im iconPath haben:attr web iconPath openautomation:fhemSVG:default

gruss
  andre
Titel: Antw:farbige State-Icons für Dimmer per devStateIcon
Beitrag von: vbs am 08 Februar 2015, 17:49:07
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  :-\
Titel: Antw:farbige State-Icons für Dimmer per devStateIcon
Beitrag von: bailsone am 29 Dezember 2016, 03:57:51
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.
Titel: Antw:farbige State-Icons für Dimmer per devStateIcon
Beitrag von: bailsone am 30 Dezember 2016, 21:00:32
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)
Titel: Antw:farbige State-Icons für Dimmer per devStateIcon
Beitrag von: justme1968 am 30 Dezember 2016, 21:22:40
und was spricht gegen das hier: attr <name> devStateIcon {Color::devStateIcon($name,"dimmer",undef,"state")} so sie es im wiki beschrieben ist?
Titel: Antw:farbige State-Icons für Dimmer per devStateIcon
Beitrag von: willib am 25 Februar 2018, 13:46:06
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?
Titel: Antw:farbige State-Icons für Dimmer per devStateIcon
Beitrag von: willib am 26 Februar 2018, 08:15:10
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.