show gps coords of last handshake in ui

This commit is contained in:
Ben Lebherz 2019-11-13 15:38:21 +01:00
parent 1ff14c05a9
commit 9e656d4ea6

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")