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