' +
'
';
var b = '
' +
@@ -1498,7 +1498,17 @@ function createHysplit(callsign, adjustment) {
var altitude = Math.round(vehicle.curr_position.gps_alt) + adjustment;
- var endTime = new Date(Date.parse(vehicle.curr_position.gps_time));
+ var startTime = new Date(Date.parse(vehicle.curr_position.gps_time.replace("Z","")));
+ //max is 8h back so need to catch is older
+ var nowTime = new Date();
+ var timeDifference = nowTime - startTime;
+ if (timeDifference > 28800000) {
+ nowTime.setHours(nowTime.getHours() - 8);
+ startTime = nowTime;
+ }
+ startTime = startTime.toISOString();
+
+ var endTime = new Date(Date.parse(vehicle.curr_position.gps_time.replace("Z","")));
endTime.setHours(endTime.getHours() + 84);
endTime = endTime.toISOString();
@@ -1508,7 +1518,7 @@ function createHysplit(callsign, adjustment) {
+ "&launch_latitude=" + vehicle.curr_position.gps_lat
+ "&launch_longitude=" + lon
+ "&launch_altitude=" + (altitude-1)
- + "&launch_datetime=" + vehicle.curr_position.gps_time
+ + "&launch_datetime=" + startTime
+ "&ascent_rate=0.1"
+ "&float_altitude=" + altitude
+ "&stop_datetime=" + endTime;
From 595216fb92cc58feedcc5233968d9dd16a3e578e Mon Sep 17 00:00:00 2001
From: Uskompuf <22492406+Uskompuf@users.noreply.github.com>
Date: Wed, 11 May 2022 17:46:18 +1000
Subject: [PATCH 2/3] support unique data fields
---
js/format.js | 103 +++++++++++++++++++++-----------------------------
js/tracker.js | 38 +++++++++++++++----
2 files changed, 73 insertions(+), 68 deletions(-)
diff --git a/js/format.js b/js/format.js
index 9acfc11..4659957 100644
--- a/js/format.js
+++ b/js/format.js
@@ -1,8 +1,40 @@
-/* SondeHub Tracker Format Incoming Data
+/* SondeHub Amateur Tracker Format Incoming Data
*
* Author: Luke Prior
*/
+var excludedFields = [
+ "payload_callsign",
+ "uploader_callsign",
+ "software_version",
+ "position",
+ "user-agent",
+ "uploaders",
+ "snr",
+ "rssi",
+ "software_name",
+ "alt",
+ "lat",
+ "lon",
+ "heading",
+ "datetime",
+ "payload_callsign",
+ "path",
+ "time_received",
+ "frame",
+ "uploader_alt",
+ "uploader_position",
+ "uploader_radio",
+ "uploader_antenna",
+ "raw"
+];
+
+var uniqueKeys = {
+ "batt": {"precision": 2},
+ "frequency": {"precision": 4},
+ "tx_frequency": {"precision": 4}
+}
+
function formatData(data) {
var hideAprs = offline.get('opt_hide_aprs');
var response = {};
@@ -77,66 +109,17 @@ function formatData(data) {
dataTempEntry.data = {};
}
- // Cleanup of some fields, limiting precision, formatting. etc.
- // Currently this section copies over specific fields. It should be changed
- // to initially copy over all fields that have not already been included,
- // Then apply formatting to some 'known' fields.
-
- // Fairly common fields
- if (data[key][i].hasOwnProperty("batt")) {
- dataTempEntry.data.batt = +data[key][i].batt.toFixed(2);
- }
- if (data[key][i].hasOwnProperty("frequency")) {
- dataTempEntry.data.frequency = +data[key][i].frequency.toFixed(4);
- }
- if (data[key][i].hasOwnProperty("tx_frequency")) {
- dataTempEntry.data.frequency_tx = +data[key][i].tx_frequency.toFixed(3);
- }
- if (data[key][i].hasOwnProperty("humidity")) {
- dataTempEntry.data.humidity = data[key][i].humidity;
- }
- if (data[key][i].hasOwnProperty("pressure")) {
- dataTempEntry.data.pressure = data[key][i].pressure;
- }
- if (data[key][i].hasOwnProperty("sats")) {
- dataTempEntry.data.sats = data[key][i].sats;
- }
- if (data[key][i].hasOwnProperty("temp")) {
- dataTempEntry.data.temp = data[key][i].temp;
- }
- if (data[key][i].hasOwnProperty("comment")) {
- dataTempEntry.data.comment = data[key][i].comment;
- }
+ // Automatically add all remaining fields as data excluding excluded fields
- // Horus Binary V2 Fields
- if (data[key][i].hasOwnProperty("ascent_rate")) {
- // Limit to 1 decimal place.
- dataTempEntry.data.ascent_rate = +data[key][i].ascent_rate.toFixed(1);
- }
- if (data[key][i].hasOwnProperty("ext_pressure")) {
- dataTempEntry.data.ext_pressure = data[key][i].ext_pressure;
- }
- if (data[key][i].hasOwnProperty("ext_humidity")) {
- dataTempEntry.data.ext_humidity = data[key][i].ext_humidity;
- }
- if (data[key][i].hasOwnProperty("ext_temperature")) {
- dataTempEntry.data.ext_temperature = data[key][i].ext_temperature;
- }
-
- // Horus LoRa Fields
- if (data[key][i].hasOwnProperty("pyro_voltage")) {
- dataTempEntry.data.pyro_voltage = +data[key][i].pyro_voltage.toFixed(2);
- }
- if (data[key][i].hasOwnProperty("noise_floor_dbm")) {
- dataTempEntry.data.noise_floor_dbm = data[key][i].noise_floor_dbm;
- }
- if (data[key][i].hasOwnProperty("rx_pkt_count")) {
- dataTempEntry.data.rx_pkt_count = data[key][i].rx_pkt_count;
- }
-
- // Metadata added on by receiver applications.
- if (data[key][i].hasOwnProperty("modulation")) {
- dataTempEntry.data.modulation = data[key][i].modulation;
+ for (let field in data[key][i]) {
+ if (excludedFields.includes(field)) {
+ continue;
+ }
+ if (uniqueKeys.hasOwnProperty(field)) {
+ dataTempEntry.data[field] = data[key][i][field].toFixed(uniqueKeys[field].precision);
+ } else {
+ dataTempEntry.data[field] = data[key][i][field];
+ }
}
dataTemp.push(dataTempEntry);
diff --git a/js/tracker.js b/js/tracker.js
index 116e8ee..7a3cc2a 100644
--- a/js/tracker.js
+++ b/js/tracker.js
@@ -122,7 +122,7 @@ var globalKeys = {
"ext_pressure": "Pressure, External",
"subtype": "Sonde Sub-type",
"frequency": "Frequency",
- "frequency_tx": "TX Frequency",
+ "tx_frequency": "TX Frequency",
"manufacturer": "Manufacturer",
"type": "Sonde Type",
"burst_timer": "Burst Timer",
@@ -158,11 +158,24 @@ var globalSuffixes = {
"humidity": " %",
"ext_humidity": " %",
"frequency": " MHz",
- "frequency_tx": " MHz",
+ "tx_frequency": " MHz",
"noise_floor_dbm": " dBm",
"spam": ""
};
+var keyOrder = [
+ "ascent_rate",
+ "batt",
+ "frequency",
+ "tx_frequency",
+ "humidity",
+ "pressure",
+ "sats",
+ "temp",
+ "comment",
+ "modulation"
+]
+
// localStorage vars
var ls_receivers = false;
var ls_pred = false;
@@ -866,24 +879,33 @@ function habitat_data(jsondata, alternative) {
var data = (typeof jsondata === "string") ? $.parseJSON(jsondata) : jsondata;
var array = [];
+ var tempArray = [];
var output = "";
var txFreq = false
if(Object.keys(data).length === 0) return "";
- if ("frequency_tx" in data) {
+ if ("tx_frequency" in data) {
txFreq = true
}
- for(var key in data) {
- if (key === "frequency" && txFreq) {} else {
+ for (var field in keyOrder) {
+ if (keyOrder[field] in data) {
+ if (keyOrder[field] === "frequency" && txFreq) {} else {
+ array.push([keyOrder[field], data[keyOrder[field]]]);
+ tempArray.push(keyOrder[field]);
+ }
+ }
+ }
+
+ for (var key in data) {
+ if (!tempArray.includes(key)) {
array.push([key, data[key]]);
+ tempArray.push(key);
}
}
- //array.sort(function(a, b) {
- // return a[0].localeCompare(b[0]);
- //});
+ console.log(array);
for(var i = 0, ii = array.length; i < ii; i++) {
var k = array[i][0]; // key
From 0c42076c89bd0ef6a00fd64510e8ab4072f68a0e Mon Sep 17 00:00:00 2001
From: Uskompuf <22492406+Uskompuf@users.noreply.github.com>
Date: Wed, 11 May 2022 18:32:43 +1000
Subject: [PATCH 3/3] partial working max alt aprs filter
---
js/format.js | 7 ++++++-
js/tracker.js | 10 ++++------
2 files changed, 10 insertions(+), 7 deletions(-)
diff --git a/js/format.js b/js/format.js
index 4659957..a7059f0 100644
--- a/js/format.js
+++ b/js/format.js
@@ -47,7 +47,9 @@ function formatData(data) {
var dataTempEntry = {};
var aprsflag = false;
dataTempEntry.callsign = {};
+ maximumAltitude = 0;
if (vehicles.hasOwnProperty(data[key][i].payload_callsign)) {
+ maximumAltitude = vehicles[data[key][i].payload_callsign].max_alt;
if (data[key][i].datetime == vehicles[data[key][i].payload_callsign].curr_position.gps_time) {
dataTempEntry = vehicles[data[key][i].payload_callsign].curr_position;
}
@@ -90,7 +92,10 @@ function formatData(data) {
}
}
dataTempEntry.gps_alt = parseFloat((data[key][i].alt).toPrecision(8));
- if (dataTempEntry.gps_alt < 1500 && aprsflag && !hideAprs) {
+ if (dataTempEntry.gps_alt > maximumAltitude) {
+ maximumAltitude = dataTempEntry.gps_alt;
+ }
+ if (maximumAltitude < 1500 && aprsflag && !hideAprs) {
continue;
}
dataTempEntry.gps_lat = parseFloat((data[key][i].lat).toPrecision(8));
diff --git a/js/tracker.js b/js/tracker.js
index 7a3cc2a..c37a592 100644
--- a/js/tracker.js
+++ b/js/tracker.js
@@ -905,8 +905,6 @@ function habitat_data(jsondata, alternative) {
}
}
- console.log(array);
-
for(var i = 0, ii = array.length; i < ii; i++) {
var k = array[i][0]; // key
var v = array[i][1]; // value
@@ -3018,7 +3016,7 @@ function refresh() {
if (wvar.query != null && JSON.stringify(data).indexOf(wvar.query) == -1) {
refreshSingle(wvar.query);
} else {
- response = formatData(data, false);
+ response = formatData(data);
update(response, true);
$("#stTimer").attr("data-timestamp", response.fetch_timestamp);
}
@@ -3058,7 +3056,7 @@ function refreshSingle(serial) {
url: data_url,
dataType: "json",
success: function(data, textStatus) {
- response = formatData(data, false);
+ response = formatData(data);
update(response, true);
$("#stText").text("");
},
@@ -3099,7 +3097,7 @@ function refreshSingleNew(serial) {
data: data_str,
dataType: "json",
success: function(data, textStatus) {
- response = formatData(data, false);
+ response = formatData(data);
update(response, true);
},
error: function() {
@@ -3176,7 +3174,7 @@ function liveData() {
var tempDate = new Date(frame[frame.length - 1]["1"].time_received).getTime()
}
if ((dateNow - tempDate) < 30000) {
- var test = formatData(frame, true);
+ var test = formatData(frame);
if (clientActive) {
live_data_buffer.positions.position.push.apply(live_data_buffer.positions.position,test.positions.position)
}