diff --git a/main.py b/main.py index 67ac7d6..13e5983 100644 --- a/main.py +++ b/main.py @@ -19,9 +19,8 @@ from dateutil.parser import isoparse from geopy.distance import geodesic from os import path import pickle +import hashlib -#FLOCK_SERVER="http://192.168.0.8:5000" -#FLOCK_SERVER="http://awelo.ath.cx:5000" class IconButton(ButtonBehavior, Image): pass @@ -74,7 +73,7 @@ class FlockompassApp(App): 'bgcolor': "#336645"}) def read_settings(self): - app_folder = os.path.dirname(os.path.abspath(__file__)) + app_folder = path.dirname(path.abspath(__file__)) pickle_path = path.join(app_folder, 'settings.pickle') if path.isfile(pickle_path): @@ -99,7 +98,7 @@ class FlockompassApp(App): def save_settings(self): - app_folder = os.path.dirname(os.path.abspath(__file__)) + app_folder = path.dirname(path.abspath(__file__)) pickle_path = path.join(app_folder, 'settings.pickle') settings = {k: self.session_data[k] @@ -217,12 +216,11 @@ class FlockompassApp(App): self.dashboard_flock = "%s @ %s\nvel: %0.1f km/h" % (self.session_data['flock_size'], flock_distance, - self.session_data['flock_avg_speed'] * 1.609344) + self.session_data['flock_avg_speed'] * km_per_mile) else: self.dashboard_flock = "no flocks" - - self.session_data.update({'speed': self.gps_data['speed'] * 1.609344, + self.session_data.update({'speed': self.gps_data['speed'] * km_per_mile, 'bearing': self.gps_data['bearing'], 'lat': self.gps_data['lat'], 'lon': self.gps_data['lon']}) @@ -318,34 +316,45 @@ class FlockompassApp(App): self.gps_start(1000, 0) def flock_server_register(self): - Logger.info("Unique ID: %s" % uniqueid.get_uid()) - try: - register_url = "{server}/register/?dest_lon={dest_lon}&dest_lat={dest_lat}" - r = requests.get(register_url.format(server=self.session_data['settings_flock_server'], - dest_lon=self.session_data['dest_lon'], - dest_lat=self.session_data['dest_lat']), + # flush session data + self.session_data.pop('session_id', None) + self.session_data.pop('client_id', None) + self.session_data.pop('speed', None) + self.session_data.pop('bearing', None) + + Logger.info("Unique ID: %s" % uniqueid.get_uid()) + client_id = hashlib.sha256(b"%s/%s/%s" % (uniqueid.get_uid(), + self.session_data['dest_lon'], + self.session_data['dest_lat'], + )).hexdigest() + + try: + register_url = "{server}/register/" % self.session_data['settings_flock_server'] + + r = requests.get(register_url, + params={'dest_lon': self.session_data['dest_lon'], + 'dest_lat': self.session_data['dest_lat'], + 'client_id': client_id}, timeout=0.5) # TODO: check for response code, only proceed if 200 - self.session_data['bike_id'] = r.json()['bike_id'] - Logger.info('registered! got bike_id: %s' % self.session_data['bike_id']) + self.session_data['session_id'] = r.json()['session_id'] + self.session_data['client_id'] = client_id + Logger.info('registered! got session_id: %s' % self.session_data['session_id']) self.flock_server_update() except requests.exceptions.Timeout: Logger.info('comm timeout while registering with flock server') except requests.exceptions.ConnectionError: Logger.info('unable to connect while registering with flock server') # finally: - # self.session_data.pop('bike_id', None) - # self.session_data.pop('speed', None) - # self.session_data.pop('bearing', None) def flock_server_update(self): - Logger.info("Unique ID: %s" % uniqueid.get_uid()) + try: - update_url = "{server}/update/{bike_id}/?lat={lat}&lon={lon}&speed={speed}&bearing={bearing}" + update_url = "{server}/update/{client_id}/?lat={lat}&lon={lon}&speed={speed}&bearing={bearing}" req = requests.get(update_url.format(server=self.session_data['settings_flock_server'], - bike_id=self.session_data['bike_id'], + client_id=self.session_data['client_id'], speed=self.session_data.get('speed', 0), bearing=self.session_data.get('bearing', 0), lat=self.session_data['lat'], @@ -379,7 +388,7 @@ class FlockompassApp(App): def flock(self, dt): - if ('bike_id' in self.session_data + if ('session_id' in self.session_data and (self.session_data.get('last_update') + self.get_session_timeout()) > datetime.now()): self.flock_server_update() else: