2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-04-22 20:24:36 +00:00

93_DbLog: contrib 5.5.7

git-svn-id: https://svn.fhem.de/fhem/trunk@26896 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
nasseeder1 2022-12-25 10:31:59 +00:00
parent 5e09349004
commit 045891d8f2

View File

@ -1368,10 +1368,11 @@ return;
# $hash is my entry, $dev_hash is the entry of the changed device
sub DbLog_Log {
my ($hash, $dev_hash) = @_;
my $name = $hash->{NAME};
my $dev_name = $dev_hash->{NAME};
my $dev_type = uc($dev_hash->{TYPE});
my $hash = shift;
my $dev_hash = shift;
my $name = $hash->{NAME};
my $dev_name = $dev_hash->{NAME};
my $dev_type = uc($dev_hash->{TYPE});
return if(IsDisabled($name) || !$hash->{HELPER}{COLSET} || $init_done != 1);
@ -1382,10 +1383,10 @@ sub DbLog_Log {
my $events = deviceEvents($dev_hash, AttrVal($name, "addStateEvent", 1));
return if(!$events);
my $max = int(@{$events});
my $max = int(@{$events});
my $vb4show = 0;
my @vb4devs = split ",", AttrVal ($name, 'verbose4Devs', ''); # verbose4 Logs nur für Devices in Attr "verbose4Devs"
if (!@vb4devs) {
$vb4show = 1;
}
@ -1411,8 +1412,7 @@ sub DbLog_Log {
my ($event,$reading,$value,$unit,$err,$DoIt);
my $memcount = 0;
my $memcount = 0;
my $re = $hash->{REGEXP};
my $ts_0 = TimeNow(); # timestamp in SQL format YYYY-MM-DD hh:mm:ss
my $now = gettimeofday(); # get timestamp in seconds since epoch
@ -1527,7 +1527,6 @@ sub DbLog_Log {
# entsprechend unterschiedlich vorbelegt sein.
# keine Readings loggen die in DbLogExclude explizit ausgeschlossen sind
$DoIt = 0;
$DoIt = 1 if($DbLogSelectionMode =~ m/Exclude/ );
if($DbLogExclude && $DbLogSelectionMode =~ m/Exclude/) { # Bsp: "(temperature|humidity):300,battery:3600:force"
@ -1607,7 +1606,9 @@ sub DbLog_Log {
my $CN = " ";
eval $DbLogValueFn;
Log3 ($name, 2, "DbLog $name - error device \"$dev_name\" specific DbLogValueFn: ".$@) if($@);
if($@) {
Log3 ($name, 2, "DbLog $name - error device \"$dev_name\" specific DbLogValueFn: ".$@);
}
if($IGNORE) { # aktueller Event wird nicht geloggt wenn $IGNORE=1 gesetzt
$defs{$dev_name}{Helper}{DBLOG}{$reading}{$name}{TIME} = $lastt if($lastt); # patch Forum:#111423
@ -1621,8 +1622,8 @@ sub DbLog_Log {
}
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); };
if (!$@) {
$timestamp = $TIMESTAMP;
}
@ -1649,7 +1650,9 @@ sub DbLog_Log {
my $CN = " ";
eval $value_fn;
Log3 ($name, 2, "DbLog $name - error valueFn: ".$@) if($@);
if($@) {
Log3 ($name, 2, "DbLog $name - error valueFn: ".$@);
}
if($IGNORE) { # aktueller Event wird nicht geloggt wenn $IGNORE=1 gesetzt
$defs{$dev_name}{Helper}{DBLOG}{$reading}{$name}{TIME} = $lastt if($lastt); # patch Forum:#111423
@ -1663,8 +1666,8 @@ sub DbLog_Log {
}
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); };
if (!$@) {
$timestamp = $TIMESTAMP;
}
@ -1693,41 +1696,46 @@ sub DbLog_Log {
}
}
};
if (!$memcount) {
$net = tv_interval($nst); # Notify-Routine Laufzeit ermitteln
if(AttrVal($name, 'showNotifyTime', 0)) {
readingsSingleUpdate($hash, 'notify_processing_time', sprintf("%.4f",$net), 1);
}
return;
}
if($async) { # asynchoner non-blocking Mode
if($memcount) {
readingsSingleUpdate($hash, 'CacheUsage', $memcount, ($ce == 1 ? 1 : 0)) if($DoIt);
readingsSingleUpdate($hash, 'CacheUsage', $memcount, ($ce == 1 ? 1 : 0)) if($DoIt);
if($memcount >= $clim) { # asynchrone Schreibroutine aufrufen wenn Füllstand des Cache erreicht ist
my $lmlr = $hash->{HELPER}{LASTLIMITRUNTIME};
my $syncival = AttrVal($name, "syncInterval", 30);
if($memcount >= $clim) { # asynchrone Schreibroutine aufrufen wenn Füllstand des Cache erreicht ist
my $lmlr = $hash->{HELPER}{LASTLIMITRUNTIME};
my $syncival = AttrVal($name, "syncInterval", 30);
if(!$lmlr || gettimeofday() > $lmlr+($syncival/2)) {
if(!$lmlr || gettimeofday() > $lmlr+($syncival/2)) {
Log3 ($name, 4, "DbLog $name - Number of cache entries reached cachelimit $clim - start database sync.");
Log3 ($name, 4, "DbLog $name - Number of cache entries reached cachelimit $clim - start database sync.");
DbLog_execMemCacheAsync ($hash);
DbLog_execMemCacheAsync ($hash);
$hash->{HELPER}{LASTLIMITRUNTIME} = gettimeofday();
}
$hash->{HELPER}{LASTLIMITRUNTIME} = gettimeofday();
}
}
}
if(!$async) {
return if(defined $hash->{HELPER}{SHUTDOWNSEQ}); # Shutdown Sequenz läuft
if($memcount) { # synchroner non-blocking Mode
return if($hash->{HELPER}{REOPEN_RUNS}); # return wenn "reopen" mit Ablaufzeit gestartet ist
if(!$async) { # synchroner non-blocking Mode
return if(defined $hash->{HELPER}{SHUTDOWNSEQ}); # Shutdown Sequenz läuft
return if($hash->{HELPER}{REOPEN_RUNS}); # return wenn "reopen" mit Ablaufzeit gestartet ist
$err = DbLog_execMemCacheSync ($hash);
DbLog_setReadingstate ($hash, $err) if($err);
}
$err = DbLog_execMemCacheSync ($hash);
DbLog_setReadingstate ($hash, $err) if($err);
}
$net = tv_interval($nst); # Notify-Routine Laufzeit ermitteln
if($net && AttrVal($name, 'showNotifyTime', 0)) {
if(AttrVal($name, 'showNotifyTime', 0)) {
readingsSingleUpdate($hash, 'notify_processing_time', sprintf("%.4f",$net), 1);
}