forked from Akcelerometry_drgania_WMT/PI_mikrokontroler
Wdrozenie 3 etapowego flagowania z wysylaniem ACK do serwera podczas uploadu
This commit is contained in:
@@ -14,7 +14,9 @@ public:
|
|||||||
APIClient();
|
APIClient();
|
||||||
|
|
||||||
bool uploadMeasurement(const String& filePath);
|
bool uploadMeasurement(const String& filePath);
|
||||||
|
int checkDeviceFlags();
|
||||||
bool fetchWiFiConfig();
|
bool fetchWiFiConfig();
|
||||||
|
bool sendWiFiAck();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -145,14 +145,12 @@ bool APIClient::fetchWiFiConfig() {
|
|||||||
String payload = http.getString();
|
String payload = http.getString();
|
||||||
ESP_LOGI(TAG_API, "Received config payload: %s", payload.c_str());
|
ESP_LOGI(TAG_API, "Received config payload: %s", payload.c_str());
|
||||||
|
|
||||||
// Proste wyciąganie danych z JSON bez ArduinoJson (oszczędność pamięci)
|
|
||||||
// Oczekiwany format: {"ssid": "MojaSiec", "password": "MojeHaslo"}
|
|
||||||
int ssidStart = payload.indexOf("\"ssid\"");
|
int ssidStart = payload.indexOf("\"ssid\"");
|
||||||
int passStart = payload.indexOf("\"password\"");
|
int passStart = payload.indexOf("\"password\"");
|
||||||
|
|
||||||
if (ssidStart >= 0 && passStart >= 0) {
|
if (ssidStart >= 0 && passStart >= 0) {
|
||||||
int ssidValStart = payload.indexOf("\"", ssidStart + 6); // pomiń "ssid"
|
int ssidValStart = payload.indexOf("\"", ssidStart + 6);
|
||||||
ssidValStart = payload.indexOf("\"", ssidValStart + 1) + 1; // znajdź początek wartości
|
ssidValStart = payload.indexOf("\"", ssidValStart + 1) + 1;
|
||||||
int ssidValEnd = payload.indexOf("\"", ssidValStart);
|
int ssidValEnd = payload.indexOf("\"", ssidValStart);
|
||||||
String newSSID = payload.substring(ssidValStart, ssidValEnd);
|
String newSSID = payload.substring(ssidValStart, ssidValEnd);
|
||||||
|
|
||||||
@@ -182,11 +180,15 @@ bool APIClient::fetchWiFiConfig() {
|
|||||||
fw.println(newSSID + ";" + newPass);
|
fw.println(newSSID + ";" + newPass);
|
||||||
fw.close();
|
fw.close();
|
||||||
ESP_LOGI(TAG_API, "Saved new WiFi config to SD: %s", newSSID.c_str());
|
ESP_LOGI(TAG_API, "Saved new WiFi config to SD: %s", newSSID.c_str());
|
||||||
|
sendWiFiAck();
|
||||||
http.end();
|
http.end();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ESP_LOGI(TAG_API, "WiFi config already exists, skipping.");
|
ESP_LOGI(TAG_API, "WiFi config already exists, skipping.");
|
||||||
|
sendWiFiAck();
|
||||||
|
http.end();
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -201,3 +203,68 @@ bool APIClient::fetchWiFiConfig() {
|
|||||||
http.end();
|
http.end();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int APIClient::checkDeviceFlags() {
|
||||||
|
if (WiFi.status() != WL_CONNECTED) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
HTTPClient http;
|
||||||
|
String url = String(config.restURL) + ":" + String(config.restPort) + "/config/flags?sn=" + String(config.restUser);
|
||||||
|
|
||||||
|
ESP_LOGI(TAG_API, "Checking flags from: %s", url.c_str());
|
||||||
|
http.begin(url);
|
||||||
|
http.setAuthorization(config.restUser, config.restPass);
|
||||||
|
|
||||||
|
int httpCode = http.GET();
|
||||||
|
int flagValue = -1;
|
||||||
|
|
||||||
|
if (httpCode == HTTP_CODE_OK || httpCode == 200) {
|
||||||
|
String payload = http.getString();
|
||||||
|
int flagStart = payload.indexOf("\"wifi_update\"");
|
||||||
|
if (flagStart >= 0) {
|
||||||
|
int valStart = payload.indexOf(":", flagStart) + 1;
|
||||||
|
int valEnd = payload.indexOf("}", valStart);
|
||||||
|
if (valEnd < 0) valEnd = payload.indexOf(",", valStart);
|
||||||
|
|
||||||
|
String valStr = payload.substring(valStart, valEnd);
|
||||||
|
valStr.trim();
|
||||||
|
flagValue = valStr.toInt();
|
||||||
|
ESP_LOGI(TAG_API, "Flag wifi_update detected: %d", flagValue);
|
||||||
|
} else {
|
||||||
|
ESP_LOGE(TAG_API, "Flag wifi_update not found in JSON");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ESP_LOGE(TAG_API, "Failed to check flags. HTTP code: %d", httpCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
http.end();
|
||||||
|
return flagValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool APIClient::sendWiFiAck() {
|
||||||
|
if (WiFi.status() != WL_CONNECTED) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
HTTPClient http;
|
||||||
|
String url = String(config.restURL) + ":" + String(config.restPort) + "/config/wifi/ack?sn=" + String(config.restUser);
|
||||||
|
|
||||||
|
ESP_LOGI(TAG_API, "Sending ACK to: %s", url.c_str());
|
||||||
|
http.begin(url);
|
||||||
|
http.setAuthorization(config.restUser, config.restPass);
|
||||||
|
http.addHeader("Content-Type", "application/json");
|
||||||
|
|
||||||
|
int httpCode = http.POST("{\"status\":\"ok\"}");
|
||||||
|
bool success = false;
|
||||||
|
|
||||||
|
if (httpCode == HTTP_CODE_OK || httpCode == 200 || httpCode == 201) {
|
||||||
|
ESP_LOGI(TAG_API, "ACK sent successfully");
|
||||||
|
success = true;
|
||||||
|
} else {
|
||||||
|
ESP_LOGE(TAG_API, "Failed to send ACK. HTTP code: %d", httpCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
http.end();
|
||||||
|
return success;
|
||||||
|
}
|
||||||
|
|||||||
@@ -80,6 +80,13 @@ void UploadManager::uploadFile(const String& filePath) {
|
|||||||
void UploadManager::processPendingUploads() {
|
void UploadManager::processPendingUploads() {
|
||||||
if (WiFi.status() != WL_CONNECTED) return;
|
if (WiFi.status() != WL_CONNECTED) return;
|
||||||
|
|
||||||
|
ESP_LOGI(TAG_UPLOAD, "Checking API flags...");
|
||||||
|
int flags = apiClient.checkDeviceFlags();
|
||||||
|
if (flags == 1) {
|
||||||
|
ESP_LOGI(TAG_UPLOAD, "Flag = 1. Fetching new WiFi config...");
|
||||||
|
apiClient.fetchWiFiConfig();
|
||||||
|
}
|
||||||
|
|
||||||
ESP_LOGI(TAG_UPLOAD, "Checking for pending uploads...");
|
ESP_LOGI(TAG_UPLOAD, "Checking for pending uploads...");
|
||||||
ESP_LOGI(TAG_UPLOAD, "DEBUG: findHighestNumericDir()");
|
ESP_LOGI(TAG_UPLOAD, "DEBUG: findHighestNumericDir()");
|
||||||
uint32_t highestDir = capture_.findHighestNumericDir();
|
uint32_t highestDir = capture_.findHighestNumericDir();
|
||||||
|
|||||||
Reference in New Issue
Block a user