Skip to content

Commit 78bdbde

Browse files
authored
Merge pull request #223 from LukePrior/testing
XDATA + Predictions + Launch Popup fixes
2 parents 7c7a2fe + c60216a commit 78bdbde

File tree

5 files changed

+1499
-1532
lines changed

5 files changed

+1499
-1532
lines changed

build.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ java -jar "../tools/yuicompressor-2.4.8.jar" --type=js --disable-optimizations -
2626
java -jar "../tools/yuicompressor-2.4.8.jar" --type=js --disable-optimizations --nomunge app.js >> mobile.js
2727
java -jar "../tools/yuicompressor-2.4.8.jar" --type=js --disable-optimizations --nomunge colour-map.js >> mobile.js
2828
java -jar "../tools/yuicompressor-2.4.8.jar" --type=js --disable-optimizations --nomunge xdata.js >> mobile.js
29+
java -jar "../tools/yuicompressor-2.4.8.jar" --type=js --disable-optimizations --nomunge station.js >> mobile.js
30+
java -jar "../tools/yuicompressor-2.4.8.jar" --type=js --disable-optimizations --nomunge format.js >> mobile.js
2931

3032
#compile plot lib and config
3133
java -jar "../tools/yuicompressor-2.4.8.jar" --type=js --disable-optimizations --nomunge _jquery.flot.js >> init_plot.js

js/format.js

