FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Kai-Alfonso am 09 Oktober 2017, 13:16:18

Titel: stateformat farbiges State
Beitrag von: Kai-Alfonso am 09 Oktober 2017, 13:16:18
Hi,

ich habe auf meinem Dashboard diverse Devices und Schnittstellen zu Fhem, die ich überwache, ob Sie laufen oder ob es Probleme damit geht. Ich habe dazu habe keine Dashboard Gruppen definiert, sondern die Geräte einzeln hinzugefügt. Soweit so gut.

Ich vermute, das ich nicht den Hintergrund der einzelnen Container abhängig vom Status ändern kann, oder? Ansonsten würde es mir reichen, den state auch farbig zu ändern (Beispiel: disconnected, dann state == rot). Das müsste ja mit stateformat und ReadingVal gehen, oder?

Steh grad auf dem Schlauch, vielleicht kann mal jemand nen Schubs geben ;-)

Danke und Gruß

Kai
Titel: Antw:stateformat farbiges State
Beitrag von: ComputerZOO am 10 Oktober 2017, 13:35:25
z.B. so:

stateFormat
stateFormat
{
  if (ReadingsVal("$name", "state", "") eq "disconnected") {
    return '<font color="red">'.ReadingsVal("$name", "state", "") .'</b>';
  } else {
    return ReadingsVal("$name", "state", "");
  }
}
Titel: Antw:stateformat farbiges State
Beitrag von: Kai-Alfonso am 10 Oktober 2017, 17:59:04
Hey - danke - fehlt da nicht noch ein ) hinter disconnected?
Titel: Antw:stateformat farbiges State
Beitrag von: ComputerZOO am 11 Oktober 2017, 12:17:35
Zitat von: Kai-Alfonso am 10 Oktober 2017, 17:59:04
Hey - danke - fehlt da nicht noch ein ) hinter disconnected?

Jupp, hattest Recht, habe es oben gleich geändert.
Titel: Antw:stateformat farbiges State
Beitrag von: Astralsen am 04 März 2021, 22:12:04
Hallo liebe Fhem Gemeinde,

ich habe folgendes Problem... oder einen Wunsch: Ich möchte ein Dummy mit drei verschiedenen Werten füllen... aber jeder Text soll eine andere Farbe bekommen. Mit diesem Beispiel schaffe ich ja schon einmal zwei Farben. Aber wie bekomme ich es hin drei verschiedene  (oder mehr) Farben zu erstellen?

Hier meine Grundeinstellung:
{
  if (ReadingsVal("$name", "state", "") eq "Rasenmäher mäht!") {
    return '<font color="green">'.ReadingsVal("$name", "state", "") .'</b>';
  }else {
    return '<font color="lightgrey">'. ReadingsVal("$name", "state", "")
  }
}


jetzt möchte ich noch in Rot angezeigt bekommen wenn ein Fehler auftritt.
Ich habe keine Ahnung wie ich das erweitern kann? Und mich auch schon Stundenlang hier durch das Forum gelesen... Bei Werten die Zahlenabhängig sind funktioniert es seit Jahren bei mir...
Wer kann mir auf die Sprünge helfen??

Danke und Grüße

Christoph



Titel: Antw:stateformat farbiges State
Beitrag von: Otto123 am 04 März 2021, 22:37:46
Hi,

Du meinst sowas?
{
  if (ReadingsVal("$name", "state", "") eq "Rasenmäher mäht!") {
    return '<font color="green">'.ReadingsVal("$name", "state", "") .'</b>';
  } elsif (ReadingsVal("$name", "state", "") eq "Rasenmäher error!") {
        return '<font color="red">'.ReadingsVal("$name", "state", "") .'</b>';
  } else {
        return '<font color="lightgrey">'. ReadingsVal("$name", "state", "")
  }
}


Geht sicher alles eleganter - ich habe nur versucht Deine Frage zu verstehen. Den "Wurm" kannst Du auch verlängern ...

Gruß Otto
Titel: Antw:stateformat farbiges State
Beitrag von: Jamo am 04 März 2021, 22:38:38
Das </b> (bold) muss aber durch </font> ersetzt werden.

