2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-02-25 16:05:19 +00:00

93_DbRep: contrib V5.8.6

git-svn-id: https://svn.fhem.de/fhem/trunk@27361 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
nasseeder1 2023-03-26 08:02:31 +00:00
parent aff43bcd47
commit b10585b359

View File

@ -1,5 +1,5 @@
############################################################################################################################################
# $Id: 93_DbLog.pm 27246 2023-02-18 15:56:47Z DS_Starter $
# $Id: 93_DbLog.pm 27327 2023-03-16 19:56:33Z DS_Starter $
#
# 93_DbLog.pm
# written by Dr. Boris Neubert 2007-12-30
@ -38,8 +38,11 @@ no if $] >= 5.017011, warnings => 'experimental::smartmatch';
# Version History intern by DS_Starter:
my %DbLog_vNotesIntern = (
"5.8.6" => "25.03.2023 change _DbLog_plotData (intx), Plot Editor: include functions delta-h, delta-h, ...".
"remode setter deleteOldDaysNbl, reduceLogNbl ",
"5.8.5" => "16.03.2023 fix using https in configCheck after SVN server change ",
"5.8.4" => "20.02.2023 new attr plotInputFieldLength, improve Plot Editor, delete attr noNotifyDev ".
"move notifyRegexpChanged fron Define to initOnStart ",
"move notifyRegexpChanged from Define to initOnStart ",
"5.8.3" => "19.02.2023 adapt DbLog_configcheck, new get ... configCheck, commandref edited ",
"5.8.2" => "18.02.2023 adapt DbLog_configcheck, Forum: https://forum.fhem.de/index.php/topic,132163.msg1264320.html#msg1264320 ",
"5.8.1" => "13.02.2023 change field type of DbLogInclude, DbLogExclude to textField-long, configCheck evaluate collation ".
@ -158,6 +161,7 @@ my $dblog_cmdef = 'basic_ta:on'; # default commitMode
my $dblog_todef = 86400; # default timeout Sekunden
my $dblog_lrpth = 0.8; # Schwellenwert für LONGRUN_PID ab dem "Another operation is in progress...." im state ausgegeben wird
my $dblog_pifl = 40; # default Breite Eingabefelder im Plot Editor
my $dblog_svgfnset = ',delta-d,delta-h,delta-ts,int,int1,int2,int3,int4,int5'; # Funktionen für SVG sampleDataFn
################################################################
sub DbLog_Initialize {
@ -572,11 +576,9 @@ sub DbLog_Set {
"configCheck:noArg ".
"countNbl:noArg ".
"deleteOldDays ".
"deleteOldDaysNbl ".
"eraseReadings:noArg ".
"listCache:noArg ".
"reduceLog ".
"reduceLogNbl ".
"rereadcfg:noArg ".
"reopen ".
"stopSubProcess:noArg ".
@ -6636,14 +6638,18 @@ sub _DbLog_plotData {
$writeout = 1 if(!$deltacalc);
}
############ Auswerten des 4. Parameters: function ###################
############ Auswerten des 4. Parameters: Funktion ###################
######################################################################
if($readings[$i]->[3] && $readings[$i]->[3] eq "int") { # nur den integerwert uebernehmen falls zb value=15°C
$out_value = $1 if($sql_value =~ m/^(\d+).*/o);
$out_tstamp = $sql_timestamp;
$writeout = 1;
}
elsif ($readings[$i]->[3] && $readings[$i]->[3] =~ m/^int(\d+).*/o) { # Uebernehme den Dezimalwert mit den angegebenen Stellen an Nachkommastellen
$out_value = $1 if($sql_value =~ m/^([-\.\d]+).*/o);
$readings[$i]->[3] =~ m/^int(\d+).*/xs;
my $dnum = $1;
#$out_value = $1 if($sql_value =~ m/^([-\.\d]+).*/o);
$out_value = $1 if($sql_value =~ m/^(-?\d+\.?\d{1,$dnum}).*/xs); # V5.8.6
$out_tstamp = $sql_timestamp;
$writeout = 1;
}
@ -7733,7 +7739,7 @@ return $check;
############################################################################################################
sub _DbLog_checkModVer {
my $name = shift;
my $src = "http://fhem.de/fhemupdate/controls_fhem.txt";
my $src = "https://fhem.de/fhemupdate/controls_fhem.txt";
my $msg = q{};
my $rec = q{};
@ -8442,17 +8448,19 @@ sub DbLog_fhemwebFn {
return $ret;
}
#################################################################################
############################################################################################
# Dropdown-Menü current-Tabelle SVG-Editor
# Datenlieferung für SVG EDitor
#
# Beispiel Input Zeile: sysmon:ram:::$val=~s/^Total..([\d.]*).*/$1/eg
# 0 1 23 4
# <device>:<reading>:<default>:<fn>:<regexp>
# Beispiel Input Zeile: sysmon:ram::delta-h:$val=~s/^Total..([\d.]*).*/$1/eg
# 0 1 2 3 4
# $ret .= SVG_txt("par_${r}_0", "", $f[0], 40); # Device (Column bei FileLog)
# $ret .= SVG_txt("par_${r}_1", "", $f[1], 40); # Reading (RegExp bei FileLog)
# $ret .= SVG_txt("par_${r}_2", "", $f[2], 1); # Default not yet implemented
# $ret .= SVG_txt("par_${r}_3", "", $f[3], 3); # Function
#################################################################################
# $ret .= SVG_txt("par_${r}_3", "", $f[3], 10); # Function
# $ret .= SVG_txt("par_${r}_4", "", $f[4], 10); # RegExp (int, delta-h, delta-d, delta-ts)
#############################################################################################
sub DbLog_sampleDataFn {
my $dlName = shift;
my $dlog = shift;
@ -8483,8 +8491,8 @@ sub DbLog_sampleDataFn {
}
if ($ccount) { # Table Current present, use it for sample data
$desc = "Device:Reading:".
"<br>Function"; # Beschreibung über Eingabezeile
$desc = "Device:Reading [Function]".
"<br>[RegExp] &lt;unused&gt;"; # Beschreibung über Eingabezeile
my $query = "select device,reading from $current where device <> '' group by device,reading";
my $sth = $dbh->prepare( $query );
@ -8492,44 +8500,46 @@ sub DbLog_sampleDataFn {
while (my @line = $sth->fetchrow_array()) {
$counter++;
push @example, (join ":", @line).':[Function]' if($counter <= 8); # show max 8 examples
push @example, (join ":", @line).' [Function]<br>[RegExp]' if($counter <= 4); # show max 4 examples
push @colregs, "$line[0]:$line[1]"; # push all eventTypes to selection list
}
my $cols = join ",", sort { "\L$a" cmp "\L$b" } @colregs;
for (my $r = 0; $r < $max; $r++) {
my @f = split ":", ($dlog->[$r] ? $dlog->[$r] : ":::"), 4; # Beispiel Input Zeile: sysmon:ram:::$val=~s/^Total..([\d.]*).*/$1/eg
my $ret = "";
my @f = split ":", ($dlog->[$r] ? $dlog->[$r] : "::::"), 5; # Beispiel Input Zeile > sysmon:ram::delta-h:$val=~s/^Total..([\d.]*).*/$1/eg
my $ret = q{}; # 0 1 2 3 4
no warnings 'uninitialized'; # Forum:74690, bug unitialized
$ret .= SVG_sel("par_${r}_0", $cols, "$f[0]:$f[1]"); # par_<Zeile>_<Spalte>, <Auswahl>, <Vorbelegung>
$ret .= SVG_sel ("par_${r}_0", $cols, "$f[0]:$f[1]"); # par_<Zeile>_<Spalte>, <Auswahl>, <Vorbelegung>
use warnings;
$ret .= SVG_sel("par_${r}_2", ":", ":"); # nur ein Trenner -> wird zu ":::"
$ret .= SVG_sel ("par_${r}_3", $dblog_svgfnset, $f[3]); # Funktionsauswahl
$f[3] =~ /^(:+)?(.*)/xs;
$ret .= SVG_txt("par_${r}_3", "<br>", "$2", $pifl); # RegExp (z.B. $val=~s/^Total..([\d.]*).*/$1/eg)
$f[4] =~ /^(:+)?(.*)/xs;
$ret .= SVG_txt ("par_${r}_4", "<br>", "$2", $pifl); # RegExp (z.B. $val=~s/^Total..([\d.]*).*/$1/eg)
$ret .= SVG_txt ("par_${r}_2", "", $f[2], 1); # der Defaultwert (nicht ausgewertet)
push @htmlArr, $ret;
}
}
else { # Table Current not present, so create an empty input field
push @example, '&lt;Device&gt;:&lt;Reading&gt;::[Function]';
push @example, '&lt;Device&gt;:&lt;Reading&gt;::[Function]<br>[RegExp]';
$desc = "Device:Reading::".
"<br>Function"; # Beschreibung über Eingabezeile
$desc = "Device:Reading::[Function]".
"<br>RegExp"; # Beschreibung über Eingabezeile
for (my $r = 0; $r < $max; $r++) {
my @f = split ":", ($dlog->[$r] ? $dlog->[$r] : ":::"), 4;
my $ret = "";
my @f = split ":", ($dlog->[$r] ? $dlog->[$r] : "::::"), 5;
my $ret = q{};
no warnings 'uninitialized'; # Forum:74690, bug unitialized
$ret .= SVG_txt("par_${r}_0", "", "$f[0]:$f[1]::", $pifl); # letzter Wert -> Breite der Eingabezeile
$ret .= SVG_txt ("par_${r}_0", "", "$f[0]:$f[1]::$f[3]", $pifl); # letzter Wert -> Breite der Eingabezeile
use warnings;
$f[3] =~ /^(:+)?(.*)/xs;
$ret .= SVG_txt("par_${r}_3", "<br>", "$2", $pifl); # RegExp (z.B. $val=~s/^Total..([\d.]*).*/$1/eg)
$f[4] =~ /^(:+)?(.*)/xs;
$ret .= SVG_txt ("par_${r}_3", "<br>", "$2", $pifl); # RegExp (z.B. $val=~s/^Total..([\d.]*).*/$1/eg)
push @htmlArr, $ret;
}
@ -8605,13 +8615,13 @@ sub DbLog_setVersionInfo {
if($modules{$type}{META}{x_prereqs_src} && !$hash->{HELPER}{MODMETAABSENT}) { # META-Daten sind vorhanden
$modules{$type}{META}{version} = "v".$v; # Version aus META.json überschreiben, Anzeige mit {Dumper $modules{DbLog}{META}}
if($modules{$type}{META}{x_version}) { # {x_version} ( nur gesetzt wenn $Id: 93_DbLog.pm 27246 2023-02-18 15:56:47Z DS_Starter $ im Kopf komplett! vorhanden )
if($modules{$type}{META}{x_version}) { # {x_version} ( nur gesetzt wenn $Id: 93_DbLog.pm 27327 2023-03-16 19:56:33Z DS_Starter $ im Kopf komplett! vorhanden )
$modules{$type}{META}{x_version} =~ s/1\.1\.1/$v/xsg;
}
else {
$modules{$type}{META}{x_version} = $v;
}
return $@ unless (FHEM::Meta::SetInternals($hash)); # FVERSION wird gesetzt ( nur gesetzt wenn $Id: 93_DbLog.pm 27246 2023-02-18 15:56:47Z DS_Starter $ im Kopf komplett! vorhanden )
return $@ unless (FHEM::Meta::SetInternals($hash)); # FVERSION wird gesetzt ( nur gesetzt wenn $Id: 93_DbLog.pm 27327 2023-03-16 19:56:33Z DS_Starter $ im Kopf komplett! vorhanden )
if(__PACKAGE__ eq "FHEM::$type" || __PACKAGE__ eq $type) {
# es wird mit Packages gearbeitet -> Perl übliche Modulversion setzen
# mit {<Modul>->VERSION()} im FHEMWEB kann Modulversion abgefragt werden
@ -9013,16 +9023,6 @@ return;
</li>
<br>
<li>
<a id="DbLog-set-deleteOldDaysNbl"></a>
<b>set &lt;name&gt; deleteOldDaysNbl &lt;n&gt; </b> <br><br>
<ul>
The function is identical to "set &lt;name&gt; deleteOldDays" and will be removed soon.
<br>
</ul>
</li>
<br>
<li>
<a id="DbLog-set-eraseReadings"></a>
<b>set &lt;name&gt; eraseReadings </b> <br><br>
@ -9130,15 +9130,6 @@ return;
</li>
<br>
<li>
<a id="DbLog-set-reduceLogNbl"></a>
<b>set &lt;name&gt; reduceLogNbl &lt;no&gt;[:&lt;nn&gt;] [average[=day]] [exclude=device1:reading1,device2:reading2,...] </b> <br><br>
<ul>
The function is identical to "set &lt;name&gt; reduceLog" and will be removed soon.
</ul>
</li>
<br>
<li>
<a id="DbLog-set-reopen"></a>
<b>set &lt;name&gt; reopen [n] </b> <br><br>
@ -10887,16 +10878,6 @@ attr SMA_Energymeter DbLogValueFn
</li>
<br>
<li>
<a id="DbLog-set-deleteOldDaysNbl"></a>
<b>set &lt;name&gt; deleteOldDaysNbl &lt;n&gt; </b> <br><br>
<ul>
Die Funktion ist identisch zu "set &lt;name&gt; deleteOldDays" und wird demnächst entfernt.
<br>
</ul>
</li>
<br>
<li>
<a id="DbLog-set-exportCache"></a>
<b>set &lt;name&gt; exportCache [nopurge | purgecache] </b> <br><br>
@ -11001,16 +10982,6 @@ attr SMA_Energymeter DbLogValueFn
</li>
<br>
<li>
<a id="DbLog-set-reduceLogNbl"></a>
<b>set &lt;name&gt; reduceLogNbl &lt;no&gt;[:&lt;nn&gt;] [average[=day]] [exclude=device1:reading1,device2:reading2,...] </b> <br><br>
<ul>
Die Funktion ist identisch zu "set &lt;name&gt; reduceLog" und wird demnächst entfernt.
</ul>
</li>
<br>
<li>
<a id="DbLog-set-reopen"></a>
<b>set &lt;name&gt; reopen [n] </b> <br><br>