FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: lern_noch am 20 Februar 2025, 15:00:57

Titel: [gelöst] devStateIcon in Abhängigkeit von Temperaturwert in "state"
Beitrag von: lern_noch am 20 Februar 2025, 15:00:57
Ich verzweifle gerade an einer vermutlich sehr einfach zu lösenden Aufgabe.

Ich habe einen Dummy Netz_Temp der alle 300 Sekunden die aktuelle Temperatur eines Netzteils zugewiesen erhält.
Funktioniert soweit wie immer, kann ich auch in DOIF etc. weiter verarbeiten.

Ich rufe das devStateIcon-Menue auf und will einfach bis 34 Grad das Icon1 und darüber das Icon2 angezeigt bekommen.

Meine Versuch mit Icon1 <=34 und im zweiten Schritt für das Icon2 >34 zeigen keine Wirkung.
Versuche mit [] werden abgewiesen, ReadingsVal() war auch nicht erfolgreich.

Bei meiner Suche habe ich Perl-Möglichkeiten gefunden, die je nach Zahlanfang 1 - 9 andere Icons anzeigen, ich suche jedoch eine Möglichkeit bei einem Schwellenwert das Icon zu ändern.

Kann mir bitte jemand einen Schubs in die richtige Richtung geben. 
Titel: Aw: devStateIcon in Abhängigkeit von Temperaturwert in "state"
Beitrag von: eisman am 20 Februar 2025, 15:26:03
hi

DevStateIcon nach Zahlenbereichen ändern (https://forum.fhem.de/index.php?topic=119785.0)

devStateIcon mit Icon UND Text? (https://forum.fhem.de/index.php?topic=38332.0)


gruss
Titel: Aw: devStateIcon in Abhängigkeit von Temperaturwert in "state"
Beitrag von: lern_noch am 20 Februar 2025, 16:00:50
Besten Dank für den Hinweis, den Link hatte ich schon gesehen, aber nicht vernünftig gelesen :-(

Der Perl-Link zeigt genau die Lösung, die ich suche:

attr Pflanze1 devStateIcon {'sani_irrigation@' . (ReadingsNum($name, 'moisture', 0) <= 10 ? 'red' : (ReadingsNum($name, 'moisture', 0) <= 20 ? 'yellow' : 'green'))}

Ich habe diesen Befehl per RAW eingefügt und danach wie folgt für meine Zwecke geändert:

{'sani_irrigation@' . (ReadingsNum($name, 'state', 0) <= 10 ? 'red' : (ReadingsNum($name, 'state', 0) <= 20 ? 'yellow' : 'green'))}

Wenn ich das in ReadingsNum richtig lese, dann nimmt $name das aktuelle device und 'state' den Wert aus <state>. Selbst wenn kein Wert gefunden wird wird 0 eingesetzt, also die Farbe ROT gesetzt.

Trotzdem wird immer noch der aktuelle Wert angezeigt und kein Icon.

Was fehlt noch?

Titel: Aw: devStateIcon in Abhängigkeit von Temperaturwert in "state"
Beitrag von: TomLee am 20 Februar 2025, 16:09:09
Hallo,

ZitatWas fehlt noch?

Die Erkenntnis das in Perl nicht mehr einfach nur die Angabe des Iconnamen reicht  :P

https://wiki.fhem.de/wiki/DevelopmentFHEMWEB-API#FW_makeImage

Gruß Thomas
Titel: Aw: devStateIcon in Abhängigkeit von Temperaturwert in "state"
Beitrag von: lern_noch am 20 Februar 2025, 16:17:57
Das war des Rätsels Lösung!! Besten Dank!
Die Unterstützung hier ist deutlich besser und fachkundiger als bei mancher bezahlten Hotline!!

Hier der korrekte Ausdruck zum weiteren Kopieren bei Bedarf:

{FW_makeImage('Abfalltonne@' . (ReadingsNum($name, 'state', 0) <= 10 ? 'red' : (ReadingsNum($name, 'state', 0) <= 20 ? 'yellow' : 'green')))}

Abfalltonne@ muss dann gegen das eigene Symbol getauscht werden. (Mauszeiger auf Symbol lassen zeigt den Namen)
Grenzwerte und Farben nach Belieben anpassen.
fertig
Titel: Aw: [gelöst] devStateIcon in Abhängigkeit von Temperaturwert in "state"
Beitrag von: eisman am 20 Februar 2025, 16:43:24
hi,

es geht auch so:

devStateIcon { my $PCT = ReadingsVal($name,"ValvePosition",0); VentilHeizung($PCT);}
sub VentilHeizung($) {
  my ($pct) = @_;
 
  if    ($pct >=  90 and $pct < 101) { return  ".*:sani_heating_level_100@#FF0000"; }
  elsif ($pct >=  80 and $pct <  91) { return  ".*:sani_heating_level_90@#FF0000";  }
  elsif ($pct >=  70 and $pct <  81) { return  ".*:sani_heating_level_80@#FF0000";  }
  elsif ($pct >=  60 and $pct <  71) { return  ".*:sani_heating_level_70@#FF0000";  }
  elsif ($pct >=  50 and $pct <  61) { return  ".*:sani_heating_level_60@#FF0000";  }
  elsif ($pct >=  40 and $pct <  51) { return  ".*:sani_heating_level_50@#FFFF00";  }
  elsif ($pct >=  30 and $pct <  41) { return  ".*:sani_heating_level_40@#00FF00";  }
  elsif ($pct >=  20 and $pct <  31) { return  ".*:sani_heating_level_30@#00FFFF";  }
  elsif ($pct >=  10 and $pct <  21) { return  ".*:sani_heating_level_20@#0000FF";  }
  elsif ($pct >=   1 and $pct <  11) { return  ".*:sani_heating_level_10@#0000FF";  }
  elsif ($pct ==   0 )               { return  ".*:sani_heating_level_0@#8C8C8C";   }
}

gruss
Titel: Aw: [gelöst] devStateIcon in Abhängigkeit von Temperaturwert in "state"
Beitrag von: TomLee am 20 Februar 2025, 17:04:31
Ja es geht auch "granularer"  ;D , aber dann bitte nicht so wie es der letzte Vorschlag zeigt:
{FW_makeImage('Abfalltonne@#'.substr(Color::pahColor(0,15,30,ReadingsNum($name,'moisture',0),[0,255,0, 127,255,0, 255,255,0, 255,165,0, 255,0,0]),0,6))}
https://wiki.fhem.de/wiki/Color#Farbskala_mit_Color::pahColor