2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-03 16:56:54 +00:00

93_DbLog: $data{firstvalX} now usable, forum:#126631

git-svn-id: https://svn.fhem.de/fhem/trunk@25800 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
nasseeder1 2022-03-08 20:07:32 +00:00
parent 289c7ca5e1
commit 8b6679cc17
2 changed files with 50 additions and 32 deletions

View File

@ -1,5 +1,6 @@
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide. # 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. # Do not insert empty lines here, update check depends on it.
- bugfix: 93_DbLog: $data{firstvalX} now usable, forum:#126631
- change: 70_DENON_AVR: applied STATE changes (thx Shadow3561) - change: 70_DENON_AVR: applied STATE changes (thx Shadow3561)
- change: 73_AutoShuttersControl: change ShuttersInformation fn - change: 73_AutoShuttersControl: change ShuttersInformation fn
add table frame and whitespace-character to ShuttersInformation add table frame and whitespace-character to ShuttersInformation

View File

@ -30,6 +30,7 @@ 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.7" => "08.03.2022 \$data{firstvalX} doesn't work, forum: https://forum.fhem.de/index.php/topic,126631.0.html ",
"4.12.6" => "17.01.2022 change log message deprecated to outdated, forum:#topic,41089.msg1201261.html#msg1201261 ", "4.12.6" => "17.01.2022 change log message deprecated to outdated, forum:#topic,41089.msg1201261.html#msg1201261 ",
"4.12.5" => "31.12.2021 standard unit assignment for readings beginning with 'temperature' and removed, forum:#125087 ", "4.12.5" => "31.12.2021 standard unit assignment for readings beginning with 'temperature' and removed, forum:#125087 ",
"4.12.4" => "27.12.2021 change ParseEvent for FBDECT, warning messages for deprecated commands added ", "4.12.4" => "27.12.2021 change ParseEvent for FBDECT, warning messages for deprecated commands added ",
@ -3510,7 +3511,7 @@ sub DbLog_Get {
my ($retval,$retvaldummy,$hour,$sql_timestamp, $sql_device, $sql_reading, $sql_value, $type, $event, $unit) = ""; my ($retval,$retvaldummy,$hour,$sql_timestamp, $sql_device, $sql_reading, $sql_value, $type, $event, $unit) = "";
my @ReturnArray; my @ReturnArray;
my $writeout = 0; my $writeout = 0;
my (@min, @max, @sum, @cnt, @lastv, @lastd, @mind, @maxd); my (@min, @max, @sum, @cnt, @firstv, @firstd, @lastv, @lastd, @mind, @maxd);
my (%tstamp, %lasttstamp, $out_tstamp, $out_value, $minval, $maxval, $deltacalc); # fuer delta-h/d Berechnung my (%tstamp, %lasttstamp, $out_tstamp, $out_value, $minval, $maxval, $deltacalc); # fuer delta-h/d Berechnung
# extract the Device:Reading arguments into @readings array # extract the Device:Reading arguments into @readings array
@ -3608,17 +3609,19 @@ sub DbLog_Get {
for(my $i=0; $i<int(@readings); $i++) { for(my $i=0; $i<int(@readings); $i++) {
# ueber alle Readings # ueber alle Readings
# Variablen initialisieren # Variablen initialisieren
$min[$i] = (~0 >> 1); $min[$i] = (~0 >> 1);
$max[$i] = -(~0 >> 1); $max[$i] = -(~0 >> 1);
$sum[$i] = 0; $sum[$i] = 0;
$cnt[$i] = 0; $cnt[$i] = 0;
$lastv[$i] = 0; $firstv[$i] = 0;
$lastd[$i] = "undef"; $firstd[$i] = "undef";
$mind[$i] = "undef"; $lastv[$i] = 0;
$maxd[$i] = "undef"; $lastd[$i] = "undef";
$minval = (~0 >> 1); # ist "9223372036854775807" $mind[$i] = "undef";
$maxval = -(~0 >> 1); # ist "-9223372036854775807" $maxd[$i] = "undef";
$deltacalc = 0; $minval = (~0 >> 1); # ist "9223372036854775807"
$maxval = -(~0 >> 1); # ist "-9223372036854775807"
$deltacalc = 0;
if($readings[$i]->[3] && ($readings[$i]->[3] eq "delta-h" || $readings[$i]->[3] eq "delta-d")) { if($readings[$i]->[3] && ($readings[$i]->[3] eq "delta-h" || $readings[$i]->[3] eq "delta-d")) {
$deltacalc = 1; $deltacalc = 1;
@ -3779,20 +3782,22 @@ sub DbLog_Get {
$out_value = $1 if($sql_value =~ m/^(\d+).*/o); $out_value = $1 if($sql_value =~ m/^(\d+).*/o);
$out_tstamp = $sql_timestamp; $out_tstamp = $sql_timestamp;
$writeout = 1; $writeout = 1;
}
} elsif ($readings[$i]->[3] && $readings[$i]->[3] =~ m/^int(\d+).*/o) { # Uebernehme den Dezimalwert mit den angegebenen Stellen an Nachkommastellen 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); $out_value = $1 if($sql_value =~ m/^([-\.\d]+).*/o);
$out_tstamp = $sql_timestamp; $out_tstamp = $sql_timestamp;
$writeout = 1; $writeout = 1;
}
} elsif ($readings[$i]->[3] && $readings[$i]->[3] eq "delta-ts" && lc($sql_value) !~ m(ignore)) { elsif ($readings[$i]->[3] && $readings[$i]->[3] eq "delta-ts" && lc($sql_value) !~ m(ignore)) {
# Berechung der vergangen Sekunden seit dem letzten Logeintrag # Berechung der vergangen Sekunden seit dem letzten Logeintrag
# zb. die Zeit zwischen on/off # zb. die Zeit zwischen on/off
my @a = split("[- :]", $sql_timestamp); my @a = split("[- :]", $sql_timestamp);
my $akt_ts = mktime($a[5],$a[4],$a[3],$a[2],$a[1]-1,$a[0]-1900,0,0,-1); my $akt_ts = mktime($a[5],$a[4],$a[3],$a[2],$a[1]-1,$a[0]-1900,0,0,-1);
if($lastd[$i] ne "undef") { if($lastd[$i] ne "undef") {
@a = split("[- :]", $lastd[$i]); @a = split("[- :]", $lastd[$i]);
} }
my $last_ts = mktime($a[5],$a[4],$a[3],$a[2],$a[1]-1,$a[0]-1900,0,0,-1); my $last_ts = mktime($a[5],$a[4],$a[3],$a[2],$a[1]-1,$a[0]-1900,0,0,-1);
$out_tstamp = $sql_timestamp; $out_tstamp = $sql_timestamp;
$out_value = sprintf("%02d", $akt_ts - $last_ts); $out_value = sprintf("%02d", $akt_ts - $last_ts);
@ -3803,8 +3808,8 @@ sub DbLog_Get {
else { else {
$writeout = 1; $writeout = 1;
} }
}
} elsif ($readings[$i]->[3] && $readings[$i]->[3] eq "delta-h") { # Berechnung eines Delta-Stundenwertes elsif ($readings[$i]->[3] && $readings[$i]->[3] eq "delta-h") { # Berechnung eines Delta-Stundenwertes
%tstamp = DbLog_explode_datetime($sql_timestamp, ()); %tstamp = DbLog_explode_datetime($sql_timestamp, ());
if($lastd[$i] eq "undef") { if($lastd[$i] eq "undef") {
%lasttstamp = DbLog_explode_datetime($sql_timestamp, ()); %lasttstamp = DbLog_explode_datetime($sql_timestamp, ());
@ -3871,8 +3876,8 @@ sub DbLog_Get {
$minval = $maxval; $minval = $maxval;
Log3 ($name, 5, "$name - Output delta-h -> TS: $tstamp{hour}, LASTTS: $lasttstamp{hour}, OUTTS: $out_tstamp, OUTVAL: $out_value, WRITEOUT: $writeout"); Log3 ($name, 5, "$name - Output delta-h -> TS: $tstamp{hour}, LASTTS: $lasttstamp{hour}, OUTTS: $out_tstamp, OUTVAL: $out_value, WRITEOUT: $writeout");
} }
}
} elsif ($readings[$i]->[3] && $readings[$i]->[3] eq "delta-d") { # Berechnung eines Tages-Deltas elsif ($readings[$i]->[3] && $readings[$i]->[3] eq "delta-d") { # Berechnung eines Tages-Deltas
%tstamp = DbLog_explode_datetime($sql_timestamp, ()); %tstamp = DbLog_explode_datetime($sql_timestamp, ());
if($lastd[$i] eq "undef") { if($lastd[$i] eq "undef") {
@ -3909,7 +3914,8 @@ sub DbLog_Get {
$retval .= sprintf("%s: %s, %s, %s, %s, %s, %s\n", $out_tstamp, $sql_device, $type, $event, $sql_reading, $out_value, $unit); $retval .= sprintf("%s: %s, %s, %s, %s, %s, %s\n", $out_tstamp, $sql_device, $type, $event, $sql_reading, $out_value, $unit);
$retval .= $retvaldummy; $retval .= $retvaldummy;
} elsif ($outf =~ m/(array)/) { }
elsif ($outf =~ m/(array)/) {
push(@ReturnArray, {"tstamp" => $out_tstamp, "device" => $sql_device, "type" => $type, "event" => $event, "reading" => $sql_reading, "value" => $out_value, "unit" => $unit}); push(@ReturnArray, {"tstamp" => $out_tstamp, "device" => $sql_device, "type" => $type, "event" => $event, "reading" => $sql_reading, "value" => $out_value, "unit" => $unit});
} }
else { # generating plots else { # generating plots
@ -3935,14 +3941,21 @@ sub DbLog_Get {
$maxval = $sql_value; $maxval = $sql_value;
} }
else { else {
if($firstd[$i] eq "undef") {
$firstv[$i] = $sql_value;
$firstd[$i] = $sql_timestamp;
}
if($sql_value < $min[$i]) { if($sql_value < $min[$i]) {
$min[$i] = $sql_value; $min[$i] = $sql_value;
$mind[$i] = $sql_timestamp; $mind[$i] = $sql_timestamp;
} }
if($sql_value > $max[$i]) { if($sql_value > $max[$i]) {
$max[$i] = $sql_value; $max[$i] = $sql_value;
$maxd[$i] = $sql_timestamp; $maxd[$i] = $sql_timestamp;
} }
$sum[$i] += $sql_value; $sum[$i] += $sql_value;
$minval = $sql_value if($sql_value < $minval); $minval = $sql_value if($sql_value < $minval);
$maxval = $sql_value if($sql_value > $maxval); $maxval = $sql_value if($sql_value > $maxval);
@ -3963,6 +3976,7 @@ sub DbLog_Get {
else { else {
$lastv[$i] = $out_value if($out_value); $lastv[$i] = $out_value if($out_value);
} }
$lastd[$i] = $sql_timestamp; $lastd[$i] = $sql_timestamp;
} }
} }
@ -3985,6 +3999,7 @@ sub DbLog_Get {
} }
$sum[$i] += $out_value; $sum[$i] += $out_value;
$cnt[$i]++; $cnt[$i]++;
if($outf =~ m/(all)/) { if($outf =~ m/(all)/) {
$retval .= sprintf("%s: %s %s %s %s %s %s\n", $out_tstamp, $sql_device, $type, $event, $sql_reading, $out_value, $unit); $retval .= sprintf("%s: %s %s %s %s %s %s\n", $out_tstamp, $sql_device, $type, $event, $sql_reading, $out_value, $unit);
} }
@ -4016,15 +4031,17 @@ sub DbLog_Get {
# Ueberfuehren der gesammelten Werte in die globale Variable %data # Ueberfuehren der gesammelten Werte in die globale Variable %data
for(my $j=0; $j<int(@readings); $j++) { for(my $j=0; $j<int(@readings); $j++) {
my $k = $j+1; my $k = $j+1;
$data{"min$k"} = $min[$j]; $data{"min$k"} = $min[$j];
$data{"max$k"} = $max[$j]; $data{"max$k"} = $max[$j];
$data{"avg$k"} = $cnt[$j] ? sprintf("%0.2f", $sum[$j]/$cnt[$j]) : 0; $data{"avg$k"} = $cnt[$j] ? sprintf("%0.2f", $sum[$j]/$cnt[$j]) : 0;
$data{"sum$k"} = $sum[$j]; $data{"sum$k"} = $sum[$j];
$data{"cnt$k"} = $cnt[$j]; $data{"cnt$k"} = $cnt[$j];
$data{"currval$k"} = $lastv[$j]; $data{"firstval$k"} = $firstv[$j];
$data{"currdate$k"} = $lastd[$j]; $data{"firstdate$k"} = $firstd[$j];
$data{"mindate$k"} = $mind[$j]; $data{"currval$k"} = $lastv[$j];
$data{"maxdate$k"} = $maxd[$j]; $data{"currdate$k"} = $lastd[$j];
$data{"mindate$k"} = $mind[$j];
$data{"maxdate$k"} = $maxd[$j];
} }
# cleanup (plotfork) connection # cleanup (plotfork) connection
@ -4035,8 +4052,8 @@ sub DbLog_Get {
if($internal) { if($internal) {
$internal_data = \$retval; $internal_data = \$retval;
return undef; return undef;
}
} elsif($outf =~ m/(array)/) { elsif($outf =~ m/(array)/) {
return @ReturnArray; return @ReturnArray;
} }
else { else {