diff --git a/js/tracker.js b/js/tracker.js index 418f136..3a559de 100644 --- a/js/tracker.js +++ b/js/tracker.js @@ -2676,22 +2676,102 @@ function formatData(data, live) { response.positions = {}; var dataTemp = []; if (live) { - for (let entry in data) { + if (data.length) { + for (let entry in data) { + var dataTempEntry = {}; + var station = data[entry].uploader_callsign; + dataTempEntry.callsign = {}; + //check if other stations also received this packet + if (vehicles.hasOwnProperty(data[entry].serial)) { + if (data[entry].datetime == vehicles[data[entry].serial].curr_position.gps_time) { + for (let key in vehicles[data[entry].serial].curr_position.callsign) { + if (vehicles[data[entry].serial].curr_position.callsign.hasOwnProperty(key)) { + if (key != station) { + dataTempEntry.callsign[key] = {}; + if (vehicles[data[entry].serial].curr_position.callsign[key].hasOwnProperty("snr")) { + dataTempEntry.callsign[key].snr = vehicles[data[entry].serial].curr_position.callsign[key].snr; + } + if (vehicles[data[entry].serial].curr_position.callsign[key].hasOwnProperty("rssi")) { + dataTempEntry.callsign[key].rssi = vehicles[data[entry].serial].curr_position.callsign[key].rssi; + } + } + } + } + } + } + dataTempEntry.callsign[station] = {}; + if (data[entry].snr) { + dataTempEntry.callsign[station].snr = data[entry].snr; + } + if (data[entry].rssi) { + dataTempEntry.callsign[station].rssi = data[entry].rssi; + } + dataTempEntry.gps_alt = data[entry].alt; + dataTempEntry.gps_lat = data[entry].lat; + dataTempEntry.gps_lon = data[entry].lon; + if (data[entry].heading) { + dataTempEntry.gps_heading = data[entry].heading; + } + dataTempEntry.gps_time = data[entry].datetime; + dataTempEntry.server_time = data[entry].datetime; + dataTempEntry.vehicle = data[entry].serial; + dataTempEntry.position_id = data[entry].serial + "-" + data[entry].datetime; + dataTempEntry.data = {}; + if (data[entry].batt) { + dataTempEntry.data.batt = data[entry].batt; + } + if (data[entry].burst_timer) { + dataTempEntry.data.burst_timer = data[entry].burst_timer; + } + if (data[entry].frequency) { + dataTempEntry.data.frequency = data[entry].frequency; + } + if (data[entry].humidity) { + dataTempEntry.data.humidity = data[entry].humidity; + } + if (data[entry].manufacturer) { + dataTempEntry.data.manufacturer = data[entry].manufacturer; + } + if (data[entry].sats) { + dataTempEntry.data.sats = data[entry].sats; + } + if (data[entry].temp) { + dataTempEntry.data.temperature_external = data[entry].temp; + } + if (data[entry].type) { + dataTempEntry.data.type = data[entry].type; + dataTempEntry.type = data[entry].type; + } + if (data[entry].subtype) { + dataTempEntry.data.type = data[entry].subtype; + dataTempEntry.type = data[entry].subtype; + } + if (data[entry].pressure) { + dataTempEntry.data.pressure = data[entry].pressure; + } + if (data[entry].xdata) { + dataTempEntry.data.xdata = data[entry].xdata; + } + if (data[entry].serial.toLowerCase() != "xxxxxxxx") { + dataTemp.push(dataTempEntry); + } + } + } else { var dataTempEntry = {}; - var station = data[entry].uploader_callsign; + var station = data.uploader_callsign; dataTempEntry.callsign = {}; //check if other stations also received this packet - if (vehicles.hasOwnProperty(data[entry].serial)) { - if (data[entry].datetime == vehicles[data[entry].serial].curr_position.gps_time) { - for (let key in vehicles[data[entry].serial].curr_position.callsign) { - if (vehicles[data[entry].serial].curr_position.callsign.hasOwnProperty(key)) { + if (vehicles.hasOwnProperty(data.serial)) { + if (data.datetime == vehicles[data.serial].curr_position.gps_time) { + for (let key in vehicles[data.serial].curr_position.callsign) { + if (vehicles[data.serial].curr_position.callsign.hasOwnProperty(key)) { if (key != station) { dataTempEntry.callsign[key] = {}; - if (vehicles[data[entry].serial].curr_position.callsign[key].hasOwnProperty("snr")) { - dataTempEntry.callsign[key].snr = vehicles[data[entry].serial].curr_position.callsign[key].snr; + if (vehicles[data.serial].curr_position.callsign[key].hasOwnProperty("snr")) { + dataTempEntry.callsign[key].snr = vehicles[data.serial].curr_position.callsign[key].snr; } - if (vehicles[data[entry].serial].curr_position.callsign[key].hasOwnProperty("rssi")) { - dataTempEntry.callsign[key].rssi = vehicles[data[entry].serial].curr_position.callsign[key].rssi; + if (vehicles[data.serial].curr_position.callsign[key].hasOwnProperty("rssi")) { + dataTempEntry.callsign[key].rssi = vehicles[data.serial].curr_position.callsign[key].rssi; } } } @@ -2699,59 +2779,59 @@ function formatData(data, live) { } } dataTempEntry.callsign[station] = {}; - if (data[entry].snr) { - dataTempEntry.callsign[station].snr = data[entry].snr; - } - if (data[entry].rssi) { - dataTempEntry.callsign[station].rssi = data[entry].rssi; - } - dataTempEntry.gps_alt = data[entry].alt; - dataTempEntry.gps_lat = data[entry].lat; - dataTempEntry.gps_lon = data[entry].lon; - if (data[entry].heading) { - dataTempEntry.gps_heading = data[entry].heading; - } - dataTempEntry.gps_time = data[entry].datetime; - dataTempEntry.server_time = data[entry].datetime; - dataTempEntry.vehicle = data[entry].serial; - dataTempEntry.position_id = data[entry].serial + "-" + data[entry].datetime; + if (data.snr) { + dataTempEntry.callsign[station].snr = data.snr; + } + if (data.rssi) { + dataTempEntry.callsign[station].rssi = data.rssi; + } + dataTempEntry.gps_alt = data.alt; + dataTempEntry.gps_lat = data.lat; + dataTempEntry.gps_lon = data.lon; + if (data.heading) { + dataTempEntry.gps_heading = data.heading; + } + dataTempEntry.gps_time = data.datetime; + dataTempEntry.server_time = data.datetime; + dataTempEntry.vehicle = data.serial; + dataTempEntry.position_id = data.serial + "-" + data.datetime; dataTempEntry.data = {}; - if (data[entry].batt) { - dataTempEntry.data.batt = data[entry].batt; + if (data.batt) { + dataTempEntry.data.batt = data.batt; } - if (data[entry].burst_timer) { - dataTempEntry.data.burst_timer = data[entry].burst_timer; + if (data.burst_timer) { + dataTempEntry.data.burst_timer = data.burst_timer; } - if (data[entry].frequency) { - dataTempEntry.data.frequency = data[entry].frequency; + if (data.frequency) { + dataTempEntry.data.frequency = data.frequency; } - if (data[entry].humidity) { - dataTempEntry.data.humidity = data[entry].humidity; + if (data.humidity) { + dataTempEntry.data.humidity = data.humidity; } - if (data[entry].manufacturer) { - dataTempEntry.data.manufacturer = data[entry].manufacturer; + if (data.manufacturer) { + dataTempEntry.data.manufacturer = data.manufacturer; } - if (data[entry].sats) { - dataTempEntry.data.sats = data[entry].sats; + if (data.sats) { + dataTempEntry.data.sats = data.sats; } - if (data[entry].temp) { - dataTempEntry.data.temperature_external = data[entry].temp; + if (data.temp) { + dataTempEntry.data.temperature_external = data.temp; } - if (data[entry].type) { - dataTempEntry.data.type = data[entry].type; - dataTempEntry.type = data[entry].type; + if (data.type) { + dataTempEntry.data.type = data.type; + dataTempEntry.type = data.type; } - if (data[entry].subtype) { - dataTempEntry.data.type = data[entry].subtype; - dataTempEntry.type = data[entry].subtype; + if (data.subtype) { + dataTempEntry.data.type = data.subtype; + dataTempEntry.type = data.subtype; } - if (data[entry].pressure) { - dataTempEntry.data.pressure = data[entry].pressure; + if (data.pressure) { + dataTempEntry.data.pressure = data.pressure; } - if (data[entry].xdata) { - dataTempEntry.data.xdata = data[entry].xdata; + if (data.xdata) { + dataTempEntry.data.xdata = data.xdata; } - if (data[entry].serial.toLowerCase() != "xxxxxxxx") { + if (data.serial.toLowerCase() != "xxxxxxxx") { dataTemp.push(dataTempEntry); } } @@ -3027,7 +3107,12 @@ function liveData() { if (clientActive) { var frame = JSON.parse(message.payloadString.toString()); if (wvar.query == "" || sondePrefix.indexOf(wvar.query) > -1 || wvar.query == frame.serial) { - if ((dateNow - new Date(frame[frame.length - 1].time_received).getTime()) < 30000) { + if (frame.length == null) { + var tempDate = new Date(frame.time_received).getTime(); + } else { + var tempDate = new Date(frame[frame.length - 1].time_received).getTime() + } + if ((dateNow - tempDate) < 30000) { var test = formatData(frame, true); if (clientActive) { live_data_buffer.positions.position.push.apply(live_data_buffer.positions.position,test.positions.position)