FHEM Forum

FHEM => Frontends => FHEMWEB => Thema gestartet von: Burny4600 am 09 August 2024, 16:00:50

Titel: [GELÖST[ Status Icon einfärben unter Type ModbusAttr mit stateFormat
Beitrag von: Burny4600 am 09 August 2024, 16:00:50
Ich suche eine Lösung Icons je nach Status unterschiedlich einzufärben.
Im konkreten Fall gibt das Reading Betriebsstatus unterschiedliche Values aus (1000, 1001, 1002 usw.). Je nach Status sollte ein Icon unterschiedlich eingefärbt werden.
valueIcon kann bei dieser Type nicht genutzt werden. Für stateFormat und devStateIcon habe ich keine Lösung gefunden.

Irgendwie drehe ich mich im Kreis.
Titel: Aw: Status Icon einfärben unter Type ModbusAttr
Beitrag von: eisman am 09 August 2024, 16:20:11
Hi,

vielleicht Hilft es

devStateIcon:
(und geht auch unter  stateFormat)

{ my ($Dev) = $name; my $FRGB = "#8C8C8C"; my $STRG = "";
  my $State = ReadingsVal($Dev,"state","closed");
  my $Batt  = ReadingsVal($Dev,"battery","ok");
# open,closed,tilted

  if     ($State eq "closed") { $State = "closed"; $FRGB = "#00FF00";
  } elsif($State eq   "open") { $State =   "open"; $FRGB = "#FF0000";
  } elsif($State eq "tilted") { $State = "tilted"; $FRGB = "#0000FF";
  }
 
  $STRG = $STRG . "<span style='font-size:12px;font-weight:bold;color:" . $FRGB . ";'> " . $State . "</span>";
 
  if     ($Batt eq  "ok") { $Batt =  "ok"; $FRGB = "#00FF00";
  } elsif($Batt eq "low") { $Batt = "low"; $FRGB = "#FF0000";
  }
 
  $STRG = $STRG . "<span style='font-size:10px;font-weight:bold;color:#F4A460;'><br>Bat: </span>" .
                  "<span style='font-size:10px;font-weight:bold;color:" . $FRGB . ";'>" . $Batt . "</span>";
  return $STRG;}

{ my $PCT = ReadingsVal($name,"pct",0);
  $PCT = int($PCT/10)*10;
  if    ($PCT == 100) {    return ".*:fts_shutter_10@#00FF00"; }
  elsif ($PCT ==  90) {    return ".*:fts_shutter_10@#0000FF"; }
  elsif ($PCT ==  80) { return ".*:fts_shutter_20@#FF0000"; }
  elsif ($PCT ==  70) { return ".*:fts_shutter_30@#FF0000"; }
  elsif ($PCT ==  60) { return ".*:fts_shutter_40@#FF0000"; }
  elsif ($PCT ==  50) {    return ".*:fts_shutter_50@#FF0000"; }
  elsif ($PCT ==  40) { return ".*:fts_shutter_60@#FF0000"; }
  elsif ($PCT ==  30) { return ".*:fts_shutter_70@#FF0000"; }
  elsif ($PCT ==  20) { return ".*:fts_shutter_80@#0000FF"; }
  elsif ($PCT ==  10) { return ".*:fts_shutter_90@#0000FF"; }
  elsif ($PCT ==   0) {    return ".*:fts_shutter_100@#00FF00"; }
}

gruss
Titel: Aw: Status Icon einfärben unter Type ModbusAttr
Beitrag von: TomLee am 09 August 2024, 17:29:58
ZitatFür stateFormat und devStateIcon habe ich keine Lösung gefunden.

Hallo,

um die Werte auf eine Farbe mappen zu können muss man auf die Perl-Ebene wechseln, wie bereits eisman zeigt.
Hört sich kompliziert an ist es aber gar nicht.
Dazu nimmst einfach deinen Code aus stateFormat und packst ihn in geschweifte Klammern und Quotes (natürlich ohne das control_on_off am Anfang)
{"<hier_rein>"}Damit ist erstmal alles beim Alten, nur das der Code aus Perl zurückgegeben wird. Man kann den Code so in devStateIcon oder stateFormat verwenden, mit stateFormat landet halt die ganze Rückgabe in dem Internal STATE.


Zum mappen würd ich einen Hash vorschlagen, der wird einfach vor deinem HTML-Code ergänzt.

Bsp:

defmod d dummy
attr d devStateIcon {\
my %code2hex = (\
'1000' => 'ff0000',\
'1001' => '008b45',\
'1002' => '0000ff');;\
"<b><span style='color:transparent'>\
<span style='color:#FFFFFF'>Status\
<span style='color:transparent'>\
<span>".FW_makeImage('rc_dot@#'.$code2hex{ReadingsNum($name,'Betriebsstatus',1000)})."</span>\
</b></span><br>"\
}
attr d readingList Betriebsstatus
attr d setList Betriebsstatus:1000,1001,1002

setstate d Betriebsstatus 1000
setstate d 2024-08-09 16:42:45 Betriebsstatus 1002

Gruß Thomas
Titel: Aw: Status Icon einfärben unter Type ModbusAttr
Beitrag von: Burny4600 am 10 August 2024, 12:55:48
Das funktioniert leider bei mir nicht.
Wenn ich unter stateFormat {"mein bisheriges stateFormat"} ergänze werden keine Values übernommen.

attr Deye_12k stateFormat
{"\
<b><span style='color:#FFDD00'>Inverterspannung L1<span style='color:transparent'>....<span style='color:#FFDD00'>Inverter_Ausgangsspannung_L1__V V\
   <span style='color:transparent'>....................\
   <span style='color:#AAFF00'>Inverterstrom L1<span style='color:transparent'>....<span style='color:#AAFF00'>Inverter_Ausgangsstrom_L1__A A\
   <span style='color:transparent'>....................\
   <span style='color:#00FFFF'>Inverterleistung L1<span style='color:transparent'>....<span style='color:#00FFFF'>Inverter_Ausgangsleistung_L1__kW kW\
</b></span><br>\
\
<b><span style='color:#FFDD00'>Inverterspannung L2<span style='color:transparent'>....<span style='color:#FFDD00'>Inverter_Ausgangsspannung_L2__V V\
   <span style='color:transparent'>....................\
   <span style='color:#AAFF00'>Inverterstrom L2<span style='color:transparent'>....<span style='color:#AAFF00'>Inverter_Ausgangsstrom_L2__A A\
   <span style='color:transparent'>....................\
   <span style='color:#00FFFF'>Inverterleistung L2<span style='color:transparent'>....<span style='color:#00FFFF'>Inverter_Ausgangsleistung_L2__kW kW\
</b></span><br>\
\
<b><span style='color:#FFDD00'>Inverterspannung L3<span style='color:transparent'>....<span style='color:#FFDD00'>Inverter_Ausgangsspannung_L3__V V\
   <span style='color:transparent'>....................\
   <span style='color:#AAFF00'>Inverterstrom L3<span style='color:transparent'>....<span style='color:#AAFF00'>Inverter_Ausgangsstrom_L3__A A\
   <span style='color:transparent'>....................\
   <span style='color:#00FFFF'>Inverterleistung L3<span style='color:transparent'>....<span style='color:#00FFFF'>Inverter_Ausgangsleistung_L3__kW kW\
</b></span><br>\
\
<b><span style='color:transparent'>...\
   <span style='color:#00FFFF'>Inverterleistung ∑<span style='color:transparent'>......<span style='color:#00FFFF'><b>Inverter_Ausgangsleistung_Gesamt__kW kW\
</b></span><br><br><br>\
\
\
<b><span style='color:#FFDD00'>Last Spannung L1<span style='color:transparent'>....<span style='color:#FFDD00'>Last_Spannung_L1__V V\
   <span style='color:transparent'>................\
   <span style='color:transparent'>Last Strom L1<span style='color:transparent'>....<span style='color:transparent'>Last_Strom_L1__A A\
   <span style='color:transparent'>............\
   <span style='color:#00FFFF'>Last Leistung L1<span style='color:transparent'>....<span style='color:#00FFFF'>Last_Leistung_L1__kW kW\
</b></span><br>\
\
<b><span style='color:#FFDD00'>Last Spannung L2<span style='color:transparent'>....<span style='color:#FFDD00'>Last_Spannung_L2__V V\
   <span style='color:transparent'>................\
   <span style='color:transparent'>Last Strom L2<span style='color:transparent'>....<span style='color:transparent'>Last_Strom_L2__A A\
   <span style='color:transparent'>............\
   <span style='color:#00FFFF'>Last Leistung L2<span style='color:transparent'>....<span style='color:#00FFFF'>Last_Leistung_L2__kW kW\
</b></span><br>\
\
<b><span style='color:#FFDD00'>Last Spannung L3<span style='color:transparent'>....<span style='color:#FFDD00'>Last_Spannung_L3__V V\
   <span style='color:transparent'>................\
   <span style='color:transparent'>Last Strom L3<span style='color:transparent'>....<span style='color:transparent'>Last_Strom_L3__A A\
   <span style='color:transparent'>............\
   <span style='color:#00FFFF'>Last Leistung L3<span style='color:transparent'>....<span style='color:#00FFFF'>Last_Leistung_L3__kW kW\
</b></span><br>\
\
<b><span style='color:transparent'>...\
   <span style='color:#00FFFF'>Last Leistung ∑<span style='color:transparent'>......<span style='color:#00FFFF'><b>Last_Leistung_Gesamt__kW kW\
</b></span><br><br><br>\
\
\
<b><span style='color:transparent'>UPS Spannung L1<span style='color:transparent'>....<span style='color:transparent'>UPS_Spannung_L1__V V\
   <span style='color:transparent'>..\
   <span style='color:transparent'>UPS Strom L1<span style='color:transparent'>....<span style='color:transparent'>UPS_Strom_L1__A A\
   <span style='color:transparent'>..\
   <span style='color:#00FFFF'>UPS Leistung L1<span style='color:transparent'>....<span style='color:#00FFFF'>UPS_Ausgangsleistung_L1__kW kW\
</b></span><br>\
\
<b><span style='color:transparent'>UPS Spannung L2<span style='color:transparent'>....<span style='color:transparent'>UPS_Spannung_L2__V V\
   <span style='color:transparent'>..\
   <span style='color:transparent'>UPS Strom L2<span style='color:transparent'>....<span style='color:transparent'>UPS_Strom_L2__A A\
   <span style='color:transparent'>..\
   <span style='color:#00FFFF'>UPS Leistung L2<span style='color:transparent'>....<span style='color:#00FFFF'>UPS_Ausgangsleistung_L2__kW kW\
</b></span><br>\
\
<b><span style='color:transparent'>UPS Spannung L3<span style='color:transparent'>....<span style='color:transparent'>UPS_Spannung_L3__V V\
   <span style='color:transparent'>..\
   <span style='color:transparent'>UPS Strom L3<span style='color:transparent'>....<span style='color:transparent'>UPS_Strom_L3__A A\
   <span style='color:transparent'>..\
   <span style='color:#00FFFF'>UPS Leistung L3<span style='color:transparent'>....<span style='color:#00FFFF'>UPS_Ausgangsleistung_L3__kW kW\
</b></span><br>\
\
<b><span style='color:transparent'>...\
   <span style='color:#00FFFF'>UPS Leistung ∑<span style='color:transparent'>......<span style='color:#00FFFF'><b>UPS_Ausgangsleistung_Gesamt__kW kW\
</b></span><br>\
"}
Titel: Aw: Status Icon einfärben unter Type ModbusAttr
Beitrag von: TomLee am 10 August 2024, 12:59:59
Upps, das musst natürlich auch umbauen und die Werte mit ReadingsNum oder ReadingsVal auslesen.
Titel: Aw: Status Icon einfärben unter Type ModbusAttr
Beitrag von: TomLee am 10 August 2024, 13:36:30
Löst man meinem Empfinden nach auch am einfachsten indem man die Werte vor dem HTML-Text in Variablen schreibt und diese dann im HTML-Text einfügt:

Zitatdefmod d dummy
attr d devStateIcon {my $iv=ReadingsNum($name,'Inverter_Ausgangsspannung_L1__V',0);;\
my $ia=ReadingsNum($name,'Inverter_Ausgangsstrom_L1__A',0);;\
my $ip=ReadingsNum($name,'Inverter_Ausgangsleistung_L1__kW',0);;\
my %val2hex = (\
'1000' => 'ff0000',\
'1001' => '008b45',\
'1002' => '0000ff');;\
my $icon=FW_makeImage('rc_dot@#'.$code2hex{ReadingsNum($name,'Betriebsstatus',1000)});;\
return "<b>\
<span style='color:transparent'>\
<span style='color:#FFFFFF'>Status\
<span style='color:transparent'>\
<span>$icon</span>\
</span><br>\
<span style='color:#FFDD00'>Inverterspannung L1<span style='color:transparent'>   <span style='color:#FFDD00'>$iv V\
   <span style='color:transparent'>\
   <span style='color:#AAFF00'>Inverterstrom L1<span style='color:transparent'>   <span style='color:#AAFF00'>$ia A\
   <span style='color:transparent'>\
   <span style='color:#00FFFF'>Inverterleistung L1<span style='color:transparent'>   <span style='color:#00FFFF'>$ip kW\
</b></span><br>"}
attr d readingList Betriebsstatus
attr d setList Betriebsstatus:1000,1001,1002

setstate d Betriebsstatus 1000
setstate d 2024-08-10 13:35:09 Betriebsstatus 1001
setstate d 2024-08-10 13:18:39 Inverter_Ausgangsleistung_L1__kW 178.88
setstate d 2024-08-10 13:16:48 Inverter_Ausgangsspannung_L1__V 238.5
setstate d 2024-08-10 13:17:18 Inverter_Ausgangsstrom_L1__A 0.75
Titel: Aw: Status Icon einfärben unter Type ModbusAttr
Beitrag von: Burny4600 am 10 August 2024, 16:30:15
ZitatLöst man meinem Empfinden nach auch am einfachsten indem man die Werte vor dem HTML-Text in Variablen schreibt und diese dann im HTML-Text einfügt:

Ja, das war die Lösung.

attr Deye_12k stateFormat
{
my $il1v=ReadingsNum($name,'Inverter_Spannung_L1__V',0);
my $il1a=ReadingsNum($name,'Inverter_Strom_L1__A',0);
my $il1p=ReadingsNum($name,'Inverter_Leistung_L1__kW',0);
my $il2v=ReadingsNum($name,'Inverter_Spannung_L2__V',0);
my $il2a=ReadingsNum($name,'Inverter_Strom_L2__A',0);
my $il2p=ReadingsNum($name,'Inverter_Leistung_L2__kW',0);
my $il3v=ReadingsNum($name,'Inverter_Spannung_L3__V',0);
my $il3a=ReadingsNum($name,'Inverter_Strom_L3__A',0);
my $il3p=ReadingsNum($name,'Inverter_Leistung_L3__kW',0);
my $ilsp=ReadingsNum($name,'Inverter_Leistung_Gesamt__kW',0);


my $ll1v=ReadingsNum($name,'Last_Spannung_L1__V',0);
my $ll1p=ReadingsNum($name,'Last_Leistung_L1__kW',0);
my $ll2v=ReadingsNum($name,'Last_Spannung_L2__V',0);
my $ll2p=ReadingsNum($name,'Last_Leistung_L2__kW',0);
my $ll3v=ReadingsNum($name,'Last_Spannung_L3__V',0);
my $ll3p=ReadingsNum($name,'Last_Leistung_L3__kW',0);
my $llsp=ReadingsNum($name,'Last_Leistung_Gesamt__kW',0);


my $ul1p=ReadingsNum($name,'UPS_Leistung_L1__kW',0);
my $ul2p=ReadingsNum($name,'UPS_Leistung_L2__kW',0);
my $ul3p=ReadingsNum($name,'UPS_Leistung_L3__kW',0);
my $ulsp=ReadingsNum($name,'UPS_Leistung_Gesamt__kW',0);


my %val2hex = (
'1000' => 'bcbcbc',
'1001' => 'b5f799',
'1002' => '00fb45',
'1003' => 'ffa500',
'1004' => 'f44336',
'1005' => 'ffffff');

"
<b>
<span style='color:transparent'>
<span style='color:#FFFFFF'>Status
<span style='color:transparent'>...
<span>".FW_makeImage('rc_dot@#'.$val2hex{ReadingsNum($name,'Betriebsstatus',1000)})."
</b></span>
<br>
<br>

<b>
   <span style='color:#FFDD00'>Inverter Spannung L1<span style='color:transparent'>....<span style='color:#FFDD00'>$il1v V
   <span style='color:transparent'>.............
   <span style='color:#AAFF00'>Inverter Strom L1<span style='color:transparent'>....<span style='color:#AAFF00'>$il1a A
   <span style='color:transparent'>.............
   <span style='color:#00FFFF'>Inverter Leistung L1<span style='color:transparent'>....<span style='color:#00FFFF'>$il1p kW
<br>
   <span style='color:#FFDD00'>Inverter Spannung L2<span style='color:transparent'>....<span style='color:#FFDD00'>$il2v V
   <span style='color:transparent'>.............
   <span style='color:#AAFF00'>Inverter Strom L2<span style='color:transparent'>....<span style='color:#AAFF00'>$il2a A
   <span style='color:transparent'>.............
   <span style='color:#00FFFF'>Inverter Leistung L2<span style='color:transparent'>....<span style='color:#00FFFF'>$il2p kW
<br>
   <span style='color:#FFDD00'>Inverter Spannung L3<span style='color:transparent'>....<span style='color:#FFDD00'>$il3v V
   <span style='color:transparent'>.............
   <span style='color:#AAFF00'>Inverter Strom L3<span style='color:transparent'>....<span style='color:#AAFF00'>$il3a A
   <span style='color:transparent'>.............
   <span style='color:#00FFFF'>Inverter Leistung L3<span style='color:transparent'>....<span style='color:#00FFFF'>$il3p kW
<br>
   <span style='color:transparent'>...  
   <span style='color:#00FFFF'>Inverter Leistung ∑<span style='color:transparent'>......<span style='color:#00FFFF'>$ilsp kW
<br>
<br>
   <span style='color:#FFDD00'>Last Spannung L1<span style='color:transparent'>....<span style='color:#FFDD00'>$ll1v V
   <span style='color:transparent'>....................
   <span style='color:#00FFFF'>Last Leistung L1<span style='color:transparent'>....<span style='color:#00FFFF'>$ll1p kW
   <span style='color:transparent'>..........
   <span style='color:#00FFFF'>UPS Leistung L1<span style='color:transparent'>....<span style='color:#00FFFF'>$ul1p kW
<br>
   <span style='color:#FFDD00'>Last Spannung L2<span style='color:transparent'>....<span style='color:#FFDD00'>$ll2v V
   <span style='color:transparent'>....................
   <span style='color:#00FFFF'>Last Leistung L2<span style='color:transparent'>....<span style='color:#00FFFF'>$ll2p kW
   <span style='color:transparent'>..........
   <span style='color:#00FFFF'>UPS Leistung L2<span style='color:transparent'>....<span style='color:#00FFFF'>$ul2p kW
<br>
   <span style='color:#FFDD00'>Last Spannung L3<span style='color:transparent'>....<span style='color:#FFDD00'>$ll3v V
   <span style='color:transparent'>....................
   <span style='color:#00FFFF'>Last Leistung L3<span style='color:transparent'>....<span style='color:#00FFFF'>$ll3p kW
   <span style='color:transparent'>..........
   <span style='color:#00FFFF'>UPS Leistung L3<span style='color:transparent'>....<span style='color:#00FFFF'>$ul3p kW
<br>
   <span style='color:transparent'>.........................................................................
   <span style='color:#00FFFF'>Last Leistung ∑<span style='color:transparent'>......<span style='color:#00FFFF'>$llsp kW
   <span style='color:transparent'>..........
   <span style='color:#00FFFF'>UPS Leistung ∑<span style='color:transparent'>......<span style='color:#00FFFF'>$ulsp kW
</b></span>
"
}

Danke für Eure Tipps.
Jetzt brauche ich nur noch ein paar Feinheiten für den Desktop herausfinden.
Titel: Aw: [GELÖST[ Status Icon einfärben unter Type ModbusAttr mit stateFormat
Beitrag von: eisman am 10 August 2024, 16:54:31
hi,

und warum nimmt man(Frau auch) nicht eine readingsGroup?

gruss
Titel: Aw: [GELÖST[ Status Icon einfärben unter Type ModbusAttr mit stateFormat
Beitrag von: Burny4600 am 10 August 2024, 17:05:51
readingsGroup habe ich für meine Heizung in Anwendung.

Für diese bisherige Lösung für die PV-Anlagen schien mir stateFormat besser.
Titel: Aw: [GELÖST[ Status Icon einfärben unter Type ModbusAttr mit stateFormat
Beitrag von: eisman am 10 August 2024, 17:17:00
hi,

man kann aber auch hier 3 werte L1-L3 zusammenfassen und auch die werte dazu.

gruss