diff --git a/fhem/CHANGED b/fhem/CHANGED index 53f0edaa9..47c2d3ba8 100644 --- a/fhem/CHANGED +++ b/fhem/CHANGED @@ -1,5 +1,6 @@ # Add changes at the top of the list. Keep it in ASCII - SVN + - feature: offset and monotonic added to userReadings modifier (justme1968) - feature: HUEDevice: support SVG icons for LWB001 living whites bulb - feature: HUEDevice: support more than one bridge - feature: updateInBackground global attribute diff --git a/fhem/docs/commandref_frame.html b/fhem/docs/commandref_frame.html index 0637d8c1a..55f0cf32f 100644 --- a/fhem/docs/commandref_frame.html +++ b/fhem/docs/commandref_frame.html @@ -440,6 +440,14 @@ 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. +
attr myPowerMeter userReadings power
diff --git a/fhem/docs/commandref_frame_DE.html b/fhem/docs/commandref_frame_DE.html
index c1b07bbaa..92b72214f 100644
--- a/fhem/docs/commandref_frame_DE.html
+++ b/fhem/docs/commandref_frame_DE.html
@@ -447,8 +447,15 @@ Zeilen erstreckende Befehle, indem man keine \ am Zeilenende eingeben muss.
- differential: das Reading wird auf die Differenz zw. dem aktuellen und
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.
-
+ falls der Unterschied unter eine Sekunde liegt.
+ - 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ähler der durch Sromverlust zurückgesetzt
+ wird zu korrigieren.
+ - monotonic: wenn die Differenz zw. dem aktuellen und dem vorherigen Wert
+ positiv ist wird diese Differenz zum Reading addiert. Damit lässt sich von
+ einem Zähler der bei Stromverlust zurückgesetzt wird ein monoton
+ wachsender Zähler ableiten.
diff --git a/fhem/fhem.pl b/fhem/fhem.pl
index 877ed68c5..b2044ac02 100755
--- a/fhem/fhem.pl
+++ b/fhem/fhem.pl
@@ -1885,7 +1885,7 @@ CommandAttr($$)
my $perlCode= $6;
#Log 1, sprintf("userReading %s has perlCode %s with modifier %s%s",
# $userReading,$perlCode,$modifier,$trigger?" and trigger $trigger":"");
- if(grep { /$modifier/ } qw(none difference differential)) {
+ if(grep { /$modifier/ } qw(none difference differential offset monotonic)) {
$trigger =~ s/^:// if($trigger);
$userReadings{$userReading}{trigger}= $trigger;
$userReadings{$userReading}{modifier}= $modifier;
@@ -3163,6 +3163,14 @@ readingsEndUpdate($$)
if(defined($deltav) && defined($deltat) && ($deltat>= 1.0)) {
$result= $deltav/$deltat;
}
+ } elsif($modifier eq "offset") {
+ $oldvalue= 0 if( !defined($oldvalue) );
+ $result = ReadingsVal($name,$userReading,0);
+ $result += $oldvalue if( $value < $oldvalue );
+ } elsif($modifier eq "monotonic") {
+ $oldvalue= 0 if( !defined($oldvalue) );
+ $result = ReadingsVal($name,$userReading,0);
+ $result += $value - $oldvalue if( $value > $oldvalue );
}
readingsBulkUpdate($hash,$userReading,$result,1) if(defined($result));
# store value