2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-04-29 17:37:09 +00:00

72_FRITZBOX.pm: Fehlerbereinigung u.a. Handhabung "inaktive" lanDevices

git-svn-id: https://svn.fhem.de/fhem/trunk@27068 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
jowiemann 2023-01-16 07:16:21 +00:00
parent f93116ee20
commit ccf2f5977e

View File

@ -41,7 +41,7 @@ use warnings;
use Blocking;
use HttpUtils;
my $ModulVersion = "07.50.3";
my $ModulVersion = "07.50.4";
my $missingModul = "";
my $missingModulTelnet = "";
my $missingModulWeb = "";
@ -1929,7 +1929,8 @@ sub FRITZBOX_Readout_Run_Web($)
$queryStr .= "&wlanList=wlan:settings/wlanlist/list(mac,speed,speed_rx,rssi,is_guest)"; # WLAN devices
$queryStr .= "&wlanListNew=wlan:settings/wlanlist/list(mac,speed,rssi)"; # WLAN devices fw>=6.69
#wlan:settings/wlanlist/list(hostname,mac,UID,state,rssi,quality,is_turbo,cipher,wmm_active,powersave,is_ap,ap_state,is_repeater,flags,flags_set,mode,is_guest,speed,speed_rx,channel_width,streams) #wlan:settings/wlanlist/list(hostname,mac,UID,state,rssi,quality,is_turbo,wmm_active,cipher,powersave,is_repeater,flags,flags_set,mode,is_guest,speed,speed_rx,speed_rx_max,speed_tx_max,channel_width,streams,mu_mimo_group,is_fail_client)
$queryStr .= "&lanDevice=landevice:settings/landevice/list(mac,ip,ethernet,ethernet_port,guest,name,active,online,wlan,speed,UID)"; # LAN devices
#$queryStr .= "&lanDevice=landevice:settings/landevice/list(mac,ip,ethernet,ethernet_port,guest,name,active,online,wlan,speed,UID)"; # LAN devices
$queryStr .= "&lanDevice=landevice:settings/landevice/list(mac,ip,ethernet,ethernet_port,ethernetport,guest,name,active,online,wlan,speed,UID)"; # LAN devices
$queryStr .= "&lanDeviceNew=landevice:settings/landevice/list(mac,ip,ethernet,guest,name,active,online,wlan,speed,UID)"; # LAN devices fw>=6.69
#landevice:settings/landevice/list(name,ip,mac,UID,dhcp,wlan,ethernet,active,static_dhcp,manu_name,wakeup,deleteable,source,online,speed,wlan_UIDs,auto_wakeup,guest,url,wlan_station_type,vendorname)
#landevice:settings/landevice/list(name,ip,mac,parentname,parentuid,ethernet_port,wlan_show_in_monitor,plc,ipv6_ifid,parental_control_abuse,plc_UIDs) #landevice:settings/landevice/list(name,ip,mac,UID,dhcp,wlan,ethernet,active,static_dhcp,manu_name,wakeup,deleteable,source,online,speed,wlan_UIDs,auto_wakeup,guest,url,wlan_station_type,vendorname,parentname,parentuid,ethernet_port,wlan_show_in_monitor,plc,ipv6_ifid,parental_control_abuse,plc_UIDs)
@ -2345,7 +2346,8 @@ sub FRITZBOX_Readout_Run_Web($)
$dName .= " [" . $UID . "]";
# Create a reading if a landevice is connected
if ( $_->{active} || $allowPassiv) {
# if ( $_->{active} || $allowPassiv) {
if ( ($_->{active} && $_->{ip}) || $allowPassiv) {
my $mac = $_->{mac};
$mac =~ s/:/_/g;
@ -2353,7 +2355,8 @@ sub FRITZBOX_Readout_Run_Web($)
$landevice{$mac}=$UID;
# if ( !$_->{ethernet} && $_->{wlan} ) { # funktioniert nicht mehr seit v7
if ( defined $wlanList{$mac} ) {
# if ( defined $wlanList{$mac} ) {
if ( defined $wlanList{$mac} and !$_->{ethernet_port} and !$_->{ethernetport} ) {
# Copes with fw>=7
$_->{guest} = $wlanList{$mac}{is_guest} if defined $wlanList{$mac}{is_guest} && $_->{guest} eq "";
$wlanCount++;
@ -2364,6 +2367,13 @@ sub FRITZBOX_Readout_Run_Web($)
$dName .= $wlanList{$mac}{speed} . " / " . $wlanList{$mac}{speed_rx} . " Mbit/s RSSI: ". $wlanList{$mac}{rssi}
if defined $wlanList{$mac};
$dName .= ")";
} elsif ( $_->{ethernetport} ) {
$dName .= " (";
$dName .= "g" if $_->{guest};
$dName .= "" . $_->{ethernetport};
$dName .= ", 1 Gbit/s" if $_->{speed} eq "1000";
$dName .= ", " . $_->{speed} . " Mbit/s" if $_->{speed} ne "1000" && $_->{speed} ne "0";
$dName .= ")";
}
if ( $_->{ethernet_port} ) {
$dName .= " (";
@ -2492,7 +2502,7 @@ sub FRITZBOX_Readout_Run_Web($)
if ($avmModel =~ "Box") {
my @tr064CmdArray = (["WANDSLInterfaceConfig:1", "wandslifconfig1", "GetInfo"]);
my @tr064Result = FRITZBOX_TR064_Cmd( $hash, 0, \@tr064CmdArray );
if ($tr064Result[0]->{Error}) {
if ($tr064Result[0]->{UPnPError}) {
$strCurl = Dumper (@tr064Result);
FRITZBOX_Log $hash, 2, "ERROR: Curl-> " . $strCurl;
} else {
@ -5839,7 +5849,7 @@ sub FRITZBOX_TR064_Cmd($$$)
push @soapParams, SOAP::Data->name( $_ => $params{$_} );
}
FRITZBOX_Log $hash, 4, "INFO: Perform TR-064 call - " . $logMsg;
FRITZBOX_Log $hash, 5, "DEBUG: Perform TR-064 call - " . $logMsg;
my $soap = SOAP::Lite
-> on_fault ( sub {} )
@ -5849,7 +5859,7 @@ sub FRITZBOX_TR064_Cmd($$$)
my $res = $soap -> call( $action => @soapParams );
unless( $res ) { # Transport-Error
FRITZBOX_Log $hash, 2, "ERROR: TR064-Transport-Error: ".$soap->transport->status;
FRITZBOX_Log $hash, 5, "DEBUG: TR064-Transport-Error: ".$soap->transport->status;
my %errorMsg = ( "Error" => $soap->transport->status );
push @retArray, \%errorMsg;
$FRITZBOX_TR064pwd = undef;
@ -5858,12 +5868,16 @@ sub FRITZBOX_TR064_Cmd($$$)
# my $fcode = $s->faultcode; #
# my $fstring = $s->faultstring; # also available
# my $factor = $s->faultactor;
my $ecode = $res->faultdetail->{'UPnPError'}->{'errorCode'};
my $edesc = $res->faultdetail->{'UPnPError'}->{'errorDescription'};
FRITZBOX_Log $hash, 2, "ERROR: TR064 error $ecode:$edesc ($logMsg)";
FRITZBOX_Log $hash, 5, "DEBUG: TR064 error $ecode:$edesc ($logMsg)";
@{$cmdArray} = ();
# my $fdetail = Dumper($res->faultdetail); # returns value of 'detail' element as string or object
# return "Error\n".$fdetail;
push @retArray, $res->faultdetail;
$FRITZBOX_TR064pwd = undef;
}
@ -5999,7 +6013,7 @@ sub FRITZBOX_TR064_Init ($$)
return if AttrVal( $name, "forceTelnetConnection", 0 );
if ($missingModulTR064) {
FRITZBOX_Log $hash, 2, "ERROR: Cannot use TR-064. Perl modul ".$missingModulTR064."is missing on this system. Please install.";
FRITZBOX_Log $hash, 2, "ERROR: Cannot use TR-064. Perl modul " . $missingModulTR064 . " is missing on this system. Please install.";
return undef;
}
@ -6007,7 +6021,7 @@ sub FRITZBOX_TR064_Init ($$)
FRITZBOX_Log $hash, 4, "INFO: Open TR-064 connection and ask for security port";
my $s = SOAP::Lite
-> uri('urn:dslforum-org:service:DeviceInfo:1')
-> proxy('http://'.$host.':49000/upnp/control/deviceinfo', timeout => 10 )
-> proxy('http://' . $host . ':49000/upnp/control/deviceinfo', timeout => 10 )
-> getSecurityPort();
FRITZBOX_Log $hash, 4, "INFO: SecPort-String " . Dumper($s);
@ -6797,7 +6811,11 @@ sub FRITZBOX_Lan_Device_Info($$$) {
$returnStr .= " UID:" . $result->{data}->{vars}->{dev}->{UID};
$returnStr .= " NAME:" . $result->{data}->{vars}->{dev}->{name}->{displayName};
$returnStr .= " STATUS:" . $result->{data}->{vars}->{dev}->{netAccess}->{kisi}->{selectedRights}->{msgid};
if ( ref ($result->{data}->{vars}->{dev}->{netAccess}->{kisi}->{selectedRights}) eq 'HASH' ) {
$returnStr .= " ACCESS:" . $result->{data}->{vars}->{dev}->{netAccess}->{kisi}->{selectedRights}->{msgid} if defined($result->{data}->{vars}->{dev}->{netAccess}->{kisi}->{selectedRights}->{msgid});
}
$returnStr .= " DEVTYPE:" . $result->{data}->{vars}->{dev}->{devType};
$returnStr .= " STATE:" . $result->{data}->{vars}->{dev}->{wlan}->{state} if defined($result->{data}->{vars}->{dev}->{wlan}->{state}) and $result->{data}->{vars}->{dev}->{devType} eq 'wlan';
$returnStr .= " ONLINE:" . $result->{data}->{vars}->{dev}->{state};
$returnStr .= " REALTIME:" . $result->{data}->{vars}->{dev}->{realtime}->{state} if defined($result->{data}->{vars}->{dev}->{realtime}->{state});
return $returnStr;