Compare commits
6 Commits
recyclingf
...
v2.0.0-bet
Author | SHA1 | Date | |
---|---|---|---|
10aeb9bc52 | |||
00b9bc08af | |||
dfe9e4dbe9 | |||
79eacae225 | |||
d5d7358f58 | |||
9b362b3c73 |
97
CHANGELOG.md
97
CHANGELOG.md
@@ -1,5 +1,102 @@
|
||||
# Changelog
|
||||
|
||||
## [2.0.0-beta6] - 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 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 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-beta5] - 2025-08-30
|
||||
### Changed
|
||||
- update platformio.ini for beta version v2.0.0-beta5
|
||||
|
@@ -9,7 +9,7 @@
|
||||
; https://docs.platformio.org/page/projectconf.html
|
||||
|
||||
[common]
|
||||
version = "2.0.0-beta5"
|
||||
version = "2.0.0-beta6"
|
||||
to_old_version = "1.5.10"
|
||||
|
||||
##
|
||||
|
@@ -14,17 +14,39 @@ def get_version():
|
||||
return version_match.group(1) if version_match else None
|
||||
|
||||
def get_last_tag():
|
||||
"""Get the last non-beta tag for changelog generation"""
|
||||
try:
|
||||
result = subprocess.run(['git', 'describe', '--tags', '--abbrev=0'],
|
||||
# Get all tags sorted by version
|
||||
result = subprocess.run(['git', 'tag', '-l', '--sort=-version:refname'],
|
||||
capture_output=True, text=True)
|
||||
return result.stdout.strip()
|
||||
if result.returncode != 0:
|
||||
return None
|
||||
|
||||
tags = result.stdout.strip().split('\n')
|
||||
|
||||
# Find the first (newest) non-beta tag
|
||||
for tag in tags:
|
||||
if tag and not '-beta' in tag.lower():
|
||||
print(f"Using last stable tag for changelog: {tag}")
|
||||
return tag
|
||||
|
||||
# Fallback: if no non-beta tags found, use the newest tag
|
||||
print("No stable tags found, using newest tag")
|
||||
if tags and tags[0]:
|
||||
return tags[0]
|
||||
return None
|
||||
except subprocess.CalledProcessError:
|
||||
return None
|
||||
|
||||
def categorize_commit(commit_msg):
|
||||
"""Categorize commit messages based on conventional commits"""
|
||||
lower_msg = commit_msg.lower()
|
||||
if any(x in lower_msg for x in ['feat', 'add', 'new']):
|
||||
|
||||
# Check for breaking changes first
|
||||
if ('!' in commit_msg and any(x in lower_msg for x in ['feat!', 'fix!', 'chore!', 'refactor!'])) or \
|
||||
'breaking change' in lower_msg or 'breaking:' in lower_msg:
|
||||
return 'Breaking Changes'
|
||||
elif any(x in lower_msg for x in ['feat', 'add', 'new']):
|
||||
return 'Added'
|
||||
elif any(x in lower_msg for x in ['fix', 'bug']):
|
||||
return 'Fixed'
|
||||
@@ -34,6 +56,7 @@ def categorize_commit(commit_msg):
|
||||
def get_changes_from_git():
|
||||
"""Get changes from git commits since last tag"""
|
||||
changes = {
|
||||
'Breaking Changes': [],
|
||||
'Added': [],
|
||||
'Changed': [],
|
||||
'Fixed': []
|
||||
@@ -55,7 +78,9 @@ def get_changes_from_git():
|
||||
if commit:
|
||||
category = categorize_commit(commit)
|
||||
# Clean up commit message
|
||||
clean_msg = re.sub(r'^(feat|fix|chore|docs|style|refactor|perf|test)(\(.*\))?:', '', commit).strip()
|
||||
clean_msg = re.sub(r'^(feat|fix|chore|docs|style|refactor|perf|test)(\(.*\))?!?:', '', commit).strip()
|
||||
# Remove BREAKING CHANGE prefix if present
|
||||
clean_msg = re.sub(r'^breaking change:\s*', '', clean_msg, flags=re.IGNORECASE).strip()
|
||||
changes[category].append(clean_msg)
|
||||
|
||||
except subprocess.CalledProcessError:
|
||||
|
93
src/nfc.cpp
93
src/nfc.cpp
@@ -1678,9 +1678,75 @@ void startWriteJsonToTag(const bool isSpoolTag, const char* payload) {
|
||||
}
|
||||
}
|
||||
|
||||
// Robust page reading with error recovery
|
||||
bool robustPageRead(uint8_t page, uint8_t* buffer) {
|
||||
const int MAX_READ_ATTEMPTS = 3;
|
||||
|
||||
for (int attempt = 0; attempt < MAX_READ_ATTEMPTS; attempt++) {
|
||||
esp_task_wdt_reset();
|
||||
yield();
|
||||
|
||||
if (nfc.ntag2xx_ReadPage(page, buffer)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
Serial.printf("Page %d read failed, attempt %d/%d\n", page, attempt + 1, MAX_READ_ATTEMPTS);
|
||||
|
||||
// Try to stabilize connection between attempts
|
||||
if (attempt < MAX_READ_ATTEMPTS - 1) {
|
||||
vTaskDelay(pdMS_TO_TICKS(25));
|
||||
|
||||
// Re-verify tag presence with quick check
|
||||
uint8_t uid[7];
|
||||
uint8_t uidLength;
|
||||
if (!nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength, 100)) {
|
||||
Serial.println("Tag lost during read operation");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// Safe tag detection with manual retry logic and short timeouts
|
||||
bool safeTagDetection(uint8_t* uid, uint8_t* uidLength) {
|
||||
const int MAX_ATTEMPTS = 3;
|
||||
const int SHORT_TIMEOUT = 100; // Very short timeout to prevent hanging
|
||||
|
||||
for (int attempt = 0; attempt < MAX_ATTEMPTS; attempt++) {
|
||||
// Watchdog reset on each attempt
|
||||
esp_task_wdt_reset();
|
||||
yield();
|
||||
|
||||
// Use short timeout to avoid blocking
|
||||
bool success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, uidLength, SHORT_TIMEOUT);
|
||||
|
||||
if (success) {
|
||||
Serial.printf("✓ Tag detected on attempt %d with %dms timeout\n", attempt + 1, SHORT_TIMEOUT);
|
||||
return true;
|
||||
}
|
||||
|
||||
// Short pause between attempts
|
||||
vTaskDelay(pdMS_TO_TICKS(25));
|
||||
|
||||
// Refresh RF field after failed attempt (but not on last attempt)
|
||||
if (attempt < MAX_ATTEMPTS - 1) {
|
||||
nfc.SAMConfig();
|
||||
vTaskDelay(pdMS_TO_TICKS(10));
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void scanRfidTask(void * parameter) {
|
||||
Serial.println("RFID Task gestartet");
|
||||
for(;;) {
|
||||
// Regular watchdog reset
|
||||
esp_task_wdt_reset();
|
||||
yield();
|
||||
|
||||
// Skip scanning during write operations, but keep NFC interface active
|
||||
if (nfcReaderState != NFC_WRITING && !nfcWriteInProgress && !nfcReadingTaskSuspendRequest && !booting)
|
||||
{
|
||||
@@ -1691,7 +1757,8 @@ void scanRfidTask(void * parameter) {
|
||||
uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 }; // Buffer to store the returned UID
|
||||
uint8_t uidLength;
|
||||
|
||||
success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength, 500);
|
||||
// Use safe tag detection instead of blocking readPassiveTargetID
|
||||
success = safeTagDetection(uid, &uidLength);
|
||||
|
||||
foundNfcTag(nullptr, success);
|
||||
|
||||
@@ -1708,9 +1775,9 @@ void scanRfidTask(void * parameter) {
|
||||
|
||||
oledShowProgressBar(0, octoEnabled?5:4, "Reading", "Detecting tag");
|
||||
|
||||
// Wait 1 second after tag detection to stabilize connection
|
||||
Serial.println("Tag detected, waiting 1 second for stabilization...");
|
||||
vTaskDelay(1000 / portTICK_PERIOD_MS);
|
||||
// Reduced stabilization time for better responsiveness
|
||||
Serial.println("Tag detected, minimal stabilization...");
|
||||
vTaskDelay(200 / portTICK_PERIOD_MS); // Reduced from 1000ms to 200ms
|
||||
|
||||
// create Tag UID string
|
||||
String uidString = "";
|
||||
@@ -1753,9 +1820,10 @@ void scanRfidTask(void * parameter) {
|
||||
|
||||
for (uint8_t i = 4; i < 4+numPages; i++) {
|
||||
|
||||
if (!nfc.ntag2xx_ReadPage(i, data+(i-4) * 4))
|
||||
if (!robustPageRead(i, data+(i-4) * 4))
|
||||
{
|
||||
break; // Stop if reading fails
|
||||
Serial.printf("Failed to read page %d after retries, stopping\n", i);
|
||||
break; // Stop if reading fails after retries
|
||||
}
|
||||
|
||||
// Check for NDEF message end
|
||||
@@ -1767,8 +1835,8 @@ void scanRfidTask(void * parameter) {
|
||||
|
||||
yield();
|
||||
esp_task_wdt_reset();
|
||||
// Increased delay to ensure stable reading
|
||||
vTaskDelay(pdMS_TO_TICKS(5)); // Increased from 1ms to 5ms
|
||||
// Reduced delay for faster reading
|
||||
vTaskDelay(pdMS_TO_TICKS(2)); // Reduced from 5ms to 2ms
|
||||
}
|
||||
|
||||
Serial.println("Tag reading completed, starting NDEF decode...");
|
||||
@@ -1815,10 +1883,13 @@ void scanRfidTask(void * parameter) {
|
||||
Serial.println("Tag nach erfolgreichem Lesen entfernt - bereit für nächsten Tag");
|
||||
}
|
||||
|
||||
// Add a longer pause after successful reading to prevent immediate re-reading
|
||||
// Add a pause after successful reading to prevent immediate re-reading
|
||||
if (nfcReaderState == NFC_READ_SUCCESS) {
|
||||
Serial.println("Tag erfolgreich gelesen - warte 5 Sekunden vor nächstem Scan");
|
||||
vTaskDelay(5000 / portTICK_PERIOD_MS); // 5 second pause
|
||||
Serial.println("Tag erfolgreich gelesen - warte 3 Sekunden vor nächstem Scan");
|
||||
vTaskDelay(3000 / portTICK_PERIOD_MS); // Reduced from 5 seconds to 3 seconds
|
||||
} else {
|
||||
// Faster scanning when no tag or idle state
|
||||
vTaskDelay(150 / portTICK_PERIOD_MS); // Faster scan interval
|
||||
}
|
||||
|
||||
// aktualisieren der Website wenn sich der Status ändert
|
||||
|
Reference in New Issue
Block a user