Compare commits

..

6 Commits

Author SHA1 Message Date
f2b38a5a99 docs: update changelog and header for version v2.0.1
All checks were successful
Release Workflow / detect-provider (push) Successful in 4s
Release Workflow / github-release (push) Has been skipped
Release Workflow / gitea-release (push) Successful in 3m6s
2025-08-30 17:03:17 +02:00
ab005b3dd1 docs: update platformio.ini for version v2.0.1 2025-08-30 17:03:17 +02:00
e537c6ec07 docs: update changelog and header for version v2.0.0-beta14
All checks were successful
Release Workflow / detect-provider (push) Successful in 3s
Release Workflow / github-release (push) Has been skipped
Release Workflow / gitea-release (push) Successful in 3m4s
2025-08-30 16:47:24 +02:00
bec769e95a docs: update platformio.ini for beta version v2.0.0-beta14 2025-08-30 16:47:24 +02:00
5cc58927a6 feat: implement retry mechanism and timeout handling for API requests 2025-08-30 16:47:18 +02:00
afde3f5f81 fix: add timeout handling and error states for vendor and filament operations 2025-08-30 16:40:01 +02:00
3 changed files with 334 additions and 23 deletions

View File

@@ -1,5 +1,255 @@
# Changelog
## [2.0.1] - 2025-08-30
### Breaking Changes
- enhance commit categorization for breaking changes
- Handling of Spools with Tags from Vendors. fix: improve get_last_tag function to handle non-beta tags and fallback to newest tag
### Added
- implement retry mechanism and timeout handling for API requests
- add timeout handling and error states for vendor and filament operations
- enhance weight processing with filtered display and API stability checks
- implement weight stabilization functions and improve tare handling
- add fast-path JSON reading for web interface display
- add handling for successful NFC tag writes to send weight to Spoolman without auto-sending to Bambu
- implement robust page reading with error recovery for NFC tags
- enhance NFC tag reading with robust error recovery and JSON optimization for fast-path detection
- implement robust page reading and safe tag detection with error recovery
- add Manufacturer Tags support documentation in German and English
- add display delay for vendor, filament, and spool creation processes
- add progress bar updates for vendor and filament creation processes
- update vendor and filament ID handling to use NULL and add delays for stability
- add delay to ensure proper setting of vendor and filament IDs after API state changes
- enhance NDEF decoding with detailed validation and debugging output
- enhance NDEF decoding to validate structure and extract JSON payload
- add logging for decoded JSON data in NFC processing
- implement filament and spool creation in Spoolman API
- Add JSON structure comments for filament and spool creation
- Add vendor and filament management to API; implement recycling factory handling in NFC
### Changed
- update platformio.ini for version v2.0.1
- update changelog and header for version v2.0.0-beta14
- update platformio.ini for beta version v2.0.0-beta14
- update changelog and header for version v2.0.0-beta13
- update platformio.ini for beta version v2.0.0-beta13
- optimize weight stabilization parameters for improved responsiveness
- update changelog and header for version v2.0.0-beta12
- update platformio.ini for beta version v2.0.0-beta12
- update changelog and header for version v2.0.0-beta11
- update changelog and header for version v2.0.0-beta11
- update platformio.ini for beta version v2.0.0-beta11
- update changelog and header for version v2.0.0-beta10
- update platformio.ini for beta version v2.0.0-beta10
- update changelog and header for version v2.0.0-beta9
- update platformio.ini for beta version v2.0.0-beta9
- update changelog and header for version v2.0.0-beta8
- update platformio.ini for beta version v2.0.0-beta8
- update changelog and header for version v2.0.0-beta7
- update platformio.ini for beta version v2.0.0-beta7
- update changelog and header for version v2.0.0-beta6
- update changelog and header for version v2.0.0-beta6
- update platformio.ini for beta version v2.0.0-beta6
- update changelog and header for version v2.0.0-beta5
- update platformio.ini for beta version v2.0.0-beta5
- update changelog and header for version v2.0.0-beta4
- update platformio.ini for beta version v2.0.0-beta4
- update changelog and header for version v2.0.0-beta3
- update platformio.ini for beta version v2.0.0-beta3
- update createVendor and checkVendor functions to accept JsonDocument payload
- update changelog and header for version v2.0.0-beta2
- update platformio.ini for beta version v2.0.0-beta2
- clarify product URL description for Manufacturer Tags in German and English documentation
- update changelog and header for version v2.0.0-beta1
- update platformio.ini for beta version v2.0.0-beta1
- update version to 2.0.0 in platformio.ini
- update changelog and header for version v1.5.12-beta18
- update platformio.ini for beta version v1.5.12-beta18
- update changelog and header for version v1.5.12-beta17
- update platformio.ini for beta version v1.5.12-beta17
- optimize page limit detection and remove redundant verification code
- update changelog and header for version v1.5.12-beta16
- update platformio.ini for beta version v1.5.12-beta16
- Refactor NFC interface handling and improve error diagnostics
- update changelog and header for version v1.5.12-beta15
- update platformio.ini for beta version v1.5.12-beta15
- enhance NFC write operation diagnostics and improve error handling
- enhance NFC write operation handling and prevent tag operations during write
- update changelog and header for version v1.5.12-beta14
- update platformio.ini for beta version v1.5.12-beta14
- optimize JSON payload structure and enhance NFC tag validation process
- update changelog and header for version v1.5.12-beta13
- update platformio.ini for beta version v1.5.12-beta13
- reorganize clearUserDataArea function for improved clarity and safety
- update changelog and header for version v1.5.12-beta12
- update platformio.ini for beta version v1.5.12-beta12
- update changelog and header for version v1.5.12-beta11
- update platformio.ini for beta version v1.5.12-beta11
- update changelog and header for version v1.5.12-beta10
- update platformio.ini for beta version v1.5.12-beta10
- streamline task creation in checkVendor and checkFilament functions
- update changelog and header for version v1.5.12-beta9
- update platformio.ini for beta version v1.5.12-beta9
- update changelog and header for version v1.5.12-beta8
- update platformio.ini for beta version v1.5.12-beta8
- update changelog and header for version v1.5.12-beta7
- update platformio.ini for beta version v1.5.12-beta7
- update changelog and header for version v1.5.12-beta6
- update platformio.ini for beta version v1.5.12-beta6
- improve task synchronization in vendor, filament, and spool creation functions
- update changelog and header for version v1.5.12-beta5
- update platformio.ini for beta version v1.5.12-beta5
- update changelog and header for version v1.5.12-beta4
- update platformio.ini for beta version v1.5.12-beta4
- update changelog and header for version v1.5.12-beta3
- update platformio.ini for beta version v1.5.12-beta3
- update changelog and header for version v1.5.12-beta2
- update platformio.ini for beta version v1.5.12-beta2
- update changelog and header for version v1.5.12-beta1
- update platformio.ini for beta version v1.5.12-beta1
- Merge branch 'main' into recyclingfabrik
- Merge branch 'main' into recyclingfabrik
### Fixed
- call scale.tare() in setup after starting scale
- update createVendor function to use external_id as comment instead of static text
- update to_old_version in platformio.ini to reflect correct previous version
- increase delay in start_scale function for improved stability
- replace progress bar with message display for remaining weight in sendToApi function
- update vendor check to use shorthand key in payload
- reset NFC state on API send failure to allow retry
- update createdFilamentId reset value to 65535 for better task handling
- update createdVendorId reset value to 65535 for improved API handling
- update spoolman ID reset values to 65535 for better API response detection
- correct color_hex key usage and comment out unused date fields in spool creation
- improve API state handling and vendor name formatting
- enhance filament creation logic to include dynamic comments based on payload
## [2.0.0-beta14] - 2025-08-30
### Breaking Changes
- enhance commit categorization for breaking changes
- Handling of Spools with Tags from Vendors. fix: improve get_last_tag function to handle non-beta tags and fallback to newest tag
### Added
- implement retry mechanism and timeout handling for API requests
- add timeout handling and error states for vendor and filament operations
- enhance weight processing with filtered display and API stability checks
- implement weight stabilization functions and improve tare handling
- add fast-path JSON reading for web interface display
- add handling for successful NFC tag writes to send weight to Spoolman without auto-sending to Bambu
- implement robust page reading with error recovery for NFC tags
- enhance NFC tag reading with robust error recovery and JSON optimization for fast-path detection
- implement robust page reading and safe tag detection with error recovery
- add Manufacturer Tags support documentation in German and English
- add display delay for vendor, filament, and spool creation processes
- add progress bar updates for vendor and filament creation processes
- update vendor and filament ID handling to use NULL and add delays for stability
- add delay to ensure proper setting of vendor and filament IDs after API state changes
- enhance NDEF decoding with detailed validation and debugging output
- enhance NDEF decoding to validate structure and extract JSON payload
- add logging for decoded JSON data in NFC processing
- implement filament and spool creation in Spoolman API
- Add JSON structure comments for filament and spool creation
- Add vendor and filament management to API; implement recycling factory handling in NFC
### Changed
- update platformio.ini for beta version v2.0.0-beta14
- update changelog and header for version v2.0.0-beta13
- update platformio.ini for beta version v2.0.0-beta13
- optimize weight stabilization parameters for improved responsiveness
- update changelog and header for version v2.0.0-beta12
- update platformio.ini for beta version v2.0.0-beta12
- update changelog and header for version v2.0.0-beta11
- update changelog and header for version v2.0.0-beta11
- update platformio.ini for beta version v2.0.0-beta11
- update changelog and header for version v2.0.0-beta10
- update platformio.ini for beta version v2.0.0-beta10
- update changelog and header for version v2.0.0-beta9
- update platformio.ini for beta version v2.0.0-beta9
- update changelog and header for version v2.0.0-beta8
- update platformio.ini for beta version v2.0.0-beta8
- update changelog and header for version v2.0.0-beta7
- update platformio.ini for beta version v2.0.0-beta7
- update changelog and header for version v2.0.0-beta6
- update changelog and header for version v2.0.0-beta6
- update platformio.ini for beta version v2.0.0-beta6
- update changelog and header for version v2.0.0-beta5
- update platformio.ini for beta version v2.0.0-beta5
- update changelog and header for version v2.0.0-beta4
- update platformio.ini for beta version v2.0.0-beta4
- update changelog and header for version v2.0.0-beta3
- update platformio.ini for beta version v2.0.0-beta3
- update createVendor and checkVendor functions to accept JsonDocument payload
- update changelog and header for version v2.0.0-beta2
- update platformio.ini for beta version v2.0.0-beta2
- clarify product URL description for Manufacturer Tags in German and English documentation
- update changelog and header for version v2.0.0-beta1
- update platformio.ini for beta version v2.0.0-beta1
- update version to 2.0.0 in platformio.ini
- update changelog and header for version v1.5.12-beta18
- update platformio.ini for beta version v1.5.12-beta18
- update changelog and header for version v1.5.12-beta17
- update platformio.ini for beta version v1.5.12-beta17
- optimize page limit detection and remove redundant verification code
- update changelog and header for version v1.5.12-beta16
- update platformio.ini for beta version v1.5.12-beta16
- Refactor NFC interface handling and improve error diagnostics
- update changelog and header for version v1.5.12-beta15
- update platformio.ini for beta version v1.5.12-beta15
- enhance NFC write operation diagnostics and improve error handling
- enhance NFC write operation handling and prevent tag operations during write
- update changelog and header for version v1.5.12-beta14
- update platformio.ini for beta version v1.5.12-beta14
- optimize JSON payload structure and enhance NFC tag validation process
- update changelog and header for version v1.5.12-beta13
- update platformio.ini for beta version v1.5.12-beta13
- reorganize clearUserDataArea function for improved clarity and safety
- update changelog and header for version v1.5.12-beta12
- update platformio.ini for beta version v1.5.12-beta12
- update changelog and header for version v1.5.12-beta11
- update platformio.ini for beta version v1.5.12-beta11
- update changelog and header for version v1.5.12-beta10
- update platformio.ini for beta version v1.5.12-beta10
- streamline task creation in checkVendor and checkFilament functions
- update changelog and header for version v1.5.12-beta9
- update platformio.ini for beta version v1.5.12-beta9
- update changelog and header for version v1.5.12-beta8
- update platformio.ini for beta version v1.5.12-beta8
- update changelog and header for version v1.5.12-beta7
- update platformio.ini for beta version v1.5.12-beta7
- update changelog and header for version v1.5.12-beta6
- update platformio.ini for beta version v1.5.12-beta6
- improve task synchronization in vendor, filament, and spool creation functions
- update changelog and header for version v1.5.12-beta5
- update platformio.ini for beta version v1.5.12-beta5
- update changelog and header for version v1.5.12-beta4
- update platformio.ini for beta version v1.5.12-beta4
- update changelog and header for version v1.5.12-beta3
- update platformio.ini for beta version v1.5.12-beta3
- update changelog and header for version v1.5.12-beta2
- update platformio.ini for beta version v1.5.12-beta2
- update changelog and header for version v1.5.12-beta1
- update platformio.ini for beta version v1.5.12-beta1
- Merge branch 'main' into recyclingfabrik
- Merge branch 'main' into recyclingfabrik
### Fixed
- call scale.tare() in setup after starting scale
- update createVendor function to use external_id as comment instead of static text
- update to_old_version in platformio.ini to reflect correct previous version
- increase delay in start_scale function for improved stability
- replace progress bar with message display for remaining weight in sendToApi function
- update vendor check to use shorthand key in payload
- reset NFC state on API send failure to allow retry
- update createdFilamentId reset value to 65535 for better task handling
- update createdVendorId reset value to 65535 for improved API handling
- update spoolman ID reset values to 65535 for better API response detection
- correct color_hex key usage and comment out unused date fields in spool creation
- improve API state handling and vendor name formatting
- enhance filament creation logic to include dynamic comments based on payload
## [2.0.0-beta13] - 2025-08-30
### Breaking Changes
- enhance commit categorization for breaking changes

