From 8e091bc8316f858dd83862ff8e70fbbbb65b34a4 Mon Sep 17 00:00:00 2001 From: DS_Starter Date: Tue, 19 Dec 2017 21:11:51 +0000 Subject: [PATCH] 93_DbLog: V3.4.0, importCacheFile, addCacheLine use char filter (switch it on with attribute useCharfilter) git-svn-id: https://svn.fhem.de/fhem/trunk@15648 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/CHANGED | 2 ++ fhem/FHEM/93_DbLog.pm | 24 ++++++++++++++++-------- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/fhem/CHANGED b/fhem/CHANGED index 99b57dfc6..cdd4ff82f 100644 --- a/fhem/CHANGED +++ b/fhem/CHANGED @@ -1,5 +1,7 @@ # 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. + - change: 93_DbLog: V3.4.0, importCacheFile, addCacheLine use char filter + (switch it on with attribute useCharfilter) - feature: 98_GOOGLECAST: support displaying websites on Chromecast pychromecast > 1.0.0 needed support skip/rewind diff --git a/fhem/FHEM/93_DbLog.pm b/fhem/FHEM/93_DbLog.pm index 6853ff9b5..52929315f 100644 --- a/fhem/FHEM/93_DbLog.pm +++ b/fhem/FHEM/93_DbLog.pm @@ -16,6 +16,7 @@ ############################################################################################################################################ # Versions History done by DS_Starter & DeeSPe: # +# 3.5.0 18.12.2017 importCacheFile, addCacheLine uses useCharfilter option, filter only $event by charfilter # 3.4.0 10.12.2017 avoid print out {RUNNING_PID} by "list device" # 3.3.0 07.12.2017 avoid print out the content of cache by "list device" # 3.2.0 06.12.2017 change attribute "autocommit" to "commitMode", activate choice of autocommit/transaction in logging @@ -170,7 +171,7 @@ use Blocking; use Time::HiRes qw(gettimeofday tv_interval); use Encode qw(encode_utf8); -my $DbLogVersion = "3.4.0"; +my $DbLogVersion = "3.5.0"; my %columns = ("DEVICE" => 64, "TYPE" => 64, @@ -585,6 +586,7 @@ sub DbLog_Set($@) { $aa .= "$k "; } chop($aa); #letztes Leerzeichen entfernen + $aa = DbLog_charfilter($aa) if(AttrVal($name, "useCharfilter",0)); my ($i_timestamp, $i_dev, $i_type, $i_evt, $i_reading, $i_val, $i_unit) = split("\\|",$aa); if($i_timestamp !~ /^(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})$/ || !$i_dev || !$i_reading) { @@ -661,7 +663,9 @@ sub DbLog_Set($@) { return "could not open ".$infile.": ".$!; } while () { - push(@row_array, $_); + my $row = $_; + $row = DbLog_charfilter($row) if(AttrVal($name, "useCharfilter",0)); + push(@row_array, $row); $crows++; } close(FH); @@ -677,8 +681,8 @@ sub DbLog_Set($@) { Log3($name, 2, "DbLog $name: cachefile $infile couldn't be renamed after import !"); } readingsSingleUpdate($hash, "lastCachefile", $infile." import successful", 1); - readingsSingleUpdate($hash, "state", $crows." cache rows imported from ".$infile, 1); - Log3($name, 3, "DbLog $name: $crows cache rows imported from $infile."); + readingsSingleUpdate($hash, "state", $crows." cache rows processed from ".$infile, 1); + Log3($name, 3, "DbLog $name: $crows cache rows processed from $infile."); } } else { readingsSingleUpdate($hash, "state", "no rows in ".$infile, 1); @@ -1179,6 +1183,7 @@ sub DbLog_Log($$) { for (my $i = 0; $i < $max; $i++) { my $event = $events->[$i]; $event = "" if(!defined($event)); + $event = DbLog_charfilter($event) if(AttrVal($name, "useCharfilter",0)); Log3 $name, 4, "DbLog $name -> check Device: $dev_name , Event: $event" if($vb4show && !$hash->{HELPER}{".RUNNING_PID"}); if($dev_name =~ m/^$re$/ || "$dev_name:$event" =~ m/^$re$/ || $DbLogSelectionMode eq 'Include') { @@ -1285,7 +1290,6 @@ sub DbLog_Log($$) { ($dev_name,$dev_type,$event,$reading,$value,$unit) = DbLog_cutCol($hash,$dev_name,$dev_type,$event,$reading,$value,$unit); my $row = ($timestamp."|".$dev_name."|".$dev_type."|".$event."|".$reading."|".$value."|".$unit); - $row = DbLog_charfilter($row) if(AttrVal($name, "useCharfilter",0)); Log3 $hash->{NAME}, 4, "DbLog $name -> added event - Timestamp: $timestamp, Device: $dev_name, Type: $dev_type, Event: $event, Reading: $reading, Value: $value, Unit: $unit" if($vb4show && !$hash->{HELPER}{".RUNNING_PID"}); @@ -3507,7 +3511,7 @@ sub DbLog_charfilter ($) { $txt =~ s/Ö/Oe/g; $txt =~ s/Ü/Ue/g; $txt =~ s/€/EUR/g; - $txt =~ tr/ A-Za-z0-9!"#$%&'()*+,-.\/:;<=>?@[\]^_`{|}~//cd; + $txt =~ tr/ A-Za-z0-9!"#$%&'()*+,-.\/:;<=>?@[\\]^_`{|}~//cd; return($txt); } @@ -5650,7 +5654,9 @@ sub checkUsePK ($$){ attr <device> useCharfilter [0|1]
- if set, only ASCII characters from 32 to 126 are accepted in dataset. mutated vowel and "€" are transcribed. (default: 0).
+ If set, only ASCII characters from 32 to 126 are accepted in event. + That are the characters " A-Za-z0-9!"#$%&'()*+,-.\/:;<=>?@[\\]^_`{|}~" .
+ Mutated vowel and "€" are transcribed (e.g. ä to ae). (default: 0).

@@ -6643,7 +6649,9 @@ sub checkUsePK ($$){ attr <device> useCharfilter [0|1]
- wenn gesetzt, werden nur ASCII Zeichen von 32 bis 126 im Datensatz akzeptiert. Umlaute und "€" werden umgesetzt. (default: 0).
+ wenn gesetzt, werden nur ASCII Zeichen von 32 bis 126 im Event akzeptiert. (default: 0)
+ Das sind die Zeichen " A-Za-z0-9!"#$%&'()*+,-.\/:;<=>?@[\\]^_`{|}~".
+ Umlaute und "€" werden umgesetzt (z.B. ä nach ae, € nach EUR).