{
  if (ReadingsVal("$name", "state", "") eq "Rasenmäher mäht!") {
    return '<font color="green">'.ReadingsVal("$name", "state", "") .'</font>';
  } elsif (ReadingsVal("$name", "state", "") eq "disconnected")) {
    return '<font color="red">'.ReadingsVal("$name", "state", "") .'</font>';
  } else {
    return '<font color="lightgrey">'. ReadingsVal("$name", "state", "").'</font>';
  }
}

Titel: Antw:stateformat farbiges State
Beitrag von: Christoph Morrison am 04 März 2021, 22:39:01
Hallo Christoph,

Zitat von: Astralsen am 04 März 2021, 22:12:04
ich habe folgendes Problem... oder einen Wunsch: Ich möchte ein Dummy mit drei verschiedenen Werten füllen... aber jeder Text soll eine andere Farbe bekommen. Mit diesem Beispiel schaffe ich ja schon einmal zwei Farben. Aber wie bekomme ich es hin drei verschiedene  (oder mehr) Farben zu erstellen?

Hier meine Grundeinstellung:
{
  if (ReadingsVal("$name", "state", "") eq "Rasenmäher mäht!") {
    return '<font color="green">'.ReadingsVal("$name", "state", "") .'</b>';
  }else {
    return '<font color="lightgrey">'. ReadingsVal("$name", "state", "")
  }
}


jetzt möchte ich noch in Rot angezeigt bekommen wenn ein Fehler auftritt.
Ich habe keine Ahnung wie ich das erweitern kann? Und mich auch schon Stundenlang hier durch das Forum gelesen... Bei Werten die Zahlenabhängig sind funktioniert es seit Jahren bei mir...
Wer kann mir auf die Sprünge helfen??

Was sind denn die Status, die du wie formatieren willst? Ansonsten heißt das Stichwort elsif.

(Beim von dir geschriebenen Perl und HTML krauselt es aber auch die Fußnägel hoch ;-))
Titel: Antw:stateformat farbiges State
Beitrag von: Astralsen am 05 März 2021, 08:00:28
Super vielen Dank !

Das mit elsif hatte ich auch probiert aber ich hatte es aber "else if" geschrieben.... :-[
Die Lösung von Otto123 funktioniert am besten für mich.

Ich wollte eine Art Ampel Text machen: Normale Farbe wenn der Mäher in der Station steht -->also weiß.
Der Text wird grün wenn der Mäher arbeitet, und rot wenn der Mäher ein Problem hat.
Aber ich habe auch noch andere Einsatzmöglichkeiten "gefunden" ;-)

hier zB für unsere Balkontür:

{
  if (ReadingsVal("$name", "state", "") eq "Balkontür Kipp") {
    return '<font color="orange">'.ReadingsVal("$name", "state", "") .'</b>';
  } elsif (ReadingsVal("$name", "state", "") eq "Balkontür Auf") {
        return '<font color="red">'.ReadingsVal("$name", "state", "") .'</b>';
  } else {
        return '<font color="lightgrey">'. ReadingsVal("$name", "state", "")
  }
}


Besten Dank Euch für den Anschubser!

Grüße aus Hamburg
Christoph
Titel: Antw:stateformat farbiges State
Beitrag von: Christoph Morrison am 05 März 2021, 10:37:47
Guck mal, ich mach das so:


reachable_formatted:activity:.+ {
    my $reachable = ::ReadingsVal($name, q(activity), undef);
    my @values = ($reachable)
        ?   ($reachable eq q(alive))
            ?   qw(green Erreichbar)
            :   (q(red), q(Nicht erreichbar))
        :   qw(red Unbekannt);

    return sprintf q(<span style="color: %s";>%s</span>), @values;
}


