2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-02-07 16:59:18 +00:00

93_DbLog: contrib 4.9.4

git-svn-id: https://svn.fhem.de/fhem/trunk@20842 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
nasseeder1 2019-12-28 13:57:26 +00:00
parent 2c0a0c0df7
commit 87da052625

View File

@ -30,6 +30,7 @@ no if $] >= 5.017011, warnings => 'experimental::smartmatch';
# Version History intern by DS_Starter:
our %DbLog_vNotesIntern = (
"4.9.4" => "29.12.2019 correct behavior if value is empty and attribute addStateEvent is set (default), Forum: #106769 ",
"4.9.3" => "28.12.2019 check date/time format got from SVG, Forum: #101005 ",
"4.9.2" => "16.12.2019 add \$DEVICE to attr DbLogValueFn for readonly access to the device name ",
"4.9.1" => "13.11.2019 escape \ with \\ in DbLog_Push and DbLog_PushAsync ",
@ -966,8 +967,8 @@ return $ret;
################################################################
# Parsefunktion, abhaengig vom Devicetyp
################################################################
sub DbLog_ParseEvent($$$) {
my ($device, $type, $event)= @_;
sub DbLog_ParseEvent($$$$) {
my ($name,$device, $type, $event)= @_;
my (@result,$reading,$value,$unit);
# Splitfunktion der Eventquelle aufrufen (ab 2.9.1)
@ -992,7 +993,7 @@ sub DbLog_ParseEvent($$$) {
#default
if(!defined($reading)) { $reading = ""; }
if(!defined($value)) { $value = ""; }
if( $value eq "" ) {
if($value eq "" && !AttrVal($name, "addStateEvent", 1)) {
$reading = "state";
$value = $event;
}
@ -1021,16 +1022,14 @@ sub DbLog_ParseEvent($$$) {
$value =~ s/ \(Celsius\)//;
$value =~ s/([-\.\d]+).*/$1/;
$unit = "°C";
}
elsif(lc($reading) =~ m/(humidity|vwc)/) {
} elsif (lc($reading) =~ m/(humidity|vwc)/) {
$value =~ s/ \(\%\)//;
$unit = "%";
}
}
}
# Onewire
elsif(($type eq "OWAD") ||
($type eq "OWSWITCH")) {
elsif(($type eq "OWAD") || ($type eq "OWSWITCH")) {
if(int(@parts)>1) {
$reading = "data";
$value = $event;
@ -1068,8 +1067,7 @@ sub DbLog_ParseEvent($$$) {
$value = $1;
$reading = "dim";
$unit = "%";
}
elsif(!defined($value) || $value eq "") {
} elsif(!defined($value) || $value eq "") {
$value = $reading;
$reading = "data";
}
@ -1082,43 +1080,38 @@ sub DbLog_ParseEvent($$$) {
$reading = $parts[0];
$value = $parts[1];
$unit = "";
}
elsif($reading =~ m(-temp)) { $value=~ s/ \(Celsius\)//; $unit= "°C"; }
elsif($reading =~ m(temp-offset)) { $value=~ s/ \(Celsius\)//; $unit= "°C"; }
elsif($reading =~ m(^actuator[0-9]*)) {
} elsif($reading =~ m(-temp)) {
$value =~ s/ \(Celsius\)//; $unit= "°C";
} elsif($reading =~ m(temp-offset)) {
$value =~ s/ \(Celsius\)//; $unit= "°C";
} elsif($reading =~ m(^actuator[0-9]*)) {
if($value eq "lime-protection") {
$reading = "actuator-lime-protection";
undef $value;
}
elsif($value =~ m(^offset:)) {
} elsif($value =~ m(^offset:)) {
$reading = "actuator-offset";
@parts = split(/: /,$value);
$value = $parts[1];
if(defined $value) {
$value =~ s/%//; $value = $value*1.; $unit = "%";
}
}
elsif($value =~ m(^unknown_)) {
} elsif($value =~ m(^unknown_)) {
@parts = split(/: /,$value);
$reading = "actuator-" . $parts[0];
$value = $parts[1];
if(defined $value) {
$value =~ s/%//; $value = $value*1.; $unit = "%";
}
}
elsif($value =~ m(^synctime)) {
} elsif($value =~ m(^synctime)) {
$reading = "actuator-synctime";
undef $value;
}
elsif($value eq "test") {
} elsif($value eq "test") {
$reading = "actuator-test";
undef $value;
}
elsif($value eq "pair") {
} elsif($value eq "pair") {
$reading = "actuator-pair";
undef $value;
}
else {
} else {
$value =~ s/%//; $value = $value*1.; $unit = "%";
}
}
@ -1140,17 +1133,16 @@ sub DbLog_ParseEvent($$$) {
}
}
# HMS
elsif($type eq "HMS" ||
$type eq "CUL_WS" ||
$type eq "OWTHERM") {
if($event =~ m(T:.*)) { $reading= "data"; $value= $event; }
elsif($reading eq "temperature") {
elsif($type eq "HMS" || $type eq "CUL_WS" || $type eq "OWTHERM") {
if($event =~ m(T:.*)) {
$reading = "data"; $value= $event;
} elsif($reading eq "temperature") {
$value =~ s/ \(Celsius\)//;
$value =~ s/([-\.\d]+).*/$1/; #OWTHERM
$unit = "°C";
}
elsif($reading eq "humidity") { $value=~ s/ \(\%\)//; $unit= "%"; }
elsif($reading eq "battery") {
} elsif($reading eq "humidity") {
$value =~ s/ \(\%\)//; $unit= "%";
} elsif($reading eq "battery") {
$value =~ s/ok/1/;
$value =~ s/replaced/1/;
$value =~ s/empty/0/;
@ -1158,8 +1150,7 @@ sub DbLog_ParseEvent($$$) {
}
# CUL_HM
elsif ($type eq "CUL_HM") {
# remove trailing %
$value=~ s/ \%$//;
$value =~ s/ \%$//; # remove trailing %
}
# BS
@ -1182,15 +1173,14 @@ sub DbLog_ParseEvent($$$) {
# RFXTRX Sensors
elsif($type eq "TRX_WEATHER") {
if($reading eq "energy_current") { $value=~ s/ W//; }
elsif($reading eq "energy_total") { $value=~ s/ kWh//; }
# elsif($reading eq "temperature") {TODO}
# elsif($reading eq "temperature") {TODO
elsif($reading eq "battery") {
if($reading eq "energy_current") {
$value =~ s/ W//;
} elsif($reading eq "energy_total") {
$value =~ s/ kWh//;
} elsif($reading eq "battery") {
if ($value =~ m/(\d+)\%/) {
$value = $1;
}
else {
} else {
$value = ($value eq "ok");
}
}
@ -1331,7 +1321,7 @@ sub DbLog_Log($$) {
$timestamp = $dev_hash->{CHANGETIME}[$i] if(defined($dev_hash->{CHANGETIME}[$i]));
$event =~ s/\|/_ESC_/g; # escape Pipe "|"
my @r = DbLog_ParseEvent($dev_name, $dev_type, $event);
my @r = DbLog_ParseEvent($name,$dev_name, $dev_type, $event);
$reading = $r[0];
$value = $r[1];
$unit = $r[2];
@ -4497,7 +4487,7 @@ sub DbLog_AddLog($$$$$) {
$event = $dev_reading.": ".$read_val;
# den zusammengestellten Event parsen lassen (evtl. Unit zuweisen)
my @r = DbLog_ParseEvent($dev_name, $dev_type, $event);
my @r = DbLog_ParseEvent($name,$dev_name, $dev_type, $event);
$dev_reading = $r[0];
$read_val = $r[1];
$ut = $r[2];