From fb68adf96406be21dd0ff7bb9b473a09f7477645 Mon Sep 17 00:00:00 2001 From: rgarcia-herrera Date: Mon, 1 Nov 2021 14:46:31 -0600 Subject: [PATCH] timeout lapse for bike_id --- main.py | 44 ++++++++++++++++++++++++++++++-------------- 1 file changed, 30 insertions(+), 14 deletions(-) diff --git a/main.py b/main.py index 53e2dca..8235c76 100644 --- a/main.py +++ b/main.py @@ -13,6 +13,7 @@ from kivy.vector import Vector from kivy.animation import Animation from math import atan2, sin, cos, degrees, floor import requests +from datetime import timedelta, datetime from geopy.distance import geodesic @@ -139,7 +140,8 @@ class FlockompassApp(App): self.session_data['dest_lon'] = self.ms.ids.centermark.lon self.ms.ids.mapview.center_on(self.session_data['dest_lat'], self.session_data['dest_lon']) - + self.flock_server_register() + def set_dark_theme(self, active): if active: self.theme = {'needle': "assets/needle_dark.png", @@ -201,8 +203,9 @@ class FlockompassApp(App): else: dest_distance = "%0.1f km" % dest_distance + km_per_mile = 1.609344 self.dest_distance = "Destino: %s\nVel: %0.1f km/h" % (dest_distance, - self.gps_data['speed'] * 1.609344) + self.gps_data['speed'] * km_per_mile) if 'flock_lat' in self.session_data: @@ -323,15 +326,18 @@ class FlockompassApp(App): dest_lon=self.session_data['dest_lon'], dest_lat=self.session_data['dest_lat']), timeout=0.5) - out = r.json() - self.session_data['bike_id'] = out['bike_id'] + self.session_data['bike_id'] = r.json()['bike_id'] print('registered! got bike_id:', self.session_data['bike_id']) + self.flock_server_update() except requests.exceptions.Timeout: print('comm timeout while registering with flock server', self.session_data) - self.session_data.pop('bike_id', None) except requests.exceptions.ConnectionError: print('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): @@ -339,23 +345,33 @@ class FlockompassApp(App): update_url = "{server}/update/{bike_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'], - speed=self.session_data['speed'], - bearing=self.session_data['bearing'], + speed=self.session_data.get('speed', 0), + bearing=self.session_data.get('bearing', 0), lat=self.session_data['lat'], lon=self.session_data['lon']), timeout=0.5) resp = req.json() - print('server update ¡¡¡¡¡¡¡¡', req, resp) self.session_data.update(resp) + self.session_data['last_update'] = datetime.now() except requests.exceptions.Timeout: - print('comm timeout while updating flock server, gonna have to re-register') - self.session_data.pop('bike_id', None) - self.session_data.pop('speed', None) - self.session_data.pop('bearing', None) + print('comm timeout while updating flock server') + def get_session_timeout(self): + min_step = 100 # update at least every 100 meters + speed = self.session_data.get('speed', None) + if speed: + seconds = min_step / speed + else: + seconds = 100 + + return session_timeout = timedelta(seconds=seconds) + + def flock(self, dt): - if 'bike_id' in self.session_data: + if ('bike_id' in self.session_data + and + (self.session_data.get('last_update') + self.get_sesion_timeout() < datetime.now())): self.flock_server_update() else: self.flock_server_register()