93_DbRep: contrib 8.29.1

git-svn-id: https://svn.fhem.de/fhem/trunk@20497 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
DS_Starter
2019-11-11 22:00:30 +00:00
parent 5c50518516
commit 2b0f9b835c

View File

@@ -1,5 +1,5 @@
########################################################################################################## ##########################################################################################################
# $Id: 93_DbRep.pm 20379 2019-10-18 20:49:04Z DS_Starter $ # $Id: 93_DbRep.pm 20481 2019-11-09 07:14:24Z DS_Starter $
########################################################################################################## ##########################################################################################################
# 93_DbRep.pm # 93_DbRep.pm
# #
@@ -58,7 +58,8 @@ no if $] >= 5.017011, warnings => 'experimental::smartmatch';
# Version History intern # Version History intern
our %DbRep_vNotesIntern = ( our %DbRep_vNotesIntern = (
"8.29.0" => "08.11.2019 add option FullDay for timeDiffToNow and timeOlderThan ", "8.29.1" => "11.11.2019 commandref revised, implement central \$today variable ",
"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.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.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 ", "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 ",
@@ -169,6 +170,8 @@ our %DbRep_vNotesIntern = (
# Version History extern: # Version History extern:
our %DbRep_vNotesExtern = ( our %DbRep_vNotesExtern = (
"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.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 ",
"8.25.0" => "29.08.2019 If a list of devices in attribute \"device\" contains a SQL wildcard (\%), this wildcard is now " "8.25.0" => "29.08.2019 If a list of devices in attribute \"device\" contains a SQL wildcard (\%), this wildcard is now "
."dissolved into separate devices if they are still existing in your FHEM configuration. " ."dissolved into separate devices if they are still existing in your FHEM configuration. "
."Please see <a href=\"https://forum.fhem.de/index.php/topic,101756.0.html\">this Forum Thread</a> " ."Please see <a href=\"https://forum.fhem.de/index.php/topic,101756.0.html\">this Forum Thread</a> "
@@ -323,8 +326,10 @@ our %DbRep_vHintsExt_de = (
"1" => "Hilfreiche Hinweise zu DbRep im <a href=\"https://wiki.fhem.de/wiki/DbRep_-_Reporting_und_Management_von_DbLog-Datenbankinhalten#Praxisbeispiele_.2F_Hinweise_und_L.C3.B6sungsans.C3.A4tze_f.C3.BCr_verschiedene_Aufgaben\">FHEM-Wiki</a>." "1" => "Hilfreiche Hinweise zu DbRep im <a href=\"https://wiki.fhem.de/wiki/DbRep_-_Reporting_und_Management_von_DbLog-Datenbankinhalten#Praxisbeispiele_.2F_Hinweise_und_L.C3.B6sungsans.C3.A4tze_f.C3.BCr_verschiedene_Aufgaben\">FHEM-Wiki</a>."
); );
# foreward declaration
sub DbRep_Main($$;$); sub DbRep_Main($$;$);
sub DbLog_cutCol($$$$$$$); # DbLog-Funktion nutzen um Daten auf maximale Länge beschneiden sub DbLog_cutCol($$$$$$$); # DbLog-Funktion nutzen um Daten auf maximale Länge beschneiden
our $today; # zentral von FHEM bereitgestellt (z.B. 2019-11-11)
# Standard Feldbreiten falls noch nicht getInitData ausgeführt # Standard Feldbreiten falls noch nicht getInitData ausgeführt
my %dbrep_col = ("DEVICE" => 64, my %dbrep_col = ("DEVICE" => 64,
@@ -2232,7 +2237,7 @@ sub DbRep_createTimeArray($$$) {
$wdadd = 172800 if($wd eq "Sa"); # wenn Start am "Sa" dann nächste Grenze +2 Tage $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 $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; my $aggsec;
if ($aggregation eq "hour") { if ($aggregation eq "hour") {
@@ -10835,12 +10840,12 @@ sub DbRep_setVersionInfo($) {
if($modules{$type}{META}{x_prereqs_src} && !$hash->{HELPER}{MODMETAABSENT}) { if($modules{$type}{META}{x_prereqs_src} && !$hash->{HELPER}{MODMETAABSENT}) {
# META-Daten sind vorhanden # META-Daten sind vorhanden
$modules{$type}{META}{version} = "v".$v; # Version aus META.json überschreiben, Anzeige mit {Dumper $modules{SMAPortal}{META}} $modules{$type}{META}{version} = "v".$v; # Version aus META.json überschreiben, Anzeige mit {Dumper $modules{SMAPortal}{META}}
if($modules{$type}{META}{x_version}) { # {x_version} ( nur gesetzt wenn $Id: 93_DbRep.pm 20379 2019-10-18 20:49:04Z DS_Starter $ im Kopf komplett! vorhanden ) if($modules{$type}{META}{x_version}) { # {x_version} ( nur gesetzt wenn $Id: 93_DbRep.pm 20481 2019-11-09 07:14:24Z DS_Starter $ im Kopf komplett! vorhanden )
$modules{$type}{META}{x_version} =~ s/1.1.1/$v/g; $modules{$type}{META}{x_version} =~ s/1.1.1/$v/g;
} else { } else {
$modules{$type}{META}{x_version} = $v; $modules{$type}{META}{x_version} = $v;
} }
return $@ unless (FHEM::Meta::SetInternals($hash)); # FVERSION wird gesetzt ( nur gesetzt wenn $Id: 93_DbRep.pm 20379 2019-10-18 20:49:04Z DS_Starter $ im Kopf komplett! vorhanden ) return $@ unless (FHEM::Meta::SetInternals($hash)); # FVERSION wird gesetzt ( nur gesetzt wenn $Id: 93_DbRep.pm 20481 2019-11-09 07:14:24Z DS_Starter $ im Kopf komplett! vorhanden )
if(__PACKAGE__ eq "FHEM::$type" || __PACKAGE__ eq $type) { if(__PACKAGE__ eq "FHEM::$type" || __PACKAGE__ eq $type) {
# es wird mit Packages gearbeitet -> Perl übliche Modulversion setzen # es wird mit Packages gearbeitet -> Perl übliche Modulversion setzen
# mit {<Modul>->VERSION()} im FHEMWEB kann Modulversion abgefragt werden # mit {<Modul>->VERSION()} im FHEMWEB kann Modulversion abgefragt werden
@@ -11237,7 +11242,8 @@ return;
<b>Examples: </b><br> <b>Examples: </b><br>
my $ret = DbReadingsVal("Rep.LogDB1","MyWetter:temperature","2018-01-13_08:00:00",""); <br> my $ret = DbReadingsVal("Rep.LogDB1","MyWetter:temperature","2018-01-13_08:00:00",""); <br>
attr &lt;name&gt; userReadings oldtemp {DbReadingsVal("Rep.LogDB1","MyWetter:temperature","2018-04-13_08:00:00","")} attr &lt;name&gt; userReadings oldtemp {DbReadingsVal("Rep.LogDB1","MyWetter:temperature","2018-04-13_08:00:00","")} <br>
attr &lt;name&gt; userReadings todayPowerIn {DbReadingsVal("Rep.LogDB1","SMA_Energymeter:Bezug_Wirkleistung_Zaehler",$today."_00:00:00",0)}
<br><br> <br><br>
The command syntax for the FHEM command is: <br><br> The command syntax for the FHEM command is: <br><br>
@@ -13395,8 +13401,10 @@ sub bdump {
<a name="timeDiffToNow"></a> <a name="timeDiffToNow"></a>
<li><b>timeDiffToNow </b> - the <b>begin time </b> of data selection will be set to the timestamp <b>"&lt;current time&gt; - <li><b>timeDiffToNow </b> - the <b>begin time </b> of data selection will be set to the timestamp <b>"&lt;current time&gt; -
&lt;timeDiffToNow&gt;"</b> dynamically (e.g. if set to 86400, the last 24 hours are considered by data &lt;timeDiffToNow&gt;"</b> dynamically. The time period will be calculated dynamically at
selection). The time period will be calculated dynamically at execution time. execution time. Optional can with the additional entry "FullDay" the selection start time
and the selection end time be expanded to the begin / end of the involved days
(take only effect if adjusted time difference is >= 1 day).
<br><br> <br><br>
<ul> <ul>
@@ -13413,6 +13421,8 @@ sub bdump {
# the start time is set to "current time - 1 year and 2,5 hours" <br> # the start time is set to "current time - 1 year and 2,5 hours" <br>
<code>attr &lt;name&gt; timeDiffToNow y:1.5</code> <br> <code>attr &lt;name&gt; timeDiffToNow y:1.5</code> <br>
# the start time is set to "current time - 1.5 years" <br> # the start time is set to "current time - 1.5 years" <br>
<code>attr &lt;name&gt; timeDiffToNow d:8 FullDay </code> <br>
# the start time is set to "current time - 8 days", the selection time period is expanded to the begin / end of the involved days <br>
</ul> </ul>
<br> <br>
@@ -13424,9 +13434,10 @@ sub bdump {
<a name="timeOlderThan"></a> <a name="timeOlderThan"></a>
<li><b>timeOlderThan </b> - the <b>end time</b> of data selection will be set to the timestamp <b>"&lt;aktuelle Zeit&gt; - <li><b>timeOlderThan </b> - the <b>end time</b> of data selection will be set to the timestamp <b>"&lt;aktuelle Zeit&gt; -
&lt;timeOlderThan&gt;"</b> dynamically. Always the datasets up to timestamp &lt;timeOlderThan&gt;"</b> dynamically. Always the datasets up to timestamp
"&lt;current time&gt; - &lt;timeOlderThan&gt;" will be considered (e.g. if set to "&lt;current time&gt; - &lt;timeOlderThan&gt;" will be considered. The time period will be calculated dynamically at
86400, all datasets older than one day are considered). The time period will be calculated dynamically at execution time. Optional can with the additional entry "FullDay" the selection start time
execution time. and the selection end time be expanded to the begin / end of the involved days
(take only effect if adjusted time difference is >= 1 day).
<br><br> <br><br>
<ul> <ul>
@@ -13443,6 +13454,9 @@ sub bdump {
# the selection end time is set to "current time - 1 year and 2,5 hours" <br> # the selection end time is set to "current time - 1 year and 2,5 hours" <br>
<code>attr &lt;name&gt; timeOlderThan y:1.5</code> <br> <code>attr &lt;name&gt; timeOlderThan y:1.5</code> <br>
# the selection end time is set to "current time - 1.5 years" <br> # the selection end time is set to "current time - 1.5 years" <br>
<code>attr &lt;name&gt; timeOlderThan d:8 FullDay </code> <br>
# the end time is set to "current time - 8 days", the selection time period is expanded to the begin / end of the involved days <br>
</ul> </ul>
<br> <br>
@@ -13679,7 +13693,8 @@ sub bdump {
<b>Beispiele: </b><br> <b>Beispiele: </b><br>
$ret = DbReadingsVal("Rep.LogDB1","MyWetter:temperature","2018-01-13_08:00:00",""); <br> $ret = DbReadingsVal("Rep.LogDB1","MyWetter:temperature","2018-01-13_08:00:00",""); <br>
attr &lt;name&gt; userReadings oldtemp {DbReadingsVal("Rep.LogDB1","MyWetter:temperature","2018-04-13_08:00:00","")} attr &lt;name&gt; userReadings oldtemp {DbReadingsVal("Rep.LogDB1","MyWetter:temperature","2018-04-13_08:00:00","")} <br>
attr &lt;name&gt; userReadings todayPowerIn {DbReadingsVal("Rep.LogDB1","SMA_Energymeter:Bezug_Wirkleistung_Zaehler",$today."_00:00:00",0)}
<br><br> <br><br>
Die Befehlssyntax als FHEM Kommando ist: <br><br> Die Befehlssyntax als FHEM Kommando ist: <br><br>
@@ -15868,13 +15883,13 @@ sub bdump {
<a name="timeDiffToNow"></a> <a name="timeDiffToNow"></a>
<li><b>timeDiffToNow </b> - der <b>Selektionsbeginn</b> wird auf den Zeitpunkt <b>"&lt;aktuelle Zeit&gt; - &lt;timeDiffToNow&gt;"</b> <li><b>timeDiffToNow </b> - der <b>Selektionsbeginn</b> wird auf den Zeitpunkt <b>"&lt;aktuelle Zeit&gt; - &lt;timeDiffToNow&gt;"</b>
gesetzt. Die Timestampermittlung erfolgt dynamisch zum Ausführungszeitpunkt. Optional kann mit der Zusatzangabe gesetzt. Die Timestampermittlung erfolgt dynamisch zum Ausführungszeitpunkt. Optional kann mit
"FullDay" der Selektionsbeginn und das Selektionsende auf Beginn / Ende des jeweiligen Tages erweitert werden der Zusatzangabe "FullDay" der Selektionsbeginn und das Selektionsende auf Beginn / Ende der
(wirkt nur wenn Zeitdifferenz >= 1 Tag). jeweiligen Selektionstage erweitert werden (wirkt nur wenn eingestellte Zeitdifferenz ist >= 1 Tag).
<br><br> <br><br>
<ul> <ul>
<b>Eingabeformat Beispiel:</b> <br> <b>Eingabeformat Beispiele:</b> <br>
<code>attr &lt;name&gt; timeDiffToNow 86400 </code> <br> <code>attr &lt;name&gt; timeDiffToNow 86400 </code> <br>
# die Startzeit wird auf "aktuelle Zeit - 86400 Sekunden" gesetzt <br> # die Startzeit wird auf "aktuelle Zeit - 86400 Sekunden" gesetzt <br>
<code>attr &lt;name&gt; timeDiffToNow d:2 h:3 m:2 s:10 </code> <br> <code>attr &lt;name&gt; timeDiffToNow d:2 h:3 m:2 s:10 </code> <br>
@@ -15888,7 +15903,7 @@ sub bdump {
<code>attr &lt;name&gt; timeDiffToNow y:1.5</code> <br> <code>attr &lt;name&gt; timeDiffToNow y:1.5</code> <br>
# die Startzeit wird auf "aktuelle Zeit - 1,5 Jahre gesetzt <br> # die Startzeit wird auf "aktuelle Zeit - 1,5 Jahre gesetzt <br>
<code>attr &lt;name&gt; timeDiffToNow d:8 FullDay </code> <br> <code>attr &lt;name&gt; 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> # die Startzeit wird auf "aktuelle Zeit - 8 Tage gesetzt, der Selektionszeitraum wird auf Beginn / Ende der beteiligten Tage erweitert <br>
</ul> </ul>
<br> <br>
@@ -15902,12 +15917,12 @@ sub bdump {
gesetzt. Dadurch werden alle Datensätze bis zu dem Zeitpunkt "&lt;aktuelle gesetzt. Dadurch werden alle Datensätze bis zu dem Zeitpunkt "&lt;aktuelle
Zeit&gt; - &lt;timeOlderThan&gt;" berücksichtigt. Die Timestampermittlung erfolgt Zeit&gt; - &lt;timeOlderThan&gt;" berücksichtigt. Die Timestampermittlung erfolgt
dynamisch zum Ausführungszeitpunkt. Optional kann mit der Zusatzangabe dynamisch zum Ausführungszeitpunkt. Optional kann mit der Zusatzangabe
"FullDay" der Selektionsbeginn und das Selektionsende auf Beginn / Ende des jeweiligen Tages erweitert werden "FullDay" der Selektionsbeginn und das Selektionsende auf Beginn / Ende der jeweiligen
(wirkt nur wenn Zeitdifferenz >= 1 Tag). Selektionstage erweitert werden (wirkt nur wenn eingestellte Zeitdifferenz ist >= 1 Tag).
<br><br> <br><br>
<ul> <ul>
<b>Eingabeformat Beispiel:</b> <br> <b>Eingabeformat Beispiele:</b> <br>
<code>attr &lt;name&gt; timeOlderThan 86400</code> <br> <code>attr &lt;name&gt; timeOlderThan 86400</code> <br>
# das Selektionsende wird auf "aktuelle Zeit - 86400 Sekunden" gesetzt <br> # das Selektionsende wird auf "aktuelle Zeit - 86400 Sekunden" gesetzt <br>
<code>attr &lt;name&gt; timeOlderThan d:2 h:3 m:2 s:10</code> <br> <code>attr &lt;name&gt; timeOlderThan d:2 h:3 m:2 s:10</code> <br>
@@ -15921,7 +15936,7 @@ sub bdump {
<code>attr &lt;name&gt; timeOlderThan y:1.5</code> <br> <code>attr &lt;name&gt; timeOlderThan y:1.5</code> <br>
# das Selektionsende wird auf "aktuelle Zeit - 1,5 Jahre gesetzt <br> # das Selektionsende wird auf "aktuelle Zeit - 1,5 Jahre gesetzt <br>
<code>attr &lt;name&gt; timeOlderThan d:8 FullDay </code> <br> <code>attr &lt;name&gt; 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> # das Selektionsende wird auf "aktuelle Zeit - 8 Tage gesetzt, der Selektionszeitraum wird auf Beginn / Ende der beteiligten Tage erweitert <br>
</ul> </ul>
<br> <br>