diff --git a/RX_FSK/RX_FSK.ino b/RX_FSK/RX_FSK.ino index 49ba631..532ff68 100644 --- a/RX_FSK/RX_FSK.ino +++ b/RX_FSK/RX_FSK.ino @@ -417,13 +417,13 @@ const char *createSondeHubMap() { HTMLBODY(ptr, "map.html"); if (!sonde.config.sondehub.active) { strcat(ptr, "
NOTE: SondeHub uploading is not enabled, detected sonde will not be visable on map
"); - if ((*s->ser == 0) && (strcmp(sonde.config.sondehub.lat,"null"))) { + if ((*s->ser == 0) && (sonde.config.sondehub.lat[0] != '\0')) { sprintf(ptr + strlen(ptr), "", sonde.config.sondehub.lat, sonde.config.sondehub.lon); } else { sprintf(ptr + strlen(ptr), "", s-> ser); } } else { - if ((*s->ser == 0) && (strcmp(sonde.config.sondehub.lat,"null"))) { + if ((*s->ser == 0) && (sonde.config.sondehub.lat[0] != '\0')) { sprintf(ptr, "", sonde.config.sondehub.lat, sonde.config.sondehub.lon); } else { sprintf(ptr, "", s-> ser); @@ -2221,22 +2221,10 @@ void loopDecoder() { } #if FEATURE_SONDEHUB if (sonde.config.sondehub.active) { - unsigned long time_now = millis(); - // time_delta will be correct, even if time_now overflows - unsigned long time_delta = time_now - time_last_update; - if ((sonde.config.sondehub.chase == 0) && (time_delta >= SONDEHUB_STATION_UPDATE_TIME)) { // 60 min - sondehub_station_update(&shclient, &sonde.config.sondehub); - time_last_update = time_now; - } - else if ((sonde.config.sondehub.chase == 1) && (time_delta >= SONDEHUB_MOBILE_STATION_UPDATE_TIME)) { // 30 sec - sondehub_station_update(&shclient, &sonde.config.sondehub); - time_last_update = time_now; - } sondehub_send_data(&shclient, s, &sonde.config.sondehub); } #endif - #if FEATURE_MQTT // send to MQTT if enabled if (connected && mqttEnabled) { @@ -3010,6 +2998,22 @@ void loop() { lastMqttUptime = now; } #endif + +#if FEATURE_SONDEHUB + if (sonde.config.sondehub.active) { + unsigned long time_now = millis(); + // time_delta will be correct, even if time_now overflows + unsigned long time_delta = time_now - time_last_update; + if ((sonde.config.sondehub.chase == 0) && (time_delta >= SONDEHUB_STATION_UPDATE_TIME) && (wifi_state != WIFI_APMODE)) { // 60 min + sondehub_station_update(&shclient, &sonde.config.sondehub); + time_last_update = time_now; + } + else if ((sonde.config.sondehub.chase == 1) && (time_delta >= SONDEHUB_MOBILE_STATION_UPDATE_TIME) && (wifi_state != WIFI_APMODE)) { // 30 sec + sondehub_station_update(&shclient, &sonde.config.sondehub); + time_last_update = time_now; + } + } +#endif } #if FEATURE_SONDEHUB @@ -3042,17 +3046,25 @@ void sondehub_station_update(WiFiClient *client, struct st_sondehub *conf) { "\"uploader_contact_email\": \"%s\",", version_name, version_id, conf->callsign, conf->email); w += strlen(w); - if (conf->chase == 0) { - sprintf(w, - "\"uploader_position\": [%s,%s,%s]," - "\"uploader_antenna\": \"%s\"" - "}", - conf->lat, conf->lon, conf->alt, conf->antenna); + if ((conf->chase == 0) && (conf->lat[0] != '\0') && (conf->lon[0] != '\0')){ + if (conf->alt[0] != '\0') { + sprintf(w, + "\"uploader_position\": [%s,%s,%s]," + "\"uploader_antenna\": \"%s\"" + "}", + conf->lat, conf->lon, conf->alt, conf->antenna); + } else { + sprintf(w, + "\"uploader_position\": [%s,%s,null]," + "\"uploader_antenna\": \"%s\"" + "}", + conf->lat, conf->lon, conf->antenna); + } } else if (gpsPos.valid && gpsPos.lat != 0 && gpsPos.lon != 0) { sprintf(w, - "\"uploader_position\": [%.6f, %.6f, %d]," - "\"uploader_antenna\": \"%s\"" + "\"uploader_position\": [%.6f,%.6f,%d]," + "\"uploader_antenna\": \"%s\"," "\"mobile\": \"true\"" "}", gpsPos.lat, gpsPos.lon, gpsPos.alt, conf->antenna); @@ -3127,7 +3139,8 @@ void sondehub_send_data(WiFiClient *client, SondeInfo *s, struct st_sondehub *co if (*s->ser == 0) return; // Don't send anything without serial number if (((int)s->lat == 0) && ((int)s->lon == 0)) return; // Sometimes these values are zeroes. Don't send those to the sondehub if ((int)s->alt > 50000) return; // If alt is too high don't send to SondeHub - if ((int)s->sats < 4) return; // If not enough sats don't send to SondeHub + // M20 data does not include #sat information + if ( s->type!=STYPE_M20 && (int)s->sats < 4) return; // If not enough sats don't send to SondeHub // If not connected to sondehub, try reconnecting. // TODO: do this outside of main loop @@ -3230,17 +3243,26 @@ void sondehub_send_data(WiFiClient *client, SondeInfo *s, struct st_sondehub *co w += strlen(w); } - if (conf->chase == 0) { - sprintf(w, - "\"uploader_position\": [ %s, %s, %s ]," - "\"uploader_antenna\": \"%s\"" - "}]", - conf->lat, conf->lon, conf->alt, conf->antenna - ); + if ((conf->chase == 0) && (conf->lat[0] != '\0') && (conf->lon[0] != '\0')){ + if (conf->alt[0] != '\0') { + sprintf(w, + "\"uploader_position\": [%s,%s,%s]," + "\"uploader_antenna\": \"%s\"" + "}]", + conf->lat, conf->lon, conf->alt, conf->antenna + ); + } else { + sprintf(w, + "\"uploader_position\": [%s,%s,null]," + "\"uploader_antenna\": \"%s\"" + "}]", + conf->lat, conf->lon, conf->antenna + ); + } } else if (gpsPos.valid && gpsPos.lat != 0 && gpsPos.lon != 0) { sprintf(w, - "\"uploader_position\": [ %.6f, %.6f, %d ]," + "\"uploader_position\": [%.6f,%.6f,%d]," "\"uploader_antenna\": \"%s\"" "}]", gpsPos.lat, gpsPos.lon, gpsPos.alt, conf->antenna diff --git a/RX_FSK/data/config.txt b/RX_FSK/data/config.txt index c3c518d..4e6e86c 100644 --- a/RX_FSK/data/config.txt +++ b/RX_FSK/data/config.txt @@ -126,9 +126,9 @@ sondehub.active=0 sondehub.chase=0 sondehub.host=api.v2.sondehub.org sondehub.callsign=CHANGEME_RDZTTGO -sondehub.lat=null -sondehub.lon=null -sondehub.alt=null +sondehub.lat= +sondehub.lon= +sondehub.alt= sondehub.antenna= sondehub.email= #-------------------------------# diff --git a/RX_FSK/version.h b/RX_FSK/version.h index 5893029..60beae8 100644 --- a/RX_FSK/version.h +++ b/RX_FSK/version.h @@ -1,4 +1,4 @@ const char *version_name = "rdzTTGOsonde"; -const char *version_id = "devel20210630"; +const char *version_id = "devel20210726"; const int SPIFFS_MAJOR=2; const int SPIFFS_MINOR=11; diff --git a/libraries/SondeLib/M10M20.cpp b/libraries/SondeLib/M10M20.cpp index 67d8525..c7e902b 100644 --- a/libraries/SondeLib/M10M20.cpp +++ b/libraries/SondeLib/M10M20.cpp @@ -319,6 +319,7 @@ int M10M20::decodeframeM10(uint8_t *data) { float vn = getint16(data+6)*VMUL; sonde.si()->vs = getint16(data+8) * VMUL; sonde.si()->hs = sqrt(ve*ve+vn*vn); + sonde.si()->sats = data[30]; float dir = atan2(vn, ve)*(1.0/RAD); if(dir<0) dir+=360; sonde.si()->dir = dir;