2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-10 03:06:37 +00:00

76_SolarForecast.pm: contrib 0.71.2

git-svn-id: https://svn.fhem.de/fhem/trunk@26603 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
nasseeder1 2022-10-27 20:27:28 +00:00
parent 434838ab7e
commit 9684a97361

View File

@ -1,5 +1,5 @@
######################################################################################################################## ########################################################################################################################
# $Id: 76_SolarForecast.pm 21735 2022-10-26 23:53:24Z DS_Starter $ # $Id: 76_SolarForecast.pm 21735 2022-10-27 23:53:24Z DS_Starter $
######################################################################################################################### #########################################################################################################################
# 76_SolarForecast.pm # 76_SolarForecast.pm
# #
@ -130,7 +130,7 @@ BEGIN {
# Versions History intern # Versions History intern
my %vNotesIntern = ( my %vNotesIntern = (
"0.71.2" => "26.10.2022 fix 'connection refused ...' ", "0.71.2" => "27.10.2022 fix 'connection refused ...' ",
"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 ",
@ -1041,9 +1041,8 @@ sub _setconsumerImmediatePlanning { ## no critic "not used"
my $name = $paref->{name}; my $name = $paref->{name};
my $type = $paref->{type}; my $type = $paref->{type};
my $opt = $paref->{opt}; my $opt = $paref->{opt};
my $arg = $paref->{arg}; my $c = $paref->{prop};
my $evt = $paref->{prop1} // 1;
my ($c,$noTaskcall) = split " ", $arg;
return qq{no consumer number specified} if(!$c); return qq{no consumer number specified} if(!$c);
return qq{no valid consumer id "$c"} if(!ConsumerVal ($hash, $c, "name", "")); return qq{no valid consumer id "$c"} if(!ConsumerVal ($hash, $c, "name", ""));
@ -1067,7 +1066,7 @@ sub _setconsumerImmediatePlanning { ## no critic "not used"
Log3 ($name, 3, qq{$name - Consumer "$calias" $planstate}) if($planstate); Log3 ($name, 3, qq{$name - Consumer "$calias" $planstate}) if($planstate);
centralTask ($hash) if(!$noTaskcall); centralTask ($hash, $evt);
return; return;
} }
@ -1868,9 +1867,7 @@ sub _setclientAction { ## no critic "not used"
my $name = $paref->{name}; my $name = $paref->{name};
my $opt = $paref->{opt}; my $opt = $paref->{opt};
my $arg = $paref->{arg}; my $arg = $paref->{arg};
my $argsref = $paref->{argsref}; my $argsref = $paref->{argsref};
my $noUpdState = 0; # state nicht updaten = 0 -> state updaten !
if(!$arg) { if(!$arg) {
return qq{The command "$opt" needs an argument !}; return qq{The command "$opt" needs an argument !};
@ -1878,36 +1875,34 @@ sub _setclientAction { ## no critic "not used"
my @args = @{$argsref}; my @args = @{$argsref};
my $ftui = shift @args; # Auslöser ist FTUI ? my $evt = shift @args; # Readings Event (state nicht gesteuert)
my $action = shift @args; # z.B. set, setreading my $action = shift @args; # z.B. set, setreading
my $cname = shift @args; # Consumername my $cname = shift @args; # Consumername
my $tail = join " ", map { my $p = $_; $p =~ s/\s//xg; $p; } @args; ## no critic 'Map blocks' # restliche Befehlsargumente my $tail = join " ", map { my $p = $_; $p =~ s/\s//xg; $p; } @args; ## no critic 'Map blocks' # restliche Befehlsargumente
Log3($name, 4, qq{$name - Client Action received / execute: "$action $cname $tail"}); Log3($name, 4, qq{$name - Client Action received / execute: "$action $cname $tail"});
if($action eq "set") { if($action eq "set") {
CommandSet (undef, "$cname $tail"); CommandSet (undef, "$cname $tail");
$noUpdState = 1 if(!$ftui);
} }
if($action eq "get") { if($action eq "get") {
if($tail eq 'data') { if($tail eq 'data') {
$noUpdState = 1 if(!$ftui); centralTask ($hash, $evt);
centralTask ($hash, $noUpdState);
return; return;
} }
} }
if($action eq "setreading") { if($action eq "setreading") {
CommandSetReading (undef, "$cname $tail"); CommandSetReading (undef, "$cname $tail");
$noUpdState = 1 if(!$ftui);
} }
if($action eq "consumerImmediatePlanning") { if($action eq "consumerImmediatePlanning") {
CommandSet (undef, "$name $action $cname noTaskcall"); CommandSet (undef, "$name $action $cname $evt");
return;
} }
centralTask ($hash, $noUpdState); centralTask ($hash, $evt);
return; return;
} }
@ -2682,6 +2677,10 @@ return;
sub Notify { sub Notify {
# Es werden nur die Events von Geräten verarbeitet die im Hash $hash->{NOTIFYDEV} gelistet sind (wenn definiert). # Es werden nur die Events von Geräten verarbeitet die im Hash $hash->{NOTIFYDEV} gelistet sind (wenn definiert).
# Dadurch kann die Menge der Events verringert werden. In sub DbRep_Define angeben. # Dadurch kann die Menge der Events verringert werden. In sub DbRep_Define angeben.
return; # nicht genutzt zur Zeit
my $myHash = shift; my $myHash = shift;
my $dev_hash = shift; my $dev_hash = shift;
my $myName = $myHash->{NAME}; # Name des eigenen Devices my $myName = $myHash->{NAME}; # Name des eigenen Devices
@ -2950,8 +2949,8 @@ return @pvconf;
# Zentraler Datenabruf # Zentraler Datenabruf
################################################################ ################################################################
sub centralTask { sub centralTask {
my $hash = shift; my $hash = shift;
my $noUpdState = shift // 0; # state updaten 0, nicht updaten 1 my $evt = shift // 1; # Readings Event (state nicht gesteuert)
my $name = $hash->{NAME}; my $name = $hash->{NAME};
my $type = $hash->{TYPE}; my $type = $hash->{TYPE};
@ -2962,7 +2961,7 @@ sub centralTask {
### nicht mehr benötigte Readings/Daten löschen - kann später wieder raus !! ### nicht mehr benötigte Readings/Daten löschen - kann später wieder raus !!
#for my $i (keys %{$data{$type}{$name}{pvhist}}) { #for my $i (keys %{$data{$type}{$name}{pvhist}}) {
# delete $data{$type}{$name}{pvhist}{$i}{"00"}; # delete $data{$type}{$name}{pvhist}{$i}{"00"};
# delete $data{$type}{$name}{pvhist}{$i} if(!$i); # evtl. vorhandene leere Schlüssel entfernen # delete $data{$type}{$name}{pvhist}{$i} if(!$i); # evtl. vorhandene leere Schlüssel entfernen
#} #}
#for my $c (keys %{$data{$type}{$name}{consumers}}) { #for my $c (keys %{$data{$type}{$name}{consumers}}) {
@ -3002,13 +3001,13 @@ sub centralTask {
return if(IsDisabled($name)); return if(IsDisabled($name));
#readingsSingleUpdate($hash, "state", "running", 1) if(!$noUpdState); readingsSingleUpdate($hash, 'state', 'running', 0);
my $ret = createStringConfig ($hash); # die String Konfiguration erstellen my $ret = createStringConfig ($hash); # die String Konfiguration erstellen
if ($ret) { if ($ret) {
readingsSingleUpdate($hash, "state", $ret, 1); readingsSingleUpdate($hash, 'state', $ret, 1);
return; return;
} }
my @da; my @da;
my $t = time; # aktuelle Unix-Zeit my $t = time; # aktuelle Unix-Zeit
@ -3040,7 +3039,7 @@ sub centralTask {
_specialActivities ($centpars); # zusätzliche Events generieren + Sonderaufgaben _specialActivities ($centpars); # zusätzliche Events generieren + Sonderaufgaben
_transferWeatherValues ($centpars); # Wetterwerte übertragen _transferWeatherValues ($centpars); # Wetterwerte übertragen
createReadingsFromArray ($hash, \@da, 1); # Readings erzeugen createReadingsFromArray ($hash, \@da, $evt); # Readings erzeugen
if (isSolCastUsed ($hash)) { if (isSolCastUsed ($hash)) {
_getRoofTopData ($centpars); # SolCast API Strahlungswerte abrufen _getRoofTopData ($centpars); # SolCast API Strahlungswerte abrufen
@ -3061,20 +3060,20 @@ sub centralTask {
_createSummaries ($centpars); # Zusammenfassungen erstellen _createSummaries ($centpars); # Zusammenfassungen erstellen
_calcTodayPVdeviation ($centpars); # Vorhersageabweichung erstellen (nach Sonnenuntergang) _calcTodayPVdeviation ($centpars); # Vorhersageabweichung erstellen (nach Sonnenuntergang)
createReadingsFromArray ($hash, \@da, 1); # Readings erzeugen createReadingsFromArray ($hash, \@da, $evt); # Readings erzeugen
calcCorrAndQuality ($centpars); # neue Korrekturfaktor/Qualität berechnen und speichern calcCorrAndQuality ($centpars); # neue Korrekturfaktor/Qualität berechnen und speichern
createReadingsFromArray ($hash, \@da, 1); # Readings erzeugen createReadingsFromArray ($hash, \@da, $evt); # Readings erzeugen
saveEnergyConsumption ($centpars); # Energie Hausverbrauch speichern saveEnergyConsumption ($centpars); # Energie Hausverbrauch speichern
readingsSingleUpdate ($hash, "state", $centpars->{state}, 1) if(!$noUpdState); # Abschluß state readingsSingleUpdate ($hash, 'state', $centpars->{state}, 1); # Abschluß state
setTimeTracking ($hash, $cst, 'runTimeCentralTask'); # Zyklus-Laufzeit ermitteln setTimeTracking ($hash, $cst, 'runTimeCentralTask'); # Zyklus-Laufzeit ermitteln
genStatisticReadings ($centpars); # optionale Statistikreadings erstellen genStatisticReadings ($centpars); # optionale Statistikreadings erstellen
createReadingsFromArray ($hash, \@da, 1); # Readings erzeugen createReadingsFromArray ($hash, \@da, $evt); # Readings erzeugen
} }
else { else {
InternalTimer(gettimeofday()+5, "FHEM::SolarForecast::centralTask", $hash, 0); InternalTimer(gettimeofday()+5, "FHEM::SolarForecast::centralTask", $hash, 0);
@ -6535,7 +6534,7 @@ sub _graphicHeader {
my $cmdupdate = qq{"FW_cmd('$FW_ME$FW_subdir?XHR=1&cmd=set $name clientAction 0 get $name data')"}; # Update Button generieren my $cmdupdate = qq{"FW_cmd('$FW_ME$FW_subdir?XHR=1&cmd=set $name clientAction 0 get $name data')"}; # Update Button generieren
if ($ftui eq "ftui") { if ($ftui eq "ftui") {
$cmdupdate = qq{"ftui.setFhemStatus('get $name data')"}; $cmdupdate = qq{"ftui.setFhemStatus('set $name clientAction 0 get $name data')"};
} }
my $cmdplchk = qq{"FW_cmd('$FW_ME$FW_subdir?XHR=1&cmd=get $name plantConfigCheck', function(data){FW_okDialog(data)})"}; # Plant Check Button generieren my $cmdplchk = qq{"FW_cmd('$FW_ME$FW_subdir?XHR=1&cmd=get $name plantConfigCheck', function(data){FW_okDialog(data)})"}; # Plant Check Button generieren
@ -6833,11 +6832,11 @@ sub _graphicConsumerLegend {
my $implan = qq{"FW_cmd('$FW_ME$FW_subdir?XHR=1&cmd=set $name clientAction 0 consumerImmediatePlanning $c')"}; my $implan = qq{"FW_cmd('$FW_ME$FW_subdir?XHR=1&cmd=set $name clientAction 0 consumerImmediatePlanning $c')"};
if ($ftui eq "ftui") { if ($ftui eq "ftui") {
$cmdon = qq{"ftui.setFhemStatus('set $name clientAction 1 set $cname $oncom')"}; $cmdon = qq{"ftui.setFhemStatus('set $name clientAction 0 set $cname $oncom')"};
$cmdoff = qq{"ftui.setFhemStatus('set $name clientAction 1 set $cname $offcom')"}; $cmdoff = qq{"ftui.setFhemStatus('set $name clientAction 0 set $cname $offcom')"};
$cmdautoon = qq{"ftui.setFhemStatus('set $name clientAction 1 setreading $cname $autord 1')"}; $cmdautoon = qq{"ftui.setFhemStatus('set $name clientAction 0 setreading $cname $autord 1')"};
$cmdautooff = qq{"ftui.setFhemStatus('set $name clientAction 1 setreading $cname $autord 0')"}; $cmdautooff = qq{"ftui.setFhemStatus('set $name clientAction 0 setreading $cname $autord 0')"};
$implan = qq{"ftui.setFhemStatus('set $name clientAction 1 consumerImmediatePlanning $c')"}; $implan = qq{"ftui.setFhemStatus('set $name clientAction 0 consumerImmediatePlanning $c')"};
} }
$cmdon = q{} if(!$oncom); $cmdon = q{} if(!$oncom);