-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathraspberry_main.py
48 lines (31 loc) · 1.13 KB
/
raspberry_main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import rssi
import re
def get_MAC_RSSI(text):
pattern='[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}'
mac_addr_list = re.findall(pattern, str(text['output']))
pattern='(?<=Signal level=).*?(?= dBm)' #oui
rssi_list=re.findall(pattern, str(text['output']))
rssi_list=[int(elm) for elm in rssi_list]
output = dict(zip(mac_addr_list, rssi_list))
return output
interface = 'wlan0' #ip link show
rssi_scanner = rssi.RSSI_Scan(interface)
def get_apinfo(n=10):
result_tmp={}
while len(result_tmp)<3:
result_tmp={}
for i in range(n):
ap_info = rssi_scanner.getRawNetworkScan()
ap_info=get_MAC_RSSI(ap_info)
if len(ap_info)<=3:
break
for mac in ap_info:
if mac in result_tmp:
result_tmp[mac].append(ap_info[mac])
else:
result_tmp[mac]=[ap_info[mac]]
for key in result_tmp:
result_tmp[key]=sum(result_tmp[key])/len(result_tmp[key])
return result_tmp
if __name__=='__main__':
print(get_apinfo())