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