mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-04-16 10:46:03 +00:00
93_DbRep: contrib 8.51.2
git-svn-id: https://svn.fhem.de/fhem/trunk@27039 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
0f37f9c2d2
commit
bbd7f78b37
@ -11033,6 +11033,17 @@ sub DbRep_createInsertSQLscheme {
|
|||||||
return $sql;
|
return $sql;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
######################################################################################
|
||||||
|
# Erstelle Update SQL-Schema für Tabelle
|
||||||
|
######################################################################################
|
||||||
|
sub DbRep_createUpdateSQLscheme {
|
||||||
|
my $table = shift;
|
||||||
|
|
||||||
|
my $sql = "UPDATE $table SET TIMESTAMP=?, DEVICE=?, READING=?, TYPE=?, EVENT=?, VALUE=?, UNIT=? WHERE TIMESTAMP=? AND DEVICE=? AND READING=?";
|
||||||
|
|
||||||
|
return $sql;
|
||||||
|
}
|
||||||
|
|
||||||
######################################################################################
|
######################################################################################
|
||||||
# Connect zur Datenbank herstellen
|
# Connect zur Datenbank herstellen
|
||||||
#
|
#
|
||||||
@ -11205,20 +11216,55 @@ return ($err, $rv);
|
|||||||
}
|
}
|
||||||
|
|
||||||
####################################################################################################
|
####################################################################################################
|
||||||
# führt ein sth execute aus
|
# führt ein sth execute prepared Insert aus
|
||||||
# return ERROR oder die Anzahl der betroffenen Zeilen
|
# return ERROR oder die Anzahl der betroffenen Zeilen
|
||||||
####################################################################################################
|
####################################################################################################
|
||||||
sub DbRep_sthExecOnly {
|
sub DbRep_execInsertPrepared {
|
||||||
my $name = shift;
|
my $paref = shift;
|
||||||
my $sth = shift;
|
|
||||||
my $arg = shift;
|
|
||||||
|
|
||||||
my $err = q{};
|
my $name = $paref->{name};
|
||||||
my $rv = q{};
|
my $sth = $paref->{sth};
|
||||||
|
my $timestamp = $paref->{timestamp};
|
||||||
|
my $device = $paref->{device};
|
||||||
|
my $type = $paref->{type};
|
||||||
|
my $event = $paref->{event};
|
||||||
|
my $reading = $paref->{reading};
|
||||||
|
my $value = $paref->{value};
|
||||||
|
my $unit = $paref->{unit};
|
||||||
|
my $err = q{};
|
||||||
|
my $rv = q{};
|
||||||
|
|
||||||
my @args = split ",", $arg;
|
eval{ $rv = $sth->execute($timestamp, $device, $type, $event, $reading, $value, $unit);
|
||||||
|
}
|
||||||
|
or do { $err = encode_base64($@,"");
|
||||||
|
Log3 ($name, 2, "DbRep $name - ERROR - $@");
|
||||||
|
};
|
||||||
|
|
||||||
eval{ $rv = $sth->execute(@args);
|
$rv = 0 if($rv eq "0E0");
|
||||||
|
|
||||||
|
return ($err, $rv);
|
||||||
|
}
|
||||||
|
|
||||||
|
####################################################################################################
|
||||||
|
# führt ein sth execute prepared Update aus
|
||||||
|
# return ERROR oder die Anzahl der betroffenen Zeilen
|
||||||
|
####################################################################################################
|
||||||
|
sub DbRep_execUpdatePrepared {
|
||||||
|
my $paref = shift;
|
||||||
|
|
||||||
|
my $name = $paref->{name};
|
||||||
|
my $sth = $paref->{sth};
|
||||||
|
my $timestamp = $paref->{timestamp};
|
||||||
|
my $device = $paref->{device};
|
||||||
|
my $type = $paref->{type};
|
||||||
|
my $event = $paref->{event};
|
||||||
|
my $reading = $paref->{reading};
|
||||||
|
my $value = $paref->{value};
|
||||||
|
my $unit = $paref->{unit};
|
||||||
|
my $err = q{};
|
||||||
|
my $rv = q{};
|
||||||
|
|
||||||
|
eval{ $rv = $sth->execute($timestamp, $device, $reading, $type, $event, $value, $unit, $timestamp, $device, $reading);
|
||||||
}
|
}
|
||||||
or do { $err = encode_base64($@,"");
|
or do { $err = encode_base64($@,"");
|
||||||
Log3 ($name, 2, "DbRep $name - ERROR - $@");
|
Log3 ($name, 2, "DbRep $name - ERROR - $@");
|
||||||
@ -12774,7 +12820,7 @@ sub DbRep_OutputWriteToDB {
|
|||||||
my $irowdone = 0;
|
my $irowdone = 0;
|
||||||
my $ndp = AttrVal ($name, 'numDecimalPlaces', $dbrep_defdecplaces);
|
my $ndp = AttrVal ($name, 'numDecimalPlaces', $dbrep_defdecplaces);
|
||||||
|
|
||||||
my ($dbh,$sth_ih,$sth_ic,$err,$value,$date,$time,$hour,$minute,$ndate,$ntime,$rsf,$rsn,@wr_arr);
|
my ($dbh,$err,$value,$date,$time,$hour,$minute,$ndate,$ntime,$rsf,$rsn,@wr_arr);
|
||||||
my ($timestamp,$year,$mon,$mday,$t1,$corr);
|
my ($timestamp,$year,$mon,$mday,$t1,$corr);
|
||||||
|
|
||||||
if(!$dbloghash->{HELPER}{COLSET}) {
|
if(!$dbloghash->{HELPER}{COLSET}) {
|
||||||
@ -12909,14 +12955,20 @@ sub DbRep_OutputWriteToDB {
|
|||||||
Log3 ($name, 5, "DbRep $name -> Primary Key usage suppressed by attribute noSupportPK in DbLog >$dblogname<");
|
Log3 ($name, 5, "DbRep $name -> Primary Key usage suppressed by attribute noSupportPK in DbLog >$dblogname<");
|
||||||
}
|
}
|
||||||
|
|
||||||
my $sql = DbRep_createInsertSQLscheme ('history', $dbmodel, $usepkh);
|
my $sql = DbRep_createInsertSQLscheme ('history', $dbmodel, $usepkh);
|
||||||
|
($err, my $sth_ih) = DbRep_prepareOnly ($name, $dbh, $sql);
|
||||||
($err, $sth_ih) = DbRep_prepareOnly ($name, $dbh, $sql);
|
|
||||||
return ($err,$wrt,$irowdone) if ($err);
|
return ($err,$wrt,$irowdone) if ($err);
|
||||||
|
|
||||||
$sql = DbRep_createInsertSQLscheme ('current', $dbmodel, $usepkh);
|
$sql = DbRep_createUpdateSQLscheme ('history');
|
||||||
|
($err, my $sth_uh) = DbRep_prepareOnly ($name, $dbh, $sql);
|
||||||
|
return ($err,$wrt,$irowdone) if ($err);
|
||||||
|
|
||||||
($err, $sth_ic) = DbRep_prepareOnly ($name, $dbh, $sql);
|
$sql = DbRep_createInsertSQLscheme ('current', $dbmodel, $usepkh);
|
||||||
|
($err, my $sth_ic) = DbRep_prepareOnly ($name, $dbh, $sql);
|
||||||
|
return ($err,$wrt,$irowdone) if ($err);
|
||||||
|
|
||||||
|
$sql = DbRep_createUpdateSQLscheme ('current');
|
||||||
|
($err, my $sth_uc) = DbRep_prepareOnly ($name, $dbh, $sql);
|
||||||
return ($err,$wrt,$irowdone) if ($err);
|
return ($err,$wrt,$irowdone) if ($err);
|
||||||
|
|
||||||
$err = DbRep_beginDatabaseTransaction ($name, $dbh);
|
$err = DbRep_beginDatabaseTransaction ($name, $dbh);
|
||||||
@ -12936,20 +12988,41 @@ sub DbRep_OutputWriteToDB {
|
|||||||
$event = $a[3];
|
$event = $a[3];
|
||||||
$reading = $a[4];
|
$reading = $a[4];
|
||||||
$value = $a[5];
|
$value = $a[5];
|
||||||
$unit = $a[6] // q{};
|
$unit = $a[6];
|
||||||
|
|
||||||
if (lc($DbLogType) =~ m(history) ) {
|
if (lc($DbLogType) =~ m(history) ) {
|
||||||
my ($rv_uh, $rv_ih);
|
($err, my $rv_uh) = DbRep_execUpdatePrepared ( { name => $name,
|
||||||
|
sth => $sth_uh,
|
||||||
($err, $rv_uh) = DbRep_dbhDo ($name, $dbh, qq(UPDATE history SET TIMESTAMP="$timestamp", DEVICE="$device", READING="$reading", TYPE="$type", EVENT="$event", VALUE="$value", UNIT="$unit" WHERE TIMESTAMP="$timestamp" AND DEVICE="$device" AND READING="$reading";));
|
timestamp => $timestamp,
|
||||||
return ($err,$wrt,$irowdone) if ($err);
|
device => $device,
|
||||||
|
type => $type,
|
||||||
|
event => $event,
|
||||||
|
reading => $reading,
|
||||||
|
value => $value,
|
||||||
|
unit => $unit
|
||||||
|
}
|
||||||
|
);
|
||||||
|
if ($err) {
|
||||||
|
$dbh->disconnect;
|
||||||
|
return ($err,$wrt,$irowdone);
|
||||||
|
}
|
||||||
|
|
||||||
$uhs += $rv_uh if($rv_uh);
|
$uhs += $rv_uh if($rv_uh);
|
||||||
|
|
||||||
Log3 ($name, 4, "DbRep $name - UPDATE history: $row, RESULT: $rv_uh");
|
Log3 ($name, 4, "DbRep $name - UPDATE history: $row, RESULT: $rv_uh");
|
||||||
|
|
||||||
if ($rv_uh == 0) {
|
if ($rv_uh == 0) {
|
||||||
($err, $rv_ih) = DbRep_sthExecOnly ($name, $sth_ih, "$timestamp,$device,$type,$event,$reading,$value,$unit");
|
($err, my $rv_ih) = DbRep_execInsertPrepared ( { name => $name,
|
||||||
|
sth => $sth_ih,
|
||||||
|
timestamp => $timestamp,
|
||||||
|
device => $device,
|
||||||
|
type => $type,
|
||||||
|
event => $event,
|
||||||
|
reading => $reading,
|
||||||
|
value => $value,
|
||||||
|
unit => $unit
|
||||||
|
}
|
||||||
|
);
|
||||||
if ($err) {
|
if ($err) {
|
||||||
$dbh->disconnect;
|
$dbh->disconnect;
|
||||||
return ($err,$wrt,$irowdone);
|
return ($err,$wrt,$irowdone);
|
||||||
@ -12962,13 +13035,34 @@ sub DbRep_OutputWriteToDB {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (lc($DbLogType) =~ m(current) ) {
|
if (lc($DbLogType) =~ m(current) ) {
|
||||||
my $rv_uc;
|
($err, my $rv_uc) = DbRep_execUpdatePrepared ( { name => $name,
|
||||||
|
sth => $sth_uc,
|
||||||
($err, $rv_uc) = DbRep_dbhDo ($name, $dbh, qq(UPDATE current SET TIMESTAMP="$timestamp", DEVICE="$device", READING="$reading", TYPE="$type", EVENT="$event", VALUE="$value", UNIT="$unit" WHERE DEVICE="$device" AND READING="$reading";));
|
timestamp => $timestamp,
|
||||||
return ($err,$wrt,$irowdone) if ($err);
|
device => $device,
|
||||||
|
type => $type,
|
||||||
|
event => $event,
|
||||||
|
reading => $reading,
|
||||||
|
value => $value,
|
||||||
|
unit => $unit
|
||||||
|
}
|
||||||
|
);
|
||||||
|
if ($err) {
|
||||||
|
$dbh->disconnect;
|
||||||
|
return ($err,$wrt,$irowdone);
|
||||||
|
}
|
||||||
|
|
||||||
if ($rv_uc == 0) {
|
if ($rv_uc == 0) {
|
||||||
$err = DbRep_sthExecOnly ($name, $sth_ic, "$timestamp,$device,$type,$event,$reading,$value,$unit");
|
($err, undef) = DbRep_execInsertPrepared ( { name => $name,
|
||||||
|
sth => $sth_ic,
|
||||||
|
timestamp => $timestamp,
|
||||||
|
device => $device,
|
||||||
|
type => $type,
|
||||||
|
event => $event,
|
||||||
|
reading => $reading,
|
||||||
|
value => $value,
|
||||||
|
unit => $unit
|
||||||
|
}
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user