From 67ac30fe498b5e983d3f842c23108c45dadc295f Mon Sep 17 00:00:00 2001 From: DS_Starter Date: Wed, 17 Sep 2025 13:18:50 +0000 Subject: [PATCH] 76_SolarForecast: contrib version 1.58.3 git-svn-id: https://svn.fhem.de/fhem/trunk@30303 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/contrib/DS_Starter/76_SolarForecast.pm | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/fhem/contrib/DS_Starter/76_SolarForecast.pm b/fhem/contrib/DS_Starter/76_SolarForecast.pm index eec6b647d..2ed9859d6 100644 --- a/fhem/contrib/DS_Starter/76_SolarForecast.pm +++ b/fhem/contrib/DS_Starter/76_SolarForecast.pm @@ -11844,8 +11844,8 @@ sub _batChargeMgmt { } } - # Erstellung Mindest Ladeleistung - ################################### + # leistungsoptimierte Beladungssteuerung + ########################################## $paref->{hsurp} = $hsurp; __batChargeOptTargetPower ($paref); delete $paref->{hsurp}; @@ -11918,18 +11918,20 @@ sub __batChargeOptTargetPower { next; } + my $crgwh = BatteryVal ($name, $sbn, 'bchargewh', 0); # aktueller Ladezustand Batterie my $runwh = defined $hsurp->{$shod}{$sbn}{fcnextwh} ? # Auswahl des zu verwendenden Prognose-SOC (Wh) $hsurp->{$shod}{$sbn}{fcnextwh} : ( $hsurp->{$shod}{nhr} eq '00' ? - BatteryVal ($name, $sbn, 'bchargewh', 0) : + $crgwh : $hsurp->{$shod}{$sbn}{socwh} ); my $bpinreduced = BatteryVal ($name, $sbn, 'bpinreduced', 0); # Standardwert wenn z.B. kein Überschuß oder Zwangsladung vom Grid if (!$spls) { # auf kleine Sollladeleistung setzen wenn kein Überschuß - $hsurp->{$shod}{$sbn}{pneedmin} = $bpinreduced; - storeReading ('Battery_ChargeOptTargetPower_'.$sbn, $bpinreduced.' W') if($hsurp->{$shod}{nhr} eq '00'); + #$hsurp->{$shod}{$sbn}{pneedmin} = $bpinreduced; + $otp->{$sbn}{target} = $bpinreduced; + #storeReading ('Battery_ChargeOptTargetPower_'.$sbn, $bpinreduced.' W') if($hsurp->{$shod}{nhr} eq '00'); next; } @@ -11960,7 +11962,8 @@ sub __batChargeOptTargetPower { if ($hsurp->{$shod}{$sbn}{runwh} < $sbatinstcap) { $otp->{$sbn}{maxvals}++; - $otp->{$sbn}{sumneed} += $otp->{$sbn}{maxneed}; + # $otp->{$sbn}{sumneed} += $otp->{$sbn}{maxneed}; + $otp->{$sbn}{sumneed} = $sbatinstcap - $crgwh; } } } @@ -11973,7 +11976,7 @@ sub __batChargeOptTargetPower { next if(!defined $target); my $avg = 0; - my $mv = $otp->{$bn}{maxvals} // 0; + my $mv = $otp->{$bn}{maxvals}; my $sn = $otp->{$bn}{sumneed} // 0; $avg = sprintf "%.0f", ($sn / $mv) if($mv); $target = max ($avg, $target); @@ -11995,7 +11998,7 @@ sub __batChargeOptTargetPower { if ($paref->{debug} =~ /batteryManagement/) { my $mn = $otp->{$bn}{maxneed} // 0; - Log3 ($name, 1, "$name DEBUG> ChargeOTP - max OTP Bat $bn: $mn W, sum need: $sn Wh, number hrs: $mv, OTP-average: $avg W"); + Log3 ($name, 1, "$name DEBUG> ChargeOTP - max OTP Bat $bn: $mn W, sum need: $sn Wh, number hrs: $mv, Average for remaining hours: $avg W"); } } @@ -12013,7 +12016,7 @@ sub __batChargeOptTargetPower { my $otpMargin = $hsurp->{$k}{$bat}{otpMargin}; my $margin = defined $otpMargin ? $otpMargin : SFTYMARGIN_20; my $spls = int $hsurp->{$k}{spswh}; - my $needmin = $hsurp->{$k}{$bat}{pneedmin} // 0; + my $needmin = $hsurp->{$k}{$bat}{pneedmin} // BatteryVal ($name, $bat, 'bpinreduced', 0); if ($hsurp->{$k}{nhr} eq '00') { # Target für aktuelle Stunde my $target = $otp->{$bat}{target} // 0;