View File

@@ -9,7 +9,7 @@
; https://docs.platformio.org/page/projectconf.html
[common]
version = "2.0.0-beta13"
version = "2.0.1"
to_old_version = "1.5.10"
##

View File

@@ -124,28 +124,69 @@ void sendToApi(void *parameter) {
String octoToken = params->octoToken;
bool triggerWeightUpdate = params->triggerWeightUpdate;
String spoolIdForWeight = params->spoolIdForWeight;
uint16_t weightValue = params->weightValue;
uint16_t weightValue = params->weightValue;
HTTPClient http;
http.setReuse(false);
// Retry mechanism with configurable parameters
const uint8_t MAX_RETRIES = 3;
const uint16_t RETRY_DELAY_MS = 1000; // 1 second between retries
const uint16_t HTTP_TIMEOUT_MS = 10000; // 10 second HTTP timeout
bool success = false;
int httpCode = -1;
String responsePayload = "";
// Try request with retries
for (uint8_t attempt = 1; attempt <= MAX_RETRIES && !success; attempt++) {
Serial.printf("API Request attempt %d/%d to: %s\n", attempt, MAX_RETRIES, spoolsUrl.c_str());
HTTPClient http;
http.setReuse(false);
http.setTimeout(HTTP_TIMEOUT_MS); // Set HTTP timeout
http.begin(spoolsUrl);
http.addHeader("Content-Type", "application/json");
if (octoEnabled && octoToken != "") http.addHeader("X-Api-Key", octoToken);
http.begin(spoolsUrl);
http.addHeader("Content-Type", "application/json");
if (octoEnabled && octoToken != "") http.addHeader("X-Api-Key", octoToken);
// Execute HTTP request based on type
if (httpType == "PATCH") httpCode = http.PATCH(updatePayload);
else if (httpType == "POST") httpCode = http.POST(updatePayload);
else if (httpType == "GET") httpCode = http.GET();
else httpCode = http.PUT(updatePayload);
int httpCode;
if (httpType == "PATCH") httpCode = http.PATCH(updatePayload);
else if (httpType == "POST") httpCode = http.POST(updatePayload);
else if (httpType == "GET") httpCode = http.GET();
else httpCode = http.PUT(updatePayload);
// Check if request was successful
if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_CREATED) {
responsePayload = http.getString();
success = true;
Serial.printf("API Request successful on attempt %d, HTTP Code: %d\n", attempt, httpCode);
} else {
Serial.printf("API Request failed on attempt %d, HTTP Code: %d (%s)\n",
attempt, httpCode, http.errorToString(httpCode).c_str());
// Don't retry on certain error codes (client errors)
if (httpCode >= 400 && httpCode < 500 && httpCode != 408 && httpCode != 429) {
Serial.println("Client error detected, stopping retries");
break;
}
// Wait before retry (except on last attempt)
if (attempt < MAX_RETRIES) {
Serial.printf("Waiting %dms before retry...\n", RETRY_DELAY_MS);
http.end();
vTaskDelay(RETRY_DELAY_MS / portTICK_PERIOD_MS);
continue;
}
}
http.end();
}
if (httpCode == HTTP_CODE_OK) {
// Process successful response
if (success) {
Serial.println("Spoolman Abfrage erfolgreich");
// Restgewicht der Spule auslesen
String payload = http.getString();
JsonDocument doc;
DeserializationError error = deserializeJson(doc, payload);
DeserializationError error = deserializeJson(doc, responsePayload);
if (error) {
Serial.print("Fehler beim Parsen der JSON-Antwort: ");
Serial.println(error.c_str());
@@ -225,10 +266,9 @@ void sendToApi(void *parameter) {
} else if (httpCode == HTTP_CODE_CREATED) {
Serial.println("Spoolman erfolgreich erstellt");
// Parse response for created resources
String payload = http.getString();
// Parse response for created resources
JsonDocument doc;
DeserializationError error = deserializeJson(doc, payload);
DeserializationError error = deserializeJson(doc, responsePayload);
if (error) {
Serial.print("Fehler beim Parsen der JSON-Antwort: ");
Serial.println(error.c_str());
@@ -280,14 +320,17 @@ void sendToApi(void *parameter) {
Serial.println(weightPayload);
// Execute weight update
http.begin(weightUrl);
http.addHeader("Content-Type", "application/json");
HTTPClient weightHttp;
weightHttp.setReuse(false);
weightHttp.setTimeout(HTTP_TIMEOUT_MS);
weightHttp.begin(weightUrl);
weightHttp.addHeader("Content-Type", "application/json");
int weightHttpCode = http.PUT(weightPayload);
int weightHttpCode = weightHttp.PUT(weightPayload);
if (weightHttpCode == HTTP_CODE_OK) {
Serial.println("Weight update successful");
String weightResponse = http.getString();
String weightResponse = weightHttp.getString();
JsonDocument weightResponseDoc;
DeserializationError weightError = deserializeJson(weightResponseDoc, weightResponse);
@@ -310,6 +353,7 @@ void sendToApi(void *parameter) {
oledShowProgressBar(1, 1, "Failure!", "Weight update");
}
weightHttp.end();
weightDoc.clear();
}
} else {
@@ -325,14 +369,25 @@ void sendToApi(void *parameter) {
case API_REQUEST_BAMBU_UPDATE:
oledShowProgressBar(1, 1, "Failure!", "Bambu update");
break;
case API_REQUEST_VENDOR_CHECK:
oledShowProgressBar(1, 1, "Failure!", "Vendor check");
foundVendorId = 0; // Set to 0 to indicate error/not found
break;
case API_REQUEST_VENDOR_CREATE:
oledShowProgressBar(1, 1, "Failure!", "Vendor create");
createdVendorId = 0; // Set to 0 to indicate error
break;
case API_REQUEST_FILAMENT_CHECK:
oledShowProgressBar(1, 1, "Failure!", "Filament check");
foundFilamentId = 0; // Set to 0 to indicate error/not found
break;
case API_REQUEST_FILAMENT_CREATE:
oledShowProgressBar(1, 1, "Failure!", "Filament create");
createdFilamentId = 0; // Set to 0 to indicate error
break;
case API_REQUEST_SPOOL_CREATE:
oledShowProgressBar(1, 1, "Failure!", "Spool create");
createdSpoolId = 0; // Set to 0 to indicate error instead of hanging
break;
}
Serial.println("Fehler beim Senden an Spoolman! HTTP Code: " + String(httpCode));
@@ -340,7 +395,6 @@ void sendToApi(void *parameter) {
nfcReaderState = NFC_IDLE; // Reset NFC state to allow retry
}
http.end();
vTaskDelay(50 / portTICK_PERIOD_MS);
// Speicher freigeben
@@ -952,6 +1006,13 @@ uint16_t createSpool(uint16_t vendorId, uint16_t filamentId, JsonDocument& paylo
while(createdSpoolId == 65535) {
vTaskDelay(50 / portTICK_PERIOD_MS);
}
// Check if spool creation was successful
if (createdSpoolId == 0) {
Serial.println("ERROR: Spool creation failed");
nfcReaderState = NFC_IDLE; // Reset NFC state
return 0;
}
// Write data to tag with startWriteJsonToTag
// void startWriteJsonToTag(const bool isSpoolTag, const char* payload);