|
|
|
@ -445,7 +445,7 @@ void addSondeStatus(char *ptr, int i)
|
|
|
|
|
strcat(ptr, "<table>");
|
|
|
|
|
sprintf(ptr + strlen(ptr), "<tr><td id=\"sfreq\">%3.3f MHz, Type: %s</td><tr><td>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), "</td></tr><tr><td>QTH: %.6f,%.6f h=%.0fm</td></tr>\n", s->lat, s->lon, s->alt);
|
|
|
|
@ -995,9 +995,9 @@ void addSondeStatusKML(char *ptr, int i)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
sprintf(ptr + strlen(ptr), "<Placemark id=\"%s\"><name>%s</name><Point><coordinates>%.6f,%.6f,%.0f</coordinates></Point><description>%3.3f MHz, Type: %s, h=%.0fm</description></Placemark>",
|
|
|
|
|
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
|
|
|
|
|