diff --git a/.gitignore b/.gitignore index ab303c9..e121693 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,5 @@ config.ini *.db *.log +/temp/* +*.pyc diff --git a/api_app.py b/api_app.py index f9adff1..de0a777 100644 --- a/api_app.py +++ b/api_app.py @@ -85,6 +85,19 @@ def select_frames(conn, n, url_params): cur.execute(sql) rows = cur.fetchall() return rows + +def select_stations(conn, n): + """ + Query rows in the stations table + :param conn: the Connection object + :return: + """ + cur = conn.cursor() + sql = 'SELECT * FROM stations ORDER BY last_heard_unix DESC LIMIT {n}'.format(n=n) + print(sql) + cur.execute(sql) + rows = cur.fetchall() + return rows @api_app.route('/') def index(): @@ -113,12 +126,82 @@ def index(): station['time_ago'] = timeago.format(station['last_heard_unix'], datetime.datetime.now()) + # Map stuff + frames_locs = list(filter(lambda x: x['latitude'] != None, frames)) + # Make a GeoJSON + geojs = json.dumps({ + "type": "FeatureCollection", + "features":[ + { + "type":"Feature", + "geometry": { + "type":"Point", + "coordinates":[frame['longitude'], frame['latitude']], + }, + "properties":frame, + + } for frame in frames_locs + ] + }) + return render_template('index.html', station_call = config['Settings']['station_call'], station_lat = config['Settings']['station_lat'], station_lon = config['Settings']['station_lon'], frames = frames, - stations = stations) + stations = stations, + geojs = geojs) + +@api_app.route('/map') +def map(): + + # Get the default list of frames from the API + frames = json.loads(requests.get(config['Settings']['base_url']+"/packets").text)['data'] + + frames_locs = list(filter(lambda x: x['latitude'] != None, frames)) + + # Make a GeoJSON + geojs = json.dumps({ + "type": "FeatureCollection", + "features":[ + { + "type":"Feature", + "geometry": { + "type":"Point", + "coordinates":[frame['longitude'], frame['latitude']], + }, + "properties":frame, + + } for frame in frames_locs + ] + }) + + # Make markers for all the frames + # id_counter = 0 + # markers = '' + # marker_ids = [] + # for frame in frames: + # if frame['latitude'] != None: + # # Create unique ID for each marker + # idd = 'frame' + str(id_counter) + # id_counter += 1 + + # # Create each marker + # markers += "var {idd} = L.marker([{latitude}, {longitude}]);\ + # {idd}.addTo(map).bindTooltip('{from_ssid}', permanent=true).openTooltip();".format(idd=idd, latitude=frame['latitude'],\ + # longitude=frame['longitude'], + # from_ssid=frame['from'], + # created=frame['created']) + # # Try to make a list of markers for Leaflet, but not working + # marker_ids.append(idd) + + + return render_template('map.html', + station_lat = config['Settings']['station_lat'], + station_lon = config['Settings']['station_lon'], + station_call = config['Settings']['station_call'], + #markers = markers, + geojs = geojs) class Packets(Resource): def get(self): @@ -145,7 +228,7 @@ class Stations(Resource): conn = get_db_connection() # Limit to number of records requested - data = select_all_stations(conn) + data = select_stations(conn, n = n) # Sort by created date, descending (https://stackoverflow.com/a/45266808) #data.sort(key=operator.itemgetter('created'), reverse=True) return {'data':data}, 200 # return data and 200 OK code diff --git a/aprs_tool.code-workspace b/aprs_tool.code-workspace new file mode 100644 index 0000000..362d7c2 --- /dev/null +++ b/aprs_tool.code-workspace @@ -0,0 +1,7 @@ +{ + "folders": [ + { + "path": "." + } + ] +} \ No newline at end of file diff --git a/templates/index.html b/templates/index.html index 3b864fd..9b3aad8 100644 --- a/templates/index.html +++ b/templates/index.html @@ -4,18 +4,79 @@ {{station_call}} Status + + + + + -

{{station_call}} Status

-Station location: {{station_lat}}, {{station_lon}} +
+
-

About

-This is a work in progress. See https://amiok.net/gitea/W1CDN/aprs_tool for usage. +

{{station_call}} Status

+ Station location: {{station_lat}}, {{station_lon}} + +

About

+ This is a work in progress. See https://amiok.net/gitea/W1CDN/aprs_tool for usage. +
+
+
+ +
+

Recent RF Packets

@@ -40,6 +101,8 @@ This is a work in progress. See + + + + + +
+ + + + \ No newline at end of file diff --git a/test_db.py b/test_db.py deleted file mode 100644 index e0959e5..0000000 --- a/test_db.py +++ /dev/null @@ -1,36 +0,0 @@ - -# Learn how to update database - -import sqlite3 - -def get_db_connection(): - conn = sqlite3.connect('database.db') - conn.row_factory = sqlite3.Row - return conn - -conn = get_db_connection() - -# Grab a random row from frames table and pretend it is new -cur = conn.cursor() -cur.execute("SELECT [from], id, created_unix FROM frames ORDER BY RANDOM() LIMIT 1;") -rows = cur.fetchall() -results = dict(rows[0]) -values = ', '.join('"%s"' % w for w in results.values()) - - -# Build query -# "from" is wrappedin [] because it is a reserved word and using '' doesn't work. -query3 = "INSERT INTO stations ([from], frames_id, last_heard_unix, count) \ -VALUES("+values+", 1) \ -ON CONFLICT([from]) \ -DO UPDATE SET count = count + 1;" - -# example https://stackoverflow.com/a/50718957/2152245 -# query2 = "INSERT INTO stations ([from], frames_id, last_heard_unix, count) \ -# VALUES('KC9TZN-8', 4068, 1687623864, 1) \ -# ON CONFLICT([from]) \ -# DO UPDATE SET count = count + 1;" - -conn.execute(query3) -conn.commit() -conn.close()