mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-03-03 10:46:53 +00:00
93_DbRep: add option FullDay for timeDiffToNow and timeOlderThan, Forum: topic,53584.msg991139.html#msg991139
git-svn-id: https://svn.fhem.de/fhem/trunk@20479 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
c6a5904e28
commit
9636670c43
@ -1,5 +1,7 @@
|
||||
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
|
||||
# Do not insert empty lines here, update check depends on it.
|
||||
- feature: 93_DbRep: add option FullDay for timeDiffToNow and timeOlderThan,
|
||||
Forum: topic,53584.msg991139.html#msg991139
|
||||
- change: 49_SSCamSTRM: minor internal code change
|
||||
- feature: 73_AutoShuttersControl: add event RegEx true false to WinRec Fn
|
||||
- feature: 49_SSCam: add possible usage of several cache types, e.g. file-
|
||||
|
@ -58,6 +58,7 @@ no if $] >= 5.017011, warnings => 'experimental::smartmatch';
|
||||
|
||||
# Version History intern
|
||||
our %DbRep_vNotesIntern = (
|
||||
"8.29.0" => "08.11.2019 add option FullDay for timeDiffToNow and timeOlderThan, Forum: https://forum.fhem.de/index.php/topic,53584.msg991139.html#msg991139 ",
|
||||
"8.28.2" => "18.10.2019 change SQL selection in deldoublets_DoParse due to Incompatible change of MySQL 8.0.13, Forum: https://forum.fhem.de/index.php/topic,104593.msg985007.html#msg985007 ",
|
||||
"8.28.1" => "09.10.2019 fix warnings line 5173 ",
|
||||
"8.28.0" => "30.09.2019 seqDoubletsVariance - separate specification of positive and negative variance possible, Forum: https://forum.fhem.de/index.php/topic,53584.msg959963.html#msg959963 ",
|
||||
@ -2159,11 +2160,11 @@ sub DbRep_createTimeArray($$$) {
|
||||
# extrahieren der Einzelwerte von Datum/Zeit Ende
|
||||
my ($yyyy2, $mm2, $dd2, $hh2, $min2, $sec2) = ($tsend =~ /(\d+)-(\d+)-(\d+) (\d+):(\d+):(\d+)/);
|
||||
|
||||
# relative Zeit normieren
|
||||
my ($timeolderthan,$timedifftonow,$fdopt) = DbRep_normRelTime($hash);
|
||||
|
||||
# relative Auswertungszeit Beginn berücksichtigen # Umwandeln in Epochesekunden Beginn
|
||||
### relative Auswertungszeit Beginn berücksichtigen, Umwandeln in Epochesekunden Beginn ###
|
||||
my $epoch_seconds_begin = timelocal($sec1, $min1, $hh1, $dd1, $mm1-1, $yyyy1-1900) if($tsbegin);
|
||||
my ($timeolderthan,$timedifftonow) = DbRep_normRelTime($hash);
|
||||
|
||||
if($timedifftonow) {
|
||||
$epoch_seconds_begin = time() - $timedifftonow;
|
||||
Log3 ($name, 4, "DbRep $name - Time difference to current time for calculating Timestamp begin: $timedifftonow sec");
|
||||
@ -2173,27 +2174,41 @@ sub DbRep_createTimeArray($$$) {
|
||||
$epoch_seconds_begin = timelocal($6, $5, $4, $3, $2-1, $1-1900);
|
||||
}
|
||||
|
||||
if($fdopt) { # FullDay Option ist gesetzt
|
||||
my $tbs = strftime "%Y-%m-%d %H:%M:%S", localtime($epoch_seconds_begin);
|
||||
$tbs =~ /^(\d+)-(\d+)-(\d+)\s(\d+):(\d+):(\d+)$/;
|
||||
$epoch_seconds_begin = timelocal(00, 00, 00, $3, $2-1, $1-1900);
|
||||
}
|
||||
my $tsbegin_string = strftime "%Y-%m-%d %H:%M:%S", localtime($epoch_seconds_begin);
|
||||
Log3 ($name, 5, "DbRep $name - Timestamp begin epocheseconds: $epoch_seconds_begin") if($opt !~ /tableCurrentPurge/);
|
||||
Log3 ($name, 4, "DbRep $name - Timestamp begin human readable: $tsbegin_string") if($opt !~ /tableCurrentPurge/);
|
||||
|
||||
if($opt !~ /tableCurrentPurge/) {
|
||||
Log3 ($name, 5, "DbRep $name - Timestamp begin epocheseconds: $epoch_seconds_begin");
|
||||
Log3 ($name, 4, "DbRep $name - Timestamp begin human readable: $tsbegin_string");
|
||||
}
|
||||
###########################################################################################
|
||||
|
||||
# relative Auswertungszeit Ende berücksichtigen # Umwandeln in Epochesekunden Endezeit
|
||||
### relative Auswertungszeit Ende berücksichtigen, Umwandeln in Epochesekunden Endezeit ###
|
||||
my $epoch_seconds_end = timelocal($sec2, $min2, $hh2, $dd2, $mm2-1, $yyyy2-1900);
|
||||
|
||||
$epoch_seconds_end = $timeolderthan ? (time() - $timeolderthan) : $epoch_seconds_end;
|
||||
|
||||
#$epoch_seconds_end = AttrVal($name, "timeOlderThan", undef) ?
|
||||
# (time() - AttrVal($name, "timeOlderThan", undef)) : $epoch_seconds_end;
|
||||
if($timeolderthan) {
|
||||
$epoch_seconds_end = time() - $timeolderthan;
|
||||
}
|
||||
Log3 ($name, 4, "DbRep $name - Time difference to current time for calculating Timestamp end: $timeolderthan sec") if(AttrVal($name, "timeOlderThan", undef));
|
||||
|
||||
if($fdopt) { # FullDay Option ist gesetzt
|
||||
my $tes = strftime "%Y-%m-%d %H:%M:%S", localtime($epoch_seconds_end);
|
||||
$tes =~ /^(\d+)-(\d+)-(\d+)\s(\d+):(\d+):(\d+)$/;
|
||||
$epoch_seconds_end = timelocal(59, 59, 23, $3, $2-1, $1-1900);
|
||||
}
|
||||
my $tsend_string = strftime "%Y-%m-%d %H:%M:%S", localtime($epoch_seconds_end);
|
||||
|
||||
Log3 ($name, 5, "DbRep $name - Timestamp end epocheseconds: $epoch_seconds_end") if($opt !~ /tableCurrentPurge/);
|
||||
Log3 ($name, 4, "DbRep $name - Timestamp end human readable: $tsend_string") if($opt !~ /tableCurrentPurge/);
|
||||
|
||||
if($opt !~ /tableCurrentPurge/) {
|
||||
Log3 ($name, 5, "DbRep $name - Timestamp end epocheseconds: $epoch_seconds_end");
|
||||
Log3 ($name, 4, "DbRep $name - Timestamp end human readable: $tsend_string");
|
||||
}
|
||||
###########################################################################################
|
||||
|
||||
# Erstellung Wertehash für Aggregationen
|
||||
|
||||
my $runtime = $epoch_seconds_begin; # Schleifenlaufzeit auf Beginn der Zeitselektion setzen
|
||||
my $runtime_string; # Datum/Zeit im SQL-Format für Readingname Teilstring
|
||||
my $runtime_string_first; # Datum/Zeit Auswertungsbeginn im SQL-Format für SQL-Statement
|
||||
@ -2217,7 +2232,7 @@ sub DbRep_createTimeArray($$$) {
|
||||
$wdadd = 172800 if($wd eq "Sa"); # wenn Start am "Sa" dann nächste Grenze +2 Tage
|
||||
$wdadd = 86400 if($wd eq "So"); # wenn Start am "So" dann nächste Grenze +1 Tage
|
||||
|
||||
Log3 ($name, 5, "DbRep $name - weekday of start for selection: $wd -> wdadd: $wdadd") if($wdadd);
|
||||
Log3 ($name, 5, "DbRep $name - weekday start for selection: $wd -> wdadd: $wdadd") if($wdadd);
|
||||
|
||||
my $aggsec;
|
||||
if ($aggregation eq "hour") {
|
||||
@ -9552,9 +9567,11 @@ sub DbRep_normRelTime($) {
|
||||
my $name = $hash->{NAME};
|
||||
my $tdtn = AttrVal($name, "timeDiffToNow", undef);
|
||||
my $toth = AttrVal($name, "timeOlderThan", undef);
|
||||
my $fdopt = 0; # FullDay Option
|
||||
my ($y,$d,$h,$m,$s,$aval);
|
||||
|
||||
if($tdtn && $tdtn =~ /^\s*[ydhms]:(([\d]+.[\d]+)|[\d]+)\s*/) {
|
||||
my ($y,$d,$h,$m,$s);
|
||||
$aval = $tdtn;
|
||||
if($tdtn =~ /.*y:(([\d]+.[\d]+)|[\d]+).*/) {
|
||||
$y = $tdtn;
|
||||
$y =~ s/.*y:(([\d]+.[\d]+)|[\d]+).*/$1/e;
|
||||
@ -9587,10 +9604,11 @@ sub DbRep_normRelTime($) {
|
||||
|
||||
$tdtn = $y + $d + $h + $m + $s + 1; # one security second for correct create TimeArray
|
||||
$tdtn = DbRep_corrRelTime($name,$tdtn,1);
|
||||
$fdopt = ($aval =~ /.*FullDay.*$/ && $tdtn >= 86400)?1:0; # ist FullDay Option gesetzt UND Zeitdiff >= 1 Tag ?
|
||||
}
|
||||
|
||||
if($toth && $toth =~ /^\s*[ydhms]:(([\d]+.[\d]+)|[\d]+)\s*/) {
|
||||
my ($y,$d,$h,$m,$s);
|
||||
$aval = $toth;
|
||||
if($toth =~ /.*y:(([\d]+.[\d]+)|[\d]+).*/) {
|
||||
$y = $toth;
|
||||
$y =~ s/.*y:(([\d]+.[\d]+)|[\d]+).*/$1/e;
|
||||
@ -9623,8 +9641,11 @@ sub DbRep_normRelTime($) {
|
||||
|
||||
$toth = $y + $d + $h + $m + $s + 1; # one security second for correct create TimeArray
|
||||
$toth = DbRep_corrRelTime($name,$toth,0);
|
||||
$fdopt = ($aval =~ /.*FullDay.*$/ && $toth >= 86400)?1:0; # ist FullDay Option gesetzt UND Zeitdiff >= 1 Tag ?
|
||||
}
|
||||
return ($toth,$tdtn);
|
||||
Log3($name, 4, "DbRep $name - FullDay option: $fdopt");
|
||||
|
||||
return ($toth,$tdtn,$fdopt);
|
||||
}
|
||||
|
||||
####################################################################################################
|
||||
@ -15847,12 +15868,13 @@ sub bdump {
|
||||
|
||||
<a name="timeDiffToNow"></a>
|
||||
<li><b>timeDiffToNow </b> - der <b>Selektionsbeginn</b> wird auf den Zeitpunkt <b>"<aktuelle Zeit> - <timeDiffToNow>"</b>
|
||||
gesetzt (z.b. werden die letzten 24 Stunden in die Selektion eingehen wenn das Attribut auf "86400" gesetzt
|
||||
wurde). Die Timestampermittlung erfolgt dynamisch zum Ausführungszeitpunkt.
|
||||
gesetzt. Die Timestampermittlung erfolgt dynamisch zum Ausführungszeitpunkt. Optional kann mit der Zusatzangabe
|
||||
"FullDay" der Selektionsbeginn und das Selektionsende auf Beginn / Ende des jeweiligen Tages erweitert werden
|
||||
(wirkt nur wenn Zeitdifferenz >= 1 Tag).
|
||||
<br><br>
|
||||
|
||||
<ul>
|
||||
<b>Eingabeformat Beispiel:</b> <br>
|
||||
<b>Eingabeformat Beispiele:</b> <br>
|
||||
<code>attr <name> timeDiffToNow 86400 </code> <br>
|
||||
# die Startzeit wird auf "aktuelle Zeit - 86400 Sekunden" gesetzt <br>
|
||||
<code>attr <name> timeDiffToNow d:2 h:3 m:2 s:10 </code> <br>
|
||||
@ -15865,6 +15887,8 @@ sub bdump {
|
||||
# die Startzeit wird auf "aktuelle Zeit - 1 Jahr und 2,5 Stunden" gesetzt <br>
|
||||
<code>attr <name> timeDiffToNow y:1.5</code> <br>
|
||||
# die Startzeit wird auf "aktuelle Zeit - 1,5 Jahre gesetzt <br>
|
||||
<code>attr <name> timeDiffToNow d:8 FullDay </code> <br>
|
||||
# die Startzeit wird auf "aktuelle Zeit - 8 Tage gesetzt, der Selektionszeitraum wird auf Beginn / Ende des jeweiligen Tages erweitert <br>
|
||||
</ul>
|
||||
<br>
|
||||
|
||||
@ -15876,13 +15900,14 @@ sub bdump {
|
||||
<a name="timeOlderThan"></a>
|
||||
<li><b>timeOlderThan </b> - das <b>Selektionsende</b> wird auf den Zeitpunkt <b>"<aktuelle Zeit> - <timeOlderThan>"</b>
|
||||
gesetzt. Dadurch werden alle Datensätze bis zu dem Zeitpunkt "<aktuelle
|
||||
Zeit> - <timeOlderThan>" berücksichtigt (z.b. wenn auf 86400 gesetzt, werden alle
|
||||
Datensätze die älter als ein Tag sind berücksichtigt). Die Timestampermittlung erfolgt
|
||||
dynamisch zum Ausführungszeitpunkt.
|
||||
Zeit> - <timeOlderThan>" berücksichtigt. Die Timestampermittlung erfolgt
|
||||
dynamisch zum Ausführungszeitpunkt. Optional kann mit der Zusatzangabe
|
||||
"FullDay" der Selektionsbeginn und das Selektionsende auf Beginn / Ende des jeweiligen Tages erweitert werden
|
||||
(wirkt nur wenn Zeitdifferenz >= 1 Tag).
|
||||
<br><br>
|
||||
|
||||
<ul>
|
||||
<b>Eingabeformat Beispiel:</b> <br>
|
||||
<b>Eingabeformat Beispiele:</b> <br>
|
||||
<code>attr <name> timeOlderThan 86400</code> <br>
|
||||
# das Selektionsende wird auf "aktuelle Zeit - 86400 Sekunden" gesetzt <br>
|
||||
<code>attr <name> timeOlderThan d:2 h:3 m:2 s:10</code> <br>
|
||||
@ -15895,6 +15920,9 @@ sub bdump {
|
||||
# das Selektionsende wird auf "aktuelle Zeit - 1 Jahr und 2,5 Stunden" gesetzt <br>
|
||||
<code>attr <name> timeOlderThan y:1.5</code> <br>
|
||||
# das Selektionsende wird auf "aktuelle Zeit - 1,5 Jahre gesetzt <br>
|
||||
<code>attr <name> timeOlderThan d:8 FullDay </code> <br>
|
||||
# die Startzeit wird auf "aktuelle Zeit - 8 Tage gesetzt, der Selektionszeitraum wird auf Beginn / Ende des jeweiligen Tages erweitert <br>
|
||||
|
||||
</ul>
|
||||
<br>
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user