1
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-05-07 22:29:19 +00:00

93_DbRep: contrib 8.42.7

git-svn-id: https://svn.fhem.de/fhem/trunk@23836 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
nasseeder1 2021-02-27 08:23:22 +00:00
parent 81ef744620
commit 2be763da54

View File

@ -1,5 +1,5 @@
##########################################################################################################
# $Id: 93_DbRep.pm 23214 2020-11-22 15:56:42Z DS_Starter $
# $Id: 93_DbRep.pm 23639 2021-01-30 08:29:42Z DS_Starter $
##########################################################################################################
# 93_DbRep.pm
#
@ -57,6 +57,10 @@ no if $] >= 5.017011, warnings => 'experimental::smartmatch';
# Version History intern
my %DbRep_vNotesIntern = (
"8.42.7" => "27.02.2021 fix attribute sqlCmdVars is not working in sqlCmdBlocking Forum: /topic,53584.msg1135528.html#msg1135528",
"8.42.6" => "25.02.2021 fix commandref ",
"8.42.5" => "02.02.2021 correct possible values for attr seqDoubletsVariance ",
"8.42.4" => "30.01.2021 fix commandref ",
"8.42.3" => "03.01.2021 set fastStart as default for TYPE Client ",
"8.42.2" => "03.01.2021 sumValue - create 0 instaed of '-' if value of DS is 0, Forum:#index.php/topic,53584.msg1116910.html#msg1116910 ",
"8.42.1" => "22.11.2020 fix delete \$hash->{HELPER}{REDUCELOG} Forum:#116057 ",
@ -256,7 +260,7 @@ my %DbRep_vHintsExt_en = (
"If the sum of 200 is exceeded in spring, the sustainable vegetation start is reached. The background is the ".
" nitrogen uptake and processing of the soil, which is dependent on this temperature sum. In middle latitudes ".
"this is usually achieved in the course of March, at the turn from early spring to mid-spring. <br>".
"(see also <a href=\"https://de.wikipedia.org/wiki/Gr%C3%BCnlandtemperatursumme\">Grünlandtemperatursumme in Wikipedia</a>) ",
"(see also <a href=\"https://de.wikipedia.org/wiki/Grünlandtemperatursumme\">Grünlandtemperatursumme in Wikipedia</a>) ",
"4" => "The attribute 'valueFilter' can specify a REGEXP expression that is used for additional field selection as described in set-function. "
."If you need more assistance please to the manual of your used database. For example the overview about REGEXP for "
."MariaDB refer to <a href=\"https://mariadb.com/kb/en/library/regular-expressions-overview\">Regular Expressions "
@ -283,7 +287,7 @@ my %DbRep_vHintsExt_de = (
"Wird im Frühjahr die Summe von 200 überschritten, ist der nachhaltige Vegetationsbeginn erreicht. Hintergrund ist die ".
"Stickstoffaufnahme und -verarbeitung des Bodens, welcher von dieser Temperatursumme abhängig ist. In mittleren Breiten ".
"wird das meist im Laufe des März, an der Wende von Vorfrühling zu Mittfrühling erreicht. <br>".
"(siehe auch <a href=\"https://de.wikipedia.org/wiki/Gr%C3%BCnlandtemperatursumme\">Grünlandtemperatursumme in Wikipedia</a>) ",
"(siehe auch <a href=\"https://de.wikipedia.org/wiki/Grünlandtemperatursumme\">Grünlandtemperatursumme in Wikipedia</a>) ",
"4" => "Im Attribut 'valueFilter' können REGEXP zur erweiterten Feldselektion angegeben werden. Welche Felder berücksichtigt ".
"werden, ist in der jeweiligen set-Funktion beschrieben. Für weitere Hilfe bitte die REGEXP-Dokumentation ihrer ".
"verwendeten Datenbank konsultieren. Ein Überblick über REGEXP mit MariaDB ist zum Beispiel hier verfügbar:<br>".
@ -301,9 +305,6 @@ my %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>."
);
# foreward declaration
sub DbLog_cutCol($$$$$$$); # DbLog-Funktion nutzen um Daten auf maximale Länge beschneiden
# Standard Feldbreiten falls noch nicht getInitData ausgeführt
my %dbrep_col = ("DEVICE" => 64,
"READING" => 64,
@ -1295,7 +1296,7 @@ sub DbRep_Attr {
my $edge = "";
if($aVal =~ /EDGE=/) {
($aVal,$edge) = split("EDGE=", $aVal);
unless ($edge =~ /^balanced$|^negative$/i) { return " The parameter EDGE can only be \"balanced\" or \"negative\" !";}
unless ($edge =~ /^positive$|^negative$/i) { return qq{The parameter EDGE can only be "positive" or "negative" !}; }
}
my ($varpos,$varneg) = split(" ", $aVal);
$varpos = DbRep_trim($varpos);
@ -5706,18 +5707,20 @@ sub delseqdoubl_DoParse {
push (@sel,$oor) if($oor);
push (@sel,$or) if($or);
push (@sel,$nr);
} elsif ($i>=2 && ($ooval eq $oval && $oval eq $nval) ||
}
elsif ($i>=2 && ($ooval eq $oval && $oval eq $nval) ||
($i>=2 && $varo && $varu && ($ooval <= $varo) && ($varu <= $ooval) && ($nval <= $varo) && ($varu <= $nval)) ) {
if ($edge =~ /negative/i && ($ooval > $oval)) {
push (@sel,$oor); # negative Flanke -> der fallende DS und desssen Vorgänger
push (@sel,$or); # werden behalten obwohl im Löschkorridor
push (@sel,$nr);
} elsif ($edge =~ /positive/i && ($ooval < $oval)) {
}
elsif ($edge =~ /positive/i && ($ooval < $oval)) {
push (@sel,$oor); # positive Flanke -> der steigende DS und desssen Vorgänger
push (@sel,$or); # werden behalten obwohl im Löschkorridor
push (@sel,$nr);
} else {
}
else {
push (@sel,$oor); # Array der zu behaltenden Datensätze
push (@sel,$nr); # Array der zu behaltenden Datensätze
push (@warp,$or); # Array der zu löschenden Datensätze
@ -5747,7 +5750,8 @@ sub delseqdoubl_DoParse {
$rt = $rt+tv_interval($st);
}
} else {
}
else {
push (@sel,$oor) if($oor);
push (@sel,$or) if($or);
push (@sel,$nr);
@ -5775,11 +5779,14 @@ sub delseqdoubl_DoParse {
my @retarray = ($opt =~ /adviceRemain/)?@remain:($opt =~ /adviceDelete/)?@todel:" ";
s/\|/_E#S#C_/g for @retarray; # escape Pipe "|"
if ($utf8 && @retarray) {
$rowlist = Encode::encode_utf8(join('|', @retarray));
} elsif(@retarray) {
}
elsif(@retarray) {
$rowlist = join('|', @retarray);
} else {
}
else {
$rowlist = 0;
}
@ -11667,12 +11674,12 @@ sub DbRep_setVersionInfo {
if($modules{$type}{META}{x_prereqs_src} && !$hash->{HELPER}{MODMETAABSENT}) {
# META-Daten sind vorhanden
$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 23214 2020-11-22 15:56:42Z DS_Starter $ im Kopf komplett! vorhanden )
if($modules{$type}{META}{x_version}) { # {x_version} ( nur gesetzt wenn $Id: 93_DbRep.pm 23639 2021-01-30 08:29:42Z DS_Starter $ im Kopf komplett! vorhanden )
$modules{$type}{META}{x_version} =~ s/1.1.1/$v/g;
} else {
$modules{$type}{META}{x_version} = $v;
}
return $@ unless (FHEM::Meta::SetInternals($hash)); # FVERSION wird gesetzt ( nur gesetzt wenn $Id: 93_DbRep.pm 23214 2020-11-22 15:56:42Z DS_Starter $ im Kopf komplett! vorhanden )
return $@ unless (FHEM::Meta::SetInternals($hash)); # FVERSION wird gesetzt ( nur gesetzt wenn $Id: 93_DbRep.pm 23639 2021-01-30 08:29:42Z DS_Starter $ im Kopf komplett! vorhanden )
if(__PACKAGE__ eq "FHEM::$type" || __PACKAGE__ eq $type) {
# es wird mit Packages gearbeitet -> Perl übliche Modulversion setzen
# mit {<Modul>->VERSION()} im FHEMWEB kann Modulversion abgefragt werden
@ -11704,7 +11711,7 @@ sub DbRep_sqlCmdBlocking {
my $srs = AttrVal($name, "sqlResultFieldSep", "|" );
my $to = AttrVal($name, "timeout", 10 );
my ($err,$ret,$dbh);
my ($err,$ret,$dbh,@pms);
readingsDelete ($hash, "errortext");
ReadingsSingleUpdateValue ($hash, "state", "running", 1);
@ -11732,6 +11739,24 @@ sub DbRep_sqlCmdBlocking {
Log3 ($name, 4, "DbRep $name - Command: sqlCmdBlocking");
Log3 ($name, 4, "DbRep $name - SQL execute: $sql");
# Set Session Variablen "SET" oder PRAGMA aus Attribut "sqlCmdVars"
my $vars = AttrVal($name, "sqlCmdVars", "");
if ($vars) {
@pms = split(";",$vars);
for my $pm (@pms) {
if($pm !~ /PRAGMA|SET/i) {
next;
}
$pm = ltrim($pm).";";
Log3($name, 4, "DbRep $name - Set VARIABLE or PRAGMA: $pm");
eval {$dbh->do($pm);} or do { Log3 ($name, 2, "DbRep $name - ERROR - $@");
$dbh->disconnect;
return $@;
}
}
}
my $set;
if($cmd =~ /^SET.*;/i) { # split SQL-Parameter Statement falls mitgegeben ->
$cmd =~ m/^(SET.*?;)(.*)/i; # z.B. SET @open:=NULL, @closed:=NULL; Select ...
@ -13474,9 +13499,9 @@ return;
<ul>
<table>
<colgroup> <col width=10%> <col width=90%> </colgroup>
<tr><td> <b>writeToDB</b> </td><td>: writes one value each with the time stamps XX:XX:01 and XX:XX:59 within the respective evaluation period </td></tr>
<tr><td> <b>writeToDBSingle</b> </td><td>: writes only one value with the time stamp XX:XX:59 at the end of an evaluation period </td></tr>
<tr><td> <b>writeToDBInTime</b> </td><td>: writes a value at the beginning and end of the time limits of an evaluation period </td></tr>
<tr><td> <b>writeToDB</b> </td><td>: writes one value each with the time stamps XX:XX:01 and XX:XX:59 within the respective aggregation period </td></tr>
<tr><td> <b>writeToDBSingle</b> </td><td>: writes only one value with the time stamp XX:XX:59 at the end of an aggregation period </td></tr>
<tr><td> <b>writeToDBInTime</b> </td><td>: writes a value at the beginning and end of the time limits of an aggregation period </td></tr>
</table>
</ul>
<br>