diff --git a/fhem/FHEM/33_readingsGroup.pm b/fhem/FHEM/33_readingsGroup.pm index af5e72425..15a6c3d74 100644 --- a/fhem/FHEM/33_readingsGroup.pm +++ b/fhem/FHEM/33_readingsGroup.pm @@ -1218,6 +1218,8 @@ readingsGroup_Update($$$) my ($hash, $item, $value) = @_; my $name = $hash->{NAME}; + $hash->{changed} = 1; + if( $hash->{alwaysTrigger} ) { DoTrigger( $name, "$item: $value" ); @@ -1269,6 +1271,8 @@ readingsGroup_Notify($$) my $devices = $hash->{DEVICES}; $devices = $hash->{DEVICES2} if( $hash->{DEVICES2} ); + $hash->{changed} = 0; + my %triggers = (); my $max = int(@{$events}); for (my $i = 0; $i < $max; $i++) { @@ -1521,7 +1525,7 @@ readingsGroup_Notify($$) } } - readingsBeginUpdate($hash) if( $hash->{alwaysTrigger} && $hash->{alwaysTrigger} > 1 ); + our %readings; foreach my $trigger (keys %triggers) { readingsGroup_Update( $hash, $trigger, "$triggers{$trigger}" ); @@ -1554,9 +1558,7 @@ readingsGroup_Notify($$) readingsGroup_Update( $hash, "calc:$row:$col", "$v" ); - if( $hash->{alwaysTrigger} && $hash->{alwaysTrigger} > 1 ) { - readingsBulkUpdate($hash, $func, $hash->{helper}{values}{formated}[$col][$row]); - } + $readings{$func} = $hash->{helper}{values}{formated}[$col][$row]; if( my $refs = $hash->{helper}{recalc}[$col][$row] ) { updateRefs( $hash, $refs ); @@ -1576,7 +1578,22 @@ readingsGroup_Notify($$) } } - readingsEndUpdate($hash,1) if( $hash->{alwaysTrigger} && $hash->{alwaysTrigger} > 1 ); + + return undef if( !$hash->{changed} ); + delete $hash->{changed}; + + + if( $hash->{alwaysTrigger} && $hash->{alwaysTrigger} > 1 ) { + readingsBeginUpdate($hash); + foreach my $key ( keys %readings ) { + if( defined($readings{$key}) ) { + readingsBulkUpdate($hash, $key, $readings{$key}, 1); #if( !defined($hash->{helper}{$key}) || $hash->{helper}{$key} ne $readings{$key} ); + $hash->{helper}{$key} = $readings{$key}; + } + } + readingsEndUpdate($hash,1); + } + if( %triggers ) { my $sort_column = AttrVal( $hash, 'sortColumn', undef ); @@ -1848,7 +1865,7 @@ readingsGroup_Attr($$$;$) Attributes