From b50763086efec14b53ac1fa77c20a3dd9b9b7cf7 Mon Sep 17 00:00:00 2001 From: rapster <> Date: Thu, 27 Apr 2017 22:46:25 +0000 Subject: [PATCH] 74_Unifi: added attr ignoreWiredClients & ignoreWirelessClients; added AP-Name discovery for wired clients; Patch from Andre Forum: 40287 git-svn-id: https://svn.fhem.de/fhem/trunk@14122 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/74_Unifi.pm | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/fhem/FHEM/74_Unifi.pm b/fhem/FHEM/74_Unifi.pm index bd58b21e7..f5e8dfbed 100644 --- a/fhem/FHEM/74_Unifi.pm +++ b/fhem/FHEM/74_Unifi.pm @@ -63,6 +63,8 @@ sub Unifi_Initialize($$) { $hash->{NotifyFn} = "Unifi_Notify"; $hash->{AttrList} = "disable:1,0 " ."devAlias " + ."ignoreWiredClients:1,0 " + ."ignoreWirelessClients:1,0 " ."httpLoglevel:1,2,3,4,5 " ."eventPeriod " .$readingFnAttributes; @@ -802,19 +804,29 @@ sub Unifi_SetClientReadings($) { my ($name,$self) = ($hash->{NAME},Unifi_Whoami()); Log3 $name, 5, "$name ($self) - executed."; - my ($apName,$clientName,$apRef,$clientRef); - + my $apNames = {}; + for my $apID (keys %{$hash->{accespoints}}) { + my $apRef = $hash->{accespoints}->{$apID}; + $apNames->{$apRef->{mac}} = $apRef->{name} ? $apRef->{name} : $apRef->{ip}; + } + + my $ignoreWired = AttrVal($name,"ignoreWiredClients",undef); + my $ignoreWireless = AttrVal($name,"ignoreWirelessClients",undef); + + my ($apName,$clientName,$clientRef); for my $clientID (keys %{$hash->{clients}}) { $clientRef = $hash->{clients}->{$clientID}; $clientName = Unifi_ClientNames($hash,$clientID,'makeAlias'); - for my $apID (keys %{$hash->{accespoints}}) { - $apRef = $hash->{accespoints}->{$apID}; - if (defined $apRef->{mac} && defined $clientRef->{ap_mac} - && $apRef->{mac} eq $clientRef->{ap_mac}) { - $apName = ($apRef->{name}) ? $apRef->{name} : $apRef->{ip}; - last; - } + next if( $ignoreWired && $clientRef->{is_wired} ); + next if( $ignoreWireless && !$clientRef->{is_wired} ); + + $apName = "unknown"; + if ($clientRef->{is_wired} + && defined $clientRef->{sw_mac} && defined($apNames->{$clientRef->{sw_mac}}) ) { + $apName = $apNames->{$clientRef->{sw_mac}}; + } elsif (defined $clientRef->{ap_mac} && defined($apNames->{$clientRef->{ap_mac}}) ) { + $apName = $apNames->{$clientRef->{ap_mac}}; } if (defined $hash->{unifi}->{connectedClients}->{$clientID}) {