diff --git a/fhem/contrib/DS_Starter/76_SolarForecast.pm b/fhem/contrib/DS_Starter/76_SolarForecast.pm index 69df81eee..dc1c61572 100644 --- a/fhem/contrib/DS_Starter/76_SolarForecast.pm +++ b/fhem/contrib/DS_Starter/76_SolarForecast.pm @@ -905,6 +905,10 @@ my %htitles = ( DE => qq{reale PV-Erzeugung} }, pvgenefc => { EN => qq{forecasted PV generation}, DE => qq{prognostizierte PV-Erzeugung} }, + onlybatw => { EN => qq{Battery}, + DE => qq{Batterie} }, + socofbat => { EN => qq{State of Charge battery}, + DE => qq{Ladung Batterie} }, bcharrcd => { EN => qq{Charging recommendation (activate release for charging the battery if necessary)}, DE => qq{Ladeempfehlung (evtl. Freigabe zum Laden der Batterie aktivieren)} }, bncharcd => { EN => qq{No charging recommendation (possibly deactivate release for charging the battery)}, @@ -12900,8 +12904,6 @@ sub entryGraphic { if ($paref->{beam3cont} || $paref->{beam4cont}) { # Balkengrafik Ebene 2 my %hfcg2; - $hfcg2{barcount} = $hfcg1{barcount}; # Anzahl Balken der Ebene1 zur Begrenzung Ebene 2 übernehmen - $paref->{chartlvl} = 2; # Balkengrafik Ebene 2 $paref->{beam1cont} = $paref->{beam3cont}; $paref->{beam2cont} = $paref->{beam4cont}; @@ -14334,7 +14336,8 @@ sub _beamGraphicFirstHour { $beam1cont eq 'consumption' ? $htitles{enconsrl}{$lang}." ($kw)" : $beam1cont eq 'energycosts' ? $htitles{enpchcst}{$lang}." ($epc)" : $beam1cont eq 'gridfeedin' ? $htitles{enfeedgd}{$lang}." ($kw)" : - $beam1cont eq 'feedincome' ? $htitles{rengfeed}{$lang}." ($efc)" : + $beam1cont eq 'feedincome' ? $htitles{rengfeed}{$lang}." ($efc)" : + $beam1cont =~ /batsocforecast_/xs ? $htitles{socofbat}{$lang}." ".(split '_', $beam1cont)[1]." (%)" : ''; $hfcg->{0}{beam2txt} = $beam2cont eq 'pvForecast' ? $htitles{pvgenefc}{$lang}." ($kw)" : $beam2cont eq 'pvReal' ? $htitles{pvgenerl}{$lang}." ($kw)" : @@ -14344,6 +14347,7 @@ sub _beamGraphicFirstHour { $beam2cont eq 'energycosts' ? $htitles{enpchcst}{$lang}." ($epc)" : $beam2cont eq 'gridfeedin' ? $htitles{enfeedgd}{$lang}." ($kw)" : $beam2cont eq 'feedincome' ? $htitles{rengfeed}{$lang}." ($efc)" : + $beam2cont =~ /batsocforecast_/xs ? $htitles{socofbat}{$lang}." ".(split '_', $beam2cont)[1]." (%)" : ''; $hfcg->{0}{time_str} = sprintf('%02d', $hfcg->{0}{time}-1).$hourstyle; @@ -14526,6 +14530,7 @@ sub _beamGraphic { my $minDif = $paref->{minDif}; my $beam1cont = $paref->{beam1cont}; my $beam2cont = $paref->{beam2cont}; + my $barcount = $paref->{barcount} // 9999; # Sync Anzahl Balken dieser Ebene mit voriger Ebene $lotype = 'single' if($beam1cont eq $beam2cont); # User Auswahl Layout überschreiben bei gleichen Beamcontent ! @@ -14535,7 +14540,6 @@ sub _beamGraphic { my ($val, $z2, $z3, $z4, $he, $titz2, $titz3); - my $barcount = $hfcg->{barcount} // 9999; # Anzahl Balken der vorangegangenen Ebene zur Begrenzung dieser Ebene my $ret = q{}; $ret .= __weatherOnBeam ($paref) if($weather); $ret .= __batRcmdOnBeam ($paref); @@ -14546,10 +14550,16 @@ sub _beamGraphic { my $ii = 0; - for my $i (0..($maxhours * 2) - 1) { # gleiche Bedingung wie oben - next if(!$show_night && $hfcg->{$i}{weather} > 99 - && !$hfcg->{$i}{beam1} - && !$hfcg->{$i}{beam2}); + for my $i (0..($maxhours * 2) - 1) { # gleiche Bedingung wie oben + if (!$show_night && $hfcg->{$i}{weather} > 99 && + !$hfcg->{$i}{beam1} && !$hfcg->{$i}{beam2}) { + next; + } + + if (!$show_night && $hfcg->{$i}{weather} > 99) { + $paref->{barsync}{$i} = 1; + } + $ii++; # wieviele Stunden haben wir bisher angezeigt ? last if($ii > $maxhours || $ii > $barcount); # vorzeitiger Abbruch @@ -14571,14 +14581,20 @@ sub _beamGraphic { my $ii = 0; - for my $i (0..($maxhours * 2) - 1) { # gleiche Bedingung wie oben - next if(!$show_night && $hfcg->{$i}{weather} > 99 - && !$hfcg->{$i}{beam1} - && !$hfcg->{$i}{beam2}); + for my $i (0..($maxhours * 2) - 1) { # gleiche Bedingung wie oben + if (!$show_night && $hfcg->{$i}{weather} > 99 && + !$hfcg->{$i}{beam1} && !$hfcg->{$i}{beam2}) { + next; + } + + if (!$show_night && $hfcg->{$i}{weather} > 99) { + $paref->{barsync}{$i} = 1; + } + $ii++; last if($ii > $maxhours || $ii > $barcount); - $hfcg->{barcount} = $ii; # Anzahl Balken zur Begrenzung der nächsten Ebene registrieren + $paref->{barcount} = $ii; # Anzahl Balken zur Begrenzung der nächsten Ebene registrieren $height = 200 if(!$height); # Fallback, sollte eigentlich nicht vorkommen, außer der User setzt es auf 0 $maxVal = 1 if(!int $maxVal); # maxVal kann gerade bei kleineren maxhours Ausgaben in der Nacht leicht auf 0 fallen @@ -14846,11 +14862,11 @@ sub __weatherOnBeam { my $colorwn = $paref->{colorwn}; # Wetter Icon Farbe Nacht my $width = $paref->{width}; my $lang = $paref->{lang}; - - my $barcount = $hfcg->{barcount} // 9999; # Anzahl Balken der vorangegangenen Ebene zur Begrenzung dieser Ebene - my $m = $paref->{modulo} % 2; - my $ret = q{}; - $ret .= "