2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-12 22:56:34 +00:00

93_DbLog: contrib 5.8.0

git-svn-id: https://svn.fhem.de/fhem/trunk@27140 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
nasseeder1 2023-01-28 19:18:44 +00:00
parent 3d9e7fa90a
commit 92269174e0

View File

@ -132,6 +132,7 @@ my %DbLog_hget = (
ReadingsAvgVal => { fn => \&_DbLog_dbReadings }, ReadingsAvgVal => { fn => \&_DbLog_dbReadings },
webchart => { fn => \&_DbLog_chartQuery }, webchart => { fn => \&_DbLog_chartQuery },
plotdata => { fn => \&_DbLog_plotData }, plotdata => { fn => \&_DbLog_plotData },
dataRetrieval => { fn => \&_DbLog_chartQuery },
); );
my %DbLog_columns = ("DEVICE" => 64, my %DbLog_columns = ("DEVICE" => 64,
@ -5837,7 +5838,8 @@ sub DbLog_Get {
"ReadingsMaxValTimestamp ". "ReadingsMaxValTimestamp ".
"ReadingsMinVal ". "ReadingsMinVal ".
"ReadingsMinValTimestamp ". "ReadingsMinValTimestamp ".
"ReadingsAvgVal " "ReadingsAvgVal ".
"dataRetrieval: "
; ;
return $getlist; return $getlist;
@ -5915,7 +5917,9 @@ sub _DbLog_chartQuery {
my $hash = $paref->{hash}; my $hash = $paref->{hash};
my $name = $paref->{name}; my $name = $paref->{name};
my @a = @{$paref->{aref}}; my @a = @{$paref->{aref}};
my $opt = $paref->{opt};
if ($opt eq 'webchart') {
return "Usage: \n". return "Usage: \n".
"get $name <in> <out> <from> <to> <column_spec>...\n". "get $name <in> <out> <from> <to> <column_spec>...\n".
"where column_spec is <device>:<reading>:<default>:<fn>\n". "where column_spec is <device>:<reading>:<default>:<fn>\n".
@ -5925,6 +5929,7 @@ sub _DbLog_chartQuery {
"<in> is not used, only for compatibility for FileLog, please use '-' for <in> \n". "<in> is not used, only for compatibility for FileLog, please use '-' for <in> \n".
"<out> is a prefix, '-' means stdout\n" "<out> is a prefix, '-' means stdout\n"
if(int(@a) < 4); if(int(@a) < 4);
}
my ($sql, $countsql) = _DbLog_createQuerySql ($paref); my ($sql, $countsql) = _DbLog_createQuerySql ($paref);
@ -5970,7 +5975,9 @@ sub _DbLog_chartQuery {
} }
my $i = 0; my $i = 0;
my $jsonstring = '{"data":['; my $jsonstring = q({);
$jsonstring .= q("success": "true", ) if($opt eq 'dataRetrieval');
$jsonstring .= q("data":[);
while ( my @data = $query_handle->fetchrow_array()) { while ( my @data = $query_handle->fetchrow_array()) {
if($i == 0) { if($i == 0) {
@ -5981,12 +5988,12 @@ sub _DbLog_chartQuery {
} }
for ($i = 0; $i < $columncnt; $i++) { for ($i = 0; $i < $columncnt; $i++) {
$jsonstring .= '"'; $jsonstring .= q(");
$jsonstring .= uc($query_handle->{NAME}->[$i]); $jsonstring .= uc($query_handle->{NAME}->[$i]);
$jsonstring .= '":'; $jsonstring .= q(":);
if (defined $data[$i]) { if (defined $data[$i]) {
my $fragment = substr($data[$i],0,1); my $fragment = substr $data[$i], 0, 1;
if ($fragment eq "{") { if ($fragment eq "{") {
$jsonstring .= $data[$i]; $jsonstring .= $data[$i];
@ -6000,20 +6007,20 @@ sub _DbLog_chartQuery {
} }
if($i != ($columncnt -1)) { if($i != ($columncnt -1)) {
$jsonstring .= ','; $jsonstring .= q(,);
} }
} }
$jsonstring .= '}'; $jsonstring .= q(});
} }
$jsonstring .= ']'; $jsonstring .= q(]);
if (defined $totalcount && $totalcount ne "") { if (defined $totalcount && $totalcount ne "") {
$jsonstring .= ',"totalCount": '.$totalcount.'}'; $jsonstring .= ',"totalCount": '.$totalcount.'}';
} }
else { else {
$jsonstring .= '}'; $jsonstring .= q(});
} }
return $jsonstring; return $jsonstring;
@ -6025,26 +6032,43 @@ return $jsonstring;
sub _DbLog_createQuerySql { sub _DbLog_createQuerySql {
my $paref = shift; my $paref = shift;
my $opt = $paref->{opt};
my $hash = $paref->{hash}; my $hash = $paref->{hash};
my @a = @{$paref->{aref}}; my @a = @{$paref->{aref}};
my $starttime = $a[2]; my $starttime = $a[2]; # <from>
$starttime =~ s/_/ /; my $endtime = $a[3]; # <to>
my $endtime = $a[3]; my $device = $a[4]; # <device>
$endtime =~ s/_/ /; my $querytype = $a[5]; # <querytype>
my $device = $a[4];
my $userquery = $a[5];
my $xaxis = $a[6]; # ein Datenbankfeld wie TIMESTAMP, READING, DEVICE, UNIT, EVENT my $xaxis = $a[6]; # ein Datenbankfeld wie TIMESTAMP, READING, DEVICE, UNIT, EVENT
my $yaxis = $a[7]; # ein Reading Name my $reading = $a[7]; # ein Reading Name (<yaxis>)
my $savename = $a[8]; my $savename = $a[8]; # <savename>
my $jsonChartConfig = $a[9]; my $jsonChartConfig = $a[9]; # <chartconfig>
my $pagingstart = $a[10]; my $offset = $a[10]; # <pagingstart>
my $paginglimit = $a[11]; my $limit = $a[11]; # <paginglimit>
my $dbmodel = $hash->{MODEL}; my $dbmodel = $hash->{MODEL};
my $history = $hash->{HELPER}{TH}; my $history = $hash->{HELPER}{TH};
my $current = $hash->{HELPER}{TC}; my $current = $hash->{HELPER}{TC};
if ($opt eq 'dataRetrieval') {
$querytype = $a[1];
$device = $a[2];
$reading = $a[3];
$starttime = $a[4];
$endtime = $a[5];
$offset = $a[6];
$limit = $a[7];
$xaxis = 'TIMESTAMP';
if ($querytype eq 'last') {
$limit = '10' if(!$limit);
}
}
$starttime =~ s/_/ /;
$endtime =~ s/_/ /;
my ($sql, $jsonstring, $countsql, $hourstats, $daystats, $weekstats, $monthstats, $yearstats); my ($sql, $jsonstring, $countsql, $hourstats, $daystats, $weekstats, $monthstats, $yearstats);
if ($dbmodel eq "POSTGRESQL") { if ($dbmodel eq "POSTGRESQL") {
@ -6052,31 +6076,31 @@ sub _DbLog_createQuerySql {
### hour: ### hour:
$hourstats = "SELECT to_char(timestamp, 'YYYY-MM-DD HH24:00:00') AS TIMESTAMP, SUM(VALUE::float) AS SUM, "; $hourstats = "SELECT to_char(timestamp, 'YYYY-MM-DD HH24:00:00') AS TIMESTAMP, SUM(VALUE::float) AS SUM, ";
$hourstats .= "AVG(VALUE::float) AS AVG, MIN(VALUE::float) AS MIN, MAX(VALUE::float) AS MAX, "; $hourstats .= "AVG(VALUE::float) AS AVG, MIN(VALUE::float) AS MIN, MAX(VALUE::float) AS MAX, ";
$hourstats .= "COUNT(VALUE) AS COUNT FROM $history WHERE READING = '$yaxis' AND DEVICE = '$device' "; $hourstats .= "COUNT(VALUE) AS COUNT FROM $history WHERE READING = '$reading' AND DEVICE = '$device' ";
$hourstats .= "AND TIMESTAMP Between '$starttime' AND '$endtime' GROUP BY 1 ORDER BY 1;"; $hourstats .= "AND TIMESTAMP Between '$starttime' AND '$endtime' GROUP BY 1 ORDER BY 1;";
### day: ### day:
$daystats = "SELECT to_char(timestamp, 'YYYY-MM-DD 00:00:00') AS TIMESTAMP, SUM(VALUE::float) AS SUM, "; $daystats = "SELECT to_char(timestamp, 'YYYY-MM-DD 00:00:00') AS TIMESTAMP, SUM(VALUE::float) AS SUM, ";
$daystats .= "AVG(VALUE::float) AS AVG, MIN(VALUE::float) AS MIN, MAX(VALUE::float) AS MAX, "; $daystats .= "AVG(VALUE::float) AS AVG, MIN(VALUE::float) AS MIN, MAX(VALUE::float) AS MAX, ";
$daystats .= "COUNT(VALUE) AS COUNT FROM $history WHERE READING = '$yaxis' AND DEVICE = '$device' "; $daystats .= "COUNT(VALUE) AS COUNT FROM $history WHERE READING = '$reading' AND DEVICE = '$device' ";
$daystats .= "AND TIMESTAMP Between '$starttime' AND '$endtime' GROUP BY 1 ORDER BY 1;"; $daystats .= "AND TIMESTAMP Between '$starttime' AND '$endtime' GROUP BY 1 ORDER BY 1;";
### week: ### week:
$weekstats = "SELECT date_trunc('week',timestamp) AS TIMESTAMP, SUM(VALUE::float) AS SUM, "; $weekstats = "SELECT date_trunc('week',timestamp) AS TIMESTAMP, SUM(VALUE::float) AS SUM, ";
$weekstats .= "AVG(VALUE::float) AS AVG, MIN(VALUE::float) AS MIN, MAX(VALUE::float) AS MAX, "; $weekstats .= "AVG(VALUE::float) AS AVG, MIN(VALUE::float) AS MIN, MAX(VALUE::float) AS MAX, ";
$weekstats .= "COUNT(VALUE) AS COUNT FROM $history WHERE READING = '$yaxis' AND DEVICE = '$device' "; $weekstats .= "COUNT(VALUE) AS COUNT FROM $history WHERE READING = '$reading' AND DEVICE = '$device' ";
$weekstats .= "AND TIMESTAMP Between '$starttime' AND '$endtime' GROUP BY 1 ORDER BY 1;"; $weekstats .= "AND TIMESTAMP Between '$starttime' AND '$endtime' GROUP BY 1 ORDER BY 1;";
### month: ### month:
$monthstats = "SELECT to_char(timestamp, 'YYYY-MM-01 00:00:00') AS TIMESTAMP, SUM(VALUE::float) AS SUM, "; $monthstats = "SELECT to_char(timestamp, 'YYYY-MM-01 00:00:00') AS TIMESTAMP, SUM(VALUE::float) AS SUM, ";
$monthstats .= "AVG(VALUE::float) AS AVG, MIN(VALUE::float) AS MIN, MAX(VALUE::float) AS MAX, "; $monthstats .= "AVG(VALUE::float) AS AVG, MIN(VALUE::float) AS MIN, MAX(VALUE::float) AS MAX, ";
$monthstats .= "COUNT(VALUE) AS COUNT FROM $history WHERE READING = '$yaxis' AND DEVICE = '$device' "; $monthstats .= "COUNT(VALUE) AS COUNT FROM $history WHERE READING = '$reading' AND DEVICE = '$device' ";
$monthstats .= "AND TIMESTAMP Between '$starttime' AND '$endtime' GROUP BY 1 ORDER BY 1;"; $monthstats .= "AND TIMESTAMP Between '$starttime' AND '$endtime' GROUP BY 1 ORDER BY 1;";
### year: ### year:
$yearstats = "SELECT to_char(timestamp, 'YYYY-01-01 00:00:00') AS TIMESTAMP, SUM(VALUE::float) AS SUM, "; $yearstats = "SELECT to_char(timestamp, 'YYYY-01-01 00:00:00') AS TIMESTAMP, SUM(VALUE::float) AS SUM, ";
$yearstats .= "AVG(VALUE::float) AS AVG, MIN(VALUE::float) AS MIN, MAX(VALUE::float) AS MAX, "; $yearstats .= "AVG(VALUE::float) AS AVG, MIN(VALUE::float) AS MIN, MAX(VALUE::float) AS MAX, ";
$yearstats .= "COUNT(VALUE) AS COUNT FROM $history WHERE READING = '$yaxis' AND DEVICE = '$device' "; $yearstats .= "COUNT(VALUE) AS COUNT FROM $history WHERE READING = '$reading' AND DEVICE = '$device' ";
$yearstats .= "AND TIMESTAMP Between '$starttime' AND '$endtime' GROUP BY 1 ORDER BY 1;"; $yearstats .= "AND TIMESTAMP Between '$starttime' AND '$endtime' GROUP BY 1 ORDER BY 1;";
} }
elsif ($dbmodel eq "MYSQL") { elsif ($dbmodel eq "MYSQL") {
@ -6084,32 +6108,32 @@ sub _DbLog_createQuerySql {
### hour: ### hour:
$hourstats = "SELECT date_format(timestamp, '%Y-%m-%d %H:00:00') AS TIMESTAMP, SUM(CAST(VALUE AS DECIMAL(12,4))) AS SUM, "; $hourstats = "SELECT date_format(timestamp, '%Y-%m-%d %H:00:00') AS TIMESTAMP, SUM(CAST(VALUE AS DECIMAL(12,4))) AS SUM, ";
$hourstats .= "AVG(CAST(VALUE AS DECIMAL(12,4))) AS AVG, MIN(CAST(VALUE AS DECIMAL(12,4))) AS MIN, "; $hourstats .= "AVG(CAST(VALUE AS DECIMAL(12,4))) AS AVG, MIN(CAST(VALUE AS DECIMAL(12,4))) AS MIN, ";
$hourstats .= "MAX(CAST(VALUE AS DECIMAL(12,4))) AS MAX, COUNT(VALUE) AS COUNT FROM $history WHERE READING = '$yaxis' "; $hourstats .= "MAX(CAST(VALUE AS DECIMAL(12,4))) AS MAX, COUNT(VALUE) AS COUNT FROM $history WHERE READING = '$reading' ";
$hourstats .= "AND DEVICE = '$device' AND TIMESTAMP Between '$starttime' AND '$endtime' GROUP BY 1 ORDER BY 1;"; $hourstats .= "AND DEVICE = '$device' AND TIMESTAMP Between '$starttime' AND '$endtime' GROUP BY 1 ORDER BY 1;";
### day: ### day:
$daystats = "SELECT date_format(timestamp, '%Y-%m-%d 00:00:00') AS TIMESTAMP, SUM(CAST(VALUE AS DECIMAL(12,4))) AS SUM, "; $daystats = "SELECT date_format(timestamp, '%Y-%m-%d 00:00:00') AS TIMESTAMP, SUM(CAST(VALUE AS DECIMAL(12,4))) AS SUM, ";
$daystats .= "AVG(CAST(VALUE AS DECIMAL(12,4))) AS AVG, MIN(CAST(VALUE AS DECIMAL(12,4))) AS MIN, "; $daystats .= "AVG(CAST(VALUE AS DECIMAL(12,4))) AS AVG, MIN(CAST(VALUE AS DECIMAL(12,4))) AS MIN, ";
$daystats .= "MAX(CAST(VALUE AS DECIMAL(12,4))) AS MAX, COUNT(VALUE) AS COUNT FROM $history WHERE READING = '$yaxis' "; $daystats .= "MAX(CAST(VALUE AS DECIMAL(12,4))) AS MAX, COUNT(VALUE) AS COUNT FROM $history WHERE READING = '$reading' ";
$daystats .= "AND DEVICE = '$device' AND TIMESTAMP Between '$starttime' AND '$endtime' GROUP BY 1 ORDER BY 1;"; $daystats .= "AND DEVICE = '$device' AND TIMESTAMP Between '$starttime' AND '$endtime' GROUP BY 1 ORDER BY 1;";
### week: ### week:
$weekstats = "SELECT date_format(timestamp, '%Y-%m-%d 00:00:00') AS TIMESTAMP, SUM(CAST(VALUE AS DECIMAL(12,4))) AS SUM, "; $weekstats = "SELECT date_format(timestamp, '%Y-%m-%d 00:00:00') AS TIMESTAMP, SUM(CAST(VALUE AS DECIMAL(12,4))) AS SUM, ";
$weekstats .= "AVG(CAST(VALUE AS DECIMAL(12,4))) AS AVG, MIN(CAST(VALUE AS DECIMAL(12,4))) AS MIN, "; $weekstats .= "AVG(CAST(VALUE AS DECIMAL(12,4))) AS AVG, MIN(CAST(VALUE AS DECIMAL(12,4))) AS MIN, ";
$weekstats .= "MAX(CAST(VALUE AS DECIMAL(12,4))) AS MAX, COUNT(VALUE) AS COUNT FROM $history WHERE READING = '$yaxis' "; $weekstats .= "MAX(CAST(VALUE AS DECIMAL(12,4))) AS MAX, COUNT(VALUE) AS COUNT FROM $history WHERE READING = '$reading' ";
$weekstats .= "AND DEVICE = '$device' AND TIMESTAMP Between '$starttime' AND '$endtime' "; $weekstats .= "AND DEVICE = '$device' AND TIMESTAMP Between '$starttime' AND '$endtime' ";
$weekstats .= "GROUP BY date_format(timestamp, '%Y-%u 00:00:00') ORDER BY 1;"; $weekstats .= "GROUP BY date_format(timestamp, '%Y-%u 00:00:00') ORDER BY 1;";
### month: ### month:
$monthstats = "SELECT date_format(timestamp, '%Y-%m-01 00:00:00') AS TIMESTAMP, SUM(CAST(VALUE AS DECIMAL(12,4))) AS SUM, "; $monthstats = "SELECT date_format(timestamp, '%Y-%m-01 00:00:00') AS TIMESTAMP, SUM(CAST(VALUE AS DECIMAL(12,4))) AS SUM, ";
$monthstats .= "AVG(CAST(VALUE AS DECIMAL(12,4))) AS AVG, MIN(CAST(VALUE AS DECIMAL(12,4))) AS MIN, "; $monthstats .= "AVG(CAST(VALUE AS DECIMAL(12,4))) AS AVG, MIN(CAST(VALUE AS DECIMAL(12,4))) AS MIN, ";
$monthstats .= "MAX(CAST(VALUE AS DECIMAL(12,4))) AS MAX, COUNT(VALUE) AS COUNT FROM $history WHERE READING = '$yaxis' "; $monthstats .= "MAX(CAST(VALUE AS DECIMAL(12,4))) AS MAX, COUNT(VALUE) AS COUNT FROM $history WHERE READING = '$reading' ";
$monthstats .= "AND DEVICE = '$device' AND TIMESTAMP Between '$starttime' AND '$endtime' GROUP BY 1 ORDER BY 1;"; $monthstats .= "AND DEVICE = '$device' AND TIMESTAMP Between '$starttime' AND '$endtime' GROUP BY 1 ORDER BY 1;";
### year: ### year:
$yearstats = "SELECT date_format(timestamp, '%Y-01-01 00:00:00') AS TIMESTAMP, SUM(CAST(VALUE AS DECIMAL(12,4))) AS SUM, "; $yearstats = "SELECT date_format(timestamp, '%Y-01-01 00:00:00') AS TIMESTAMP, SUM(CAST(VALUE AS DECIMAL(12,4))) AS SUM, ";
$yearstats .= "AVG(CAST(VALUE AS DECIMAL(12,4))) AS AVG, MIN(CAST(VALUE AS DECIMAL(12,4))) AS MIN, "; $yearstats .= "AVG(CAST(VALUE AS DECIMAL(12,4))) AS AVG, MIN(CAST(VALUE AS DECIMAL(12,4))) AS MIN, ";
$yearstats .= "MAX(CAST(VALUE AS DECIMAL(12,4))) AS MAX, COUNT(VALUE) AS COUNT FROM $history WHERE READING = '$yaxis' "; $yearstats .= "MAX(CAST(VALUE AS DECIMAL(12,4))) AS MAX, COUNT(VALUE) AS COUNT FROM $history WHERE READING = '$reading' ";
$yearstats .= "AND DEVICE = '$device' AND TIMESTAMP Between '$starttime' AND '$endtime' GROUP BY 1 ORDER BY 1;"; $yearstats .= "AND DEVICE = '$device' AND TIMESTAMP Between '$starttime' AND '$endtime' GROUP BY 1 ORDER BY 1;";
} }
elsif ($dbmodel eq "SQLITE") { elsif ($dbmodel eq "SQLITE") {
@ -6117,31 +6141,31 @@ sub _DbLog_createQuerySql {
### hour: ### hour:
$hourstats = "SELECT TIMESTAMP, SUM(CAST(VALUE AS FLOAT)) AS SUM, AVG(CAST(VALUE AS FLOAT)) AS AVG, "; $hourstats = "SELECT TIMESTAMP, SUM(CAST(VALUE AS FLOAT)) AS SUM, AVG(CAST(VALUE AS FLOAT)) AS AVG, ";
$hourstats .= "MIN(CAST(VALUE AS FLOAT)) AS MIN, MAX(CAST(VALUE AS FLOAT)) AS MAX, COUNT(VALUE) AS COUNT "; $hourstats .= "MIN(CAST(VALUE AS FLOAT)) AS MIN, MAX(CAST(VALUE AS FLOAT)) AS MAX, COUNT(VALUE) AS COUNT ";
$hourstats .= "FROM $history WHERE READING = '$yaxis' AND DEVICE = '$device' "; $hourstats .= "FROM $history WHERE READING = '$reading' AND DEVICE = '$device' ";
$hourstats .= "AND TIMESTAMP Between '$starttime' AND '$endtime' GROUP BY strftime('%Y-%m-%d %H:00:00', TIMESTAMP);"; $hourstats .= "AND TIMESTAMP Between '$starttime' AND '$endtime' GROUP BY strftime('%Y-%m-%d %H:00:00', TIMESTAMP);";
### day: ### day:
$daystats = "SELECT TIMESTAMP, SUM(CAST(VALUE AS FLOAT)) AS SUM, AVG(CAST(VALUE AS FLOAT)) AS AVG, "; $daystats = "SELECT TIMESTAMP, SUM(CAST(VALUE AS FLOAT)) AS SUM, AVG(CAST(VALUE AS FLOAT)) AS AVG, ";
$daystats .= "MIN(CAST(VALUE AS FLOAT)) AS MIN, MAX(CAST(VALUE AS FLOAT)) AS MAX, COUNT(VALUE) AS COUNT "; $daystats .= "MIN(CAST(VALUE AS FLOAT)) AS MIN, MAX(CAST(VALUE AS FLOAT)) AS MAX, COUNT(VALUE) AS COUNT ";
$daystats .= "FROM $history WHERE READING = '$yaxis' AND DEVICE = '$device' "; $daystats .= "FROM $history WHERE READING = '$reading' AND DEVICE = '$device' ";
$daystats .= "AND TIMESTAMP Between '$starttime' AND '$endtime' GROUP BY strftime('%Y-%m-%d 00:00:00', TIMESTAMP);"; $daystats .= "AND TIMESTAMP Between '$starttime' AND '$endtime' GROUP BY strftime('%Y-%m-%d 00:00:00', TIMESTAMP);";
### week: ### week:
$weekstats = "SELECT TIMESTAMP, SUM(CAST(VALUE AS FLOAT)) AS SUM, AVG(CAST(VALUE AS FLOAT)) AS AVG, "; $weekstats = "SELECT TIMESTAMP, SUM(CAST(VALUE AS FLOAT)) AS SUM, AVG(CAST(VALUE AS FLOAT)) AS AVG, ";
$weekstats .= "MIN(CAST(VALUE AS FLOAT)) AS MIN, MAX(CAST(VALUE AS FLOAT)) AS MAX, COUNT(VALUE) AS COUNT "; $weekstats .= "MIN(CAST(VALUE AS FLOAT)) AS MIN, MAX(CAST(VALUE AS FLOAT)) AS MAX, COUNT(VALUE) AS COUNT ";
$weekstats .= "FROM $history WHERE READING = '$yaxis' AND DEVICE = '$device' "; $weekstats .= "FROM $history WHERE READING = '$reading' AND DEVICE = '$device' ";
$weekstats .= "AND TIMESTAMP Between '$starttime' AND '$endtime' GROUP BY strftime('%Y-%W 00:00:00', TIMESTAMP);"; $weekstats .= "AND TIMESTAMP Between '$starttime' AND '$endtime' GROUP BY strftime('%Y-%W 00:00:00', TIMESTAMP);";
### month: ### month:
$monthstats = "SELECT TIMESTAMP, SUM(CAST(VALUE AS FLOAT)) AS SUM, AVG(CAST(VALUE AS FLOAT)) AS AVG, "; $monthstats = "SELECT TIMESTAMP, SUM(CAST(VALUE AS FLOAT)) AS SUM, AVG(CAST(VALUE AS FLOAT)) AS AVG, ";
$monthstats .= "MIN(CAST(VALUE AS FLOAT)) AS MIN, MAX(CAST(VALUE AS FLOAT)) AS MAX, COUNT(VALUE) AS COUNT "; $monthstats .= "MIN(CAST(VALUE AS FLOAT)) AS MIN, MAX(CAST(VALUE AS FLOAT)) AS MAX, COUNT(VALUE) AS COUNT ";
$monthstats .= "FROM $history WHERE READING = '$yaxis' AND DEVICE = '$device' "; $monthstats .= "FROM $history WHERE READING = '$reading' AND DEVICE = '$device' ";
$monthstats .= "AND TIMESTAMP Between '$starttime' AND '$endtime' GROUP BY strftime('%Y-%m 00:00:00', TIMESTAMP);"; $monthstats .= "AND TIMESTAMP Between '$starttime' AND '$endtime' GROUP BY strftime('%Y-%m 00:00:00', TIMESTAMP);";
### year: ### year:
$yearstats = "SELECT TIMESTAMP, SUM(CAST(VALUE AS FLOAT)) AS SUM, AVG(CAST(VALUE AS FLOAT)) AS AVG, "; $yearstats = "SELECT TIMESTAMP, SUM(CAST(VALUE AS FLOAT)) AS SUM, AVG(CAST(VALUE AS FLOAT)) AS AVG, ";
$yearstats .= "MIN(CAST(VALUE AS FLOAT)) AS MIN, MAX(CAST(VALUE AS FLOAT)) AS MAX, COUNT(VALUE) AS COUNT "; $yearstats .= "MIN(CAST(VALUE AS FLOAT)) AS MIN, MAX(CAST(VALUE AS FLOAT)) AS MAX, COUNT(VALUE) AS COUNT ";
$yearstats .= "FROM $history WHERE READING = '$yaxis' AND DEVICE = '$device' "; $yearstats .= "FROM $history WHERE READING = '$reading' AND DEVICE = '$device' ";
$yearstats .= "AND TIMESTAMP Between '$starttime' AND '$endtime' GROUP BY strftime('%Y 00:00:00', TIMESTAMP);"; $yearstats .= "AND TIMESTAMP Between '$starttime' AND '$endtime' GROUP BY strftime('%Y 00:00:00', TIMESTAMP);";
} }
@ -6149,66 +6173,77 @@ sub _DbLog_createQuerySql {
$sql = "errordb"; $sql = "errordb";
} }
if($userquery eq "getreadings") { if($querytype eq 'getreadings') {
$sql = "SELECT distinct(reading) FROM $history WHERE device = '".$device."'"; $sql = "SELECT distinct(reading) FROM $history WHERE device = '$device'";
} }
elsif ($userquery eq "getdevices") { elsif ($querytype eq 'getdevices') {
$sql = "SELECT distinct(device) FROM $history"; $sql = "SELECT distinct(device) FROM $history";
} }
elsif ($userquery eq "timerange") { elsif ($querytype eq 'last') {
$sql = "SELECT ".$xaxis.", VALUE FROM $history WHERE READING = '$yaxis' AND DEVICE = '$device' AND TIMESTAMP Between '$starttime' AND '$endtime' ORDER BY TIMESTAMP;"; $sql = "SELECT TIMESTAMP, DEVICE, TYPE, EVENT, READING, VALUE, UNIT from $history ORDER BY TIMESTAMP DESC LIMIT $limit";
} }
elsif ($userquery eq "hourstats") { elsif ($querytype eq 'timerange') {
$sql = "SELECT ".$xaxis.", VALUE FROM $history WHERE READING = '$reading' AND DEVICE = '$device' AND TIMESTAMP Between '$starttime' AND '$endtime' ORDER BY TIMESTAMP;";
}
elsif ($querytype eq 'hourstats') {
$sql = $hourstats; $sql = $hourstats;
} }
elsif ($userquery eq "daystats") { elsif ($querytype eq 'daystats') {
$sql = $daystats; $sql = $daystats;
} }
elsif ($userquery eq "weekstats") { elsif ($querytype eq 'weekstats') {
$sql = $weekstats; $sql = $weekstats;
} }
elsif ($userquery eq "monthstats") { elsif ($querytype eq 'monthstats') {
$sql = $monthstats; $sql = $monthstats;
} }
elsif ($userquery eq "yearstats") { elsif ($querytype eq 'yearstats') {
$sql = $yearstats; $sql = $yearstats;
} }
elsif ($userquery eq "savechart") { elsif ($querytype eq 'savechart') {
$sql = "INSERT INTO frontend (TYPE, NAME, VALUE) VALUES ('savedchart', '$savename', '$jsonChartConfig')"; $sql = "INSERT INTO frontend (TYPE, NAME, VALUE) VALUES ('savedchart', '$savename', '$jsonChartConfig')";
} }
elsif ($userquery eq "renamechart") { elsif ($querytype eq 'renamechart') {
$sql = "UPDATE frontend SET NAME = '$savename' WHERE ID = '$jsonChartConfig'"; $sql = "UPDATE frontend SET NAME = '$savename' WHERE ID = '$jsonChartConfig'";
} }
elsif ($userquery eq "deletechart") { elsif ($querytype eq 'deletechart') {
$sql = "DELETE FROM frontend WHERE TYPE = 'savedchart' AND ID = '".$savename."'"; $sql = "DELETE FROM frontend WHERE TYPE = 'savedchart' AND ID = '".$savename."'";
} }
elsif ($userquery eq "updatechart") { elsif ($querytype eq 'updatechart') {
$sql = "UPDATE frontend SET VALUE = '$jsonChartConfig' WHERE ID = '".$savename."'"; $sql = "UPDATE frontend SET VALUE = '$jsonChartConfig' WHERE ID = '".$savename."'";
} }
elsif ($userquery eq "getcharts") { elsif ($querytype eq 'getcharts') {
$sql = "SELECT * FROM frontend WHERE TYPE = 'savedchart'"; $sql = "SELECT * FROM frontend WHERE TYPE = 'savedchart'";
} }
elsif ($userquery eq "getTableData") { elsif ($querytype eq 'getTableData') {
if ($device ne '""' && $yaxis ne '""') { if ($device ne '""' && $reading ne '""') {
$sql = "SELECT * FROM $history WHERE READING = '$yaxis' AND DEVICE = '$device' "; $sql = "SELECT * FROM $history WHERE READING = '$reading' AND DEVICE = '$device' ";
$sql .= "AND TIMESTAMP Between '$starttime' AND '$endtime'"; $sql .= "AND TIMESTAMP Between '$starttime' AND '$endtime'";
$sql .= " LIMIT '$paginglimit' OFFSET '$pagingstart'"; $sql .= " LIMIT '$limit' OFFSET '$offset'";
$countsql = "SELECT count(*) FROM $history WHERE READING = '$yaxis' AND DEVICE = '$device' "; $countsql = "SELECT count(*) FROM $history WHERE READING = '$reading' AND DEVICE = '$device' ";
$countsql .= "AND TIMESTAMP Between '$starttime' AND '$endtime'"; $countsql .= "AND TIMESTAMP Between '$starttime' AND '$endtime'";
} }
elsif ($device ne '""' && $yaxis eq '""') { elsif ($device ne '""' && $reading eq '""') {
$sql = "SELECT * FROM $history WHERE DEVICE = '$device' "; $sql = "SELECT * FROM $history WHERE DEVICE = '$device' ";
$sql .= "AND TIMESTAMP Between '$starttime' AND '$endtime'"; $sql .= "AND TIMESTAMP Between '$starttime' AND '$endtime'";
$sql .= " LIMIT '$paginglimit' OFFSET '$pagingstart'"; $sql .= " LIMIT '$limit' OFFSET '$offset'";
$countsql = "SELECT count(*) FROM $history WHERE DEVICE = '$device' "; $countsql = "SELECT count(*) FROM $history WHERE DEVICE = '$device' ";
$countsql .= "AND TIMESTAMP Between '$starttime' AND '$endtime'"; $countsql .= "AND TIMESTAMP Between '$starttime' AND '$endtime'";
} }
elsif ($device eq '""' && $reading ne '""') {
$sql = "SELECT * FROM $history WHERE READING = '$reading' ";
$sql .= "AND TIMESTAMP Between '$starttime' AND '$endtime'";
$sql .= " LIMIT '$limit' OFFSET '$offset'";
$countsql = "SELECT count(*) FROM $history WHERE READING = '$reading' ";
$countsql .= "AND TIMESTAMP Between '$starttime' AND '$endtime'";
}
else { else {
$sql = "SELECT * FROM $history"; $sql = "SELECT * FROM $history";
$sql .= " WHERE TIMESTAMP Between '$starttime' AND '$endtime'"; $sql .= " WHERE TIMESTAMP Between '$starttime' AND '$endtime'";
$sql .= " LIMIT '$paginglimit' OFFSET '$pagingstart'"; $sql .= " LIMIT '$limit' OFFSET '$offset'";
$countsql = "SELECT count(*) FROM $history"; $countsql = "SELECT count(*) FROM $history";
$countsql .= " WHERE TIMESTAMP Between '$starttime' AND '$endtime'"; $countsql .= " WHERE TIMESTAMP Between '$starttime' AND '$endtime'";
@ -9010,7 +9045,8 @@ return;
<ul> <ul>
<a id="DbLog-get-ReadingsMaxVal" data-pattern="ReadingsMaxVal.*"></a> <a id="DbLog-get-ReadingsMaxVal" data-pattern="ReadingsMaxVal.*"></a>
<li><b>get &lt;name&gt; ReadingsMaxVal[Timestamp] &lt;Device&gt; &lt;Reading&gt; &lt;default&gt; </b> <br><br> <li><b>get &lt;name&gt; ReadingsMaxVal[Timestamp] &lt;Device&gt; &lt;Reading&gt; &lt;default&gt; </b>
<br>
<ul> <ul>
Determines the record with the largest value of the specified Device / Reading combination from the history table. <br> Determines the record with the largest value of the specified Device / Reading combination from the history table. <br>
Only the value or the combination of value and timestamp is returned as string Only the value or the combination of value and timestamp is returned as string
@ -9030,7 +9066,8 @@ return;
<ul> <ul>
<a id="DbLog-get-ReadingsMinVal" data-pattern="ReadingsMinVal.*"></a> <a id="DbLog-get-ReadingsMinVal" data-pattern="ReadingsMinVal.*"></a>
<li><b>get &lt;name&gt; ReadingsMinVal[Timestamp] &lt;Device&gt; &lt;Reading&gt; &lt;default&gt; </b> <br><br> <li><b>get &lt;name&gt; ReadingsMinVal[Timestamp] &lt;Device&gt; &lt;Reading&gt; &lt;default&gt; </b>
<br>
<ul> <ul>
Determines the record with the smallest value of the specified device / reading combination from the history table. <br> Determines the record with the smallest value of the specified device / reading combination from the history table. <br>
Only the value or the combination of value and timestamp is returned as string Only the value or the combination of value and timestamp is returned as string
@ -9049,7 +9086,8 @@ return;
<ul> <ul>
<a id="DbLog-get-ReadingsAvgVal"></a> <a id="DbLog-get-ReadingsAvgVal"></a>
<li><b>get &lt;name&gt; ReadingsAvgVal &lt;Device&gt; &lt;Reading&gt; &lt;default&gt; </b> <br><br> <li><b>get &lt;name&gt; ReadingsAvgVal &lt;Device&gt; &lt;Reading&gt; &lt;default&gt; </b>
<br>
<ul> <ul>
Determines the average value of the specified Device / Reading combination from the history table. <br> Determines the average value of the specified Device / Reading combination from the history table. <br>
The simple arithmetic average value is returned. <br> The simple arithmetic average value is returned. <br>
@ -9067,7 +9105,8 @@ return;
<ul> <ul>
<a id="DbLog-get-ReadingsVal" data-pattern="ReadingsVal.*"></a> <a id="DbLog-get-ReadingsVal" data-pattern="ReadingsVal.*"></a>
<li><b>get &lt;name&gt; ReadingsVal[Timestamp] &lt;Device&gt; &lt;Reading&gt; &lt;default&gt; </b> <br><br> <li><b>get &lt;name&gt; ReadingsVal[Timestamp] &lt;Device&gt; &lt;Reading&gt; &lt;default&gt; </b>
<br>
<ul> <ul>
Reads the last (newest) record stored in the history table of the specified Device / Reading Reads the last (newest) record stored in the history table of the specified Device / Reading
combination. <br> combination. <br>
@ -9087,7 +9126,8 @@ return;
<ul> <ul>
<a id="DbLog-get-ReadingsTimestamp"></a> <a id="DbLog-get-ReadingsTimestamp"></a>
<li><b>get &lt;name&gt; ReadingsTimestamp &lt;Device&gt; &lt;Reading&gt; &lt;default&gt; </b> <br><br> <li><b>get &lt;name&gt; ReadingsTimestamp &lt;Device&gt; &lt;Reading&gt; &lt;default&gt; </b>
<br>
<ul> <ul>
Reads the timestamp of the last (newest) record stored in the history table of the specified Reads the timestamp of the last (newest) record stored in the history table of the specified
Device/Reading combination and returns this value. <br> Device/Reading combination and returns this value. <br>
@ -9102,6 +9142,80 @@ return;
</ul> </ul>
</li> </li>
<br> <br>
<ul>
<a id="DbLog-get-dataRetrieval"></a>
<li><b>get &lt;name&gt; dataRetrieval &lt;querytype&gt; &lt;device&gt; &lt;reading&gt; &lt;from&gt; &lt;to&gt; &lt;offset&gt; &lt;limit&gt; </b>
<br>
<ul>
Reads data from the database table history and returns the results formatted as JSON. <br>
The query method or the desired query result is determined by the specified &lt;querytype&gt;. <br>
Each &lt;querytype&gt; may require additional parameters according to the following table. Parameters not entered
must always be entered as "" if another parameter is entered afterwards.
<br>
<br>
<ul>
<table>
<colgroup> <col width=15%> <col width=85%> </colgroup>
<tr><td><b>getdevices</b> </td><td>Determines all devices stored in the database. </td></tr>
<tr><td><b>getreadings</b> </td><td>Determines all readings stored in the database for a specific device. </td></tr>
<tr><td> </td><td>required parameters: &lt;device&gt; </td></tr>
<tr><td><b>timerange</b> </td><td>Determines the stored data sets of the specified Device / Reading combination. </td></tr>
<tr><td> </td><td>required parameters: &lt;device&gt;, &lt;reading&gt;, &lt;from&gt;, &lt;to&gt; </td></tr>
<tr><td><b>getTableData</b> </td><td>Determines the stored records of a certain period. </td></tr>
<tr><td> </td><td>The number of selected records is returned as the key "totalcount". </td></tr>
<tr><td> </td><td>required parameters: &lt;from&gt;, &lt;to&gt;, &lt;offset&gt;, &lt;limit&gt; </td></tr>
<tr><td><b>last</b> </td><td>Lists the last 10 saved events. </td></tr>
<tr><td> </td><td>possible parameters: &lt;limit&gt; (overwrites the default 10) </td></tr>
<tr><td><b>hourstats</b> </td><td>Calculates the statistics SUM, AVG, MIN, MAX, COUNT for one hour. </td></tr>
<tr><td> </td><td>required parameters: &lt;device&gt;, &lt;reading&gt;, &lt;from&gt;, &lt;to&gt; </td></tr>
<tr><td><b>daystats</b> </td><td>Calculates the statistics SUM, AVG, MIN, MAX, COUNT for one day. </td></tr>
<tr><td> </td><td>required parameters: &lt;device&gt;, &lt;reading&gt;, &lt;from&gt;, &lt;to&gt; </td></tr>
<tr><td><b>weekstats</b> </td><td>Calculates the statistics SUM, AVG, MIN, MAX, COUNT for one week. </td></tr>
<tr><td> </td><td>required parameters: &lt;device&gt;, &lt;reading&gt;, &lt;from&gt;, &lt;to&gt; </td></tr>
<tr><td><b>monthstats</b> </td><td>Calculates the statistics SUM, AVG, MIN, MAX, COUNT for one month. </td></tr>
<tr><td> </td><td>required parameters: &lt;device&gt;, &lt;reading&gt;, &lt;from&gt;, &lt;to&gt; </td></tr>
<tr><td><b>yearstats</b> </td><td>Calculates the statistics SUM, AVG, MIN, MAX, COUNT for one year. </td></tr>
<tr><td> </td><td>required parameters: &lt;device&gt;, &lt;reading&gt;, &lt;from&gt;, &lt;to&gt; </td></tr>
</table>
</ul>
<br>
<b>Note:</b> <br>
This database retrieval works blocking and influences FHEM if the database does not respond or not responds
sufficiently fast. For non-blocking database queries is referred to the module DbRep.
<br>
<br>
<b>Examples:</b>
<ul>
<li><code>get LogSQLITE3 dataRetrieval getdevices </code>
</li>
<li><code>get LogSQLITE3 dataRetrieval getreadings MySTP_5000 </code>
</li>
<li><code>get LogSQLITE3 dataRetrieval last "" "" "" "" "" 50 </code>
</li>
<li><code>get LogSQLITE3 dataRetrieval timerange MySTP_5000 etotal 2023-01-01_00:00:00 2023-01-25_00:00:00 </code>
</li>
<li><code>get LogSQLITE3 dataRetrieval getTableData MySTP_5000 "" 2023-01-01_00:00:00 2023-01-25_00:00:00 0 100 </code>
</li>
<li><code>get LogSQLITE3 dataRetrieval getTableData "" etotal 2023-01-01_00:00:00 2023-01-25_00:00:00 0 100 </code>
</li>
<li><code>get LogSQLITE3 dataRetrieval hourstats MySTP_5000 etotal 2023-01-01_00:00:00 2023-01-25_00:00:00 </code>
</li>
</ul>
</ul>
</ul>
</li>
<br>
<br> <br>
<b>Get</b> for the use of SVG plots <b>Get</b> for the use of SVG plots
@ -9328,8 +9442,7 @@ return;
<br> <br>
<li>&lt;xaxis&gt;<br> <li>&lt;xaxis&gt;<br>
A string which represents the xaxis. It must be a valid field name of the history table, like e.g. A string which represents the xaxis. It must be a valid field name, typically 'TIMESTAMP', of the history table.
TIMESTAMP.
</li> </li>
<br> <br>
@ -10803,7 +10916,9 @@ attr SMA_Energymeter DbLogValueFn
<ul> <ul>
<a id="DbLog-get-ReadingsMaxVal" data-pattern="ReadingsMaxVal.*"></a> <a id="DbLog-get-ReadingsMaxVal" data-pattern="ReadingsMaxVal.*"></a>
<li><b>get &lt;name&gt; ReadingsMaxVal[Timestamp] &lt;Device&gt; &lt;Reading&gt; &lt;default&gt; </b> <br><br> <li><b>get &lt;name&gt; ReadingsMaxVal[Timestamp] &lt;Device&gt; &lt;Reading&gt; &lt;default&gt; </b>
<br>
<ul> <ul>
Ermittelt den Datensatz mit dem größten Wert der angegebenen Device / Reading Kombination aus der history Tabelle. <br> Ermittelt den Datensatz mit dem größten Wert der angegebenen Device / Reading Kombination aus der history Tabelle. <br>
Zurück gegeben wird nur der Wert oder die Kombination aus Wert und Timestamp als String Zurück gegeben wird nur der Wert oder die Kombination aus Wert und Timestamp als String
@ -10823,7 +10938,9 @@ attr SMA_Energymeter DbLogValueFn
<ul> <ul>
<a id="DbLog-get-ReadingsMinVal" data-pattern="ReadingsMinVal.*"></a> <a id="DbLog-get-ReadingsMinVal" data-pattern="ReadingsMinVal.*"></a>
<li><b>get &lt;name&gt; ReadingsMinVal[Timestamp] &lt;Device&gt; &lt;Reading&gt; &lt;default&gt; </b> <br><br> <li><b>get &lt;name&gt; ReadingsMinVal[Timestamp] &lt;Device&gt; &lt;Reading&gt; &lt;default&gt; </b>
<br>
<ul> <ul>
Ermittelt den Datensatz mit dem kleinsten Wert der angegebenen Device / Reading Kombination aus der history Tabelle. <br> Ermittelt den Datensatz mit dem kleinsten Wert der angegebenen Device / Reading Kombination aus der history Tabelle. <br>
Zurück gegeben wird nur der Wert oder die Kombination aus Wert und Timestamp als String Zurück gegeben wird nur der Wert oder die Kombination aus Wert und Timestamp als String
@ -10843,7 +10960,9 @@ attr SMA_Energymeter DbLogValueFn
<ul> <ul>
<a id="DbLog-get-ReadingsAvgVal"></a> <a id="DbLog-get-ReadingsAvgVal"></a>
<li><b>get &lt;name&gt; ReadingsAvgVal &lt;Device&gt; &lt;Reading&gt; &lt;default&gt; </b> <br><br> <li><b>get &lt;name&gt; ReadingsAvgVal &lt;Device&gt; &lt;Reading&gt; &lt;default&gt; </b>
<br>
<ul> <ul>
Ermittelt den Durchschnittswert der angegebenen Device / Reading Kombination aus der history Tabelle. <br> Ermittelt den Durchschnittswert der angegebenen Device / Reading Kombination aus der history Tabelle. <br>
Zurück gegeben wird der einfache arithmetische Durchschnittswert. <br> Zurück gegeben wird der einfache arithmetische Durchschnittswert. <br>
@ -10862,7 +10981,9 @@ attr SMA_Energymeter DbLogValueFn
<ul> <ul>
<a id="DbLog-get-ReadingsVal" data-pattern="ReadingsVal.*"></a> <a id="DbLog-get-ReadingsVal" data-pattern="ReadingsVal.*"></a>
<li><b>get &lt;name&gt; ReadingsVal[Timestamp] &lt;Device&gt; &lt;Reading&gt; &lt;default&gt; </b> <br><br> <li><b>get &lt;name&gt; ReadingsVal[Timestamp] &lt;Device&gt; &lt;Reading&gt; &lt;default&gt; </b>
<br>
<ul> <ul>
Liest den letzten (neuesten) in der history Tabelle gespeicherten Datensatz der angegebenen Device / Reading Liest den letzten (neuesten) in der history Tabelle gespeicherten Datensatz der angegebenen Device / Reading
Kombination. <br> Kombination. <br>
@ -10883,7 +11004,9 @@ attr SMA_Energymeter DbLogValueFn
<ul> <ul>
<a id="DbLog-get-ReadingsTimestamp"></a> <a id="DbLog-get-ReadingsTimestamp"></a>
<li><b>get &lt;name&gt; ReadingsTimestamp &lt;Device&gt; &lt;Reading&gt; &lt;default&gt; </b> <br><br> <li><b>get &lt;name&gt; ReadingsTimestamp &lt;Device&gt; &lt;Reading&gt; &lt;default&gt; </b>
<br>
<ul> <ul>
Liest den Zeitstempel des letzten (neuesten) in der history Tabelle gespeicherten Datensatzes der angegebenen Liest den Zeitstempel des letzten (neuesten) in der history Tabelle gespeicherten Datensatzes der angegebenen
Device/Reading Kombination und gibt diesen Wert zurück. <br> Device/Reading Kombination und gibt diesen Wert zurück. <br>
@ -10899,6 +11022,81 @@ attr SMA_Energymeter DbLogValueFn
</ul> </ul>
</li> </li>
<br> <br>
<ul>
<a id="DbLog-get-dataRetrieval"></a>
<li><b>get &lt;name&gt; dataRetrieval &lt;querytype&gt; &lt;device&gt; &lt;reading&gt; &lt;from&gt; &lt;to&gt; &lt;offset&gt; &lt;limit&gt; </b>
<br>
<ul>
Liest Daten aus der Datenbank Tabelle history und gibt die Ergebnisse als JSON formatiert zurück. <br>
Die Abfragemethode bzw. das gewünschte Abfrageergebnis wird durch den angegebenen &lt;querytype&gt; bestimmt. <br>
Jeder &lt;querytype&gt; verlangt evtl. weitere Parameter gemäß der folgenden Tabelle. Nicht eingegebene Parameter sind
immer als "" anzugeben sofern danach noch ein weiterer Parameter eingegeben wird.
<br>
<br>
<ul>
<table>
<colgroup> <col width=15%> <col width=85%> </colgroup>
<tr><td><b>getdevices</b> </td><td>Ermittelt alle in der Datenbank gespeicherten Devices. </td></tr>
<tr><td><b>getreadings</b> </td><td>Ermittelt alle in der Datenbank gespeicherten Readings für ein bestimmtes Device. </td></tr>
<tr><td> </td><td>benötigte Parameter: &lt;device&gt; </td></tr>
<tr><td><b>timerange</b> </td><td>Ermittelt die gespeicherten Datensätze der angegebenen Device / Reading Kombination. </td></tr>
<tr><td> </td><td>benötigte Parameter: &lt;device&gt;, &lt;reading&gt;, &lt;from&gt;, &lt;to&gt; </td></tr>
<tr><td><b>getTableData</b> </td><td>Ermittelt die gespeicherten Datensätze eines bestimmten Zeitraumes. </td></tr>
<tr><td> </td><td>Die Anzahl der selektierten Datensätze wird als Schlüssel "totalcount" zurückgegeben. </td></tr>
<tr><td> </td><td>benötigte Parameter: &lt;from&gt;, &lt;to&gt;, &lt;offset&gt;, &lt;limit&gt; </td></tr>
<tr><td><b>last</b> </td><td>Listet die letzten 10 gespeicherten Events auf. </td></tr>
<tr><td> </td><td>mögliche Parameter: &lt;limit&gt; (überschreibt den Standard 10) </td></tr>
<tr><td><b>hourstats</b> </td><td>Errechnet die Statistiken SUM, AVG, MIN, MAX, COUNT für eine Stunde. </td></tr>
<tr><td> </td><td>benötigte Parameter: &lt;device&gt;, &lt;reading&gt;, &lt;from&gt;, &lt;to&gt; </td></tr>
<tr><td><b>daystats</b> </td><td>Errechnet die Statistiken SUM, AVG, MIN, MAX, COUNT für einen Tag. </td></tr>
<tr><td> </td><td>benötigte Parameter: &lt;device&gt;, &lt;reading&gt;, &lt;from&gt;, &lt;to&gt; </td></tr>
<tr><td><b>weekstats</b> </td><td>Errechnet die Statistiken SUM, AVG, MIN, MAX, COUNT für eine Woche. </td></tr>
<tr><td> </td><td>benötigte Parameter: &lt;device&gt;, &lt;reading&gt;, &lt;from&gt;, &lt;to&gt; </td></tr>
<tr><td><b>monthstats</b> </td><td>Errechnet die Statistiken SUM, AVG, MIN, MAX, COUNT für einen Monat. </td></tr>
<tr><td> </td><td>benötigte Parameter: &lt;device&gt;, &lt;reading&gt;, &lt;from&gt;, &lt;to&gt; </td></tr>
<tr><td><b>yearstats</b> </td><td>Errechnet die Statistiken SUM, AVG, MIN, MAX, COUNT für ein Jahr. </td></tr>
<tr><td> </td><td>benötigte Parameter: &lt;device&gt;, &lt;reading&gt;, &lt;from&gt;, &lt;to&gt; </td></tr>
</table>
</ul>
<br>
<b>Hinweis:</b> <br>
Dieser Datenbankabruf arbeitet blockierend und beeinflusst FHEM wenn die Datenbank nicht oder nicht
hinreichend schnell antwortet. Für nicht-blockierende Datenbankabfragen wird auf das Modul DbRep
verwiesen.
<br>
<br>
<b>Beispiele:</b>
<ul>
<li><code>get LogSQLITE3 dataRetrieval getdevices </code>
</li>
<li><code>get LogSQLITE3 dataRetrieval getreadings MySTP_5000 </code>
</li>
<li><code>get LogSQLITE3 dataRetrieval last "" "" "" "" "" 50 </code>
</li>
<li><code>get LogSQLITE3 dataRetrieval timerange MySTP_5000 etotal 2023-01-01_00:00:00 2023-01-25_00:00:00 </code>
</li>
<li><code>get LogSQLITE3 dataRetrieval getTableData MySTP_5000 "" 2023-01-01_00:00:00 2023-01-25_00:00:00 0 100 </code>
</li>
<li><code>get LogSQLITE3 dataRetrieval getTableData "" etotal 2023-01-01_00:00:00 2023-01-25_00:00:00 0 100 </code>
</li>
<li><code>get LogSQLITE3 dataRetrieval hourstats MySTP_5000 etotal 2023-01-01_00:00:00 2023-01-25_00:00:00 </code>
</li>
</ul>
</ul>
</ul>
</li>
<br>
<br> <br>
<b>Get</b> für die Nutzung von SVG-Plots <b>Get</b> für die Nutzung von SVG-Plots
@ -11076,8 +11274,9 @@ attr SMA_Energymeter DbLogValueFn
<br> <br>
<ul> <ul>
<li><b>get &lt;name&gt; &lt;in&gt; &lt;out&gt; &lt;from&gt; <li><b>get &lt;name&gt; &lt;in&gt; &lt;out&gt; &lt;from&gt;
&lt;to&gt; &lt;device&gt; &lt;querytype&gt; &lt;xaxis&gt; &lt;yaxis&gt; &lt;savename&gt; &lt;chartconfig&gt; &lt;pagingstart&gt; &lt;paginglimit&gt; </b> <br> &lt;to&gt; &lt;device&gt; &lt;querytype&gt; &lt;xaxis&gt; &lt;yaxis&gt; &lt;savename&gt; &lt;chartconfig&gt; &lt;pagingstart&gt; &lt;paginglimit&gt; </b>
<br>
<br> <br>
Liest Daten aus der Datenbank aus und gibt diese in JSON formatiert aus. Wird für das Charting Frontend genutzt. Liest Daten aus der Datenbank aus und gibt diese in JSON formatiert aus. Wird für das Charting Frontend genutzt.
@ -11086,7 +11285,7 @@ attr SMA_Energymeter DbLogValueFn
<ul> <ul>
<li>&lt;name&gt;<br> <li>&lt;name&gt;<br>
Der Name des definierten DbLogs, so wie er in der fhem.cfg angegeben wurde. Der Name des definierten DbLog Devices, so wie er in der fhem.cfg angegeben wurde.
</li> </li>
<br> <br>
@ -11133,8 +11332,7 @@ attr SMA_Energymeter DbLogValueFn
<br> <br>
<li>&lt;xaxis&gt;<br> <li>&lt;xaxis&gt;<br>
Ein String, der die X-Achse repräsentiert. Es muß ein gültiger Feldname der history-Tabelle sein, wie z.B. Ein String, der die X-Achse repräsentiert. Es muß ein gültiger Feldname, typisch 'TIMESTAMP', der history-Tabelle sein.
TIMESTAMP.
</li> </li>
<br> <br>
@ -11186,8 +11384,10 @@ attr SMA_Energymeter DbLogValueFn
<li><code>get logdb - webchart "" "" "" deletechart "" "" 7</code><br> <li><code>get logdb - webchart "" "" "" deletechart "" "" 7</code><br>
Löscht einen zuvor gespeicherten Chart unter Angabe einer id</li> Löscht einen zuvor gespeicherten Chart unter Angabe einer id</li>
</ul> </ul>
<br><br> <br>
<br>
</ul> </ul>
</li>
<a id="DbLog-attr"></a> <a id="DbLog-attr"></a>