Vorteil: Man spart sich die Wiederholung des HTML-Teils und man muss nicht mehrfach ReadingsVal aufrufen.
Titel: Antw:stateformat farbiges State
Beitrag von: Otto123 am 05 März 2021, 10:49:11
ZitatDie Lösung von Otto123 funktioniert am besten für mich.
Ich hatte nur Deinen Code "hochinterpoliert"
@Astralsen Deine HTML Tags sind dabei wirklich bedenklich, das musst Du ändern. Das die am Ende funktionieren ist wahrscheinlich der Gutmütigkeit eines Webinterfaces und der Browserinterpretation zu verdanken. :)
Die Lösung Deines Namenvetters ist weitaus eleganter. Falls die für dich nicht nachvollziehbar ist, dann frag einfach - aber ändere wenigstens Deine Tags so, dass es "vorn und hinten" passt! Siehe Post von Jamo.
Titel: Antw:stateformat farbiges State
Beitrag von: Astralsen am 05 März 2021, 11:15:42
Danke für die Hinweise.
Ich habe Jamo´s Tipp mit "reingearbeitet" und es funktioniert noch ;-)
Leider habe ich absolut kein Ahnung von Perl oder HTML deswegen bastle ich immer bis das Ergebnis passt... ::)

Ich werde aber auch noch einmal die Variante von Christoph Morrison versuchen....

Titel: Antw:stateformat farbiges State
Beitrag von: Otto123 am 05 März 2021, 11:24:42
Zitat von: Astralsen am 05 März 2021, 11:15:42
Leider habe ich absolut kein Ahnung von Perl oder HTML deswegen bastle ich immer bis das Ergebnis passt... ::)
Ist ja auch in Ordnung. Was mir immer hilft
https://www.w3schools.com/html/default.asp
https://perldoc.perl.org/index
Titel: Aw: stateformat farbiges State
Beitrag von: fhem@supergut am 18 August 2023, 07:45:25
Zitat von: Christoph Morrison am 05 März 2021, 10:37:47Guck mal, ich mach das so:

reachable_formatted:activity:.+ {
    my $reachable = ::ReadingsVal($name, q(activity), undef);
    my @values = ($reachable)
        ?   ($reachable eq q(alive))
            ?   qw(green Erreichbar)
            :   (q(red), q(Nicht erreichbar))
        :   qw(red Unbekannt);

    return sprintf q(<span style="color: %s";>%s</span>), @values;
}

Vorteil: Man spart sich die Wiederholung des HTML-Teils und man muss nicht mehrfach ReadingsVal aufrufen.

Äh, wie bitte? Kannst du das mal erklären? Als Beispeil vielleicht: Readname "Battery_charge" und als Wert grösser 25 -> grün, kleiner 26 -> rot?
Titel: Aw: stateformat farbiges State
Beitrag von: Christoph Morrison am 18 August 2023, 15:20:20
Im Prinzip ist das ein doppeltes Ternär-Operator-Statement, das statt einer Variable eine Liste benutzt.

@values is gleich grün/Erreichbar, wenn $reachable existiert und alive ist, wenn es existiert und nicht alive ist, dann rot/Nicht erreichbar. Wenn ReadingsVal() keinen Wert lieft, wird rot/Unbekannt zurückgegeben.

sprintf macht aus der Liste dann einen String mit zwei ersetzten Werten, einmal für Text-Status und einmal für  die Textfarbe.

battery_formatted:Battery_charge:.+ {
    my $battery = ::ReadingsVal($name, q(Battery_charge), undef);
    my @values = ($battery)  ?  ($battery >= 26)
        ?  qw(green Ok)
        :  qw(red Wechseln)
        :  qw(red Unbekannt);

    return sprintf q(<span style="color: %s";>%s</span>), @values;
}

Titel: Aw: stateformat farbiges State
Beitrag von: Tueftler1983 am 10 September 2023, 08:08:02
Hallo zusammen, hoffe ich darf vier Mal mit rein grätschen.

Ich würde gerne die Daten meiner USB abhängig vom Zustand (OL Online und OB On Battery) in Grün bzw Rot darstellen.

Hatte es dazu so versucht was aber mit einer Fehlermeldung und fehlerhaften Darstellung scheitert.
{
  if (ReadingsVal("$name", "state", "") eq "OL") {
    return '<font color="green">'.ReadingsVal("$name", "state", "") .'</b>';
  } elsif (ReadingsVal("$name", "state", "") eq "OB") {
        return '<font color="red">'.ReadingsVal("$name", "state", "") .'</b>';
  } else {
        return '<font color="lightgrey">'. ReadingsVal("$name", "state", "")
  }
}
An ei Screenshots der Meldung und der Darstellung
LG holgerScreenshot_20230910_075824_Chrome.jpgScreenshot_20230910_080549_Chrome.jpg 


