76_SMAPortal: contrib 3.6.0

git-svn-id: https://svn.fhem.de/fhem/trunk@22950 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
DS_Starter
2020-10-10 19:05:38 +00:00
parent 5089adbe29
commit 0e7aa593fd

View File

@@ -137,7 +137,8 @@ BEGIN {
# Versions History intern # Versions History intern
my %vNotesIntern = ( my %vNotesIntern = (
"3.5.0" => "29.09.2020 _getLiveData: get data from Dashboard instead of homemanager site depending of attr noHomeManager, ". "3.6.0" => "10.10.2020 new arguments for attr balanceDaydata ",
"3.5.0" => "10.10.2020 _getLiveData: get data from Dashboard instead of homemanager site depending of attr noHomeManager, ".
"extract OperationHealth key, new attr cookieDelete ", "extract OperationHealth key, new attr cookieDelete ",
"3.4.1" => "18.08.2020 add selected providerlevel to deletion blacklist # Forum: https://forum.fhem.de/index.php/topic,102112.msg1078990.html#msg1078990 ", "3.4.1" => "18.08.2020 add selected providerlevel to deletion blacklist # Forum: https://forum.fhem.de/index.php/topic,102112.msg1078990.html#msg1078990 ",
"3.4.0" => "09.08.2020 attr balanceDay, balanceMonth, balanceYear for data provider balanceDayData, balanceMonthData, balanceYearData ". "3.4.0" => "09.08.2020 attr balanceDay, balanceMonth, balanceYear for data provider balanceDayData, balanceMonthData, balanceYearData ".
@@ -302,7 +303,7 @@ sub Initialize {
"balanceMonth ". "balanceMonth ".
"balanceYear ". "balanceYear ".
"cookieLocation ". "cookieLocation ".
"cookieDelete:auto,afterRun,afterCycle,afterAttempt ". "cookieDelete:auto,afterRun,afterCycle,afterAttempt,afterAttempt&Run ".
"disable:0,1 ". "disable:0,1 ".
"interval ". "interval ".
"noHomeManager:1,0 ". "noHomeManager:1,0 ".
@@ -1020,15 +1021,15 @@ sub GetSetData { ## no critic 'complexity'
$hash->{HELPER}{RETRIES}++; $hash->{HELPER}{RETRIES}++;
my $cd = AttrVal($name, "cookieDelete", "auto"); my $cd = AttrVal($name, "cookieDelete", "auto");
if($retc == $thold || $cd eq "afterAttempt") { # Schwellenwert Leseversuche erreicht -> Cookie File löschen if($retc == $thold || $cd =~ /Attempt/x) { # Schwellenwert Leseversuche erreicht -> Cookie File löschen
my $msg = qq{$name - Threshold reached, delete cookie file before retry...}; my $msg = qq{$name - Threshold reached, delete cookie file before retry...};
if($cd eq "afterAttempt") { if($cd =~ /Attempt/x) {
$msg = qq{$name - force delete cookie file before retry...}; $msg = qq{$name - force delete cookie file before retry...};
} }
Log3 ($name, 3, $msg); Log3 ($name, 3, $msg);
sleep $sleepretry; # Threshold exceed -> Retry mit Cookie löschen sleep $sleepretry; # Threshold exceed -> Retry mit Cookie löschen
$exceed = 1; $exceed = 1;
BlockingInformParent("FHEM::SMAPortal::setFromBlocking", [$name, "NULL", "RETRIES:".$hash->{HELPER}{RETRIES} ], 1); BlockingInformParent("FHEM::SMAPortal::setFromBlocking", [$name, "NULL", "RETRIES:".$hash->{HELPER}{RETRIES} ], 1);
return "$name|$exceed|$newcycle|$errstate|$getp|$setp"; return "$name|$exceed|$newcycle|$errstate|$getp|$setp";
@@ -1520,9 +1521,8 @@ sub _getBalanceDayData { ## no critic "not used"
for my $bal (@bd) { for my $bal (@bd) {
my ($y,$m,$d); my ($y,$m,$d);
my $addon = "Day"; my $addon = "Day";
$addon .= "_".$bal;
if($bal ne "current") { if($bal !~ /current/ixms) {
($y,$m,$d) = $bal =~ /(\d{4})-(\d{2})-(\d{2})/x; ($y,$m,$d) = $bal =~ /(\d{4})-(\d{2})-(\d{2})/x;
if(!$y || !$m || !$d) { if(!$y || !$m || !$d) {
@@ -1530,11 +1530,16 @@ sub _getBalanceDayData { ## no critic "not used"
next; next;
} }
$addon .= "_".$bal;
$y -= 1900; $y -= 1900;
$m -= 1; $m -= 1;
} else { } else {
(undef,undef,undef,$d,$m,$y) = localtime(time); my $time = subDays ($bal);
(undef,undef,undef,$d,$m,$y) = localtime($time);
$addon .= "_".($y+1900)."-".sprintf("%02d",($m+1))."-".sprintf("%02d",$d);
} }
eval { timelocal(0, 0, 0, $d, $m, $y) } or do { $state = (split(" at", $@))[0]; eval { timelocal(0, 0, 0, $d, $m, $y) } or do { $state = (split(" at", $@))[0];
@@ -1961,7 +1966,7 @@ sub ___analyzeData { ## no critic 'complexity'
my $v5d = AttrVal($name, "verbose5Data", "none"); my $v5d = AttrVal($name, "verbose5Data", "none");
my $ad_content = encode("utf8", $ad->decoded_content); my $ad_content = encode("utf8", $ad->decoded_content);
my $act = $hash->{HELPER}{RETRIES}; # Index aktueller Wiederholungsversuch my $act = $hash->{HELPER}{RETRIES}; # Index aktueller Wiederholungsversuch
my $attstr = "Attempts read data again in $sleepretry seconds... ($act of $maxretries)"; # Log vorbereiten my $attstr = "Attempts read data again in $sleepretry s ... ($act of $maxretries)"; # Log vorbereiten
my $wm1e = qq{Updating of the live data was interrupted}; my $wm1e = qq{Updating of the live data was interrupted};
my $wm1d = qq{Die Aktualisierung der Live-Daten wurde unterbrochen}; my $wm1d = qq{Die Aktualisierung der Live-Daten wurde unterbrochen};
@@ -2176,8 +2181,9 @@ sub finalCleanup {
$hash->{HELPER}{GETTER} = "all"; $hash->{HELPER}{GETTER} = "all";
$hash->{HELPER}{SETTER} = "none"; $hash->{HELPER}{SETTER} = "none";
if(AttrVal($name, "cookieDelete", "auto") eq "afterRun") { if(AttrVal($name, "cookieDelete", "auto") =~ /Run/x) {
delcookiefile ($hash); Log3 ($name, 3, "$name - force delete cookie file");
delcookiefile ($hash);
} }
return; return;
@@ -2966,6 +2972,7 @@ sub deleteData {
if($subs{$name}{$prl}{doit}) { if($subs{$name}{$prl}{doit}) {
$lvl = $subs{$name}{$prl}{level}; # Forum: https://forum.fhem.de/index.php/topic,102112.msg1078990.html#msg1078990 $lvl = $subs{$name}{$prl}{level}; # Forum: https://forum.fhem.de/index.php/topic,102112.msg1078990.html#msg1078990
} }
if ($lvl) { if ($lvl) {
$pbl .= "|^".$lvl."_"; $pbl .= "|^".$lvl."_";
} }
@@ -2973,8 +2980,11 @@ sub deleteData {
$bl .= $pbl; # Blacklist ergänzen $bl .= $pbl; # Blacklist ergänzen
for my $key(@allrds) { for my $key(@allrds) {
delete($defs{$name}{READINGS}{$key}) if($key !~ /$bl/x); delete $defs{$name}{READINGS}{$key} if($key !~ /$bl/x);
delete $defs{$name}{READINGS}{$key} if($key =~ /^$pblvl/x); # Logbuchreadings immer löschen delete $defs{$name}{READINGS}{$key} if($key =~ /^$pblvl/x); # Logbuchreadings immer löschen
if($key =~ /^$stpl{balanceDayData}{level}/x) { # balanceDayData Readings immer löschen wegen möglicher Relativverschiebung
delete $defs{$name}{READINGS}{$key};
}
} }
return; return;
@@ -2987,6 +2997,20 @@ sub deleteData {
return; return;
} }
################################################################
# Anzahl Tagesverschiebungen ermitteln und
# effektive Zeit zurückliefern
# $rel = Relativzeit: current current-1 current-3
################################################################
sub subDays {
my $rel = shift;
my $mp = (split "-", $rel)[1] // 0; # Multiplikator: z.B. current-1 -> 1
my $time = time - ($mp * 86400);
return $time;
}
################################################################ ################################################################
# statistische Counter managen # statistische Counter managen
# $name = Name Device # $name = Name Device
@@ -4129,6 +4153,25 @@ return;
</ul> </ul>
</li><br> </li><br>
<a name="cookieDelete"></a>
<li><b>cookieDelete </b><br>
Defines the method of cookie management (deletion). <br>
(default: auto)
<br>
<ul>
<table>
<colgroup> <col width=5%> <col width=95%> </colgroup>
<tr><td> <b>auto</b> </td><td>- Cookie file is managed according to an internal procedure </td></tr>
<tr><td> <b>afterAttempt</b> </td><td>- Cookie file is deleted after each failed read attempt </td></tr>
<tr><td> <b>afterCycle</b> </td><td>- Cookie file is deleted after each read cycle (covers several attempts) </td></tr>
<tr><td> <b>afterRun</b> </td><td>- Cookie file is deleted after each pass of a data retrieval </td></tr>
<tr><td> <b>afterAttempt&Run</b> </td><td>- Cookie file is deleted after each failed read attempt <b>and</b> run through a data retrieval </td></tr>
</table>
</ul>
</li><br>
<a name="cookieLocation"></a> <a name="cookieLocation"></a>
<li><b>cookieLocation &lt;Pfad/File&gt; </b><br> <li><b>cookieLocation &lt;Pfad/File&gt; </b><br>
The path and filename of received Cookies. <br> The path and filename of received Cookies. <br>
@@ -4436,10 +4479,11 @@ return;
<ul> <ul>
<table> <table>
<colgroup> <col width=5%> <col width=95%> </colgroup> <colgroup> <col width=5%> <col width=95%> </colgroup>
<tr><td> <b>auto</b> </td><td>- Cookie Files werden nach einem internen Verfahren verwaltet </td></tr> <tr><td> <b>auto</b> </td><td>- Cookie File wird nach einem internen Verfahren verwaltet </td></tr>
<tr><td> <b>afterAttempt</b> </td><td>- Cookie Files werden nach jedem einzelnen Leseversuch gelöscht </td></tr> <tr><td> <b>afterAttempt</b> </td><td>- Cookie File wird nach jedem fehlerhaften Leseversuch gelöscht </td></tr>
<tr><td> <b>afterCycle</b> </td><td>- Cookie Files werden nach jedem Lesezyklus gelöscht (umfasst mehrere Versuche) </td></tr> <tr><td> <b>afterCycle</b> </td><td>- Cookie File wird nach jedem Lesezyklus gelöscht (umfasst mehrere Versuche) </td></tr>
<tr><td> <b>afterRun</b> </td><td>- Cookie Files werden nach jedem Durchlauf eines Datenabrufs gelöscht </td></tr> <tr><td> <b>afterRun</b> </td><td>- Cookie File wird nach jedem Durchlauf eines Datenabrufs gelöscht </td></tr>
<tr><td> <b>afterAttempt&Run</b> </td><td>- Cookie File wird nach jedem fehlerhaften Leseversuch <b>und</b> Durchlauf eines Datenabrufs gelöscht </td></tr>
</table> </table>
</ul> </ul>