From c8430b5d9816434f625203fa137a55f1ee7ca867 Mon Sep 17 00:00:00 2001 From: markusbloch <> Date: Tue, 8 May 2018 20:14:58 +0000 Subject: [PATCH] FB_CALLMONITOR: add support for wildcard phonebook entries (Forum: #85761) git-svn-id: https://svn.fhem.de/fhem/trunk@16709 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/CHANGED | 2 ++ fhem/FHEM/72_FB_CALLMONITOR.pm | 44 +++++++++++++++++++++++++++++++--- 2 files changed, 43 insertions(+), 3 deletions(-) diff --git a/fhem/CHANGED b/fhem/CHANGED index efb33aef6..fd53df383 100644 --- a/fhem/CHANGED +++ b/fhem/CHANGED @@ -1,5 +1,7 @@ # 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. + - feature: 72_FB_CALLMONITOR: support for wildcard phonebook entries (numbers + with trailing star sign) - bugfix: 74_XiaomiBTLSens: bugfix - new: 98_feels_like.pm: New module to compute a "feels like" temperature and the cloud coverage from a WH2600 like diff --git a/fhem/FHEM/72_FB_CALLMONITOR.pm b/fhem/FHEM/72_FB_CALLMONITOR.pm index cf0979bc4..c4a8c08e3 100755 --- a/fhem/FHEM/72_FB_CALLMONITOR.pm +++ b/fhem/FHEM/72_FB_CALLMONITOR.pm @@ -687,10 +687,18 @@ FB_CALLMONITOR_reverseSearch($$) # Using internal phonebook if available and enabled if($method eq "phonebook") { - if(exists($hash->{helper}{PHONEBOOK}) and defined($hash->{helper}{PHONEBOOK}{$number})) + if(exists($hash->{helper}{PHONEBOOK})) { - Log3 $name, 4, "FB_CALLMONITOR ($name) - using internal phonebook for reverse search of $number"; - return $hash->{helper}{PHONEBOOK}{$number}; + if(defined($hash->{helper}{PHONEBOOK}{$number})) + { + Log3 $name, 4, "FB_CALLMONITOR ($name) - using internal phonebook for reverse search of $number"; + return $hash->{helper}{PHONEBOOK}{$number}; + } + elsif(my $result = FB_CALLMONITOR_searchPhonebookWildcards($hash->{helper}{PHONEBOOK}, $number)) + { + Log3 $name, 4, "FB_CALLMONITOR ($name) - using internal phonebook for reverse search of $number"; + return $result; + } } if(exists($hash->{helper}{PHONEBOOKS})) @@ -702,6 +710,11 @@ FB_CALLMONITOR_reverseSearch($$) Log3 $name, 4, "FB_CALLMONITOR ($name) - using internal phonebook for reverse search of $number"; return $hash->{helper}{PHONEBOOKS}{$pb_id}{$number}; } + elsif(my $result = FB_CALLMONITOR_searchPhonebookWildcards($hash->{helper}{PHONEBOOKS}{$pb_id}, $number)) + { + Log3 $name, 4, "FB_CALLMONITOR ($name) - using internal phonebook for reverse search of $number"; + return $result; + } } } } @@ -1030,6 +1043,31 @@ FB_CALLMONITOR_reverseSearch($$) return undef; } +##################################### +# check a number against wildcard entries in a given phonebook list +sub FB_CALLMONITOR_searchPhonebookWildcards($$) +{ + my ($list, $number) = @_; + + foreach my $key (keys %{$list}) + { + next if($key !~ /^\+?\d+\*$/); + + if(defined($list->{$key})) + { + my $test = $key; + $test =~ s/\*$//; + + if(index($number,$test) == 0) + { + return $list->{$key}.substr($number,length($test)); + } + } + } + + return undef; +} + ##################################### # replaces all HTML entities to their utf-8 counter parts. sub FB_CALLMONITOR_html2txt($)