76_SolarForecast: contrib V1.58.0
git-svn-id: https://svn.fhem.de/fhem/trunk@30255 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
@@ -160,7 +160,8 @@ BEGIN {
|
|||||||
|
|
||||||
# Versions History intern
|
# Versions History intern
|
||||||
my %vNotesIntern = (
|
my %vNotesIntern = (
|
||||||
"1.58.0" => "29.08.2025 _batChargeMgmt: Code change and new loading feature with Reading Battery_ChargeOptTargetPower_XX ".
|
"1.58.0" => "06.09.2025 _batChargeMgmt: Code change and new loading feature with Reading Battery_ChargeOptTargetPower_XX ".
|
||||||
|
"ctrlBatSocManagementXX: new parameter safetyMargin ".
|
||||||
"edit Comref, delete obsolete Attr graphicBeamHeightLevelX, new parameter setupBatteryDevXX->pinreduced ",
|
"edit Comref, delete obsolete Attr graphicBeamHeightLevelX, new parameter setupBatteryDevXX->pinreduced ",
|
||||||
"1.57.3" => "26.08.2025 set default Performance Ratio PRDEF to 0.9, prevent crash when Victron API does not return an Array ".
|
"1.57.3" => "26.08.2025 set default Performance Ratio PRDEF to 0.9, prevent crash when Victron API does not return an Array ".
|
||||||
"check global attribute dnsServer in all SF Models, expand plantControl->genPVdeviation for perspective change ".
|
"check global attribute dnsServer in all SF Models, expand plantControl->genPVdeviation for perspective change ".
|
||||||
@@ -454,6 +455,8 @@ use constant {
|
|||||||
APITIMEOUT => 30, # default Timeout HTTP API-Call
|
APITIMEOUT => 30, # default Timeout HTTP API-Call
|
||||||
|
|
||||||
PRDEF => 0.9, # default Performance Ratio (PR)
|
PRDEF => 0.9, # default Performance Ratio (PR)
|
||||||
|
SFTYMARGIN_20 => 20, # Sicherheitszuschlag 20%
|
||||||
|
SFTYMARGIN_50 => 50, # Sicherheitszuschlag 50%
|
||||||
STOREFFDEF => 0.90, # default Batterie Effizienz (https://www.energie-experten.org/erneuerbare-energien/photovoltaik/stromspeicher/wirkungsgrad)
|
STOREFFDEF => 0.90, # default Batterie Effizienz (https://www.energie-experten.org/erneuerbare-energien/photovoltaik/stromspeicher/wirkungsgrad)
|
||||||
TEMPCOEFFDEF => -0.45, # default Temperaturkoeffizient Pmpp (%/°C) lt. Datenblatt Solarzelle
|
TEMPCOEFFDEF => -0.45, # default Temperaturkoeffizient Pmpp (%/°C) lt. Datenblatt Solarzelle
|
||||||
TEMPMODINC => 25, # default Temperaturerhöhung an Solarzellen gegenüber Umgebungstemperatur bei wolkenlosem Himmel
|
TEMPMODINC => 25, # default Temperaturerhöhung an Solarzellen gegenüber Umgebungstemperatur bei wolkenlosem Himmel
|
||||||
@@ -7502,6 +7505,7 @@ sub _attrBatSocManagement { ## no critic "not used"
|
|||||||
lcSlot => { comp => '((?:[01]\d|2[0-3]):[0-5]\d-(?:[01]\d|2[0-3]):[0-5]\d)', must => 0, act => 1 },
|
lcSlot => { comp => '((?:[01]\d|2[0-3]):[0-5]\d-(?:[01]\d|2[0-3]):[0-5]\d)', must => 0, act => 1 },
|
||||||
careCycle => { comp => '\d+', must => 0, act => 0 },
|
careCycle => { comp => '\d+', must => 0, act => 0 },
|
||||||
loadAbort => { comp => '(?:100|[1-9]?[0-9]):\d+(?::(?:100|[1-9]?[0-9]))?', must => 0, act => 0 },
|
loadAbort => { comp => '(?:100|[1-9]?[0-9]):\d+(?::(?:100|[1-9]?[0-9]))?', must => 0, act => 0 },
|
||||||
|
safetyMargin => { comp => '(?:100|[1-9]?\d)', must => 0, act => 0 },
|
||||||
};
|
};
|
||||||
|
|
||||||
my ($a, $h) = parseParams ($aVal);
|
my ($a, $h) = parseParams ($aVal);
|
||||||
@@ -11514,6 +11518,7 @@ sub __parseAttrBatSoc {
|
|||||||
careCycle => $ph->{careCycle} // CARECYCLEDEF, # Ladungszyklus (Maintenance) für maxSoC in Tagen
|
careCycle => $ph->{careCycle} // CARECYCLEDEF, # Ladungszyklus (Maintenance) für maxSoC in Tagen
|
||||||
lcslot => $ph->{lcSlot},
|
lcslot => $ph->{lcSlot},
|
||||||
loadAbort => $ph->{loadAbort},
|
loadAbort => $ph->{loadAbort},
|
||||||
|
safetyMargin => $ph->{safetyMargin},
|
||||||
};
|
};
|
||||||
|
|
||||||
return $parsed;
|
return $parsed;
|
||||||
@@ -11626,15 +11631,18 @@ sub _batChargeMgmt {
|
|||||||
my $sf = __batCapShareFactor ($hash, $bn); # Anteilsfaktor der Batterie XX Kapazität an Gesamtkapazität
|
my $sf = __batCapShareFactor ($hash, $bn); # Anteilsfaktor der Batterie XX Kapazität an Gesamtkapazität
|
||||||
my $lowSoc = 0;
|
my $lowSoc = 0;
|
||||||
my $loadAbort = '';
|
my $loadAbort = '';
|
||||||
my $lcslot;
|
my ($lcslot, $safetyMargin);
|
||||||
|
|
||||||
if ($cgbt) {
|
if ($cgbt) {
|
||||||
my $parsed = __parseAttrBatSoc ($name, $cgbt);
|
my $parsed = __parseAttrBatSoc ($name, $cgbt);
|
||||||
$lowSoc = $parsed->{lowSoc} // 0;
|
$lowSoc = $parsed->{lowSoc} // 0;
|
||||||
$lcslot = $parsed->{lcslot};
|
$lcslot = $parsed->{lcslot};
|
||||||
$loadAbort = $parsed->{loadAbort};
|
$loadAbort = $parsed->{loadAbort};
|
||||||
|
$safetyMargin = $parsed->{safetyMargin};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
my $margin = defined $safetyMargin ? $safetyMargin : SFTYMARGIN_50; # Sicherheitszuschlag (%)
|
||||||
|
|
||||||
## generelle Ladeabbruchbedingung evaluieren
|
## generelle Ladeabbruchbedingung evaluieren
|
||||||
##############################################
|
##############################################
|
||||||
if ($loadAbort) {
|
if ($loadAbort) {
|
||||||
@@ -11656,24 +11664,26 @@ sub _batChargeMgmt {
|
|||||||
|
|
||||||
my $labortCond = BatteryVal ($name, $bn, 'bloadAbortCond', 0); # Ladeabbruchbedingung gesetzt 1 oder nicht 0
|
my $labortCond = BatteryVal ($name, $bn, 'bloadAbortCond', 0); # Ladeabbruchbedingung gesetzt 1 oder nicht 0
|
||||||
|
|
||||||
debugLog ($paref, 'batteryManagement', "Bat $bn ChargeMgmt - General load termination condition: $labortCond");
|
|
||||||
|
|
||||||
## Zeitfenster für aktives Lademanagement ermitteln
|
## Zeitfenster für aktives Lademanagement ermitteln
|
||||||
#####################################################
|
#####################################################
|
||||||
$lcslot //= '00:00-23:59';
|
$lcslot //= '00:00-23:59';
|
||||||
my ($lcstart, $lcend) = split "-", $lcslot;
|
my ($lcstart, $lcend) = split "-", $lcslot;
|
||||||
|
|
||||||
debugLog ($paref, 'batteryManagement', "Bat $bn ChargeMgmt - control time Slot - Slot start: $lcstart, Slot end: $lcend");
|
|
||||||
|
|
||||||
my $batoptsocwh = $batinstcap * $batoptsoc / 100; # optimaler SoC in Wh
|
my $batoptsocwh = $batinstcap * $batoptsoc / 100; # optimaler SoC in Wh
|
||||||
my $lowSocwh = $batinstcap * $lowSoc / 100; # lowSoC in Wh
|
my $lowSocwh = $batinstcap * $lowSoc / 100; # lowSoC in Wh
|
||||||
|
|
||||||
debugLog ($paref, 'batteryManagement', "Bat $bn ChargeMgmt - Installed Battery capacity: $batinstcap Wh, Percentage of total capacity: ".(sprintf "%.1f", $sf*100)." %");
|
|
||||||
debugLog ($paref, 'batteryManagement', "Bat $bn ChargeMgmt - The PV generation, consumption and surplus listed below are based on the battery's share of total installed capacity!");
|
|
||||||
|
|
||||||
my $socwh = sprintf "%.0f", ($batinstcap * $csoc / 100); # aktueller SoC in Wh
|
my $socwh = sprintf "%.0f", ($batinstcap * $csoc / 100); # aktueller SoC in Wh
|
||||||
my $whneed = $batinstcap - $socwh;
|
my $whneed = $batinstcap - $socwh;
|
||||||
|
|
||||||
|
# Debug Log
|
||||||
|
#############
|
||||||
|
if ($paref->{debug} =~ /batteryManagement/) {
|
||||||
|
Log3 ($name, 1, "$name DEBUG> Bat $bn ChargeMgmt - General load termination condition: $labortCond");
|
||||||
|
Log3 ($name, 1, "$name DEBUG> Bat $bn ChargeMgmt - control time Slot - Slot start: $lcstart, Slot end: $lcend");
|
||||||
|
Log3 ($name, 1, "$name DEBUG> Bat $bn ChargeMgmt - used safety margin: $margin %");
|
||||||
|
Log3 ($name, 1, "$name DEBUG> Bat $bn ChargeMgmt - Installed Battery capacity: $batinstcap Wh, Percentage of total capacity: ".(sprintf "%.1f", $sf*100)." %");
|
||||||
|
Log3 ($name, 1, "$name DEBUG> Bat $bn ChargeMgmt - The PV generation, consumption and surplus listed below are based on the battery's share of total installed capacity!");
|
||||||
|
}
|
||||||
|
|
||||||
## Auswertung für jede kommende Stunde
|
## Auswertung für jede kommende Stunde
|
||||||
########################################
|
########################################
|
||||||
for my $num (0..MAXNEXTHOURS) {
|
for my $num (0..MAXNEXTHOURS) {
|
||||||
@@ -11719,7 +11729,6 @@ sub _batChargeMgmt {
|
|||||||
|
|
||||||
## (Rest) PV-Überschuß für den Tag
|
## (Rest) PV-Überschuß für den Tag
|
||||||
####################################
|
####################################
|
||||||
#if ($pvfc) {
|
|
||||||
if ($today) { # heutiger Tag
|
if ($today) { # heutiger Tag
|
||||||
$confcss -= $confc; # Verbrauch bis Sonnenuntergang - Verbrauch Fc aktuelle Stunde
|
$confcss -= $confc; # Verbrauch bis Sonnenuntergang - Verbrauch Fc aktuelle Stunde
|
||||||
$confcss = 0 if($confcss < 0);
|
$confcss = 0 if($confcss < 0);
|
||||||
@@ -11733,14 +11742,12 @@ sub _batChargeMgmt {
|
|||||||
$tompvfc -= $pvfc;
|
$tompvfc -= $pvfc;
|
||||||
$spday = $tompvfc - $tomconfc;
|
$spday = $tompvfc - $tomconfc;
|
||||||
}
|
}
|
||||||
#}
|
|
||||||
|
|
||||||
$spday = 0 if($spday < 0); # PV Überschuß Prognose bis Sonnenuntergang
|
$spday = 0 if($spday < 0); # PV Überschuß Prognose bis Sonnenuntergang
|
||||||
my $sfmargin = $whneed * 0.5; # Sicherheitszuschlag: X% der benötigten Ladeenergie (Wh)
|
|
||||||
|
|
||||||
## Ladefreigabe
|
## Ladefreigabe
|
||||||
#################
|
#################
|
||||||
if ( $whneed + $sfmargin >= $spday ) {$crel = 1} # Ladefreigabe wenn benötigte Ladeenergie >= Restüberschuß des Tages zzgl. Sicherheitsaufschlag
|
if ( $whneed * (1 + ($margin / 100)) >= $spday ) {$crel = 1} # Ladefreigabe wenn benötigte Ladeenergie >= Restüberschuß des Tages zzgl. Sicherheitsaufschlag
|
||||||
if ( !$num && ($pvCu - $curcon) >= $inplim ) {$crel = 1} # Ladefreigabe wenn akt. PV Leistung - Abschläge >= WR-Leistungsbegrenzung
|
if ( !$num && ($pvCu - $curcon) >= $inplim ) {$crel = 1} # Ladefreigabe wenn akt. PV Leistung - Abschläge >= WR-Leistungsbegrenzung
|
||||||
if ( !$bpin && $gfeedin > $feedinlim ) {$crel = 1} # V 1.49.6 Ladefreigabe wenn akt. keine Bat-Ladung UND akt. Einspeisung > Einspeiselimit der Anlage
|
if ( !$bpin && $gfeedin > $feedinlim ) {$crel = 1} # V 1.49.6 Ladefreigabe wenn akt. keine Bat-Ladung UND akt. Einspeisung > Einspeiselimit der Anlage
|
||||||
if ( $bpin && ($gfeedin - $bpin) > $feedinlim ) {$crel = 1} # V 1.49.6 Ladefreigabe wenn akt. Bat-Ladung UND Eispeisung - Bat-Ladung > Einspeiselimit der Anlage
|
if ( $bpin && ($gfeedin - $bpin) > $feedinlim ) {$crel = 1} # V 1.49.6 Ladefreigabe wenn akt. Bat-Ladung UND Eispeisung - Bat-Ladung > Einspeiselimit der Anlage
|
||||||
@@ -11758,8 +11765,6 @@ sub _batChargeMgmt {
|
|||||||
$socwh += $crel ? ($fceff > 0 ? $fceff * STOREFFDEF : $fceff / STOREFFDEF) :
|
$socwh += $crel ? ($fceff > 0 ? $fceff * STOREFFDEF : $fceff / STOREFFDEF) :
|
||||||
($fceff > 0 ? 0 : $fceff / STOREFFDEF); # PV Überschuß (d.h. Aufladung) nur einbeziehen wenn Ladefreigabe
|
($fceff > 0 ? 0 : $fceff / STOREFFDEF); # PV Überschuß (d.h. Aufladung) nur einbeziehen wenn Ladefreigabe
|
||||||
|
|
||||||
# debugLog ($paref, 'batteryManagement', "Bat $bn Charge - crel: $crel, fceff: $fceff, socwh: $socwh");
|
|
||||||
|
|
||||||
$socwh = $socwh < $lowSocwh ? $lowSocwh :
|
$socwh = $socwh < $lowSocwh ? $lowSocwh :
|
||||||
$socwh < $batoptsocwh ? $batoptsocwh : # SoC Prognose in Wh
|
$socwh < $batoptsocwh ? $batoptsocwh : # SoC Prognose in Wh
|
||||||
$socwh > $batinstcap ? $batinstcap :
|
$socwh > $batinstcap ? $batinstcap :
|
||||||
@@ -11810,6 +11815,7 @@ sub _batChargeMgmt {
|
|||||||
$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;
|
||||||
$hsurp->{$hod}{$bn}{batinstcap} = $batinstcap;
|
$hsurp->{$hod}{$bn}{batinstcap} = $batinstcap;
|
||||||
|
$hsurp->{$hod}{$bn}{safetyMargin} = $safetyMargin; # Sicherheitszuschlag für Berechnungen
|
||||||
}
|
}
|
||||||
|
|
||||||
# prognostizierten Daten in pvHistory speichern
|
# prognostizierten Daten in pvHistory speichern
|
||||||
@@ -11881,18 +11887,14 @@ sub __batChargeOptTargetPower {
|
|||||||
my $name = $paref->{name};
|
my $name = $paref->{name};
|
||||||
my $hsurp = $paref->{hsurp} // return; # Hashref Überschußhash
|
my $hsurp = $paref->{hsurp} // return; # Hashref Überschußhash
|
||||||
|
|
||||||
|
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}};
|
||||||
#for my $h (@sorted) {
|
|
||||||
# Log3 ($name, 1, "$name - sortierte Stunden: $h, surplus: $hsurp->{$h}{spswh}");
|
|
||||||
#}
|
|
||||||
|
|
||||||
for my $shod (@sorted) {
|
for my $shod (@sorted) {
|
||||||
my $spls = 1 * $hsurp->{$shod}{spswh};
|
my $spls = 1 * $hsurp->{$shod}{spswh};
|
||||||
|
|
||||||
for my $sbn (sort keys %{$hsurp->{$shod}}) { # jede Batterie
|
for my $sbn (sort @batteries) { # jede Batterie
|
||||||
next if($sbn =~ /hod|spswh|fceff|nhr/xs);
|
|
||||||
|
|
||||||
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)
|
||||||
$hsurp->{$shod}{$sbn}{fcnextwh} :
|
$hsurp->{$shod}{$sbn}{fcnextwh} :
|
||||||
$hsurp->{$shod}{$sbn}{socwh};
|
$hsurp->{$shod}{$sbn}{socwh};
|
||||||
@@ -11911,13 +11913,16 @@ sub __batChargeOptTargetPower {
|
|||||||
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
|
||||||
$needraw *= 1.2; # 20% Sicherheitsaufschlag
|
|
||||||
my $fipl = CurrentVal ($name, 'feedinPowerLimit', INFINITE);
|
|
||||||
$needraw = $spls - $needraw > $fipl ? # Einspeiselimit berücksichtigen
|
|
||||||
$needraw + (($spls - $needraw) - $fipl) :
|
|
||||||
$needraw;
|
|
||||||
|
|
||||||
$needraw = $needraw < 0 ? 0 : $needraw;
|
my $safetyMargin = $hsurp->{$shod}{$sbn}{safetyMargin};
|
||||||
|
my $margin = defined $safetyMargin ? $safetyMargin : SFTYMARGIN_20;
|
||||||
|
$needraw *= 1 + ($margin / 100); # Sicherheitsaufschlag
|
||||||
|
|
||||||
|
if ($spls - $needraw > $fipl) { # Einspeiselimit berücksichtigen
|
||||||
|
$needraw += ($spls - $needraw) - $fipl;
|
||||||
|
}
|
||||||
|
|
||||||
|
$needraw = 0 if($needraw < 0);
|
||||||
|
|
||||||
$hsurp->{$shod}{$sbn}{runwh} = $runwh;
|
$hsurp->{$shod}{$sbn}{runwh} = $runwh;
|
||||||
$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)
|
||||||
@@ -11933,10 +11938,11 @@ sub __batChargeOptTargetPower {
|
|||||||
|
|
||||||
if ($paref->{debug} =~ /batteryManagement/) {
|
if ($paref->{debug} =~ /batteryManagement/) {
|
||||||
for my $k (sort { $a <=> $b } keys %{$hsurp}) {
|
for my $k (sort { $a <=> $b } keys %{$hsurp}) {
|
||||||
for my $bat (sort keys %{$hsurp->{$k}}) {
|
for my $bat (sort @batteries) {
|
||||||
next if($bat =~ /hod|spswh|fceff|nhr/xs);
|
|
||||||
my $ssoc = $hsurp->{$k}{$bat}{runwh} // '-';
|
my $ssoc = $hsurp->{$k}{$bat}{runwh} // '-';
|
||||||
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");
|
my $safetyMargin = $hsurp->{$k}{$bat}{safetyMargin};
|
||||||
|
my $margin = defined $safetyMargin ? $safetyMargin : 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 %");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -26766,7 +26772,10 @@ to ensure that the system configuration is correct.
|
|||||||
<br>
|
<br>
|
||||||
|
|
||||||
<a id="SolarForecast-attr-ctrlBatSocManagementXX" data-pattern="ctrlBatSocManagement.*"></a>
|
<a id="SolarForecast-attr-ctrlBatSocManagementXX" data-pattern="ctrlBatSocManagement.*"></a>
|
||||||
<li><b>ctrlBatSocManagementXX lowSoc=<Value> upSoC=<Value> [maxSoC=<Value>] [careCycle=<Value>] [lcSlot=<hh:mm>-<hh:mm>] [loadAbort=<SoC1>:<MinPwr>:<SoC2>] </b> <br><br>
|
<li><b>ctrlBatSocManagementXX lowSoc=<Value> upSoC=<Value> [maxSoC=<Value>] [careCycle=<Value>]
|
||||||
|
[lcSlot=<hh:mm>-<hh:mm>] [loadAbort=<SoC1>:<MinPwr>:<SoC2>]
|
||||||
|
[safetyMargin=<Value>] </b> <br><br>
|
||||||
|
|
||||||
If a battery device (setupBatteryDevXX) is installed, this attribute activates the battery SoC and charge management
|
If a battery device (setupBatteryDevXX) is installed, this attribute activates the battery SoC and charge management
|
||||||
for this battery device. <br>
|
for this battery device. <br>
|
||||||
A set of control readings is generated; the module itself does not interfere with battery control. <br>
|
A set of control readings is generated; the module itself does not interfere with battery control. <br>
|
||||||
@@ -26775,7 +26784,9 @@ to ensure that the system configuration is correct.
|
|||||||
In this case, the battery should be forcibly charged, possibly with mains power. <br>
|
In this case, the battery should be forcibly charged, possibly with mains power. <br>
|
||||||
The reading <b>Battery_ChargeUnrestricted_XX</b> indicates whether the battery should be charged at full power without
|
The reading <b>Battery_ChargeUnrestricted_XX</b> indicates whether the battery should be charged at full power without
|
||||||
restriction (1), or not at all, or only when the <br>
|
restriction (1), or not at all, or only when the <br>
|
||||||
feed-in limit (see <a href="#SolarForecast-attr-plantControl">plantControl->feedinPowerLimit</a>) is exceeded (0). <br>
|
feed-in limit (see <a href="#SolarForecast-attr-plantControl">plantControl->feedinPowerLimit</a>) is exceeded (0).
|
||||||
|
If you want to charge the battery continuously throughout the day, Reading
|
||||||
|
<b>Battery_ChargeOptTargetPower_XX</b> provides optimized charging power for battery control. <br>
|
||||||
The readings can be used to control the SoC (State of Charge) and to control the charging power used for the
|
The readings can be used to control the SoC (State of Charge) and to control the charging power used for the
|
||||||
battery. <br>
|
battery. <br>
|
||||||
Detailed information on battery SoC and charging management is described in the
|
Detailed information on battery SoC and charging management is described in the
|
||||||
@@ -26808,6 +26819,10 @@ to ensure that the system configuration is correct.
|
|||||||
<tr><td> </td><td>If the current SoC falls below the specified SoC2, the <b>Battery_ChargeAbort_XX=0</b> is set. </td></tr>
|
<tr><td> </td><td>If the current SoC falls below the specified SoC2, the <b>Battery_ChargeAbort_XX=0</b> is set. </td></tr>
|
||||||
<tr><td> </td><td>If SoC2 is not specified, SoC2=SoC1. </td></tr>
|
<tr><td> </td><td>If SoC2 is not specified, SoC2=SoC1. </td></tr>
|
||||||
<tr><td> </td><td> </td></tr>
|
<tr><td> </td><td> </td></tr>
|
||||||
|
<tr><td> <b>safetyMargin</b> </td><td>A safety margin is taken into account when calculating the load clearance and optimized load </td></tr>
|
||||||
|
<tr><td> </td><td>capacity. This parameter can be used to specify a value that differs from the default. </td></tr>
|
||||||
|
<tr><td> </td><td>Value in percent: <b>0..100</b> </td></tr>
|
||||||
|
<tr><td> </td><td> </td></tr>
|
||||||
</table>
|
</table>
|
||||||
</ul>
|
</ul>
|
||||||
<br>
|
<br>
|
||||||
@@ -26815,7 +26830,7 @@ to ensure that the system configuration is correct.
|
|||||||
All SoC values are whole numbers in %. The following applies: 'lowSoc' < 'upSoC' < 'maxSoC'. <br><br>
|
All SoC values are whole numbers in %. The following applies: 'lowSoc' < 'upSoC' < 'maxSoC'. <br><br>
|
||||||
|
|
||||||
<b>Example: </b> <br>
|
<b>Example: </b> <br>
|
||||||
attr <name> ctrlBatSocManagement01 lowSoc=10 upSoC=50 maxSoC=99 careCycle=25 lcSlot=11:00-17:30 loadAbort=99:40:90 <br>
|
attr <name> ctrlBatSocManagement01 lowSoc=10 upSoC=50 maxSoC=99 careCycle=25 lcSlot=11:00-17:30 loadAbort=99:40:90 safetyMargin=30 <br>
|
||||||
</li>
|
</li>
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
@@ -29430,7 +29445,10 @@ die ordnungsgemäße Anlagenkonfiguration geprüft werden.
|
|||||||
<br>
|
<br>
|
||||||
|
|
||||||
<a id="SolarForecast-attr-ctrlBatSocManagementXX" data-pattern="ctrlBatSocManagement.*"></a>
|
<a id="SolarForecast-attr-ctrlBatSocManagementXX" data-pattern="ctrlBatSocManagement.*"></a>
|
||||||
<li><b>ctrlBatSocManagementXX lowSoc=<Wert> upSoC=<Wert> [maxSoC=<Wert>] [careCycle=<Wert>] [lcSlot=<hh:mm>-<hh:mm>] [loadAbort=<SoC1>:<MinPwr>:<SoC2>] </b> <br><br>
|
<li><b>ctrlBatSocManagementXX lowSoc=<Wert> upSoC=<Wert> [maxSoC=<Wert>] [careCycle=<Wert>]
|
||||||
|
[lcSlot=<hh:mm>-<hh:mm>] [loadAbort=<SoC1>:<MinPwr>:<SoC2>]
|
||||||
|
[safetyMargin=<Wert>] </b> <br><br>
|
||||||
|
|
||||||
Sofern ein Batterie Device (setupBatteryDevXX) installiert ist, aktiviert dieses Attribut das Batterie
|
Sofern ein Batterie Device (setupBatteryDevXX) installiert ist, aktiviert dieses Attribut das Batterie
|
||||||
SoC- und Lade-Management für dieses Batteriegerät. <br>
|
SoC- und Lade-Management für dieses Batteriegerät. <br>
|
||||||
Es wird ein Satz Steuerreadings erstellt; das Modul greift selbst <b>nicht</b> in die Batteriesteuerung ein. <br>
|
Es wird ein Satz Steuerreadings erstellt; das Modul greift selbst <b>nicht</b> in die Batteriesteuerung ein. <br>
|
||||||
@@ -29441,7 +29459,8 @@ die ordnungsgemäße Anlagenkonfiguration geprüft werden.
|
|||||||
Das Reading <b>Battery_ChargeUnrestricted_XX</b> gibt an, ob die Batterie uneingeschränkt mit voller Leistung (1), oder
|
Das Reading <b>Battery_ChargeUnrestricted_XX</b> gibt an, ob die Batterie uneingeschränkt mit voller Leistung (1), oder
|
||||||
nicht bzw. nur bei Überschreitung des <br>
|
nicht bzw. nur bei Überschreitung des <br>
|
||||||
Einspeiselimits (siehe <a href="#SolarForecast-attr-plantControl">plantControl->feedinPowerLimit</a>)
|
Einspeiselimits (siehe <a href="#SolarForecast-attr-plantControl">plantControl->feedinPowerLimit</a>)
|
||||||
geladen werden sollte (0). <br>
|
geladen werden sollte (0). Möchte man die Batterie kontinuierlich über den gesamten Tag aufladen, wird im Reading
|
||||||
|
<b>Battery_ChargeOptTargetPower_XX</b> eine optimierte Ladeleistung zur Batteriesteuerung bereitgestellt. <br>
|
||||||
Die Readings können zur Steuerung des SoC (State of Charge) sowie zur Steuerung des verwendeten Ladeleistung
|
Die Readings können zur Steuerung des SoC (State of Charge) sowie zur Steuerung des verwendeten Ladeleistung
|
||||||
der Batterie verwendet werden. <br>
|
der Batterie verwendet werden. <br>
|
||||||
Detaillierte Informationen zum Batterie SoC- und Lade-Management sind im
|
Detaillierte Informationen zum Batterie SoC- und Lade-Management sind im
|
||||||
@@ -29474,6 +29493,10 @@ die ordnungsgemäße Anlagenkonfiguration geprüft werden.
|
|||||||
<tr><td> </td><td>Fällt der aktuelle SoC wieder unter den SoC2, wird <b>Battery_ChargeAbort_XX=0</b> gesetzt. </td></tr>
|
<tr><td> </td><td>Fällt der aktuelle SoC wieder unter den SoC2, wird <b>Battery_ChargeAbort_XX=0</b> gesetzt. </td></tr>
|
||||||
<tr><td> </td><td>Ist SoC2 nicht angegeben, gilt SoC2=SoC1. </td></tr>
|
<tr><td> </td><td>Ist SoC2 nicht angegeben, gilt SoC2=SoC1. </td></tr>
|
||||||
<tr><td> </td><td> </td></tr>
|
<tr><td> </td><td> </td></tr>
|
||||||
|
<tr><td> <b>safetyMargin</b> </td><td>Bei der Berechnung der Ladefreigabe und optimierten Ladeleistung wird ein Sicherheitszuschlag </td></tr>
|
||||||
|
<tr><td> </td><td>berücksichtigt. Abweichend vom Default kann mit diesem Parameter ein Wert angegeben werden. </td></tr>
|
||||||
|
<tr><td> </td><td>Wert in Prozent: <b>0..100</b> </td></tr>
|
||||||
|
<tr><td> </td><td> </td></tr>
|
||||||
</table>
|
</table>
|
||||||
</ul>
|
</ul>
|
||||||
<br>
|
<br>
|
||||||
@@ -29481,7 +29504,7 @@ die ordnungsgemäße Anlagenkonfiguration geprüft werden.
|
|||||||
Alle SoC-Werte sind ganze Zahlen in %. Dabei gilt: 'lowSoc' < 'upSoC' < 'maxSoC'. <br><br>
|
Alle SoC-Werte sind ganze Zahlen in %. Dabei gilt: 'lowSoc' < 'upSoC' < 'maxSoC'. <br><br>
|
||||||
|
|
||||||
<b>Beispiel: </b> <br>
|
<b>Beispiel: </b> <br>
|
||||||
attr <name> ctrlBatSocManagement01 lowSoc=10 upSoC=50 maxSoC=99 careCycle=25 lcSlot=11:00-17:30 loadAbort=99:40:90 <br>
|
attr <name> ctrlBatSocManagement01 lowSoc=10 upSoC=50 maxSoC=99 careCycle=25 lcSlot=11:00-17:30 loadAbort=99:40:90 safetyMargin=30 <br>
|
||||||
</li>
|
</li>
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user