From 59587ce2b784eb75883ae6f3dcfd0ed617d16688 Mon Sep 17 00:00:00 2001 From: samuelbles07 Date: Wed, 11 Sep 2024 15:48:44 +0700 Subject: [PATCH 1/4] Add http request timeout number for ApiClient --- src/AgApiClient.cpp | 18 +++++++++++------- src/AgApiClient.h | 11 +++++++++++ 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/src/AgApiClient.cpp b/src/AgApiClient.cpp index fe582a4..c49c0a3 100644 --- a/src/AgApiClient.cpp +++ b/src/AgApiClient.cpp @@ -2,13 +2,6 @@ #include "AgConfigure.h" #include "AirGradient.h" #include "Libraries/Arduino_JSON/src/Arduino_JSON.h" -#ifdef ESP8266 -#include -#include -#include -#else -#include -#endif AgApiClient::AgApiClient(Stream &debug, Configuration &config) : PrintLog(debug, "ApiClient"), config(config) {} @@ -58,6 +51,7 @@ bool AgApiClient::fetchServerConfiguration(void) { } #else HTTPClient client; + _setHttpClientTimeout(&client); if (client.begin(uri) == false) { getConfigFailed = true; return false; @@ -121,6 +115,7 @@ bool AgApiClient::postToServer(String data) { WiFiClient wifiClient; HTTPClient client; + _setHttpClientTimeout(&client); if (client.begin(wifiClient, uri.c_str()) == false) { logError("Init client failed"); return false; @@ -190,3 +185,12 @@ bool AgApiClient::sendPing(int rssi, int bootCount) { String AgApiClient::getApiRoot() const { return apiRoot; } void AgApiClient::setApiRoot(const String &apiRoot) { this->apiRoot = apiRoot; } + +/** + * @brief Set timeout to both connect to server and tcp connection timeout + * + */ +void AgApiClient::_setHttpClientTimeout(HTTPClient *httpClient) { + httpClient->setTimeout(timeoutMs); + httpClient->setConnectTimeout(timeoutMs); +} \ No newline at end of file diff --git a/src/AgApiClient.h b/src/AgApiClient.h index 7e6037d..8027d04 100644 --- a/src/AgApiClient.h +++ b/src/AgApiClient.h @@ -16,6 +16,14 @@ #include "Main/PrintLog.h" #include +#ifdef ESP8266 +#include +#include +#include +#else +#include +#endif + class AgApiClient : public PrintLog { private: Configuration &config; @@ -25,6 +33,9 @@ private: bool getConfigFailed; bool postToServerFailed; bool notAvailableOnDashboard = false; // Device not setup on Airgradient cloud dashboard. + uint16_t timeoutMs = 10000; // Default set to 10s + + void _setHttpClientTimeout(HTTPClient *httpClient); public: AgApiClient(Stream &stream, Configuration &config); From f929623443da35b01cf952778070b8d766655c93 Mon Sep 17 00:00:00 2001 From: samuelbles07 Date: Wed, 11 Sep 2024 16:01:16 +0700 Subject: [PATCH 2/4] Fix uri formatting postToServer to use apiRoot --- src/AgApiClient.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/AgApiClient.cpp b/src/AgApiClient.cpp index c49c0a3..8af3004 100644 --- a/src/AgApiClient.cpp +++ b/src/AgApiClient.cpp @@ -107,9 +107,7 @@ bool AgApiClient::postToServer(String data) { return false; } - String uri = - "http://hw.airgradient.com/sensors/airgradient:" + ag->deviceId() + - "/measures"; + String uri = apiRoot + "/sensors/airgradient:" + ag->deviceId() + "/measures"; // logInfo("Post uri: " + uri); // logInfo("Post data: " + data); From e16373a64d3cc6ee0858cd5e2f76d2ffd9894664 Mon Sep 17 00:00:00 2001 From: samuelbles07 Date: Wed, 11 Sep 2024 16:02:13 +0700 Subject: [PATCH 3/4] Add new public member to set http client timeout by caller --- src/AgApiClient.cpp | 9 +++++++++ src/AgApiClient.h | 1 + 2 files changed, 10 insertions(+) diff --git a/src/AgApiClient.cpp b/src/AgApiClient.cpp index 8af3004..5b9bdb6 100644 --- a/src/AgApiClient.cpp +++ b/src/AgApiClient.cpp @@ -184,6 +184,15 @@ String AgApiClient::getApiRoot() const { return apiRoot; } void AgApiClient::setApiRoot(const String &apiRoot) { this->apiRoot = apiRoot; } +/** + * @brief Set http request timeout. (Default: 10s) + * + * @param timeoutMs + */ +void AgApiClient::setTimeout(uint16_t timeoutMs) { + this->timeoutMs = timeoutMs; +} + /** * @brief Set timeout to both connect to server and tcp connection timeout * diff --git a/src/AgApiClient.h b/src/AgApiClient.h index 8027d04..1c13100 100644 --- a/src/AgApiClient.h +++ b/src/AgApiClient.h @@ -51,6 +51,7 @@ public: bool sendPing(int rssi, int bootCount); String getApiRoot() const; void setApiRoot(const String &apiRoot); + void setTimeout(uint16_t timeoutMs); }; #endif /** _AG_API_CLIENT_H_ */ From 013fb94307e1a3fdd7b33ddf1de148ab109415b9 Mon Sep 17 00:00:00 2001 From: samuelbles07 Date: Wed, 11 Sep 2024 16:37:50 +0700 Subject: [PATCH 4/4] Only for tcp timeout Ignoring connect to server timeout --- src/AgApiClient.cpp | 20 +++++++++----------- src/AgApiClient.h | 10 ---------- 2 files changed, 9 insertions(+), 21 deletions(-) diff --git a/src/AgApiClient.cpp b/src/AgApiClient.cpp index 5b9bdb6..5933c30 100644 --- a/src/AgApiClient.cpp +++ b/src/AgApiClient.cpp @@ -2,6 +2,13 @@ #include "AgConfigure.h" #include "AirGradient.h" #include "Libraries/Arduino_JSON/src/Arduino_JSON.h" +#ifdef ESP8266 +#include +#include +#include +#else +#include +#endif AgApiClient::AgApiClient(Stream &debug, Configuration &config) : PrintLog(debug, "ApiClient"), config(config) {} @@ -51,7 +58,7 @@ bool AgApiClient::fetchServerConfiguration(void) { } #else HTTPClient client; - _setHttpClientTimeout(&client); + client.setTimeout(timeoutMs); if (client.begin(uri) == false) { getConfigFailed = true; return false; @@ -113,7 +120,7 @@ bool AgApiClient::postToServer(String data) { WiFiClient wifiClient; HTTPClient client; - _setHttpClientTimeout(&client); + client.setTimeout(timeoutMs); if (client.begin(wifiClient, uri.c_str()) == false) { logError("Init client failed"); return false; @@ -191,13 +198,4 @@ void AgApiClient::setApiRoot(const String &apiRoot) { this->apiRoot = apiRoot; } */ void AgApiClient::setTimeout(uint16_t timeoutMs) { this->timeoutMs = timeoutMs; -} - -/** - * @brief Set timeout to both connect to server and tcp connection timeout - * - */ -void AgApiClient::_setHttpClientTimeout(HTTPClient *httpClient) { - httpClient->setTimeout(timeoutMs); - httpClient->setConnectTimeout(timeoutMs); } \ No newline at end of file diff --git a/src/AgApiClient.h b/src/AgApiClient.h index 1c13100..7035323 100644 --- a/src/AgApiClient.h +++ b/src/AgApiClient.h @@ -16,14 +16,6 @@ #include "Main/PrintLog.h" #include -#ifdef ESP8266 -#include -#include -#include -#else -#include -#endif - class AgApiClient : public PrintLog { private: Configuration &config; @@ -35,8 +27,6 @@ private: bool notAvailableOnDashboard = false; // Device not setup on Airgradient cloud dashboard. uint16_t timeoutMs = 10000; // Default set to 10s - void _setHttpClientTimeout(HTTPClient *httpClient); - public: AgApiClient(Stream &stream, Configuration &config); ~AgApiClient();