Hallo...
in einem Sysstat (Drucker SNMP) habe ich ein Stateformat
Status: <span style='color:{(ReadingsVal("$name",'aktZustand','') ? "green":"red")}'>[$name:aktZustand]</span><br>
Seitenanz.: <span style='color:{(ReadingsVal("$name",'GesamtSeiten','') ? "green":"red")}'>[$name:GesamtSeiten]</span><br>
Toner: <span style='color:{(ReadingsVal("$name",'TonerStatus','') ? "green":"red")}'>[$name:TonerStatus]</span>
Der TonerStatus liefert aus einem Userreading eine 1
Ich möchte jetzt in der 3. Zeile den Text "Toner" und danach abhängig vom Reading "Tonerstatus" ein Icon message_attention oder message_ok haben.
Daran scheitere ich kläglich, egal was ich anstelle...
Gelesen habe ich alles mögliche, was ich hierzu gefunden habe im Forum, aber leider klappt nichts davon, weil ich immer wieder Fehler in der Art:
devStateIcon is not a valid regexp: Unmatched ( in regex; marked by <-- HERE in m/^(ReadingsVal( <-- HERE $name,$/ at fhem.pl line 3182
wenn ich zum Beispiel das versuche:
{my $alivecolor = 'ampel_aus@red';;$alivecolor='ampel_aus@green' if (ReadingsVal($name, "TonerStatus", "0") eq "1");;"<div>" . FW_makeImage("$alivecolor","ampel_aus") . "</div>"}
Auch das Beispiel mit dem IconDemo habe ich versucht...
Mit einem einzeiligen State klappt es, aber nicht mit drei Zeilen...ob mir jemand helfen kann, der mehr Ahnung von der richtigen Syntax hat, um dies zu erreichen?
Gruß Dusti
Versuche mal :
ZitatStatus: <span style='color:{(ReadingsVal('$name','aktZustand','') ? "green":"red")}'>[$name:aktZustand]</span><br>
Seitenanz.: <span style='color:{(ReadingsVal('$name','GesamtSeiten','') ? "green":"red")}'>[$name:GesamtSeiten]</span><br>
Toner: <span style='color:{(ReadingsVal('$name','TonerStatus','') eq '1' ? "green":"red")}'>[$name:TonerStatus]</span>
Und ich würde in den Parametern von ReadingsVal entweder nur
" oder nur
' verwenden.
Danke!
Da ändert sich leider nichts, ich habe weiterhin 3 Ampeln untereinander.
Der State in den Internals zeigt ja auch alles richtig an:
Status: <span style='color:green'>Energiesparen</span><br>
Seitenanz.: <span style='color:green'>1020</span><br>
Toner: <span style='color:green'>1</span>
Ich weiß nicht, wie ich die ersten beiden Zeilen ohne Icon darstellen kann und wie in der 3. dann noch "Toner" davor steht...
Hi,
vieleicht hilfs:
sub sub_Durchschnitt($) {
my ($Dev) = @_; my $Farbe = ""; my $STRG = "";
my $min = ReadingsVal("TC_0" . $Dev . "01","temperature_min_day", 0);
my $max = ReadingsVal("TC_0" . $Dev . "01","temperature_max_day", 0);
if ($min < 10) { $Farbe = "blue"; }
elsif ($min >= 10 and $min < 18) { $Farbe = "cyan"; }
elsif ($min >= 18 and $min < 21) { $Farbe = "green"; }
elsif ($min >= 21 and $min < 23) { $Farbe = "yellow"; }
elsif ($min >= 23) { $Farbe = "red"; }
$STRG = $STRG . FW_makeImage("ampel_aus\@red","ampel_aus") . "<span style='font-size:10px;font-weight:bold;color:" . $Farbe . ";'>" . $min . "</span>";
$STRG = $STRG ."<span style='font-size:6px;color:tan;'>°C<br></span>";
if ($max < 10) { $Farbe = "blue"; }
elsif ($max >= 10 and $max < 18) { $Farbe = "cyan"; }
elsif ($max >= 18 and $max < 21) { $Farbe = "green"; }
elsif ($max >= 21 and $max < 23) { $Farbe = "yellow"; }
elsif ($max >= 23) { $Farbe = "red"; }
$STRG = $STRG ."<span style='font-size:10px;font-weight:bold;color:" . $Farbe . ";'>" . $max . "</span>";
$STRG = $STRG ."<span style='font-size:6px;color:tan;'>°C</span>";
return $STRG;
}
mit (Zeichensatz)
sub sub_Heizung($) {
my ($Dev) = @_; my $Farbe = ""; my $VorZeichen = ""; my $STRG = "";
my $NewTemp = ReadingsVal("TC_0" . $Dev . "01","measured-temp",0);
my $OldTemp = ReadingsVal("TC_0" . $Dev . "01","old-temp",0);
if ($NewTemp < $OldTemp) { $VorZeichen = "▼"; $Farbe = "mediumblue"; }
elsif($NewTemp > $OldTemp) { $VorZeichen = "▲"; $Farbe = "red"; }
elsif($NewTemp == $OldTemp) { $VorZeichen = "●"; $Farbe = "green"; }
$NewTemp = sprintf("%.1f", $NewTemp);
$STRG = $STRG . "<span style='font-size:10px;font-weight:bold;color:" . $Farbe . ";'>" . $VorZeichen . "</span>";
if ($NewTemp < 10) { $Farbe = "blue"; }
elsif ($NewTemp >= 10 and $NewTemp < 18) { $Farbe = "cyan"; }
elsif ($NewTemp >= 18 and $NewTemp < 21) { $Farbe = "green"; }
elsif ($NewTemp >= 21 and $NewTemp < 23) { $Farbe = "yellow"; }
elsif ($NewTemp >= 23) { $Farbe = "red"; }
$STRG = $STRG . "<span style='font-size:22px; font-weight:bold; color:" . $Farbe . ";'>" . $NewTemp . "</span>";
$STRG = $STRG . "<span style='font-size:10px; font-weight:bold; color:gray;'>°C</span>";
return $STRG;
}
aufruf:
devStateIcon { sub_Durchschnitt(1)}
nur als Beispiel.....
gruss
@dusti64
Die parallele Verwendung von stateFormat und devStateIcon würde (in Deinem Fall) funktionieren:
... s. Screenshot (die Icons sind wertabhängig und können folglich auch entfallen)
attr ftuitest devStateIcon x.0:ampel_aus@red x.1:ampel_aus@green x.2:ampel_aus@blue x.*:ampel_aus@transparent
attr ftuitest stateFormat Status: <span style='color:{(ReadingsVal("$name",'x0','') ? "green":"red")}'>[$name:x0]</span>\
{('x0'.ReadingsVal("$name",'x0',''))}\
<br>\
Seitenanz.: <span style='color:{(ReadingsVal("$name",'x1','') ? "green":"red")}'>[$name:x1]</span>\
{('x1'.ReadingsVal("$name",'x1',''))}\
<br>\
Toner: <span style='color:{(ReadingsVal("$name",'x2','') ? "green":"red")}'>[$name:x2]</span>\
{('x2'.ReadingsVal("$name",'x2',''))}
Frage ist, ob Du tatsächlich den Mix aus beiden Attributen haben willst oder doch nur die DeviceOverview-Darstellung anpassen möchtest ?
Ich danke euch schon mal für die Hilfe/Anstöße und werde es mir anschauen und versuchen (y)
Gruß Dusti
Zitat von: OdfFhem am 05 Dezember 2022, 10:29:52
@dusti64
Frage ist, ob Du tatsächlich den Mix aus beiden Attributen haben willst oder doch nur die DeviceOverview-Darstellung anpassen möchtest ?
@OdfFhem
Ich möchte schon gern die ersten beiden Zeilen als Text mit dem aktuellen Status und der Anzahl, sowie die dritte ein farbiges Symbol mit dem Text Toner davor...hab aber nicht genug Ahnung von Perl dafür :-[ also ja, die DeviceOverview-Darstellung anpassen...
Edit:
Mit folgendem Code habe ich das, was ich möchte:
Stateformat
Status: <span style='color:{(ReadingsVal("$name",'aktZustand','') ? "green":"red")}'>[$name:aktZustand]</span>
<br>
Seitenanz.: <span style='color:{(ReadingsVal("$name",'GesamtSeiten','') ? "green":"red")}'>[$name:GesamtSeiten]</span>
<br>
Toner: <span style='color:{(ReadingsVal("$name",'x2','') ? "green":"red")}'</span>
{('x2'.ReadingsVal("$name",'TonerStatus',''))}
devStateIcon
x.0:it_printer@red x.1:it_printer@green x.2:it_printer@blue x.*:it_printer@transparent
und ich hoffe, dass es so richtig ist (siehe Anhang)...
Herzlichen Dank für die Hilfe @OdfFhem!
Gruß Dusti
Zitat von: dusti64 am 05 Dezember 2022, 14:07:30
und ich hoffe, dass es so richtig ist
Richtig ist ja (meistens) relativ ... wichtig dabei: es macht das, was Du willst.
stateFormat würde ich etwas straffen und den span-Zweig hinter "Toner:" entfernen ... es wird ja sowieso mit Reading x2 immer der leere String geliefert:
Status: <span style='color:{(ReadingsVal("$name",'aktZustand','') ? "green":"red")}'>[$name:aktZustand]</span><br>
Seitenanz.: <span style='color:{(ReadingsVal("$name",'GesamtSeiten','') ? "green":"red")}'>[$name:GesamtSeiten]</span><br>
Toner:
{('x2'.ReadingsVal("$name",'TonerStatus',''))}
devStateIcon würde ich ebenfalls straffen
... wenn es nur 0 bzw. 1 für das Reading TonerStatus gibt, würde ich den Rest entfernen:
x.0:it_printer@red x.1:it_printer@green
... wenn es doch noch unerwartete Werte geben könnte, dann würde ich das Unerwartete z.B. in das Warnschild übersetzen:
x.0:it_printer@red x.1:it_printer@green x.*:message_attention@orange
Zitat von: OdfFhem am 06 Dezember 2022, 10:06:36
wichtig dabei: es macht das, was Du willst.
Wenigstens mal einer :D
Hab vielen Dank, ich habs geändert (y)
Gruß Dusti