Lines changed: 322 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,322 @@
1+
/* SondeHub Tracker Format Incoming Data
2+
*
3+
* Author: Luke Prior
4+
*/
5+
6+
function formatData(data, live) {
7+
var response = {};
8+
response.positions = {};
9+
var dataTemp = [];
10+
if (live) { // Websockets
11+
for (let entry in data) {
12+
var dataTempEntry = {};
13+
var station = data[entry].uploader_callsign;
14+
dataTempEntry.callsign = {};
15+
//check if other stations also received this packet
16+
if (vehicles.hasOwnProperty(data[entry].serial)) {
17+
if (data[entry].datetime == vehicles[data[entry].serial].curr_position.gps_time) {
18+
for (let key in vehicles[data[entry].serial].curr_position.callsign) {
19+
if (vehicles[data[entry].serial].curr_position.callsign.hasOwnProperty(key)) {
20+
if (key != station) {
21+
dataTempEntry.callsign[key] = {};
22+
if (vehicles[data[entry].serial].curr_position.callsign[key].hasOwnProperty("snr")) {
23+
dataTempEntry.callsign[key].snr = vehicles[data[entry].serial].curr_position.callsign[key].snr;
24+
}
25+
if (vehicles[data[entry].serial].curr_position.callsign[key].hasOwnProperty("rssi")) {
26+
dataTempEntry.callsign[key].rssi = vehicles[data[entry].serial].curr_position.callsign[key].rssi;
27+
}
28+
if (vehicles[data[entry].serial].curr_position.callsign[key].hasOwnProperty("frequency")) {
29+
dataTempEntry.callsign[key].frequency = vehicles[data[entry].serial].curr_position.callsign[key].frequency;
30+
}
31+
}
32+
}
33+
}
34+
}
35+
}
36+
dataTempEntry.callsign[station] = {};
37+
if (data[entry].snr) {
38+
dataTempEntry.callsign[station].snr = data[entry].snr;
39+
}
40+
if (data[entry].rssi) {
41+
dataTempEntry.callsign[station].rssi = data[entry].rssi;
42+
}
43+
if (data[entry].frequency) {
44+
dataTempEntry.callsign[station].frequency = data[entry].frequency;
45+
}
46+
dataTempEntry.gps_alt = data[entry].alt;
47+
dataTempEntry.gps_lat = data[entry].lat;
48+
dataTempEntry.gps_lon = data[entry].lon;
49+
if (data[entry].heading) {
50+
dataTempEntry.gps_heading = data[entry].heading;
51+
}
52+
dataTempEntry.gps_time = data[entry].datetime;
53+
dataTempEntry.server_time = data[entry].datetime;
54+
dataTempEntry.vehicle = data[entry].serial;
55+
dataTempEntry.position_id = data[entry].serial + "-" + data[entry].datetime;
56+
dataTempEntry.data = {};
57+
if (data[entry].batt) {
58+
dataTempEntry.data.batt = data[entry].batt;
59+
}
60+
if (data[entry].burst_timer) {
61+
dataTempEntry.data.burst_timer = data[entry].burst_timer;
62+
}
63+
if (data[entry].frequency) {
64+
dataTempEntry.data.frequency = data[entry].frequency;
65+
}
66+
if (data[entry].tx_frequency) {
67+
dataTempEntry.data.frequency_tx = data[entry].tx_frequency;
68+
}
69+
if (data[entry].hasOwnProperty("humidity")) {
70+
dataTempEntry.data.humidity = data[entry].humidity;
71+
}
72+
if (data[entry].manufacturer) {
73+
dataTempEntry.data.manufacturer = data[entry].manufacturer;
74+
}
75+
if (data[entry].hasOwnProperty("pressure")) {
76+
dataTempEntry.data.pressure = data[entry].pressure;
77+
}
78+
if (data[entry].sats) {
79+
dataTempEntry.data.sats = data[entry].sats;
80+
}
81+
if (data[entry].hasOwnProperty("temp")) {
82+
dataTempEntry.data.temperature_external = data[entry].temp;
83+
}
84+
if (data[entry].type) {
85+
dataTempEntry.data.type = data[entry].type;
86+
dataTempEntry.type = data[entry].type;
87+
}
88+
if (data[entry].subtype) {
89+
dataTempEntry.data.type = data[entry].subtype;
90+
dataTempEntry.type = data[entry].subtype;
91+
}
92+
if (data[entry].xdata) {
93+
dataTempEntry.data.xdata = data[entry].xdata;
94+
95+
if (data[entry].hasOwnProperty("pressure")) {
96+
xdata_pressure = data[entry].pressure;
97+
} else {
98+
xdata_pressure = 1100.0;
99+
}
100+
101+
var tempXDATA = parseXDATA(data[entry].xdata, xdata_pressure);
102+
for (let field in tempXDATA) {
103+
if (tempXDATA.hasOwnProperty(field)) {
104+
if (field == "xdata_instrument") {
105+
dataTempEntry.data.xdata_instrument = tempXDATA.xdata_instrument.join(', ');
106+
} else {
107+
dataTempEntry.data[field] = tempXDATA[field];
108+
}
109+
}
110+
}
111+
}
112+
if (data[entry].serial.toLowerCase() != "xxxxxxxx") {
113+
dataTemp.push(dataTempEntry);
114+
}
115+
}
116+
} else if (data.length == null) { // Elasticsearch
117+
for (let key in data) {
118+
if (data.hasOwnProperty(key)) {
119+
if (typeof data[key] === 'object') {
120+
for (let i in data[key]) {
121+
var dataTempEntry = {};
122+
var station = data[key][i].uploader_callsign;
123+
dataTempEntry.callsign = {};
124+
dataTempEntry.callsign[station] = {};
125+
if (data[key][i].snr) {
126+
dataTempEntry.callsign[station].snr = data[key][i].snr;
127+
}
128+
if (data[key][i].rssi) {
129+
dataTempEntry.callsign[station].rssi = data[key][i].rssi;
130+
}
131+
if (data[key][i].frequency) {
132+
dataTempEntry.callsign[station].frequency = data[key][i].frequency;
133+
}
134+
dataTempEntry.gps_alt = data[key][i].alt;
135+
dataTempEntry.gps_lat = data[key][i].lat;
136+
dataTempEntry.gps_lon = data[key][i].lon;
137+
if (data[key][i].heading) {
138+
dataTempEntry.gps_heading = data[key][i].heading;
139+
}
140+
dataTempEntry.gps_time = data[key][i].datetime;
141+
dataTempEntry.server_time = data[key][i].datetime;
142+
dataTempEntry.vehicle = data[key][i].serial;
143+
dataTempEntry.position_id = data[key][i].serial + "-" + data[key][i].datetime;
144+
dataTempEntry.data = {};
145+
if (data[key][i].batt) {
146+
dataTempEntry.data.batt = data[key][i].batt;
147+
}
148+
if (data[key][i].burst_timer) {
149+
dataTempEntry.data.burst_timer = data[key][i].burst_timer;
150+
}
151+
if (data[key][i].frequency) {
152+
dataTempEntry.data.frequency = data[key][i].frequency;
153+
}
154+
if (data[key][i].tx_frequency) {
155+
dataTempEntry.data.frequency_tx = data[key][i].tx_frequency;
156+
}
157+
if (data[key][i].hasOwnProperty("humidity")) {
158+
dataTempEntry.data.humidity = data[key][i].humidity;
159+
}
160+
if (data[key][i].manufacturer) {
161+
dataTempEntry.data.manufacturer = data[key][i].manufacturer;
162+
}
163+
if (data[key][i].hasOwnProperty("pressure")) {
164+
dataTempEntry.data.pressure = data[key][i].pressure;
165+
}
166+
if (data[key][i].sats) {
167+
dataTempEntry.data.sats = data[key][i].sats;
168+
}
169+
if (data[key][i].hasOwnProperty("temp")) {
170+
dataTempEntry.data.temperature_external = data[key][i].temp;
171+
}
172+
if (data[key][i].type) {
173+
dataTempEntry.data.type = data[key][i].type;
174+
dataTempEntry.type = data[key][i].type;
175+
}
176+
if (data[key][i].subtype) {
177+
dataTempEntry.data.type = data[key][i].subtype;
178+
dataTempEntry.type = data[key][i].subtype;
179+
}
180+
if (data[key][i].xdata) {
181+
dataTempEntry.data.xdata = data[key][i].xdata;
182+
if (data[key][i].hasOwnProperty("pressure")) {
183+
xdata_pressure = data[key][i].pressure;
184+
} else {
185+
xdata_pressure = 1100.0;
186+
}
187+
var tempXDATA = parseXDATA(data[key][i].xdata, xdata_pressure);
188+
for (let field in tempXDATA) {
189+
if (tempXDATA.hasOwnProperty(field)) {
190+
if (field == "xdata_instrument") {
191+
dataTempEntry.data.xdata_instrument = tempXDATA.xdata_instrument.join(', ');
192+
} else {
193+
dataTempEntry.data[field] = tempXDATA[field];
194+
}
195+
}
196+
}
197+
}
198+
if (data[key][i].serial.toLowerCase() != "xxxxxxxx") {
199+
dataTemp.push(dataTempEntry);
200+
}
201+
}
202+
}
203+
}
204+
}
205+
} else { // AWS
206+
for (var i = data.length - 1; i >= 0; i--) {
207+
if (data[i].hasOwnProperty('subtype') && data[i].subtype == "SondehubV1") { // SondeHub V1
208+
var dataTempEntry = {};
209+
var station = data[i].uploader_callsign;
210+
dataTempEntry.callsign = {};
211+
dataTempEntry.callsign[station] = {};
212+
dataTempEntry.gps_alt = parseFloat(data[i].alt);
213+
dataTempEntry.gps_lat = parseFloat(data[i].lat);
214+
dataTempEntry.gps_lon = parseFloat(data[i].lon);
215+
dataTempEntry.gps_time = data[i].time_received;
216+
dataTempEntry.server_time = data[i].time_received;
217+
dataTempEntry.vehicle = data[i].serial;
218+
dataTempEntry.position_id = data[i].serial + "-" + data[i].time_received;
219+
dataTempEntry.data = {};
220+
if (data[i].humidity) {
221+
dataTempEntry.data.humidity = parseFloat(data[i].humidity);
222+
}
223+
if (data[i].temp) {
224+
dataTempEntry.data.temperature_external = parseFloat(data[i].temp);
225+
}
226+
dataTemp.push(dataTempEntry);
227+
} else { // SondeHub V2
228+
var dataTempEntry = {};
229+
var station = data[i].uploader_callsign;
230+
dataTempEntry.callsign = {};
231+
dataTempEntry.callsign[station] = {};
232+
if (data[i].snr) {
233+
dataTempEntry.callsign[station].snr = data[i].snr;
234+
}
235+
if (data[i].rssi) {
236+
dataTempEntry.callsign[station].rssi = data[i].rssi;
237+
}
238+
if (data[i].frequency) {
239+
dataTempEntry.callsign[station].frequency = data[i].frequency;
240+
}
241+
dataTempEntry.gps_alt = data[i].alt;
242+
dataTempEntry.gps_lat = data[i].lat;
243+
dataTempEntry.gps_lon = data[i].lon;
244+
if (data[i].heading) {
245+
dataTempEntry.gps_heading = data[i].heading;
246+
}
247+
dataTempEntry.gps_time = data[i].datetime;
248+
dataTempEntry.server_time = data[i].datetime;
249+
dataTempEntry.vehicle = data[i].serial;
250+
dataTempEntry.position_id = data[i].serial + "-" + data[i].datetime;
251+
dataTempEntry.data = {};
252+
if (data[i].batt) {
253+
dataTempEntry.data.batt = data[i].batt;
254+
}
255+
if (data[i].burst_timer) {
256+
dataTempEntry.data.burst_timer = data[i].burst_timer;
257+
}
258+
if (data[i].frequency) {
259+
dataTempEntry.data.frequency = data[i].frequency;
260+
}
261+
if (data[i].tx_frequency) {
262+
dataTempEntry.data.frequency_tx = data[i].tx_frequency;
263+
}
264+
if (data[i].hasOwnProperty("humidity")) {
265+
dataTempEntry.data.humidity = data[i].humidity;
266+
}
267+
if (data[i].manufacturer) {
268+
dataTempEntry.data.manufacturer = data[i].manufacturer;
269+
}
270+
if (data[i].hasOwnProperty("pressure")) {
271+
dataTempEntry.data.pressure = data[i].pressure;
272+
}
273+
if (data[i].sats) {
274+
dataTempEntry.data.sats = data[i].sats;
275+
}
276+
if (data[i].hasOwnProperty("temp")) {
277+
dataTempEntry.data.temperature_external = data[i].temp;
278+
}
279+
if (data[i].type && data[i].type == "payload_telemetry") { // SondeHub V1.5 data?
280+
var comment = data[i].comment.split(" ");
281+
if (v1types.hasOwnProperty(comment[0])) {
282+
dataTempEntry.data.type = v1types[comment[0]];
283+
dataTempEntry.type = v1types[comment[0]];
284+
if (v1manufacturers.hasOwnProperty(dataTempEntry.type)) {
285+
dataTempEntry.data.manufacturer = v1manufacturers[dataTempEntry.type];
286+
}
287+
}
288+
dataTempEntry.data.frequency = comment[2];
289+
} else if (data[i].type) {
290+
dataTempEntry.data.type = data[i].type;
291+
dataTempEntry.type = data[i].type;
292+
}
293+
if (data[i].subtype) {
294+
dataTempEntry.data.type = data[i].subtype;
295+
dataTempEntry.type = data[i].subtype;
296+
}
297+
if (data[i].xdata) {
298+
dataTempEntry.data.xdata = data[i].xdata;
299+
if (data[i].hasOwnProperty("pressure")) {
300+
xdata_pressure = data[i].pressure;
301+
} else {
302+
xdata_pressure = 1100.0;
303+
}
304+
var tempXDATA = parseXDATA(data[i].xdata, xdata_pressure);
305+
for (let field in tempXDATA) {
306+
if (tempXDATA.hasOwnProperty(field)) {
307+
if (field == "xdata_instrument") {
308+
dataTempEntry.data.xdata_instrument = tempXDATA.xdata_instrument.join(', ');
309+
} else {
310+
dataTempEntry.data[field] = tempXDATA[field];
311+
}
312+
}
313+
}
314+
}
315+
dataTemp.push(dataTempEntry);
316+
}
317+
}
318+
}
319+
response.positions.position = dataTemp;
320+
response.fetch_timestamp = Date.now();
321+
return response;
322+
}

0 commit comments

Comments
 (0)