2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-10 09:16:53 +00:00

93_DbRep: contrib 8.46.1

git-svn-id: https://svn.fhem.de/fhem/trunk@25316 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
nasseeder1 2021-12-07 13:50:10 +00:00
parent 9fcb25a375
commit 851f902784

View File

@ -1893,7 +1893,7 @@ sub DbRep_dbConnect {
Log3 ($name, 2, "DbRep $name - ERROR: $@");
};
return ($err,$dbh);
return ($err,$dbh,$dbmodel);
}
################################################################################################################
@ -2045,7 +2045,16 @@ sub DbRep_Main {
##### Funktionsaufrufe #####
#############################
if ($opt eq "sumValue") {
$hash->{HELPER}{RUNNING_PID} = BlockingCall("sumval_DoParse", "$name§$device§$reading§$prop§$ts", "sumval_ParseDone", $to, "DbRep_ParseAborted", $hash);
$params = {
hash => $hash,
name => $name,
device => $device,
reading => $reading,
prop => $prop,
ts => $ts,
};
$hash->{HELPER}{RUNNING_PID} = BlockingCall("sumval_DoParse", $params, "sumval_ParseDone", $to, "DbRep_ParseAborted", $hash);
}
elsif ($opt =~ m/countEntries/) {
$params = {
@ -2059,8 +2068,16 @@ sub DbRep_Main {
$hash->{HELPER}{RUNNING_PID} = BlockingCall("count_DoParse", $params, "count_ParseDone", $to, "DbRep_ParseAborted", $hash);
}
elsif ($opt eq "averageValue") {
Log3 ($name, 4, "DbRep $name - averageValue calculation sceme: ".AttrVal($name,"averageCalcForm","avgArithmeticMean"));
$hash->{HELPER}{RUNNING_PID} = BlockingCall("averval_DoParse", "$name§$device§$reading§$prop§$ts", "averval_ParseDone", $to, "DbRep_ParseAborted", $hash);
$params = {
hash => $hash,
name => $name,
device => $device,
reading => $reading,
prop => $prop,
ts => $ts,
};
$hash->{HELPER}{RUNNING_PID} = BlockingCall("averval_DoParse", $params, "averval_ParseDone", $to, "DbRep_ParseAborted", $hash);
}
elsif ($opt eq "fetchrows") {
$params = {
@ -2076,8 +2093,7 @@ sub DbRep_Main {
$hash->{HELPER}{RUNNING_PID} = BlockingCall("fetchrows_DoParse", $params, "fetchrows_ParseDone", $to, "DbRep_ParseAborted", $hash);
}
elsif ($opt =~ /delDoublets/) {
my $cmd = $prop ? $prop : "adviceDelete";
# delseqdoubl_ParseDone ist Auswertefunktion auch für delDoublets
my $cmd = $prop ? $prop : "adviceDelete";
$hash->{HELPER}{RUNNING_PID} = BlockingCall("deldoublets_DoParse", "$name§$cmd§$device§$reading§$ts", "delseqdoubl_ParseDone", $to, "DbRep_ParseAborted", $hash);
}
elsif ($opt =~ /delSeqDoublets/) {
@ -2880,34 +2896,32 @@ return ($runtime,$runtime_string,$runtime_string_first,$runtime_string_next,$ll)
# nichtblockierende DB-Abfrage averageValue
####################################################################################################
sub averval_DoParse {
my $string = shift;
my ($name,$device,$reading,$prop,$ts) = split("\\§", $string);
my $hash = $defs{$name};
my $dbloghash = $defs{$hash->{HELPER}{DBLOGDEVICE}};
my $dbconn = $dbloghash->{dbconn};
my $dbuser = $dbloghash->{dbuser};
my $dblogname = $dbloghash->{NAME};
my $dbpassword = $attr{"sec$dblogname"}{secret};
my $paref = shift;
my $hash = $paref->{hash};
my $name = $paref->{name};
my $device = $paref->{device};
my $reading = $paref->{reading};
my $prop = $paref->{prop};
my $ts = $paref->{ts};
my $acf = AttrVal($name, "averageCalcForm", "avgArithmeticMean"); # Festlegung Berechnungsschema f. Mittelwert
my $qlf = "avg";
my ($gts,$gtsstr) = (0,q{}); # Variablen für Grünlandtemperatursumme GTS
my $gtsreached;
my ($dbh,$sql,$sth,$err,$selspec,$addon);
my ($sql,$sth,$selspec,$addon);
my $bst = [gettimeofday]; # Background-Startzeit
eval { $dbh = DBI->connect("dbi:$dbconn", $dbuser, $dbpassword, { PrintError => 0,
RaiseError => 1,
AutoInactiveDestroy => 1
}
); 1;
}
or do { $err = encode_base64($@,"");
Log3 ($name, 2, "DbRep $name - $@");
return "$name|''|$device|$reading|''|$err|''";
};
my ($err,$dbh,$dbmodel) = DbRep_dbConnect($name, 0);
if ($err) {
$err = encode_base64($@,"");
Log3 ($name, 2, "DbRep $name - $@");
return "$name|''|$device|$reading|''|$err|''";
}
Log3 ($name, 4, "DbRep $name - averageValue calculation sceme: ".$acf);
no warnings 'uninitialized';
@ -2920,13 +2934,13 @@ sub averval_DoParse {
if($acf eq "avgArithmeticMean") { # arithmetischer Mittelwert
# vorbereiten der DB-Abfrage, DB-Modell-abhaengig
$addon = '';
if ($dbloghash->{MODEL} eq "POSTGRESQL") {
if ($dbmodel eq "POSTGRESQL") {
$selspec = "AVG(VALUE::numeric)";
}
elsif ($dbloghash->{MODEL} eq "MYSQL") {
elsif ($dbmodel eq "MYSQL") {
$selspec = "AVG(VALUE)";
}
elsif ($dbloghash->{MODEL} eq "SQLITE") {
elsif ($dbmodel eq "SQLITE") {
$selspec = "AVG(VALUE)";
}
else {
@ -3218,18 +3232,16 @@ sub averval_DoParse {
}
$rt = $rt+$wrt;
}
# Daten müssen als Einzeiler zurückgegeben werden
$arrstr = encode_base64($arrstr,"");
$arrstr = encode_base64($arrstr,""); # Daten müssen als Einzeiler zurückgegeben werden
$device = encode_base64($device,"");
$gtsstr = encode_base64($gtsstr,"");
# Background-Laufzeit ermitteln
my $brt = tv_interval($bst);
my $brt = tv_interval($bst); # Background-Laufzeit ermitteln
$rt = $rt.",".$brt;
return "$name|$arrstr|$device|$reading|$rt|0|$irowdone|$gtsstr|$gtsreached";
return "$name|$arrstr|$device|$reading|$rt|0|$irowdone|$gtsstr|$gtsreached";
}
####################################################################################################
@ -4418,22 +4430,20 @@ return;
# nichtblockierende DB-Abfrage sumValue
####################################################################################################
sub sumval_DoParse {
my $string = shift;
my ($name,$device,$reading,$prop,$ts) = split("\\§", $string);
my $hash = $defs{$name};
my $dbloghash = $defs{$hash->{HELPER}{DBLOGDEVICE}};
my $dbconn = $dbloghash->{dbconn};
my $dbuser = $dbloghash->{dbuser};
my $dblogname = $dbloghash->{NAME};
my $dbpassword = $attr{"sec$dblogname"}{secret};
my $paref = shift;
my $hash = $paref->{hash};
my $name = $paref->{name};
my $device = $paref->{device};
my $reading = $paref->{reading};
my $prop = $paref->{prop};
my $ts = $paref->{ts};
my ($dbh,$sql,$sth,$err,$selspec);
my ($sql,$sth,$selspec);
# Background-Startzeit
my $bst = [gettimeofday];
my $bst = [gettimeofday]; # Background-Startzeit
eval {$dbh = DBI->connect("dbi:$dbconn", $dbuser, $dbpassword, { PrintError => 0, RaiseError => 1, AutoInactiveDestroy => 1 });};
if ($@) {
my ($err,$dbh,$dbmodel) = DbRep_dbConnect($name, 0);
if ($err) {
$err = encode_base64($@,"");
Log3 ($name, 2, "DbRep $name - $@");
return "$name|''|$device|$reading|''|$err|''";
@ -4447,13 +4457,13 @@ sub sumval_DoParse {
my @ts = split("\\|", $ts); # Timestampstring to Array
Log3 ($name, 5, "DbRep $name - Timestamp-Array: \n@ts");
if ($dbloghash->{MODEL} eq "POSTGRESQL") { #vorbereiten der DB-Abfrage, DB-Modell-abhaengig
if ($dbmodel eq "POSTGRESQL") { #vorbereiten der DB-Abfrage, DB-Modell-abhaengig
$selspec = "SUM(VALUE::numeric)";
}
elsif ($dbloghash->{MODEL} eq "MYSQL") {
elsif ($dbmodel eq "MYSQL") {
$selspec = "SUM(VALUE)";
}
elsif ($dbloghash->{MODEL} eq "SQLITE") {
elsif ($dbmodel eq "SQLITE") {
$selspec = "SUM(VALUE)";
}
else {
@ -4530,7 +4540,7 @@ sub sumval_DoParse {
$rt = $rt.",".$brt;
return "$name|$arrstr|$device|$reading|$rt|0|$irowdone";
return "$name|$arrstr|$device|$reading|$rt|0|$irowdone";
}
####################################################################################################
@ -11556,8 +11566,7 @@ sub DbRep_OutputWriteToDB {
}
}
if (@row_array) {
# Schreibzyklus aktivieren
if (@row_array) { # Schreibzyklus aktivieren
eval {$dbh = DBI->connect("dbi:$dbconn", $dbuser, $dbpassword, { PrintError => 0, RaiseError => 1, AutoCommit => 1, mysql_enable_utf8 => $utf8 });};
if ($@) {
$err = $@;
@ -13657,7 +13666,7 @@ return;
The additions "EXCLUDE" or "INCLUDE" can be added to exclude or include device/reading combinations in reduceLog
and override the "device" and "reading" attributes, which are ignored in this case. <br>
This specification in "EXCLUDE" is evaluated as a <b>regex</b>. Inside "INCLUDE", <b>SQL wildcards</b>
The specification in "EXCLUDE" is evaluated as a <b>regex</b>. Inside "INCLUDE", <b>SQL wildcards</b>
can be used. (for more information on SQL wildcards, see with <b>get &lt;name&gt; versionNotes 6</b>)
<br><br>
@ -16363,7 +16372,7 @@ return;
Die Zusätze "EXCLUDE" bzw. "INCLUDE" können ergänzt werden um device/reading Kombinationen in reduceLog auszuschließen
bzw. einzuschließen und überschreiben die Einstellung der Attribute "device" und "reading", die in diesem Fall
nicht beachtet werden. <br>
Diese Angabe in "EXCLUDE" wird als <b>Regex</b> ausgewertet. Innerhalb von "INCLUDE" können <b>SQL-Wildcards</b>
Die Angabe in "EXCLUDE" wird als <b>Regex</b> ausgewertet. Innerhalb von "INCLUDE" können <b>SQL-Wildcards</b>
verwendet werden (weitere Informationen zu SQL-Wildcards siehe mit <b>get &lt;name&gt; versionNotes 6</b>).
<br><br>