diff --git a/fhem/CHANGED b/fhem/CHANGED
index 33112c663..8d6c01ce1 100644
--- a/fhem/CHANGED
+++ b/fhem/CHANGED
@@ -1,5 +1,6 @@
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
# Do not insert empty lines here, update check depends on it.
+ - feature: 98_logProxy.pm added postFn and scale2reading options
- feature: 70_Pushbullet.pm: new module 70_Pushbullet.pm
- changed: 31_MilightDevice (Thanks to MarkusM):
Saturation set/transition, set with command saturation
diff --git a/fhem/FHEM/98_logProxy.pm b/fhem/FHEM/98_logProxy.pm
index a4fe19e49..e274826b5 100644
--- a/fhem/FHEM/98_logProxy.pm
+++ b/fhem/FHEM/98_logProxy.pm
@@ -697,6 +697,7 @@ logProxy_Get($@)
my $log_dev = $options[0];
my $infile = $fld[0] eq "DbLog" ? "HISTORY" : "CURRENT";
my $column_specs = $3;
+
my $extend;
my $extend_scale;
my $offset;
@@ -705,6 +706,7 @@ logProxy_Get($@)
my $clip;
my $predict;
my $postFn;
+ my $scale2reading;
if( !defined($defs{$log_dev}) ) {
Log3 $hash->{NAME}, 1, "$hash->{NAME}: $log_dev does not exist";
@@ -712,7 +714,16 @@ logProxy_Get($@)
next;
}
- foreach my $option ( @options[1..@options-1] ) {
+ my @options = @options[1..@options-1];
+ while (@options) {
+ my $option = shift(@options);
+ while ($option && $option =~ m/={/ && $option !~ m/>}/ ) {
+ my $next = shift(@options);
+ last if( !defined($next) );
+ $option .= ",". $next;
+ }
+
+ #foreach my $option ( @options[1..@options-1] ) {
my ($name,$value) = split( '=', $option, 2 );
if( $value ) {
@@ -754,6 +765,9 @@ logProxy_Get($@)
} elsif( $name eq "postFn" ) {
$postFn = $value;
+ } elsif( $name eq "scale2reading" ) {
+ $scale2reading = $value if( defined($value) );
+
} else {
Log3 $hash->{NAME}, 2, "$hash->{NAME}: line $i: $fld[0]: unknown option >$option<";
@@ -773,6 +787,35 @@ logProxy_Get($@)
$from = logProxy_shiftTime($from,-$extend.$extend_scale) if( $extend );
$to = logProxy_shiftTime($to,$extend.$extend_scale) if( $extend );
+ # zoom dependent reading
+ if( $scale2reading ) {
+ my @fld = split(':', $column_specs, 3);
+
+ my $reading;
+ my $zoom = logProxy_Range2Zoom($tosec-$fromsec);
+ if( ref($scale2reading) eq "HASH" ) {
+ $reading = $scale2reading->{$zoom};
+ $reading = $scale2reading->{"$fld[1].$zoom"} if( defined($scale2reading->{"$fld[1].$zoom"}) );
+ } elsif($scale2reading =~ m/^{.*}$/) {
+ } else {
+ no strict "refs";
+ $reading = eval {&{$scale2reading}($zoom,$fld[1])};
+ use strict "refs";
+ if( $@ ) {
+ Log3 $hash->{NAME}, 1, "$hash->{NAME}:readingOfScale $a[$i]: $@";
+ }
+ }
+
+ if( $reading
+ && $reading ne $fld[1] ) {
+ Log3 $hash->{NAME}, 4, "$hash->{NAME}:scale $zoom: using $reading instead of $fld[1]";
+ $fld[1] = $reading;
+ $column_specs = join( ':', @fld );
+ } else {
+ Log3 $hash->{NAME}, 5, "$hash->{NAME}:scale $zoom: keeping $fld[1]";
+ }
+ }
+
$internal_data = "";
my $cmd = "get $log_dev $infile INT $from $to $column_specs";
Log3 $hash->{NAME}, 4, "$hash->{NAME}: calling $cmd";
@@ -800,12 +843,12 @@ logProxy_Get($@)
no strict "refs";
my $d = eval {&{$postFn}($a[$i],$data)};
+ use strict "refs";
if( $@ ) {
- Log3 $hash->{NAME}, 1, "$hash->{NAME}: $a[$i]: $@";
+ Log3 $hash->{NAME}, 1, "$hash->{NAME}: postFn: $a[$i]: $@";
$ret .= "#$a[$i]\n";
next;
}
- use strict "refs";
$data = $d;
@@ -1125,9 +1168,41 @@ logProxy_Get($@)
#logProxy <column_spec>
where <column_spec> can be one or more of the following:
scaleHashRef
.
+ The keys can be from the following list: year, month, week, day, qday, hour#logProxy DbLog:dbLog,scale2reading={year=>'temperature_avg_day',month=>'temperature_avg_day'}:s300ht_1:temperature::