diff --git a/RX_FSK/RX_FSK.ino b/RX_FSK/RX_FSK.ino index b24998e..500d1bf 100644 --- a/RX_FSK/RX_FSK.ino +++ b/RX_FSK/RX_FSK.ino @@ -445,7 +445,7 @@ void addSondeStatus(char *ptr, int i) strcat(ptr, ""); sprintf(ptr + strlen(ptr), "\n", s->lat, s->lon, s->alt); @@ -995,9 +995,9 @@ void addSondeStatusKML(char *ptr, int i) } sprintf(ptr + strlen(ptr), "%s%.6f,%.6f,%.0f%3.3f MHz, Type: %s, h=%.0fm", - s->id, s->id, - s->lon, s->lat, s->alt, - s->freq, sondeTypeStr[s->type], s->alt); + s->id, s->id, + s->lon, s->lat, s->alt, + s->freq, sondeTypeStr[s->type], s->alt); } const char *createKMLDynamic() { @@ -1050,10 +1050,10 @@ void onWsEvent(AsyncWebSocket * server, AsyncWebSocketClient * client, AwsEventT if (type == WS_EVT_CONNECT) { Serial.println("Websocket client connection received"); client->text("Hello from ESP32 Server"); - //globalClient = client; + //globalClient = client; } else if (type == WS_EVT_DISCONNECT) { Serial.println("Client disconnected"); - globalClient = NULL; + globalClient = NULL; } } #endif @@ -1072,11 +1072,11 @@ void SetupAsyncServer() { request->send(SPIFFS, "/index.html", String(), false, processor); }); -/* - server.on("/spectrum", HTTP_GET, [](AsyncWebServerRequest *request){ - request->send(SPIFFS, "/ws.html", "text/html"); - }); -*/ + /* + server.on("/spectrum", HTTP_GET, [](AsyncWebServerRequest *request){ + request->send(SPIFFS, "/ws.html", "text/html"); + }); + */ server.on("/test.html", HTTP_GET, [](AsyncWebServerRequest * request) { request->send(SPIFFS, "/test.html", String(), false, processor); }); @@ -1426,7 +1426,7 @@ void initGPS() { } const char *getStateStr(int what) { - if(what<0 || what>=(sizeof(mainStateStr)/sizeof(const char *))) + if (what < 0 || what >= (sizeof(mainStateStr) / sizeof(const char *))) return "--"; else return mainStateStr[what]; @@ -1446,7 +1446,7 @@ void sx1278Task(void *parameter) { while (1) { if (rxtask.activate >= 128) { // activating sx1278 background task... - Serial.printf("RXtask: start DECODER for sonde %d (was %s)\n", rxtask.activate&0x7f, getStateStr(rxtask.mainState)); + Serial.printf("RXtask: start DECODER for sonde %d (was %s)\n", rxtask.activate & 0x7f, getStateStr(rxtask.mainState)); rxtask.mainState = ST_DECODER; rxtask.currentSonde = rxtask.activate & 0x7F; sonde.setup(); @@ -2131,15 +2131,15 @@ void loopDecoder() { } } if (sonde.config.sondehub.active) { - sondehub_send_data(&shclient, s, &sonde.config.sondehub); + sondehub_send_data(&shclient, s, &sonde.config.sondehub); } } - // send to MQTT if enabled - if (connected && mqttEnabled) { - Serial.println("Sending sonde info via MQTT"); - mqttclient.publishPacket(s); - } + // send to MQTT if enabled + if (connected && mqttEnabled) { + Serial.println("Sending sonde info via MQTT"); + mqttclient.publishPacket(s); + } //} // always send data, even if not valid.... if (rdzclient.connected()) { @@ -2268,13 +2268,13 @@ void loopSpectrum() { scanner.scan(); scanner.plotResult(); - -/* - if(globalClient != NULL && globalClient->status() == WS_CONNECTED){ - String randomNumber = String(random(0,20)); - globalClient->text(randomNumber); - } -*/ + + /* + if(globalClient != NULL && globalClient->status() == WS_CONNECTED){ + String randomNumber = String(random(0,20)); + globalClient->text(randomNumber); + } + */ if (sonde.config.spectrum > 0) { int remaining = sonde.config.spectrum - (millis() - specTimer) / 1000; @@ -2283,7 +2283,7 @@ void loopSpectrum() { marker = 1; } snprintf(buf, 10, "%d Sec.", remaining); - disp.rdis->drawString(0, dispys<=1 ? (1+marker) : (dispys+1)*marker, buf); + disp.rdis->drawString(0, dispys <= 1 ? (1 + marker) : (dispys + 1)*marker, buf); if (remaining <= 0) { setCurrentDisplay(0); enterMode(ST_DECODER); @@ -2340,10 +2340,10 @@ void enableNetwork(bool enable) { mqttclient.init(sonde.config.mqtt.host, sonde.config.mqtt.port, sonde.config.mqtt.id, sonde.config.mqtt.username, sonde.config.mqtt.password, sonde.config.mqtt.prefix); } - if (sonde.config.sondehub.active && wifi_state != WIFI_APMODE) { + if (sonde.config.sondehub.active && wifi_state != WIFI_APMODE) { sondehub_station_update(&shclient, &sonde.config.sondehub); } - + connected = true; } else { MDNS.end(); @@ -2908,161 +2908,161 @@ void loop() { // Sondehub v2 DB related codes /* - * Update station data to the sondehub v2 DB - */ + Update station data to the sondehub v2 DB +*/ void sondehub_station_update(WiFiClient *client, struct st_sondehub *conf) { - char data[300]; - - Serial.println("sondehub_station_update()"); - - if (!client->connected()) { - if (!client->connect(conf->host, 80)) { - Serial.println("Connection FAILED"); - return; - } - } + char data[300]; - client->println("PUT /listeners HTTP/1.1"); - client->print("Host: "); - client->println(conf->host); - client->println("accept: text/plain"); - client->println("Content-Type: application/json"); - client->print("Content-Length: "); - sprintf(data, - "{" - "\"software_name\": \"%s\"," - "\"software_version\": \"%s\"," - "\"uploader_callsign\": \"%s\"," - "\"uploader_contact_email\": \"%s\"," - "\"uploader_position\": [%s,%s,%s]," - "\"uploader_antenna\": \"%s\"" - "}", - version_name, version_id, conf->callsign, conf->email, conf->lat, conf->lon, conf->alt, conf->antenna); - client->println(strlen(data)); - client->println(); - client->println(data); - Serial.println(strlen(data)); - Serial.println(data); - String response = client->readString(); - Serial.println(response); - client->stop(); + Serial.println("sondehub_station_update()"); + + if (!client->connected()) { + if (!client->connect(conf->host, 80)) { + Serial.println("Connection FAILED"); + return; + } + } + + client->println("PUT /listeners HTTP/1.1"); + client->print("Host: "); + client->println(conf->host); + client->println("accept: text/plain"); + client->println("Content-Type: application/json"); + client->print("Content-Length: "); + sprintf(data, + "{" + "\"software_name\": \"%s\"," + "\"software_version\": \"%s\"," + "\"uploader_callsign\": \"%s\"," + "\"uploader_contact_email\": \"%s\"," + "\"uploader_position\": [%s,%s,%s]," + "\"uploader_antenna\": \"%s\"" + "}", + version_name, version_id, conf->callsign, conf->email, conf->lat, conf->lon, conf->alt, conf->antenna); + client->println(strlen(data)); + client->println(); + client->println(data); + Serial.println(strlen(data)); + Serial.println(data); + String response = client->readString(); + Serial.println(response); + client->stop(); } /* - * Update sonde data to the sondehub v2 DB - */ + Update sonde data to the sondehub v2 DB +*/ void sondehub_send_data(WiFiClient *client, SondeInfo *s, struct st_sondehub *conf) { - Serial.println("sondehub_send_data()"); + Serial.println("sondehub_send_data()"); #define MSG_SIZE 550 - char rs_msg[MSG_SIZE]; - char *w; - struct tm ts; - time_t t = s->time; - - if (String(s->ser) == "") return; // Don't send anything without serial number + char rs_msg[MSG_SIZE]; + char *w; + struct tm ts; + time_t t = s->time; + + if (String(s->ser) == "") 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 - + if (String(sondeTypeStr[s->type]) == "RS41" || String(sondeTypeStr[s->type]) == "RS92" || String(sondeTypeStr[s->type]) == "M10" || String(sondeTypeStr[s->type]) == "M20") { t += 18; // convert back to GPS time from UTC time +18s } - ts = *gmtime(&t); + ts = *gmtime(&t); memset(rs_msg, 0, MSG_SIZE); - w=rs_msg; + w = rs_msg; if (((int)s->temperature != 0) && ((int)s->relativeHumidity != 0)) { sprintf(w, - "[ {" - "\"software_name\": \"%s\"," - "\"software_version\": \"%s\"," - "\"uploader_callsign\": \"%s\"," - "\"time_received\": \"%04d-%02d-%02dT%02d:%02d:%02d.000Z\"," - "\"manufacturer\": \"%s\"," - "\"type\": \"%s\"," - "\"serial\": \"%s\"," - "\"frame\": %d," - "\"datetime\": \"%04d-%02d-%02dT%02d:%02d:%02d.000Z\"," - "\"lat\": %.6f," - "\"lon\": %.6f," - "\"alt\": %.2f," - "\"frequency\": %.3f," - "\"vel_h\": %.1f," - "\"vel_v\": %.1f," - "\"heading\": %.1f," - "\"sats\": %d," - "\"rssi\": %.1f," - "\"temp\": %.2f," - "\"humidity\": %.2f," - "\"uploader_position\": [ %s, %s, %s ]," - "\"uploader_antenna\": \"%s\"" - "}]", - version_name, version_id, conf->callsign, - ts.tm_year + 1900, ts.tm_mon + 1, ts.tm_mday, ts.tm_hour, ts.tm_min, ts.tm_sec + s->sec, - manufacturer_string[s->type], sondeTypeStr[s->type], s->ser, s->frame, - ts.tm_year + 1900, ts.tm_mon + 1, ts.tm_mday, ts.tm_hour, ts.tm_min, ts.tm_sec + s->sec, - (float)s->lat, (float)s->lon, (float)s->alt, (float)s->freq, (float)s->hs, (float)s->vs, - (float)s->dir, (int)s->sats, -((float)s->rssi/2), float(s->temperature), float(s->relativeHumidity), conf->lat, conf->lon, conf->alt, conf->antenna - ); - } + "[ {" + "\"software_name\": \"%s\"," + "\"software_version\": \"%s\"," + "\"uploader_callsign\": \"%s\"," + "\"time_received\": \"%04d-%02d-%02dT%02d:%02d:%02d.000Z\"," + "\"manufacturer\": \"%s\"," + "\"type\": \"%s\"," + "\"serial\": \"%s\"," + "\"frame\": %d," + "\"datetime\": \"%04d-%02d-%02dT%02d:%02d:%02d.000Z\"," + "\"lat\": %.6f," + "\"lon\": %.6f," + "\"alt\": %.2f," + "\"frequency\": %.3f," + "\"vel_h\": %.1f," + "\"vel_v\": %.1f," + "\"heading\": %.1f," + "\"sats\": %d," + "\"rssi\": %.1f," + "\"temp\": %.2f," + "\"humidity\": %.2f," + "\"uploader_position\": [ %s, %s, %s ]," + "\"uploader_antenna\": \"%s\"" + "}]", + version_name, version_id, conf->callsign, + ts.tm_year + 1900, ts.tm_mon + 1, ts.tm_mday, ts.tm_hour, ts.tm_min, ts.tm_sec + s->sec, + manufacturer_string[s->type], sondeTypeStr[s->type], s->ser, s->frame, + ts.tm_year + 1900, ts.tm_mon + 1, ts.tm_mday, ts.tm_hour, ts.tm_min, ts.tm_sec + s->sec, + (float)s->lat, (float)s->lon, (float)s->alt, (float)s->freq, (float)s->hs, (float)s->vs, + (float)s->dir, (int)s->sats, -((float)s->rssi / 2), float(s->temperature), float(s->relativeHumidity), conf->lat, conf->lon, conf->alt, conf->antenna + ); + } else { sprintf(w, - "[ {" - "\"software_name\": \"%s\"," - "\"software_version\": \"%s\"," - "\"uploader_callsign\": \"%s\"," - "\"time_received\": \"%04d-%02d-%02dT%02d:%02d:%02d.000Z\"," - "\"manufacturer\": \"%s\"," - "\"type\": \"%s\"," - "\"serial\": \"%s\"," - "\"frame\": %d," - "\"datetime\": \"%04d-%02d-%02dT%02d:%02d:%02d.000Z\"," - "\"lat\": %.6f," - "\"lon\": %.6f," - "\"alt\": %.2f," - "\"frequency\": %.3f," - "\"vel_h\": %.1f," - "\"vel_v\": %.1f," - "\"heading\": %.1f," - "\"sats\": %d," - "\"rssi\": %.1f," - "\"uploader_position\": [ %s, %s, %s ]," - "\"uploader_antenna\": \"%s\"" - "}]", - version_name, version_id, conf->callsign, - ts.tm_year + 1900, ts.tm_mon + 1, ts.tm_mday, ts.tm_hour, ts.tm_min, ts.tm_sec + s->sec, - manufacturer_string[s->type], sondeTypeStr[s->type], s->ser, s->frame, - ts.tm_year + 1900, ts.tm_mon + 1, ts.tm_mday, ts.tm_hour, ts.tm_min, ts.tm_sec + s->sec, - (float)s->lat, (float)s->lon, (float)s->alt, (float)s->freq, (float)s->hs, (float)s->vs, - (float)s->dir, (int)s->sats, -((float)s->rssi/2), conf->lat, conf->lon, conf->alt, conf->antenna - ); + "[ {" + "\"software_name\": \"%s\"," + "\"software_version\": \"%s\"," + "\"uploader_callsign\": \"%s\"," + "\"time_received\": \"%04d-%02d-%02dT%02d:%02d:%02d.000Z\"," + "\"manufacturer\": \"%s\"," + "\"type\": \"%s\"," + "\"serial\": \"%s\"," + "\"frame\": %d," + "\"datetime\": \"%04d-%02d-%02dT%02d:%02d:%02d.000Z\"," + "\"lat\": %.6f," + "\"lon\": %.6f," + "\"alt\": %.2f," + "\"frequency\": %.3f," + "\"vel_h\": %.1f," + "\"vel_v\": %.1f," + "\"heading\": %.1f," + "\"sats\": %d," + "\"rssi\": %.1f," + "\"uploader_position\": [ %s, %s, %s ]," + "\"uploader_antenna\": \"%s\"" + "}]", + version_name, version_id, conf->callsign, + ts.tm_year + 1900, ts.tm_mon + 1, ts.tm_mday, ts.tm_hour, ts.tm_min, ts.tm_sec + s->sec, + manufacturer_string[s->type], sondeTypeStr[s->type], s->ser, s->frame, + ts.tm_year + 1900, ts.tm_mon + 1, ts.tm_mday, ts.tm_hour, ts.tm_min, ts.tm_sec + s->sec, + (float)s->lat, (float)s->lon, (float)s->alt, (float)s->freq, (float)s->hs, (float)s->vs, + (float)s->dir, (int)s->sats, -((float)s->rssi / 2), conf->lat, conf->lon, conf->alt, conf->antenna + ); } - - if (!client->connected()) { - Serial.println("NO CONNECTION"); - if (!client->connect(conf->host, 80)) { - Serial.println("Connection FAILED"); - return; - } - } - client->println("PUT /sondes/telemetry HTTP/1.1"); - client->print("Host: "); - client->println(conf->host); - client->println("accept: text/plain"); - client->println("Content-Type: application/json"); - client->print("Content-Length: "); - client->println(strlen(w)); - client->println(); - client->println(w); - Serial.println(w); - String response = client->readString(); - Serial.println(response); + if (!client->connected()) { + Serial.println("NO CONNECTION"); + if (!client->connect(conf->host, 80)) { + Serial.println("Connection FAILED"); + return; + } + } + + client->println("PUT /sondes/telemetry HTTP/1.1"); + client->print("Host: "); + client->println(conf->host); + client->println("accept: text/plain"); + client->println("Content-Type: application/json"); + client->print("Content-Length: "); + client->println(strlen(w)); + client->println(); + client->println(w); + Serial.println(w); + String response = client->readString(); + Serial.println(response); } // End of sondehub v2 related codes diff --git a/RX_FSK/data/config.txt b/RX_FSK/data/config.txt index c50d637..1f2e9c2 100644 --- a/RX_FSK/data/config.txt +++ b/RX_FSK/data/config.txt @@ -91,7 +91,7 @@ ephftp=www.ngs.noaa.gov/cors/rinex/ #-------------------------------# # local use only, do not feed to public services # data not sanitized / quality checked, outliers not filtered out -axudp.active=0 +axudp.active=1 axudp.host=192.168.42.20 axudp.port=9002 axudp.symbol=/O @@ -112,9 +112,9 @@ tcp.idformat=0 #-------------------------------# # data not sanitized / quality checked, outliers not filtered out mqtt.active=0 -mqtt.id=BSG_MQTT +mqtt.id=rdz_sonde_server mqtt.ip=192.168.1.5 -mqtt.port=1884 +mqtt.port=1883 mqtt.username= mqtt.password= mqtt.prefix=rdz_sonde_server/ @@ -124,7 +124,7 @@ mqtt.prefix=rdz_sonde_server/ # Sondehub v2 DB settings sondehub.active=1 sondehub.host=api.v2.sondehub.org -sondehub.callsign=CHANGEME_BSG_TTGO +sondehub.callsign=CHANGEME_RDZTTGO sondehub.lat=null sondehub.lon=null sondehub.alt=null diff --git a/RX_FSK/data/index.html b/RX_FSK/data/index.html index 481e7db..dba123c 100644 --- a/RX_FSK/data/index.html +++ b/RX_FSK/data/index.html @@ -1,7 +1,7 @@ - BSGSonde Server + rdzTTGOSonde Server @@ -9,12 +9,7 @@
-

BSGSonde Server

- +

rdzTTGOSonde Server

diff --git a/RX_FSK/data/networks.txt b/RX_FSK/data/networks.txt index a536f0f..a40d1dc 100644 --- a/RX_FSK/data/networks.txt +++ b/RX_FSK/data/networks.txt @@ -1,2 +1,4 @@ -oh3bsg -oh3bsg +RDZsonde +RDZsonde +DinoGast +Schokolade diff --git a/RX_FSK/data/qrg.txt b/RX_FSK/data/qrg.txt index cfe3f59..43f2bb2 100644 --- a/RX_FSK/data/qrg.txt +++ b/RX_FSK/data/qrg.txt @@ -1,16 +1,23 @@ # Frequency in Mhz (format nnn.nnn) # Type (4=RS41, 6=DFM normal, DFM-06, 9=DFM inverted, DFM-09) # -403.000 4 + Jokioinen -405.300 4 + Sundsvall -404.000 4 + Tallinn -401.000 4 + Niinisalo -401.800 4 + Vaisala -402.000 4 + Vaisala -402.700 4 + Vaisala -402.400 4 + Vaisala -403.500 4 + Katajaluoto -402.500 4 + Katajaluoto -404.000 4 + Tallinn -405.300 4 + Sundsvall +402.300 4 + Greifswald +402.500 4 - Schleswig +402.700 4 + HH-Sasel +403.000 4 - DeBilt +404.100 4 + Norderney +404.300 4 - Schleswig_2 +404.500 4 - Meppen +404.700 4 - Greifswald_2 +405.100 4 - Lindenberg +405.700 4 + Bergen +405.900 4 + Bergen_2 +405.100 4 + Meppen_2 +405.300 4 - Essen +403.330 9 - TrUebPl +403.450 9 - TrUebPl +403.470 9 - TrUebPl +403.850 9 - TrUebPl +403.870 9 - TrUebPl +403.890 9 - TrUebPl # end diff --git a/libraries/SondeLib/aprs.cpp b/libraries/SondeLib/aprs.cpp index 9647b34..227c80a 100644 --- a/libraries/SondeLib/aprs.cpp +++ b/libraries/SondeLib/aprs.cpp @@ -279,8 +279,8 @@ char *aprs_senddata(SondeInfo *s, const char *usercall, const char *sym) { *b=0; aprsstr_append(b, usercall); aprsstr_append(b, ">"); -// const char *destcall="APZRDZ"; - const char *destcall="APRARX,SONDEGATE,TCPIP,qAR,oh3bsg"; + const char *destcall="APZRDZ"; +// const char *destcall="APRARX,SONDEGATE,TCPIP,qAR,oh3bsg"; aprsstr_append(b, destcall); // uncompressed aprsstr_append(b, ":;");
%3.3f MHz, Type: %s
ID: %s", s->freq, sondeTypeLongStr[s->type], s->validID ? s->id : ""); - if (s->validID && (TYPE_IS_DFM(s->type) || TYPE_IS_METEO(s->type) || s->type==STYPE_MP3H) ) { + if (s->validID && (TYPE_IS_DFM(s->type) || TYPE_IS_METEO(s->type) || s->type == STYPE_MP3H) ) { sprintf(ptr + strlen(ptr), " (ser: %s)", s->ser); } sprintf(ptr + strlen(ptr), "
QTH: %.6f,%.6f h=%.0fm