2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-04-11 08:34:18 +00:00

76_Solarforcast: contrib 0.71.3

git-svn-id: https://svn.fhem.de/fhem/trunk@26610 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
nasseeder1 2022-10-28 14:36:46 +00:00
parent 50cd471848
commit 11ed5d6d91

View File

@ -130,7 +130,8 @@ BEGIN {
# Versions History intern # Versions History intern
my %vNotesIntern = ( my %vNotesIntern = (
"0.71.2" => "27.10.2022 fix 'connection lost ...' ", "0.71.3" => "28.10.2022 new circular keys tdayDvtn, ydayDvtn for calculation PV forecast/generation in header ",
"0.71.2" => "27.10.2022 fix 'connection lost ...' issue ",
"0.71.1" => "26.10.2022 save no datasets with pv_estimate = 0 (__solCast_ApiResponse) to save time/space ". "0.71.1" => "26.10.2022 save no datasets with pv_estimate = 0 (__solCast_ApiResponse) to save time/space ".
"changed some graphic default settings, typo todayRemaingAPIcalls, input check currentBatteryDev ". "changed some graphic default settings, typo todayRemaingAPIcalls, input check currentBatteryDev ".
"change attr Css to flowGraphicCss ", "change attr Css to flowGraphicCss ",
@ -546,6 +547,12 @@ my %hqtxt = (
DE => qq{aktuell:} }, DE => qq{aktuell:} },
bnsas => { EN => qq{from the upcoming sunrise}, bnsas => { EN => qq{from the upcoming sunrise},
DE => qq{ab dem kommenden Sonnenaufgang} }, DE => qq{ab dem kommenden Sonnenaufgang} },
dvtn => { EN => qq{Deviation (%):},
DE => qq{Abweichung (%):} },
tday => { EN => qq{today},
DE => qq{heute} },
yday => { EN => qq{yesterday},
DE => qq{gestern} },
after => { EN => qq{after}, after => { EN => qq{after},
DE => qq{nach} }, DE => qq{nach} },
pstate => { EN => qq{Planning&nbsp;status:&nbsp;<pstate><br>On:&nbsp;<start><br>Off:&nbsp;<stop>}, pstate => { EN => qq{Planning&nbsp;status:&nbsp;<pstate><br>On:&nbsp;<start><br>Off:&nbsp;<stop>},
@ -3286,6 +3293,9 @@ sub _specialActivities {
delete $data{$type}{$name}{solcastapi}{'?All'}{'?All'}{todayRemainingAPIrequests}; delete $data{$type}{$name}{solcastapi}{'?All'}{'?All'}{todayRemainingAPIrequests};
delete $data{$type}{$name}{solcastapi}{'?All'}{'?All'}{todayRemainingAPIcalls}; delete $data{$type}{$name}{solcastapi}{'?All'}{'?All'}{todayRemainingAPIcalls};
$data{$type}{$name}{circular}{99}{ydayDvtn} = CircularVal ($hash, 99, 'tdayDvtn', '-');
delete $data{$type}{$name}{circular}{99}{tdayDvtn};
delete $data{$type}{$name}{pvhist}{$day}; # den (alten) aktuellen Tag aus History löschen delete $data{$type}{$name}{pvhist}{$day}; # den (alten) aktuellen Tag aus History löschen
Log3 ($name, 3, qq{$name - history day "$day" deleted}); Log3 ($name, 3, qq{$name - history day "$day" deleted});
@ -5903,6 +5913,7 @@ sub _calcTodayPVdeviation {
my $paref = shift; my $paref = shift;
my $hash = $paref->{hash}; my $hash = $paref->{hash};
my $name = $paref->{name}; my $name = $paref->{name};
my $type = $paref->{type};
my $t = $paref->{t}; my $t = $paref->{t};
my $date = $paref->{date}; my $date = $paref->{date};
my $daref = $paref->{daref}; my $daref = $paref->{daref};
@ -5917,7 +5928,9 @@ sub _calcTodayPVdeviation {
my $diff = $pvfc - $pvre; my $diff = $pvfc - $pvre;
if($pvre) { if($pvre) {
my $dp = sprintf "%.2f" , (100 * $diff / $pvre); my $dp = sprintf "%.2f" , (100 * $diff / $pvre);
$data{$type}{$name}{circular}{99}{tdayDvtn} = $dp;
push @$daref, "Today_PVdeviation<>". $dp." %"; push @$daref, "Today_PVdeviation<>". $dp." %";
} }
@ -6640,7 +6653,17 @@ sub _graphicHeader {
} }
$pcqicon = "-" if(!$pvfc00 || $pcq == -1); $pcqicon = "-" if(!$pvfc00 || $pcq == -1);
## Abweichung PV Prognose/Erzeugung
#####################################
my $tdayDvtn = CircularVal ($hash, 99, 'tdayDvtn', '-');
my $ydayDvtn = CircularVal ($hash, 99, 'ydayDvtn', '-');
$tdayDvtn = sprintf "%.0f", $tdayDvtn if(isNumeric($tdayDvtn));
$ydayDvtn = sprintf "%.0f", $ydayDvtn if(isNumeric($ydayDvtn));
my $dvtntxt = $hqtxt{dvtn}{$lang}.'&nbsp;';
my $tdaytxt = $hqtxt{tday}{$lang}.'&nbsp;'.$tdayDvtn;
my $ydaytxt = $hqtxt{yday}{$lang}.'&nbsp;'.$ydayDvtn;
## erste Header-Zeilen ## erste Header-Zeilen
####################### #######################
my $alias = AttrVal ($name, "alias", $name ); # Linktext als Aliasname my $alias = AttrVal ($name, "alias", $name ); # Linktext als Aliasname
@ -6653,9 +6676,9 @@ sub _graphicHeader {
$header .= qq{<td colspan="3" align="left" $dstyle> $api </td>}; $header .= qq{<td colspan="3" align="left" $dstyle> $api </td>};
$header .= qq{</tr>}; $header .= qq{</tr>};
$header .= qq{<tr>}; $header .= qq{<tr>};
$header .= qq{<td colspan="3" align="left" $dstyle> </td>}; $header .= qq{<td colspan="3" align="left" $dstyle> </td>};
$header .= qq{<td colspan="3" align="left" $dstyle> $autoct &nbsp; $acicon &nbsp; $lbpcq &nbsp; $pcqicon </td>}; $header .= qq{<td colspan="3" align="left" $dstyle> $autoct&nbsp;&nbsp;$acicon&nbsp;&nbsp;$lbpcq&nbsp;&nbsp;$pcqicon </td>};
$header .= qq{<td colspan="3" align="left" $dstyle> </td>}; $header .= qq{<td colspan="3" align="left" $dstyle> $dvtntxt&nbsp;$tdaytxt,&nbsp;$ydaytxt </td>};
$header .= qq{</tr>}; $header .= qq{</tr>};
} }
@ -8834,24 +8857,26 @@ sub listDataPool {
return qq{Circular cache is empty.}; return qq{Circular cache is empty.};
} }
for my $idx (sort keys %{$h}) { for my $idx (sort keys %{$h}) {
my $pvfc = CircularVal ($hash, $idx, "pvfc", "-"); my $pvfc = CircularVal ($hash, $idx, "pvfc", "-");
my $pvrl = CircularVal ($hash, $idx, "pvrl", "-"); my $pvrl = CircularVal ($hash, $idx, "pvrl", "-");
my $confc = CircularVal ($hash, $idx, "confc", "-"); my $confc = CircularVal ($hash, $idx, "confc", "-");
my $gcons = CircularVal ($hash, $idx, "gcons", "-"); my $gcons = CircularVal ($hash, $idx, "gcons", "-");
my $gfeedin = CircularVal ($hash, $idx, "gfeedin", "-"); my $gfeedin = CircularVal ($hash, $idx, "gfeedin", "-");
my $wid = CircularVal ($hash, $idx, "weatherid", "-"); my $wid = CircularVal ($hash, $idx, "weatherid", "-");
my $wtxt = CircularVal ($hash, $idx, "weathertxt", "-"); my $wtxt = CircularVal ($hash, $idx, "weathertxt", "-");
my $wccv = CircularVal ($hash, $idx, "wcc", "-"); my $wccv = CircularVal ($hash, $idx, "wcc", "-");
my $wrprb = CircularVal ($hash, $idx, "wrp", "-"); my $wrprb = CircularVal ($hash, $idx, "wrp", "-");
my $temp = CircularVal ($hash, $idx, "temp", "-"); my $temp = CircularVal ($hash, $idx, "temp", "-");
my $pvcorrf = CircularVal ($hash, $idx, "pvcorrf", "-"); my $pvcorrf = CircularVal ($hash, $idx, "pvcorrf", "-");
my $quality = CircularVal ($hash, $idx, "quality", "-"); my $quality = CircularVal ($hash, $idx, "quality", "-");
my $batin = CircularVal ($hash, $idx, "batin", "-"); my $batin = CircularVal ($hash, $idx, "batin", "-");
my $batout = CircularVal ($hash, $idx, "batout", "-"); my $batout = CircularVal ($hash, $idx, "batout", "-");
my $tdayDvtn = CircularVal ($hash, $idx, "tdayDvtn", "-");
my $ydayDvtn = CircularVal ($hash, $idx, "ydayDvtn", "-");
my $pvcf = qq{}; my $pvcf = qq{};
if(ref $pvcorrf eq "HASH") { if(ref $pvcorrf eq "HASH") {
for my $f (sort {$a<=>$b} keys %{$h->{$idx}{pvcorrf}}) { for my $f (sort keys %{$h->{$idx}{pvcorrf}}) {
$pvcf .= " " if($pvcf); $pvcf .= " " if($pvcf);
$pvcf .= "$f=".$h->{$idx}{pvcorrf}{$f}; $pvcf .= "$f=".$h->{$idx}{pvcorrf}{$f};
my $ct = ($pvcf =~ tr/=// // 0) / 10; my $ct = ($pvcf =~ tr/=// // 0) / 10;
@ -8876,11 +8901,17 @@ sub listDataPool {
} }
$sq .= "\n" if($sq); $sq .= "\n" if($sq);
$sq .= $idx." => pvfc: $pvfc, pvrl: $pvrl, batin: $batin, batout: $batout\n";
$sq .= " confc: $confc, gcon: $gcons, gfeedin: $gfeedin, wcc: $wccv, wrp: $wrprb\n"; if($idx != 99) {
$sq .= " temp: $temp, wid: $wid, wtxt: $wtxt\n"; $sq .= $idx." => pvfc: $pvfc, pvrl: $pvrl, batin: $batin, batout: $batout\n";
$sq .= " corr: $pvcf\n"; $sq .= " confc: $confc, gcon: $gcons, gfeedin: $gfeedin, wcc: $wccv, wrp: $wrprb\n";
$sq .= " quality: $cfq"; $sq .= " temp: $temp, wid: $wid, wtxt: $wtxt\n";
$sq .= " corr: $pvcf\n";
$sq .= " quality: $cfq";
}
else {
$sq .= $idx." => tdayDvtn: $tdayDvtn, ydayDvtn: $ydayDvtn";
}
} }
} }
@ -9951,7 +9982,7 @@ sub HistoryVal {
return $def; return $def;
} }
################################################################ #############################################################################
# Wert des circular-Hash zurückliefern # Wert des circular-Hash zurückliefern
# Achtung: die Werte im circular-Hash haben nicht # Achtung: die Werte im circular-Hash haben nicht
# zwingend eine Beziehung zueinander !! # zwingend eine Beziehung zueinander !!
@ -9973,9 +10004,11 @@ return $def;
# wrp - DWD Regenwahrscheinlichkeit # wrp - DWD Regenwahrscheinlichkeit
# temp - Außentemperatur # temp - Außentemperatur
# pvcorrf - PV Autokorrekturfaktoren (HASH) # pvcorrf - PV Autokorrekturfaktoren (HASH)
# tdayDvtn - heutige Abweichung PV Prognose/Erzeugung in %
# ydayDvtn - gestrige Abweichung PV Prognose/Erzeugung in %
# $def: Defaultwert # $def: Defaultwert
# #
################################################################ #############################################################################
sub CircularVal { sub CircularVal {
my $hash = shift; my $hash = shift;
my $hod = shift; my $hod = shift;
@ -10932,7 +10965,9 @@ Ein/Ausschaltzeiten sowie deren Ausführung vom SolarForecast Modul übernehmen
<a id="SolarForecast-get-pvCircular"></a> <a id="SolarForecast-get-pvCircular"></a>
<li><b>pvCircular </b> <br><br> <li><b>pvCircular </b> <br><br>
Listet die vorhandenen Werte im Ringspeicher auf. Listet die vorhandenen Werte im Ringspeicher auf.
Die Stundenangaben beziehen sich auf die Stunde des Tages, z.B. bezieht sich die Stunde 09 auf die Zeit von 08 - 09 Uhr. Die Stundenangaben 00 - 24 beziehen sich auf die Stunde des Tages, z.B. bezieht sich die Stunde 09 auf die Zeit von
08 - 09 Uhr. <br>
Die Stunde 99 hat eine Sonderfunktion. <br>
Erläuterung der Werte: <br><br> Erläuterung der Werte: <br><br>
<ul> <ul>
@ -10952,6 +10987,8 @@ Ein/Ausschaltzeiten sowie deren Ausführung vom SolarForecast Modul übernehmen
<tr><td> <b>wtxt</b> </td><td>Beschreibung des vorhergesagten Wetters </td></tr> <tr><td> <b>wtxt</b> </td><td>Beschreibung des vorhergesagten Wetters </td></tr>
<tr><td> <b>corr</b> </td><td>Autokorrekturfaktoren für die Stunde des Tages und der Bewölkungsrange (0..10) </td></tr> <tr><td> <b>corr</b> </td><td>Autokorrekturfaktoren für die Stunde des Tages und der Bewölkungsrange (0..10) </td></tr>
<tr><td> <b>quality</b> </td><td>Qualität der Autokorrekturfaktoren (max. 30), höhere Werte = höhere Qualität </td></tr> <tr><td> <b>quality</b> </td><td>Qualität der Autokorrekturfaktoren (max. 30), höhere Werte = höhere Qualität </td></tr>
<tr><td> <b>tdayDvtn</b> </td><td>heutige Abweichung PV Prognose/Erzeugung in % </td></tr>
<tr><td> <b>ydayDvtn</b> </td><td>gestrige Abweichung PV Prognose/Erzeugung in % </td></tr>
</table> </table>
</ul> </ul>