add stimulus activation report

This commit is contained in:
sessionm21 2020-05-13 02:40:59 +01:00
parent 6b826d8e0f
commit f2cad65626
2 changed files with 13 additions and 2 deletions

View File

@ -26,10 +26,12 @@ class DataPoint(db.Model):
class StimulusActivation(db.Model): class StimulusActivation(db.Model):
id = db.Column(db.Integer, primary_key=True) id = db.Column(db.Integer, primary_key=True)
collar_id = db.Column(db.Integer, db.ForeignKey('collar.id'))
longitude = db.Column(db.Float(precision=10)) longitude = db.Column(db.Float(precision=10))
latitude = db.Column(db.Float(precision=10)) latitude = db.Column(db.Float(precision=10))
volume_level = db.Column(db.Integer) volume_level = db.Column(db.Integer)
voltage_level = db.Column(db.Integer) voltage_level = db.Column(db.Integer)
datetime = db.Column(db.DateTime)
class User(db.Model): class User(db.Model):
id = db.Column(db.Integer, primary_key=True) id = db.Column(db.Integer, primary_key=True)

View File

@ -4,6 +4,7 @@ from .model import *
from flask import g, jsonify, request, abort from flask import g, jsonify, request, abort
from sqlalchemy import func from sqlalchemy import func
import geopy.distance import geopy.distance
from datetime import datetime, timedelta
@app.route('/') @app.route('/')
def index(): def index():
@ -49,7 +50,7 @@ def collars_distance():
distance_kilometers = 0 distance_kilometers = 0
coords_pairs = list(map(lambda e : (e.longitude, e.latitude), coords)) coords_pairs = list(map(lambda e : (e.longitude, e.latitude), coords))
coord_last = coords_pairs.pop() coord_last = coords_pairs.pop(0)
for coord in coords_pairs: for coord in coords_pairs:
distance_kilometers += geopy.distance.VincentyDistance(coord_last,coord).km distance_kilometers += geopy.distance.VincentyDistance(coord_last,coord).km
coord_last = coord coord_last = coord
@ -79,4 +80,12 @@ def collar_detail(id):
collar = Collar.query.filter_by(id=id).first() collar = Collar.query.filter_by(id=id).first()
if collar is None: abort(404) if collar is None: abort(404)
return jsonify({'id': collar.id, 'name': collar.name }) # get stimulus activation reports from within last 24 hours
since = datetime.now() - timedelta(hours=24)
stimulus_points = StimulusActivation.query.\
filter_by(collar_id=id).\
filter(StimulusActivation.datetime < since).\
order_by(StimulusActivation.datetime.desc())
n_stimulus = stimulus_points.count()
return jsonify({'id': collar.id, 'name': collar.name, 'stimilus': n_stimulus })