Compare commits
	
		
			18 Commits
		
	
	
		
			recyclingf
			...
			v2.0.0-bet
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| bf63ecd594 | |||
| 0daa3a148b | |||
| 602642c203 | |||
| 458bd2e67b | |||
| e6a5cb29a9 | |||
| 6502bb7185 | |||
| 63fafa2463 | |||
| f664e85933 | |||
| 7bf9868d79 | |||
| b9e488d675 | |||
| 2e3fc19741 | |||
| 4d84169b29 | |||
| 10aeb9bc52 | |||
| 00b9bc08af | |||
| dfe9e4dbe9 | |||
| 79eacae225 | |||
| d5d7358f58 | |||
| 9b362b3c73 | 
							
								
								
									
										519
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										519
									
								
								CHANGELOG.md
									
									
									
									
									
								
							@@ -1,5 +1,524 @@
 | 
			
		||||
# Changelog
 | 
			
		||||
 | 
			
		||||
## [2.0.0-beta10] - 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
 | 
			
		||||
- 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-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-beta9] - 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
 | 
			
		||||
- 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-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-beta8] - 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 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-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-beta7] - 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
 | 
			
		||||
- 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-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-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-beta10"
 | 
			
		||||
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:
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										19
									
								
								src/main.cpp
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								src/main.cpp
									
									
									
									
									
								
							@@ -250,6 +250,25 @@ void loop() {
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Handle successful tag write: Send weight to Spoolman but NEVER auto-send to Bambu
 | 
			
		||||
    if (activeSpoolId != "" && weigthCouterToApi > 3 && weightSend == 0 && nfcReaderState == NFC_WRITE_SUCCESS && tagProcessed == false && spoolmanApiState == API_IDLE) 
 | 
			
		||||
    {
 | 
			
		||||
      // set the current tag as processed to prevent it beeing processed again
 | 
			
		||||
      tagProcessed = true;
 | 
			
		||||
 | 
			
		||||
      if (updateSpoolWeight(activeSpoolId, weight)) 
 | 
			
		||||
      {
 | 
			
		||||
        weightSend = 1;
 | 
			
		||||
        Serial.println("Tag written: Weight sent to Spoolman, but NO auto-send to Bambu");
 | 
			
		||||
        // INTENTIONALLY do NOT set autoSetToBambuSpoolId here to prevent Bambu auto-send
 | 
			
		||||
      }
 | 
			
		||||
      else
 | 
			
		||||
      {
 | 
			
		||||
        oledShowIcon("failed");
 | 
			
		||||
        vTaskDelay(2000 / portTICK_PERIOD_MS);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if(octoEnabled && sendOctoUpdate && spoolmanApiState == API_IDLE)
 | 
			
		||||
    {
 | 
			
		||||
      updateSpoolOcto(autoSetToBambuSpoolId);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										249
									
								
								src/nfc.cpp
									
									
									
									
									
								
							
							
						
						
									
										249
									
								
								src/nfc.cpp
									
									
									
									
									
								
							@@ -108,6 +108,37 @@ bool formatNdefTag() {
 | 
			
		||||
  return buffer[2]*8;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 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;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
String detectNtagType()
 | 
			
		||||
{
 | 
			
		||||
  // Read capability container from page 3 to determine exact NTAG type
 | 
			
		||||
@@ -1268,6 +1299,61 @@ bool decodeNdefAndReturnJson(const byte* encodedMessage, String uidString) {
 | 
			
		||||
  return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Read complete JSON data for fast-path to enable web interface display
 | 
			
		||||
bool readCompleteJsonForFastPath() {
 | 
			
		||||
    Serial.println("=== FAST-PATH: Reading complete JSON for web interface ===");
 | 
			
		||||
    
 | 
			
		||||
    // Read tag size first
 | 
			
		||||
    uint16_t tagSize = readTagSize();
 | 
			
		||||
    if (tagSize == 0) {
 | 
			
		||||
        Serial.println("FAST-PATH: Could not determine tag size");
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    // Create buffer for complete data
 | 
			
		||||
    uint8_t* data = (uint8_t*)malloc(tagSize);
 | 
			
		||||
    if (!data) {
 | 
			
		||||
        Serial.println("FAST-PATH: Could not allocate memory for complete read");
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
    memset(data, 0, tagSize);
 | 
			
		||||
    
 | 
			
		||||
    // Read all pages
 | 
			
		||||
    uint8_t numPages = tagSize / 4;
 | 
			
		||||
    for (uint8_t i = 4; i < 4 + numPages; i++) {
 | 
			
		||||
        if (!robustPageRead(i, data + (i - 4) * 4)) {
 | 
			
		||||
            Serial.printf("FAST-PATH: Failed to read page %d\n", i);
 | 
			
		||||
            free(data);
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        // Check for NDEF message end
 | 
			
		||||
        if (data[(i - 4) * 4] == 0xFE) {
 | 
			
		||||
            Serial.println("FAST-PATH: Found NDEF message end marker");
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        yield();
 | 
			
		||||
        esp_task_wdt_reset();
 | 
			
		||||
        vTaskDelay(pdMS_TO_TICKS(2));
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    // Decode NDEF and extract JSON
 | 
			
		||||
    bool success = decodeNdefAndReturnJson(data, ""); // Empty UID string for fast-path
 | 
			
		||||
    
 | 
			
		||||
    free(data);
 | 
			
		||||
    
 | 
			
		||||
    if (success) {
 | 
			
		||||
        Serial.println("✓ FAST-PATH: Complete JSON data successfully loaded");
 | 
			
		||||
        Serial.print("nfcJsonData length: ");
 | 
			
		||||
        Serial.println(nfcJsonData.length());
 | 
			
		||||
    } else {
 | 
			
		||||
        Serial.println("✗ FAST-PATH: Failed to decode complete JSON data");
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    return success;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool quickSpoolIdCheck(String uidString) {
 | 
			
		||||
    // Fast-path: Read NDEF structure to quickly locate and check JSON payload
 | 
			
		||||
    // This dramatically speeds up known spool recognition
 | 
			
		||||
@@ -1285,10 +1371,11 @@ bool quickSpoolIdCheck(String uidString) {
 | 
			
		||||
    memset(ndefData, 0, 20);
 | 
			
		||||
    
 | 
			
		||||
    for (uint8_t page = 4; page < 9; page++) {
 | 
			
		||||
        if (!nfc.ntag2xx_ReadPage(page, ndefData + (page - 4) * 4)) {
 | 
			
		||||
            Serial.print("Failed to read page ");
 | 
			
		||||
            Serial.println(page);
 | 
			
		||||
            return false; // Fall back to full read
 | 
			
		||||
        if (!robustPageRead(page, ndefData + (page - 4) * 4)) {
 | 
			
		||||
            Serial.print("FAST-PATH: Failed to read page ");
 | 
			
		||||
            Serial.print(page);
 | 
			
		||||
            Serial.println(" - falling back to full read");
 | 
			
		||||
            return false; // Fall back to full read if any page read fails
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
@@ -1358,10 +1445,11 @@ bool quickSpoolIdCheck(String uidString) {
 | 
			
		||||
        memset(extraData, 0, 16);
 | 
			
		||||
        
 | 
			
		||||
        for (uint8_t page = 9; page < 13; page++) {
 | 
			
		||||
            if (!nfc.ntag2xx_ReadPage(page, extraData + (page - 9) * 4)) {
 | 
			
		||||
                Serial.print("Failed to read additional page ");
 | 
			
		||||
                Serial.println(page);
 | 
			
		||||
                return false;
 | 
			
		||||
            if (!robustPageRead(page, extraData + (page - 9) * 4)) {
 | 
			
		||||
                Serial.print("FAST-PATH: Failed to read additional page ");
 | 
			
		||||
                Serial.print(page);
 | 
			
		||||
                Serial.println(" - falling back to full read");
 | 
			
		||||
                return false; // Fall back to full read if extended read fails
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
@@ -1403,6 +1491,14 @@ bool quickSpoolIdCheck(String uidString) {
 | 
			
		||||
                    activeSpoolId = quickSpoolId;
 | 
			
		||||
                    lastSpoolId = activeSpoolId;
 | 
			
		||||
                    
 | 
			
		||||
                    // Read complete JSON data for web interface display
 | 
			
		||||
                    Serial.println("FAST-PATH: Reading complete JSON data for web interface...");
 | 
			
		||||
                    if (readCompleteJsonForFastPath()) {
 | 
			
		||||
                        Serial.println("✓ FAST-PATH: Complete JSON data loaded for web interface");
 | 
			
		||||
                    } else {
 | 
			
		||||
                        Serial.println("⚠ FAST-PATH: Could not read complete JSON, web interface may show limited data");
 | 
			
		||||
                    }
 | 
			
		||||
                    
 | 
			
		||||
                    oledShowProgressBar(2, octoEnabled?5:4, "Known Spool", "Quick mode");
 | 
			
		||||
                    Serial.println("✓ FAST-PATH SUCCESS: Known spool processed quickly");
 | 
			
		||||
                    return true;
 | 
			
		||||
@@ -1450,6 +1546,14 @@ bool quickSpoolIdCheck(String uidString) {
 | 
			
		||||
                activeSpoolId = quickSpoolId;
 | 
			
		||||
                lastSpoolId = activeSpoolId;
 | 
			
		||||
                
 | 
			
		||||
                // Read complete JSON data for web interface display
 | 
			
		||||
                Serial.println("FAST-PATH: Reading complete JSON data for web interface...");
 | 
			
		||||
                if (readCompleteJsonForFastPath()) {
 | 
			
		||||
                    Serial.println("✓ FAST-PATH: Complete JSON data loaded for web interface");
 | 
			
		||||
                } else {
 | 
			
		||||
                    Serial.println("⚠ FAST-PATH: Could not read complete JSON, web interface may show limited data");
 | 
			
		||||
                }
 | 
			
		||||
                
 | 
			
		||||
                oledShowProgressBar(2, octoEnabled?5:4, "Known Spool", "Quick mode");
 | 
			
		||||
                Serial.println("✓ FAST-PATH SUCCESS: Known spool processed quickly");
 | 
			
		||||
                return true;
 | 
			
		||||
@@ -1496,6 +1600,10 @@ void writeJsonToTag(void *parameter) {
 | 
			
		||||
  // aktualisieren der Website wenn sich der Status ändert
 | 
			
		||||
  sendNfcData();
 | 
			
		||||
  vTaskDelay(100 / portTICK_PERIOD_MS);
 | 
			
		||||
  
 | 
			
		||||
  // Show waiting message for tag detection
 | 
			
		||||
  oledShowProgressBar(0, 1, "Write Tag", "Warte auf Tag");
 | 
			
		||||
  
 | 
			
		||||
  // Wait 10sec for tag
 | 
			
		||||
  uint8_t success = 0;
 | 
			
		||||
  String uidString = "";
 | 
			
		||||
@@ -1655,10 +1763,60 @@ void writeJsonToTag(void *parameter) {
 | 
			
		||||
  vTaskDelete(NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Ensures sm_id is always the first key in JSON for fast-path detection
 | 
			
		||||
String optimizeJsonForFastPath(const char* payload) {
 | 
			
		||||
    JsonDocument inputDoc;
 | 
			
		||||
    DeserializationError error = deserializeJson(inputDoc, payload);
 | 
			
		||||
    
 | 
			
		||||
    if (error) {
 | 
			
		||||
        Serial.print("JSON optimization failed: ");
 | 
			
		||||
        Serial.println(error.c_str());
 | 
			
		||||
        return String(payload); // Return original if parsing fails
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    // Create optimized JSON with sm_id first
 | 
			
		||||
    JsonDocument optimizedDoc;
 | 
			
		||||
    
 | 
			
		||||
    // Always add sm_id first (even if it's "0" for brand filaments)
 | 
			
		||||
    if (inputDoc["sm_id"].is<String>()) {
 | 
			
		||||
        optimizedDoc["sm_id"] = inputDoc["sm_id"].as<String>();
 | 
			
		||||
        Serial.print("Optimizing JSON: sm_id found = ");
 | 
			
		||||
        Serial.println(inputDoc["sm_id"].as<String>());
 | 
			
		||||
    } else {
 | 
			
		||||
        optimizedDoc["sm_id"] = "0"; // Default for brand filaments
 | 
			
		||||
        Serial.println("Optimizing JSON: No sm_id found, setting to '0'");
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    // Add all other keys in original order
 | 
			
		||||
    for (JsonPair kv : inputDoc.as<JsonObject>()) {
 | 
			
		||||
        String key = kv.key().c_str();
 | 
			
		||||
        if (key != "sm_id") { // Skip sm_id as it's already added first
 | 
			
		||||
            optimizedDoc[key] = kv.value();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    String optimizedJson;
 | 
			
		||||
    serializeJson(optimizedDoc, optimizedJson);
 | 
			
		||||
    
 | 
			
		||||
    Serial.println("JSON optimized for fast-path detection:");
 | 
			
		||||
    Serial.print("Original:  ");
 | 
			
		||||
    Serial.println(payload);
 | 
			
		||||
    Serial.print("Optimized: ");
 | 
			
		||||
    Serial.println(optimizedJson);
 | 
			
		||||
    
 | 
			
		||||
    inputDoc.clear();
 | 
			
		||||
    optimizedDoc.clear();
 | 
			
		||||
    
 | 
			
		||||
    return optimizedJson;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void startWriteJsonToTag(const bool isSpoolTag, const char* payload) {
 | 
			
		||||
  // Optimize JSON to ensure sm_id is first key for fast-path detection
 | 
			
		||||
  String optimizedPayload = optimizeJsonForFastPath(payload);
 | 
			
		||||
  
 | 
			
		||||
  NfcWriteParameterType* parameters = new NfcWriteParameterType();
 | 
			
		||||
  parameters->tagType = isSpoolTag;
 | 
			
		||||
  parameters->payload = strdup(payload);
 | 
			
		||||
  parameters->payload = strdup(optimizedPayload.c_str()); // Use optimized payload
 | 
			
		||||
  
 | 
			
		||||
  // Task nicht mehrfach starten
 | 
			
		||||
  if (nfcReaderState == NFC_IDLE || nfcReaderState == NFC_READ_ERROR || nfcReaderState == NFC_READ_SUCCESS) {
 | 
			
		||||
@@ -1678,9 +1836,44 @@ void startWriteJsonToTag(const bool isSpoolTag, const char* payload) {
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 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,10 +1884,16 @@ 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);
 | 
			
		||||
      
 | 
			
		||||
      // Reset activeSpoolId immediately when no tag is detected to prevent stale autoSet
 | 
			
		||||
      if (!success) {
 | 
			
		||||
        activeSpoolId = "";
 | 
			
		||||
      }
 | 
			
		||||
      
 | 
			
		||||
      // As long as there is still a tag on the reader, do not try to read it again
 | 
			
		||||
      if (success && nfcReaderState == NFC_IDLE)
 | 
			
		||||
      {
 | 
			
		||||
@@ -1708,9 +1907,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 +1952,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 +1967,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...");
 | 
			
		||||
@@ -1789,6 +1989,9 @@ void scanRfidTask(void * parameter) {
 | 
			
		||||
          {
 | 
			
		||||
            oledShowProgressBar(1, 1, "Failure", "Tag read error");
 | 
			
		||||
            nfcReaderState = NFC_READ_ERROR;
 | 
			
		||||
            // Reset activeSpoolId when tag reading fails to prevent autoSet
 | 
			
		||||
            activeSpoolId = "";
 | 
			
		||||
            Serial.println("Tag read failed - activeSpoolId reset to prevent autoSet");
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
@@ -1796,6 +1999,9 @@ void scanRfidTask(void * parameter) {
 | 
			
		||||
          //TBD: Show error here?!
 | 
			
		||||
          oledShowProgressBar(1, 1, "Failure", "Unkown tag type");
 | 
			
		||||
          Serial.println("This doesn't seem to be an NTAG2xx tag (UUID length != 7 bytes)!");
 | 
			
		||||
          // Reset activeSpoolId when tag type is unknown to prevent autoSet
 | 
			
		||||
          activeSpoolId = "";
 | 
			
		||||
          Serial.println("Unknown tag type - activeSpoolId reset to prevent autoSet");
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
@@ -1815,10 +2021,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
 | 
			
		||||
 
 | 
			
		||||
@@ -17,6 +17,7 @@ void startNfc();
 | 
			
		||||
void scanRfidTask(void * parameter);
 | 
			
		||||
void startWriteJsonToTag(const bool isSpoolTag, const char* payload);
 | 
			
		||||
bool quickSpoolIdCheck(String uidString);
 | 
			
		||||
bool readCompleteJsonForFastPath(); // Read complete JSON data for fast-path web interface display
 | 
			
		||||
 | 
			
		||||
extern TaskHandle_t RfidReaderTask;
 | 
			
		||||
extern String nfcJsonData;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user