[GELÖST[ Status Icon einfärben unter Type ModbusAttr mit stateFormat

Begonnen von Burny4600, 09 August 2024, 16:00:50

Vorheriges Thema - Nächstes Thema

Burny4600

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.
Mfg Chris

Raspberry Pi 2-5, Betriebssystem: Bullseye Lite, Bookworm Lite
Schnittstellen: RFXtrx433E, SIGNALduino, MQTT, nanoCUL, HM-MOD-UART, 1-Wire, LAN, ser2net, FHEM2FEHEM
Devices: FS20, IT, Homematic, MQTT, TEK603, WMR200, YouLess, S.USV, APC-USV, PV-Deye, PV-Fronius, Resol VBUS & DL2

eisman

#1
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
1x FHEM Debian, Homematic,ZigBee,FS20 / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian, Homematic,ZigBee         / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian,MQTT                               / 1X Raspberry, i2c,onewire,gpio
1x auf Windows 2012 Hyper-V-S

TomLee

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

Burny4600

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>\
"}
Mfg Chris

Raspberry Pi 2-5, Betriebssystem: Bullseye Lite, Bookworm Lite
Schnittstellen: RFXtrx433E, SIGNALduino, MQTT, nanoCUL, HM-MOD-UART, 1-Wire, LAN, ser2net, FHEM2FEHEM
Devices: FS20, IT, Homematic, MQTT, TEK603, WMR200, YouLess, S.USV, APC-USV, PV-Deye, PV-Fronius, Resol VBUS & DL2

TomLee

Upps, das musst natürlich auch umbauen und die Werte mit ReadingsNum oder ReadingsVal auslesen.

TomLee

#5
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

Burny4600

#6
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.
Mfg Chris

Raspberry Pi 2-5, Betriebssystem: Bullseye Lite, Bookworm Lite
Schnittstellen: RFXtrx433E, SIGNALduino, MQTT, nanoCUL, HM-MOD-UART, 1-Wire, LAN, ser2net, FHEM2FEHEM
Devices: FS20, IT, Homematic, MQTT, TEK603, WMR200, YouLess, S.USV, APC-USV, PV-Deye, PV-Fronius, Resol VBUS & DL2

eisman

hi,

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

gruss
1x FHEM Debian, Homematic,ZigBee,FS20 / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian, Homematic,ZigBee         / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian,MQTT                               / 1X Raspberry, i2c,onewire,gpio
1x auf Windows 2012 Hyper-V-S

Burny4600

readingsGroup habe ich für meine Heizung in Anwendung.

Für diese bisherige Lösung für die PV-Anlagen schien mir stateFormat besser.
Mfg Chris

Raspberry Pi 2-5, Betriebssystem: Bullseye Lite, Bookworm Lite
Schnittstellen: RFXtrx433E, SIGNALduino, MQTT, nanoCUL, HM-MOD-UART, 1-Wire, LAN, ser2net, FHEM2FEHEM
Devices: FS20, IT, Homematic, MQTT, TEK603, WMR200, YouLess, S.USV, APC-USV, PV-Deye, PV-Fronius, Resol VBUS & DL2

eisman

hi,

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

gruss
1x FHEM Debian, Homematic,ZigBee,FS20 / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian, Homematic,ZigBee         / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian,MQTT                               / 1X Raspberry, i2c,onewire,gpio
1x auf Windows 2012 Hyper-V-S