Hi,
ich wollte eine "geglättete" Version von bestimmten Readings sehen. Vielleicht geht das auch einfacher, aber vielleicht findet's doch jemand nützlich. Das Folgende steht in der 99_myUtils.pm:
#
# smoothen: exponential "smoothing"
# parameters: device name, source field name, target field name, factor
#
sub
myUtils_smoothen($$$$)
{
my ($devname, $rawname, $smoothname, $factor) = @_;
# get current value
my $curr = ReadingsVal($name,$rawname, 0);
# care for fields with "%"
$curr =~ s/%| //g;
# get current "smooth" value
my $old = ReadingsVal($devname,$smoothname,$curr);
return (($factor -1) * $old + $curr) / $factor;
}
Das ganze kann man in einem userReading so verwenden:
attr og_ku_HeizungOp userReadings smoothActuator { myUtils_smoothen($name,"ValvePosition","smoothActuator",75);
...d.h. es erzeugt ein neues Reading, welches durch exponentielle Glättung des ursprünglichen ermittelt wird. Schöner wäre vielleicht ein gleitender Durchschnitt, aber das ist komplizierter.
Die Parameter dürften klar sein, nur vielleicht $factor: Der Wert bedeutet, dass der aktuelle Wert mit einem Faktor von 1/$factor in die Berechnung eingeht.
Gruß,
Thorsten