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;