mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-03-12 22:56:34 +00:00
93_DbLog: contrib 4.12.2
git-svn-id: https://svn.fhem.de/fhem/trunk@24193 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
f17af9843c
commit
99596ab771
@ -30,6 +30,8 @@ no if $] >= 5.017011, warnings => 'experimental::smartmatch';
|
|||||||
|
|
||||||
# Version History intern by DS_Starter:
|
# Version History intern by DS_Starter:
|
||||||
my %DbLog_vNotesIntern = (
|
my %DbLog_vNotesIntern = (
|
||||||
|
"4.12.2" => "08.04.2021 change standard splitting ",
|
||||||
|
"4.12.1" => "07.04.2021 improve escaping the pipe ",
|
||||||
"4.12.0" => "29.03.2021 new attributes SQLiteCacheSize, SQLiteJournalMode ",
|
"4.12.0" => "29.03.2021 new attributes SQLiteCacheSize, SQLiteJournalMode ",
|
||||||
"4.11.0" => "20.02.2021 new attr cacheOverflowThreshold, reading CacheOverflowLastNum/CacheOverflowLastState, ".
|
"4.11.0" => "20.02.2021 new attr cacheOverflowThreshold, reading CacheOverflowLastNum/CacheOverflowLastState, ".
|
||||||
"remove prototypes, new subs DbLog_writeFileIfCacheOverflow, DbLog_setReadingstate ",
|
"remove prototypes, new subs DbLog_writeFileIfCacheOverflow, DbLog_setReadingstate ",
|
||||||
@ -839,6 +841,7 @@ sub DbLog_Set {
|
|||||||
$outfile = $dir."cache_".$name."_".$now;
|
$outfile = $dir."cache_".$name."_".$now;
|
||||||
$out = ">$outfile";
|
$out = ">$outfile";
|
||||||
}
|
}
|
||||||
|
|
||||||
if(open(FH, $out)) {
|
if(open(FH, $out)) {
|
||||||
binmode (FH);
|
binmode (FH);
|
||||||
}
|
}
|
||||||
@ -927,6 +930,7 @@ sub DbLog_Set {
|
|||||||
}
|
}
|
||||||
elsif ($a[1] eq 'count') {
|
elsif ($a[1] eq 'count') {
|
||||||
$dbh = DbLog_ConnectNewDBH($hash);
|
$dbh = DbLog_ConnectNewDBH($hash);
|
||||||
|
|
||||||
if(!$dbh) {
|
if(!$dbh) {
|
||||||
Log3($name, 1, "DbLog $name: DBLog_Set - count - DB connect not possible");
|
Log3($name, 1, "DbLog $name: DBLog_Set - count - DB connect not possible");
|
||||||
return;
|
return;
|
||||||
@ -1077,7 +1081,7 @@ sub DbLog_ParseEvent {
|
|||||||
|
|
||||||
# split the event into reading, value and unit
|
# split the event into reading, value and unit
|
||||||
# "day-temp: 22.0 (Celsius)" -> "day-temp", "22.0 (Celsius)"
|
# "day-temp: 22.0 (Celsius)" -> "day-temp", "22.0 (Celsius)"
|
||||||
my @parts = split(/: /,$event);
|
my @parts = split(/: /,$event, 2);
|
||||||
$reading = shift @parts;
|
$reading = shift @parts;
|
||||||
if(@parts == 2) {
|
if(@parts == 2) {
|
||||||
$value = $parts[0];
|
$value = $parts[0];
|
||||||
@ -1431,7 +1435,7 @@ sub DbLog_Log {
|
|||||||
if($dev_name =~ m/^$re$/ || "$dev_name:$event" =~ m/^$re$/ || $DbLogSelectionMode eq 'Include') {
|
if($dev_name =~ m/^$re$/ || "$dev_name:$event" =~ m/^$re$/ || $DbLogSelectionMode eq 'Include') {
|
||||||
my $timestamp = $ts_0;
|
my $timestamp = $ts_0;
|
||||||
$timestamp = $dev_hash->{CHANGETIME}[$i] if(defined($dev_hash->{CHANGETIME}[$i]));
|
$timestamp = $dev_hash->{CHANGETIME}[$i] if(defined($dev_hash->{CHANGETIME}[$i]));
|
||||||
$event =~ s/\|/_ESC_/g; # escape Pipe "|"
|
$event =~ s/\|/_ESC_/gxs; # escape Pipe "|"
|
||||||
|
|
||||||
my @r = DbLog_ParseEvent($name,$dev_name, $dev_type, $event);
|
my @r = DbLog_ParseEvent($name,$dev_name, $dev_type, $event);
|
||||||
$reading = $r[0];
|
$reading = $r[0];
|
||||||
@ -1450,20 +1454,20 @@ sub DbLog_Log {
|
|||||||
if($exc) {
|
if($exc) {
|
||||||
$exc =~ s/[\s\n]/,/g;
|
$exc =~ s/[\s\n]/,/g;
|
||||||
@excldr = split(",",$exc);
|
@excldr = split(",",$exc);
|
||||||
foreach my $excl (@excldr) {
|
|
||||||
|
for my $excl (@excldr) {
|
||||||
($ds,$rd) = split("#",$excl);
|
($ds,$rd) = split("#",$excl);
|
||||||
@exdvs = devspec2array($ds);
|
@exdvs = devspec2array($ds);
|
||||||
if(@exdvs) {
|
if(@exdvs) {
|
||||||
# Log3 $name, 3, "DbLog $name -> excludeDevs: @exdvs";
|
for my $ed (@exdvs) {
|
||||||
foreach (@exdvs) {
|
|
||||||
if($rd) {
|
if($rd) {
|
||||||
if("$dev_name:$reading" =~ m/^$_:$rd$/) {
|
if("$dev_name:$reading" =~ m/^$ed:$rd$/) {
|
||||||
Log3 $name, 4, "DbLog $name -> Device:Reading \"$dev_name:$reading\" global excluded from logging by attribute \"excludeDevs\" " if($vb4show && !$hash->{HELPER}{".RUNNING_PID"});
|
Log3 $name, 4, "DbLog $name -> Device:Reading \"$dev_name:$reading\" global excluded from logging by attribute \"excludeDevs\" " if($vb4show && !$hash->{HELPER}{".RUNNING_PID"});
|
||||||
$next = 1;
|
$next = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if($dev_name =~ m/^$_$/) {
|
if($dev_name =~ m/^$ed$/) {
|
||||||
Log3 $name, 4, "DbLog $name -> Device \"$dev_name\" global excluded from logging by attribute \"excludeDevs\" " if($vb4show && !$hash->{HELPER}{".RUNNING_PID"});
|
Log3 $name, 4, "DbLog $name -> Device \"$dev_name\" global excluded from logging by attribute \"excludeDevs\" " if($vb4show && !$hash->{HELPER}{".RUNNING_PID"});
|
||||||
$next = 1;
|
$next = 1;
|
||||||
}
|
}
|
||||||
@ -1485,24 +1489,21 @@ sub DbLog_Log {
|
|||||||
|
|
||||||
$DoIt = 1 if($DbLogSelectionMode =~ m/Exclude/ );
|
$DoIt = 1 if($DbLogSelectionMode =~ m/Exclude/ );
|
||||||
|
|
||||||
if($DbLogExclude && $DbLogSelectionMode =~ m/Exclude/) {
|
if($DbLogExclude && $DbLogSelectionMode =~ m/Exclude/) { # Bsp: "(temperature|humidity):300,battery:3600:force"
|
||||||
# Bsp: "(temperature|humidity):300,battery:3600:force"
|
|
||||||
my @v1 = split(/,/, $DbLogExclude);
|
my @v1 = split(/,/, $DbLogExclude);
|
||||||
|
|
||||||
for (my $i=0; $i<int(@v1); $i++) {
|
for (my $i=0; $i<int(@v1); $i++) {
|
||||||
my @v2 = split(/:/, $v1[$i]);
|
my @v2 = split(/:/, $v1[$i]);
|
||||||
$DoIt = 0 if(!$v2[1] && $reading =~ m,^$v2[0]$,); # Reading matcht auf Regexp, kein MinIntervall angegeben
|
$DoIt = 0 if(!$v2[1] && $reading =~ m,^$v2[0]$,); # Reading matcht auf Regexp, kein MinIntervall angegeben
|
||||||
|
|
||||||
if(($v2[1] && $reading =~ m,^$v2[0]$,) && ($v2[1] =~ m/^(\d+)$/)) {
|
if(($v2[1] && $reading =~ m,^$v2[0]$,) && ($v2[1] =~ m/^(\d+)$/)) { # Regexp matcht und MinIntervall ist angegeben
|
||||||
#Regexp matcht und MinIntervall ist angegeben
|
|
||||||
my $lt = $defs{$dev_hash->{NAME}}{Helper}{DBLOG}{$reading}{$hash->{NAME}}{TIME};
|
my $lt = $defs{$dev_hash->{NAME}}{Helper}{DBLOG}{$reading}{$hash->{NAME}}{TIME};
|
||||||
my $lv = $defs{$dev_hash->{NAME}}{Helper}{DBLOG}{$reading}{$hash->{NAME}}{VALUE};
|
my $lv = $defs{$dev_hash->{NAME}}{Helper}{DBLOG}{$reading}{$hash->{NAME}}{VALUE};
|
||||||
$lt = 0 if(!$lt);
|
$lt = 0 if(!$lt);
|
||||||
$lv = "" if(!defined $lv); # Forum: #100344
|
$lv = "" if(!defined $lv); # Forum: #100344
|
||||||
$force = ($v2[2] && $v2[2] =~ /force/i) ? 1 : 0; # Forum: #97148
|
$force = ($v2[2] && $v2[2] =~ /force/i) ? 1 : 0; # Forum: #97148
|
||||||
|
|
||||||
if(($now-$lt < $v2[1]) && ($lv eq $value || $force)) {
|
if(($now-$lt < $v2[1]) && ($lv eq $value || $force)) { # innerhalb MinIntervall und LastValue=Value
|
||||||
# innerhalb MinIntervall und LastValue=Value
|
|
||||||
$DoIt = 0;
|
$DoIt = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1519,16 +1520,14 @@ sub DbLog_Log {
|
|||||||
my @v2 = split(/:/, $v1[$i]);
|
my @v2 = split(/:/, $v1[$i]);
|
||||||
$DoIt = 1 if($reading =~ m,^$v2[0]$,); # Reading matcht auf Regexp
|
$DoIt = 1 if($reading =~ m,^$v2[0]$,); # Reading matcht auf Regexp
|
||||||
|
|
||||||
if(($v2[1] && $reading =~ m,^$v2[0]$,) && ($v2[1] =~ m/^(\d+)$/)) {
|
if(($v2[1] && $reading =~ m,^$v2[0]$,) && ($v2[1] =~ m/^(\d+)$/)) { # Regexp matcht und MinIntervall ist angegeben
|
||||||
#Regexp matcht und MinIntervall ist angegeben
|
|
||||||
my $lt = $defs{$dev_hash->{NAME}}{Helper}{DBLOG}{$reading}{$hash->{NAME}}{TIME};
|
my $lt = $defs{$dev_hash->{NAME}}{Helper}{DBLOG}{$reading}{$hash->{NAME}}{TIME};
|
||||||
my $lv = $defs{$dev_hash->{NAME}}{Helper}{DBLOG}{$reading}{$hash->{NAME}}{VALUE};
|
my $lv = $defs{$dev_hash->{NAME}}{Helper}{DBLOG}{$reading}{$hash->{NAME}}{VALUE};
|
||||||
$lt = 0 if(!$lt);
|
$lt = 0 if(!$lt);
|
||||||
$lv = "" if(!defined $lv); # Forum: #100344
|
$lv = "" if(!defined $lv); # Forum: #100344
|
||||||
$force = ($v2[2] && $v2[2] =~ /force/i)?1:0; # Forum: #97148
|
$force = ($v2[2] && $v2[2] =~ /force/i)?1:0; # Forum: #97148
|
||||||
|
|
||||||
if(($now-$lt < $v2[1]) && ($lv eq $value || $force)) {
|
if(($now-$lt < $v2[1]) && ($lv eq $value || $force)) { # innerhalb MinIntervall und LastValue=Value
|
||||||
# innerhalb MinIntervall und LastValue=Value
|
|
||||||
$DoIt = 0;
|
$DoIt = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1562,23 +1561,27 @@ sub DbLog_Log {
|
|||||||
eval $DbLogValueFn;
|
eval $DbLogValueFn;
|
||||||
Log3 $name, 2, "DbLog $name -> error device \"$dev_name\" specific DbLogValueFn: ".$@ if($@);
|
Log3 $name, 2, "DbLog $name -> error device \"$dev_name\" specific DbLogValueFn: ".$@ if($@);
|
||||||
|
|
||||||
if($IGNORE) {
|
if($IGNORE) { # aktueller Event wird nicht geloggt wenn $IGNORE=1 gesetzt
|
||||||
# aktueller Event wird nicht geloggt wenn $IGNORE=1 gesetzt
|
|
||||||
$defs{$dev_name}{Helper}{DBLOG}{$reading}{$hash->{NAME}}{TIME} = $lastt if($lastt); # patch Forum:#111423
|
$defs{$dev_name}{Helper}{DBLOG}{$reading}{$hash->{NAME}}{TIME} = $lastt if($lastt); # patch Forum:#111423
|
||||||
$defs{$dev_name}{Helper}{DBLOG}{$reading}{$hash->{NAME}}{VALUE} = $lastv if(defined $lastv);
|
$defs{$dev_name}{Helper}{DBLOG}{$reading}{$hash->{NAME}}{VALUE} = $lastv if(defined $lastv);
|
||||||
Log3 $hash->{NAME}, 4, "DbLog $name -> Event ignored by device \"$dev_name\" specific DbLogValueFn - TS: $timestamp, Device: $dev_name, Type: $dev_type, Event: $event, Reading: $reading, Value: $value, Unit: $unit"
|
|
||||||
if($vb4show && !$hash->{HELPER}{".RUNNING_PID"});
|
if($vb4show && !$hash->{HELPER}{".RUNNING_PID"}) {
|
||||||
|
Log3 $hash->{NAME}, 4, "DbLog $name -> Event ignored by device \"$dev_name\" specific DbLogValueFn - TS: $timestamp, Device: $dev_name, Type: $dev_type, Event: $event, Reading: $reading, Value: $value, Unit: $unit";
|
||||||
|
}
|
||||||
|
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
|
|
||||||
my ($yyyy, $mm, $dd, $hh, $min, $sec) = ($TIMESTAMP =~ /(\d+)-(\d+)-(\d+) (\d+):(\d+):(\d+)/);
|
my ($yyyy, $mm, $dd, $hh, $min, $sec) = ($TIMESTAMP =~ /(\d+)-(\d+)-(\d+) (\d+):(\d+):(\d+)/);
|
||||||
eval { my $epoch_seconds_begin = timelocal($sec, $min, $hh, $dd, $mm-1, $yyyy-1900); };
|
eval { my $epoch_seconds_begin = timelocal($sec, $min, $hh, $dd, $mm-1, $yyyy-1900); };
|
||||||
|
|
||||||
if (!$@) {
|
if (!$@) {
|
||||||
$timestamp = $TIMESTAMP;
|
$timestamp = $TIMESTAMP;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Log3 ($name, 2, "DbLog $name -> TIMESTAMP got from DbLogValueFn in $dev_name is invalid: $TIMESTAMP");
|
Log3 ($name, 2, "DbLog $name -> TIMESTAMP got from DbLogValueFn in $dev_name is invalid: $TIMESTAMP");
|
||||||
}
|
}
|
||||||
|
|
||||||
$reading = $READING if($READING ne '');
|
$reading = $READING if($READING ne '');
|
||||||
$value = $VALUE if(defined $VALUE);
|
$value = $VALUE if(defined $VALUE);
|
||||||
$unit = $UNIT if(defined $UNIT);
|
$unit = $UNIT if(defined $UNIT);
|
||||||
@ -1601,16 +1604,20 @@ sub DbLog_Log {
|
|||||||
eval $value_fn;
|
eval $value_fn;
|
||||||
Log3 $name, 2, "DbLog $name -> error valueFn: ".$@ if($@);
|
Log3 $name, 2, "DbLog $name -> error valueFn: ".$@ if($@);
|
||||||
|
|
||||||
if($IGNORE) {
|
if($IGNORE) { # aktueller Event wird nicht geloggt wenn $IGNORE=1 gesetzt
|
||||||
# aktueller Event wird nicht geloggt wenn $IGNORE=1 gesetzt
|
|
||||||
$defs{$dev_name}{Helper}{DBLOG}{$reading}{$hash->{NAME}}{TIME} = $lastt if($lastt); # patch Forum:#111423
|
$defs{$dev_name}{Helper}{DBLOG}{$reading}{$hash->{NAME}}{TIME} = $lastt if($lastt); # patch Forum:#111423
|
||||||
$defs{$dev_name}{Helper}{DBLOG}{$reading}{$hash->{NAME}}{VALUE} = $lastv if(defined $lastv);
|
$defs{$dev_name}{Helper}{DBLOG}{$reading}{$hash->{NAME}}{VALUE} = $lastv if(defined $lastv);
|
||||||
Log3 $hash->{NAME}, 4, "DbLog $name -> Event ignored by valueFn - TS: $timestamp, Device: $dev_name, Type: $dev_type, Event: $event, Reading: $reading, Value: $value, Unit: $unit"
|
|
||||||
if($vb4show && !$hash->{HELPER}{".RUNNING_PID"});
|
if($vb4show && !$hash->{HELPER}{".RUNNING_PID"}) {
|
||||||
|
Log3 $hash->{NAME}, 4, "DbLog $name -> Event ignored by valueFn - TS: $timestamp, Device: $dev_name, Type: $dev_type, Event: $event, Reading: $reading, Value: $value, Unit: $unit";
|
||||||
|
}
|
||||||
|
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
|
|
||||||
my ($yyyy, $mm, $dd, $hh, $min, $sec) = ($TIMESTAMP =~ /(\d+)-(\d+)-(\d+) (\d+):(\d+):(\d+)/);
|
my ($yyyy, $mm, $dd, $hh, $min, $sec) = ($TIMESTAMP =~ /(\d+)-(\d+)-(\d+) (\d+):(\d+):(\d+)/);
|
||||||
eval { my $epoch_seconds_begin = timelocal($sec, $min, $hh, $dd, $mm-1, $yyyy-1900); };
|
eval { my $epoch_seconds_begin = timelocal($sec, $min, $hh, $dd, $mm-1, $yyyy-1900); };
|
||||||
|
|
||||||
if (!$@) {
|
if (!$@) {
|
||||||
$timestamp = $TIMESTAMP;
|
$timestamp = $TIMESTAMP;
|
||||||
}
|
}
|
||||||
@ -1660,8 +1667,7 @@ sub DbLog_Log {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
if(!$async) {
|
if(!$async) {
|
||||||
if(@row_array) {
|
if(@row_array) { # synchoner Mode
|
||||||
# synchoner Mode
|
|
||||||
return if($hash->{HELPER}{REOPEN_RUNS}); # return wenn "reopen" mit Ablaufzeit gestartet ist
|
return if($hash->{HELPER}{REOPEN_RUNS}); # return wenn "reopen" mit Ablaufzeit gestartet ist
|
||||||
|
|
||||||
my $error = DbLog_Push($hash, $vb4show, @row_array);
|
my $error = DbLog_Push($hash, $vb4show, @row_array);
|
||||||
@ -1675,8 +1681,8 @@ sub DbLog_Log {
|
|||||||
|
|
||||||
# Notify-Routine Laufzeit ermitteln
|
# Notify-Routine Laufzeit ermitteln
|
||||||
$net = tv_interval($nst);
|
$net = tv_interval($nst);
|
||||||
|
}
|
||||||
} else {
|
else {
|
||||||
CancelDelayedShutdown($name) if($hash->{HELPER}{SHUTDOWNSEQ});
|
CancelDelayedShutdown($name) if($hash->{HELPER}{SHUTDOWNSEQ});
|
||||||
Log3 ($name, 2, "DbLog $name - no data for last database write cycle") if(delete $hash->{HELPER}{SHUTDOWNSEQ});
|
Log3 ($name, 2, "DbLog $name - no data for last database write cycle") if(delete $hash->{HELPER}{SHUTDOWNSEQ});
|
||||||
}
|
}
|
||||||
@ -1782,8 +1788,7 @@ sub DbLog_Push {
|
|||||||
else {
|
else {
|
||||||
$dbh = $hash->{DBHP};
|
$dbh = $hash->{DBHP};
|
||||||
eval {
|
eval {
|
||||||
if ( !$dbh || not $dbh->ping ) {
|
if ( !$dbh || not $dbh->ping ) { # DB Session dead, try to reopen now !
|
||||||
# DB Session dead, try to reopen now !
|
|
||||||
DbLog_ConnectPush($hash,1);
|
DbLog_ConnectPush($hash,1);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -1799,8 +1804,7 @@ sub DbLog_Push {
|
|||||||
$dbh->{RaiseError} = 1;
|
$dbh->{RaiseError} = 1;
|
||||||
$dbh->{PrintError} = 0;
|
$dbh->{PrintError} = 0;
|
||||||
|
|
||||||
if($tl) {
|
if($tl) { # Tracelevel setzen
|
||||||
# Tracelevel setzen
|
|
||||||
$dbh->{TraceLevel} = "$tl|$tf";
|
$dbh->{TraceLevel} = "$tl|$tf";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1835,7 +1839,7 @@ sub DbLog_Push {
|
|||||||
|
|
||||||
foreach my $row (@row_array) {
|
foreach my $row (@row_array) {
|
||||||
my @a = split("\\|",$row);
|
my @a = split("\\|",$row);
|
||||||
s/_ESC_/\|/g for @a; # escaped Pipe return to "|"
|
s/_ESC_/\|/gxs for @a; # escaped Pipe return to "|"
|
||||||
push(@timestamp, "$a[0]");
|
push(@timestamp, "$a[0]");
|
||||||
push(@device, "$a[1]");
|
push(@device, "$a[1]");
|
||||||
push(@type, "$a[2]");
|
push(@type, "$a[2]");
|
||||||
@ -1874,7 +1878,7 @@ sub DbLog_Push {
|
|||||||
no warnings 'uninitialized';
|
no warnings 'uninitialized';
|
||||||
foreach my $row (@row_array) {
|
foreach my $row (@row_array) {
|
||||||
my @a = split("\\|",$row);
|
my @a = split("\\|",$row);
|
||||||
s/_ESC_/\|/g for @a; # escaped Pipe return to "|"
|
s/_ESC_/\|/gxs for @a; # escaped Pipe return to "|"
|
||||||
Log3 $hash->{NAME}, 5, "DbLog $name -> processing event Timestamp: $a[0], Device: $a[1], Type: $a[2], Event: $a[3], Reading: $a[4], Value: $a[5], Unit: $a[6]";
|
Log3 $hash->{NAME}, 5, "DbLog $name -> processing event Timestamp: $a[0], Device: $a[1], Type: $a[2], Event: $a[3], Reading: $a[4], Value: $a[5], Unit: $a[6]";
|
||||||
$a[3] =~ s/'/''/g; # escape ' with ''
|
$a[3] =~ s/'/''/g; # escape ' with ''
|
||||||
$a[5] =~ s/'/''/g; # escape ' with ''
|
$a[5] =~ s/'/''/g; # escape ' with ''
|
||||||
@ -2571,7 +2575,7 @@ sub DbLog_PushAsync {
|
|||||||
no warnings 'uninitialized';
|
no warnings 'uninitialized';
|
||||||
foreach my $row (@row_array) {
|
foreach my $row (@row_array) {
|
||||||
my @a = split("\\|",$row);
|
my @a = split("\\|",$row);
|
||||||
s/_ESC_/\|/g for @a; # escaped Pipe return to "|"
|
s/_ESC_/\|/gxs for @a; # escaped Pipe return to "|"
|
||||||
push(@timestamp, "$a[0]");
|
push(@timestamp, "$a[0]");
|
||||||
push(@device, "$a[1]");
|
push(@device, "$a[1]");
|
||||||
push(@type, "$a[2]");
|
push(@type, "$a[2]");
|
||||||
@ -2608,7 +2612,7 @@ sub DbLog_PushAsync {
|
|||||||
no warnings 'uninitialized';
|
no warnings 'uninitialized';
|
||||||
foreach my $row (@row_array) {
|
foreach my $row (@row_array) {
|
||||||
my @a = split("\\|",$row);
|
my @a = split("\\|",$row);
|
||||||
s/_ESC_/\|/g for @a; # escaped Pipe return to "|"
|
s/_ESC_/\|/gxs for @a; # escaped Pipe return to "|"
|
||||||
Log3 $hash->{NAME}, 5, "DbLog $name -> processing event Timestamp: $a[0], Device: $a[1], Type: $a[2], Event: $a[3], Reading: $a[4], Value: $a[5], Unit: $a[6]";
|
Log3 $hash->{NAME}, 5, "DbLog $name -> processing event Timestamp: $a[0], Device: $a[1], Type: $a[2], Event: $a[3], Reading: $a[4], Value: $a[5], Unit: $a[6]";
|
||||||
$a[3] =~ s/'/''/g; # escape ' with ''
|
$a[3] =~ s/'/''/g; # escape ' with ''
|
||||||
$a[5] =~ s/'/''/g; # escape ' with ''
|
$a[5] =~ s/'/''/g; # escape ' with ''
|
||||||
@ -2868,7 +2872,7 @@ sub DbLog_PushAsync {
|
|||||||
else {
|
else {
|
||||||
Log3 $hash->{NAME}, 2, "DbLog $name -> WARNING - only ".($ceti-$nins_hist)." of $ceti events inserted into table $history";
|
Log3 $hash->{NAME}, 2, "DbLog $name -> WARNING - only ".($ceti-$nins_hist)." of $ceti events inserted into table $history";
|
||||||
}
|
}
|
||||||
s/\|/_ESC_/g for @n2hist; # escape Pipe "|"
|
s/\|/_ESC_/gxs for @n2hist; # escape Pipe "|"
|
||||||
$rowlist = join('§', @n2hist);
|
$rowlist = join('§', @n2hist);
|
||||||
$rowlist = encode_base64($rowlist,"");
|
$rowlist = encode_base64($rowlist,"");
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user