[gelöst]: DevStateIcon nach Zahlenbereichen ändern

Begonnen von Dynalon, 22 März 2021, 00:14:41

Vorheriges Thema - Nächstes Thema

Dynalon

Hallo,

ich komme leider einfach nicht drauf: Ich möchte ein Icon je nach Zahlenwert die Farbe ändern lassen. Also bei einem Bodenfeuchtesensor z.B. unter dem Wert von 10 rot, bei 11-20 Gelb, bei über 20 Grün.
(Ähnlich kann man sowas auch für Temperaturen, Helligkeiten usw. einsetzen).

attr Pflanze1 stateFormat moisture
habe ich definiert. Ich sehe dann den entsprechenden Wert auch in in der Statuszeile des Geräts in "Everything" oder im entsprechenden "Room" angezeigt. Soweit so gut.

Leider klappt das mit den farblichen Symbolen aber bei mir nur, wenn ich für jede einzelne Zahl eine eigene Definition eingebe. Das ist bei Schaltern mit 2 Optionen ja voll ok. Aber bei 100 verschiedenen Prozentwerten (oder Helligkeiten bis 100000) nicht wirklich im Sinne des Erfinders. Hier ein Beispiel:
attr Pflanze1 devStateIcon 5:sani_irrigation@red

Zwar habe ich folgende Seiten gefunden, werde aber aus meinen Quellen einfach nicht schlau (und Versuche, das ganze für meine Zwecke anzupassen haben nicht funktioniert):
https://wiki.fhem.de/wiki/EnOcean-FSB61-Aktor-Beschattungselemente-Rollladen#Anzeige_Rollladenstand_im_WebFrontend
https://forum.fhem.de/index.php/topic,42351.0.html
https://wiki.fhem.de/wiki/DevStateIcon

Kurzum: Wie definiere ich Zahlenbereiche für das attr DefStateIcon? An anderen Stellen habe ich das mit <=, ==, >= oder ~= gemacht, aber das hat hier auch nicht funktioniert...

Freue mich alternativ falls griffbereit auch über den Link zur richtigen Anleitung/wiki/CommandRef (ich lerne ja gerne dazu), wenn ich diese einfach noch nicht gefunden habe.

Vielen Dank!

OdfFhem

@Dynalon

Den Einsatz von einzelne Zahlen kann man (meist) durch den Einsatz von regulären Ausdrücken vermeiden (s. EnOcean-Beispiel für Rolladenstand).


7\d.*:fts_shutter_30
\d.*:fts_shutter_90

Der obere reguläre Ausdruck steht für 70-79.
Der untere reguläre Ausdruck steht für 0-9.

Abgewandelt könnte bei Dir z.B. folgende Definition helfen (ungetestet):

attr Pflanze1 devStateIcon 2\d+:sani_irrigation@green 1\d+:sani_irrigation@yellow \d+:sani_irrigation@red

Bereiche wären 0-9, 10-19, 20-29 ...

xenos1984

Wenn reguläre Ausdrücke nicht reichen, nehme ich in so einem Fall gerne die Perl-Variante:

http://wiki.fhem.de/wiki/DeviceOverview_anpassen#Perl-Variante

Also z.B.:


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

TomLee

#3
Hallo,

geht auch mit Color::pahColor.

Die Farben kannst dir ja noch anpassen, hab ich einfach aus dem letzten Beispiel übernommen.

defmod Pflanze1 dummy
attr Pflanze1 devStateIcon {FW_makeImage('sani_irrigation@#'.substr(Color::pahColor(0,15,30,ReadingsVal($name,'moisture','0'),[255,0,0, 127,255,0, 0,255,0, 0,255,255, 0,127,255]),0,6))}
attr Pflanze1 readingList moisture
attr Pflanze1 room Test
attr Pflanze1 setList moisture:slider,0,1,30
attr Pflanze1 webCmd moisture


Gruß

Thomas

Dynalon

Super, vielen Dank!

Da hab ich jetzt richtig Auswahl. Habe es erst mal mit der Methode von OdfFhem probiert, mit dieser hatte ich es zuvor auch schon vergeblich versucht. Wie ich jetzt weiß, war ich nur zu unwissend, was 7\d bedeutet (und hatte daher an dieser Stelle falsche Werte eingegeben). Also: gleich nochmal Danke für die Erläuterung!