76_SolarForecast: contrib version 1.59.6

git-svn-id: https://svn.fhem.de/fhem/trunk@30426 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
DS_Starter
2025-10-21 12:09:36 +00:00
parent 0ea6f36354
commit 1127d3f645

View File

@@ -162,7 +162,8 @@ BEGIN {
my %vNotesIntern = ( my %vNotesIntern = (
"1.59.6" => "20.10.2025 ___ownSpecGetFWwidget: handling of line breaks in attributes & can hamdle a key=value pair separateley ". "1.59.6" => "20.10.2025 ___ownSpecGetFWwidget: handling of line breaks in attributes & can hamdle a key=value pair separateley ".
"Width of a text field in graphicHeaderOwnspec fixed to 10 ". "Width of a text field in graphicHeaderOwnspec fixed to 10 ".
"__batChargeOptTargetPower: use an average for the charging power if optPower set and charging target are not achievable ", "__batChargeOptTargetPower: use an average for the charging power if optPower set and charging target are not achievable ".
"__createOwnSpec: an empty field can be created within a line by simply using a colon (:). ",
"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, _batSocTarget: minor code change ", "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 ".
@@ -12223,8 +12224,8 @@ sub __batChargeOptTargetPower {
$hsurp->{$hod}{$sbn}{pneedmin} = $pneedmin > 0 ? $pneedmin : 0; # Ladeleistung abhängig von Ziel-SoC Erfüllung $hsurp->{$hod}{$sbn}{pneedmin} = $pneedmin > 0 ? $pneedmin : 0; # Ladeleistung abhängig von Ziel-SoC Erfüllung
## NextHour 00 bearbeiten ## NextHour 00 (aktuelle Stunde) behandeln
########################### ############################################
if ($nhr eq '00') { if ($nhr eq '00') {
my $target = $needraw > 0 ? $needraw / $befficiency : 0; # Zielleistung mit Batterie Effizienzgrad erhöhen my $target = $needraw > 0 ? $needraw / $befficiency : 0; # Zielleistung mit Batterie Effizienzgrad erhöhen
@@ -16899,8 +16900,8 @@ sub __createOwnSpec {
push @vals, $f; push @vals, $f;
} }
my $ownv; my ($ownv, $cakey);
my $cakey; my $isize = INPUTSIZE;
my $rows = ceil (scalar(@vals) / $vinr); my $rows = ceil (scalar(@vals) / $vinr);
my $col = 0; my $col = 0;
@@ -16913,19 +16914,21 @@ sub __createOwnSpec {
$h->{$k}{elm} //= ''; $h->{$k}{elm} //= '';
my ($elm, $dev) = split "@", $h->{$k}{elm}; # evtl. anderes Devices my ($elm, $dev) = split "@", $h->{$k}{elm}; # evtl. anderes Devices
$dev //= $name; $dev //= $name;
$elm //= '';
($elm, $cakey) = split "->", $elm; # zusammengesetztes Attribut: gewünschtes Schlüssel identifizieren ($elm, $cakey) = split "->", $elm; # zusammengesetztes Attribut: gewünschten Schlüssel identifizieren
$col++; $col++;
if (!$h->{$k}{label}) { if (!defined $h->{$k}{label}) {
undef $h->{$k}{label}; #undef $h->{$k}{label};
next; $h->{$k}{label} = '';
#next;
$h->{$k}{elm} = '';
} }
## Set-Kommandos identifizieren ## Set-Kommandos identifizieren
################################# #################################
my $setcmd = ___ownSpecGetFWwidget ($name, $dev, $elm, $allsets, 'set', $cakey); my $setcmd = ___ownSpecGetFWwidget ($name, $dev, $elm, $allsets, 'set', $cakey, $isize);
if ($setcmd) { if ($setcmd) {
if ($pah) { # bei get pageAsHtml setter/attr nicht anzeigen (js Fehler) if ($pah) { # bei get pageAsHtml setter/attr nicht anzeigen (js Fehler)
@@ -16942,7 +16945,7 @@ sub __createOwnSpec {
## Attr-Kommandos identifizieren ## Attr-Kommandos identifizieren
################################## ##################################
my $attrcmd = ___ownSpecGetFWwidget ($name, $dev, $elm, $allattrs, 'attr', $cakey); my $attrcmd = ___ownSpecGetFWwidget ($name, $dev, $elm, $allattrs, 'attr', $cakey, $isize);
if ($attrcmd) { if ($attrcmd) {
if ($pah) { # bei get pageAsHtml setter/attr nicht anzeigen (js Fehler) if ($pah) { # bei get pageAsHtml setter/attr nicht anzeigen (js Fehler)
@@ -16959,11 +16962,13 @@ sub __createOwnSpec {
## Reading identifizieren ## Reading identifizieren
########################### ###########################
if ($elm) {
$v->{$k} = ReadingsVal ($dev, $elm, undef); $v->{$k} = ReadingsVal ($dev, $elm, undef);
if (defined $v->{$k} && $v->{$k} =~ /^\s*(-?\d+(\.\d+)?)/xs) { if (defined $v->{$k} && $v->{$k} =~ /^\s*(-?\d+(\.\d+)?)/xs) {
($v->{$k}, $u->{$k}) = split /\s+/, ReadingsVal ($dev, $elm, ''); # Value und Unit trennen wenn Value numerisch ($v->{$k}, $u->{$k}) = split /\s+/, ReadingsVal ($dev, $elm, ''); # Value und Unit trennen wenn Value numerisch
} }
}
$u->{$k} //= q{}; $u->{$k} //= q{};
@@ -17000,10 +17005,10 @@ sub __createOwnSpec {
$ownv .= "<tr>"; $ownv .= "<tr>";
$ownv .= "<td $dstyle>".($cats[$i-1] ? '<b>'.$cats[$i-1].'</b>' : '')."</td>"; $ownv .= "<td $dstyle>".($cats[$i-1] ? '<b>'.$cats[$i-1].'</b>' : '')."</td>";
$ownv .= "<td $dstyle><b>".$h->{0}{label}.":</b></td> <td align=right $dstyle>".$v->{0}." ".$u->{0}."</td>" if(defined $h->{0}{label}); $ownv .= "<td $dstyle><b>".$h->{0}{label}.($h->{0}{label} ? ':' : '')."</b></td> <td align=right $dstyle>".$v->{0}." ".$u->{0}."</td>";
$ownv .= "<td $dstyle><b>".$h->{1}{label}.":</b></td> <td align=right $dstyle>".$v->{1}." ".$u->{1}."</td>" if(defined $h->{1}{label}); $ownv .= "<td $dstyle><b>".$h->{1}{label}.($h->{1}{label} ? ':' : '')."</b></td> <td align=right $dstyle>".$v->{1}." ".$u->{1}."</td>";
$ownv .= "<td $dstyle><b>".$h->{2}{label}.":</b></td> <td align=right $dstyle>".$v->{2}." ".$u->{2}."</td>" if(defined $h->{2}{label}); $ownv .= "<td $dstyle><b>".$h->{2}{label}.($h->{2}{label} ? ':' : '')."</b></td> <td align=right $dstyle>".$v->{2}." ".$u->{2}."</td>";
$ownv .= "<td $dstyle><b>".$h->{3}{label}.":</b></td> <td align=right $dstyle>".$v->{3}." ".$u->{3}."</td>" if(defined $h->{3}{label}); $ownv .= "<td $dstyle><b>".$h->{3}{label}.($h->{3}{label} ? ':' : '')."</b></td> <td align=right $dstyle>".$v->{3}." ".$u->{3}."</td>";
$ownv .= "</tr>"; $ownv .= "</tr>";
} }
@@ -17024,7 +17029,7 @@ sub ___ownSpecGetFWwidget {
my $allc = shift; # Kommandovorrat -> ist Element enthalten? my $allc = shift; # Kommandovorrat -> ist Element enthalten?
my $ctyp = shift; # Kommandotyp: set/attr my $ctyp = shift; # Kommandotyp: set/attr
my $cakey = shift; # ein einzelner Schlüssel zur Selektion aus einem zusammengesetzten Attribut my $cakey = shift; # ein einzelner Schlüssel zur Selektion aus einem zusammengesetzten Attribut
my $isize = shift // INPUTSIZE; # Breite eines Text-Eingabefeldes my $isize = shift; # Breite eines Text-Eingabefeldes
return if(!$elm || $elm eq 'state'); return if(!$elm || $elm eq 'state');