[gelöst] devStateIcon in Abhängigkeit von Temperaturwert in "state"

Begonnen von lern_noch, 20 Februar 2025, 15:00:57

Vorheriges Thema - Nächstes Thema

lern_noch

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. 

eisman

1x FHEM Debian, Homematic,ZigBee,FS20 / 1X Raspberry, ConBee / 7x ESP
1x FHEM Debian, Homematic,Z2M             / 1X Raspberry, ConBee / 6x ESP
1x FHEM Debian,MQTT2                             / 1X Raspberry, i2c,onewire,gpio
1x auf Windows 2012 Hyper-V-S

lern_noch

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?


TomLee

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

lern_noch

#4
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

eisman

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
1x FHEM Debian, Homematic,ZigBee,FS20 / 1X Raspberry, ConBee / 7x ESP
1x FHEM Debian, Homematic,Z2M             / 1X Raspberry, ConBee / 6x ESP
1x FHEM Debian,MQTT2                             / 1X Raspberry, i2c,onewire,gpio
1x auf Windows 2012 Hyper-V-S

TomLee

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