Hallo Gemeinde,
seit einigen Tage tue ich mich schwer mit einer Kleinigkeit, die mir nicht gelingen will.
Ich möchte gerne, wenn ich die über HTTPMOD gezogene Aussentemperatur anschaue, diese farblich ( ggf. ICON ) hinterlegt haben.
Und zwar aus der Tendenz heraus, die man mittels den vorangegangenen Intervallen erhält.
Sollten diese höher sein, soll die Temperatur blau dargestellt sein, wenn es wärmer würde rot, und wenn es wechselt..eben grün.
Dazu habe ich hier eine schönes Attribut, den event-aggregator gefunden, den ich auf Temp:60:linear:mean:600 gestellt habe.
Die aktuelle Temperatur steht etwa bei 3.5°C, der Mittelwert bei 3.5256775... oder so. Die 3.5 sollte dann eben blau erscheinen.
Jetzt kann ich den Stateformat mit einem Wert belegen, aber kein IF dazugeben und entscheiden lassen
Etwa
{
if (Value("akTemp")lt "MTemp")
{sprintf" <div style='color:blue'> %.1f°C", ReadingsVal("temper","akTemp","unbekannt")}
else
{sprintf" <div style='color:red'> %.1f°C",
ReadingsVal("temperf","akTemp","unbekannt")}
}
Ich habe es auch schon mit den ReadingGroup geliebäugelt, weil es so schöne Attribute wie valueFormat gibt, jedoch ist das ja eigentlich für eine Mehrzahl von Devices gedacht.
Mit den beiden Attr readingExpr sowie readingFormat komme ich nicht weiter,vielleicht zuwenig Beispiele.
Hat wer ne Idee? ( wahrscheinlich mehrere Möglichkeiten, ich sehe nicht durch)
Danke
Uwe
Also ich mache sowas mit ReadingsGroup , zugegebenermassen mit all meinen Wandthermostaten (und absolut, also ohne Tendenz / aber wovon die Farbe abhängt ist ja egal)...
...bei valueStyle rufe ich eine sub in myUtils welche dann den Format-String zurück gibt.
Klar wäre ReadingsGroup evtl. "übertrieben" für nur ein Gerät aber gehen tut es trotzdem.
Nutze ReadingsGroup deshalb für meinen einen Kodi, weil ich mich halt damit schon beschäftigt habe (und mich soweit auskenne)...
...warum soll ich mich dann mit einer anderen möglichen Lösung "quälen"... ;)
Gruß, Joachim
warum soll das mit if nicht gehen?
du die perl syntax muss halt stimmen. d.h. < und > zum vergleich von zahlen verwenden, überall ReadingsVal verwenden. also etwa so:{
if (Value($name) < ReadingsVal($name,"akTemp", 0)) {
sprintf" <div style='color:blue'> %.1f°C", ReadingsVal($name,"akTemp","unbekannt");
} else {
sprintf" <div style='color:red'> %.1f°C", ReadingsVal($name,"akTemp","unbekannt");
}
}
vermutlich sollte man den == fall auch noch abdecken und hier beim vergleich eine nur mit einer kleinen genauigkeit arbeiten.
Danke an Euch.
Leider klappt's noch nicht so ganz.
Weiterhin wird die korrekte Temperatur eingelesen, aber nicht die richtige Farbe.
Die bleibt immer gleich. Her bleibt sie dauerhaft auf Blau, obwohl aktuelle Temperatur höher ist als der gemittelte Durchschnitt.( Beispiel mal der Vorlauftemperatur, da schnellerer Wechsel zum Beobachten )
Außerdem meckert das EventLog rum:
PERL WARNING: Argument " <div style='color:blue'> 79.4°C" isn't numeric in numeric gt (>) at (eval 254) line 2.
Wenn ich, wie mein erster Wurf gt oder lt nehme, ist alles bestens, ich glaube der kommt mit dem State der Farbmarkierung nicht klar, aber genau darum geht es ja.
STATE <div style='color:blue'> 77.6°C
HVorlauf 77.6
HVorlaufV:76.2102512486672
HVorlaufV:120:linear:mean:600 ( die gemittelte Temperatur der letzten 10 Minuten )
{
if (Value($name) > (ReadingsVal($name,"HVorlaufv", 0)))
{
sprintf" <div style='color:red'> %.1f°C", ReadingsVal($name,"HVorlauf","0");
} else
{
sprintf" <div style='color:blue'> %.1f°C", ReadingsVal($name,"HVorlauf","0");
}
}
Könnte man hier noch tricksen? ReadingsNum ändert auch nichts.
Auch wenn man weitere eine Abfrage mit grün macht ( eq bzw. == ) bleibt er bei der ersten Farbvariante "kleben" und wechselt nicht dynamisch
Danke+Gruß
Uwe
nimm ReadingsNum statt ReadingsVal im if und am besten auch ReadingsNum auf state statt Value.
zahlen musst du mit < oder > vergleichen. ein string vergleich macht meist nicht das was du willst.
ja, mir ist kurz nach Antwort das VALUE aufgefallen, der ja STATE interpretiert und wohl mit dem String nicht so klar kommt.
Mit ReadingsNum klappt es aber besser.
Nun wollte ich noch eine Varianz um den Nullpunkt herum definieren, nicht das es immer nur genau == sein muß, sondern gern +-1% herum grün bleibt.
Danke