From 57569541a973fabe34c6401aacf93bce08966acf Mon Sep 17 00:00:00 2001 From: DS_Starter Date: Sat, 28 Jan 2023 08:32:18 +0000 Subject: [PATCH] 93_DbLog: contrib 5.8.0 git-svn-id: https://svn.fhem.de/fhem/trunk@27136 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/contrib/DS_Starter/93_DbLog.pm | 153 +++++++++++++++++++++------- 1 file changed, 116 insertions(+), 37 deletions(-) diff --git a/fhem/contrib/DS_Starter/93_DbLog.pm b/fhem/contrib/DS_Starter/93_DbLog.pm index a72c94494..81df42052 100644 --- a/fhem/contrib/DS_Starter/93_DbLog.pm +++ b/fhem/contrib/DS_Starter/93_DbLog.pm @@ -1,5 +1,5 @@ ############################################################################################################################################ -# $Id: 93_DbLog.pm 27111 2023-01-23 19:06:28Z DS_Starter $ +# $Id: 93_DbLog.pm 27111 2023-01-28 19:06:28Z DS_Starter $ # # 93_DbLog.pm # written by Dr. Boris Neubert 2007-12-30 @@ -4908,6 +4908,71 @@ sub __DbLog_SBP_selectrowArray { return ($err, @res); } +################################################################# +# einfaches Query prepare, Rückgabe Statement Handle +################################################################# +sub __DbLog_SBP_prepareOnly { + my $name = shift; + my $dbh = shift; + my $query = shift; + my $subprocess = shift // q{}; + + my $err = q{}; + my $sth; + + eval{ $sth = $dbh->prepare ($query); + 1; + } + or do { $err = $@; + if ($subprocess) { + _DbLog_SBP_Log3Parent ( { name => $name, + level => 2, + msg => qq(ERROR - $err), + oper => 'log3parent', + subprocess => $subprocess + } + ); + } + else { + Log3 ($name, 2, qq{DbLog $name - ERROR - $err}); + } + }; + +return ($err, $sth); +} + +################################################################# +# einfaches Query execute +################################################################# +sub __DbLog_SBP_executeOnly { + my $name = shift; + my $sth = shift; + my $subprocess = shift // q{}; + + my $err = q{}; + my $result; + + eval{ $result = $sth->execute(); + 1; + } + or do { $err = $@; + if ($subprocess) { + _DbLog_SBP_Log3Parent ( { name => $name, + level => 2, + msg => qq(ERROR - $err), + oper => 'log3parent', + subprocess => $subprocess + } + ); + } + else { + Log3 ($name, 2, qq{DbLog $name - ERROR - $err}); + } + }; + +return ($err, $sth, $result); +} + ################################################################# # erstellt Statement Handle für Insert Daten in die # angegebene Tabelle @@ -5895,22 +5960,22 @@ sub _DbLog_chartQuery { my $totalcount; if (defined $countsql && $countsql ne "") { - my $query_handle = $dbh->prepare($countsql) - or return DbLog_jsonError("Could not prepare statement: " . $dbh->errstr . ", SQL was: " .$countsql); + ($err, my $query_handle) = __DbLog_SBP_prepareOnly ($name, $dbh, $countsql); + return DbLog_jsonError("Could not prepare statement: " .$err. ", SQL was: " .$countsql) if($err); - $query_handle->execute() - or return DbLog_jsonError("Could not execute statement: " . $query_handle->errstr); + ($err, $query_handle) = __DbLog_SBP_executeOnly ($name, $query_handle); + return DbLog_jsonError("Could not execute statement: " . $err) if($err); my @data = $query_handle->fetchrow_array(); $totalcount = join ", ", @data; } - my $query_handle = $dbh->prepare($sql) - or return DbLog_jsonError("Could not prepare statement: " . $dbh->errstr . ", SQL was: " .$sql); # prepare the query - - $query_handle->execute() - or return DbLog_jsonError("Could not execute statement: " . $query_handle->errstr); # execute the query - + ($err, my $query_handle) = __DbLog_SBP_prepareOnly ($name, $dbh, $sql); + return DbLog_jsonError("Could not prepare statement: " .$err. ", SQL was: " .$sql) if($err); + + ($err, $query_handle) = __DbLog_SBP_executeOnly ($name, $query_handle); + return DbLog_jsonError("Could not execute statement: " . $err) if($err); + my $columns = $query_handle->{'NAME'}; my $columncnt; @@ -8966,7 +9031,7 @@ return;

