2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-05-05 08:20:23 +00:00

93_DbRep: contrib v 8.46.12

git-svn-id: https://svn.fhem.de/fhem/trunk@25445 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
nasseeder1 2022-01-09 17:22:10 +00:00
parent cb362fbc7c
commit 6b20b464a4

View File

@ -6727,8 +6727,8 @@ sub DbRep_sqlCmd {
my $opt = $paref->{opt};
my $device = $paref->{device};
my $reading = $paref->{reading};
my $runtime_string_first = $paref->{rsf};
my $runtime_string_next = $paref->{rsn};
my $rsf = $paref->{rsf};
my $rsn = $paref->{rsn};
my $cmd = $paref->{prop};
my $srs = AttrVal($name, "sqlResultFieldSep", "|");
@ -6828,48 +6828,17 @@ sub DbRep_sqlCmd {
}
}
# Allow inplace replacement of keywords for timings, device, reading (using attribute syntax)
my $sfx = AttrVal("global", "language", "EN");
$sfx = $sfx eq "EN" ? "" : "_$sfx";
$sql =~ s/§timestamp_begin§/'$runtime_string_first'/g;
$sql =~ s/§timestamp_end§/'$runtime_string_next'/g;
my $rdspec;
if ($sql =~ /§device§/xs) {
if ($device eq "%") {
$err = qq{You must specify device(s) in attribute "device" if you use the placeholder "§device§" in your statement};
Log3 ($name, 2, "DbRep $name - ERROR - $err");
$err = qq{<html> $err </html>};
$err =~ s/"device"/<a href='https:\/\/fhem.de\/commandref${sfx}.html#device' target='_blank'>device<\/a>/xs;
$err = encode_base64($err,"");
return "$name|$err";
}
$rdspec = DbRep_createCommonSql( {hash => $hash, device => $device, dbmodel => $dbmodel} );
$rdspec = (split /AND\s(?:1|true)/xis, $rdspec)[0];
$sql =~ s/§device§/$rdspec/xg;
}
if ($sql =~ /§reading§/xs) {
if ($reading eq "%") {
$err = qq{You must specify reading(s) in attribute "reading" if you use the placeholder "§reading§" in your statement};
Log3 ($name, 2, "DbRep $name - ERROR - $err");
$err = qq{<html> $err </html>};
$err =~ s/"reading"/<a href='https:\/\/fhem.de\/commandref${sfx}.html#reading' target='_blank'>reading<\/a>/xs;
$err = encode_base64($err,"");
return "$name|$err";
}
$rdspec = DbRep_createCommonSql( {hash => $hash, reading => $reading, dbmodel => $dbmodel} );
$rdspec = (split /AND\s(?:1|true)/xis, $rdspec)[0];
$sql =~ s/§reading§/$rdspec/xg;
# Ersetzung von Schlüsselwörtern für Timing, Gerät, Lesen (unter Verwendung der Attributsyntax)
($err, $sql) = _DbRep_sqlReplaceKeywords ( { hash => $hash,
sql => $sql,
device => $device,
reading => $reading,
dbmodel => $dbmodel,
rsf => $rsf,
rsn => $rsn
}
);
return $err if ($err);
$sql =~ s/ESC_ESC_ESC/;/gx; # wiederherstellen von escapeten ";" -> umwandeln von ";;" in ";"
@ -6930,6 +6899,69 @@ sub DbRep_sqlCmd {
return "$name|$err|$rowstring|$opt|$cmd|$nrows|$rt";
}
####################################################################################################
# Ersetzung von Schlüsselwörtern für Time*, Devices und Readings
# in SQL-Statements (unter Verwendung der Attributsyntax)
####################################################################################################
sub _DbRep_sqlReplaceKeywords {
my $paref = shift;
my $hash = $paref->{hash};
my $sql = $paref->{sql};
my $device = $paref->{device};
my $reading = $paref->{reading};
my $dbmodel = $paref->{dbmodel};
my $rsf = $paref->{rsf};
my $rsn = $paref->{rsn};
my $ret = q{};
my $name = $hash->{NAME};
my $sfx = AttrVal("global", "language", "EN");
$sfx = $sfx eq 'EN' ? '' : "_$sfx";
$sql =~ s/§timestamp_begin§/'$rsf'/g;
$sql =~ s/§timestamp_end§/'$rsn'/g;
my ($rdspec,$err);
if ($sql =~ /§device§/xs) {
if ($device eq "%") {
$err = qq{You must specify device(s) in attribute "device" if you use the placeholder "§device§" in your statement};
Log3 ($name, 2, "DbRep $name - ERROR - $err");
$err = qq{<html> $err </html>};
$err =~ s/"device"/<a href='https:\/\/fhem.de\/commandref${sfx}.html#device' target='_blank'>device<\/a>/xs;
$err = encode_base64($err,"");
$ret = "$name|$err";
return $ret;
}
$rdspec = DbRep_createCommonSql( {hash => $hash, device => $device, dbmodel => $dbmodel} );
$rdspec = (split /AND\s(?:1|true)/xis, $rdspec)[0];
$sql =~ s/§device§/$rdspec/xg;
}
if ($sql =~ /§reading§/xs) {
if ($reading eq "%") {
$err = qq{You must specify reading(s) in attribute "reading" if you use the placeholder "§reading§" in your statement};
Log3 ($name, 2, "DbRep $name - ERROR - $err");
$err = qq{<html> $err </html>};
$err =~ s/"reading"/<a href='https:\/\/fhem.de\/commandref${sfx}.html#reading' target='_blank'>reading<\/a>/xs;
$err = encode_base64($err,"");
$ret = "$name|$err";
return $ret;
}
$rdspec = DbRep_createCommonSql( {hash => $hash, reading => $reading, dbmodel => $dbmodel} );
$rdspec = (split /AND\s(?:1|true)/xis, $rdspec)[0];
$sql =~ s/§reading§/$rdspec/xg;
}
return ($ret, $sql);
}
####################################################################################################
# Auswertungsroutine der nichtblockierenden DB-Abfrage sqlCmd
####################################################################################################
@ -9261,7 +9293,6 @@ sub DbRep_reduceLog {
my $selspec = "SELECT TIMESTAMP,DEVICE,'',READING,VALUE FROM history where ";
my $addon = "ORDER BY TIMESTAMP ASC";
my $specs;
my $valfilter = AttrVal($name, "valueFilter", undef); # Wertefilter
my $specs = {