FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: theotherhalf am 25 Mai 2025, 10:23:08

Titel: Device Status dynamisch einfärben
Beitrag von: theotherhalf am 25 Mai 2025, 10:23:08
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;
}
Titel: Aw: Device Status dynamisch einfärben
Beitrag von: Ralli am 25 Mai 2025, 10:42:01
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.
Titel: Aw: Device Status dynamisch einfärben
Beitrag von: Guybrush am 25 Mai 2025, 11:02:26
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
Titel: Aw: Device Status dynamisch einfärben
Beitrag von: theotherhalf am 25 Mai 2025, 11:21:20
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))}
Titel: Aw: Device Status dynamisch einfärben
Beitrag von: Ralli am 26 Mai 2025, 08:06:18
Einfach wie in deinem ersten Beitrag mit einer if-clause abfragen und setzen.
Titel: Aw: Device Status dynamisch einfärben
Beitrag von: theotherhalf am 26 Mai 2025, 09:17:49
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;
}