|
1 |
| -/* SondeHub Tracker Format Incoming Data |
| 1 | +/* SondeHub Amateur Tracker Format Incoming Data |
2 | 2 | *
|
3 | 3 | * Author: Luke Prior
|
4 | 4 | */
|
5 | 5 |
|
| 6 | +var excludedFields = [ |
| 7 | + "payload_callsign", |
| 8 | + "uploader_callsign", |
| 9 | + "software_version", |
| 10 | + "position", |
| 11 | + "user-agent", |
| 12 | + "uploaders", |
| 13 | + "snr", |
| 14 | + "rssi", |
| 15 | + "software_name", |
| 16 | + "alt", |
| 17 | + "lat", |
| 18 | + "lon", |
| 19 | + "heading", |
| 20 | + "datetime", |
| 21 | + "payload_callsign", |
| 22 | + "path", |
| 23 | + "time_received", |
| 24 | + "frame", |
| 25 | + "uploader_alt", |
| 26 | + "uploader_position", |
| 27 | + "uploader_radio", |
| 28 | + "uploader_antenna", |
| 29 | + "raw" |
| 30 | +]; |
| 31 | + |
| 32 | +var uniqueKeys = { |
| 33 | + "batt": {"precision": 2}, |
| 34 | + "frequency": {"precision": 4}, |
| 35 | + "tx_frequency": {"precision": 4} |
| 36 | +} |
| 37 | + |
6 | 38 | function formatData(data) {
|
7 | 39 | var hideAprs = offline.get('opt_hide_aprs');
|
8 | 40 | var response = {};
|
@@ -77,66 +109,17 @@ function formatData(data) {
|
77 | 109 | dataTempEntry.data = {};
|
78 | 110 | }
|
79 | 111 |
|
80 |
| - // Cleanup of some fields, limiting precision, formatting. etc. |
81 |
| - // Currently this section copies over specific fields. It should be changed |
82 |
| - // to initially copy over all fields that have not already been included, |
83 |
| - // Then apply formatting to some 'known' fields. |
84 |
| - |
85 |
| - // Fairly common fields |
86 |
| - if (data[key][i].hasOwnProperty("batt")) { |
87 |
| - dataTempEntry.data.batt = +data[key][i].batt.toFixed(2); |
88 |
| - } |
89 |
| - if (data[key][i].hasOwnProperty("frequency")) { |
90 |
| - dataTempEntry.data.frequency = +data[key][i].frequency.toFixed(4); |
91 |
| - } |
92 |
| - if (data[key][i].hasOwnProperty("tx_frequency")) { |
93 |
| - dataTempEntry.data.frequency_tx = +data[key][i].tx_frequency.toFixed(3); |
94 |
| - } |
95 |
| - if (data[key][i].hasOwnProperty("humidity")) { |
96 |
| - dataTempEntry.data.humidity = data[key][i].humidity; |
97 |
| - } |
98 |
| - if (data[key][i].hasOwnProperty("pressure")) { |
99 |
| - dataTempEntry.data.pressure = data[key][i].pressure; |
100 |
| - } |
101 |
| - if (data[key][i].hasOwnProperty("sats")) { |
102 |
| - dataTempEntry.data.sats = data[key][i].sats; |
103 |
| - } |
104 |
| - if (data[key][i].hasOwnProperty("temp")) { |
105 |
| - dataTempEntry.data.temp = data[key][i].temp; |
106 |
| - } |
107 |
| - if (data[key][i].hasOwnProperty("comment")) { |
108 |
| - dataTempEntry.data.comment = data[key][i].comment; |
109 |
| - } |
| 112 | + // Automatically add all remaining fields as data excluding excluded fields |
110 | 113 |
|
111 |
| - // Horus Binary V2 Fields |
112 |
| - if (data[key][i].hasOwnProperty("ascent_rate")) { |
113 |
| - // Limit to 1 decimal place. |
114 |
| - dataTempEntry.data.ascent_rate = +data[key][i].ascent_rate.toFixed(1); |
115 |
| - } |
116 |
| - if (data[key][i].hasOwnProperty("ext_pressure")) { |
117 |
| - dataTempEntry.data.ext_pressure = data[key][i].ext_pressure; |
118 |
| - } |
119 |
| - if (data[key][i].hasOwnProperty("ext_humidity")) { |
120 |
| - dataTempEntry.data.ext_humidity = data[key][i].ext_humidity; |
121 |
| - } |
122 |
| - if (data[key][i].hasOwnProperty("ext_temperature")) { |
123 |
| - dataTempEntry.data.ext_temperature = data[key][i].ext_temperature; |
124 |
| - } |
125 |
| - |
126 |
| - // Horus LoRa Fields |
127 |
| - if (data[key][i].hasOwnProperty("pyro_voltage")) { |
128 |
| - dataTempEntry.data.pyro_voltage = +data[key][i].pyro_voltage.toFixed(2); |
129 |
| - } |
130 |
| - if (data[key][i].hasOwnProperty("noise_floor_dbm")) { |
131 |
| - dataTempEntry.data.noise_floor_dbm = data[key][i].noise_floor_dbm; |
132 |
| - } |
133 |
| - if (data[key][i].hasOwnProperty("rx_pkt_count")) { |
134 |
| - dataTempEntry.data.rx_pkt_count = data[key][i].rx_pkt_count; |
135 |
| - } |
136 |
| - |
137 |
| - // Metadata added on by receiver applications. |
138 |
| - if (data[key][i].hasOwnProperty("modulation")) { |
139 |
| - dataTempEntry.data.modulation = data[key][i].modulation; |
| 114 | + for (let field in data[key][i]) { |
| 115 | + if (excludedFields.includes(field)) { |
| 116 | + continue; |
| 117 | + } |
| 118 | + if (uniqueKeys.hasOwnProperty(field)) { |
| 119 | + dataTempEntry.data[field] = data[key][i][field].toFixed(uniqueKeys[field].precision); |
| 120 | + } else { |
| 121 | + dataTempEntry.data[field] = data[key][i][field]; |
| 122 | + } |
140 | 123 | }
|
141 | 124 |
|
142 | 125 | dataTemp.push(dataTempEntry);
|
|
0 commit comments