FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Tueftler1983 am 09 September 2023, 15:16:00

Titel: ***Gelöst*** Werte im State Rot bei Positiven Grün bei negativen Werten
Beitrag von: Tueftler1983 am 09 September 2023, 15:16:00
Hallo ich Würde gerne die Werte Von meinen Stromzähler ( Watt und Ampere ) Fablich im State ändern.

Bei Positiven werten sollen sie Rot sein
bei Negativen Werten Grün.

Hintergrund wenn die Solaranlage mehr einspeist als verbraucht wird sollen die Werte halt Grün dahrgestellt werden.

Habe zwar schon ein zwei andere konstellationen bei verschiedenen Zuständen gesehen aber halt nichts wenn sich nur das vorzeichen auf"-" ändert.
Hier das ist das Device
define Zaehler ModbusSDM120 2 30
attr Zaehler fp_Grundriss 344,621,1,Zaehler,
attr Zaehler room Strom,Modbus,Thomas
attr Zaehler stateFormat Strom Current_Factor A \
<br> Watt Power__W\
<br> Bezug Energy_export__kWh\
<br> Einspeisung Energy_import__kWh
attr Zaehler userReadings Current_Factor {ReadingsNum("Zaehler","Current__A",0) * ReadingsNum ("Zaehler","PowerFactor",0)}
attr Zaehler verbose 0
#  DEF        2 30
#  FUUID      64a484c9-f33f-b458-fc4d-1a4497504ec41a52
#  IODev      ModBusLine
#  Interval  30
#  MODBUSID  2
#  MODE      master
#  MODULEVERSION Modbus 4.5.5 - 9.5.2023
#  NAME      Zaehler
#  NOTIFYDEV  global
#  NR        125
#  NTFY_ORDER 50-Zaehler
#  PROTOCOL  RTU
#  STATE      Strom -1.01 A
#<br> Watt -222 W
#<br> Bezug 174.466 kWh
#<br> Einspeisung 407.849 kWh
#  TYPE      ModbusSDM120
#  eventCount 7941
#  DICACHE:
#    3:
#      UNPACK   
#      EXPRS:
#      EXTRAS:
#      FNAMES:
#    4:
#      UNPACK   
#      EXPRS:
#      EXTRAS:
#      FNAMES:
#  FRAME:
#  PICACHE:
#    h12:
#      bswapRegs 
#      decode   
#      encode   
#      expr     
#      format    %.f ms
#      ignoreExpr
#      map       
#      mapDefault
#      revRegs   
#      rmapDefault
#    h18:
#      bswapRegs 
#      decode   
#      encode   
#      expr     
#      format   
#      ignoreExpr
#      map        0:1stop.bit_no.parity, 1:1stop.bit_even.parity, 2:1stop.bit_odd.parity, 3:2stop.bits_no.parity
#      mapDefault
#      revRegs   
#      rmapDefault
#    h2:
#      bswapRegs 
#      decode   
#      encode   
#      expr     
#      format    %.f
#      ignoreExpr
#      map       
#      mapDefault
#      revRegs   
#      rmapDefault
#    h20:
#      bswapRegs 
#      decode   
#      encode   
#      expr     
#      format   
#      ignoreExpr
#      map       
#      mapDefault
#      revRegs   
#      rmapDefault
#    h28:
#      bswapRegs 
#      decode   
#      encode   
#      expr     
#      format   
#      ignoreExpr
#      map        0:2400, 1:4800, 2:9600, 5:1200
#      mapDefault
#      revRegs   
#      rmapDefault
#    h63744:
#      bswapRegs 
#      decode   
#      encode   
#      expr     
#      format    %s sec
#      ignoreExpr
#      map       
#      mapDefault
#      revRegs   
#      rmapDefault
#    h63760:
#      bswapRegs 
#      decode   
#      encode   
#      expr     
#      format    %s
#      ignoreExpr
#      map        0:0.001kWh/imp, 1:0.01kWh/imp, 2:0.1kWh/imp, 3:1kWh/imp
#      mapDefault
#      revRegs   
#      rmapDefault
#    h63776:
#      bswapRegs 
#      decode   
#      encode   
#      expr     
#      format    %s
#      ignoreExpr
#      map        00010000:import, 00020000:import+export, 00030000:import-export
#      mapDefault
#      revRegs   
#      rmapDefault
#    i0:
#      bswapRegs 
#      decode   
#      encode   
#      expr     
#      format    %.1f V
#      ignoreExpr
#      map       
#      mapDefault
#      revRegs   
#      rmapDefault
#    i12:
#      bswapRegs 
#      decode   
#      encode   
#      expr     
#      format    %.f W
#      ignoreExpr
#      map       
#      mapDefault
#      revRegs   
#      rmapDefault
#    i18:
#      bswapRegs 
#      decode   
#      encode   
#      expr     
#      format    %.1f VA
#      ignoreExpr
#      map       
#      mapDefault
#      revRegs   
#      rmapDefault
#    i24:
#      bswapRegs 
#      decode   
#      encode   
#      expr     
#      format    %.1f VAr
#      ignoreExpr
#      map       
#      mapDefault
#      revRegs   
#      rmapDefault
#    i258:
#      bswapRegs 
#      decode   
#      encode   
#      expr     
#      format    %.2f
#      ignoreExpr
#      map       
#      mapDefault
#      revRegs   
#      rmapDefault
#    i264:
#      bswapRegs 
#      decode   
#      encode   
#      expr     
#      format    %.2f
#      ignoreExpr
#      map       
#      mapDefault
#      revRegs   
#      rmapDefault
#    i30:
#      bswapRegs 
#      decode   
#      encode   
#      expr     
#      format    %.1f
#      ignoreExpr
#      map       
#      mapDefault
#      revRegs   
#      rmapDefault
#    i342:
#      bswapRegs 
#      decode   
#      encode   
#      expr     
#      format    %.3f kWh
#      ignoreExpr
#      map       
#      mapDefault
#      revRegs   
#      rmapDefault
#    i344:
#      bswapRegs 
#      decode   
#      encode   
#      expr     
#      format    %.3f kVArh
#      ignoreExpr
#      map       
#      mapDefault
#      revRegs   
#      rmapDefault
#    i6:
#      bswapRegs 
#      decode   
#      encode   
#      expr     
#      format    %.2f A
#      ignoreExpr
#      map       
#      mapDefault
#      revRegs   
#      rmapDefault
#    i70:
#      bswapRegs 
#      decode   
#      encode   
#      expr     
#      format    %.2f Hz
#      ignoreExpr
#      map       
#      mapDefault
#      revRegs   
#      rmapDefault
#    i72:
#      bswapRegs 
#      decode   
#      encode   
#      expr     
#      format    %.3f kWh
#      ignoreExpr
#      map       
#      mapDefault
#      revRegs   
#      rmapDefault
#    i74:
#      bswapRegs 
#      decode   
#      encode   
#      expr     
#      format    %.3f kWh
#      ignoreExpr
#      map       
#      mapDefault
#      revRegs   
#      rmapDefault
#    i76:
#      bswapRegs 
#      decode   
#      encode   
#      expr     
#      format    %.3f kVArh
#      ignoreExpr
#      map       
#      mapDefault
#      revRegs   
#      rmapDefault
#    i78:
#      bswapRegs 
#      decode   
#      encode   
#      expr     
#      format    %.3f kVArh
#      ignoreExpr
#      map       
#      mapDefault
#      revRegs   
#      rmapDefault
#    i84:
#      bswapRegs 
#      decode   
#      encode   
#      expr     
#      format    %.1f
#      ignoreExpr
#      map       
#      mapDefault
#      revRegs   
#      rmapDefault
#    i86:
#      bswapRegs 
#      decode   
#      encode   
#      expr     
#      format    %.1f
#      ignoreExpr
#      map       
#      mapDefault
#      revRegs   
#      rmapDefault
#    i88:
#      bswapRegs 
#      decode   
#      encode   
#      expr     
#      format    %.1f
#      ignoreExpr
#      map       
#      mapDefault
#      revRegs   
#      rmapDefault
#    i90:
#      bswapRegs 
#      decode   
#      encode   
#      expr     
#      format    %.1f
#      ignoreExpr
#      map       
#      mapDefault
#      revRegs   
#      rmapDefault
#    i92:
#      bswapRegs 
#      decode   
#      encode   
#      expr     
#      format    %.1f
#      ignoreExpr
#      map       
#      mapDefault
#      revRegs   
#      rmapDefault
#    i94:
#      bswapRegs 
#      decode   
#      encode   
#      expr     
#      format    %.1f
#      ignoreExpr
#      map       
#      mapDefault
#      revRegs   
#      rmapDefault
#  READ:
#  READINGS:
#    2023-09-09 15:21:33  Current_Factor  -1.01
#    2023-09-09 15:20:33  Current_Max_demand__A 15.44
#    2023-09-09 15:21:31  Current__A      1.01 A
#    2023-09-09 15:20:33  Current_demand__A 1.26
#    2023-09-08 13:12:51  Demand_Period__minutes 60
#    2023-09-09 15:21:32  Energy_export__kVArh 18.451 kVArh
#    2023-09-09 15:21:32  Energy_export__kWh 174.466 kWh
#    2023-09-09 15:21:32  Energy_import__kVArh 88.587 kVArh
#    2023-09-09 15:21:32  Energy_import__kWh 407.849 kWh
#    2023-09-09 15:21:33  Energy_total__kVArh 107.038 kVArh
#    2023-09-09 15:21:33  Energy_total__kWh 582.315 kWh
#    2023-09-09 15:21:32  Frequency__Hz  50.00 Hz
#    2023-09-08 13:12:31  Modbus_Node_adr 2
#    2023-09-08 13:12:31  Modbus_Parity_Stop 1stop.bit_no.parity
#    2023-09-08 13:12:32  Modbus_Speed__baud 9600
#    2023-08-31 23:59:59  Monats_Anfang_ex 160.566 kWh
#    2023-08-31 23:59:59  Monats_Anfang_im 366.603 kWh
#    2023-09-09 15:19:31  PowerFactor    -1.0
#    2023-09-09 15:18:32  Power_Export_demand__W 290.1
#    2023-09-09 15:18:32  Power_Import_demand__W 0.7
#    2023-09-09 15:18:32  Power_Max_Export_demand__W 513.7
#    2023-09-09 15:18:32  Power_Max_Import_demand__W 3255.6
#    2023-09-09 15:18:32  Power_Max_demand__W 3255.6
#    2023-09-09 15:21:32  Power_Sum_demand__W 285.6
#    2023-09-09 15:21:31  Power__VA      231.5 VA
#    2023-09-09 15:21:31  Power__VAr      56.9 VAr
#    2023-09-09 15:21:31  Power__W        -222 W
#    2023-09-08 13:12:34  System_Measurement_mode import+export
#    2023-09-08 13:12:31  System_Pulse_Width__ms 60 ms
#    2023-09-08 13:12:33  System_Pulse_constant 0.001kWh/imp
#    2023-09-08 13:12:33  TimeOfScrollDisplay 0 sec
#    2023-09-09 15:20:31  Voltage__V      233.7 V
#    2023-08-31 23:59:50  Vormonat_bezug  45.732
#    2023-08-31 23:59:50  Vormonat_einspeisung 70.198
#    2023-09-08 13:12:17  state          opened
#  REMEMBER:
#    lrecv      1694265693.32714
#    lsend      1694265693.28842
#  UPDATECACHE:
#    i342:
#      adr        342
#      combine    i342 len 2 Energy_total__kWh with i344 len 2 Energy_total__kVArh
#      len        2
#      objCombi  i342
#      reading    Energy_total__kWh
#      span      4
#      type      i
#    i6:
#      adr        6
#      combine    i6 len 2 Current__A with i12 len 2 Power__W and i18 len 2 Power__VA and i24 len 2 Power__VAr
#      len        2
#      objCombi  i6
#      reading    Current__A
#      span      20
#      type      i
#    i70:
#      adr        70
#      combine    i70 len 2 Frequency__Hz with i72 len 2 Energy_import__kWh and i74 len 2 Energy_export__kWh and i84 len 2 Power_Sum_demand__W
#      len        2
#      objCombi  i70
#      reading    Frequency__Hz
#      span      16
#      type      i
#  gotReadings:
#    Energy_total__kVArh 107.038 kVArh
#    Energy_total__kWh 582.315 kWh
#  lastRead:
#    h12        1694171551.71779
#    h18        1694171551.72066
#    h2        1694171571.36786
#    h20        1694171551.72255
#    h28        1694171552.45505
#    h63744    1694171553.22106
#    h63760    1694171553.97003
#    h63776    1694171554.75555
#    i0        1694265631.80856
#    i12        1694265691.79166
#    i18        1694265691.79323
#    i24        1694265691.79476
#    i258      1694265633.36928
#    i264      1694265633.3711
#    i30        1694265571.72141
#    i342      1694265693.33249
#    i344      1694265693.33448
#    i6        1694265691.78997
#    i70        1694265692.5841
#    i72        1694265692.58564
#    i74        1694265692.58723
#    i76        1694265692.58875
#    i78        1694265692.5903
#    i84        1694265692.5918
#    i86        1694265512.52936
#    i88        1694265512.53099
#    i90        1694265512.53255
#    i92        1694265512.53414
#    i94        1694265512.53565
#
setstate Zaehler Strom -1.01 A \
<br> Watt -222 W\
<br> Bezug 174.466 kWh\
<br> Einspeisung 407.849 kWh
setstate Zaehler 2023-09-09 15:21:33 Current_Factor -1.01
setstate Zaehler 2023-09-09 15:20:33 Current_Max_demand__A 15.44
setstate Zaehler 2023-09-09 15:21:31 Current__A 1.01 A
setstate Zaehler 2023-09-09 15:20:33 Current_demand__A 1.26
setstate Zaehler 2023-09-08 13:12:51 Demand_Period__minutes 60
setstate Zaehler 2023-09-09 15:21:32 Energy_export__kVArh 18.451 kVArh
setstate Zaehler 2023-09-09 15:21:32 Energy_export__kWh 174.466 kWh
setstate Zaehler 2023-09-09 15:21:32 Energy_import__kVArh 88.587 kVArh
setstate Zaehler 2023-09-09 15:21:32 Energy_import__kWh 407.849 kWh
setstate Zaehler 2023-09-09 15:21:33 Energy_total__kVArh 107.038 kVArh
setstate Zaehler 2023-09-09 15:21:33 Energy_total__kWh 582.315 kWh
setstate Zaehler 2023-09-09 15:21:32 Frequency__Hz 50.00 Hz
setstate Zaehler 2023-09-08 13:12:31 Modbus_Node_adr 2
setstate Zaehler 2023-09-08 13:12:31 Modbus_Parity_Stop 1stop.bit_no.parity
setstate Zaehler 2023-09-08 13:12:32 Modbus_Speed__baud 9600
setstate Zaehler 2023-08-31 23:59:59 Monats_Anfang_ex 160.566 kWh
setstate Zaehler 2023-08-31 23:59:59 Monats_Anfang_im 366.603 kWh
setstate Zaehler 2023-09-09 15:19:31 PowerFactor -1.0
setstate Zaehler 2023-09-09 15:18:32 Power_Export_demand__W 290.1
setstate Zaehler 2023-09-09 15:18:32 Power_Import_demand__W 0.7
setstate Zaehler 2023-09-09 15:18:32 Power_Max_Export_demand__W 513.7
setstate Zaehler 2023-09-09 15:18:32 Power_Max_Import_demand__W 3255.6
setstate Zaehler 2023-09-09 15:18:32 Power_Max_demand__W 3255.6
setstate Zaehler 2023-09-09 15:21:32 Power_Sum_demand__W 285.6
setstate Zaehler 2023-09-09 15:21:31 Power__VA 231.5 VA
setstate Zaehler 2023-09-09 15:21:31 Power__VAr 56.9 VAr
setstate Zaehler 2023-09-09 15:21:31 Power__W -222 W
setstate Zaehler 2023-09-08 13:12:34 System_Measurement_mode import+export
setstate Zaehler 2023-09-08 13:12:31 System_Pulse_Width__ms 60 ms
setstate Zaehler 2023-09-08 13:12:33 System_Pulse_constant 0.001kWh/imp
setstate Zaehler 2023-09-08 13:12:33 TimeOfScrollDisplay 0 sec
setstate Zaehler 2023-09-09 15:20:31 Voltage__V 233.7 V
setstate Zaehler 2023-08-31 23:59:50 Vormonat_bezug 45.732
setstate Zaehler 2023-08-31 23:59:50 Vormonat_einspeisung 70.198
setstate Zaehler 2023-09-08 13:12:17 state opened

