better session contro, version bump of bunch of stuff

This commit is contained in:
rgarcia-herrera 2021-11-02 18:50:47 -06:00
parent fb68adf964
commit bc11d35338
3 changed files with 91 additions and 75 deletions

View File

@ -36,7 +36,7 @@ version = 0.1
# (list) Application requirements
# comma separated e.g. requirements = sqlite3,kivy
requirements = hostpython3, python3, kivy, plyer, android, mapview, requests, urllib3, chardet, idna, geopy, geographiclib
requirements = hostpython3, python3, kivy, plyer, android, mapview, requests, urllib3, chardet, idna, geopy, geographiclib, python-dateutil
# (str) Custom source folders for requirements
# Sets custom source for any requirements with recipes

91
main.py
View File

@ -3,6 +3,7 @@ from kivy.app import App
from kivy.clock import Clock
from kivy.core.window import Window
from kivy.properties import DictProperty, NumericProperty, StringProperty
from kivy.logger import Logger
from kivy.clock import mainthread
from kivy.utils import platform
from kivy_garden.mapview import MapView
@ -14,6 +15,7 @@ from kivy.animation import Animation
from math import atan2, sin, cos, degrees, floor
import requests
from datetime import timedelta, datetime
from dateutil.parser import isoparse
from geopy.distance import geodesic
@ -73,9 +75,6 @@ class FlockompassApp(App):
'to_map': "assets/to_map_dark.png",
'bgcolor': "#336645"})
def dump(self, dt):
print(dt, self.gps_data, self.session_data)
def read_settings(self):
app_folder = os.path.dirname(os.path.abspath(__file__))
pickle_path = path.join(app_folder, 'settings.pickle')
@ -121,7 +120,7 @@ class FlockompassApp(App):
self.save_settings()
def set_update_freq(self):
print('setting update freq to', self.ss.ids.slider_update_freq.value)
Logger.info('setting update freq to %s' % self.ss.ids.slider_update_freq.value)
self.session_data['settings_update_freq'] = self.ss.ids.slider_update_freq.value
self.save_settings()
Clock.unschedule(self.flock)
@ -141,7 +140,10 @@ class FlockompassApp(App):
self.ms.ids.mapview.center_on(self.session_data['dest_lat'],
self.session_data['dest_lon'])
self.flock_server_register()
Clock.schedule_interval(self.flock,
self.session_data.get('settings_update_freq', 10.0))
def set_dark_theme(self, active):
if active:
self.theme = {'needle': "assets/needle_dark.png",
@ -165,9 +167,9 @@ class FlockompassApp(App):
def callback(permissions, results):
if all([res for res in results]):
print("All permissions granted.")
Logger.info("All permissions granted.")
else:
print("Some permissions refused.", results)
Logger.info("Some permissions refused. %s" % results)
request_permissions([Permission.ACCESS_COARSE_LOCATION,
Permission.ACCESS_FINE_LOCATION],
@ -182,18 +184,15 @@ class FlockompassApp(App):
@mainthread
def on_location(self, **kwargs):
self.gps_data = kwargs
# self.dump(1)
if ('dest_lat' not in self.session_data
and
'dest_lon' not in self.session_data):
if ('dest_lat' not in self.session_data and 'dest_lon' not in self.session_data):
self.session_data['dest_lat'] = self.gps_data['lat']
self.session_data['dest_lon'] = self.gps_data['lon']
self.ms.ids.mapview.center_on(self.session_data['dest_lat'],
self.session_data['dest_lon'])
else:
dest_distance = geodesic(
(self.gps_data['lat'], self.gps_data['lon']),
(self.session_data['dest_lat'], self.session_data['dest_lon'])).kilometers
@ -203,12 +202,12 @@ class FlockompassApp(App):
else:
dest_distance = "%0.1f km" % dest_distance
km_per_mile = 1.609344
km_per_mile = 1.609344
self.dest_distance = "Destino: %s\nVel: %0.1f km/h" % (dest_distance,
self.gps_data['speed'] * km_per_mile)
if 'flock_lat' in self.session_data:
if 'flock_size' in self.session_data:
flock_distance = geodesic(
(self.gps_data['lat'], self.gps_data['lon']),
(self.session_data['flock_lat'], self.session_data['flock_lon'])).kilometers
@ -266,12 +265,12 @@ class FlockompassApp(App):
d=0.1,
t='out_quad')
lat1 = self.gps_data['lat']
lon1 = self.gps_data['lon']
lat2 = self.session_data['dest_lat']
lon2 = self.session_data['dest_lon']
lat1 = self.gps_data.get('lat', 0)
lon1 = self.gps_data.get('lon', 0)
lat2 = self.session_data.get('dest_lat', 0)
lon2 = self.session_data.get('dest_lon', 0)
dbearing = atan2(sin(lon2 - lon1) * cos(lat2),
cos(lat1) * sin(lat2)
- sin(lat1) * cos(lat2) * cos(lon2-lon1))
@ -301,12 +300,14 @@ class FlockompassApp(App):
self.cs._anim.start(self)
def compass_enable(self):
self.cs.facade.enable()
if hasattr(self, 'cs'):
self.cs.facade.enable()
Clock.schedule_interval(self.get_field,
1.0 - self.session_data.get('settings_compass_update', 0.88))
def compass_disable(self):
self.cs.facade.disable()
if hasattr(self, 'cs'):
self.cs.facade.disable()
Clock.unschedule(self.get_field)
def on_pause(self):
@ -327,17 +328,17 @@ class FlockompassApp(App):
dest_lat=self.session_data['dest_lat']),
timeout=0.5)
self.session_data['bike_id'] = r.json()['bike_id']
print('registered! got bike_id:', self.session_data['bike_id'])
Logger.info('registered! got bike_id: %s' % self.session_data['bike_id'])
self.flock_server_update()
except requests.exceptions.Timeout:
print('comm timeout while registering with flock server', self.session_data)
Logger.info('comm timeout while registering with flock server')
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)
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):
@ -351,10 +352,19 @@ class FlockompassApp(App):
lon=self.session_data['lon']),
timeout=0.5)
resp = req.json()
self.session_data.update(resp)
self.session_data['last_update'] = datetime.now()
if resp:
self.session_data['last_update'] = isoparse(resp.pop('last_update'))
if 'flock_size' not in resp:
self.session_data.pop('flock_avg_speed', None)
self.session_data.pop('flock_lat', None)
self.session_data.pop('flock_lon', None)
self.session_data.pop('flock_size', None)
pLogger.info(self.session_data)
except requests.exceptions.Timeout:
print('comm timeout while updating flock server')
Logger.info('comm timeout while updating flock server')
def get_session_timeout(self):
@ -364,14 +374,13 @@ class FlockompassApp(App):
seconds = min_step / speed
else:
seconds = 100
return session_timeout = timedelta(seconds=seconds)
return timedelta(seconds=seconds)
def flock(self, dt):
if ('bike_id' in self.session_data
and
(self.session_data.get('last_update') + self.get_sesion_timeout() < datetime.now())):
and (self.session_data.get('last_update') + self.get_session_timeout()) > datetime.now()):
self.flock_server_update()
else:
self.flock_server_register()
@ -382,11 +391,10 @@ class FlockompassApp(App):
# start GPS
try:
gps.configure(on_location=self.on_location)
except NotImplementedError:
import traceback
traceback.print_exc()
print('GPS is not implemented for your platform')
Logger.info('GPS is not implemented for your platform')
if platform == "android":
self.request_android_permissions()
@ -414,9 +422,6 @@ class FlockompassApp(App):
self.cs._anim = None
self.cs._anim1 = None
screen_manager.add_widget(self.cs)
Clock.schedule_interval(self.flock, self.session_data.get('settings_update_freq', 10.0))
return screen_manager

