2
0
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:
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 },
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 &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>
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 &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>
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 &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>
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 &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>
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 &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>
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 &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>
<b>Get</b> for the use of SVG plots
@ -9328,8 +9442,7 @@ return;
<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.
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 &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>
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 &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>
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 &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>
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 &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>
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 &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>
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 &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>
<b>Get</b> für die Nutzung von SVG-Plots
@ -11076,8 +11274,9 @@ attr SMA_Energymeter DbLogValueFn
<br>
<ul>
<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>
<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>
<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>&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>
<br>
@ -11133,8 +11332,7 @@ attr SMA_Energymeter DbLogValueFn
<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.
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>