Es liegt wohl an meinem stateFormat das sieht ohne den Farbteil so aus

1:state
<br>
Batteriespannung battery.voltage V
<br>
Eingangsspannung input.voltage V
<br>
USV Load ups.load %
<br>
USV Temperatur ups.temperature °C
Titel: Aw: stateformat farbiges State
Beitrag von: Otto123 am 10 September 2023, 09:27:59
Du kannst entweder Deine bisherige Variante nehmen oder alles komplett durch Perlcode ersetzen. Was Du jetzt gemacht hast ist nur Code und Text zusammenkopiert - auch noch eine schlechte Variante aus allen bisherigen Antworten.  :o
Titel: Aw: stateformat farbiges State
Beitrag von: Tueftler1983 am 10 September 2023, 10:32:30
Ja, aber wie mache ich das?
Ich möchte halt die Darstellung wie ich sie habe aber halt zusätzlich das die Werte der Readings in Rot bzw Grün sind je nach State der USV.

Kannst du mir da helfen, ich verstehe den Aufbau nicht wirklich. Hoffe das ich es dann nachher auch noch für andere Sachen nehmen kann wie z.b. den Stromzähler

LG holger
Titel: Aw: stateformat farbiges State
Beitrag von: Otto123 am 10 September 2023, 11:22:46
Ich habe zur Veranschaulichung mal Christophs Vorschlag in einem kompletten Beispiel umgesetzt (Raw Definition):
defmod Battery dummy
attr Battery readingList Battery_charge
attr Battery setList Battery_charge
attr Battery stateFormat battery_formatted
attr Battery userReadings battery_formatted:Battery_charge:.+ {\
    my $battery = ::ReadingsVal($name, q(Battery_charge), undef);;\
    my @values = ($battery)  ?  ($battery >= 26)\
        ?  qw(green Ok)\
        :  qw(red Wechseln)\
        :  qw(red Unbekannt);;\
\
    return sprintf q(<span style="color: %s";;>%s</span>), @values;;\
}
Vorschlag: Du baust Dir nach dem Schema ein userReadings in deinem Device und schreibst den Namen des Readings einfach in dein stateFormat.
Titel: Aw: stateformat farbiges State
Beitrag von: Christoph Morrison am 10 September 2023, 11:38:27
Und wenn du ganz faul bist, legst du dir das als Subroutine in deine 99_MyUtils an und hast dann überall die Möglichkeit, einfach einen farbig formatierten State zu haben.
Titel: Aw: stateformat farbiges State
Beitrag von: Tueftler1983 am 10 September 2023, 11:41:27
Zitat von: Christoph Morrison am 10 September 2023, 11:38:27Und wenn du ganz faul bist, legst du dir das als Subroutine in deine 99_MyUtils an und hast dann überall die Möglichkeit, einfach einen farbig formatierten State zu haben.

und davon verstehe ich noch weniger,
aber ich versuche heute noch Ottos Vorschlag um zu setzen

lieben dank an euch
Titel: Aw: stateformat farbiges State
Beitrag von: TomLee am 10 September 2023, 12:16:32
Richtig ungern (weil ich die negative Eigenschaft hab nachtragend zu sein), anbei ein Beispiel es mit einem devstateicon (statt Text) und regulären Ausdrücken umzusetzen:

defmod Battery dummy
attr Battery devStateIcon ([0-9]{1}|1[0-9]{1}|2[0-5]{1}):10px-kreis-rot (2[6-9]{1}|[3-9][0-9]{1}|100):10px-kreis-gruen
attr Battery readingList Battery_charge
attr Battery setList Battery_charge:slider,1,1,100,1
attr Battery stateFormat Battery_charge

