76_SolarForecast: contrib version 1.59.5
git-svn-id: https://svn.fhem.de/fhem/trunk@30410 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
@@ -161,7 +161,7 @@ BEGIN {
|
|||||||
# Versions History intern
|
# Versions History intern
|
||||||
my %vNotesIntern = (
|
my %vNotesIntern = (
|
||||||
"1.59.5" => "15.10.2025 new sub ___batAdjustPowerByMargin: implement optPower Safety margin decreasing proportionally to the linear surplus ".
|
"1.59.5" => "15.10.2025 new sub ___batAdjustPowerByMargin: implement optPower Safety margin decreasing proportionally to the linear surplus ".
|
||||||
"new Reading Battery_TargetAchievable_XX ",
|
"new Reading Battery_TargetAchievable_XX, _batSocTarget: minor code change ",
|
||||||
"1.59.4" => "14.10.2025 new subs, ctrlBatSocManagementXX: new key loadTarget, replace __batCapShareFactor by __batDeficitShareFactor ".
|
"1.59.4" => "14.10.2025 new subs, ctrlBatSocManagementXX: new key loadTarget, replace __batCapShareFactor by __batDeficitShareFactor ".
|
||||||
"__batChargeOptTargetPower: use pinmax if achievable==0, new ctrlBatSocManagementXX->stepSoC key ".
|
"__batChargeOptTargetPower: use pinmax if achievable==0, new ctrlBatSocManagementXX->stepSoC key ".
|
||||||
"loadStrategy: possible value smartPower ",
|
"loadStrategy: possible value smartPower ",
|
||||||
@@ -7485,16 +7485,7 @@ sub _attrBatteryDev { ## no critic "not used"
|
|||||||
delete $data{$name}{batteries}{$bn}{bpoutmax};
|
delete $data{$name}{batteries}{$bn}{bpoutmax};
|
||||||
delete $data{$name}{batteries}{$bn}{befficiency};
|
delete $data{$name}{batteries}{$bn}{befficiency};
|
||||||
}
|
}
|
||||||
elsif ($paref->{cmd} eq 'del') {
|
elsif ($paref->{cmd} eq 'del') {
|
||||||
#readingsDelete ($hash, 'Current_PowerBatIn_'.$bn);
|
|
||||||
#readingsDelete ($hash, 'Current_PowerBatOut_'.$bn);
|
|
||||||
#readingsDelete ($hash, 'Current_BatCharge_'.$bn);
|
|
||||||
#readingsDelete ($hash, 'Battery_ChargeOptTargetPower_'.$bn);
|
|
||||||
#readingsDelete ($hash, 'Battery_ChargeUnrestricted_'.$bn);
|
|
||||||
#readingsDelete ($hash, 'Battery_ChargeRequest_'.$bn);
|
|
||||||
#readingsDelete ($hash, 'Battery_OptimumTargetSoC_'.$bn);
|
|
||||||
#readingsDelete ($hash, 'Battery_TargetAchievable_'.$bn);
|
|
||||||
# Liste der lesbaren Namen ohne Suffix und $bn
|
|
||||||
my @fields = qw(
|
my @fields = qw(
|
||||||
Current_PowerBatIn
|
Current_PowerBatIn
|
||||||
Current_PowerBatOut
|
Current_PowerBatOut
|
||||||
@@ -11436,7 +11427,7 @@ sub _batSocTarget {
|
|||||||
delete $paref->{batnmb};
|
delete $paref->{batnmb};
|
||||||
delete $paref->{careCycle};
|
delete $paref->{careCycle};
|
||||||
|
|
||||||
my $nt = '';
|
# my $nt = '';
|
||||||
my $chargereq = 0; # Ladeanforderung wenn SoC unter Minimum SoC gefallen ist
|
my $chargereq = 0; # Ladeanforderung wenn SoC unter Minimum SoC gefallen ist
|
||||||
my $target = $lowSoc;
|
my $target = $lowSoc;
|
||||||
my $yday = strftime "%d", localtime($t - 86400); # Vortag (range 01 to 31)
|
my $yday = strftime "%d", localtime($t - 86400); # Vortag (range 01 to 31)
|
||||||
@@ -11468,9 +11459,12 @@ sub _batSocTarget {
|
|||||||
|
|
||||||
## Pflege-SoC (Soll SoC MAXSOCDEF bei $stepSoc % Steigerung p. Tag)
|
## Pflege-SoC (Soll SoC MAXSOCDEF bei $stepSoc % Steigerung p. Tag)
|
||||||
#####################################################################
|
#####################################################################
|
||||||
my $sunset = CurrentVal ($name, 'sunsetTodayTs', $t);
|
my $sunset = CurrentVal ($name, 'sunsetTodayTs', $t);
|
||||||
my $delayts = $sunset - 5400; # Pflege-SoC/Erhöhung SoC erst ab 1,5h vor Sonnenuntergang berechnen/anwenden
|
my $sunrise = CurrentVal ($name, 'sunriseTodayTs', $t);
|
||||||
my $la = '';
|
#my $delayts = $sunset - 5400; # Pflege-SoC/Erhöhung SoC erst ab 1,5h vor Sonnenuntergang berechnen/anwenden
|
||||||
|
my $delayts = $sunrise + (($sunset - $sunrise) / 2); # V 1.59.5 neues SoC-Ziel ab ca. Mittag berechnen/anwenden
|
||||||
|
my $nt = (timestampToTimestring ($delayts, $paref->{lang}))[0];
|
||||||
|
my $la = '';
|
||||||
my $careSoc = $target;
|
my $careSoc = $target;
|
||||||
|
|
||||||
my $ntsmsc = CircularVal ($name, 99, 'nextTsMaxSocChge'.$bn, $t);
|
my $ntsmsc = CircularVal ($name, 99, 'nextTsMaxSocChge'.$bn, $t);
|
||||||
@@ -11478,8 +11472,7 @@ sub _batSocTarget {
|
|||||||
my $docare = 0; # keine Zwangsanwendung care SoC
|
my $docare = 0; # keine Zwangsanwendung care SoC
|
||||||
|
|
||||||
my $whneed = ($maxSoc / 100 * $batinstcap) - ($soc / 100 * $batinstcap); # benötigte Ladeenergie in Wh bis $maxSoc
|
my $whneed = ($maxSoc / 100 * $batinstcap) - ($soc / 100 * $batinstcap); # benötigte Ladeenergie in Wh bis $maxSoc
|
||||||
$whneed = $whneed < 0 ? 0 : $whneed;
|
$whneed = sprintf "%.0f", max (0, $whneed);
|
||||||
$whneed = sprintf "%.0f", $whneed;
|
|
||||||
|
|
||||||
if ($t > $delayts || $pvexpect < $whneed || !$days2care) {
|
if ($t > $delayts || $pvexpect < $whneed || !$days2care) {
|
||||||
$paref->{batnmb} = $bn;
|
$paref->{batnmb} = $bn;
|
||||||
@@ -11501,8 +11494,7 @@ sub _batSocTarget {
|
|||||||
$la = "calc care SoC -> docare: $docare, care SoC: $careSoc %, Remaining days until care SoC: $days2care, Target: $target %";
|
$la = "calc care SoC -> docare: $docare, care SoC: $careSoc %, Remaining days until care SoC: $days2care, Target: $target %";
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$nt = (timestampToTimestring ($delayts, $paref->{lang}))[0];
|
$la = "calc care SoC -> docare: $docare, care SoC: $careSoc %, use preliminary Target: $target % (new care SoC calc & act postponed to after $nt)";
|
||||||
$la = "calc care SoC -> docare: $docare, care SoC: $careSoc %, use preliminary Target: $target % (care SoC calculation & activation postponed to after $nt)";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
debugLog ($paref, 'batteryManagement', "SoC Step2 Bat $bn - basics -> Energy expected for charging: $pvexpect Wh, need until maxsoc: $whneed Wh");
|
debugLog ($paref, 'batteryManagement', "SoC Step2 Bat $bn - basics -> Energy expected for charging: $pvexpect Wh, need until maxsoc: $whneed Wh");
|
||||||
@@ -11525,14 +11517,13 @@ sub _batSocTarget {
|
|||||||
|
|
||||||
my $logadd = '';
|
my $logadd = '';
|
||||||
|
|
||||||
if ($newtarget > $csopt && $t > $delayts) { # Erhöhung des SoC (wird ab Sonnenuntergang angewendet)
|
if ($newtarget > $csopt && $t > $delayts) { # Erhöhung des SoC (wird ab delayts angewendet)
|
||||||
$target = $newtarget;
|
$target = $newtarget;
|
||||||
$logadd = "(new target > $csopt % and Sunset has passed)";
|
$logadd = "(new target > $csopt % and Sunset has passed)";
|
||||||
}
|
}
|
||||||
elsif ($newtarget > $csopt && $t <= $delayts && !$docare) { # bisheriges Optimum bleibt vorerst
|
elsif ($newtarget > $csopt && $t <= $delayts && !$docare) { # bisheriges Optimum bleibt vorerst
|
||||||
$target = $csopt;
|
$target = $csopt;
|
||||||
$nt = (timestampToTimestring ($delayts, $paref->{lang}))[0];
|
$logadd = "(new target SoC is calculated & activated after $nt)";
|
||||||
$logadd = "(new target $newtarget % is activated after $nt)";
|
|
||||||
}
|
}
|
||||||
elsif ($newtarget < $csopt) { # Targetminderung sofort umsetzen -> Freiplatz für Ladeprognose
|
elsif ($newtarget < $csopt) { # Targetminderung sofort umsetzen -> Freiplatz für Ladeprognose
|
||||||
$target = $newtarget;
|
$target = $newtarget;
|
||||||
|
|||||||
Reference in New Issue
Block a user