-
Notifications
You must be signed in to change notification settings - Fork 1
/
prediction.py
111 lines (89 loc) · 4.96 KB
/
prediction.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# -*- coding: utf-8 -*-
#from mpl_toolkits.mplot3d import Axes3D
import mysql.connector
import time
import requests
import functions
import datetime
from sonden_class import Sonden
import logging
import sys
sonde = Sonden()
def predict(mydb):
try:
mycursor = mydb.cursor()
sondenids = functions.sondenids(mydb,30)
anzahlids = len(sondenids)
logging.info("Start Prediction")
#Datenbank leeren
# mycursor.execute("TRUNCATE `prediction`")
# mydb.commit()
i = 0
while i <anzahlids:
sonde.setid(sondenids[i])
d = datetime.datetime.utcnow()
t = d.isoformat("T") + "Z"
startort = sonde.getstartort()
query = "DELETE FROM `prediction` WHERE sondenid = '" + sonde.sondenid + "'"
mycursor.execute(query)
query = "SELECT vgeschposD, vgeschnegD, maxhoeheD FROM `startort_stats` WHERE startort = '" + startort + "'"
mycursor.execute(query)
daten = mycursor.fetchall()
if daten != []:
daten = daten[0]
vgeschposD = daten[0]
vgeschnegD = abs(daten[1])
burst_altitude = daten[2]
if burst_altitude < sonde.gethoehe() and not sonde.isburst():
burst_altitude = sonde.gethoehe() + 100
if sonde.isburst():
payload = "launch_latitude=" + str(sonde.getlat())+ "&launch_longitude=" + str(sonde.getlon()) + "&launch_altitude=" + str(sonde.gethoehe()) + "&launch_datetime=" + t + "&ascent_rate=" + str(vgeschposD) + "&burst_altitude=" + str(float(sonde.gethoehe())+1) + "&descent_rate=" + str(vgeschnegD)
else:
payload = "launch_latitude=" + str(sonde.getlat()) + "&launch_longitude=" + str(sonde.getlon()) + "&launch_altitude=" + str(sonde.gethoehe()) + "&launch_datetime=" + t + "&ascent_rate=" + str(vgeschposD) + "&burst_altitude=" + str(burst_altitude) + "&descent_rate=" + str(vgeschnegD)
response = requests.get("http://predict.cusf.co.uk/api/v1/?" + payload, timeout=30)
#print(response.text)
#logging.info(response)
if response.status_code == 200:
j = 0
#steigende Daten
k = len(response.json()['prediction'][0]['trajectory'])
#print("Länge: " + str(k))
while j < k:
lat = response.json()['prediction'][0]['trajectory'][j]['latitude']
#print("Lat", lat)
lng = response.json()['prediction'][0]['trajectory'][j]['longitude']
#print("Lon", lng)
altitude = response.json()['prediction'][0]['trajectory'][j]['altitude']
#print("Höhe", altitude)
time = response.json()['prediction'][0]['trajectory'][j]['datetime']
time = int(datetime.datetime.strptime(time,'%Y-%m-%dT%H:%M:%S.%f%z').timestamp())
quelle = "predict.cusf.co.uk"
mycursor.execute("INSERT INTO prediction (sondenid, lat, lon, hoehe, time, quelle) VALUES (%s,%s,%s,%s,%s,%s)",(sondenids[i],lat,lng,altitude,time,quelle,))
mydb.commit()
j = j + 1
#print(j)
#fallende Daten
j = 0
k = len(response.json()['prediction'][1]['trajectory'])
#print("Länge: " + str(k))
while j < k:
lat = response.json()['prediction'][1]['trajectory'][j]['latitude']
#print("Lat", lat)
lng = response.json()['prediction'][1]['trajectory'][j]['longitude']
#print("Lon", lng)
altitude = response.json()['prediction'][1]['trajectory'][j]['altitude']
#print("Höhe", altitude)
time = response.json()['prediction'][1]['trajectory'][j]['datetime']
time = int(datetime.datetime.strptime(time,'%Y-%m-%dT%H:%M:%S.%f%z').timestamp())
quelle = "predict.cusf.co.uk"
mycursor.execute("INSERT INTO prediction (sondenid, lat, lon, hoehe, time, quelle) VALUES (%s,%s,%s,%s,%s,%s)",(sondenids[i],lat,lng,altitude,time,quelle,))
mydb.commit()
j = j + 1
#print(j)
else:
logging.error("Prediction Request not 200 " + response.url + response.text)
i = i + 1
except:
print("Unexpected error prediction.py:" + str(sys.exc_info()))
logging.error("Unexpected error presiction.py:" + str(sys.exc_info()))
return None