From 11cd76a0b11b96858a263e3c49389c696d93a07f Mon Sep 17 00:00:00 2001 From: "Hansi, dl9rdz" Date: Sat, 2 Oct 2021 20:19:11 +0200 Subject: [PATCH 1/5] M10 batt,rh as in autorx --- RX_FSK/src/M10M20.cpp | 32 +++++++++++++++++++++++++++++++- RX_FSK/version.h | 2 +- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/RX_FSK/src/M10M20.cpp b/RX_FSK/src/M10M20.cpp index 74b0e78..81315da 100644 --- a/RX_FSK/src/M10M20.cpp +++ b/RX_FSK/src/M10M20.cpp @@ -223,6 +223,10 @@ static int32_t getint24(uint8_t *data) { return (int32_t)(data[2]|(data[1]<<8)|(data[0]<<16) ); } +static int32_t getint24_r(uint8_t *data) { + return (int32_t)(data[0]|(data[1]<<8)|(data[2]<<16) ); +} + static int16_t getint16(uint8_t *data) { return (int16_t)(data[1]|((uint16_t)data[0]<<8)); } @@ -329,12 +333,13 @@ int M10M20::decodeframeM10(uint8_t *data) { si->dir = dir; si->validPos = 0x3f; // m10 temp + float T = NAN; + { const float p0 = 1.07303516e-03, p1 = 2.41296733e-04, p2 = 2.26744154e-06, p3 = 6.52855181e-08; const float Rs[3] = { 12.1e3 , 36.5e3 , 475.0e3 }; const float Rp[3] = { 1e20 , 330.0e3 , 2000.0e3 }; uint8_t sct = data[62]; float rt = getint16_r(data+63) & (0xFFF); - float T = NAN; if(rt!=0 && sct<3) { rt = (4095-rt)/rt - (Rs[sct]/Rp[sct]); if(rt>0) { @@ -347,6 +352,31 @@ int M10M20::decodeframeM10(uint8_t *data) { } } si->temperature = T; + } + + // m10 battery + uint16_t batADC = (uint16_t)getint16_r(data+0x45); + si->batteryVoltage = 2.709 * batADC * 2.5/1023.0; + + // m10 humidity + { + float cRHc55 = ((float)(uint32_t)getint24_r(data+0x35)) / (uint32_t)getint24_r(data+0x32); + float TH = -273.15; + const float huRs = 22.1e3; + const float p0 = 4.42606809e-03, p1 = -6.58184309e-04, p2 = 8.95735557e-05, p3 = -2.84347503e-06; + float R = huRs / ( (4095.0/getint16_r(data+0x59)) - 1 ); + if(R>0) TH += 1/( p0 + p1*log(R) + p2*log(R)*log(R) + p3*log(R)*log(R)*log(R) ); + //float Tc = T; + float rh = (cRHc55-0.8955)/0.002; + const float T0=0.0, T1=-30.0; + //float T = Tc; + if(T100.0) rh=100.0; + si->relativeHumidity = rh; + } + Serial.printf("hum: %.2f batt: %.2f\n", si->relativeHumidity, si->batteryVoltage); uint32_t gpstime = getint32(data+10); uint16_t gpsweek = getint16(data+32); diff --git a/RX_FSK/version.h b/RX_FSK/version.h index 8d96436..3fb7c0a 100644 --- a/RX_FSK/version.h +++ b/RX_FSK/version.h @@ -1,4 +1,4 @@ const char *version_name = "rdzTTGOsonde"; -const char *version_id = "devel20210930"; +const char *version_id = "devel20211002"; const int SPIFFS_MAJOR=2; const int SPIFFS_MINOR=16; From 00899dba2a220fbf397b34f287c66070babd1c53 Mon Sep 17 00:00:00 2001 From: "Hansi, dl9rdz" Date: Sat, 2 Oct 2021 22:03:06 +0200 Subject: [PATCH 2/5] issue #206 --- RX_FSK/RX_FSK.ino | 2 ++ 1 file changed, 2 insertions(+) diff --git a/RX_FSK/RX_FSK.ino b/RX_FSK/RX_FSK.ino index f9d0f0a..4328d8b 100644 --- a/RX_FSK/RX_FSK.ino +++ b/RX_FSK/RX_FSK.ino @@ -592,7 +592,9 @@ void setupConfigData() { sonde.setConfig(line.c_str()); } sonde.checkConfig(); // eliminate invalid entries +#if FEATURE_SONDEHUB shImportInterval = 5; // refresh now in 5 seconds +#endif } From 23fa620aa67287613ce0448adeb8ebb84fb1c1bd Mon Sep 17 00:00:00 2001 From: "Hansi, dl9rdz" Date: Sun, 3 Oct 2021 01:07:41 +0200 Subject: [PATCH 3/5] some code cleanup --- RX_FSK/RX_FSK.ino | 32 +++++++++++++++++--------------- RX_FSK/src/Chasemapper.h | 2 +- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/RX_FSK/RX_FSK.ino b/RX_FSK/RX_FSK.ino index 4328d8b..a01eb0c 100644 --- a/RX_FSK/RX_FSK.ino +++ b/RX_FSK/RX_FSK.ino @@ -62,6 +62,20 @@ const int daylightOffset_sec = 0; //UTC boolean connected = false; WiFiUDP udp; WiFiClient client; + +/* Sonde.h: enum SondeType { STYPE_DFM,, STYPE_RS41, STYPE_RS92, STYPE_M10M20, STYPE_M10, STYPE_M20, STYPE_MP3H }; */ +const char *sondeTypeStrSH[NSondeTypes] = { "DFM", "RS41", "RS92", "Mxx"/*never sent*/, "M10", "M20", "MRZ" }; +const char *dfmSubtypeStrSH[16] = { NULL, NULL, NULL, NULL, NULL, NULL, + "DFM06", // 0x06 + "PS15", // 0x07 + NULL, NULL, + "DFM09", // 0x0A + "DFM17", // 0x0B + "DFM09P", // 0x0C + "DFM17", // 0x0D + NULL, NULL + }; + #if FEATURE_SONDEHUB #define SONDEHUB_STATION_UPDATE_TIME (60*60*1000) // 60 min #define SONDEHUB_MOBILE_STATION_UPDATE_TIME (30*1000) // 30 sec @@ -265,8 +279,7 @@ void setupChannelList() { int active = space[3] == '+' ? 1 : 0; if (space[4] == ' ') { memset(launchsite, ' ', 16); - int str_len = strlen(space + 5); - strncpy(launchsite, space + 5, str_len > 16 ? 16 : str_len); + strncpy(launchsite, space + 5, 16); if (sonde.config.debug == 1) { Serial.printf("Add %f - sondetype: %d (on/off: %d) - site #%d - name: %s\n ", freq, type, active, i, launchsite); } @@ -3214,7 +3227,7 @@ void execOTA() { Serial.printf("Updating file %s (%d bytes)\n", fn, len); char fnstr[17]; memset(fnstr, ' ', 16); - strncpy(fnstr, fn, strlen(fn)); + strncpy(fnstr, fn, 16); fnstr[16] = 0; disp.rdis->drawString(0, 2 * dispys, fnstr); File f = SPIFFS.open(fn, FILE_WRITE); @@ -3560,18 +3573,7 @@ enum SHState { SH_DISCONNECTED, SH_CONNECTING, SH_CONN_IDLE, SH_CONN_APPENDING, SHState shState = SH_DISCONNECTED; time_t shStart = 0; -/* Sonde.h: enum SondeType { STYPE_DFM,, STYPE_RS41, STYPE_RS92, STYPE_M10M20, STYPE_M10, STYPE_M20, STYPE_MP3H }; */ -const char *sondeTypeStrSH[NSondeTypes] = { "DFM", "RS41", "RS92", "Mxx"/*never sent*/, "M10", "M20", "MRZ" }; -const char *dfmSubtypeStrSH[16] = { NULL, NULL, NULL, NULL, NULL, NULL, - "DFM06", // 0x06 - "PS15", // 0x07 - NULL, NULL, - "DFM09", // 0x0A - "DFM17", // 0x0B - "DFM09P", // 0x0C - "DFM17", // 0x0D - NULL, NULL - }; + void sondehub_reply_handler(WiFiClient * client) { // sondehub handler for tasks to be done even if no data is to be sent: diff --git a/RX_FSK/src/Chasemapper.h b/RX_FSK/src/Chasemapper.h index 68d8cad..4f537b9 100644 --- a/RX_FSK/src/Chasemapper.h +++ b/RX_FSK/src/Chasemapper.h @@ -4,7 +4,7 @@ #include "Sonde.h" //#include #include - +#include class Chasemapper { public: static int send(WiFiUDP &udb, SondeInfo *si); From 1d4f406dbb2e017778a11c9fa4df2b499738a491 Mon Sep 17 00:00:00 2001 From: "Hansi, dl9rdz" Date: Sun, 3 Oct 2021 10:03:41 +0200 Subject: [PATCH 4/5] mqtt clientid done right --- RX_FSK/src/mqtt.cpp | 3 ++- RX_FSK/version.h | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/RX_FSK/src/mqtt.cpp b/RX_FSK/src/mqtt.cpp index 435fd9e..bd8d94c 100644 --- a/RX_FSK/src/mqtt.cpp +++ b/RX_FSK/src/mqtt.cpp @@ -16,6 +16,7 @@ void mqttCallback(char* topic, byte* payload, unsigned int length) { Serial.println(); } +static char buffer[21]; void MQTT::init(const char* host, uint16_t port, const char* id, const char *username, const char *password, const char *prefix) { WiFi.hostByName(host, this->ip); @@ -26,8 +27,8 @@ void MQTT::init(const char* host, uint16_t port, const char* id, const char *use Serial.println("[MQTT] pubsub client"); mqttClient.setServer(ip, port); - char buffer[20]; snprintf(buffer, 20, "%s%6ld", id, random(0, 1000)); + buffer[20] = 0; mqttClient.setClientId(buffer); if (strlen(password) > 0) { mqttClient.setCredentials(username, password); diff --git a/RX_FSK/version.h b/RX_FSK/version.h index 3fb7c0a..90e2ecd 100644 --- a/RX_FSK/version.h +++ b/RX_FSK/version.h @@ -1,4 +1,4 @@ const char *version_name = "rdzTTGOsonde"; -const char *version_id = "devel20211002"; +const char *version_id = "devel20211003"; const int SPIFFS_MAJOR=2; const int SPIFFS_MINOR=16; From 97716f7d79ded0b8c36bf180cfd4773837571c03 Mon Sep 17 00:00:00 2001 From: "Hansi, dl9rdz" Date: Sun, 3 Oct 2021 10:23:39 +0200 Subject: [PATCH 5/5] mqtt clientid done right (+no space in id) --- RX_FSK/src/mqtt.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RX_FSK/src/mqtt.cpp b/RX_FSK/src/mqtt.cpp index bd8d94c..8ee0d78 100644 --- a/RX_FSK/src/mqtt.cpp +++ b/RX_FSK/src/mqtt.cpp @@ -27,7 +27,7 @@ void MQTT::init(const char* host, uint16_t port, const char* id, const char *use Serial.println("[MQTT] pubsub client"); mqttClient.setServer(ip, port); - snprintf(buffer, 20, "%s%6ld", id, random(0, 1000)); + snprintf(buffer, 20, "%s%04d", id, (int)random(0, 1000)); buffer[20] = 0; mqttClient.setClientId(buffer); if (strlen(password) > 0) {