View File

@ -1,41 +1,52 @@
appdirs==1.4.4
backcall==0.2.0
backports.entry-points-selectable==1.1.0
buildozer==1.2.0
certifi==2020.6.20
chardet==3.0.4
colorama==0.4.3
Cython==0.29.21
decorator==4.4.2
distlib==0.3.1
docutils==0.16
filelock==3.0.12
geographiclib==1.50
geopy==2.0.0
idna==2.10
importlib-metadata==1.7.0
importlib-resources==3.0.0
Jinja2==2.11.2
Kivy==1.11.1
Kivy-Garden==0.1.1
kivy-garden.mapview @ file:///home/rgarcia/mapview
certifi==2021.10.8
chardet==4.0.0
charset-normalizer==2.0.7
colorama==0.4.4
Cython==0.29.24
decorator==5.1.0
distlib==0.3.3
docutils==0.18
elpy==1.999
filelock==3.3.2
geographiclib==1.52
geopy==2.2.0
idna==3.3
importlib-metadata==4.8.1
importlib-resources==5.4.0
ipython==7.29.0
ipython-genutils==0.2.0
jedi==0.18.0
Jinja2==3.0.2
Kivy==2.0.0
Kivy-Garden==0.1.4
kivy-garden.mapview==1.0.5
LatLon23==1.0.7
MarkupSafe==1.1.1
parso==0.7.1
MarkupSafe==2.0.1
matplotlib-inline==0.1.3
parso==0.8.2
pep517==0.6.0
pexpect==4.8.0
pickleshare==0.7.5
pkg_resources==0.0.0
plyer==1.4.3
prompt-toolkit==3.0.5
ptyprocess==0.6.0
Pygments==2.6.1
pyproj==2.6.1.post1
platformdirs==2.4.0
plyer==2.0.0
prompt-toolkit==3.0.21
ptyprocess==0.7.0
Pygments==2.10.0
pyproj==3.2.1
python-dateutil==2.8.2
pytoml==0.1.21
requests==2.24.0
sh==1.13.1
six==1.15.0
toml==0.10.1
traitlets==4.3.3
urllib3==1.25.9
requests==2.26.0
sh==1.14.2
six==1.16.0
toml==0.10.2
tomli==1.2.2
traitlets==5.1.1
urllib3==1.26.7
virtualenv==20.10.0
wcwidth==0.2.5
zipp==3.1.0
zipp==3.6.0