mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-04-21 14:04:15 +00:00
72_FRITZBOX.pm: Version 07.57.12b
git-svn-id: https://svn.fhem.de/fhem/trunk@28642 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
fa9996e6ea
commit
f0d1422616
@ -45,7 +45,7 @@ use warnings;
|
||||
use Blocking;
|
||||
use HttpUtils;
|
||||
|
||||
my $ModulVersion = "07.57.12a";
|
||||
my $ModulVersion = "07.57.12b";
|
||||
my $missingModul = "";
|
||||
my $FRITZBOX_TR064pwd;
|
||||
my $FRITZBOX_TR064user;
|
||||
@ -1007,6 +1007,78 @@ sub FRITZBOX_Set($$@)
|
||||
. " update:noArg"
|
||||
. " inActive:on,off";
|
||||
|
||||
if ( lc $cmd eq 'checkapis') {
|
||||
FRITZBOX_Log $hash, 3, "set $name $cmd " . join(" ", @val);
|
||||
$hash->{APICHECKED} = 0;
|
||||
$hash->{WEBCONNECT} = 0;
|
||||
$hash->{APICHECK_RET_CODES} = "-";
|
||||
$hash->{fhem}{sidTime} = 0;
|
||||
$hash->{fhem}{sidErrCount} = 0;
|
||||
$hash->{fhem}{sidNewCount} = 0;
|
||||
$hash->{fhem}{LOCAL} = 1;
|
||||
$hash->{SID_RENEW_ERR_CNT} = 0;
|
||||
$hash->{SID_RENEW_CNT} = 0;
|
||||
FRITZBOX_Readout_Start($hash->{helper}{TimerReadout});
|
||||
$hash->{fhem}{LOCAL} = 0;
|
||||
return undef;
|
||||
} # end checkapis
|
||||
|
||||
# set password
|
||||
elsif ( lc $cmd eq 'password') {
|
||||
if (int @val == 1)
|
||||
{
|
||||
my $msg = FRITZBOX_Helper_store_Password ( $hash, $val[0] );
|
||||
return $msg if $msg =~ /error/;
|
||||
|
||||
my $result = FRITZBOX_open_Web_Connection( $hash );
|
||||
|
||||
if (defined $result->{Error}) {
|
||||
$hash->{fhem}{sidErrCount} += 1;
|
||||
$hash->{fhem}{sidTime} = 0;
|
||||
$hash->{WEBCONNECT} = 0;
|
||||
} else {
|
||||
$hash->{fhem}{sid} = $result->{sid};
|
||||
$hash->{fhem}{sidNewCount} = defined $result->{sidNew} ? $result->{sidNew} : 0;
|
||||
$hash->{fhem}{sidTime} = time();
|
||||
$hash->{fhem}{sidErrCount} = 0;
|
||||
$hash->{WEBCONNECT} = 1;
|
||||
}
|
||||
|
||||
$hash->{fhem}{LOCAL} = 1;
|
||||
FRITZBOX_Readout_Start($hash->{helper}{TimerReadout});
|
||||
$hash->{fhem}{LOCAL} = 0;
|
||||
return $msg
|
||||
}
|
||||
} # end password
|
||||
|
||||
elsif ( lc $cmd eq 'update' ) {
|
||||
FRITZBOX_Log $hash, 3, "set $name $cmd " . join(" ", @val);
|
||||
$hash->{fhem}{LOCAL} = 1;
|
||||
FRITZBOX_Readout_Start($hash->{helper}{TimerReadout});
|
||||
$hash->{fhem}{LOCAL} = 0;
|
||||
return undef;
|
||||
} # end update
|
||||
|
||||
elsif ( lc $cmd eq 'inactive') {
|
||||
return "ERROR: for active arguments. Required on|off" if (int @val != 1) || $val[0] != /on|off/;
|
||||
|
||||
if ($val[0] eq "on") {
|
||||
$hash->{helper}{timerInActive} = 1;
|
||||
} else {
|
||||
$hash->{helper}{timerInActive} = 0;
|
||||
FRITZBOX_Log $hash, 4, "set $name $cmd -> Neustart internal Timer";
|
||||
$hash->{APICHECKED} = 0;
|
||||
$hash->{WEBCONNECT} = 0;
|
||||
RemoveInternalTimer($hash->{helper}{TimerReadout});
|
||||
InternalTimer(gettimeofday()+1, "FRITZBOX_Readout_Start", $hash->{helper}{TimerReadout}, 1);
|
||||
}
|
||||
|
||||
FRITZBOX_Log $hash, 3, "set $name $cmd " . join(" ", @val);
|
||||
return undef;
|
||||
|
||||
} #end active
|
||||
|
||||
|
||||
# available, if passwor is set correctly
|
||||
if ($hash->{WEBCONNECT}) {
|
||||
# set abhängig von TR064
|
||||
@ -1062,7 +1134,6 @@ sub FRITZBOX_Set($$@)
|
||||
$list .= " rescanWLANneighbors:noArg"
|
||||
. " wlanLogExtended:on,off"
|
||||
if ($hash->{LUADATA} == 1);
|
||||
}
|
||||
|
||||
if ( lc $cmd eq 'smarthome') {
|
||||
|
||||
@ -1184,25 +1255,6 @@ sub FRITZBOX_Set($$@)
|
||||
|
||||
} #end smarthome
|
||||
|
||||
elsif ( lc $cmd eq 'inactive') {
|
||||
return "ERROR: for active arguments. Required on|off" if (int @val != 1) || $val[0] != /on|off/;
|
||||
|
||||
if ($val[0] eq "on") {
|
||||
$hash->{helper}{timerInActive} = 1;
|
||||
} else {
|
||||
$hash->{helper}{timerInActive} = 0;
|
||||
FRITZBOX_Log $hash, 4, "set $name $cmd -> Neustart internal Timer";
|
||||
$hash->{APICHECKED} = 0;
|
||||
$hash->{WEBCONNECT} = 0;
|
||||
RemoveInternalTimer($hash->{helper}{TimerReadout});
|
||||
InternalTimer(gettimeofday()+1, "FRITZBOX_Readout_Start", $hash->{helper}{TimerReadout}, 1);
|
||||
}
|
||||
|
||||
FRITZBOX_Log $hash, 3, "set $name $cmd " . join(" ", @val);
|
||||
return undef;
|
||||
|
||||
} #end active
|
||||
|
||||
elsif ( lc $cmd eq 'call' && $mesh eq "master") {
|
||||
if (int @val >= 0 && int @val <= 2) {
|
||||
FRITZBOX_Log $hash, 3, "set $name $cmd " . join(" ", @val);
|
||||
@ -1256,22 +1308,6 @@ sub FRITZBOX_Set($$@)
|
||||
|
||||
} # end blockincomingphonecall
|
||||
|
||||
elsif ( lc $cmd eq 'checkapis') {
|
||||
FRITZBOX_Log $hash, 3, "set $name $cmd " . join(" ", @val);
|
||||
$hash->{APICHECKED} = 0;
|
||||
$hash->{WEBCONNECT} = 0;
|
||||
$hash->{APICHECK_RET_CODES} = "-";
|
||||
$hash->{fhem}{sidTime} = 0;
|
||||
$hash->{fhem}{sidErrCount} = 0;
|
||||
$hash->{fhem}{sidNewCount} = 0;
|
||||
$hash->{fhem}{LOCAL} = 1;
|
||||
$hash->{SID_RENEW_ERR_CNT} = 0;
|
||||
$hash->{SID_RENEW_CNT} = 0;
|
||||
FRITZBOX_Readout_Start($hash->{helper}{TimerReadout});
|
||||
$hash->{fhem}{LOCAL} = 0;
|
||||
return undef;
|
||||
} # end checkapis
|
||||
|
||||
elsif ( lc $cmd eq 'chgprofile' && $mesh eq "master") {
|
||||
|
||||
if(int @val == 2) {
|
||||
@ -1862,34 +1898,6 @@ sub FRITZBOX_Set($$@)
|
||||
|
||||
} # end macfilter
|
||||
|
||||
# set password
|
||||
elsif ( lc $cmd eq 'password') {
|
||||
if (int @val == 1)
|
||||
{
|
||||
my $msg = FRITZBOX_Helper_store_Password ( $hash, $val[0] );
|
||||
return $msg if $msg =~ /error/;
|
||||
|
||||
my $result = FRITZBOX_open_Web_Connection( $hash );
|
||||
|
||||
if (defined $result->{Error}) {
|
||||
$hash->{fhem}{sidErrCount} += 1;
|
||||
$hash->{fhem}{sidTime} = 0;
|
||||
$hash->{WEBCONNECT} = 0;
|
||||
} else {
|
||||
$hash->{fhem}{sid} = $result->{sid};
|
||||
$hash->{fhem}{sidNewCount} = defined $result->{sidNew} ? $result->{sidNew} : 0;
|
||||
$hash->{fhem}{sidTime} = time();
|
||||
$hash->{fhem}{sidErrCount} = 0;
|
||||
$hash->{WEBCONNECT} = 1;
|
||||
}
|
||||
|
||||
$hash->{fhem}{LOCAL} = 1;
|
||||
FRITZBOX_Readout_Start($hash->{helper}{TimerReadout});
|
||||
$hash->{fhem}{LOCAL} = 0;
|
||||
return $msg
|
||||
}
|
||||
} # end password
|
||||
|
||||
# set phonebookentry
|
||||
elsif ( lc $cmd eq 'phonebookentry') {
|
||||
|
||||
@ -2270,14 +2278,6 @@ sub FRITZBOX_Set($$@)
|
||||
}
|
||||
} # end tam
|
||||
|
||||
elsif ( lc $cmd eq 'update' ) {
|
||||
FRITZBOX_Log $hash, 3, "set $name $cmd " . join(" ", @val);
|
||||
$hash->{fhem}{LOCAL} = 1;
|
||||
FRITZBOX_Readout_Start($hash->{helper}{TimerReadout});
|
||||
$hash->{fhem}{LOCAL} = 0;
|
||||
return undef;
|
||||
} # end update
|
||||
|
||||
elsif ( lc $cmd eq 'enablevpnshare' && $mesh eq "master" && $FW1 == 7 && $FW2 >= 21) {
|
||||
|
||||
if ( int @val == 2 && $val[1] =~ /^(on|off)$/ ) {
|
||||
@ -2412,6 +2412,7 @@ sub FRITZBOX_Set($$@)
|
||||
return FRITZBOX_Readout_SetGet_Start $hash->{helper}{TimerCmd};
|
||||
}
|
||||
} # end wlanlogextended
|
||||
}
|
||||
|
||||
return "Unknown argument $cmd or wrong parameter(s), choose one of $list";
|
||||
|
||||
@ -2431,6 +2432,9 @@ sub FRITZBOX_Get($@)
|
||||
my $avmModel = InternalVal($name, "MODEL", "FRITZ!Box");
|
||||
my $mesh = ReadingsVal($name, "box_meshRole", "master");
|
||||
|
||||
# available, if passwor is set correctly
|
||||
if ($hash->{WEBCONNECT}) {
|
||||
|
||||
if( lc $cmd eq "luaquery" && $hash->{LUAQUERY} == 1) {
|
||||
# get Fritzbox luaQuery inetstat:status/Today/BytesReceivedLow
|
||||
# get Fritzbox luaQuery telcfg:settings/AlarmClock/list(Name,Active,Time,Number,Weekdays)
|
||||
@ -2683,12 +2687,9 @@ sub FRITZBOX_Get($@)
|
||||
|
||||
my $list;
|
||||
|
||||
# available, if passwor is set correctly
|
||||
if ($hash->{WEBCONNECT}) {
|
||||
|
||||
$list .= "luaQuery" if $hash->{LUAQUERY} == 1;
|
||||
$list .= " luaData" if $hash->{LUADATA} == 1;
|
||||
$list .= " luaDectRingTone" if $hash->{LUADATA};
|
||||
$list .= " luaDectRingTone" if $hash->{LUADATA} == 1;
|
||||
$list .= " luaFunction" if $hash->{LUAQUERY} == 1;
|
||||
|
||||
# luaData
|
||||
@ -2707,9 +2708,11 @@ sub FRITZBOX_Get($@)
|
||||
$list .= " tr064Command" if defined $hash->{SECPORT};
|
||||
$list .= " tr064ServiceList:noArg" if defined $hash->{SECPORT};
|
||||
# $list .= " soapCommand" if defined $hash->{SECPORT};
|
||||
}
|
||||
|
||||
return "Unknown argument $cmd, choose one of $list" if defined $list;
|
||||
}
|
||||
|
||||
return "get command not available";
|
||||
|
||||
} # end FRITZBOX_Get
|
||||
|
||||
@ -5218,26 +5221,13 @@ sub FRITZBOX_Readout_Process($$)
|
||||
readingsBulkUpdate( $hash, "retStat_lastReadoutError", $values{Error} );
|
||||
readingsBulkUpdate( $hash, "state", $values{Error} );
|
||||
}
|
||||
# if (defined $values{"fhem->sidTime"}) {
|
||||
# $hash->{fhem}{sidTime} = $values{"fhem->sidTime"};
|
||||
# FRITZBOX_Log $hash, 4, "Reset SID";
|
||||
# }
|
||||
# if (defined $values{"fhem->sidErrCount"}) {
|
||||
# $hash->{fhem}{sidErrCount} = $values{"fhem->sidErrCount"};
|
||||
# }
|
||||
# if (defined $values{"->APICHECKED"}) {
|
||||
# $hash->{APICHECKED} = $values{"->APICHECKED"};
|
||||
# }
|
||||
# if (defined $values{"->APICHECK_RET_CODES"}) {
|
||||
# $hash->{APICHECK_RET_CODES} = $values{"->APICHECK_RET_CODES"};
|
||||
# }
|
||||
#
|
||||
# } else {
|
||||
|
||||
# Statistics
|
||||
if ($mesh ne "slave") {
|
||||
if ( defined $values{".box_TodayBytesReceivedLow"} && defined $hash->{READINGS}{".box_TodayBytesReceivedLow"}) {
|
||||
my $valueHigh = $values{".box_TodayBytesReceivedHigh"} - $hash->{READINGS}{".box_TodayBytesReceivedHigh"}{VAL};
|
||||
my $valueLow = $values{".box_TodayBytesReceivedLow"} - $hash->{READINGS}{".box_TodayBytesReceivedLow"}{VAL};
|
||||
|
||||
# Consider reset of day counter
|
||||
if ($valueHigh < 0 || $valueHigh == 0 && $valueLow < 0) {
|
||||
$valueLow = $values{".box_TodayBytesReceivedLow"};
|
||||
@ -5276,42 +5266,51 @@ sub FRITZBOX_Readout_Process($$)
|
||||
|
||||
#hash values
|
||||
if ($rName =~ /->/) {
|
||||
|
||||
# 4 levels
|
||||
my ($rName1, $rName2, $rName3, $rName4) = split /->/, $rName;
|
||||
|
||||
# 4th level (Internal Value)
|
||||
if ($rName1 ne "" && defined $rName4) {
|
||||
$hash->{$rName1}{$rName2}{$rName3}{$rName4} = $rValue;
|
||||
}
|
||||
|
||||
# 3rd level (Internal Value)
|
||||
elsif ($rName1 ne "" && defined $rName3) {
|
||||
$hash->{$rName1}{$rName2}{$rName3} = $rValue;
|
||||
}
|
||||
|
||||
# 1st level (Internal Value)
|
||||
elsif ($rName1 eq "") {
|
||||
$hash->{$rName2} = $rValue;
|
||||
}
|
||||
|
||||
# 2nd levels
|
||||
else {
|
||||
$hash->{$rName1}{$rName2} = $rValue;
|
||||
}
|
||||
|
||||
delete ($hash->{HINWEIS_BOXUSER}) if $rName2 eq "HINWEIS_BOXUSER" && $rValue eq "";
|
||||
delete ($hash->{HINWEIS_PASSWORD}) if $rName2 eq "HINWEIS_PASSWORD" && $rValue eq "";
|
||||
}
|
||||
|
||||
elsif ($rName eq "-<fhem") {
|
||||
FRITZBOX_Log $hash, 5, "calling fhem() with: " . $rValue;
|
||||
fhem($rValue,1);
|
||||
}
|
||||
|
||||
elsif ($rName eq "box_fwVersion" && defined $values{box_fwUpdate}) {
|
||||
$rValue .= " (old)" if $values{box_fwUpdate} eq "1";
|
||||
}
|
||||
|
||||
elsif ( $rName eq "Error" ) {
|
||||
readingsBulkUpdate( $hash, "retStat_lastReadoutError", $rValue );
|
||||
readingsBulkUpdate( $hash, "state", $rValue );
|
||||
}
|
||||
|
||||
elsif ($rName eq "box_model") {
|
||||
$hash->{MODEL} = $rValue;
|
||||
if (($rValue =~ "Box") && (lc($rValue) =~ "6[4,5,6][3,6,9][0,1]") ) {
|
||||
#if (1==1) {
|
||||
my $cable = "boxUser "
|
||||
."disable:0,1 "
|
||||
."nonblockingTimeOut:50,75,100,125 "
|
||||
@ -5361,6 +5360,7 @@ sub FRITZBOX_Readout_Process($$)
|
||||
} else {
|
||||
setDevAttrList($hash->{NAME});
|
||||
}
|
||||
|
||||
$rValue .= " [".$values{box_oem}."]" if $values{box_oem};
|
||||
}
|
||||
|
||||
@ -5406,6 +5406,7 @@ sub FRITZBOX_Readout_Process($$)
|
||||
else {
|
||||
$newState .= "off";
|
||||
}
|
||||
|
||||
$newState .=" gWLAN: ".$values{box_guestWlan} ;
|
||||
$newState .=" (Remain: ".$values{box_guestWlanRemain}." min)" if $values{box_guestWlan} eq "on" && $values{box_guestWlanRemain} > 0;
|
||||
readingsBulkUpdate( $hash, "state", $newState);
|
||||
@ -5427,10 +5428,15 @@ sub FRITZBOX_Readout_Process($$)
|
||||
}
|
||||
}
|
||||
|
||||
my $msg = keys( %values ) . " values captured in " . $values{readoutTime} . " s";
|
||||
my $msg;
|
||||
if (keys( %values ) && $values{readoutTime}) {
|
||||
$msg = keys( %values ) . " values captured in " . $values{readoutTime} . " s";
|
||||
} else {
|
||||
$msg = "no values read out";
|
||||
}
|
||||
|
||||
readingsBulkUpdate( $hash, "retStat_lastReadout", $msg );
|
||||
FRITZBOX_Log $hash, 5, "BulkUpdate lastReadout: " . $msg;
|
||||
# }
|
||||
|
||||
readingsEndUpdate( $hash, 1 );
|
||||
|
||||
@ -7021,9 +7027,12 @@ sub FRITZBOX_Set_lock_Landevice_OnOffRt($)
|
||||
|
||||
my $result = FRITZBOX_read_LuaData($hash, "data", \@webCmdArray);
|
||||
|
||||
if ( defined $result->{Error} ) {
|
||||
FRITZBOX_Log $hash, 2, "lockLandevice status: " . $result->{Error};
|
||||
FRITZBOX_Readout_Add_Reading $hash, \@roReadings, "retStat_lockLandevice", $val[0] . "->ERROR: " . $result->{Error};
|
||||
my $analyse = FRITZBOX_Helper_analyse_Lua_Result($hash, $result);
|
||||
|
||||
if ( $analyse =~ /ERROR/) {
|
||||
FRITZBOX_Log $hash, 2, "lockLandevice status: " . $analyse;
|
||||
FRITZBOX_Readout_Add_Reading $hash, \@roReadings, "retStat_lockLandevice", $val[0] . "->ERROR: " . $analyse;
|
||||
|
||||
} else {
|
||||
|
||||
$lock_res = FRITZBOX_Get_Lan_Device_Info( $hash, $val[0], "lockLandevice");
|
||||
@ -8001,14 +8010,10 @@ sub FRITZBOX_Get_SmartHome_Devices_List($@) {
|
||||
|
||||
if ($devID) {
|
||||
|
||||
if ( defined $result->{Error} ) {
|
||||
if ( $analyse =~ /ERROR/) {
|
||||
FRITZBOX_Log $hash, 2, "evaluating user info -> " . $analyse;
|
||||
my %retHash = ("Error" => $returnStr, "Info" => $analyse);
|
||||
return \%retHash;
|
||||
} elsif ( defined $result->{AuthorizationRequired} ) {
|
||||
FRITZBOX_Log $hash, 2, "evaluating user info -> AuthorizationRequired";
|
||||
my %retHash = ("Error" => $returnStr, "Info" => "AuthorizationRequired");
|
||||
return \%retHash;
|
||||
}
|
||||
|
||||
my $devData = $result->{'data'}{'devices'}; # hier entsteht die Referenz auf das Array
|
||||
@ -8216,16 +8221,11 @@ sub FRITZBOX_Get_SmartHome_Devices_List($@) {
|
||||
|
||||
} else {
|
||||
|
||||
if ( defined $result->{Error} ) {
|
||||
if ( $analyse =~ /ERROR/) {
|
||||
FRITZBOX_Log $hash, 2, "evaluating user info -> " . $analyse;
|
||||
$returnStr = "SmartHome Devices: Active\n";
|
||||
$returnStr .= "------------------\n";
|
||||
return $returnStr . $analyse;
|
||||
} elsif ( defined $result->{AuthorizationRequired} ) {
|
||||
FRITZBOX_Log $hash, 2, "evaluating user info -> AuthorizationRequired";
|
||||
$returnStr = "Smart Home Devices: Active\n";
|
||||
$returnStr .= "------------------\n";
|
||||
return $returnStr . "AuthorizationRequired";
|
||||
}
|
||||
|
||||
# border(8),cellspacing(10),cellpadding(20)
|
||||
@ -8990,10 +8990,6 @@ sub FRITZBOX_Get_Lua_Kids($$@)
|
||||
return \%retHash;
|
||||
}
|
||||
|
||||
#################
|
||||
#FRITZBOX_Log $hash, 3, "Response: ".$response->content;
|
||||
#################
|
||||
|
||||
# Remove illegal escape sequences
|
||||
$jsonText =~ s/\\'/'/g; #Hochkomma
|
||||
$jsonText =~ s/\\x\{[0-9a-f]\}//g; #delete control codes (as hex numbers)
|
||||
@ -9547,7 +9543,7 @@ sub FRITZBOX_call_Lua_Query($$@)
|
||||
}
|
||||
|
||||
#################
|
||||
FRITZBOX_Log $hash, 5, "Response: " . $response->content;
|
||||
# FRITZBOX_Log $hash, 5, "Response: " . $response->content;
|
||||
#################
|
||||
|
||||
my $jsonResult ;
|
||||
@ -9734,9 +9730,6 @@ sub FRITZBOX_read_LuaData($$$@)
|
||||
return FRITZBOX_Helper_process_JSON($hash, $profile_content, $result->{sid}, $charSet, $sidNew);
|
||||
}
|
||||
|
||||
########### Standard JSON #################################
|
||||
FRITZBOX_Log $hash, 5, "Response: \n" . $response->content;
|
||||
|
||||
return FRITZBOX_Helper_process_JSON($hash, $response->content, $result->{sid}, $charSet, $sidNew);
|
||||
|
||||
} # end FRITZBOX_Lua_Data
|
||||
@ -10369,6 +10362,9 @@ sub FRITZBOX_Helper_Url_Regex {
|
||||
<dt><code>set <name> call <number> [duration]</code></dt>
|
||||
<br>
|
||||
Calls for 'duration' seconds (default 60) the given number from an internal port (default 1).
|
||||
<br>
|
||||
The ringing occurs via the dialing aid, which must be activated via "Telephony/Calls/Dialing aid".<br>
|
||||
A different port may need to be set via the Fritz!Box web interface. The current one is in “box_stdDialPort”.
|
||||
</li><br>
|
||||
|
||||
<li><a name="checkAPIs"></a>
|
||||
@ -11276,6 +11272,8 @@ sub FRITZBOX_Helper_Url_Regex {
|
||||
Ruft für 'Dauer' Sekunden (Standard 60 s) die angegebene Telefonnummer von einem internen Telefonanschluss an (Standard ist 1). Wenn der Angerufene abnimmt, hört er die Wartemusik.
|
||||
Der interne Telefonanschluss klingelt ebenfalls.
|
||||
<br>
|
||||
Das Klingeln erfolgt über die Wählhilfe, die über "Telefonie/Anrufe/Wählhilfe" aktiviert werden muss.<br>
|
||||
Eventuell muss über die Weboberfläche der Fritz!Box ein anderer Port eingestellt werden. Der aktuelle steht in "box_stdDialPort".
|
||||
</li><br>
|
||||
|
||||
<li><a name="checkAPIs"></a>
|
||||
@ -11442,7 +11440,6 @@ sub FRITZBOX_Helper_Url_Regex {
|
||||
Wenn der Anruf angenommen wird, hört der Angerufene die Wartemusik (music on hold).
|
||||
<br>
|
||||
Je nach Fritz!OS kann das beschriebene Verhalten abweichen.
|
||||
<br>
|
||||
</li><br>
|
||||
|
||||
<li><a name="smartHome"></a>
|
||||
|
Loading…
x
Reference in New Issue
Block a user