2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-01-31 06:39:11 +00:00

fhem.pl: UserReadings/integral by simonberry (Forum #26300)

git-svn-id: https://svn.fhem.de/fhem/trunk@6425 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
rudolfkoenig 2014-08-19 20:55:00 +00:00
parent 7a9abe2f87
commit cf18028551
3 changed files with 27 additions and 7 deletions

View File

@ -485,6 +485,11 @@ A line ending with \ will be concatenated with the next one, so long lines
seconds between the current and the previous evaluation. Granularity
of time is one second. No value is calculated if the time past is
below one second. Useful to calculate rates.</li>
<li>integral: reverse function of differential. The result is incremented
by the product of the time difference between the last two readings
and the avarage of the last two readings. <br>
result += (time - timeold) * (oldval + value) / 2
</li>
<li>offset: if the current evaluated value is smaler than the previously
evaluated value the reading is incremented by the previous value.
the reading can then be used as an offset correct for a counter that

View File

@ -501,14 +501,20 @@ Zeilen erstreckende Befehle, indem man keine \ am Zeilenende eingeben muss.</p>
dem vorherigen Wert, geteilt durch die Sekunden zw. der aktuellen Zeit
und der letzten Auswertung, sekundengenau. Kein Wert wird berechnet,
falls der Unterschied unter eine Sekunde liegt.</li>
<li>integral: das Gegenteil von differential. Das Ergebnis wird um das
Produkt aus der Zeit-Differenz und der Durschnittswert der letzten zwei
Readings erh&ouml;ht.<br>
result += (time - timeold) * (oldval + value) / 2
</li>
<li>offset: wenn der aktuellen Wert kleiner als der vorherige Wert ist
wird der vorherige Wert zum Reading addiert. Das Reading kann dann
als offset verwendet werden um einen Z&auml;hler der durch Sromverlust zur&uuml;ckgesetzt
wird zu korrigieren.</li>
<li>monotonic: wenn die Differenz zw. dem aktuellen und dem vorherigen Wert
positiv ist wird diese Differenz zum Reading addiert. Damit l&auml;sst sich von
einem Z&auml;hler der bei Stromverlust zur&uuml;ckgesetzt wird ein monoton
wachsender Z&auml;hler ableiten.</li>
wird der vorherige Wert zum Reading addiert. Das Reading kann dann als
offset verwendet werden um einen Z&auml;hler der durch Sromverlust
zur&uuml;ckgesetzt wird zu korrigieren.</li>
<li>monotonic: wenn die Differenz zw. dem aktuellen und dem vorherigen
Wert positiv ist wird diese Differenz zum Reading addiert. Damit
l&auml;sst sich von einem Z&auml;hler der bei Stromverlust
zur&uuml;ckgesetzt wird ein monoton wachsender Z&auml;hler
ableiten.</li>
</ul>
Beispiel:
<ul><code>

View File

@ -3483,6 +3483,15 @@ readingsEndUpdate($$)
if(defined($deltav) && defined($deltat) && ($deltat>= 1.0)) {
$result= $deltav/$deltat;
}
} elsif($modifier eq "integral") {
if(defined($oldt) && defined($oldvalue)) {
my $deltat= $hash->{".updateTime"} - $oldt if(defined($oldt));
my $avgval= ($value + $oldvalue) / 2;
$result = ReadingsVal($name,$userReading,$value);
if(defined($deltat) && $deltat>= 1.0) {
$result+= $avgval*$deltat;
}
}
} elsif($modifier eq "offset") {
$oldvalue = $value if( !defined($oldvalue) );
$result = ReadingsVal($name,$userReading,0);