mirror of
https://github.com/airgradienthq/arduino.git
synced 2025-07-31 09:27:16 +02:00
Using https
For get config and post measurements
This commit is contained in:
@ -59,9 +59,20 @@ bool AgApiClient::fetchServerConfiguration(void) {
|
|||||||
#else
|
#else
|
||||||
HTTPClient client;
|
HTTPClient client;
|
||||||
client.setTimeout(timeoutMs);
|
client.setTimeout(timeoutMs);
|
||||||
if (client.begin(uri) == false) {
|
if (apiRootChanged) {
|
||||||
getConfigFailed = true;
|
// If apiRoot is changed, assume not using https
|
||||||
return false;
|
if (client.begin(uri) == false) {
|
||||||
|
logError("Begin HTTPClient failed (GET)");
|
||||||
|
getConfigFailed = true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// By default, airgradient using https
|
||||||
|
if (client.begin(uri, agCA) == false) {
|
||||||
|
logError("Begin HTTPClient using tls failed (GET)");
|
||||||
|
getConfigFailed = true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -90,8 +101,6 @@ bool AgApiClient::fetchServerConfiguration(void) {
|
|||||||
String respContent = client.getString();
|
String respContent = client.getString();
|
||||||
client.end();
|
client.end();
|
||||||
|
|
||||||
// logInfo("Get configuration: " + respContent);
|
|
||||||
|
|
||||||
/** Parse configuration and return result */
|
/** Parse configuration and return result */
|
||||||
return config.parse(respContent, false);
|
return config.parse(respContent, false);
|
||||||
}
|
}
|
||||||
@ -115,22 +124,28 @@ bool AgApiClient::postToServer(String data) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
String uri = apiRoot + "/sensors/airgradient:" + ag->deviceId() + "/measures";
|
String uri = apiRoot + "/sensors/airgradient:" + ag->deviceId() + "/measures";
|
||||||
// logInfo("Post uri: " + uri);
|
|
||||||
// logInfo("Post data: " + data);
|
|
||||||
|
|
||||||
WiFiClient wifiClient;
|
|
||||||
HTTPClient client;
|
HTTPClient client;
|
||||||
client.setTimeout(timeoutMs);
|
client.setTimeout(timeoutMs);
|
||||||
if (client.begin(wifiClient, uri.c_str()) == false) {
|
if (apiRootChanged) {
|
||||||
logError("Init client failed");
|
// If apiRoot is changed, assume not using https
|
||||||
return false;
|
if (client.begin(uri) == false) {
|
||||||
|
logError("Begin HTTPClient failed (POST)");
|
||||||
|
getConfigFailed = true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// By default, airgradient using https
|
||||||
|
if (client.begin(uri, agCA) == false) {
|
||||||
|
logError("Begin HTTPClient using tls failed (POST)");
|
||||||
|
getConfigFailed = true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
client.addHeader("content-type", "application/json");
|
client.addHeader("content-type", "application/json");
|
||||||
int retCode = client.POST(data);
|
int retCode = client.POST(data);
|
||||||
client.end();
|
client.end();
|
||||||
|
|
||||||
logInfo(String("POST: ") + uri);
|
logInfo(String("POST: ") + uri);
|
||||||
// logInfo(String("DATA: ") + data);
|
|
||||||
logInfo(String("Return code: ") + String(retCode));
|
logInfo(String("Return code: ") + String(retCode));
|
||||||
|
|
||||||
if ((retCode == 200) || (retCode == 429)) {
|
if ((retCode == 200) || (retCode == 429)) {
|
||||||
@ -189,7 +204,10 @@ bool AgApiClient::sendPing(int rssi, int bootCount) {
|
|||||||
|
|
||||||
String AgApiClient::getApiRoot() const { return apiRoot; }
|
String AgApiClient::getApiRoot() const { return apiRoot; }
|
||||||
|
|
||||||
void AgApiClient::setApiRoot(const String &apiRoot) { this->apiRoot = apiRoot; }
|
void AgApiClient::setApiRoot(const String &apiRoot) {
|
||||||
|
this->apiRootChanged = true;
|
||||||
|
this->apiRoot = apiRoot;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Set http request timeout. (Default: 10s)
|
* @brief Set http request timeout. (Default: 10s)
|
||||||
|
@ -20,8 +20,47 @@ class AgApiClient : public PrintLog {
|
|||||||
private:
|
private:
|
||||||
Configuration &config;
|
Configuration &config;
|
||||||
AirGradient *ag;
|
AirGradient *ag;
|
||||||
|
#ifdef ESP8266
|
||||||
String apiRoot = "http://hw.airgradient.com";
|
String apiRoot = "http://hw.airgradient.com";
|
||||||
|
#else
|
||||||
|
String apiRoot = "https://hw.airgradient.com";
|
||||||
|
const char *agCA = "-----BEGIN CERTIFICATE-----\n"
|
||||||
|
"MIIF4jCCA8oCCQD7MgvcaVWxkTANBgkqhkiG9w0BAQsFADCBsjELMAkGA1UEBhMC\n"
|
||||||
|
"VEgxEzARBgNVBAgMCkNoaWFuZyBNYWkxEDAOBgNVBAcMB01hZSBSaW0xGTAXBgNV\n"
|
||||||
|
"BAoMEEFpckdyYWRpZW50IEx0ZC4xFDASBgNVBAsMC1NlbnNvciBMYWJzMSgwJgYD\n"
|
||||||
|
"VQQDDB9BaXJHcmFkaWVudCBTZW5zb3IgTGFicyBSb290IENBMSEwHwYJKoZIhvcN\n"
|
||||||
|
"AQkBFhJjYUBhaXJncmFkaWVudC5jb20wHhcNMjEwOTE3MTE0NDE3WhcNNDEwOTEy\n"
|
||||||
|
"MTE0NDE3WjCBsjELMAkGA1UEBhMCVEgxEzARBgNVBAgMCkNoaWFuZyBNYWkxEDAO\n"
|
||||||
|
"BgNVBAcMB01hZSBSaW0xGTAXBgNVBAoMEEFpckdyYWRpZW50IEx0ZC4xFDASBgNV\n"
|
||||||
|
"BAsMC1NlbnNvciBMYWJzMSgwJgYDVQQDDB9BaXJHcmFkaWVudCBTZW5zb3IgTGFi\n"
|
||||||
|
"cyBSb290IENBMSEwHwYJKoZIhvcNAQkBFhJjYUBhaXJncmFkaWVudC5jb20wggIi\n"
|
||||||
|
"MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC6XkVQ4O9d5GcUjPYRgF/uaY6O\n"
|
||||||
|
"5ry1xCGvotxkEeKkBk99lB1oNUUfNsP5bwuDci4XKfY9Ro6/jmkfHSVcPAwUnjAt\n"
|
||||||
|
"BcHqZtA/cMXykaynf9yXPxPQN7XLu/Rk32RIfb90sIGS318xgNziCYvzWZmlxpxc\n"
|
||||||
|
"3gUcAgGtamlgZ6wD3yOHVo8B9aFNvmP16QwkUm8fKDHunJG+iX2Bxa4ka5FJovhG\n"
|
||||||
|
"TnUwtso6Vrn0JaWF9qWcPZE0JZMjFW8PYRriyJmHwr/nAXfPPKphD1oRO+oA7/jq\n"
|
||||||
|
"dYkrJw6+OHfFXnPB1xkeh4OPBzcCZHT5XWNfwBYazYpjcJa9ngGFSmg8lX1ac23C\n"
|
||||||
|
"zea1XJmSrPwbZbWxoQznnf7Y78mRjruYKgSP8rf74KYvBe/HGPL5NQyXQ3l6kwmu\n"
|
||||||
|
"CCUqfcC0wCWEtWESxwSdFE2qQii8CZ12kQExzvR2PrOIyKQYSdkGx9/RBZtAVPXP\n"
|
||||||
|
"hmLuRBQYHrF5Cxf1oIbBK8OMoNVgBm6ftt15t9Sq9dH5Aup2YR6WEJkVaYkYzZzK\n"
|
||||||
|
"X7M+SQcdbXp+hAO8PFpABJxkaDAO2kiB5Ov7pDYPAcmNFqnJT48AY0TZJeVeCa5W\n"
|
||||||
|
"sIv3lPvB/XcFjP0+aZxxNSEEwpGPUYgvKUYUUmb0NammlYQwZHKaShPEmZ3UZ0bp\n"
|
||||||
|
"VNt4p6374nzO376sSwIDAQABMA0GCSqGSIb3DQEBCwUAA4ICAQB/LfBPgTx7xKQB\n"
|
||||||
|
"JNMUhah17AFAn050NiviGJOHdPQely6u3DmJGg+ijEVlPWO1FEW3it+LOuNP5zOu\n"
|
||||||
|
"bhq8paTYIxPxtALIxw5ksykX9woDuX3H6FF9mPdQIbL7ft+3ZtZ4FWPui9dUtaPe\n"
|
||||||
|
"ZBmDFDi4U29nhWZK68JSp5QkWjfaYLV/vtag7120eVyGEPFZ0UAuTUNqpw+stOt9\n"
|
||||||
|
"gJ2ZxNx13xJ8ZnLK7qz1crPe8/8IVAdxbVLoY7JaWPLc//+VF+ceKicy8+4gV7zN\n"
|
||||||
|
"Gnq2IyM+CHFz8VYMLbW+3eVp4iJjTa72vae116kozboEIUVN9rgLqIKyVqQXiuoN\n"
|
||||||
|
"g3xY+yfncPB2+H/+lfyy6mepPIfgksd3+KeNxFADSc5EVY2JKEdorRodnAh7a8K6\n"
|
||||||
|
"WjTYgq+GjWXU2uQW2SyPt6Tu33OT8nBnu3NB80eT8WXgdVCkgsuyCuLvNRf1Xmze\n"
|
||||||
|
"igvurpU6JmQ1GlLgLJo8omJHTh1zIbkR9injPYne2v9ciHCoP6+LDEqe+rOsvPCB\n"
|
||||||
|
"C/o/iZ4svmYX4fWGuU7GgqZE8hhrC3+GdOTf2ADC752cYCZxBidXGtkrGNoHQKmQ\n"
|
||||||
|
"KCOMFBxZIvWteB3tUo3BKYz1D2CvKWz1wV4moc5JHkOgS+jqxhvOkQ/vfQBQ1pUY\n"
|
||||||
|
"TMui9BSwU7B1G2XjdLbfF3Dc67zaSg==\n"
|
||||||
|
"-----END CERTIFICATE-----\n";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
bool apiRootChanged = false; // Indicate if setApiRoot() is called
|
||||||
bool getConfigFailed;
|
bool getConfigFailed;
|
||||||
bool postToServerFailed;
|
bool postToServerFailed;
|
||||||
bool notAvailableOnDashboard = false; // Device not setup on Airgradient cloud dashboard.
|
bool notAvailableOnDashboard = false; // Device not setup on Airgradient cloud dashboard.
|
||||||
|
Reference in New Issue
Block a user