2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-04-21 01:46:08 +00:00

93_DbRep: importFromFile format problem if UNIT-field wasn't set

git-svn-id: https://svn.fhem.de/fhem/trunk@12912 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
nasseeder1 2016-12-30 14:36:48 +00:00
parent 4ab33853e1
commit a07fa0a26e
2 changed files with 13 additions and 9 deletions

View File

@ -1,5 +1,6 @@
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide. # Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
# Do not insert empty lines here, update check depends on it. # Do not insert empty lines here, update check depends on it.
- bugfix: 93_DbRep: importFromFile format problem if UNIT-field wasn't set
- feature: 98_fhemdebug, to aid "Error: >< no TYPE" debugging. - feature: 98_fhemdebug, to aid "Error: >< no TYPE" debugging.
- feature: 70_Jabber Added possibility to change componentname via - feature: 70_Jabber Added possibility to change componentname via
attr JabberDomain attr JabberDomain

View File

@ -40,6 +40,7 @@
########################################################################################################### ###########################################################################################################
# Versions History: # Versions History:
# #
# 4.10.1 30.11.2016 bugfix importFromFile format problem if UNIT-field wasn't set
# 4.10 28.12.2016 del_DoParse changed to use Wildcards, del_ParseDone changed to use readingNameMap # 4.10 28.12.2016 del_DoParse changed to use Wildcards, del_ParseDone changed to use readingNameMap
# 4.9 23.12.2016 function readingRename added # 4.9 23.12.2016 function readingRename added
# 4.8.6 17.12.2016 new bugfix group by-clause due to incompatible changes made in MyQL 5.7.5 # 4.8.6 17.12.2016 new bugfix group by-clause due to incompatible changes made in MyQL 5.7.5
@ -168,7 +169,7 @@ use Blocking;
use Time::Local; use Time::Local;
# no if $] >= 5.017011, warnings => 'experimental'; # no if $] >= 5.017011, warnings => 'experimental';
my $DbRepVersion = "4.10"; my $DbRepVersion = "4.10.1";
my %dbrep_col = ("DEVICE" => 64, my %dbrep_col = ("DEVICE" => 64,
"TYPE" => 64, "TYPE" => 64,
@ -2383,9 +2384,9 @@ sub del_ParseDone($) {
} }
my $reading = AttrVal($hash->{NAME}, "reading", undef); my $reading = AttrVal($hash->{NAME}, "reading", undef);
$reading =~ s/%/\//g; $reading =~ s/%/\//g if ($reading);
my $device = AttrVal($hash->{NAME}, "device", undef); my $device = AttrVal($hash->{NAME}, "device", undef);
$device =~ s/%/\//g; $device =~ s/%/\//g if ($device);
# only for this block because of warnings if details of readings are not set # only for this block because of warnings if details of readings are not set
no warnings 'uninitialized'; no warnings 'uninitialized';
@ -3043,15 +3044,17 @@ sub impfile_Push($) {
$al = $_; $al = $_;
chomp $al; chomp $al;
my @alarr = split("\",\"", $al); my @alarr = split("\",\"", $al);
foreach(@alarr) {
tr/"//d;
}
my $i_timestamp = $alarr[0]; my $i_timestamp = $alarr[0];
$i_timestamp =~ tr/"//d; # $i_timestamp =~ tr/"//d;
my $i_device = $alarr[1]; my $i_device = $alarr[1];
my $i_type = $alarr[2]; my $i_type = $alarr[2];
my $i_event = $alarr[3]; my $i_event = $alarr[3];
my $i_reading = $alarr[4]; my $i_reading = $alarr[4];
my $i_value = $alarr[5]; my $i_value = $alarr[5];
my $i_unit = $alarr[6] ? $alarr[6]: " "; my $i_unit = $alarr[6] ? $alarr[6]: " ";
$i_unit =~ tr/"//d;
$irowcount++; $irowcount++;
next if(!$i_timestamp); #leerer Datensatz next if(!$i_timestamp); #leerer Datensatz
@ -3059,7 +3062,7 @@ sub impfile_Push($) {
my ($i_date, $i_time) = split(" ",$i_timestamp); my ($i_date, $i_time) = split(" ",$i_timestamp);
if ($i_date !~ /(\d{4})-(\d{2})-(\d{2})/ || $i_time !~ /(\d{2}):(\d{2}):(\d{2})/) { if ($i_date !~ /(\d{4})-(\d{2})-(\d{2})/ || $i_time !~ /(\d{2}):(\d{2}):(\d{2})/) {
$err = encode_base64("Format of date/time is not valid in row $irowcount of $infile. Must be format \"YYYY-MM-DD HH:MM:SS\" !",""); $err = encode_base64("Format of date/time is not valid in row $irowcount of $infile. Must be format \"YYYY-MM-DD HH:MM:SS\" !","");
Log3 ($name, 2, "DbRep $name -> ERROR - Import of datasets of file $infile was NOT done. Invalid date/time field format in row $irowcount !"); Log3 ($name, 2, "DbRep $name -> ERROR - Import from file $infile was not done. Invalid date/time field format in row $irowcount.");
close(FH); close(FH);
$dbh->rollback; $dbh->rollback;
Log3 ($name, 4, "DbRep $name -> BlockingCall impfile_Push finished"); Log3 ($name, 4, "DbRep $name -> BlockingCall impfile_Push finished");
@ -3843,7 +3846,7 @@ return;
<ul> <ul>
<b>dataset format: </b> "TIMESTAMP","DEVICE","TYPE","EVENT","READING","VALUE","UNIT" <br><br> <b>dataset format: </b> "TIMESTAMP","DEVICE","TYPE","EVENT","READING","VALUE","UNIT" <br><br>
# The fields "TIMESTAMP","DEVICE", "READING" have to be set. All other fields are optional. # The fields "TIMESTAMP","DEVICE","TYPE","EVENT","READING" and "VALUE" have to be set. The field "UNIT" is optional.
The file content will be imported transactional. That means all of the content will be imported or, in case of error, nothing of it. The file content will be imported transactional. That means all of the content will be imported or, in case of error, nothing of it.
If an extensive file will be used, DON'T set verbose = 5 because of a lot of datas would be written to the logfile in this case. If an extensive file will be used, DON'T set verbose = 5 because of a lot of datas would be written to the logfile in this case.
It could lead to blocking or overload FHEM ! <br><br> It could lead to blocking or overload FHEM ! <br><br>
@ -4328,7 +4331,7 @@ return;
<ul> <ul>
<b>Datensatzformat: </b> "TIMESTAMP","DEVICE","TYPE","EVENT","READING","VALUE","UNIT" <br><br> <b>Datensatzformat: </b> "TIMESTAMP","DEVICE","TYPE","EVENT","READING","VALUE","UNIT" <br><br>
# Die Felder "TIMESTAMP","DEVICE", "READING" müssen gesetzt sein. Alle anderen Felder sind optional. # Die Felder "TIMESTAMP","DEVICE","TYPE","EVENT","READING" und "VALUE" müssen gesetzt sein. Das Feld "UNIT" ist optional.
Der Fileinhalt wird als Transaktion importiert, d.h. es wird der Inhalt des gesamten Files oder, im Fehlerfall, kein Datensatz des Files importiert. Der Fileinhalt wird als Transaktion importiert, d.h. es wird der Inhalt des gesamten Files oder, im Fehlerfall, kein Datensatz des Files importiert.
Wird eine umfangreiche Datei mit vielen Datensätzen importiert sollte KEIN verbose=5 gesetzt werden. Es würden in diesem Fall sehr viele Sätze in Wird eine umfangreiche Datei mit vielen Datensätzen importiert sollte KEIN verbose=5 gesetzt werden. Es würden in diesem Fall sehr viele Sätze in
das Logfile geschrieben werden was FHEM blockieren oder überlasten könnte. <br><br> das Logfile geschrieben werden was FHEM blockieren oder überlasten könnte. <br><br>