Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
support unique data fields
  • Loading branch information
LukePrior committed May 11, 2022
commit 595216fb92cc58feedcc5233968d9dd16a3e578e
103 changes: 43 additions & 60 deletions js/format.js
Original file line number Diff line number Diff line change
@@ -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 = {};
Expand Down Expand Up @@ -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);
Expand Down
38 changes: 30 additions & 8 deletions js/tracker.js
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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
Expand Down