diff --git a/CHANGED b/CHANGED
index e047973f5..682d1d518 100644
--- a/CHANGED
+++ b/CHANGED
@@ -1,6 +1,8 @@
# 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.
- SVN
+ - feature FB_CALLMONITOR: new attribute "disable" to
+ disable FB_CALLMONITOR
- feature: YAMAHA_BD: new attribute "disable" to disable cyclic status
updates of player
- change: 09_CUL_FHTTK.pm: added event-on...readings and event-min-interval
diff --git a/FHEM/72_FB_CALLMONITOR.pm b/FHEM/72_FB_CALLMONITOR.pm
index 352a9c8f5..ef94e0895 100755
--- a/FHEM/72_FB_CALLMONITOR.pm
+++ b/FHEM/72_FB_CALLMONITOR.pm
@@ -94,7 +94,7 @@ FB_CALLMONITOR_Initialize($)
- $hash->{AttrList}= "do_not_notify:0,1 unique-call-ids:0,1 local-area-code remove-leading-zero:0,1 reverse-search-cache-file reverse-search:all,internal,klicktel.de,dasoertliche.de,search.ch,dasschnelle.at,none reverse-search-cache:0,1 reverse-search-phonebook-file ".
+ $hash->{AttrList}= "do_not_notify:0,1 disable:0,1 unique-call-ids:0,1 local-area-code remove-leading-zero:0,1 reverse-search-cache-file reverse-search:all,internal,klicktel.de,dasoertliche.de,search.ch,dasschnelle.at,none reverse-search-cache:0,1 reverse-search-phonebook-file ".
$readingFnAttributes;
}
@@ -183,12 +183,12 @@ FB_CALLMONITOR_Set($@)
if($a[1] eq "rereadPhonebook")
{
- FB_CALLMONITOR_loadInternalPhonebookFile($hash);
- return undef;
+ FB_CALLMONITOR_loadInternalPhonebookFile($hash);
+ return undef;
}
else
{
- return $usage;
+ return $usage;
}
}
@@ -198,119 +198,106 @@ FB_CALLMONITOR_Set($@)
sub
FB_CALLMONITOR_Read($)
{
- my ($hash) = @_;
+ my ($hash) = @_;
- my $buf = DevIo_SimpleRead($hash);
- return "" if(!defined($buf));
- my $name = $hash->{NAME};
- my @array;
- my $reverse_search = undef;
- my $data = $buf;
- my $area_code = AttrVal($name, "local-area-code", "");
- my $external_number = undef;
+ my $buf = DevIo_SimpleRead($hash);
+ return "" if(!defined($buf));
+ my $name = $hash->{NAME};
+ my @array;
+ my $reverse_search = undef;
+ my $data = $buf;
+ my $area_code = AttrVal($name, "local-area-code", "");
+ my $external_number = undef;
+ @array = split(";", $data);
- @array = split(";", $data);
+ $external_number = $array[3] if(not $array[3] eq "0" and $array[1] eq "RING" and $array[3] ne "");
+ $external_number = $array[5] if($array[1] eq "CALL" and $array[3] ne "");
- $external_number = $array[3] if(not $array[3] eq "0" and $array[1] eq "RING" and $array[3] ne "");
- $external_number = $array[5] if($array[1] eq "CALL" and $array[3] ne "");
+ $external_number =~ s/^0// if(AttrVal($name, "remove-leading-zero", "0") eq "1" and defined($external_number));
- $external_number =~ s/^0// if(AttrVal($name, "remove-leading-zero", "0") eq "1" and defined($external_number));
-
- if(defined($external_number) and not $external_number =~ /^0/ and $area_code ne "")
- {
- if($area_code =~ /^0[1-9]\d+$/)
+ if(defined($external_number) and not $external_number =~ /^0/ and $area_code ne "")
{
- $external_number = $area_code.$external_number;
+ if($area_code =~ /^0[1-9]\d+$/)
+ {
+ $external_number = $area_code.$external_number;
+ }
+ else
+ {
+ Log3 $name, 2, "$name: given local area code '$area_code' is not an area code. therefore will be ignored";
+ }
}
- else
- {
- Log3 $name, 2, "$name: given local area code '$area_code' is not an area code. therefore will be ignored";
- }
- }
- # Remove trailing hash sign and everything afterwards
- $external_number =~ s/#.*$// if(defined($external_number));
+ # Remove trailing hash sign and everything afterwards
+ $external_number =~ s/#.*$// if(defined($external_number));
- $reverse_search = FB_CALLMONITOR_reverseSearch($hash, $external_number) if(defined($external_number) and AttrVal($name, "reverse-search", "none") ne "none");
+ $reverse_search = FB_CALLMONITOR_reverseSearch($hash, $external_number) if(defined($external_number) and AttrVal($name, "reverse-search", "none") ne "none");
- readingsBeginUpdate($hash);
- readingsBulkUpdate($hash, "event", lc($array[1]));
- readingsBulkUpdate($hash, "external_number", (defined($external_number) ? $external_number : "unknown")) if($array[1] eq "RING" or $array[1] eq "CALL");
- readingsBulkUpdate($hash, "external_name",(defined($reverse_search) ? $reverse_search : "unknown")) if($array[1] eq "RING" or $array[1] eq "CALL");
- readingsBulkUpdate($hash, "internal_number", $array[4]) if($array[1] eq "RING" or $array[1] eq "CALL");
- readingsBulkUpdate($hash, "external_connection", $array[5]) if($array[1] eq "RING");
- readingsBulkUpdate($hash, "external_connection", $array[6]) if($array[1] eq "CALL");
- readingsBulkUpdate($hash, "internal_connection", $connection_type{$array[3]}) if($array[1] eq "CALL" or $array[1] eq "CONNECT" and defined($connection_type{$array[3]}));
- readingsBulkUpdate($hash, "call_duration", $array[3]) if($array[1] eq "DISCONNECT");
+ readingsBeginUpdate($hash);
+ readingsBulkUpdate($hash, "event", lc($array[1]));
+ readingsBulkUpdate($hash, "external_number", (defined($external_number) ? $external_number : "unknown")) if($array[1] eq "RING" or $array[1] eq "CALL");
+ readingsBulkUpdate($hash, "external_name",(defined($reverse_search) ? $reverse_search : "unknown")) if($array[1] eq "RING" or $array[1] eq "CALL");
+ readingsBulkUpdate($hash, "internal_number", $array[4]) if($array[1] eq "RING" or $array[1] eq "CALL");
+ readingsBulkUpdate($hash, "external_connection", $array[5]) if($array[1] eq "RING");
+ readingsBulkUpdate($hash, "external_connection", $array[6]) if($array[1] eq "CALL");
+ readingsBulkUpdate($hash, "internal_connection", $connection_type{$array[3]}) if($array[1] eq "CALL" or $array[1] eq "CONNECT" and defined($connection_type{$array[3]}));
+ readingsBulkUpdate($hash, "call_duration", $array[3]) if($array[1] eq "DISCONNECT");
- if ($array[1] eq "RING")
+ if($array[1] eq "RING")
{
- $hash->{helper}{MISSED_CALL_DETECTION}{$array[2]}{EVENT} = $array[1];
- my $no = "unknown";
-
- if (defined($external_number))
- {
+ $hash->{helper}{MISSED_CALL_DETECTION}{$array[2]}{EVENT} = $array[1];
+ my $no = "unknown";
+ if(defined($external_number))
+ {
$no = $external_number;
- if (defined($reverse_search))
- {
- $no .= " (".$reverse_search.")";
- }
- }
+ if(defined($reverse_search))
+ {
+ $no .= " (".$reverse_search.")";
+ }
+ }
- $hash->{helper}{MISSED_CALL_DETECTION}{$array[2]}{NUMBER} = $no;
+ $hash->{helper}{MISSED_CALL_DETECTION}{$array[2]}{NUMBER} = $no;
}
elsif ($array[1] eq "DISCONNECT")
{
- if (($array[3] eq "0") and (exists($hash->{helper}{MISSED_CALL_DETECTION}{$array[2]}) and $hash->{helper}{MISSED_CALL_DETECTION}{$array[2]}{EVENT} eq "RING"))
- {
+ if (($array[3] eq "0") and (exists($hash->{helper}{MISSED_CALL_DETECTION}{$array[2]}) and $hash->{helper}{MISSED_CALL_DETECTION}{$array[2]}{EVENT} eq "RING"))
+ {
readingsBulkUpdate($hash, "missed_call", $hash->{helper}{MISSED_CALL_DETECTION}{$array[2]}{NUMBER})
- }
-
- delete($hash->{helper}{MISSED_CALL_DETECTION}{$array[2]}) if(exists($hash->{helper}{MISSED_CALL_DETECTION}{$array[2]}));
+ }
+ delete($hash->{helper}{MISSED_CALL_DETECTION}{$array[2]}) if(exists($hash->{helper}{MISSED_CALL_DETECTION}{$array[2]}));
}
if(AttrVal($name, "unique-call-ids", "0") eq "1")
{
- if($array[1] eq "RING" or $array[1] eq "CALL")
- {
- $hash->{helper}{CALLID}{$array[2]} = Digest::MD5::md5_hex($data);
- }
+ if($array[1] eq "RING" or $array[1] eq "CALL")
+ {
+ $hash->{helper}{CALLID}{$array[2]} = Digest::MD5::md5_hex($data);
+ }
+ readingsBulkUpdate($hash, "call_id", $hash->{helper}{CALLID}{$array[2]});
- readingsBulkUpdate($hash, "call_id", $hash->{helper}{CALLID}{$array[2]});
-
- if($array[1] eq "DISCONNECT")
- {
- delete($hash->{helper}{CALLID}{$array[2]});
- }
+ if($array[1] eq "DISCONNECT")
+ {
+ delete($hash->{helper}{CALLID}{$array[2]});
+ }
}
else
{
- readingsBulkUpdate($hash, "call_id", $array[2]);
+ readingsBulkUpdate($hash, "call_id", $array[2]);
}
readingsEndUpdate($hash, 1);
}
-sub
-FB_CALLMONITOR_DoInit($)
-{
-
-# No Initialization needed
-return undef;
-
-}
-
sub
FB_CALLMONITOR_Ready($)
{
my ($hash) = @_;
- return DevIo_OpenDev($hash, 1, "FB_CALLMONITOR_DoInit");
+ return DevIo_OpenDev($hash, 1, undef);
}
@@ -324,32 +311,47 @@ FB_CALLMONITOR_Attr($@)
if($a[0] eq "set")
{
-
if($a[2] eq "reverse-search" or $a[2] eq "reverse-search-phonebook-file")
{
$attr{$name}{"reverse-search-phonebook-file"} = $a[3] if($a[2] eq "reverse-search-phonebook-file");
+ FB_CALLMONITOR_loadInternalPhonebookFile($hash);
+ }
- FB_CALLMONITOR_loadInternalPhonebookFile($hash);
- }
-
- if($a[2] eq "reverse-search-cache-file")
- {
- $attr{$name}{"reverse-search-cache-file"} = $a[3];
-
- FB_CALLMONITOR_loadCacheFile($hash);
- }
+ if($a[2] eq "reverse-search-cache-file")
+ {
+ $attr{$name}{"reverse-search-cache-file"} = $a[3];
+ FB_CALLMONITOR_loadCacheFile($hash);
+ }
+
+ if($a[2] eq "disable")
+ {
+ if($a[3] eq "0")
+ {
+ DevIo_OpenDev($hash, 0, "FB_CALLMONITOR_DoInit");
+ }
+ elsif($a[3] eq "1")
+ {
+ DevIo_CloseDev($hash);
+ $hash->{STATE} = "disabled";
+ }
+ }
}
elsif($a[0] eq "del")
{
- if($a[2] eq "reverse-search" or $a[2] eq "reverse-search-phonebook-file")
+ if($a[2] eq "reverse-search" or $a[2] eq "reverse-search-phonebook-file")
{
- delete($hash->{helper}{PHONEBOOK}) if(defined($hash->{helper}{PHONEBOOK}));
- }
-
+ delete($hash->{helper}{PHONEBOOK}) if(defined($hash->{helper}{PHONEBOOK}));
+ }
+
+ if( $a[2] eq "disable")
+ {
+ DevIo_OpenDev($hash, 0, "FB_CALLMONITOR_DoInit");
+ }
}
-
+
+
return undef;
}
@@ -782,7 +784,12 @@ sub FB_CALLMONITOR_loadCacheFile($)
Attributes