Compare commits
	
		
			22 Commits
		
	
	
		
			recyclingf
			...
			v2.0.0-bet
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 693ee839e5 | |||
| 0bf383ecd9 | |||
| 6451d91c59 | |||
| 8d82e221b5 | |||
| bf63ecd594 | |||
| 0daa3a148b | |||
| 602642c203 | |||
| 458bd2e67b | |||
| e6a5cb29a9 | |||
| 6502bb7185 | |||
| 63fafa2463 | |||
| f664e85933 | |||
| 7bf9868d79 | |||
| b9e488d675 | |||
| 2e3fc19741 | |||
| 4d84169b29 | |||
| 10aeb9bc52 | |||
| 00b9bc08af | |||
| dfe9e4dbe9 | |||
| 79eacae225 | |||
| d5d7358f58 | |||
| 9b362b3c73 | 
							
								
								
									
										632
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										632
									
								
								CHANGELOG.md
									
									
									
									
									
								
							| @@ -1,5 +1,637 @@ | |||||||
| # Changelog | # Changelog | ||||||
|  |  | ||||||
|  | ## [2.0.0-beta11] - 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 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 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-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 | ## [2.0.0-beta5] - 2025-08-30 | ||||||
| ### Changed | ### Changed | ||||||
| - update platformio.ini for beta version v2.0.0-beta5 | - update platformio.ini for beta version v2.0.0-beta5 | ||||||
|   | |||||||
| @@ -9,7 +9,7 @@ | |||||||
| ; https://docs.platformio.org/page/projectconf.html | ; https://docs.platformio.org/page/projectconf.html | ||||||
|  |  | ||||||
| [common] | [common] | ||||||
| version = "2.0.0-beta5" | version = "2.0.0-beta11" | ||||||
| to_old_version = "1.5.10" | to_old_version = "1.5.10" | ||||||
|  |  | ||||||
| ## | ## | ||||||
|   | |||||||
| @@ -14,17 +14,39 @@ def get_version(): | |||||||
|         return version_match.group(1) if version_match else None |         return version_match.group(1) if version_match else None | ||||||
|  |  | ||||||
| def get_last_tag(): | def get_last_tag(): | ||||||
|  |     """Get the last non-beta tag for changelog generation""" | ||||||
|     try: |     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) |                               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: |     except subprocess.CalledProcessError: | ||||||
|         return None |         return None | ||||||
|  |  | ||||||
| def categorize_commit(commit_msg): | def categorize_commit(commit_msg): | ||||||
|     """Categorize commit messages based on conventional commits""" |     """Categorize commit messages based on conventional commits""" | ||||||
|     lower_msg = commit_msg.lower() |     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' |         return 'Added' | ||||||
|     elif any(x in lower_msg for x in ['fix', 'bug']): |     elif any(x in lower_msg for x in ['fix', 'bug']): | ||||||
|         return 'Fixed' |         return 'Fixed' | ||||||
| @@ -34,6 +56,7 @@ def categorize_commit(commit_msg): | |||||||
| def get_changes_from_git(): | def get_changes_from_git(): | ||||||
|     """Get changes from git commits since last tag""" |     """Get changes from git commits since last tag""" | ||||||
|     changes = { |     changes = { | ||||||
|  |         'Breaking Changes': [], | ||||||
|         'Added': [], |         'Added': [], | ||||||
|         'Changed': [], |         'Changed': [], | ||||||
|         'Fixed': [] |         'Fixed': [] | ||||||
| @@ -55,7 +78,9 @@ def get_changes_from_git(): | |||||||
|             if commit: |             if commit: | ||||||
|                 category = categorize_commit(commit) |                 category = categorize_commit(commit) | ||||||
|                 # Clean up commit message |                 # 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) |                 changes[category].append(clean_msg) | ||||||
|                  |                  | ||||||
|     except subprocess.CalledProcessError: |     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) |     if(octoEnabled && sendOctoUpdate && spoolmanApiState == API_IDLE) | ||||||
|     { |     { | ||||||
|       updateSpoolOcto(autoSetToBambuSpoolId); |       updateSpoolOcto(autoSetToBambuSpoolId); | ||||||
|   | |||||||
							
								
								
									
										249
									
								
								src/nfc.cpp
									
									
									
									
									
								
							
							
						
						
									
										249
									
								
								src/nfc.cpp
									
									
									
									
									
								
							| @@ -108,6 +108,37 @@ bool formatNdefTag() { | |||||||
|   return buffer[2]*8; |   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() | String detectNtagType() | ||||||
| { | { | ||||||
|   // Read capability container from page 3 to determine exact NTAG type |   // Read capability container from page 3 to determine exact NTAG type | ||||||
| @@ -1268,6 +1299,61 @@ bool decodeNdefAndReturnJson(const byte* encodedMessage, String uidString) { | |||||||
|   return true; |   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) { | bool quickSpoolIdCheck(String uidString) { | ||||||
|     // Fast-path: Read NDEF structure to quickly locate and check JSON payload |     // Fast-path: Read NDEF structure to quickly locate and check JSON payload | ||||||
|     // This dramatically speeds up known spool recognition |     // This dramatically speeds up known spool recognition | ||||||
| @@ -1285,10 +1371,11 @@ bool quickSpoolIdCheck(String uidString) { | |||||||
|     memset(ndefData, 0, 20); |     memset(ndefData, 0, 20); | ||||||
|      |      | ||||||
|     for (uint8_t page = 4; page < 9; page++) { |     for (uint8_t page = 4; page < 9; page++) { | ||||||
|         if (!nfc.ntag2xx_ReadPage(page, ndefData + (page - 4) * 4)) { |         if (!robustPageRead(page, ndefData + (page - 4) * 4)) { | ||||||
|             Serial.print("Failed to read page "); |             Serial.print("FAST-PATH: Failed to read page "); | ||||||
|             Serial.println(page); |             Serial.print(page); | ||||||
|             return false; // Fall back to full read |             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); |         memset(extraData, 0, 16); | ||||||
|          |          | ||||||
|         for (uint8_t page = 9; page < 13; page++) { |         for (uint8_t page = 9; page < 13; page++) { | ||||||
|             if (!nfc.ntag2xx_ReadPage(page, extraData + (page - 9) * 4)) { |             if (!robustPageRead(page, extraData + (page - 9) * 4)) { | ||||||
|                 Serial.print("Failed to read additional page "); |                 Serial.print("FAST-PATH: Failed to read additional page "); | ||||||
|                 Serial.println(page); |                 Serial.print(page); | ||||||
|                 return false; |                 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; |                     activeSpoolId = quickSpoolId; | ||||||
|                     lastSpoolId = activeSpoolId; |                     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"); |                     oledShowProgressBar(2, octoEnabled?5:4, "Known Spool", "Quick mode"); | ||||||
|                     Serial.println("✓ FAST-PATH SUCCESS: Known spool processed quickly"); |                     Serial.println("✓ FAST-PATH SUCCESS: Known spool processed quickly"); | ||||||
|                     return true; |                     return true; | ||||||
| @@ -1450,6 +1546,14 @@ bool quickSpoolIdCheck(String uidString) { | |||||||
|                 activeSpoolId = quickSpoolId; |                 activeSpoolId = quickSpoolId; | ||||||
|                 lastSpoolId = activeSpoolId; |                 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"); |                 oledShowProgressBar(2, octoEnabled?5:4, "Known Spool", "Quick mode"); | ||||||
|                 Serial.println("✓ FAST-PATH SUCCESS: Known spool processed quickly"); |                 Serial.println("✓ FAST-PATH SUCCESS: Known spool processed quickly"); | ||||||
|                 return true; |                 return true; | ||||||
| @@ -1496,6 +1600,10 @@ void writeJsonToTag(void *parameter) { | |||||||
|   // aktualisieren der Website wenn sich der Status ändert |   // aktualisieren der Website wenn sich der Status ändert | ||||||
|   sendNfcData(); |   sendNfcData(); | ||||||
|   vTaskDelay(100 / portTICK_PERIOD_MS); |   vTaskDelay(100 / portTICK_PERIOD_MS); | ||||||
|  |    | ||||||
|  |   // Show waiting message for tag detection | ||||||
|  |   oledShowProgressBar(0, 1, "Write Tag", "Warte auf Tag"); | ||||||
|  |    | ||||||
|   // Wait 10sec for tag |   // Wait 10sec for tag | ||||||
|   uint8_t success = 0; |   uint8_t success = 0; | ||||||
|   String uidString = ""; |   String uidString = ""; | ||||||
| @@ -1655,10 +1763,60 @@ void writeJsonToTag(void *parameter) { | |||||||
|   vTaskDelete(NULL); |   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) { | 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(); |   NfcWriteParameterType* parameters = new NfcWriteParameterType(); | ||||||
|   parameters->tagType = isSpoolTag; |   parameters->tagType = isSpoolTag; | ||||||
|   parameters->payload = strdup(payload); |   parameters->payload = strdup(optimizedPayload.c_str()); // Use optimized payload | ||||||
|    |    | ||||||
|   // Task nicht mehrfach starten |   // Task nicht mehrfach starten | ||||||
|   if (nfcReaderState == NFC_IDLE || nfcReaderState == NFC_READ_ERROR || nfcReaderState == NFC_READ_SUCCESS) { |   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) { | void scanRfidTask(void * parameter) { | ||||||
|   Serial.println("RFID Task gestartet"); |   Serial.println("RFID Task gestartet"); | ||||||
|   for(;;) { |   for(;;) { | ||||||
|  |     // Regular watchdog reset | ||||||
|  |     esp_task_wdt_reset(); | ||||||
|  |     yield(); | ||||||
|  |      | ||||||
|     // Skip scanning during write operations, but keep NFC interface active |     // Skip scanning during write operations, but keep NFC interface active | ||||||
|     if (nfcReaderState != NFC_WRITING && !nfcWriteInProgress && !nfcReadingTaskSuspendRequest && !booting) |     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 uid[] = { 0, 0, 0, 0, 0, 0, 0 };  // Buffer to store the returned UID | ||||||
|       uint8_t uidLength; |       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); |       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 |       // As long as there is still a tag on the reader, do not try to read it again | ||||||
|       if (success && nfcReaderState == NFC_IDLE) |       if (success && nfcReaderState == NFC_IDLE) | ||||||
|       { |       { | ||||||
| @@ -1708,9 +1907,9 @@ void scanRfidTask(void * parameter) { | |||||||
|  |  | ||||||
|         oledShowProgressBar(0, octoEnabled?5:4, "Reading", "Detecting tag"); |         oledShowProgressBar(0, octoEnabled?5:4, "Reading", "Detecting tag"); | ||||||
|  |  | ||||||
|         // Wait 1 second after tag detection to stabilize connection |         // Reduced stabilization time for better responsiveness | ||||||
|         Serial.println("Tag detected, waiting 1 second for stabilization..."); |         Serial.println("Tag detected, minimal stabilization..."); | ||||||
|         vTaskDelay(1000 / portTICK_PERIOD_MS); |         vTaskDelay(200 / portTICK_PERIOD_MS); // Reduced from 1000ms to 200ms | ||||||
|  |  | ||||||
|         // create Tag UID string |         // create Tag UID string | ||||||
|         String uidString = ""; |         String uidString = ""; | ||||||
| @@ -1753,9 +1952,10 @@ void scanRfidTask(void * parameter) { | |||||||
|              |              | ||||||
|             for (uint8_t i = 4; i < 4+numPages; i++) { |             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 |               // Check for NDEF message end | ||||||
| @@ -1767,8 +1967,8 @@ void scanRfidTask(void * parameter) { | |||||||
|  |  | ||||||
|               yield(); |               yield(); | ||||||
|               esp_task_wdt_reset(); |               esp_task_wdt_reset(); | ||||||
|               // Increased delay to ensure stable reading |               // Reduced delay for faster reading | ||||||
|               vTaskDelay(pdMS_TO_TICKS(5)); // Increased from 1ms to 5ms |               vTaskDelay(pdMS_TO_TICKS(2)); // Reduced from 5ms to 2ms | ||||||
|             } |             } | ||||||
|              |              | ||||||
|             Serial.println("Tag reading completed, starting NDEF decode..."); |             Serial.println("Tag reading completed, starting NDEF decode..."); | ||||||
| @@ -1789,6 +1989,9 @@ void scanRfidTask(void * parameter) { | |||||||
|           { |           { | ||||||
|             oledShowProgressBar(1, 1, "Failure", "Tag read error"); |             oledShowProgressBar(1, 1, "Failure", "Tag read error"); | ||||||
|             nfcReaderState = NFC_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 |         else | ||||||
| @@ -1796,6 +1999,9 @@ void scanRfidTask(void * parameter) { | |||||||
|           //TBD: Show error here?! |           //TBD: Show error here?! | ||||||
|           oledShowProgressBar(1, 1, "Failure", "Unkown tag type"); |           oledShowProgressBar(1, 1, "Failure", "Unkown tag type"); | ||||||
|           Serial.println("This doesn't seem to be an NTAG2xx tag (UUID length != 7 bytes)!"); |           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"); |         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) { |       if (nfcReaderState == NFC_READ_SUCCESS) { | ||||||
|         Serial.println("Tag erfolgreich gelesen - warte 5 Sekunden vor nächstem Scan"); |         Serial.println("Tag erfolgreich gelesen - warte 3 Sekunden vor nächstem Scan"); | ||||||
|         vTaskDelay(5000 / portTICK_PERIOD_MS); // 5 second pause |         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 |       // aktualisieren der Website wenn sich der Status ändert | ||||||
|   | |||||||
| @@ -17,6 +17,7 @@ void startNfc(); | |||||||
| void scanRfidTask(void * parameter); | void scanRfidTask(void * parameter); | ||||||
| void startWriteJsonToTag(const bool isSpoolTag, const char* payload); | void startWriteJsonToTag(const bool isSpoolTag, const char* payload); | ||||||
| bool quickSpoolIdCheck(String uidString); | bool quickSpoolIdCheck(String uidString); | ||||||
|  | bool readCompleteJsonForFastPath(); // Read complete JSON data for fast-path web interface display | ||||||
|  |  | ||||||
| extern TaskHandle_t RfidReaderTask; | extern TaskHandle_t RfidReaderTask; | ||||||
| extern String nfcJsonData; | extern String nfcJsonData; | ||||||
|   | |||||||
							
								
								
									
										163
									
								
								src/scale.cpp
									
									
									
									
									
								
							
							
						
						
									
										163
									
								
								src/scale.cpp
									
									
									
									
									
								
							| @@ -13,6 +13,19 @@ TaskHandle_t ScaleTask; | |||||||
|  |  | ||||||
| int16_t weight = 0; | int16_t weight = 0; | ||||||
|  |  | ||||||
|  | // Weight stabilization variables | ||||||
|  | #define MOVING_AVERAGE_SIZE 20          // Number of samples for moving average | ||||||
|  | #define LOW_PASS_ALPHA 0.15f           // Low-pass filter coefficient (0.1-0.2 works well) | ||||||
|  | #define DISPLAY_THRESHOLD 0.5f         // Only update display if change > 0.5g | ||||||
|  | #define MEASUREMENT_INTERVAL_MS 50     // Measurement interval in milliseconds | ||||||
|  |  | ||||||
|  | float weightBuffer[MOVING_AVERAGE_SIZE]; | ||||||
|  | uint8_t bufferIndex = 0; | ||||||
|  | bool bufferFilled = false; | ||||||
|  | float filteredWeight = 0.0f; | ||||||
|  | int16_t lastDisplayedWeight = 0; | ||||||
|  | unsigned long lastMeasurementTime = 0; | ||||||
|  |  | ||||||
| uint8_t weigthCouterToApi = 0; | uint8_t weigthCouterToApi = 0; | ||||||
| uint8_t scale_tare_counter = 0; | uint8_t scale_tare_counter = 0; | ||||||
| bool scaleTareRequest = false; | bool scaleTareRequest = false; | ||||||
| @@ -21,6 +34,77 @@ bool scaleCalibrated; | |||||||
| bool autoTare = true; | bool autoTare = true; | ||||||
| bool scaleCalibrationActive = false; | bool scaleCalibrationActive = false; | ||||||
|  |  | ||||||
|  | // ##### Weight stabilization functions ##### | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * Reset weight filter buffer - call after tare or calibration | ||||||
|  |  */ | ||||||
|  | void resetWeightFilter() { | ||||||
|  |   bufferIndex = 0; | ||||||
|  |   bufferFilled = false; | ||||||
|  |   filteredWeight = 0.0f; | ||||||
|  |   lastDisplayedWeight = 0; | ||||||
|  |    | ||||||
|  |   // Initialize buffer with zeros | ||||||
|  |   for (int i = 0; i < MOVING_AVERAGE_SIZE; i++) { | ||||||
|  |     weightBuffer[i] = 0.0f; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * Calculate moving average from weight buffer | ||||||
|  |  */ | ||||||
|  | float calculateMovingAverage() { | ||||||
|  |   float sum = 0.0f; | ||||||
|  |   int count = bufferFilled ? MOVING_AVERAGE_SIZE : bufferIndex; | ||||||
|  |    | ||||||
|  |   for (int i = 0; i < count; i++) { | ||||||
|  |     sum += weightBuffer[i]; | ||||||
|  |   } | ||||||
|  |    | ||||||
|  |   return (count > 0) ? sum / count : 0.0f; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * Apply low-pass filter to smooth weight readings | ||||||
|  |  * Uses exponential smoothing: y_new = alpha * x_new + (1-alpha) * y_old | ||||||
|  |  */ | ||||||
|  | float applyLowPassFilter(float newValue) { | ||||||
|  |   filteredWeight = LOW_PASS_ALPHA * newValue + (1.0f - LOW_PASS_ALPHA) * filteredWeight; | ||||||
|  |   return filteredWeight; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * Process new weight reading with stabilization | ||||||
|  |  * Returns stabilized weight value | ||||||
|  |  */ | ||||||
|  | int16_t processWeightReading(float rawWeight) { | ||||||
|  |   // Add to moving average buffer | ||||||
|  |   weightBuffer[bufferIndex] = rawWeight; | ||||||
|  |   bufferIndex = (bufferIndex + 1) % MOVING_AVERAGE_SIZE; | ||||||
|  |    | ||||||
|  |   if (bufferIndex == 0) { | ||||||
|  |     bufferFilled = true; | ||||||
|  |   } | ||||||
|  |    | ||||||
|  |   // Calculate moving average | ||||||
|  |   float avgWeight = calculateMovingAverage(); | ||||||
|  |    | ||||||
|  |   // Apply low-pass filter | ||||||
|  |   float smoothedWeight = applyLowPassFilter(avgWeight); | ||||||
|  |    | ||||||
|  |   // Round to nearest gram | ||||||
|  |   int16_t newWeight = round(smoothedWeight); | ||||||
|  |    | ||||||
|  |   // Only update displayed weight if change is significant | ||||||
|  |   if (abs(newWeight - lastDisplayedWeight) >= DISPLAY_THRESHOLD) { | ||||||
|  |     lastDisplayedWeight = newWeight; | ||||||
|  |     return newWeight; | ||||||
|  |   } | ||||||
|  |    | ||||||
|  |   return weight; // Return current weight if change is too small | ||||||
|  | } | ||||||
|  |  | ||||||
| // ##### Funktionen für Waage ##### | // ##### Funktionen für Waage ##### | ||||||
| uint8_t setAutoTare(bool autoTareValue) { | uint8_t setAutoTare(bool autoTareValue) { | ||||||
|   Serial.print("Set AutoTare to "); |   Serial.print("Set AutoTare to "); | ||||||
| @@ -39,6 +123,7 @@ uint8_t setAutoTare(bool autoTareValue) { | |||||||
| uint8_t tareScale() { | uint8_t tareScale() { | ||||||
|   Serial.println("Tare scale"); |   Serial.println("Tare scale"); | ||||||
|   scale.tare(); |   scale.tare(); | ||||||
|  |   resetWeightFilter(); // Reset stabilization filter after tare | ||||||
|    |    | ||||||
|   return 1; |   return 1; | ||||||
| } | } | ||||||
| @@ -48,37 +133,63 @@ void scale_loop(void * parameter) { | |||||||
|   Serial.println("Scale Loop started"); |   Serial.println("Scale Loop started"); | ||||||
|   Serial.println("++++++++++++++++++++++++++++++"); |   Serial.println("++++++++++++++++++++++++++++++"); | ||||||
|  |  | ||||||
|  |   // Initialize weight filter | ||||||
|  |   resetWeightFilter(); | ||||||
|  |   lastMeasurementTime = millis(); | ||||||
|  |  | ||||||
|   for(;;) { |   for(;;) { | ||||||
|     if (scale.is_ready())  |     unsigned long currentTime = millis(); | ||||||
|     { |      | ||||||
|       // Waage automatisch Taren, wenn zu lange Abweichung |     // Only measure at defined intervals to reduce noise | ||||||
|       if (autoTare && scale_tare_counter >= 5)  |     if (currentTime - lastMeasurementTime >= MEASUREMENT_INTERVAL_MS) { | ||||||
|  |       if (scale.is_ready())  | ||||||
|       { |       { | ||||||
|         Serial.println("Auto Tare scale"); |         // Waage automatisch Taren, wenn zu lange Abweichung | ||||||
|         scale.tare(); |         if (autoTare && scale_tare_counter >= 5)  | ||||||
|         scale_tare_counter = 0; |         { | ||||||
|       } |           Serial.println("Auto Tare scale"); | ||||||
|  |           scale.tare(); | ||||||
|  |           resetWeightFilter(); // Reset filter after auto tare | ||||||
|  |           scale_tare_counter = 0; | ||||||
|  |         } | ||||||
|  |  | ||||||
|       // Waage manuell Taren |         // Waage manuell Taren | ||||||
|       if (scaleTareRequest == true)  |         if (scaleTareRequest == true)  | ||||||
|       { |         { | ||||||
|         Serial.println("Re-Tare scale"); |           Serial.println("Re-Tare scale"); | ||||||
|         oledShowMessage("TARE Scale"); |           oledShowMessage("TARE Scale"); | ||||||
|         vTaskDelay(pdMS_TO_TICKS(1000)); |           vTaskDelay(pdMS_TO_TICKS(1000)); | ||||||
|         scale.tare(); |           scale.tare(); | ||||||
|         vTaskDelay(pdMS_TO_TICKS(1000)); |           resetWeightFilter(); // Reset filter after manual tare | ||||||
|         oledShowWeight(0); |           vTaskDelay(pdMS_TO_TICKS(1000)); | ||||||
|         scaleTareRequest = false; |           oledShowWeight(0); | ||||||
|       } |           scaleTareRequest = false; | ||||||
|  |         } | ||||||
|  |  | ||||||
|       // Only update weight if median changed more than 1 |         // Get raw weight reading | ||||||
|       int16_t newWeight = round(scale.get_units()); |         float rawWeight = scale.get_units(); | ||||||
|       if(abs(weight-newWeight) > 1){ |          | ||||||
|         weight = newWeight; |         // Process weight with stabilization | ||||||
|  |         int16_t stabilizedWeight = processWeightReading(rawWeight); | ||||||
|  |          | ||||||
|  |         // Update global weight variable only if it changed | ||||||
|  |         if (stabilizedWeight != weight) { | ||||||
|  |           weight = stabilizedWeight; | ||||||
|  |            | ||||||
|  |           // Debug output for monitoring (can be removed in production) | ||||||
|  |           static unsigned long lastDebugTime = 0; | ||||||
|  |           if (currentTime - lastDebugTime > 1000) { // Print every second | ||||||
|  |             Serial.printf("Raw: %.2f, Filtered: %.2f, Final: %d\n",  | ||||||
|  |                          rawWeight, filteredWeight, weight); | ||||||
|  |             lastDebugTime = currentTime; | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         lastMeasurementTime = currentTime; | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|      |      | ||||||
|     vTaskDelay(pdMS_TO_TICKS(100)); |     vTaskDelay(pdMS_TO_TICKS(10)); // Shorter delay for more responsive loop | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -125,6 +236,9 @@ void start_scale(bool touchSensorConnected) { | |||||||
|   //vTaskDelay(pdMS_TO_TICKS(5000)); |   //vTaskDelay(pdMS_TO_TICKS(5000)); | ||||||
|   //scale.tare(); |   //scale.tare(); | ||||||
|  |  | ||||||
|  |   // Initialize weight stabilization filter | ||||||
|  |   resetWeightFilter(); | ||||||
|  |  | ||||||
|   // Display Gewicht |   // Display Gewicht | ||||||
|   oledShowWeight(0); |   oledShowWeight(0); | ||||||
|  |  | ||||||
| @@ -209,6 +323,7 @@ uint8_t calibrate_scale() { | |||||||
|       oledShowProgressBar(2, 3, "Scale Cal.", "Remove weight"); |       oledShowProgressBar(2, 3, "Scale Cal.", "Remove weight"); | ||||||
|  |  | ||||||
|       scale.set_scale(newCalibrationValue); |       scale.set_scale(newCalibrationValue); | ||||||
|  |       resetWeightFilter(); // Reset filter after calibration | ||||||
|       for (uint16_t i = 0; i < 2000; i++) { |       for (uint16_t i = 0; i < 2000; i++) { | ||||||
|         yield(); |         yield(); | ||||||
|         vTaskDelay(pdMS_TO_TICKS(1)); |         vTaskDelay(pdMS_TO_TICKS(1)); | ||||||
|   | |||||||
| @@ -9,6 +9,12 @@ uint8_t start_scale(bool touchSensorConnected); | |||||||
| uint8_t calibrate_scale(); | uint8_t calibrate_scale(); | ||||||
| uint8_t tareScale(); | uint8_t tareScale(); | ||||||
|  |  | ||||||
|  | // Weight stabilization functions | ||||||
|  | void resetWeightFilter(); | ||||||
|  | float calculateMovingAverage(); | ||||||
|  | float applyLowPassFilter(float newValue); | ||||||
|  | int16_t processWeightReading(float rawWeight); | ||||||
|  |  | ||||||
| extern HX711 scale; | extern HX711 scale; | ||||||
| extern int16_t weight; | extern int16_t weight; | ||||||
| extern uint8_t weigthCouterToApi; | extern uint8_t weigthCouterToApi; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user