From 02814a50b038f99a2e62a6f2b127efdaa1a39a4c Mon Sep 17 00:00:00 2001 From: rudolfkoenig Date: Sat, 2 Jan 2021 10:18:30 +0000 Subject: [PATCH] 91_eventTypes.pm: slight optimization and listWithCounter cmd (Forum #117259) git-svn-id: https://svn.fhem.de/fhem/trunk@23457 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/91_eventTypes.pm | 40 +++++++++++++++++--------------------- 1 file changed, 18 insertions(+), 22 deletions(-) diff --git a/fhem/FHEM/91_eventTypes.pm b/fhem/FHEM/91_eventTypes.pm index 80f886109..ce9bdea9c 100644 --- a/fhem/FHEM/91_eventTypes.pm +++ b/fhem/FHEM/91_eventTypes.pm @@ -5,7 +5,7 @@ use IO::File; use strict; use warnings; -sub et_addEvt($$$;$); +sub et_addEvt($$$$); ##################################### sub @@ -24,10 +24,9 @@ eventTypes_Initialize($) sub -et_addEvt($$$;$) +et_addEvt($$$$) { my ($h, $name, $evt, $cnt) = @_; - return 0 if($h->{$name} && int(keys %{$h->{$name}}) > 200); # Forum #35658 return 0 if($evt =~ m/ CULHM (SND|RCV) /); # HM return 0 if($evt =~ m/RAWMSG/); # HM return 0 if($evt =~ m/^R-/); # HM register values @@ -52,17 +51,8 @@ et_addEvt($$$;$) $evt =~ s/HASH\(0x.*/.*/; # buggy event (Forum #36818) $evt =~ s/[\n\r].*//s; # typical ECMD problem - my $r = 1; - if($cnt) { - $r = 0 if($h->{$name}{$evt}); - $h->{$name}{$evt} += $cnt; - - - } else { - $h->{$name}{$evt}++; - - } - return $r; + $h->{$name}{_etCounter}++ if(!$h->{$name}{$evt}); + $h->{$name}{$evt} += $cnt; } ##################################### @@ -77,6 +67,7 @@ eventTypes_Define($$) my $cnt = 0; my @t = localtime; my $f = ResolveDateWildcards($a[2], @t); + return "Only one eventTypes can be defined" if($modules{eventTypes}{ldata}); my ($err, @content) = FileRead($f); my (%h1, %h2); @@ -89,10 +80,10 @@ eventTypes_Define($$) Log3 undef, 2, "eventTypes: $f: bogus line $l"; next; } - $cnt += et_addEvt(\%h1, $l[1], $l[2], $l[0]); + et_addEvt(\%h1, $l[1], $l[2], $l[0]); } - Log3 undef, 2, "eventTypes: loaded $cnt events from $f"; + Log3 undef, 2, "eventTypes: loaded ".int(@content)." lines from $f"; $hash->{STATE} = "active"; return undef; @@ -115,6 +106,7 @@ eventTypes_Notify($$) return if($me->{ignoreList}{$n}); my $h = $modules{eventTypes}{ldata}; + return if($h->{$n} && $h->{$n}{_etCounter} && $h->{$n}{_etCounter} >= 200); if($n eq "global") { foreach my $oe (@{$events}) { @@ -132,7 +124,7 @@ eventTypes_Notify($$) my $ret = ""; foreach my $oe (@{$events}) { next if(!defined($oe) || $oe =~ m/^\s*$/); - et_addEvt($h, $n, $oe); + et_addEvt($h, $n, $oe, 1); } return undef; } @@ -146,7 +138,7 @@ eventTypes_Attr(@) if($a[0] eq "set" && $a[2] eq "ignoreList") { my %h; my $ldata = $modules{eventTypes}{ldata}; - foreach my $i (split(", ", $a[3])) { + foreach my $i (split(',', $a[3])) { $h{$i} = 1; delete $ldata->{$i}; } @@ -174,6 +166,7 @@ eventTypes_Shutdown($$) my $ldata = $modules{eventTypes}{ldata}; foreach my $t (sort keys %{$ldata}) { foreach my $e (sort keys %{$ldata->{$t}}) { + next if($e eq "_etCounter"); push @content, "$ldata->{$t}{$e} $t $e"; } } @@ -202,13 +195,15 @@ eventTypes_Get($@) my $cmd = (defined($a[1]) ? $a[1] : ""); my $arg = $a[2]; - return "Unknown argument $cmd, choose one of list" if($cmd ne "list"); + return "Unknown argument $cmd, choose one of list listWithCounter" + if($cmd ne "list" && $cmd ne "listWithCounter"); my $out = ""; my $ldata = $modules{eventTypes}{ldata}; foreach my $t (sort keys %{$ldata}) { next if($arg && $t ne $arg); foreach my $e (sort keys %{$ldata->{$t}}) { - $out .= "$t $e\n"; + next if($e eq "_etCounter"); + $out .=$cmd eq "listWithCounter" ? "$t $e $ldata->{$t}{$e}\n" : "$t $e\n"; } } return $out; @@ -260,6 +255,7 @@ eventTypes_Get($@) Get