setstate Battery 8
setstate Battery 2023-09-10 12:05:46 Battery_charge 8
Titel: Aw: stateformat farbiges State
Beitrag von: Tueftler1983 am 10 September 2023, 12:34:28
Zitat von: TomLee am 10 September 2023, 12:16:32Richtig ungern (weil ich die negative Eigenschaft hab nachtragend zu sein),
Oh oh das hört sich so an als hätte ich da mal Mist gebaut.
Weiß jetzt Grade nicht wo aber ich räume Fehler gerne ein und stehe dazu.
Wenn ich dir irgendwo auf die Füße getreten bin tut es mir leid
Titel: Aw: stateformat farbiges State
Beitrag von: Tueftler1983 am 10 September 2023, 12:48:26
Bei deinem Beispiel verstehe ich nicht warum der grüne Punkt ab 25 angezeigt wird bis 30 dann zahlen Werte bis 59 und ab 60 wieder der grüne punkt
Titel: Aw: stateformat farbiges State
Beitrag von: TomLee am 10 September 2023, 12:51:09
Weil ich mein Beispiel im nachhinein falsch korrigiert habe  ::) , habs gerade angepasst.
Titel: Aw: stateformat farbiges State
Beitrag von: Tueftler1983 am 10 September 2023, 12:56:37
Ahh moment
(2[4-9]{1}|[6-9][0-9]{1}|100) zerlegt ist:
Erster Bereich: 24-29
Zweiter Bereich 60-99
Dritter Bereich 100
In diesen soll der grüne Punkt erscheinen.

Beim Roten
0-9
10-19
20-24

Jetzt wird ein Schuh draus
Titel: Aw: stateformat farbiges State
Beitrag von: TomLee am 10 September 2023, 12:58:01
Ja fast, weil ich es nochmal korrigieren musste, jetzt sollte es passen.
Titel: Aw: stateformat farbiges State
Beitrag von: Tueftler1983 am 10 September 2023, 13:05:04
Okay das würde mir eventuell bei meinem Zähler Problem helfen der je nach Leistung der Solaranlage auch mal negative Werte anzeigt.
Aber verstehe nicht wie ich daraus abhängig davon ob die USV und darin das Reading state OL oder OB ist alle Daten Grün oder Rot einfärbe.
Das DevStateIcon soll ja auch erhalten bleiben
Titel: Aw: stateformat farbiges State
Beitrag von: Tueftler1983 am 10 September 2023, 13:11:58
Zitat von: TomLee am 10 September 2023, 12:58:01Ja fast, weil ich es nochmal korrigieren musste, jetzt sollte es passen.

Vielen lieben dank... irgendwie will das nicht mehr so einfach in meinen kopf wie vor 10 Jahren noch.
bin dann immer dankbar wenn mich jemand an die Hand nimmt
Titel: Aw: stateformat farbiges State
Beitrag von: TomLee am 10 September 2023, 16:34:00
ZitatAber verstehe nicht wie ich daraus abhängig davon ob die USV und darin das Reading state OL oder OB ist alle Daten Grün oder Rot einfärbe.
Das DevStateIcon soll ja auch erhalten bleiben

Stimmt, hatte mich von Ottos Beispiel verleiten lassen und nicht auf die eigentliche Fragestellung eingegangen.

Ganz verstehen tu ich es aber trotzdem noch nicht.
Soll nur state eingefärbt werden oder der ganze Text in der Deviceoverview ?

Hier nochmal ein Beispiel für in das Attribut devstateicon, welches nur state einfärbt, alles einzufärben bekommst auch selbst hin.

{my %val2color = (
'OL' => 'green',
'OB' => 'red',);
my $color = $val2color{ReadingsVal("$name", 'state', 'error')};
$color = 'lightgrey' if !$val2color{ReadingsVal("$name", 'state', 'error')};

return "<span style='color: ".$color."'>".ReadingsVal($name,'state',0)."</span><br>
<span>Batteriespannung ".ReadingsNum($name,'battery.voltage',0)." A</span><br>
    <span>Eingangsspannung ".ReadingsNum($name,'input.voltage',0)."</span><br>
    <span>USV Load ".ReadingsNum($name,'ups.load',0)."</span><br>
    <span>Temperatur ".ReadingsNum($name,'ups.temperature',0)."</span>"
}

