diff --git a/fhem/contrib/DS_Starter/76_SolarForecast.pm b/fhem/contrib/DS_Starter/76_SolarForecast.pm index 13ecb90e7..b6cf59f2f 100644 --- a/fhem/contrib/DS_Starter/76_SolarForecast.pm +++ b/fhem/contrib/DS_Starter/76_SolarForecast.pm @@ -119,6 +119,7 @@ BEGIN { # Versions History intern my %vNotesIntern = ( + "0.55.1" => "05.09.2021 delete invalid consumer index, Forum: https://forum.fhem.de/index.php/topic,117864.msg1173219.html#msg1173219 ", "0.55.0" => "04.09.2021 new key pcurr for attr customerXX ", "0.54.5" => "29.08.2021 change metadata ", "0.54.4" => "12.07.2021 round Current_PV in _transferInverterValues ", @@ -4285,7 +4286,7 @@ return; sub _graphicConsumerLegend { my $paref = shift; my $hash = $paref->{hash}; - my $name = $paref->{name}; # Consumer AdviceIcon + my $name = $paref->{name}; # Consumer AdviceIcon my ($clegendstyle, $clegend) = split('_', $paref->{clegend}); my $type = $hash->{TYPE}; @@ -5184,10 +5185,18 @@ END3 my ($cons,$im,$start,$end) = split (':', $c1); # Log3 ($name, 1, "$name - Energieflussgrafik, Consumer to show -> $cons"); - $consumer_style = 'flowg inactive_out'; - $consumer_style = 'flowg active_out' if(ReadingsNum($name, "consumer${cons}_currentPower", 0) > 0); + my $power = ConsumerVal ($hash, $c1, "power", 0); + my $currentPower = ReadingsNum($name, "consumer${cons}_currentPower", 0); + my $p = $currentPower; + $p = (($currentPower / $power) * 100) if ($power > 0); + + $consumer_style = 'flowg inactive_out'; + $consumer_style = 'flowg active_out' if($p > 0); - $ret .= qq{}; + my $consumer_color = ""; + $consumer_color = 'style="stroke: #'.substr(Color::pahColor(0,50,100,$p,[0,255,0, 127,255,0, 255,255,0, 255,127,0, 255,0,0]),0,6).';"' if($p > 0); + + $ret .= qq{}; $pos_left += ($consumer_distance * 2); } @@ -5208,7 +5217,7 @@ END3 my ($cons,$im,$start,$end) = split (':', $c2); # Log3 ($name, 1, "$name - Energieflussgrafik, Consumer to show -> $cons"); - my $power = ReadingsNum($name, "consumer${cons}_currentPower", 0); + my $power = sprintf("%.1f",ReadingsNum($name, "consumer${cons}_currentPower", 0)); $ret .= qq{$power}; @@ -6018,7 +6027,6 @@ return; sub listDataPool { my $hash = shift; my $htol = shift; - my $name = $hash->{NAME}; my $type = $hash->{TYPE}; @@ -6104,6 +6112,10 @@ sub listDataPool { return qq{Consumer cache is empty.}; } for my $idx (sort{$a<=>$b} keys %{$h}) { + if ($idx !~ /^[0-9]{2}$/ix) { # bereinigen ungültige consumer, Forum: https://forum.fhem.de/index.php/topic,117864.msg1173219.html#msg1173219 + delete $data{$type}{$name}{consumers}{$idx}; + Log3 ($name, 3, qq{$name - INFO - invalid consumer key "$idx" was deleted from consumer Hash}); + } my $cret; for my $ckey (sort keys %{$h->{$idx}}) { if(ref $h->{$idx}{$ckey} eq "HASH") { @@ -6115,7 +6127,7 @@ sub listDataPool { $cret .= $ckey." => ".$hk."\n "; } else { - $cret .= $ckey." => ".$h->{$idx}{$ckey}."\n "; + $cret .= $ckey." => ".ConsumerVal ($hash, $idx, $ckey, "")."\n "; } }