ich nutze Card-Mod für diverse Anpassungen, was grundsätzlich funktioniert.
Nun möchte ich aber die Werte/Values in Abhängigkeit der Werte färben.
Wenn also z.B. Luftfeuchtigkeit über 60%, dann Wert in rot darstellen.
Ich habe bislang:
Wenn der Wert 60% übersteigt, möchte ich z.B. 60,5 % in Rot darstellen.
Ich finde bezüglich Card-Mod Beispiele um die Farbe des Icons oder der Entität in Abhängigkeit des Wertes zu ändern, aber nirgends, ob man auch den Wert in der Farbe ändern kann.
Geht das mit Card-mod nicht?
Auch wenn’s gelöst ist,
mich hat’s auch genervt das man bei der custom button-card kein color-threshold für den state hat. Und sich dutzend Einzelpunkte zu definieren war dann auch extremst aufwändig.
styles:
state:
- color: |
[[[
var val = Number(entity.state);
var min = -100; var minc = '#ff0000';
var mid = -0; var midc = '#ffff00';
var max = 600; var maxc = '#00ff00';
var stp = 3; // 2 oder 3 Farben, bei 2 wird mid nicht beachtet
if (min < 0) {
var shift = Math.abs(min); // zu faul um mit negativen Werten zu rechnen
} else {
var shift = min * -1;
}
var min2 = min + shift;
var mid2 = mid + shift;
var max2 = max + shift;
var val2 = val + shift;
if (stp == 2) {
var percent = ((val2 - min2)/max2); // von 0 bis 1
var x = interpolate(minc, maxc, percent); // 2 Farben von min - max
}
if (stp == 3) {
if (val < mid) {
var percent = ((val2 - min2) / mid2);
var x = interpolate(minc, midc, percent); // Farbe 1-2 von min bis mid
} else {
var percent = ((val2 - mid2) / max2);
var x = interpolate(midc, maxc, percent); // Farbe 2-3 von mid bis max
}
}
function interpolate(color1, color2, percent) {
const r1 = parseInt(color1.substring(1, 3), 16);
const g1 = parseInt(color1.substring(3, 5), 16);
const b1 = parseInt(color1.substring(5, 7), 16);
const r2 = parseInt(color2.substring(1, 3), 16);
const g2 = parseInt(color2.substring(3, 5), 16);
const b2 = parseInt(color2.substring(5, 7), 16);
const r = Math.round(r1 + (r2 - r1) * percent);
const g = Math.round(g1 + (g2 - g1) * percent);
const b = Math.round(b1 + (b2 - b1) * percent);
return "rgb(" + r + ", " + g + ", " + b + ")";
}
return x;
]]]
PS: wenn man es für mehr als nur 2 Karten benötigt empfiehlt sich mit templates zu arbeiten die man im RAW{} Konfigurationseditor verortet.