Zu beachten ist, sollte STATE in deinem Device mehrzeilig sein, wegen deinem bisher mehrzeiligen stateformat, dann wird mein Code mehrfach angezeigt (je Zeile in STATE einmal), um das zu beheben/bereinigen müsstest du das Internal STATE löschen -> mit {delete($defs{USV}{STATE})} in der Kommandozeile, oben, ginge das.
Titel: Aw: stateformat farbiges State
Beitrag von: Tueftler1983 am 10 September 2023, 20:20:06
STATE ist mehrzeilig siehe Screenshot.

Mir würde es reichen wenn nur die 4 Readings:
battery.voltage
input.voltage
ups.load
ups.temperature
Eingefärbt wären
Das 5. Reading "state" wird ja als DevStateIcon dargestellt (OL ein Grüner Stecker, OB als Rote Batterie)


Ich werde es später Testen und sage aber schonmal vielen lieben dank.
Screenshot_20230910_200144_Chrome.jpgScreenshot_20230910_200225_Chrome.jpg 
Titel: Aw: stateformat farbiges State
Beitrag von: TomLee am 10 September 2023, 20:30:38
Ohne List oder vollständige (mit den setstate Zeilen) Raw-Definition, verliert man die Lust weiter zu raten/ sich weiter mit zu beschäftigen, welches icon das nun ist wo du verwendest in devstateicon.
Titel: Aw: stateformat farbiges State
Beitrag von: Tueftler1983 am 10 September 2023, 20:35:07
Sorry dachte das wäre zu unübersichtlich

define USV NUT mustek 127.0.0.1:3493
attr USV asReadings battery.charge,battery.runtime,input.voltage,ups.load,ups.power,ups.realpower,battery.voltage,ups.temperature
attr USV devStateIcon 1.OB:USV_battery@red 1.OL:hue_filled_plug@green
attr USV disable 0
attr USV fp_Grundriss 642,605,0,USV,
attr USV pollState 10
attr USV pollVal 60
attr USV room Strom
attr USV stateFormat 1:state\
<br>\
Batteriespannung battery.voltage V\
<br>\
Eingangsspannung input.voltage V\
<br>\
USV Load ups.load %\
<br>\
USV Temperatur ups.temperature °C\
\
\
\

#   DEF        mustek 127.0.0.1:3493
#   DeviceName 127.0.0.1:3493
#   FD         25
#   FUUID      64ee55aa-f33f-91a4-86ad-f675ec87952896ec
#   NAME       USV
#   NR         154
#   PARTIAL   
#   STATE      1:OL
#<br>
#Batteriespannung 13.10 V
#<br>
#Eingangsspannung 227.6 V
#<br>
#USV Load 32 %
#<br>
#USV Temperatur 25.0 °C
#
#
#
#
#   TYPE       NUT
#   UpsName    mustek
#   buffer     
#   eventCount 10431
#   lastStatus OL
#   pollValState 0
#   READINGS:
#     2023-09-10 20:33:03   battery.voltage 13.10
#     2023-09-10 20:33:03   input.voltage   227.6
#     2023-09-10 20:33:53   state           OL
#     2023-09-10 20:33:03   ups.load        32
#     2023-09-10 20:33:03   ups.temperature 25.0
#   helper:
#     battery.voltage 13.10
#     device.type ups
#     driver.name nutdrv_qx
#     driver.parameter.pollfreq 30
#     driver.parameter.pollinterval 2
#     driver.parameter.port auto
#     driver.parameter.synchronous no
#     driver.version 2.7.4
#     driver.version.data Q1 0.07
#     driver.version.internal 0.28
#     input.frequency 50.1
#     input.voltage 227.6
#     input.voltage.fault 227.6
#     output.voltage 227.7
#     ups.beeper.status enabled
#     ups.delay.shutdown 30
#     ups.delay.start 180
#     ups.load   32
#     ups.productid 5161
#     ups.status OL
#     ups.temperature 25.0
#     ups.type   offline / line interactive
#     ups.vendorid 0665
#
setstate USV 1:OL\
<br>\
Batteriespannung 13.10 V\
<br>\
Eingangsspannung 227.6 V\
<br>\
USV Load 32 %\
<br>\
USV Temperatur 25.0 °C\
\
\
\

