Merge pull request #602 from benleb/add-gps-coords-to-ui

show gps coords of last handshake in ui
This commit is contained in:
evilsocket 2019-11-14 11:04:12 +01:00 committed by GitHub
commit 39ccd141eb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,7 +1,11 @@
import logging
import json import json
import logging
import os import os
import pwnagotchi.plugins as plugins import pwnagotchi.plugins as plugins
import pwnagotchi.ui.fonts as fonts
from pwnagotchi.ui.components import LabeledValue
from pwnagotchi.ui.view import BLACK
class GPS(plugins.Plugin): class GPS(plugins.Plugin):
@ -12,6 +16,7 @@ class GPS(plugins.Plugin):
def __init__(self): def __init__(self):
self.running = False self.running = False
self.coordinates = None
def on_loaded(self): def on_loaded(self):
logging.info("gps plugin loaded for %s" % self.options['device']) logging.info("gps plugin loaded for %s" % self.options['device'])
@ -21,7 +26,7 @@ class GPS(plugins.Plugin):
logging.info("enabling bettercap's gps module for %s" % self.options['device']) logging.info("enabling bettercap's gps module for %s" % self.options['device'])
try: try:
agent.run('gps off') agent.run('gps off')
except: except Exception:
pass pass
agent.run('set gps.device %s' % self.options['device']) agent.run('set gps.device %s' % self.options['device'])
@ -29,14 +34,74 @@ class GPS(plugins.Plugin):
agent.run('gps on') agent.run('gps on')
self.running = True self.running = True
else: else:
logging.warning("no GPS detected") logging.warning('no GPS detected')
def on_handshake(self, agent, filename, access_point, client_station): def on_handshake(self, agent, filename, access_point, client_station):
if self.running: if self.running:
info = agent.session() info = agent.session()
gps = info['gps'] self.coordinates = info['gps']
gps_filename = filename.replace('.pcap', '.gps.json') gps_filename = filename.replace('.pcap', '.gps.json')
logging.info("saving GPS to %s (%s)" % (gps_filename, gps)) logging.info("saving GPS to %s (%s)" % (gps_filename, self.coordinates))
with open(gps_filename, 'w+t') as fp: with open(gps_filename, 'w+t') as fp:
json.dump(gps, fp) json.dump(self.coordinates, fp)
def on_ui_setup(self, ui):
# add coordinates for other displays
if ui.is_waveshare_v2():
lat_pos = (127, 75)
lon_pos = (122, 84)
alt_pos = (127, 94)
elif ui.is_inky():
# guessed values, add tested ones if you can
lat_pos = (112, 30)
lon_pos = (112, 49)
alt_pos = (87, 63)
else:
# guessed values, add tested ones if you can
lat_pos = (127, 51)
lon_pos = (127, 56)
alt_pos = (102, 71)
ui.add_element(
"latitude",
LabeledValue(
color=BLACK,
label="lat:",
value="-",
position=lat_pos,
label_font=fonts.Small,
text_font=fonts.Small,
),
)
ui.add_element(
"longitude",
LabeledValue(
color=BLACK,
label="long:",
value="-",
position=lon_pos,
label_font=fonts.Small,
text_font=fonts.Small,
),
)
ui.add_element(
"altitude",
LabeledValue(
color=BLACK,
label="alt:",
value="-",
position=alt_pos,
label_font=fonts.Small,
text_font=fonts.Small,
),
)
def on_ui_update(self, ui):
if self.coordinates and all([
# avoid 0.000... measurements
self.coordinates["Latitude"], self.coordinates["Longitude"]
]):
ui.set("latitude", f"{self.coordinates['Latitude']:.4f}")
ui.set("longitude", f" {self.coordinates['Longitude']:.4f}")
ui.set("altitude", f" {self.coordinates['Altitude']:.1f}m")