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.
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
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?
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
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
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
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