2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-03 04:36:36 +00:00

76_SolarForecast: reduce cpu utilization

git-svn-id: https://svn.fhem.de/fhem/trunk@28468 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
nasseeder1 2024-02-03 12:34:59 +00:00
parent 39326a0808
commit 7bebc27d25

View File

@ -157,6 +157,7 @@ BEGIN {
# Versions History intern
my %vNotesIntern = (
"1.15.0" => "03.02.2024 reduce cpu utilization ",
"1.14.3" => "02.02.2024 _transferWeatherValues: first step of multi weather device merger ",
"1.14.2" => "02.02.2024 fix warning, _transferAPIRadiationValues: Consider upper and lower deviation limit AI to API forecast ",
"1.14.1" => "01.02.2024 language support for ___setConsumerPlanningState -> supplement, fix setting 'swoncond not met' ",
@ -555,8 +556,8 @@ my %hqtxt = (
DE => qq{swoncond erfüllt} },
swofmt => { EN => qq{swoffcond met},
DE => qq{swoffcond erfüllt} },
emsple => { EN => qq{expected max surplus less than},
DE => qq{erwarteter max Überschuss weniger als} },
emsple => { EN => qq{max surplus forecast too low},
DE => qq{max Überschußprognose zu gering} },
nmspld => { EN => qq{no max surplus found for current day},
DE => qq{kein max Überschuss für den aktuellen Tag gefunden} },
state => { EN => qq{Status},
@ -4182,6 +4183,11 @@ sub __updWriteFile {
return;
}
################################################################
# Attr
# $cmd can be "del" or "set"
# $name is device name
# aName and aVal are Attribute name and value
################################################################
sub Attr {
my $cmd = shift;
@ -4193,19 +4199,19 @@ sub Attr {
my $type = $hash->{TYPE};
my ($do,$val, $err);
# $cmd can be "del" or "set"
# $name is device name
# aName and aVal are Attribute name and value
### nicht mehr benötigte Daten löschen - Bereich kann später wieder raus !!
##########################################################################################
if ($cmd eq 'set' && $aName eq 'affectNumHistDays') {
if (!$init_done) {
return qq{Device "$name" -> The attribute 'affectNumHistDays' is obsolete and will be deleted soon. Please press "save config" when restart is finished.};
return qq{Device "$name" -> The attribute '$aName' is obsolete and will be deleted soon. Please press "save config" when restart is finished.};
}
else {
return qq{The attribute 'affectNumHistDays' is obsolete and will be deleted soon.};
return qq{The attribute '$aName' is obsolete and will be deleted soon.};
}
}
##########################################################################################
if ($aName eq 'disable') {
if($cmd eq 'set') {
@ -4914,24 +4920,30 @@ return @pvconf;
################################################################
# centralTask Start Management
# Achtung: relevant für CPU Auslastung!
################################################################
sub runCentralTask {
my $hash = shift;
return if(!$init_done);
return if(!$init_done || CurrentVal ($hash, 'ctrunning', 0));
my $name = $hash->{NAME};
my $type = $hash->{TYPE};
my $t = time;
my $ms = strftime "%M:%S", localtime($t);
my ($min, $sec) = split ':', $ms; # aktuelle Minute (00-59), aktuelle Sekunde (00-61)
$min = int $min;
$sec = int $sec;
_addDynAttr ($hash);
return if(CurrentVal ($hash, 'ctrunning', 0));
my $debug;
my $t = time;
my $second = int (strftime "%S", localtime($t)); # aktuelle Sekunde (00-61)
my $minute = int (strftime "%M", localtime($t)); # aktuelle Minute (00-59)
if ($sec > 10) { # Attribute zur Laufzeit hinzufügen
if (!exists $hash->{HELPER}{S10DONE}) {
$hash->{HELPER}{S10DONE} = 1;
_addDynAttr ($hash); # relevant für CPU Auslastung!!
}
}
else {
delete $hash->{HELPER}{S10DONE};
}
my $name = $hash->{NAME};
my ($interval, $disabled, $inactive) = controller ($name);
if (!$interval) {
@ -4956,42 +4968,42 @@ sub runCentralTask {
my $new = $t + $interval; # nächste Wiederholungszeit
$hash->{MODE} = 'Automatic - next Cycletime: '.FmtTime($new);
$data{$type}{$name}{current}{nextCycleTime} = $new;
$data{$hash->{TYPE}}{$name}{current}{nextCycleTime} = $new;
storeReading ('nextCycletime', FmtTime($new));
centralTask ($hash, 1);
}
if ($minute == 59 && $second > 48 && $second < 58) {
if (!exists $hash->{HELPER}{S58DONE}) {
$debug = getDebug ($hash);
$hash->{HELPER}{S58DONE} = 1;
if ($min == 59 && $sec > 48) {
if (!exists $hash->{HELPER}{S48DONE}) {
my $debug = getDebug ($hash);
$hash->{HELPER}{S48DONE} = 1;
if ($debug =~ /collectData/x) {
Log3 ($name, 1, "$name DEBUG> Start of unscheduled data collection at the end of an hour");
Log3 ($name, 1, "$name DEBUG> INFO - Start of unscheduled data collection at the end of an hour");
}
centralTask ($hash, 1);
}
}
else {
delete $hash->{HELPER}{S58DONE};
delete $hash->{HELPER}{S48DONE};
}
if ($minute == 0 && $second > 3 && $second < 20) {
if (!exists $hash->{HELPER}{S20DONE}) {
$debug = getDebug ($hash);
$hash->{HELPER}{S20DONE} = 1;
if ($min == 0 && $sec > 3) {
if (!exists $hash->{HELPER}{S03DONE}) {
my $debug = getDebug ($hash);
$hash->{HELPER}{S03DONE} = 1;
if ($debug =~ /collectData/x) {
Log3 ($name, 1, "$name DEBUG> Start of unscheduled data collection at the beginning of an hour");
Log3 ($name, 1, "$name DEBUG> INFO - Start of unscheduled data collection at the beginning of an hour");
}
centralTask ($hash, 1);
}
}
else {
delete $hash->{HELPER}{S20DONE};
delete $hash->{HELPER}{S03DONE};
}
return;
@ -5051,7 +5063,7 @@ sub centralTask {
RemoveInternalTimer ($hash, 'FHEM::SolarForecast::centralTask');
RemoveInternalTimer ($hash, 'FHEM::SolarForecast::singleUpdateState');
### nicht mehr benötigte Readings/Daten löschen - Bereich kann später wieder raus !!
### nicht mehr benötigte Daten löschen - Bereich kann später wieder raus !!
##########################################################################################
## nicht-Bin Werte löschen
my $ra = '0|5|10|15|20|25|30|35|40|45|50|55|60|65|70|75|80|85|90|95|100|percentile';
@ -7620,7 +7632,7 @@ sub ___doPlanning {
last;
}
else {
$paref->{supplement} = encode('utf8', $hqtxt{emsple}{$lang}).' '.$epiece1; # 'erwarteter max Überschuss weniger als'
$paref->{supplement} = encode('utf8', $hqtxt{emsple}{$lang}); # 'erwarteter max Überschuss weniger als'
$paref->{ps} = 'suspended:';
___setConsumerPlanningState ($paref);
@ -9673,7 +9685,7 @@ sub _checkSetupNotComplete {
my $name = $hash->{NAME};
my $type = $hash->{TYPE};
### nicht mehr benötigte Readings/Daten löschen - Bereich kann später wieder raus !!
### nicht mehr benötigte Daten löschen - Bereich kann später wieder raus !!
##########################################################################################
## currentWeatherDev in Attr umsetzen
## currentWeatherDev in Attr umsetzen