timeout lapse for bike_id

This commit is contained in:
rgarcia-herrera 2021-11-01 14:46:31 -06:00
parent 164c85d0f7
commit fb68adf964

44
main.py
View File

@ -13,6 +13,7 @@ from kivy.vector import Vector
from kivy.animation import Animation from kivy.animation import Animation
from math import atan2, sin, cos, degrees, floor from math import atan2, sin, cos, degrees, floor
import requests import requests
from datetime import timedelta, datetime
from geopy.distance import geodesic from geopy.distance import geodesic
@ -139,7 +140,8 @@ class FlockompassApp(App):
self.session_data['dest_lon'] = self.ms.ids.centermark.lon self.session_data['dest_lon'] = self.ms.ids.centermark.lon
self.ms.ids.mapview.center_on(self.session_data['dest_lat'], self.ms.ids.mapview.center_on(self.session_data['dest_lat'],
self.session_data['dest_lon']) self.session_data['dest_lon'])
self.flock_server_register()
def set_dark_theme(self, active): def set_dark_theme(self, active):
if active: if active:
self.theme = {'needle': "assets/needle_dark.png", self.theme = {'needle': "assets/needle_dark.png",
@ -201,8 +203,9 @@ class FlockompassApp(App):
else: else:
dest_distance = "%0.1f km" % dest_distance 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.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: if 'flock_lat' in self.session_data:
@ -323,15 +326,18 @@ class FlockompassApp(App):
dest_lon=self.session_data['dest_lon'], dest_lon=self.session_data['dest_lon'],
dest_lat=self.session_data['dest_lat']), dest_lat=self.session_data['dest_lat']),
timeout=0.5) timeout=0.5)
out = r.json() self.session_data['bike_id'] = r.json()['bike_id']
self.session_data['bike_id'] = out['bike_id']
print('registered! got bike_id:', self.session_data['bike_id']) print('registered! got bike_id:', self.session_data['bike_id'])
self.flock_server_update()
except requests.exceptions.Timeout: except requests.exceptions.Timeout:
print('comm timeout while registering with flock server', self.session_data) print('comm timeout while registering with flock server', self.session_data)
self.session_data.pop('bike_id', None)
except requests.exceptions.ConnectionError: except requests.exceptions.ConnectionError:
print('unable to connect while registering with flock server') 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): 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}" 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'], req = requests.get(update_url.format(server=self.session_data['settings_flock_server'],
bike_id=self.session_data['bike_id'], bike_id=self.session_data['bike_id'],
speed=self.session_data['speed'], speed=self.session_data.get('speed', 0),
bearing=self.session_data['bearing'], bearing=self.session_data.get('bearing', 0),
lat=self.session_data['lat'], lat=self.session_data['lat'],
lon=self.session_data['lon']), lon=self.session_data['lon']),
timeout=0.5) timeout=0.5)
resp = req.json() resp = req.json()
print('server update ¡¡¡¡¡¡¡¡', req, resp)
self.session_data.update(resp) self.session_data.update(resp)
self.session_data['last_update'] = datetime.now()
except requests.exceptions.Timeout: except requests.exceptions.Timeout:
print('comm timeout while updating flock server, gonna have to re-register') print('comm timeout while updating flock server')
self.session_data.pop('bike_id', None)
self.session_data.pop('speed', None)
self.session_data.pop('bearing', None)
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): 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() self.flock_server_update()
else: else:
self.flock_server_register() self.flock_server_register()