Skip to content

Commit 8e119a9

Browse files
committed
nmcli rescane time
1 parent 040fe35 commit 8e119a9

File tree

1 file changed

+34
-13
lines changed

1 file changed

+34
-13
lines changed

mozloc.py

Lines changed: 34 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,30 +8,51 @@
88
Uses ``nmcli`` from Linux only. Could be extended to other tools and OS.
99
"""
1010
import subprocess
11+
import logging
1112
from io import BytesIO
1213
import pandas
1314
import requests
1415
from datetime import datetime
1516
from time import sleep
1617

1718
URL='https://location.services.mozilla.com/v1/geolocate?key=test'
19+
NMCMD = ['nmcli','-fields','BSSID,FREQ,SIGNAL','device','wifi']
20+
NMSCAN = ['nmcli','device','wifi','rescan']
1821

19-
def get_nmcli():
2022

21-
cmd =['nmcli','-fields','BSSID,FREQ,SIGNAL','device','wifi']
22-
ret = subprocess.check_output(cmd)
23+
def get_nmcli():
2324

25+
26+
ret = subprocess.check_output(NMCMD)
27+
sleep(0.5) # nmcli crashed for less than about 0.2 sec.
28+
try:
29+
subprocess.check_call(NMSCAN) # takes several seconds to update, so do it now.
30+
except subprocess.CalledProcessError as e:
31+
print('consider slowing scan cadence. {}'.format(e))
32+
2433
dat = pandas.read_csv(BytesIO(ret), sep='\s+', index_col=False,
2534
header=0,usecols=[0,1,3],
2635
names=['macAddress','frequency','signalStrength'])
36+
# %% JSON
2737
jdat = dat.to_json(orient='records')
2838
jdat = '{ "wifiAccessPoints":' + jdat + '}'
2939
# print(jdat)
30-
req = requests.post(URL, data=jdat)
31-
if req.status_code != 200:
32-
raise RuntimeError(ret.text)
40+
# %% cloud MLS
41+
try:
42+
req = requests.post(URL, data=jdat)
43+
if req.status_code != 200:
44+
logging.error(ret.text)
45+
except requests.exceptions.ConnectionError as e:
46+
logging.error('no network connection. {}'.format(e))
47+
# %% process MLS response
48+
jres = req.json()
49+
loc = jres['location']
50+
loc['accuracy'] = jres['accuracy']
51+
loc['N'] = dat.shape[0] # number of BSSIDs used
52+
loc['t'] = datetime.now()
53+
54+
return loc
3355

34-
return req.json()
3556

3657
if __name__ == '__main__':
3758
"""
@@ -45,20 +66,20 @@ def get_nmcli():
4566
p.add_argument('logfile',help='logfile to append location to',nargs='?')
4667
p = p.parse_args()
4768

48-
T = 60 # fastest allowed polling cadence is 1 minute
69+
T = 25 # nmcli fastest allowed polling cadence: crashes at 20 sec. OK at 25 sec?
4970

5071
logfile = p.logfile
5172

5273
print('updating every {} seconds'.format(T))
5374
while True:
54-
ret = get_nmcli()
55-
loc = ret['location']
56-
stat = '{} {} {} {}'.format(datetime.now().strftime('%xT%X'),
57-
loc['lat'], loc['lng'], ret['accuracy'])
75+
loc = get_nmcli()
76+
77+
stat = '{} {} {} {} {}'.format(loc['t'].strftime('%xT%X'),
78+
loc['lat'], loc['lng'], loc['accuracy'], loc['N'])
5879
print(stat)
5980

6081
if logfile:
6182
with open(logfile,'a') as f:
6283
f.write(stat+'\n')
6384

64-
sleep(T)
85+
sleep(T)

0 commit comments

Comments
 (0)