2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-09 20:57:11 +00:00

FB_CALLMONITOR: several minor code/commandref changes

git-svn-id: https://svn.fhem.de/fhem/trunk@10740 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
markusbloch 2016-02-06 14:45:51 +00:00
parent 4167bb2d98
commit 91832f3cbc

View File

@ -174,10 +174,11 @@ FB_CALLMONITOR_Get($@)
$number_width = length($number) if($number_width < length($number));
$name_width = length($hash->{helper}{PHONEBOOK}{$number}) if($name_width < length($hash->{helper}{PHONEBOOK}{$number}));
}
my $head = sprintf("%-".$number_width."s %s" ,"Number", "Name");
foreach my $number (sort { lc($hash->{helper}{PHONEBOOK}{$a}) cmp lc($hash->{helper}{PHONEBOOK}{$b}) } keys %{$hash->{helper}{PHONEBOOK}})
{
my $string = sprintf("%-".$number_width."s - %s" , $number,$hash->{helper}{PHONEBOOK}{$number});
$table .= $string."\n";
}
@ -196,10 +197,11 @@ FB_CALLMONITOR_Get($@)
$number_width = length($number) if($number_width < length($number));
$name_width = length($hash->{helper}{CACHE}{$number}) if($name_width < length($hash->{helper}{CACHE}{$number}));
}
my $head = sprintf("%-".$number_width."s %s" ,"Number", "Name");
foreach my $number (sort { lc($hash->{helper}{CACHE}{$a}) cmp lc($hash->{helper}{CACHE}{$b}) } keys %{$hash->{helper}{CACHE}})
{
{
my $string = sprintf("%-".$number_width."s - %s" , $number,$hash->{helper}{CACHE}{$number});
$table .= $string."\n";
}
@ -218,10 +220,11 @@ FB_CALLMONITOR_Get($@)
$number_width = length($number) if($number_width < length($number));
$name_width = length($hash->{helper}{TEXTFILE}{$number}) if($name_width < length($hash->{helper}{TEXTFILE}{$number}));
}
my $head = sprintf("%-".$number_width."s %s" ,"Number", "Name");
foreach my $number (sort { lc($hash->{helper}{TEXTFILE}{$a}) cmp lc($hash->{helper}{TEXTFILE}{$b}) } keys %{$hash->{helper}{TEXTFILE}})
{
my $string = sprintf("%-".$number_width."s - %s" , $number,$hash->{helper}{TEXTFILE}{$number});
$table .= $string."\n";
}
@ -335,7 +338,7 @@ FB_CALLMONITOR_Read($)
my $country_code = AttrVal($name, "country-code", "0049");
my $external_number = undef;
foreach $data (split(/^/m, $buf))
foreach $data (split(/;\r\n/m, $buf))
{
chomp $data;
@ -528,6 +531,7 @@ FB_CALLMONITOR_Notify($$)
FB_CALLMONITOR_readPhonebook($hash);
}
############################################################################################################
#
# Begin of helper functions
@ -750,6 +754,7 @@ sub FB_CALLMONITOR_html2txt($)
$string =~ s/&nbsp;/ /g;
$string =~ s/&amp;/&/g;
$string =~ s/&pos;/'/g;
$string =~ s/(\xe4|&auml;|\\u00e4|\\u00E4)/ä/g;
$string =~ s/(\xc4|&Auml;|\\u00c4|\\u00C4)/Ä/g;
$string =~ s/(\xf6|&ouml;|\\u00f6|\\u00F6)/ö/g;
@ -757,10 +762,12 @@ sub FB_CALLMONITOR_html2txt($)
$string =~ s/(\xfc|&uuml;|\\u00fc|\\u00FC)/ü/g;
$string =~ s/(\xdc|&Uuml;|\\u00dc|\\u00DC)/Ü/g;
$string =~ s/(\xdf|&szlig;)/ß/g;
$string =~ s/<.+?>//g;
$string =~ s/(^\s+|\s+$)//g;
$string =~ s/<[^>]+>//g;
$string =~ s/&lt;/</g;
$string =~ s/&gt;/>/g;
$string =~ s/(?:^\s+|\s+$)//g;
return trim($string);
return $string;
}
#####################################
@ -1113,7 +1120,7 @@ sub FB_CALLMONITOR_readRemotePhonebookViaTelnet($;$)
unless($rc)
{
return "Error loading Net::Telnet. May be this module is not installed.";
return "Error loading Net::Telnet. Maybe this module is not installed?";
}
my $phonebook_file = "/var/flash/phonebook";
@ -1128,7 +1135,7 @@ sub FB_CALLMONITOR_readRemotePhonebookViaTelnet($;$)
delete($hash->{helper}{READ_PWD}) if(exists($hash->{helper}{READ_PWD}));
return "no password available to access FritzBox" unless(defined($fb_pw));
my $telnet = new Net::Telnet ( Timeout=>10, Errmode=>'return');
my $telnet = Net::Telnet->new(Timeout => 10, Errmode => 'return');
unless($telnet->open($fb_ip))
{
@ -1149,6 +1156,7 @@ sub FB_CALLMONITOR_readRemotePhonebookViaTelnet($;$)
{
Log3 $name, 4, "FB_CALLMONITOR ($name) - setting user to FritzBox: $fb_user";
$telnet->print($fb_user);
unless($telnet->waitfor('/password:\s*$/i'))
{
$telnet->close;
@ -1373,7 +1381,7 @@ EOD
my $phb_id;
$TR064_service_command = "GetPhonebook"; # TR-064 Support <EFBFBD> X_AVM-DE_OnTel: GetPhonebook Urls
$TR064_service_command = "GetPhonebook"; # TR-064 Support - X_AVM-DE_OnTel: GetPhonebook Urls
$param->{header} = "SOAPACTION: $TR064_service_type#$TR064_service_command\r\nContent-Type: text/xml; charset=utf-8";
# request name and FritzBox phone id for each list item
@ -1702,11 +1710,11 @@ sub FB_CALLMONITOR_normalizePhoneNumber($$)
my $area_code = AttrVal($name, "local-area-code", "");
my $country_code = AttrVal($name, "country-code", "0049");
$number =~ s/\s//g; # Remove spaces
$number =~ s/^(\#[0-9]{1,10}\#)//g; # Remove phone control codes
$number =~ s/^\+/00/g; # Convert leading + to 00 country extension
$number =~ s/[^*\d]//g if(not $number =~ /@/); # Remove anything else isn't a number if it is no VoIP number
$number =~ s/^$country_code/0/g; # Replace own country code with leading 0
$number =~ s/\s//g; # Remove spaces
$number =~ s/^(\#[0-9]{1,10}\#)//g; # Remove phone control codes
$number =~ s/^\+/00/g; # Convert leading + to 00 country extension
$number =~ s/\D//g if(not $number =~ /@/); # Remove anything else isn't a number if it is no VoIP number
$number =~ s/^$country_code/0/g; # Replace own country code with leading 0
if(not $number =~ /^0/ and not $number =~ /@/ and $area_code =~ /^0[1-9]\d+$/)
{
@ -1833,7 +1841,7 @@ sub FB_CALLMONITOR_encrypt($$)
<li><a name="FB_CALLMONITOR_disable">disable</a> 0,1</li>
Optional attribute to disable the Callmonitor. When disabled, no phone events can be detected.
<br><br>
Possible values: 0 => Callmonitor is activated, 1 => Callmonitor is deactivated.<br>
Possible values: 0 =&gt; Callmonitor is activated, 1 =&gt; Callmonitor is deactivated.<br>
Default Value is 0 (activated)<br><br>
<li><a name="FB_CALLMONITOR_disabledForIntervals">disabledForIntervals</a> HH:MM-HH:MM HH:MM-HH-MM...</li>
Optional attribute to disable FB_CALLMONITOR during specific time intervals. The attribute contains a space separated list of HH:MM tupels.
@ -1845,7 +1853,7 @@ sub FB_CALLMONITOR_encrypt($$)
<li><a name="FB_CALLMONITOR_answMachine-is-missed-call">answMachine-is-missed-call</a> 0,1</li>
If activated, a incoming call, which is answered by an answering machine, will be treated as missed call (see <a href="#FB_CALLMONITOR_events">Generated Events</a>).
<br><br>
Possible values: 0 => disabled, 1 => enabled (answering machine calls will be treated as "missed call").<br>
Possible values: 0 =&gt; disabled, 1 =&gt; enabled (answering machine calls will be treated as "missed call").<br>
Default Value is 0 (disabled)<br><br>
<li><a name="FB_CALLMONITOR_reverse-search">reverse-search</a> (phonebook,textfile,klicktel.de,dasoertliche.de,search.ch,dasschnelle.at)</li>
Enables the reverse searching of the external number (at dial and call receiving).
@ -1855,7 +1863,7 @@ sub FB_CALLMONITOR_encrypt($$)
<li><a name="FB_CALLMONITOR_reverse-search-cache">reverse-search-cache</a> 0,1</li>
If this attribute is activated each reverse-search result from an internet provider is saved in an internal cache
and will be used instead of requesting each internet provider every time with the same number. The cache only contains reverse-search results from internet providers.<br><br>
Possible values: 0 => off , 1 => on<br>
Possible values: 0 =&gt; off , 1 =&gt; on<br>
Default Value is 0 (off)<br><br>
<li><a name="FB_CALLMONITOR_reverse-search-cache-file">reverse-search-cache-file</a> &lt;file&gt;</li>
Write the internal reverse-search-cache to the given file and use it next time FHEM starts.
@ -1876,11 +1884,11 @@ sub FB_CALLMONITOR_encrypt($$)
Default value is /var/flash/phonebook (phonebook filepath on FritzBox)<br><br>
<li><a name="FB_CALLMONITOR_remove-leading-zero">remove-leading-zero</a> 0,1</li>
If this attribute is activated, a leading zero will be removed from the external number (e.g. in telefon systems).<br><br>
Possible values: 0 => off , 1 => on<br>
Possible values: 0 =&gt; off , 1 =&gt; on<br>
Default Value is 0 (off)<br><br>
<li><a name="FB_CALLMONITOR_unique-call-ids">unique-call-ids</a> 0,1</li>
If this attribute is activated, each call will use a biunique call id. So each call can be separated from previous calls in the past.<br><br>
Possible values: 0 => off , 1 => on<br>
Possible values: 0 =&gt; off , 1 =&gt; on<br>
Default Value is 0 (off)<br><br>
<li><a name="FB_CALLMONITOR_local-area-code">local-area-code</a> &lt;number&gt;</li>
Use the given local area code for reverse search in case of a local call (e.g. 0228 for Bonn, Germany)<br><br>
@ -1889,7 +1897,7 @@ sub FB_CALLMONITOR_encrypt($$)
Default Value is 0049 (Germany)<br><br>
<li><a name="FB_CALLMONITOR_fritzbox-remote-phonebook">fritzbox-remote-phonebook</a> 0,1</li>
If this attribute is activated, the phonebook should be obtained direct from the FritzBox via remote network connection (in case FHEM is not running on a FritzBox). This is only possible if a password (and depending on configuration a username as well) is configured.<br><br>
Possible values: 0 => off , 1 => on (use remote telnet connection to obtain FritzBox phonebook)<br>
Possible values: 0 =&gt; off , 1 =&gt; on (use remote telnet connection to obtain FritzBox phonebook)<br>
Default Value is 0 (off)<br><br>
<li><a name="FB_CALLMONITOR_fritzbox-remote-phonebook-via">fritzbox-remote-phonebook-via</a> tr064,web,telnet</li>
Set the method how the phonebook should be requested via network. When set to "web", the phonebook is obtained from the web interface via HTTP. When set to "telnet", it uses a telnet connection to login and retrieve the phonebook (telnet must be activated via dial shortcode #96*7*). When set to "tr064" the phonebook is obtained via TR-064 SOAP request.<br><br>
@ -1912,7 +1920,7 @@ sub FB_CALLMONITOR_encrypt($$)
<li><b>external_name</b> - The result of the reverse lookup of the external_number via internet. Is only available if reverse-search is activated. Special values are "unknown" (no search results found) and "timeout" (got timeout while search request). In case of an timeout and activated caching, the number will be searched again next time a call occurs with the same number</li>
<li><b>internal_number</b> - The internal number (fixed line, VoIP number, ...) on which the participant is calling (event: ring) or is used for calling (event: call)</li>
<li><b>internal_connection</b> - The internal connection (FON1, FON2, ISDN, DECT, ...) which is used to take or perform the call</li>
<li><b>external_connection</b> - The external connection (fixed line, VoIP account) which is used to take or perform the call</li>
<li><b>external_connection</b> - The external connection ("POTS" =&gt; fixed line, "SIPx" =&gt; VoIP account, "ISDN", "GSM" =&gt; mobile call via GSM/UMTS stick) which is used to take or perform the call</li>
<li><b>call_duration</b> - The call duration in seconds. Is only generated at a disconnect event. The value 0 means, the call was not taken by anybody.</li>
<li><b>call_id</b> - The call identification number to separate events of two or more different calls at the same time. This id number is equal for all events relating to one specific call.</li>
<li><b>missed_call</b> - This event will be raised in case of a incoming call, which is not answered. If available, also the name of the calling number will be displayed.</li>
@ -1986,7 +1994,7 @@ sub FB_CALLMONITOR_encrypt($$)
<li><a name="FB_CALLMONITOR_disable">disable</a> 0,1</li>
Optionales Attribut zur Deaktivierung des Callmonitors. Es k&ouml;nnen dann keine Anruf-Events mehr erkannt und erzeugt werden.
<br><br>
M&ouml;gliche Werte: 0 => Callmonitor ist aktiv, 1 => Callmonitor ist deaktiviert.<br>
M&ouml;gliche Werte: 0 =&gt; Callmonitor ist aktiv, 1 =&gt; Callmonitor ist deaktiviert.<br>
Standardwert ist 0 (aktiv)<br><br>
<li><a name="FB_CALLMONITOR_disabledForIntervals">disabledForIntervals</a> HH:MM-HH:MM HH:MM-HH-MM...</li>
Optionales Attribut zur Deaktivierung des Callmonitors innerhalb von bestimmten Zeitintervallen.
@ -1999,7 +2007,7 @@ sub FB_CALLMONITOR_encrypt($$)
<li><a name="FB_CALLMONITOR_answMachine-is-missed-call">answMachine-is-missed-call</a> 0,1</li>
Sofern aktiviert, werden Anrufe, welche durch einen internen Anrufbeantworter beantwortet werden, als "unbeantworteter Anruf" gewertet (siehe Reading "missed_call" unter <a href="#FB_CALLMONITOR_events">Generated Events</a>).
<br><br>
M&ouml;gliche Werte: 0 => deaktiviert, 1 => aktiviert (Anrufbeantworter gilt als "unbeantworteter Anruf").<br>
M&ouml;gliche Werte: 0 =&gt; deaktiviert, 1 =&gt; aktiviert (Anrufbeantworter gilt als "unbeantworteter Anruf").<br>
Standardwert ist 0 (deaktiviert)<br><br>
<li><a name="FB_CALLMONITOR_reverse-search">reverse-search</a> (phonebook,klicktel.de,dasoertliche.de,search.ch,dasschnelle.at)</li>
Aktiviert die R&uuml;ckw&auml;rtssuche der externen Rufnummer (bei eingehenden/ausgehenden Anrufen).
@ -2014,7 +2022,7 @@ sub FB_CALLMONITOR_encrypt($$)
Wenn dieses Attribut gesetzt ist, werden alle Ergebisse von Internetanbietern in einem modul-internen Cache gespeichert
und alle existierenden Ergebnisse aus dem Cache genutzt anstatt eine erneute Anfrage bei einem Internet-Anbieter durchzuf&uuml;hren.
Der Cache ist immer an die Internetanbieter gekoppelt und speichert nur Ergebnisse von Internetanbietern.<br><br>
M&ouml;gliche Werte: 0 => deaktiviert , 1 => aktiviert<br>
M&ouml;gliche Werte: 0 =&gt; deaktiviert , 1 =&gt; aktiviert<br>
Standardwert ist 0 (deaktiviert)<br><br>
<li><a name="FB_CALLMONITOR_reverse-search-cache-file">reverse-search-cache-file</a> &lt;Dateipfad&gt;</li>
Da der Cache nur im Arbeitsspeicher existiert, ist er nicht persistent und geht beim stoppen von FHEM verloren.
@ -2038,11 +2046,11 @@ sub FB_CALLMONITOR_encrypt($$)
Standardwert ist /var/flash/phonebook (entspricht dem Pfad auf einer FritzBox)<br><br>
<li><a name="FB_CALLMONITOR_remove-leading-zero">remove-leading-zero</a> 0,1</li>
Wenn dieses Attribut aktiviert ist, wird die f&uuml;hrende Null aus der externen Rufnummer (bei eingehenden & abgehenden Anrufen) entfernt. Dies ist z.B. notwendig bei Telefonanlagen.<br><br>
M&ouml;gliche Werte: 0 => deaktiviert , 1 => aktiviert<br>
M&ouml;gliche Werte: 0 =&gt; deaktiviert , 1 =&gt; aktiviert<br>
Standardwert ist 0 (deaktiviert)<br><br>
<li><a name="FB_CALLMONITOR_unique-call-ids">unique-call-ids</a> 0,1</li>
Wenn dieses Attribut aktiviert ist, wird f&uuml;r jedes Gespr&auml;ch eine eineindeutige Identifizierungsnummer verwendet. Dadurch lassen sich auch bereits beendete Gespr&auml;che voneinander unterscheiden. Dies ist z.B. notwendig bei der Verarbeitung der Events durch eine Datenbank.<br><br>
M&ouml;gliche Werte: 0 => deaktiviert , 1 => aktiviert<br>
M&ouml;gliche Werte: 0 =&gt; deaktiviert , 1 =&gt; aktiviert<br>
Standardwert ist 0 (deaktiviert)<br><br>
<li><a name="FB_CALLMONITOR_local-area-code">local-area-code</a> &lt;Ortsvorwahl&gt;</li>
Verwendet die gesetze Vorwahlnummer bei R&uuml;ckw&auml;rtssuchen von Ortsgespr&auml;chen (z.B. 0228 f&uuml;r Bonn)<br><br>
@ -2051,7 +2059,7 @@ sub FB_CALLMONITOR_encrypt($$)
Standardwert ist 0049 (Deutschland)<br><br>
<li><a name="FB_CALLMONITOR_fritzbox-remote-phonebook">fritzbox-remote-phonebook</a> 0,1</li>
Wenn dieses Attribut aktiviert ist, wird das FritzBox Telefonbuch direkt von der FritzBox gelesen. Dazu ist das FritzBox Passwort und je nach FritzBox Konfiguration auch ein Username notwendig, der in den entsprechenden Attributen konfiguriert sein muss.<br><br>
M&ouml;gliche Werte: 0 => deaktiviert , 1 => aktiviert<br>
M&ouml;gliche Werte: 0 =&gt; deaktiviert , 1 =&gt; aktiviert<br>
Standardwert ist 0 (deaktiviert)<br><br>
<li><a name="FB_CALLMONITOR_fritzbox-remote-phonebook-via">fritzbox-remote-phonebook-via</a> tr064,web,telnet</li>
Setzt die Methode mit der das Telefonbuch von der FritzBox abgefragt werden soll. Bei der Methode "web", werden alle verf&uuml;gbaren Telefonb&uuml;cher (lokales sowie alle konfigurierten Online-Telefonb&uuml;cher) &uuml;ber die Web-Oberfl&auml;che eingelesen. Bei der Methode "telnet" wird eine Telnet-Verbindung zur FritzBox aufgebaut um das lokale Telefonbuch abzufragen (keine Online-Telefonb&uuml;cher). Dazu muss die Telnet-Funktion aktiviert sein (Telefon Kurzwahl: #96*7*). Bei der Methode "tr064" werden alle verf&uuml;gbaren Telefonb&uuml;cher &uuml;ber die TR-064 SOAP Schnittstelle ausgelesen. <br><br>
@ -2074,7 +2082,7 @@ sub FB_CALLMONITOR_encrypt($$)
<li><b>external_name</b> - Das Ergebniss der R&uuml;ckw&auml;rtssuche (sofern aktiviert). Im Fehlerfall kann diese Reading auch den Inhalt "unknown" (keinen Eintrag gefunden) enthalten. Im Falle einer Zeit&uuml;berschreitung bei der R&uuml;ckw&auml;rtssuche und aktiviertem Caching, wird die Rufnummer beim n&auml;chsten Mal erneut gesucht.</li>
<li><b>internal_number</b> - Die interne Rufnummer (Festnetz, VoIP-Nummer, ...) auf welcher man angerufen wird (event: ring) oder die man gerade nutzt um jemanden anzurufen (event: call)</li>
<li><b>internal_connection</b> - Der interne Anschluss an der Fritz!Box welcher genutzt wird um das Gespr&auml;ch durchzuf&uuml;hren (FON1, FON2, ISDN, DECT, ...)</li>
<li><b>external_connection</b> - Der externe Anschluss welcher genutzt wird um das Gespr&auml;ch durchzuf&uuml;hren (Festnetz, VoIP Nummer, ...)</li>
<li><b>external_connection</b> - Der externe Anschluss welcher genutzt wird um das Gespr&auml;ch durchzuf&uuml;hren ("POTS" =&gt; analoges Festnetz, "SIPx" =&gt; VoIP Nummer, "ISDN", "GSM" =&gt; Mobilfunk via GSM/UMTS-Stick)</li>
<li><b>call_duration</b> - Die Gespr&auml;chsdauer in Sekunden. Dieser Wert wird nur bei einem disconnect-Event erzeugt. Ist der Wert 0, so wurde das Gespr&auml;ch von niemandem angenommen.</li>
<li><b>call_id</b> - Die Identifizierungsnummer eines einzelnen Gespr&auml;chs. Dient der Zuordnung bei zwei oder mehr parallelen Gespr&auml;chen, damit alle Events eindeutig einem Gespr&auml;ch zugeordnet werden k&ouml;nnen</li>
<li><b>missed_call</b> - Dieses Event wird nur generiert, wenn ein eingehender Anruf nicht beantwortet wird. Sofern der Name dazu bekannt ist, wird dieser ebenfalls mit angezeigt.</li>