diff --git a/fhem/CHANGED b/fhem/CHANGED index 40faa7daf..d208630cc 100644 --- a/fhem/CHANGED +++ b/fhem/CHANGED @@ -1,5 +1,8 @@ # 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: new version 2.16.10, syntax of addlog command changed, + reading userCommandResult contains "no result" if the + db interface delivers undef - feature: 93_DbRep: new version 4.14.0, new command sqlCmd to execute arbitrary sql commands (thanks viegener for input), DbRep provides an userExit interface to execute diff --git a/fhem/FHEM/93_DbLog.pm b/fhem/FHEM/93_DbLog.pm index a9a64c33e..e0550c0a7 100644 --- a/fhem/FHEM/93_DbLog.pm +++ b/fhem/FHEM/93_DbLog.pm @@ -16,6 +16,13 @@ ############################################################################################################################################ # Versions History done by DS_Starter & DeeSPe: # +# 2.16.10 15.05.2017 commandref revised +# 2.16.9.1 11.05.2017 set userCommand changed - +# Forum: https://forum.fhem.de/index.php/topic,71808.msg633607.html#msg633607 +# 2.16.9 07.05.2017 addlog syntax changed to "addLog devspec:Reading [Value]" +# 2.16.8 06.05.2017 in valueFN $VALUE and $UNIT can now be set to '' or 0 +# 2.16.7 20.04.2017 fix $now at addLog +# 2.16.6 18.04.2017 AddLog set lasttime, lastvalue of dev_name, dev_reading # 2.16.5 16.04.2017 checkUsePK changed again, new attribute noSupportPK # 2.16.4 15.04.2017 commandref completed, checkUsePK changed (@usepkh = "", @usepkc = "") # 2.16.3 07.04.2017 evaluate reading in DbLog_AddLog as regular expression @@ -121,7 +128,7 @@ use Data::Dumper; use Blocking; use Time::HiRes qw(gettimeofday tv_interval); -my $DbLogVersion = "2.16.5"; +my $DbLogVersion = "2.16.10"; my %columns = ("DEVICE" => 64, "TYPE" => 64, @@ -443,8 +450,8 @@ sub DbLog_Set($@) { } } elsif ($a[1] eq 'addLog') { - unless ($a[2]) { return " The argument of $a[1] is not valid. Use a pair of ,reading,[value] you want to create a log entry from";} - DbLog_AddLog($hash,$a[2]); + unless ($a[2]) { return " The argument of $a[1] is not valid. Use a pair of ,reading [value] you want to create a log entry from";} + DbLog_AddLog($hash,$a[2],$a[3]); } elsif ($a[1] eq 'reopen') { if ($dbh) { @@ -665,7 +672,9 @@ sub DbLog_Set($@) { $sql = join(" ",@cmd); readingsSingleUpdate($hash, 'userCommand', $sql, 1); $c = $dbh->selectrow_array($sql); - readingsSingleUpdate($hash, 'userCommandResult', $c ,1); + my $res = (defined($c))?$c:"no result"; + Log3($name, 4, "DbLog $name: DBLog_Set - userCommand - result: $res"); + readingsSingleUpdate($hash, 'userCommandResult', $res ,1); $dbh->disconnect(); InternalTimer(gettimeofday()+5, "DbLog_execmemcache", $hash, 0); @@ -1168,8 +1177,8 @@ sub DbLog_Log($$) { $dev_name = $DEVICE if($DEVICE ne ''); $dev_type = $DEVICETYPE if($DEVICETYPE ne ''); $reading = $READING if($READING ne ''); - $value = $VALUE if($VALUE ne ''); - $unit = $UNIT if($UNIT ne ''); + $value = $VALUE if(defined $VALUE); + $unit = $UNIT if(defined $UNIT); } # Daten auf maximale Länge beschneiden @@ -2673,8 +2682,8 @@ DbLog_Get($@) # Addlog - einfügen des Readingwertes eines gegebenen Devices # ######################################################################################### -sub DbLog_AddLog($$) { - my ($hash,$str)= @_; +sub DbLog_AddLog($$$) { + my ($hash,$devrdspec,$value)= @_; my $name = $hash->{NAME}; my $async = AttrVal($name, "asyncMode", undef); my $value_fn = AttrVal( $name, "valueFn", "" ); @@ -2691,8 +2700,13 @@ sub DbLog_AddLog($$) { $value_fn = ''; } - my $ts = TimeNow(); - my ($devspec,$rdspec,$value) = split(",",$str); + my $ts = TimeNow(); + my $now = gettimeofday(); + + my $rdspec = (split ":",$devrdspec)[-1]; + my @dc = split(":",$devrdspec); + pop @dc; + my $devspec = join(':',@dc); my @exdvs = devspec2array($devspec); foreach (@exdvs) { @@ -2731,6 +2745,9 @@ sub DbLog_AddLog($$) { if(!defined $read_val) {$read_val = "";} if(!defined $ut || $ut eq "") {$ut = AttrVal("$dev_name", "unit", "");} $event = "addLog"; + + $defs{$dev_name}{Helper}{DBLOG}{$dev_reading}{$hash->{NAME}}{TIME} = $now; + $defs{$dev_name}{Helper}{DBLOG}{$dev_reading}{$hash->{NAME}}{VALUE} = $read_val; # Anwender spezifische Funktion anwenden if($value_fn ne '') { @@ -2751,8 +2768,8 @@ sub DbLog_AddLog($$) { $dev_name = $DEVICE if($DEVICE ne ''); $dev_type = $DEVICETYPE if($DEVICETYPE ne ''); $dev_reading = $READING if($READING ne ''); - $read_val = $VALUE if($VALUE ne ''); - $ut = $UNIT if($UNIT ne ''); + $read_val = $VALUE if(defined $VALUE); + $ut = $UNIT if(defined $UNIT); } # Daten auf maximale Länge beschneiden @@ -4051,7 +4068,7 @@ sub checkUsePK ($$){ Set
@@ -4780,7 +4802,7 @@ sub checkUsePK ($$){ Set
set <name> reduceLogNbl <n> [average[=day]] [exclude=deviceRegExp1:ReadingRegExp1,deviceRegExp2:ReadingRegExp2,...]

-