diff --git a/RX_FSK/RX_FSK.ino b/RX_FSK/RX_FSK.ino index 08a421b..5c941b3 100644 --- a/RX_FSK/RX_FSK.ino +++ b/RX_FSK/RX_FSK.ino @@ -537,13 +537,12 @@ const char *createLiveJson() { strcpy(ptr, "{"); SondeInfo *s = &sonde.sondeList[sonde.currentSonde]; - sprintf(ptr + strlen(ptr), "\"res\": %d, \"rssi\": %d, \"sonde\": {\"vframe\": %d, \"time\": %d,\"id\": \"%s\", \"freq\": %3.3f, \"type\": \"%s\"," - "\"lat\": %.6f, \"lon\": %.6f, \"alt\": %.0f, \"speed\": %.1f, \"dir\": %.0f, \"climb\": %.1f, \"launchsite\": \"%s\" }", - s->rxStat[0], s->rssi, s->vframe, s->time, s->id, s->freq, sondeTypeStr[s->type], s->lat, s->lon, s->alt, s->hs, s->dir, s->vs, s->launchsite); + sprintf(ptr + strlen(ptr), "\"rssi\": %d, \"sonde\": {\"vframe\": %d, \"time\": %d,\"id\": \"%s\", \"freq\": %3.3f, \"type\": \"%s\"," + "\"lat\": %.6f, \"lon\": %.6f, \"alt\": %.0f, \"speed\": %.1f, \"dir\": %.0f, \"climb\": %.1f, \"launchsite\": \"%s\", \"res\": %d }", + s->rssi, s->vframe, s->time, s->id, s->freq, sondeTypeStr[s->type], s->lat, s->lon, s->alt, s->hs, s->dir, s->vs, s->launchsite, s->rxStat[0]); - if (sonde.config.gps_rxd < 0) { - // gps disabled - } else { + if (gpsPos.valid) { +#if 0 long sat = nmea.getNumSatellites(); long speed = nmea.getSpeed(); long dir = nmea.getCourse(); @@ -555,7 +554,14 @@ const char *createLiveJson() { uint8_t hdop = nmea.getHDOP(); if (valid) { strcat(ptr, ","); - sprintf(ptr + strlen(ptr), "\"gps\": {\"lat\": %ld, \"lon\": %ld, \"alt\": %ld, \"sat\": %ld, \"speed\": %ld, \"dir\": %ld, \"hdop\": %d }", lat, lon, alt, sat, speed, dir, hdop); +#endif + sprintf(ptr + strlen(ptr), ", \"gps\": {\"lat\": %g, \"lon\": %g, \"alt\": %d, \"sat\": %d, \"speed\": %g, \"dir\": %d, \"hdop\": %d }", gpsPos.lat, gpsPos.lon, gpsPos.alt, gpsPos.sat, gpsPos.speed, gpsPos.course, gpsPos.hdop); + //} + } else { + // no GPS position, but maybe a fixed position + if ((!isnan(sonde.config.rxlat)) && (!isnan(sonde.config.rxlon))) { + int alt = isnan(sonde.config.rxalt) ? 0 : (int)sonde.config.rxalt; + sprintf(ptr + strlen(ptr), ", \"gps\": {\"lat\": %g, \"lon\": %g, \"alt\": %d, \"sat\": 0, \"speed\": 0, \"dir\": 0, \"hdop\": 0 }", sonde.config.rxlat, sonde.config.rxlon, alt); } } @@ -1688,6 +1694,9 @@ void gpsTask(void *parameter) { } } } + gpsPos.hdop = nmea.getHDOP(); + gpsPos.sat = nmea.getNumSatellites(); + gpsPos.speed = nmea.getSpeed() / 1000.0 * 0.514444; // speed is in m/s nmea.getSpeed is in 0.001 knots #ifdef DEBUG_GPS uint8_t hdop = nmea.getHDOP(); Serial.printf(" =>: valid: %d N %f E %f alt %d course:%d dop:%d\n", gpsPos.valid ? 1 : 0, gpsPos.lat, gpsPos.lon, gpsPos.alt, gpsPos.course, hdop); @@ -3493,7 +3502,7 @@ void sondehub_reply_handler(WiFiClient *client) { // sondehub handler for tasks to be done even if no data is to be sent: // process response messages from sondehub // request frequency list (if active) -#define MSG_SIZE 550 +#define MSG_SIZE 1000 char rs_msg[MSG_SIZE]; if(shImport==1) { // we are waiting for a reply to a sondehub frequency import request diff --git a/RX_FSK/data/livemap.js b/RX_FSK/data/livemap.js index 5dec83f..bc82b6a 100644 --- a/RX_FSK/data/livemap.js +++ b/RX_FSK/data/livemap.js @@ -70,11 +70,11 @@ $('.leaflet-footer').append(footer); var statbar = ''; headtxt = function(data,stat) { - console.log(data); + //console.log(data); var staticon = (stat == '1')?greendot:yellowdot; statbar = staticon + statbar; if ((statbar.length) > 10*greendot.length) { statbar = statbar.substring(0,10*greendot.length); } - if (data.lat == '0.000000') { return false; } + //if (data.lat == '0.000000') { return false; } if (data.res == 0) { $('#sonde_id').html(data.id); $('#sonde_alt').html(data.alt); @@ -156,7 +156,7 @@ headtxt = function(data,stat) { draw = function(data) { var stat; - console.log(data); + //console.log(data); if (data.id) { // data.res: 0: ok 1: no rx (timeout), 2: crc err, >2 some other error if ((data.lat != '0.000000' && data.lon != '0.000000') && (data.res==0)) { //JSON.stringify(data) != JSON.stringify(last_data)) ) { @@ -201,7 +201,7 @@ headtxt = function(data,stat) { circ_gps = false; gps = function(e) { - gps_location = [e.lat/1000000,e.lon/1000000]; + gps_location = [e.lat,e.lon]; gps_accuracy = e.hdop*2; if (last_data && last_data.lat != '0.000000') { @@ -233,10 +233,9 @@ headtxt = function(data,stat) { get_data = function() { $('#status').html(reddot); - console.log("get_data called"); $.ajax({url: 'live.json', success: (function( data ) { if (typeof data != "object") { data = $.parseJSON(data); } - console.log(data); + //console.log(data); if (data.sonde) { draw(data.sonde); } else { @@ -408,7 +407,7 @@ headtxt = function(data,stat) { if (t == 'burst') { return '
💥 Predicted Burst:
'+fd(i.datetime)+' in '+mr(i.altitude)+'m'+add+'
'; } if (t == 'highest') { return '
💥 Burst: '+mr(i.altitude)+'m'+add+'
';} if (t == 'landing') { return '
🎯 Predicted Landing:
'+fd(i.datetime)+' at '+mr(i.altitude)+'m'+add+'
'; } - if (t == 'gps') { return '
Position: '+(i.lat/1000000)+','+(i.lon/1000000)+'
Altitude: '+mr(i.alt/1000)+'m
Speed: '+mr(i.speed/1000 * 1.852 * 10)/10+'km/h '+mr(i.dir/1000)+'°
Sat: '+i.sat+' Hdop:'+(i.hdop/10)+'
'; } + if (t == 'gps') { return '
Position: '+(i.lat)+','+(i.lon)+'
Altitude: '+i.alt+'m
Speed: '+mr(i.speed * 3.6 * 10)/10+'km/h '+i.dir+'°
Sat: '+i.sat+' Hdop:'+(i.hdop/10)+'
'; } }; fd = function(date) { diff --git a/RX_FSK/src/Display.h b/RX_FSK/src/Display.h index 9f8baf9..5178621 100644 --- a/RX_FSK/src/Display.h +++ b/RX_FSK/src/Display.h @@ -14,7 +14,10 @@ struct GpsPos { double lon; int alt; int course; + float speed; + int sat; int accuracy; + int hdop; int valid; }; extern struct GpsPos gpsPos;