@@ -9015,14 +9081,14 @@ return; Note:
This database retrieval works blocking and influences FHEM if the database does not respond or not responds - sufficiently fast. + sufficiently fast. For non-blocking database queries is referred to the module DbRep.
@@ -9053,14 +9119,14 @@ return; Note:
This database retrieval works blocking and influences FHEM if the database does not respond or not responds - sufficiently fast. + sufficiently fast. For non-blocking database queries is referred to the module DbRep.

-Get for the use of plot data +Get for the use of SVG plots

@@ -9284,27 +9350,34 @@ return;
  • <xaxis>
    - A string which represents the xaxis
  • + A string which represents the xaxis. It must be a valid field name of the history table, like e.g. + TIMESTAMP. +
  • <yaxis>
    - A string representing the Y-axis to be set to the name of the reading to be evaluated.
  • + A string representing the Y-axis to be set to the name of the reading to be evaluated. +
  • <savename>
    - A string which represents the name a chart will be saved with
  • + A string which represents the name a chart will be saved with. +
  • <chartconfig>
    - A jsonstring which represents the chart to save
  • + A jsonstring which represents the chart to save. +
  • <pagingstart>
    - An integer used to determine the start for the sql used for query 'getTableData'
  • + An integer used to determine the start for the sql used for query 'getTableData'. +
  • <paginglimit>
    - An integer used to set the limit for the sql used for query 'getTableData'
  • + An integer used to set the limit for the sql used for query 'getTableData'. +
    @@ -10763,7 +10836,8 @@ attr SMA_Energymeter DbLogValueFn Hinweis:
    Dieser Datenbankabruf arbeitet blockierend und beeinflusst FHEM wenn die Datenbank nicht oder nicht - hinreichend schnell antwortet. + hinreichend schnell antwortet. Für nicht-blockierende Datenbankabfragen wird auf das Modul DbRep + verwiesen. @@ -10782,7 +10856,8 @@ attr SMA_Energymeter DbLogValueFn Hinweis:
    Dieser Datenbankabruf arbeitet blockierend und beeinflusst FHEM wenn die Datenbank nicht oder nicht - hinreichend schnell antwortet. + hinreichend schnell antwortet. Für nicht-blockierende Datenbankabfragen wird auf das Modul DbRep + verwiesen. @@ -10800,7 +10875,8 @@ attr SMA_Energymeter DbLogValueFn Hinweis:
    Dieser Datenbankabruf arbeitet blockierend und beeinflusst FHEM wenn die Datenbank nicht oder nicht - hinreichend schnell antwortet. + hinreichend schnell antwortet. Für nicht-blockierende Datenbankabfragen wird auf das Modul DbRep + verwiesen. @@ -10820,7 +10896,8 @@ attr SMA_Energymeter DbLogValueFn Hinweis:
    Dieser Datenbankabruf arbeitet blockierend und beeinflusst FHEM wenn die Datenbank nicht oder nicht - hinreichend schnell antwortet. + hinreichend schnell antwortet. Für nicht-blockierende Datenbankabfragen wird auf das Modul DbRep + verwiesen. @@ -10838,14 +10915,15 @@ attr SMA_Energymeter DbLogValueFn Hinweis:
    Dieser Datenbankabruf arbeitet blockierend und beeinflusst FHEM wenn die Datenbank nicht oder nicht - hinreichend schnell antwortet. + hinreichend schnell antwortet. Für nicht-blockierende Datenbankabfragen wird auf das Modul DbRep + verwiesen.

    -Get für die Nutzung von Plot-Daten +Get für die Nutzung von SVG-Plots

    @@ -11077,7 +11155,8 @@ attr SMA_Energymeter DbLogValueFn
  • <xaxis>
    - Ein String, der die X-Achse repräsentiert + Ein String, der die X-Achse repräsentiert. Es muß ein gültiger Feldname der history-Tabelle sein, wie z.B. + TIMESTAMP.

  • @@ -11087,22 +11166,22 @@ attr SMA_Energymeter DbLogValueFn
  • <savename>
    - Ein String, unter dem ein Chart in der Datenbank gespeichert werden soll + Ein String, unter dem ein Chart in der Datenbank gespeichert werden soll.

  • <chartconfig>
    - Ein jsonstring der den zu speichernden Chart repräsentiert + Ein jsonstring der den zu speichernden Chart repräsentiert.

  • <pagingstart>
    - Ein Integer um den Startwert für die Abfrage 'getTableData' festzulegen + Ein Integer um den Startwert für die Abfrage 'getTableData' festzulegen.

  • <paginglimit>
    - Ein Integer um den Limitwert für die Abfrage 'getTableData' festzulegen + Ein Integer um den Limitwert für die Abfrage 'getTableData' festzulegen.