mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-03-12 16:46:35 +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:
parent
3d9e7fa90a
commit
92269174e0
@ -132,6 +132,7 @@ my %DbLog_hget = (
|
||||
ReadingsAvgVal => { fn => \&_DbLog_dbReadings },
|
||||
webchart => { fn => \&_DbLog_chartQuery },
|
||||
plotdata => { fn => \&_DbLog_plotData },
|
||||
dataRetrieval => { fn => \&_DbLog_chartQuery },
|
||||
);
|
||||
|
||||
my %DbLog_columns = ("DEVICE" => 64,
|
||||
@ -5837,7 +5838,8 @@ sub DbLog_Get {
|
||||
"ReadingsMaxValTimestamp ".
|
||||
"ReadingsMinVal ".
|
||||
"ReadingsMinValTimestamp ".
|
||||
"ReadingsAvgVal "
|
||||
"ReadingsAvgVal ".
|
||||
"dataRetrieval: "
|
||||
;
|
||||
|
||||
return $getlist;
|
||||
@ -5915,7 +5917,9 @@ sub _DbLog_chartQuery {
|
||||
my $hash = $paref->{hash};
|
||||
my $name = $paref->{name};
|
||||
my @a = @{$paref->{aref}};
|
||||
my $opt = $paref->{opt};
|
||||
|
||||
if ($opt eq 'webchart') {
|
||||
return "Usage: \n".
|
||||
"get $name <in> <out> <from> <to> <column_spec>...\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".
|
||||
"<out> is a prefix, '-' means stdout\n"
|
||||
if(int(@a) < 4);
|
||||
}
|
||||
|
||||
my ($sql, $countsql) = _DbLog_createQuerySql ($paref);
|
||||
|
||||
@ -5970,7 +5975,9 @@ sub _DbLog_chartQuery {
|
||||
}
|
||||
|
||||
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()) {
|
||||
if($i == 0) {
|
||||
@ -5981,12 +5988,12 @@ sub _DbLog_chartQuery {
|
||||
}
|
||||
|
||||
for ($i = 0; $i < $columncnt; $i++) {
|
||||
$jsonstring .= '"';
|
||||
$jsonstring .= q(");
|
||||
$jsonstring .= uc($query_handle->{NAME}->[$i]);
|
||||
$jsonstring .= '":';
|
||||
$jsonstring .= q(":);
|
||||
|
||||
if (defined $data[$i]) {
|
||||
my $fragment = substr($data[$i],0,1);
|
||||
my $fragment = substr $data[$i], 0, 1;
|
||||
|
||||
if ($fragment eq "{") {
|
||||
$jsonstring .= $data[$i];
|
||||
@ -6000,20 +6007,20 @@ sub _DbLog_chartQuery {
|
||||
}
|
||||
|
||||
if($i != ($columncnt -1)) {
|
||||
$jsonstring .= ',';
|
||||
$jsonstring .= q(,);
|
||||
}
|
||||
}
|
||||
|
||||
$jsonstring .= '}';
|
||||
$jsonstring .= q(});
|
||||
}
|
||||
|
||||
$jsonstring .= ']';
|
||||
$jsonstring .= q(]);
|
||||
|
||||
if (defined $totalcount && $totalcount ne "") {
|
||||
$jsonstring .= ',"totalCount": '.$totalcount.'}';
|
||||
}
|
||||
else {
|
||||
$jsonstring .= '}';
|
||||
$jsonstring .= q(});
|
||||
}
|
||||
|
||||
return $jsonstring;
|
||||
@ -6025,26 +6032,43 @@ return $jsonstring;
|
||||
sub _DbLog_createQuerySql {
|
||||
my $paref = shift;
|
||||
|
||||
my $opt = $paref->{opt};
|
||||
my $hash = $paref->{hash};
|
||||
my @a = @{$paref->{aref}};
|
||||
|
||||
my $starttime = $a[2];
|
||||
$starttime =~ s/_/ /;
|
||||
my $endtime = $a[3];
|
||||
$endtime =~ s/_/ /;
|
||||
my $device = $a[4];
|
||||
my $userquery = $a[5];
|
||||
my $starttime = $a[2]; # <from>
|
||||
my $endtime = $a[3]; # <to>
|
||||
my $device = $a[4]; # <device>
|
||||
my $querytype = $a[5]; # <querytype>
|
||||
my $xaxis = $a[6]; # ein Datenbankfeld wie TIMESTAMP, READING, DEVICE, UNIT, EVENT
|
||||
my $yaxis = $a[7]; # ein Reading Name
|
||||
my $savename = $a[8];
|
||||
my $jsonChartConfig = $a[9];
|
||||
my $pagingstart = $a[10];
|
||||
my $paginglimit = $a[11];
|
||||
my $reading = $a[7]; # ein Reading Name (<yaxis>)
|
||||
my $savename = $a[8]; # <savename>
|
||||
my $jsonChartConfig = $a[9]; # <chartconfig>
|
||||
my $offset = $a[10]; # <pagingstart>
|
||||
my $limit = $a[11]; # <paginglimit>
|
||||
|
||||
my $dbmodel = $hash->{MODEL};
|
||||
my $history = $hash->{HELPER}{TH};
|
||||
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);
|
||||
|
||||
if ($dbmodel eq "POSTGRESQL") {
|
||||
@ -6052,31 +6076,31 @@ sub _DbLog_createQuerySql {
|
||||
### hour:
|
||||
$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 .= "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;";
|
||||
|
||||
### day:
|
||||
$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 .= "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;";
|
||||
|
||||
### week:
|
||||
$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 .= "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;";
|
||||
|
||||
### month:
|
||||
$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 .= "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;";
|
||||
|
||||
### year:
|
||||
$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 .= "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;";
|
||||
}
|
||||
elsif ($dbmodel eq "MYSQL") {
|
||||
@ -6084,32 +6108,32 @@ sub _DbLog_createQuerySql {
|
||||
### hour:
|
||||
$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 .= "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;";
|
||||
|
||||
### day:
|
||||
$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 .= "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;";
|
||||
|
||||
### week:
|
||||
$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 .= "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 .= "GROUP BY date_format(timestamp, '%Y-%u 00:00:00') ORDER BY 1;";
|
||||
|
||||
### month:
|
||||
$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 .= "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;";
|
||||
|
||||
### year:
|
||||
$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 .= "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;";
|
||||
}
|
||||
elsif ($dbmodel eq "SQLITE") {
|
||||
@ -6117,31 +6141,31 @@ sub _DbLog_createQuerySql {
|
||||
### hour:
|
||||
$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 .= "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);";
|
||||
|
||||
### day:
|
||||
$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 .= "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);";
|
||||
|
||||
### week:
|
||||
$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 .= "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);";
|
||||
|
||||
### month:
|
||||
$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 .= "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);";
|
||||
|
||||
### year:
|
||||
$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 .= "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);";
|
||||
|
||||
}
|
||||
@ -6149,66 +6173,77 @@ sub _DbLog_createQuerySql {
|
||||
$sql = "errordb";
|
||||
}
|
||||
|
||||
if($userquery eq "getreadings") {
|
||||
$sql = "SELECT distinct(reading) FROM $history WHERE device = '".$device."'";
|
||||
if($querytype eq 'getreadings') {
|
||||
$sql = "SELECT distinct(reading) FROM $history WHERE device = '$device'";
|
||||
}
|
||||
elsif ($userquery eq "getdevices") {
|
||||
elsif ($querytype eq 'getdevices') {
|
||||
$sql = "SELECT distinct(device) FROM $history";
|
||||
}
|
||||
elsif ($userquery eq "timerange") {
|
||||
$sql = "SELECT ".$xaxis.", VALUE FROM $history WHERE READING = '$yaxis' AND DEVICE = '$device' AND TIMESTAMP Between '$starttime' AND '$endtime' ORDER BY TIMESTAMP;";
|
||||
elsif ($querytype eq 'last') {
|
||||
$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;
|
||||
}
|
||||
elsif ($userquery eq "daystats") {
|
||||
elsif ($querytype eq 'daystats') {
|
||||
$sql = $daystats;
|
||||
}
|
||||
elsif ($userquery eq "weekstats") {
|
||||
elsif ($querytype eq 'weekstats') {
|
||||
$sql = $weekstats;
|
||||
}
|
||||
elsif ($userquery eq "monthstats") {
|
||||
elsif ($querytype eq 'monthstats') {
|
||||
$sql = $monthstats;
|
||||
}
|
||||
elsif ($userquery eq "yearstats") {
|
||||
elsif ($querytype eq 'yearstats') {
|
||||
$sql = $yearstats;
|
||||
}
|
||||
elsif ($userquery eq "savechart") {
|
||||
elsif ($querytype eq 'savechart') {
|
||||
$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'";
|
||||
}
|
||||
elsif ($userquery eq "deletechart") {
|
||||
elsif ($querytype eq 'deletechart') {
|
||||
$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."'";
|
||||
}
|
||||
elsif ($userquery eq "getcharts") {
|
||||
elsif ($querytype eq 'getcharts') {
|
||||
$sql = "SELECT * FROM frontend WHERE TYPE = 'savedchart'";
|
||||
}
|
||||
elsif ($userquery eq "getTableData") {
|
||||
if ($device ne '""' && $yaxis ne '""') {
|
||||
$sql = "SELECT * FROM $history WHERE READING = '$yaxis' AND DEVICE = '$device' ";
|
||||
elsif ($querytype eq 'getTableData') {
|
||||
if ($device ne '""' && $reading ne '""') {
|
||||
$sql = "SELECT * FROM $history WHERE READING = '$reading' AND DEVICE = '$device' ";
|
||||
$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'";
|
||||
}
|
||||
elsif ($device ne '""' && $yaxis eq '""') {
|
||||
elsif ($device ne '""' && $reading eq '""') {
|
||||
$sql = "SELECT * FROM $history WHERE DEVICE = '$device' ";
|
||||
$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 .= "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 {
|
||||
$sql = "SELECT * FROM $history";
|
||||
$sql .= " WHERE TIMESTAMP Between '$starttime' AND '$endtime'";
|
||||
$sql .= " LIMIT '$paginglimit' OFFSET '$pagingstart'";
|
||||
$sql .= " LIMIT '$limit' OFFSET '$offset'";
|
||||
|
||||
$countsql = "SELECT count(*) FROM $history";
|
||||
$countsql .= " WHERE TIMESTAMP Between '$starttime' AND '$endtime'";
|
||||
@ -9010,7 +9045,8 @@ return;
|
||||
|
||||
<ul>
|
||||
<a id="DbLog-get-ReadingsMaxVal" data-pattern="ReadingsMaxVal.*"></a>
|
||||
<li><b>get <name> ReadingsMaxVal[Timestamp] <Device> <Reading> <default> </b> <br><br>
|
||||
<li><b>get <name> ReadingsMaxVal[Timestamp] <Device> <Reading> <default> </b>
|
||||
<br>
|
||||
<ul>
|
||||
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
|
||||
@ -9030,7 +9066,8 @@ return;
|
||||
|
||||
<ul>
|
||||
<a id="DbLog-get-ReadingsMinVal" data-pattern="ReadingsMinVal.*"></a>
|
||||
<li><b>get <name> ReadingsMinVal[Timestamp] <Device> <Reading> <default> </b> <br><br>
|
||||
<li><b>get <name> ReadingsMinVal[Timestamp] <Device> <Reading> <default> </b>
|
||||
<br>
|
||||
<ul>
|
||||
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
|
||||
@ -9049,7 +9086,8 @@ return;
|
||||
|
||||
<ul>
|
||||
<a id="DbLog-get-ReadingsAvgVal"></a>
|
||||
<li><b>get <name> ReadingsAvgVal <Device> <Reading> <default> </b> <br><br>
|
||||
<li><b>get <name> ReadingsAvgVal <Device> <Reading> <default> </b>
|
||||
<br>
|
||||
<ul>
|
||||
Determines the average value of the specified Device / Reading combination from the history table. <br>
|
||||
The simple arithmetic average value is returned. <br>
|
||||
@ -9067,7 +9105,8 @@ return;
|
||||
|
||||
<ul>
|
||||
<a id="DbLog-get-ReadingsVal" data-pattern="ReadingsVal.*"></a>
|
||||
<li><b>get <name> ReadingsVal[Timestamp] <Device> <Reading> <default> </b> <br><br>
|
||||
<li><b>get <name> ReadingsVal[Timestamp] <Device> <Reading> <default> </b>
|
||||
<br>
|
||||
<ul>
|
||||
Reads the last (newest) record stored in the history table of the specified Device / Reading
|
||||
combination. <br>
|
||||
@ -9087,7 +9126,8 @@ return;
|
||||
|
||||
<ul>
|
||||
<a id="DbLog-get-ReadingsTimestamp"></a>
|
||||
<li><b>get <name> ReadingsTimestamp <Device> <Reading> <default> </b> <br><br>
|
||||
<li><b>get <name> ReadingsTimestamp <Device> <Reading> <default> </b>
|
||||
<br>
|
||||
<ul>
|
||||
Reads the timestamp of the last (newest) record stored in the history table of the specified
|
||||
Device/Reading combination and returns this value. <br>
|
||||
@ -9102,6 +9142,80 @@ return;
|
||||
</ul>
|
||||
</li>
|
||||
<br>
|
||||
|
||||
<ul>
|
||||
<a id="DbLog-get-dataRetrieval"></a>
|
||||
<li><b>get <name> dataRetrieval <querytype> <device> <reading> <from> <to> <offset> <limit> </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 <querytype>. <br>
|
||||
Each <querytype> 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: <device> </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: <device>, <reading>, <from>, <to> </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: <from>, <to>, <offset>, <limit> </td></tr>
|
||||
<tr><td><b>last</b> </td><td>Lists the last 10 saved events. </td></tr>
|
||||
<tr><td> </td><td>possible parameters: <limit> (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: <device>, <reading>, <from>, <to> </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: <device>, <reading>, <from>, <to> </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: <device>, <reading>, <from>, <to> </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: <device>, <reading>, <from>, <to> </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: <device>, <reading>, <from>, <to> </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>
|
||||
|
||||
<b>Get</b> for the use of SVG plots
|
||||
@ -9328,8 +9442,7 @@ return;
|
||||
<br>
|
||||
|
||||
<li><xaxis><br>
|
||||
A string which represents the xaxis. It must be a valid field name of the history table, like e.g.
|
||||
TIMESTAMP.
|
||||
A string which represents the xaxis. It must be a valid field name, typically 'TIMESTAMP', of the history table.
|
||||
</li>
|
||||
<br>
|
||||
|
||||
@ -10803,7 +10916,9 @@ attr SMA_Energymeter DbLogValueFn
|
||||
|
||||
<ul>
|
||||
<a id="DbLog-get-ReadingsMaxVal" data-pattern="ReadingsMaxVal.*"></a>
|
||||
<li><b>get <name> ReadingsMaxVal[Timestamp] <Device> <Reading> <default> </b> <br><br>
|
||||
<li><b>get <name> ReadingsMaxVal[Timestamp] <Device> <Reading> <default> </b>
|
||||
<br>
|
||||
|
||||
<ul>
|
||||
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
|
||||
@ -10823,7 +10938,9 @@ attr SMA_Energymeter DbLogValueFn
|
||||
|
||||
<ul>
|
||||
<a id="DbLog-get-ReadingsMinVal" data-pattern="ReadingsMinVal.*"></a>
|
||||
<li><b>get <name> ReadingsMinVal[Timestamp] <Device> <Reading> <default> </b> <br><br>
|
||||
<li><b>get <name> ReadingsMinVal[Timestamp] <Device> <Reading> <default> </b>
|
||||
<br>
|
||||
|
||||
<ul>
|
||||
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
|
||||
@ -10843,7 +10960,9 @@ attr SMA_Energymeter DbLogValueFn
|
||||
|
||||
<ul>
|
||||
<a id="DbLog-get-ReadingsAvgVal"></a>
|
||||
<li><b>get <name> ReadingsAvgVal <Device> <Reading> <default> </b> <br><br>
|
||||
<li><b>get <name> ReadingsAvgVal <Device> <Reading> <default> </b>
|
||||
<br>
|
||||
|
||||
<ul>
|
||||
Ermittelt den Durchschnittswert der angegebenen Device / Reading Kombination aus der history Tabelle. <br>
|
||||
Zurück gegeben wird der einfache arithmetische Durchschnittswert. <br>
|
||||
@ -10862,7 +10981,9 @@ attr SMA_Energymeter DbLogValueFn
|
||||
|
||||
<ul>
|
||||
<a id="DbLog-get-ReadingsVal" data-pattern="ReadingsVal.*"></a>
|
||||
<li><b>get <name> ReadingsVal[Timestamp] <Device> <Reading> <default> </b> <br><br>
|
||||
<li><b>get <name> ReadingsVal[Timestamp] <Device> <Reading> <default> </b>
|
||||
<br>
|
||||
|
||||
<ul>
|
||||
Liest den letzten (neuesten) in der history Tabelle gespeicherten Datensatz der angegebenen Device / Reading
|
||||
Kombination. <br>
|
||||
@ -10883,7 +11004,9 @@ attr SMA_Energymeter DbLogValueFn
|
||||
|
||||
<ul>
|
||||
<a id="DbLog-get-ReadingsTimestamp"></a>
|
||||
<li><b>get <name> ReadingsTimestamp <Device> <Reading> <default> </b> <br><br>
|
||||
<li><b>get <name> ReadingsTimestamp <Device> <Reading> <default> </b>
|
||||
<br>
|
||||
|
||||
<ul>
|
||||
Liest den Zeitstempel des letzten (neuesten) in der history Tabelle gespeicherten Datensatzes der angegebenen
|
||||
Device/Reading Kombination und gibt diesen Wert zurück. <br>
|
||||
@ -10899,6 +11022,81 @@ attr SMA_Energymeter DbLogValueFn
|
||||
</ul>
|
||||
</li>
|
||||
<br>
|
||||
|
||||
<ul>
|
||||
<a id="DbLog-get-dataRetrieval"></a>
|
||||
<li><b>get <name> dataRetrieval <querytype> <device> <reading> <from> <to> <offset> <limit> </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 <querytype> bestimmt. <br>
|
||||
Jeder <querytype> 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: <device> </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: <device>, <reading>, <from>, <to> </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: <from>, <to>, <offset>, <limit> </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: <limit> (ü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: <device>, <reading>, <from>, <to> </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: <device>, <reading>, <from>, <to> </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: <device>, <reading>, <from>, <to> </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: <device>, <reading>, <from>, <to> </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: <device>, <reading>, <from>, <to> </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>
|
||||
|
||||
<b>Get</b> für die Nutzung von SVG-Plots
|
||||
@ -11076,8 +11274,9 @@ attr SMA_Energymeter DbLogValueFn
|
||||
<br>
|
||||
|
||||
<ul>
|
||||
<li><b>get <name> <in> <out> <from>
|
||||
<to> <device> <querytype> <xaxis> <yaxis> <savename> <chartconfig> <pagingstart> <paginglimit> </b> <br>
|
||||
<li><b>get <name> <in> <out> <from>
|
||||
<to> <device> <querytype> <xaxis> <yaxis> <savename> <chartconfig> <pagingstart> <paginglimit> </b>
|
||||
<br>
|
||||
<br>
|
||||
|
||||
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>
|
||||
<li><name><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>
|
||||
<br>
|
||||
|
||||
@ -11133,8 +11332,7 @@ attr SMA_Energymeter DbLogValueFn
|
||||
<br>
|
||||
|
||||
<li><xaxis><br>
|
||||
Ein String, der die X-Achse repräsentiert. Es muß ein gültiger Feldname der history-Tabelle sein, wie z.B.
|
||||
TIMESTAMP.
|
||||
Ein String, der die X-Achse repräsentiert. Es muß ein gültiger Feldname, typisch 'TIMESTAMP', der history-Tabelle sein.
|
||||
</li>
|
||||
<br>
|
||||
|
||||
@ -11186,8 +11384,10 @@ attr SMA_Energymeter DbLogValueFn
|
||||
<li><code>get logdb - webchart "" "" "" deletechart "" "" 7</code><br>
|
||||
Löscht einen zuvor gespeicherten Chart unter Angabe einer id</li>
|
||||
</ul>
|
||||
<br><br>
|
||||
<br>
|
||||
<br>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
|
||||
<a id="DbLog-attr"></a>
|
||||
|
Loading…
x
Reference in New Issue
Block a user