From cb5b3584d0563e086b09fa5f37ce64f034ce3df7 Mon Sep 17 00:00:00 2001 From: "Hansi, dl9rdz" Date: Wed, 22 Sep 2021 13:50:18 +0200 Subject: [PATCH 1/5] fix temp/hum empty check in sync with recent updates --- RX_FSK/RX_FSK.ino | 8 ++++---- RX_FSK/src/Sonde.cpp | 2 ++ RX_FSK/version.h | 2 +- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/RX_FSK/RX_FSK.ino b/RX_FSK/RX_FSK.ino index e55559f..84312d1 100644 --- a/RX_FSK/RX_FSK.ino +++ b/RX_FSK/RX_FSK.ino @@ -3717,14 +3717,14 @@ void sondehub_send_data(WiFiClient * client, SondeInfo * s, struct st_sondehub * } // Only send temp if provided - if ((int)s->d.temperature != 0) { - sprintf(w, "\"temp\": %.1f,", float(s->d.temperature)); + if (!isnan(s->d.temperature)) { + sprintf(w, "\"temp\": %.1f,", s->d.temperature); w += strlen(w); } // Only send humidity if provided - if ((int)s->d.relativeHumidity != 0) { - sprintf(w, "\"humidity\": %.1f,", float(s->d.relativeHumidity)); + if (!isnan(s->d.relativeHumidity)) { + sprintf(w, "\"humidity\": %.1f,", s->d.relativeHumidity); w += strlen(w); } diff --git a/RX_FSK/src/Sonde.cpp b/RX_FSK/src/Sonde.cpp index 0598ba5..ed4f3f7 100644 --- a/RX_FSK/src/Sonde.cpp +++ b/RX_FSK/src/Sonde.cpp @@ -79,10 +79,12 @@ void Sonde::defaultConfig() { Serial.printf("Board fingerprint is %d\n", fingerprint); sondeList = (SondeInfo *)malloc((MAXSONDE+1)*sizeof(SondeInfo)); + // addSonde should initialize everything anyway, so this should not strictly be necessary, but does no harm either memset(sondeList, 0, (MAXSONDE+1)*sizeof(SondeInfo)); for(int i=0; i<(MAXSONDE+1); i++) { sondeList[i].freq=400; sondeList[i].type=STYPE_RS41; + clearAllData(&sondeList[i]); } config.touch_thresh = 70; config.led_pout = -1; diff --git a/RX_FSK/version.h b/RX_FSK/version.h index 9bd5aa5..4fa1af3 100644 --- a/RX_FSK/version.h +++ b/RX_FSK/version.h @@ -1,4 +1,4 @@ const char *version_name = "rdzTTGOsonde"; -const char *version_id = "devel20210921"; +const char *version_id = "devel20210922"; const int SPIFFS_MAJOR=2; const int SPIFFS_MINOR=16; From d4de05e29bdf3c1d0ed8e4aeb688720cb6a79869 Mon Sep 17 00:00:00 2001 From: "Hansi, dl9rdz" Date: Wed, 22 Sep 2021 16:16:15 +0200 Subject: [PATCH 2/5] get read of delays caused by readUntil from network --- RX_FSK/RX_FSK.ino | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/RX_FSK/RX_FSK.ino b/RX_FSK/RX_FSK.ino index 84312d1..e7bf982 100644 --- a/RX_FSK/RX_FSK.ino +++ b/RX_FSK/RX_FSK.ino @@ -3527,15 +3527,24 @@ void sondehub_reply_handler(WiFiClient *client) { else { // any reply here belongs to normal telemetry upload, lets just print it. // and wait for a valid HTTP response + int cnt = 0; while(client->available() > 0) { // data is available from remote server, process it... - int cnt = client->readBytesUntil('\n', rs_msg, MSG_SIZE - 1); - rs_msg[cnt] = 0; - Serial.println(rs_msg); - // If something that looks like a valid HTTP response is received, we are ready to send the next data item - if (shState == SH_CONN_WAITACK && cnt > 11 && strncmp(rs_msg, "HTTP/1", 6) == 0) { - shState = SH_CONN_IDLE; + // readBytesUntil may wait for up to 1 second if enough data is not available... + // int cnt = client->readBytesUntil('\n', rs_msg, MSG_SIZE - 1); + int c = client->read(); + if(c<0) break; // should never happen in available() returned >0 right before.... + rs_msg[cnt++] = c; + if(c=='\n') { + rs_msg[cnt] = 0; + Serial.println(rs_msg); + // If something that looks like a valid HTTP response is received, we are ready to send the next data item + if (shState == SH_CONN_WAITACK && cnt > 11 && strncmp(rs_msg, "HTTP/1", 6) == 0) { + shState = SH_CONN_IDLE; + } + cnt=0; } + if(cnt>=MSG_SIZE-1) { cnt=0; } } } // send import requests if needed From 89ffef6c24ccf0240a0682f39c4c5d5da0e3a26a Mon Sep 17 00:00:00 2001 From: "Hansi, dl9rdz" Date: Wed, 22 Sep 2021 16:16:32 +0200 Subject: [PATCH 3/5] Arduino IDE autoformat --- RX_FSK/RX_FSK.ino | 112 +++++++++++++++++++++++++--------------------- 1 file changed, 60 insertions(+), 52 deletions(-) diff --git a/RX_FSK/RX_FSK.ino b/RX_FSK/RX_FSK.ino index e7bf982..019c724 100644 --- a/RX_FSK/RX_FSK.ino +++ b/RX_FSK/RX_FSK.ino @@ -152,16 +152,22 @@ int readLine(Stream &stream, char *buffer, int maxlen) { String processor(const String& var) { Serial.println(var); if (var == "MAPCENTER") { - double lat, lon; - if(gpsPos.valid) { lat=gpsPos.lat; lon=gpsPos.lon; } - else { lat = sonde.config.rxlat; lon = sonde.config.rxlon; } - if( !isnan(lat) && !isnan(lon) ) { - char p[40]; - snprintf(p, 40, "%g,%g", lat, lon); - return String(p); - } else { - return String("48,13"); - } + double lat, lon; + if (gpsPos.valid) { + lat = gpsPos.lat; + lon = gpsPos.lon; + } + else { + lat = sonde.config.rxlat; + lon = sonde.config.rxlon; + } + if ( !isnan(lat) && !isnan(lon) ) { + char p[40]; + snprintf(p, 40, "%g,%g", lat, lon); + return String(p); + } else { + return String("48,13"); + } } if (var == "VERSION_NAME") { return String(version_name); @@ -541,8 +547,8 @@ const char *createLiveJson() { SondeInfo *s = &sonde.sondeList[sonde.currentSonde]; sprintf(ptr + strlen(ptr), "\"sonde\": {\"rssi\": %d, \"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->d.vframe, s->d.time, s->d.id, s->freq, sondeTypeStr[s->type], s->d.lat, s->d.lon, s->d.alt, s->d.hs, s->d.dir, s->d.vs, s->launchsite, s->rxStat[0]); + "\"lat\": %.6f, \"lon\": %.6f, \"alt\": %.0f, \"speed\": %.1f, \"dir\": %.0f, \"climb\": %.1f, \"launchsite\": \"%s\", \"res\": %d }", + s->rssi, s->d.vframe, s->d.time, s->d.id, s->freq, sondeTypeStr[s->type], s->d.lat, s->d.lon, s->d.alt, s->d.hs, s->d.dir, s->d.vs, s->launchsite, s->rxStat[0]); if (gpsPos.valid) { #if 0 @@ -555,8 +561,8 @@ const char *createLiveJson() { /*bool b = */nmea.getAltitude(alt); bool valid = nmea.isValid(); uint8_t hdop = nmea.getHDOP(); - if (valid) { - strcat(ptr, ","); + //if (valid) { + // strcat(ptr, ","); #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); //} @@ -814,7 +820,7 @@ void addConfigNumEntry(char *ptr, int idx, const char *label, int *value) { sprintf(ptr + strlen(ptr), "%s\n", label, idx, *value); } -void addConfigDblEntry(char *ptr, int idx, const char *label, double *value) { +void addConfigDblEntry(char *ptr, int idx, const char *label, double * value) { sprintf(ptr + strlen(ptr), "%s\n", label, idx, *value); } @@ -874,7 +880,7 @@ const char *createConfigForm() { strcat(ptr, "