Guten Morgen,
ich möchte gerne den Status einiger Devices, welche ich in einem Floorplan nutze, abhängig vom Zustand einfärben.
Leider funktioniert es über devstateicon nicht so wie ich es probierte.
Könnt ihr mir einen Hinweis geben wo der Fehler liegt? Wie weise ich die Farbe dann dem eigentlichen Status zu? Der Status selbst ist Text "auf" und "zu".
{
my $status = ReadingsVal($name,"state",0);
if($status eq "closed")
{
# grün
$status .= "<span style='color:#63d977'>$status</span>";
}
elsif($status eq "open")
{
# rot
$status .= "<span style='color:#f94362'>$status</span>";
}
return $status;
}
Nimm stateFormat dafür. Und nicht $status .= ... sondern $status = ...
Mit .= erweiterst du einen bereits bestehenden String. Du willst ihn hier aber komplett neu setzen und integrierst dabei ja auch den bisherigen Wert von $status.
wenn du das mit icons machen willst geht das sehr einfach über devStateIcon
devStateIcon closed:window_closed@green open:window_open@red
window_* musst du durch für dich passende svg icons austauschen. fhem hat ja einiges bereits onboard dabei
Zitat von: Ralli am 25 Mai 2025, 10:42:01Nimm stateFormat dafür. Und nicht $status .= ... sondern $status = ...
Mit .= erweiterst du einen bereits bestehenden String. Du willst ihn hier aber komplett neu setzen und integrierst dabei ja auch den bisherigen Wert von $status.
Prima, ohne . klappt es jetzt wunderbar! Danke!
Könnt ihr mir noch helfen eine vorhandene Zahl, abhängig vom Wert einzufärben? Sie ist bereits mit stateFormat beschrieben:
{sprintf('%.1f %%',ReadingsVal($name,'state',0))}
Einfach wie in deinem ersten Beitrag mit einer if-clause abfragen und setzen.
Zitat von: Ralli am 26 Mai 2025, 08:06:18Einfach wie in deinem ersten Beitrag mit einer if-clause abfragen und setzen.
Die Logik als solche ist mir klar. Ich bin nur unschlüssig, wie ich die heutige Formatierung (eine Dezimalstelle und das Prozentzeichen) da hineinsetze.
{
my $status = ReadingsVal($name,"state",0);
if($status < 65)
{
# grün
$status = "<span style='color:#32cd32;font-weight:bold;font-size:24px'>$status</span>";
{sprintf "%.1f %%", ReadingsVal($name, "state", 0)};
}
elsif($status > 65)
{
# rot
$status = "<span style='color:#f94362;font-size:24px'>$status</span>";
{sprintf "%.1f %%", ReadingsVal($name, "state", 0)};
}
return $status;
}