setstate USV 2023-09-10 20:33:03 battery.voltage 13.10
setstate USV 2023-09-10 20:33:03 input.voltage 227.6
setstate USV 2023-09-10 20:33:53 state OL
setstate USV 2023-09-10 20:33:03 ups.load 32
setstate USV 2023-09-10 20:33:03 ups.temperature 25.0

Internals:
   DEF        mustek 127.0.0.1:3493
   DeviceName 127.0.0.1:3493
   FD         25
   FUUID      64ee55aa-f33f-91a4-86ad-f675ec87952896ec
   NAME       USV
   NR         154
   PARTIAL   
   STATE      1:OL
<br>
Batteriespannung 13.10 V
<br>
Eingangsspannung 228.7 V
<br>
USV Load 32 %
<br>
USV Temperatur 25.0 °C




   TYPE       NUT
   UpsName    mustek
   buffer     
   eventCount 10436
   lastStatus OL
   pollValState 40
   READINGS:
     2023-09-10 20:34:03   battery.voltage 13.10
     2023-09-10 20:34:03   input.voltage   228.7
     2023-09-10 20:34:33   state           OL
     2023-09-10 20:34:03   ups.load        32
     2023-09-10 20:34:03   ups.temperature 25.0
   helper:
     battery.voltage 13.10
     device.type ups
     driver.name nutdrv_qx
     driver.parameter.pollfreq 30
     driver.parameter.pollinterval 2
     driver.parameter.port auto
     driver.parameter.synchronous no
     driver.version 2.7.4
     driver.version.data Q1 0.07
     driver.version.internal 0.28
     input.frequency 50.1
     input.voltage 228.7
     input.voltage.fault 228.7
     output.voltage 228.6
     ups.beeper.status enabled
     ups.delay.shutdown 30
     ups.delay.start 180
     ups.load   32
     ups.productid 5161
     ups.status OL
     ups.temperature 25.0
     ups.type   offline / line interactive
     ups.vendorid 0665
Attributes:
   asReadings battery.charge,battery.runtime,input.voltage,ups.load,ups.power,ups.realpower,battery.voltage,ups.temperature
   devStateIcon 1.OB:USV_battery@red 1.OL:hue_filled_plug@green
   disable    0
   fp_Grundriss 642,605,0,USV,
   pollState  10
   pollVal    60
   room       Strom
   stateFormat 1:state
<br>
Batteriespannung battery.voltage V
<br>
Eingangsspannung input.voltage V
<br>
USV Load ups.load %
<br>
USV Temperatur ups.temperature °C


Titel: Aw: stateformat farbiges State
Beitrag von: TomLee am 10 September 2023, 21:05:22
Ok, du verwendest zwei Icons, das USV_battery gibts auf meiner Test-Installation nicht, da muss ich mich mit beschäftigen warum.

Wenn du nur ein Icon verwendet hättest könnte mein Beispiel so aussehen:

{my %val2color = (
'OL' => 'green',
'OB' => 'red',);
my $color = $val2color{ReadingsVal("$name", 'state', 'error')};
$color = 'lightgrey' if !$val2color{ReadingsVal("$name", 'state', 'error')};

return "<span>".FW_makeImage("hue_filled_plug\@$color",'')."</span><br>
<span>Batteriespannung ".ReadingsNum($name,'battery.voltage',0)." A</span><br>
    <span>Eingangsspannung ".ReadingsNum($name,'input.voltage',0)."</span><br>
    <span>USV Load ".ReadingsNum($name,'ups.load',0)."</span><br>
    <span>Temperatur ".ReadingsNum($name,'ups.temperature',0)."</span>"
}

Da du zwei verschiedene verwendest und für den dritten Zustand gar kein Icon angegeben hast, muss ich erstmal weiter grübeln, weiß aber nicht ob das heute noch was wird.
Titel: Aw: stateformat farbiges State
Beitrag von: Tueftler1983 am 10 September 2023, 21:51:19
Das Icon kannst du nicht haben,ist von mir da ich nichts passendes gefunden habe, sind im anhang, das 3. Icon kann das sein "message_attention" in Orange
Titel: Aw: stateformat farbiges State
Beitrag von: TomLee am 10 September 2023, 22:09:10
Mein Beispiel sollte dann eigentlich so bei Dir klappen:

