um noch eine weitere einfache und Ressourcen schonende Filtervariante in die Diskussion zu werfen: Das eindimensionale Infinite Impulse Response (IIR) Filter hier in Homematic Skriptsprache:
Code: Alles auswählen
var myspeed = dom.GetObject("BidCos-RF.LEQ1442XXX:1.WIND_SPEED").Value();
var mySysVarWindSpeed = dom.GetObject("Windgeschwindigkeit_IIR_gefiltert");
! Lokale Variablen
real alpha; ! IIR filter factor
real filter_value; ! temporary IIR filter status value
alpha = 0.85; ! IIR filter value
filter_value = alpha * mySysVarWindSpeed.Value() ;
filter_value = filter_value + (1.0 - alpha) * myspeed;
!WriteLine(filter_value);
mySysVarWindSpeed.State(filter_value);
Einfacher geht es nicht Die Filtercharakteristik wird von 'alpha' bestimmt. Je mehr dieser Wert gegen 1 geht, desto stärker wird gefiltert.