Device Status dynamisch einfärben

Begonnen von theotherhalf, 25 Mai 2025, 10:23:08

Vorheriges Thema - Nächstes Thema

theotherhalf

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;
}
FHEM Anfänger
HM CCU2 mit diversen Komponenten als Steuerung
FHEM mit Floorplan auf Raspi 3 (Raspbian Jessie)  zur Visualisierung (Heizung, Zustände, etc.) und angeschlossenen One-Wire Sensoren
Schnittstelle CCU2 - FHEM mit HMCCU
EBUSD Applikation auf Raspi 2 mit Anbindung an Vaillant Heizung

Ralli

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.
Gruß,
Ralli

Proxmox 8.4 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.4 dev, virtualisierte RaspberryMatic (3.81.5.20250527) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.4.1) und HMW-GW, FRITZBOX 7490 (07.59), FBDECT, Siri und Alexa

Guybrush

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

theotherhalf

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))}
FHEM Anfänger
HM CCU2 mit diversen Komponenten als Steuerung
FHEM mit Floorplan auf Raspi 3 (Raspbian Jessie)  zur Visualisierung (Heizung, Zustände, etc.) und angeschlossenen One-Wire Sensoren
Schnittstelle CCU2 - FHEM mit HMCCU
EBUSD Applikation auf Raspi 2 mit Anbindung an Vaillant Heizung

Ralli

Einfach wie in deinem ersten Beitrag mit einer if-clause abfragen und setzen.
Gruß,
Ralli

Proxmox 8.4 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.4 dev, virtualisierte RaspberryMatic (3.81.5.20250527) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.4.1) und HMW-GW, FRITZBOX 7490 (07.59), FBDECT, Siri und Alexa

theotherhalf

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;
}
FHEM Anfänger
HM CCU2 mit diversen Komponenten als Steuerung
FHEM mit Floorplan auf Raspi 3 (Raspbian Jessie)  zur Visualisierung (Heizung, Zustände, etc.) und angeschlossenen One-Wire Sensoren
Schnittstelle CCU2 - FHEM mit HMCCU
EBUSD Applikation auf Raspi 2 mit Anbindung an Vaillant Heizung