denke mal es ist trivial.

Lg Holger
Titel: Aw: Werte im State Rot bei Positiven Grün bei negativen Werten
Beitrag von: mi.ke am 09 September 2023, 16:14:43
im stateFormat:

if (ReadingsNum("$NAME","Current_Factor",0) >= 0 {...Rot...} else  {...Grün...}
cheers mi.ke
Titel: Aw: Werte im State Rot bei Positiven Grün bei negativen Werten
Beitrag von: mi.ke am 09 September 2023, 16:19:25
was Du auch machen kasst ist die Formatierung in Attribute und/oder Readings zu schreiben
und dann in stateFormat die Readings aufrufen:

LINK
F1 preis € Fz (preisKG € / kg) <br>
F2 Anzahl Stk Fz in ort
LINKe

F1 wäre der <font..> Start
Fz ist das Ende </font>
Titel: Aw: Werte im State Rot bei Positiven Grün bei negativen Werten
Beitrag von: Tueftler1983 am 09 September 2023, 21:01:17
Zitat von: mi.ke am 09 September 2023, 16:14:43im stateFormat:

if (ReadingsNum("$NAME","Current_Factor",0) >= 0 {...Rot...} else  {...Grün...}
cheers mi.ke
Einfach zusätzlich in das StateFormat?
Klappt nicht, sorry wenn ich mich was dumm anstelle.

Also powerFactor ist halt entweder -1 oder 1

LG holger
Titel: Aw: Werte im State Rot bei Positiven Grün bei negativen Werten
Beitrag von: Tueftler1983 am 09 September 2023, 23:14:37
Hatte nach dem ganzen lesen im Forum so etwas gedacht, aber das funktioniert vorne und hinten nicht.
{
  if (ReadingsNum("$name","Current_Factor",0) >= 0 {
    return '<font color="red">'.ReadingsNum("$name", "Power__W", "") .'</b>';
  }else {
    return '<font color="green">'. ReadingsVal("$name", "Power__W", "")
  }
}
Titel: Aw: Werte im State Rot bei Positiven Grün bei negativen Werten
Beitrag von: Tueftler1983 am 10 September 2023, 08:23:43
Es klappt wohl nicht wegen meiner stateFormat Definition
Strom Current_Factor A
<br> Watt Power__W
<br> Bezug Energy_export__kWh
<br> Einspeisung Energy_import__kWhf
Titel: Aw: Werte im State Rot bei Positiven Grün bei negativen Werten
Beitrag von: mi.ke am 10 September 2023, 13:42:29
also in dem Perl Teil sind mehrere Fehler drin.
Kammer fehlt und wenn Du $name verwendest geht das nur ohne Anführungszeichen, ansonsten musst Du "$NAME". verwenden.
und wenn Du Perl als Syntax wählst, musst Du auch dabei bleiben.

Probier mal so (ungetestet)...

{
if (ReadingsNum("$NAME","Current_Factor",0) >= 0) {
'Strom '.ReadingsNum("$NAME","Current_Factor","0").'A <br> Watt
<font color="red">'.ReadingsNum("$NAME","Power__W","0").'</font> W <br>
Bezug '.ReadingsNum("$NAME","Energy_export__kWh","0").' kWh <br>
Einspeisung'.ReadingsNum("$NAME","Energy_import__kWhf","0").'kWhf';}
else
'Strom '.ReadingsNum("$NAME","Current_Factor","0").'A <br> Watt
<font color="green">'.ReadingsNum("$NAME","Power__W","0").'</font> W <br>
Bezug '.ReadingsNum("$NAME","Energy_export__kWh","0").' kWh <br>
Einspeisung'.ReadingsNum("$NAME","Energy_import__kWhf","0").'kWhf';}
}

Titel: Aw: Werte im State Rot bei Positiven Grün bei negativen Werten
Beitrag von: TomLee am 10 September 2023, 14:58:52
Ähnliche Variante wie gerade vorgeschlagen, die ich in devstateicon eintragen würde, damit bleibt STATE sauber.
Im ersten Beitrag war gewünscht das Watt und Ampere eingefärbt werden.

defmod Battery dummy
attr Battery devStateIcon {my $color = ReadingsNum("$name","Current_Factor",0) >= 0 ? 'green' : 'red';;\
"<span style='color: ".$color."'>Strom ".ReadingsNum($name,'Current_Factor',0)." A</span><br>\
    <span style='color: ".$color."'>Watt ".ReadingsNum($name,'Power__W',0)."</span><br>\
    <span>Bezug ".ReadingsNum($name,'Energy_export__kWh',0)."</span><br>\
    <span>Einspeisung ".ReadingsNum($name,'Energy_import__kWh',0)."</span>"\
}
attr Battery readingList Current_Factor Power__W Energy_export__kWh Energy_import__kWh
attr Battery setList Current_Factor Power__W Energy_export__kWh Energy_import__kWh

setstate Battery 2023-09-10 14:53:54 Current_Factor -45
setstate Battery 2023-09-10 14:54:02 Energy_export__kWh 5776
setstate Battery 2023-09-10 14:32:06 Energy_import__kWh 52552
setstate Battery 2023-09-10 14:39:53 Power__W 9999

Hier der Code aus devstateicon wie du ihn direkt bei dir zum Test in das Attribut eintragen kannst (falls nicht klar ist wie man den Raw-Code übernimmt):
{my $color = ReadingsNum("$name","Current_Factor",0) >= 0 ? 'green' : 'red';
"<span style='color: ".$color."'>Strom ".ReadingsNum($name,'Current_Factor',0)." A</span><br>
    <span style='color: ".$color."'>Watt ".ReadingsNum($name,'Power__W',0)."</span><br>
    <span>Bezug ".ReadingsNum($name,'Energy_export__kWh',0)."</span><br>
    <span>Einspeisung ".ReadingsNum($name,'Energy_import__kWh',0)."</span>"
}
Titel: Aw: Werte im State Rot bei Positiven Grün bei negativen Werten
Beitrag von: Tueftler1983 am 10 September 2023, 23:08:03
Vielen lieben dank, habe nur noch Rot und grün getauscht da Positive werte heißen Strom wird verbraucht und Negative Werte das Strom eingespeist wird.

Da passt das dann besser Bit den Farben.

Vielen vielen lieben dank nochmal
LG HolgerScreenshot_20230910_230513_Chrome.jpg
Titel: Aw: ***Gelöst*** Werte im State Rot bei Positiven Grün bei negativen Werten
Beitrag von: Tueftler1983 am 10 September 2023, 23:22:25
Ahh mir ist da doch noch was aufgefallen
Zitat{my $color = ReadingsNum("$name","Current_Factor",0) >= 0 ? 'green' : 'red';
"<span style='color: ".$color."'>Strom ".ReadingsNum($name,'Current_Factor',0)." A</span><br>
    <span style='color: ".$color."'>Watt ".ReadingsNum($name,'Power__W',0)."</span><br>
    <span>Bezug ".ReadingsNum($name,'Energy_export__kWh',0)."</span><br>
    <span>Einspeisung ".ReadingsNum($name,'Energy_import__kWh',0)."</span>"
}


Da sollte doch eigentlich
PowerFactor stehen da dieser ja quasi die Farbe umschaltet oder??

P.s. konnte leider nicht in Code Tags farblich makieren

LG Holger
Titel: Aw: ***Gelöst*** Werte im State Rot bei Positiven Grün bei negativen Werten
Beitrag von: TomLee am 10 September 2023, 23:40:46
ZitatP.s. konnte leider nicht in Code Tags farblich makieren

Das geht nur in quote-Tags.
Titel: Aw: ***Gelöst*** Werte im State Rot bei Positiven Grün bei negativen Werten
Beitrag von: Tueftler1983 am 10 September 2023, 23:44:48
Ahh okay, umgesetzt
Titel: Aw: ***Gelöst*** Werte im State Rot bei Positiven Grün bei negativen Werten
Beitrag von: Tueftler1983 am 03 Februar 2025, 09:56:07
Hallo, darf ich deses Thema nochmal aufgreifen?!

Wollte das ganze jetzt aufbohren auf 3 Phasen, wobei Jeweils der Gesamt aus auch die 3 Phasen unabhängig die Farbe ändern sollen wenn der Wert negativ ist bzw Positiv.

Hier werden alle 4 Werte gemeinsam durch den Gesamtwert geschaltet.
{my $color = ReadingsNum("$name","power",0) >= 0 ? 'red' : 'green';
  "<span style='color: ".$color."'>Watt ".ReadingsNum($name,'power',0)." W</span><br>
    <span style='color: ".$color."'>PH1 ".ReadingsNum($name,'power_ph1',0)." W</span><br>
    <span style='color: ".$color."'>PH2 ".ReadingsNum($name,'power_ph2',0)." W</span><br>
    <span style='color: ".$color."'>PH_3 ".ReadingsNum($name,'power_ph3',0)." W</span><br>
    <span>Zählerstand ".ReadingsNum($name,'stand',0)." kWh</span><br>
    <span>Abnahme ".ReadingsNum($name,'Verbrauch',0)." kWh</span><br>
    <span>Kosten ".ReadingsNum($name,'kosten',0)." Euro</span><br>
    <span>Kosten Vormonat ".ReadingsNum($name,'KostenVormonat',0)." Euro</span>"
}

hier mein versuch der aber kläglich scheitert

{my $color1 = ReadingsNum("$name","power",0) >= 0 ? 'red' : 'green';
  "<span style='color: ".$color."'>Watt ".ReadingsNum($name,'power_ph1',0)."</span><br>"}
{my $color2 = ReadingsNum("$name","power_ph1",0) >= 0 ? 'red' : 'green';
  "<span style='color: ".$color2."'>Watt ".ReadingsNum($name,'power_ph2',0)."</span><br>"}
{my $color3 = ReadingsNum("$name","power_ph2",0) >= 0 ? 'red' : 'green';
  "<span style='color: ".$color3."'>Watt ".ReadingsNum($name,'power',0)."</span><br>"}
{my $color4 = ReadingsNum("$name","power_ph3",0) >= 0 ? 'red' : 'green';
  "<span style='color: ".$color4."'>Watt ".ReadingsNum($name,'power_ph3',0)."</span><br>
    <span>Zählerstand ".ReadingsNum($name,'stand',0)." kWh</span><br>
    <span>Abnahme ".ReadingsNum($name,'Verbrauch',0)." kWh</span><br>
    <span>Kosten ".ReadingsNum($name,'kosten',0)." Euro</span><br>
    <span>Kosten Vormonat ".ReadingsNum($name,'KostenVerbrauch',0)." Euro</span>"

Ich dachte ich muss den einzelnen colors nummern geben um sie unterscheiden zu können.