{my %val2color = (
'OL' => 'hue_filled_plug@green',
'OB' => 'USV_battery@red',);
my $color = $val2color{ReadingsVal("$name", 'state', 'error')};
$color = 'USV_online@lightgrey' if !$val2color{ReadingsVal("$name", 'state', 'error')};

return "<span>".FW_makeImage("$color",'')."</span><br>
<span>Batteriespannung ".ReadingsNum($name,'battery.voltage',0)." A</span><br>
    <span>Eingangsspannung ".ReadingsNum($name,'input.voltage',0)."</span><br>
    <span>USV Load ".ReadingsNum($name,'ups.load',0)."</span><br>
    <span>Temperatur ".ReadingsNum($name,'ups.temperature',0)."</span>"
}
Titel: Aw: stateformat farbiges State
Beitrag von: Tueftler1983 am 10 September 2023, 22:12:59
Sorry wenn ich jetzt doof Frage.
Soll das als userReading oder in stateFormat??
Titel: Aw: stateformat farbiges State
Beitrag von: TomLee am 10 September 2023, 22:20:27
Mach ein copy USV USVTest in der Kommandozeile.

Lösche stateFormat in dem USVTest-Device, ersetze deinen Code in devstaticon durch meinen gezeigten und führe ein {delete($defs{USVTest}{STATE})} in der Kommandozeile aus.
Titel: Aw: stateformat farbiges State
Beitrag von: Tueftler1983 am 10 September 2023, 22:27:02
Sehe leider von der Optik keinen Unterschied!
Screenshot_20230910_222458_Chrome.jpg

Was brauchst du von mir? Wie kann ich dir helfen 
Titel: Aw: stateformat farbiges State
Beitrag von: TomLee am 10 September 2023, 22:31:43
Wenn das jetzt nicht passt, vermute ich, das Ziel war den ganzen "Text" in der DeviceOverview je nach Zustand von state einzufärben ?
Titel: Aw: stateformat farbiges State
Beitrag von: Tueftler1983 am 10 September 2023, 22:38:56
Also mir würde es echt reichen wenn das Icon und die Werte eingefärbt wären die Texte
Batteriespannung
Eingangsspannung
USV Load
USV Temperatur
Müssen nicht farbig werden, wäre aber nicht schlimm.
Titel: Aw: stateformat farbiges State
Beitrag von: TomLee am 10 September 2023, 22:50:48
Das nächste mal erwarte ich bitte von Dir das du dich mit den gezeigten Vorschlägen beschäftigst und nicht alles aus der Nase ziehen lässt:

{my %val2color = (
'OL' => 'hue_filled_plug@green',
'OB' => 'people_sensor@red',);
my $color = $val2color{ReadingsVal("$name", 'state', 'error')};
$color = 'control_home@lightgrey' if !$val2color{ReadingsVal("$name", 'state', 'error')};
my $coltext = substr($color, index($color, "@") + 1);

return "<span>".FW_makeImage("$color",'')."</span><br>
<span>Batteriespannung </span><span style='color: ".$coltext."'>".ReadingsNum($name,'battery.voltage',0)." A</span><br>
    <span>Eingangsspannung </span><span style='color: ".$coltext."'>".ReadingsNum($name,'input.voltage',0)."</span><br>
    <span>USV Load </span><span style='color: ".$coltext."'>".ReadingsNum($name,'ups.load',0)."</span><br>
    <span>Temperatur </span><span style='color: ".$coltext."'>".ReadingsNum($name,'ups.temperature',0)."</span>"
}
Titel: Aw: stateformat farbiges State
Beitrag von: Tueftler1983 am 10 September 2023, 22:57:23
Super, vielen vielen herzlichen Dank, jetzt heißt es den Code verstehen und für noch ein zwei andere Sachen anpassen.

Danke das du so geduldig bist, warst. Ich finde das sieht jetzt soviel geiler aus und man kann den Status viel schneller erkennen.

Danke danke danke im übrigen für beide!!!
Titel: Aw: stateformat farbiges State
Beitrag von: Tueftler1983 am 11 September 2023, 07:22:07
So habe die Anzeige noch um die Einheiten V % Und °C ergänzt macht jetzt echt was her auch im Floorplan