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:
parent
289c7ca5e1
commit
8b6679cc17
@ -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
|
||||||
|
@ -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 {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user