76_SolarForecast: contrib version 1.58.2
git-svn-id: https://svn.fhem.de/fhem/trunk@30267 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
@@ -11762,7 +11762,9 @@ sub _batChargeMgmt {
|
|||||||
|
|
||||||
## SOC-Prognose
|
## SOC-Prognose
|
||||||
################# # change V 1.47.0
|
################# # change V 1.47.0
|
||||||
my $fceff = $pvfc - $confc; # effektiver PV Überschuß bzw. effektiver Verbrauch wenn < 0
|
my $surpls = $pvfc - $confc; # effektiver PV Überschuß bzw. effektiver Verbrauch wenn < 0
|
||||||
|
my $fceff = sprintf "%.0f", $surpls; # wichtig keine Nachkommastellen!
|
||||||
|
|
||||||
$fceff = $fceff > 0 ? ($fceff >= $bpinmax ? $bpinmax : $fceff) :
|
$fceff = $fceff > 0 ? ($fceff >= $bpinmax ? $bpinmax : $fceff) :
|
||||||
$fceff < 0 ? ($fceff <= $bpoutmax * -1 ? $bpoutmax * -1 : $fceff) :
|
$fceff < 0 ? ($fceff <= $bpoutmax * -1 ? $bpoutmax * -1 : $fceff) :
|
||||||
$fceff;
|
$fceff;
|
||||||
@@ -11814,8 +11816,8 @@ sub _batChargeMgmt {
|
|||||||
if ($today) { # nur Heute wenn Überschuß vorliegt
|
if ($today) { # nur Heute wenn Überschuß vorliegt
|
||||||
$hsurp->{$hod}{hod} = $hod;
|
$hsurp->{$hod}{hod} = $hod;
|
||||||
$hsurp->{$hod}{nhr} = $nhr;
|
$hsurp->{$hod}{nhr} = $nhr;
|
||||||
$hsurp->{$hod}{fceff} = $fceff; # Überschuß in Wh der Stunde
|
$hsurp->{$hod}{surpls} = $surpls; # Überschuß in Wh der Stunde
|
||||||
$hsurp->{$hod}{spswh} = $spswh;
|
$hsurp->{$hod}{spswh} = $spswh.'.'.$hod; # mit Sortierhilfe
|
||||||
$hsurp->{$hod}{$bn}{spday} = $spday; # (Rest)PV-Überschuß am laufenden Tag
|
$hsurp->{$hod}{$bn}{spday} = $spday; # (Rest)PV-Überschuß am laufenden Tag
|
||||||
$hsurp->{$hod}{$bn}{whneedmanaged} = $whneed; # benötigte Ladeenergie Batterie x gemäß Ladesteuerung
|
$hsurp->{$hod}{$bn}{whneedmanaged} = $whneed; # benötigte Ladeenergie Batterie x gemäß Ladesteuerung
|
||||||
$hsurp->{$hod}{$bn}{socwh} = $socwh;
|
$hsurp->{$hod}{$bn}{socwh} = $socwh;
|
||||||
@@ -11894,10 +11896,10 @@ sub __batChargeOptTargetPower {
|
|||||||
|
|
||||||
my $fipl = CurrentVal ($name, 'feedinPowerLimit', INFINITE);
|
my $fipl = CurrentVal ($name, 'feedinPowerLimit', INFINITE);
|
||||||
my @sorted = sort { $hsurp->{$a}{spswh} <=> $hsurp->{$b}{spswh} } keys %{$hsurp};
|
my @sorted = sort { $hsurp->{$a}{spswh} <=> $hsurp->{$b}{spswh} } keys %{$hsurp};
|
||||||
my @batteries = grep { !/^(?:hod|spswh|fceff|nhr)$/xs } keys %{$hsurp->{24}};
|
my @batteries = grep { !/^(?:hod|spswh|surpls|nhr)$/xs } keys %{$hsurp->{24}};
|
||||||
|
|
||||||
for my $shod (@sorted) {
|
for my $shod (@sorted) {
|
||||||
my $spls = 1 * $hsurp->{$shod}{spswh};
|
my $spls = int $hsurp->{$shod}{spswh};
|
||||||
|
|
||||||
for my $sbn (sort @batteries) { # jede Batterie
|
for my $sbn (sort @batteries) { # jede Batterie
|
||||||
my $runwh = defined $hsurp->{$shod}{$sbn}{fcnextwh} ? # Auswahl des zu verwenden Prognose-SOC (Wh)
|
my $runwh = defined $hsurp->{$shod}{$sbn}{fcnextwh} ? # Auswahl des zu verwenden Prognose-SOC (Wh)
|
||||||
@@ -11916,7 +11918,6 @@ sub __batChargeOptTargetPower {
|
|||||||
my $runwhneed = $sbatinstcap - $runwh;
|
my $runwhneed = $sbatinstcap - $runwh;
|
||||||
my $spday = $hsurp->{$shod}{$sbn}{spday};
|
my $spday = $hsurp->{$shod}{$sbn}{spday};
|
||||||
my $sphrs = $spday / $spls; # Reststunden mit Überschuß = PV-Tagesüberschuß / Stundenüberschuß
|
my $sphrs = $spday / $spls; # Reststunden mit Überschuß = PV-Tagesüberschuß / Stundenüberschuß
|
||||||
|
|
||||||
my $needraw = $sphrs ? $runwhneed / $sphrs : $runwhneed; # Ladeleistung initial
|
my $needraw = $sphrs ? $runwhneed / $sphrs : $runwhneed; # Ladeleistung initial
|
||||||
|
|
||||||
my $otpMargin = $hsurp->{$shod}{$sbn}{otpMargin};
|
my $otpMargin = $hsurp->{$shod}{$sbn}{otpMargin};
|
||||||
@@ -11928,8 +11929,8 @@ sub __batChargeOptTargetPower {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$needraw = 0 if($needraw < 0);
|
$needraw = 0 if($needraw < 0);
|
||||||
|
|
||||||
$hsurp->{$shod}{$sbn}{runwh} = $runwh;
|
$hsurp->{$shod}{$sbn}{runwh} = $runwh;
|
||||||
|
$hsurp->{$shod}{$sbn}{sphrs} = $sphrs; # Reststunden mit Überschuß
|
||||||
$hsurp->{$shod}{$sbn}{pneedmin} = sprintf "%.0f", $spls > $needraw ? # Mindestladeleistung bzw. Energie bei 1h (Wh)
|
$hsurp->{$shod}{$sbn}{pneedmin} = sprintf "%.0f", $spls > $needraw ? # Mindestladeleistung bzw. Energie bei 1h (Wh)
|
||||||
$needraw ? $needraw : $bpinreduced :
|
$needraw ? $needraw : $bpinreduced :
|
||||||
$spls;
|
$spls;
|
||||||
@@ -11945,9 +11946,13 @@ sub __batChargeOptTargetPower {
|
|||||||
for my $k (sort { $a <=> $b } keys %{$hsurp}) {
|
for my $k (sort { $a <=> $b } keys %{$hsurp}) {
|
||||||
for my $bat (sort @batteries) {
|
for my $bat (sort @batteries) {
|
||||||
my $ssoc = $hsurp->{$k}{$bat}{runwh} // '-';
|
my $ssoc = $hsurp->{$k}{$bat}{runwh} // '-';
|
||||||
|
my $sphrs = defined $hsurp->{$k}{$bat}{sphrs} ?
|
||||||
|
'('.($hsurp->{$k}{$bat}{sphrs} ? sprintf "%.1f", $hsurp->{$k}{$bat}{sphrs} : $hsurp->{$k}{$bat}{sphrs}).' hours)' :
|
||||||
|
'';
|
||||||
my $otpMargin = $hsurp->{$k}{$bat}{otpMargin};
|
my $otpMargin = $hsurp->{$k}{$bat}{otpMargin};
|
||||||
my $margin = defined $otpMargin ? $otpMargin : SFTYMARGIN_20;
|
my $margin = defined $otpMargin ? $otpMargin : SFTYMARGIN_20;
|
||||||
Log3 ($name, 1, "$name DEBUG> Bat $bat ChargeOTP - hod: $k, Start SoC: $ssoc Wh, Surplus: $hsurp->{$k}{spswh} Wh, OptTargetPower: $hsurp->{$k}{$bat}{pneedmin} W, safety: $margin %");
|
my $spls = int $hsurp->{$k}{spswh};
|
||||||
|
Log3 ($name, 1, "$name DEBUG> Bat $bat ChargeOTP - hod: $k, Start SoC: $ssoc Wh, Surplus: $spls Wh $sphrs, OptTargetPower: $hsurp->{$k}{$bat}{pneedmin} W, safety: $margin %");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user