NEWS
Farbe vom Text in VIS
-
Servus
Ich steh gerade auf dem Schlauch
Ich würde gerne Werte in von Sensoren anzeigen lassen, die je nach Wert die passende Farbe haben.
Im Forum hab ich folgende Beschreibung gefunden:
{v:ble.0.c4:7c:8d:66:xx:xx.fertility;v < 350 ? "#FF0000" :: v < 2000 ? "#00FF00" :: "#FFFF00"}
Das einfach bei Farbe eintragen.
Komischerweise wird aber immer nur der letzte Wert verwendet egal wie groß der Wert ist.
Es sollte aber unter 350 = rot, zwischen 350 und 2000 = grün und bei über 2000 = gelb
Wo liegt der Denkfehler?
Wird hie noch ein andere Script benötigt?
Gruß Peer
-
Bei mir siehts so aus. Liegt es vielleicht am Leerzeichen zwischen Zeichen und Wert? Oder doppelter Doppelpunkt?
{a:javascript.0.Erzeugung; a <=1000 ? "#DF0101" : a <=2500 ? "#ffff00" : "#2EFE2E"}
Enrico
-
Oh. Geht das so auch für Hintergründe? Dann kann ich mir ja alle Javaskripte sparen, mit denen ich extra entsprechende Datenpunkte befülle. Probier ich mal damit aus:
{a:Datenpunkt; a == 0 ? "green" : a <= 90 ? "orange" : a <= 100 ? "royalblue" : "green"}
-
Sollte auch funktionieren!
Enrico
-
Servus
Danke für die Hilfe
Leider klappt es bei mir immer noch nicht.
{v:ble.0.c4:7c:8d:66:xx:xx.fertility; v < 350 ? "#FF0000" :: v < 2000 ? "#00FF00" :: "#FFFF00"}
Das Leerzeichen zwischen ; und v hat nix gebracht.
Könnte es an den Doppelpunkten im Datenpunkt liegen?
Würde es was bringen, den Datenpunkt in Anführungszeichen zu setzen? Also so: {v:"ble.0.c4:7c:8d:66:xx:xx.fertility"; …"
Ist es richtig, dass hinten doppelte Doppelpunkte verwendet werden müssen?
Hab noch eine Idee, könnte es so klappen?
{v:ble.0.c4::7c::8d::66::xx::xx.fertility; v < 350 ? "#FF0000" : v < 2000 ? "#00FF00" : "#FFFF00"}
Das also die doppelten Doppelpunkte als echter Doppelpunkt gesehen wird und nicht als Trennzeichen bzw "oder"?
Kann leider erst heute Abend weiter testen
Und direkt noch die nächste Idee:
Wie kann ich Werte wie z.B. 2,4 bewerten?
Muss ich den Wert mit "." oder "," abfragen?````
{a: SENSOR.battery; a < 2,4 ? "red" : a < 2,6 ? "orange" : "green"}
oder
{a: SENSOR.battery; a < 2.4 ? "red" : a < 2.6 ? "orange" : "green"}Gruß Peer Tante Edit hatte Zeit zum testen Egal ob Komma oder Punkt, der Balken bleibt grün ![3443_batterien.png](/assets/uploads/files/3443_batterien.png) Auch was den Doppelpunkt angeht, die Farben wird nicht dem Wert angepasst Hat noch jemand eine Idee?
-
Heißt dein Datenpunkt "SENSOR.Battery"? Da muss der ganze Pfad rein!
Enrico
-
Also, mit
{a:hm-rpc.0.OEQ1300422.1.LEVEL; a == 0 ? "green" : a <= 90 ? "orange" : a <= 100 ? "royalblue" : "green"}
funktioniert es wunderbar für mein Rollladen-Widget.
Wenn allerdings direkt gerechnet werden muss, dann scheint es nicht zu klappen. Mit
{a:hm-rpc.0.LEQ0003550.2.SET_TEMPERATURE - hm-rpc.0.LEQ0003550.2.ACTUAL_TEMPERATURE; Math.abs(a) <= 2.5 ? "green" : a > 2.5 ? "royalblue" : a < -2.5 ? "orange" : "green"}
bekomme ich jedenfalls immer nur einen grünen Hintergrund angezeigt. Ziel ist es, einen orangen Hintergrund anzuzeigen, wenn die Ist-Temperatur um mehr als 2,5°C oberhalb der Soll-Temperatur liegt, einen blauen Hintergrund anzuzeigen, wenn die Ist-Temperatur 2,5 °C unterhalb der Soll-Temperatur liegt, und einen grünen Hintergrund anzuzeigen, wenn die Soll- und die Ist-Temperatur sich um weniger als 2,5 °C unterscheiden.
Mit dem folgenden Javaskript funktioniert das sehr gut:
var visBackground = 'HTMLBackgroundDGSchlafzimmerTemperatur'; var idDevice = 'hm-rpc.0.LEQ0003550.2'; var diff, i; createState('vis.'+visBackground, 'green', { def: 'green', type: 'string', name: 'Hintergrund für Temperatur-Widget', role: 'text' }); on(idDevice+'.SET_TEMPERATURE', function(obj){ diff = getState(idDevice+".SET_TEMPERATURE").val - getState(idDevice+".ACTUAL_TEMPERATURE").val; log('DG Schlafzimmer'); log(diff); if(Math.abs(diff) <= 2.5) setState('vis.'+visBackground, 'green'); else if(diff > 2.5) setState('vis.'+visBackground, 'royalblue'); else if(diff < -2.5) setState('vis.'+visBackground, 'orange'); }); on(idDevice+'.ACTUAL_TEMPERATURE', function(obj){ diff = getState(idDevice+".SET_TEMPERATURE").val - getState(idDevice+".ACTUAL_TEMPERATURE").val; log('DG Schlafzimmer'); log(diff); if(Math.abs(diff) <= 2.5) setState('vis.'+visBackground, 'green'); else if(diff > 2.5) setState('vis.'+visBackground, 'royalblue'); else if(diff < -2.5) setState('vis.'+visBackground, 'orange'); });
Gruß,
Thorsten