Compare commits
	
		
			10 Commits
		
	
	
		
			v2.0.0-bet
			...
			7a15424bc7
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 7a15424bc7 | |||
| 039a29fa3c | |||
| 6cccf3d603 | |||
| 693ee839e5 | |||
| 0bf383ecd9 | |||
| 6451d91c59 | |||
| 8d82e221b5 | |||
| bf63ecd594 | |||
| 0daa3a148b | |||
| 602642c203 | 
							
								
								
									
										340
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										340
									
								
								CHANGELOG.md
									
									
									
									
									
								
							@@ -1,5 +1,345 @@
 | 
			
		||||
# Changelog
 | 
			
		||||
 | 
			
		||||
## [2.0.0-beta12] - 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 weight processing with filtered display and API stability checks
 | 
			
		||||
- implement weight stabilization functions and improve tare handling
 | 
			
		||||
- add fast-path JSON reading for web interface display
 | 
			
		||||
- add handling for successful NFC tag writes to send weight to Spoolman without auto-sending to Bambu
 | 
			
		||||
- implement robust page reading with error recovery for NFC tags
 | 
			
		||||
- enhance NFC tag reading with robust error recovery and JSON optimization for fast-path detection
 | 
			
		||||
- implement robust page reading and safe tag detection with error recovery
 | 
			
		||||
- add Manufacturer Tags support documentation in German and English
 | 
			
		||||
- add display delay for vendor, filament, and spool creation processes
 | 
			
		||||
- add progress bar updates for vendor and filament creation processes
 | 
			
		||||
- update vendor and filament ID handling to use NULL and add delays for stability
 | 
			
		||||
- add delay to ensure proper setting of vendor and filament IDs after API state changes
 | 
			
		||||
- enhance NDEF decoding with detailed validation and debugging output
 | 
			
		||||
- enhance NDEF decoding to validate structure and extract JSON payload
 | 
			
		||||
- add logging for decoded JSON data in NFC processing
 | 
			
		||||
- implement filament and spool creation in Spoolman API
 | 
			
		||||
- Add JSON structure comments for filament and spool creation
 | 
			
		||||
- Add vendor and filament management to API; implement recycling factory handling in NFC
 | 
			
		||||
 | 
			
		||||
### Changed
 | 
			
		||||
- update platformio.ini for beta version v2.0.0-beta12
 | 
			
		||||
- update changelog and header for version v2.0.0-beta11
 | 
			
		||||
- update changelog and header for version v2.0.0-beta11
 | 
			
		||||
- update platformio.ini for beta version v2.0.0-beta11
 | 
			
		||||
- update changelog and header for version v2.0.0-beta10
 | 
			
		||||
- update platformio.ini for beta version v2.0.0-beta10
 | 
			
		||||
- update changelog and header for version v2.0.0-beta9
 | 
			
		||||
- update platformio.ini for beta version v2.0.0-beta9
 | 
			
		||||
- update changelog and header for version v2.0.0-beta8
 | 
			
		||||
- update platformio.ini for beta version v2.0.0-beta8
 | 
			
		||||
- update changelog and header for version v2.0.0-beta7
 | 
			
		||||
- update platformio.ini for beta version v2.0.0-beta7
 | 
			
		||||
- update changelog and header for version v2.0.0-beta6
 | 
			
		||||
- update changelog and header for version v2.0.0-beta6
 | 
			
		||||
- update platformio.ini for beta version v2.0.0-beta6
 | 
			
		||||
- update changelog and header for version v2.0.0-beta5
 | 
			
		||||
- update platformio.ini for beta version v2.0.0-beta5
 | 
			
		||||
- update changelog and header for version v2.0.0-beta4
 | 
			
		||||
- update platformio.ini for beta version v2.0.0-beta4
 | 
			
		||||
- update changelog and header for version v2.0.0-beta3
 | 
			
		||||
- update platformio.ini for beta version v2.0.0-beta3
 | 
			
		||||
- update createVendor and checkVendor functions to accept JsonDocument payload
 | 
			
		||||
- update changelog and header for version v2.0.0-beta2
 | 
			
		||||
- update platformio.ini for beta version v2.0.0-beta2
 | 
			
		||||
- clarify product URL description for Manufacturer Tags in German and English documentation
 | 
			
		||||
- update changelog and header for version v2.0.0-beta1
 | 
			
		||||
- update platformio.ini for beta version v2.0.0-beta1
 | 
			
		||||
- update version to 2.0.0 in platformio.ini
 | 
			
		||||
- update changelog and header for version v1.5.12-beta18
 | 
			
		||||
- update platformio.ini for beta version v1.5.12-beta18
 | 
			
		||||
- update changelog and header for version v1.5.12-beta17
 | 
			
		||||
- update platformio.ini for beta version v1.5.12-beta17
 | 
			
		||||
- optimize page limit detection and remove redundant verification code
 | 
			
		||||
- update changelog and header for version v1.5.12-beta16
 | 
			
		||||
- update platformio.ini for beta version v1.5.12-beta16
 | 
			
		||||
- Refactor NFC interface handling and improve error diagnostics
 | 
			
		||||
- update changelog and header for version v1.5.12-beta15
 | 
			
		||||
- update platformio.ini for beta version v1.5.12-beta15
 | 
			
		||||
- enhance NFC write operation diagnostics and improve error handling
 | 
			
		||||
- enhance NFC write operation handling and prevent tag operations during write
 | 
			
		||||
- update changelog and header for version v1.5.12-beta14
 | 
			
		||||
- update platformio.ini for beta version v1.5.12-beta14
 | 
			
		||||
- optimize JSON payload structure and enhance NFC tag validation process
 | 
			
		||||
- update changelog and header for version v1.5.12-beta13
 | 
			
		||||
- update platformio.ini for beta version v1.5.12-beta13
 | 
			
		||||
- reorganize clearUserDataArea function for improved clarity and safety
 | 
			
		||||
- update changelog and header for version v1.5.12-beta12
 | 
			
		||||
- update platformio.ini for beta version v1.5.12-beta12
 | 
			
		||||
- update changelog and header for version v1.5.12-beta11
 | 
			
		||||
- update platformio.ini for beta version v1.5.12-beta11
 | 
			
		||||
- update changelog and header for version v1.5.12-beta10
 | 
			
		||||
- update platformio.ini for beta version v1.5.12-beta10
 | 
			
		||||
- streamline task creation in checkVendor and checkFilament functions
 | 
			
		||||
- update changelog and header for version v1.5.12-beta9
 | 
			
		||||
- update platformio.ini for beta version v1.5.12-beta9
 | 
			
		||||
- update changelog and header for version v1.5.12-beta8
 | 
			
		||||
- update platformio.ini for beta version v1.5.12-beta8
 | 
			
		||||
- update changelog and header for version v1.5.12-beta7
 | 
			
		||||
- update platformio.ini for beta version v1.5.12-beta7
 | 
			
		||||
- update changelog and header for version v1.5.12-beta6
 | 
			
		||||
- update platformio.ini for beta version v1.5.12-beta6
 | 
			
		||||
- improve task synchronization in vendor, filament, and spool creation functions
 | 
			
		||||
- update changelog and header for version v1.5.12-beta5
 | 
			
		||||
- update platformio.ini for beta version v1.5.12-beta5
 | 
			
		||||
- update changelog and header for version v1.5.12-beta4
 | 
			
		||||
- update platformio.ini for beta version v1.5.12-beta4
 | 
			
		||||
- update changelog and header for version v1.5.12-beta3
 | 
			
		||||
- update platformio.ini for beta version v1.5.12-beta3
 | 
			
		||||
- update changelog and header for version v1.5.12-beta2
 | 
			
		||||
- update platformio.ini for beta version v1.5.12-beta2
 | 
			
		||||
- update changelog and header for version v1.5.12-beta1
 | 
			
		||||
- update platformio.ini for beta version v1.5.12-beta1
 | 
			
		||||
- Merge branch 'main' into recyclingfabrik
 | 
			
		||||
- Merge branch 'main' into recyclingfabrik
 | 
			
		||||
 | 
			
		||||
### Fixed
 | 
			
		||||
- call scale.tare() in setup after starting scale
 | 
			
		||||
- update createVendor function to use external_id as comment instead of static text
 | 
			
		||||
- update to_old_version in platformio.ini to reflect correct previous version
 | 
			
		||||
- increase delay in start_scale function for improved stability
 | 
			
		||||
- replace progress bar with message display for remaining weight in sendToApi function
 | 
			
		||||
- update vendor check to use shorthand key in payload
 | 
			
		||||
- reset NFC state on API send failure to allow retry
 | 
			
		||||
- update createdFilamentId reset value to 65535 for better task handling
 | 
			
		||||
- update createdVendorId reset value to 65535 for improved API handling
 | 
			
		||||
- update spoolman ID reset values to 65535 for better API response detection
 | 
			
		||||
- correct color_hex key usage and comment out unused date fields in spool creation
 | 
			
		||||
- improve API state handling and vendor name formatting
 | 
			
		||||
- enhance filament creation logic to include dynamic comments based on payload
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## [2.0.0-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
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@
 | 
			
		||||
; https://docs.platformio.org/page/projectconf.html
 | 
			
		||||
 | 
			
		||||
[common]
 | 
			
		||||
version = "2.0.0-beta9"
 | 
			
		||||
version = "2.0.0-beta12"
 | 
			
		||||
to_old_version = "1.5.10"
 | 
			
		||||
 | 
			
		||||
##
 | 
			
		||||
 
 | 
			
		||||
@@ -178,9 +178,11 @@ void loop() {
 | 
			
		||||
    // Ausgabe der Waage auf Display
 | 
			
		||||
    if(pauseMainTask == 0)
 | 
			
		||||
    {
 | 
			
		||||
      // Use filtered weight for smooth display, but still check API weight for significant changes
 | 
			
		||||
      int16_t displayWeight = getFilteredDisplayWeight();
 | 
			
		||||
      if (mainTaskWasPaused || (weight != lastWeight && nfcReaderState == NFC_IDLE && (!bambuCredentials.autosend_enable || autoSetToBambuSpoolId == 0)))
 | 
			
		||||
      {
 | 
			
		||||
        (weight < 2) ? ((weight < -2) ? oledShowMessage("!! -0") : oledShowWeight(0)) : oledShowWeight(weight);
 | 
			
		||||
        (displayWeight < 2) ? ((displayWeight < -2) ? oledShowMessage("!! -0") : oledShowWeight(0)) : oledShowWeight(displayWeight);
 | 
			
		||||
      }
 | 
			
		||||
      mainTaskWasPaused = false;
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										75
									
								
								src/nfc.cpp
									
									
									
									
									
								
							
							
						
						
									
										75
									
								
								src/nfc.cpp
									
									
									
									
									
								
							@@ -1299,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
 | 
			
		||||
@@ -1436,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;
 | 
			
		||||
@@ -1483,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;
 | 
			
		||||
@@ -1529,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 = "";
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										185
									
								
								src/scale.cpp
									
									
									
									
									
								
							
							
						
						
									
										185
									
								
								src/scale.cpp
									
									
									
									
									
								
							@@ -13,6 +13,21 @@ TaskHandle_t ScaleTask;
 | 
			
		||||
 | 
			
		||||
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 API_THRESHOLD 2.0f             // Only trigger API actions if change > 2g
 | 
			
		||||
#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;
 | 
			
		||||
int16_t lastStableWeight = 0;        // For API/action triggering
 | 
			
		||||
unsigned long lastMeasurementTime = 0;
 | 
			
		||||
 | 
			
		||||
uint8_t weigthCouterToApi = 0;
 | 
			
		||||
uint8_t scale_tare_counter = 0;
 | 
			
		||||
bool scaleTareRequest = false;
 | 
			
		||||
@@ -21,6 +36,96 @@ bool scaleCalibrated;
 | 
			
		||||
bool autoTare = true;
 | 
			
		||||
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;
 | 
			
		||||
  lastStableWeight = 0;            // Reset stable weight for API actions
 | 
			
		||||
  
 | 
			
		||||
  // 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);
 | 
			
		||||
  
 | 
			
		||||
  // Update displayed weight if display threshold is reached
 | 
			
		||||
  if (abs(newWeight - lastDisplayedWeight) >= DISPLAY_THRESHOLD) {
 | 
			
		||||
    lastDisplayedWeight = newWeight;
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  // Update global weight for API actions only if stable threshold is reached
 | 
			
		||||
  int16_t weightToReturn = weight; // Default: keep current weight
 | 
			
		||||
  
 | 
			
		||||
  if (abs(newWeight - lastStableWeight) >= API_THRESHOLD) {
 | 
			
		||||
    lastStableWeight = newWeight;
 | 
			
		||||
    weightToReturn = newWeight;
 | 
			
		||||
    
 | 
			
		||||
    Serial.printf("Stable weight change detected: %d -> %d (diff: %d)\n", 
 | 
			
		||||
                 weight, newWeight, abs(newWeight - weight));
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  return weightToReturn;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Get current filtered weight for display purposes
 | 
			
		||||
 * This returns the smoothed weight even if it hasn't triggered API actions
 | 
			
		||||
 */
 | 
			
		||||
int16_t getFilteredDisplayWeight() {
 | 
			
		||||
  return lastDisplayedWeight;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ##### Funktionen für Waage #####
 | 
			
		||||
uint8_t setAutoTare(bool autoTareValue) {
 | 
			
		||||
  Serial.print("Set AutoTare to ");
 | 
			
		||||
@@ -39,6 +144,7 @@ uint8_t setAutoTare(bool autoTareValue) {
 | 
			
		||||
uint8_t tareScale() {
 | 
			
		||||
  Serial.println("Tare scale");
 | 
			
		||||
  scale.tare();
 | 
			
		||||
  resetWeightFilter(); // Reset stabilization filter after tare
 | 
			
		||||
  
 | 
			
		||||
  return 1;
 | 
			
		||||
}
 | 
			
		||||
@@ -48,37 +154,64 @@ void scale_loop(void * parameter) {
 | 
			
		||||
  Serial.println("Scale Loop started");
 | 
			
		||||
  Serial.println("++++++++++++++++++++++++++++++");
 | 
			
		||||
 | 
			
		||||
  // Initialize weight filter
 | 
			
		||||
  resetWeightFilter();
 | 
			
		||||
  lastMeasurementTime = millis();
 | 
			
		||||
 | 
			
		||||
  for(;;) {
 | 
			
		||||
    if (scale.is_ready()) 
 | 
			
		||||
    {
 | 
			
		||||
      // Waage automatisch Taren, wenn zu lange Abweichung
 | 
			
		||||
      if (autoTare && scale_tare_counter >= 5) 
 | 
			
		||||
    unsigned long currentTime = millis();
 | 
			
		||||
    
 | 
			
		||||
    // Only measure at defined intervals to reduce noise
 | 
			
		||||
    if (currentTime - lastMeasurementTime >= MEASUREMENT_INTERVAL_MS) {
 | 
			
		||||
      if (scale.is_ready()) 
 | 
			
		||||
      {
 | 
			
		||||
        Serial.println("Auto Tare scale");
 | 
			
		||||
        scale.tare();
 | 
			
		||||
        scale_tare_counter = 0;
 | 
			
		||||
      }
 | 
			
		||||
        // Waage automatisch Taren, wenn zu lange Abweichung
 | 
			
		||||
        if (autoTare && scale_tare_counter >= 5) 
 | 
			
		||||
        {
 | 
			
		||||
          Serial.println("Auto Tare scale");
 | 
			
		||||
          scale.tare();
 | 
			
		||||
          resetWeightFilter(); // Reset filter after auto tare
 | 
			
		||||
          scale_tare_counter = 0;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      // Waage manuell Taren
 | 
			
		||||
      if (scaleTareRequest == true) 
 | 
			
		||||
      {
 | 
			
		||||
        Serial.println("Re-Tare scale");
 | 
			
		||||
        oledShowMessage("TARE Scale");
 | 
			
		||||
        vTaskDelay(pdMS_TO_TICKS(1000));
 | 
			
		||||
        scale.tare();
 | 
			
		||||
        vTaskDelay(pdMS_TO_TICKS(1000));
 | 
			
		||||
        oledShowWeight(0);
 | 
			
		||||
        scaleTareRequest = false;
 | 
			
		||||
      }
 | 
			
		||||
        // Waage manuell Taren
 | 
			
		||||
        if (scaleTareRequest == true) 
 | 
			
		||||
        {
 | 
			
		||||
          Serial.println("Re-Tare scale");
 | 
			
		||||
          oledShowMessage("TARE Scale");
 | 
			
		||||
          vTaskDelay(pdMS_TO_TICKS(1000));
 | 
			
		||||
          scale.tare();
 | 
			
		||||
          resetWeightFilter(); // Reset filter after manual tare
 | 
			
		||||
          vTaskDelay(pdMS_TO_TICKS(1000));
 | 
			
		||||
          oledShowWeight(0);
 | 
			
		||||
          scaleTareRequest = false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      // Only update weight if median changed more than 1
 | 
			
		||||
      int16_t newWeight = round(scale.get_units());
 | 
			
		||||
      if(abs(weight-newWeight) > 1){
 | 
			
		||||
        weight = newWeight;
 | 
			
		||||
        // Get raw weight reading
 | 
			
		||||
        float rawWeight = scale.get_units();
 | 
			
		||||
        
 | 
			
		||||
        // Process weight with stabilization
 | 
			
		||||
        int16_t stabilizedWeight = processWeightReading(rawWeight);
 | 
			
		||||
        
 | 
			
		||||
        // Update global weight variable only if it changed significantly (for API actions)
 | 
			
		||||
        if (stabilizedWeight != weight) {
 | 
			
		||||
          weight = stabilizedWeight;
 | 
			
		||||
          Serial.printf("API weight updated: %d\n", weight);
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        // Debug output for monitoring (can be removed in production)
 | 
			
		||||
        static unsigned long lastDebugTime = 0;
 | 
			
		||||
        if (currentTime - lastDebugTime > 2000) { // Print every 2 seconds
 | 
			
		||||
          Serial.printf("Raw: %.2f, Filtered: %.2f, Display: %d, API: %d\n", 
 | 
			
		||||
                       rawWeight, filteredWeight, lastDisplayedWeight, weight);
 | 
			
		||||
          lastDebugTime = currentTime;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        lastMeasurementTime = currentTime;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    vTaskDelay(pdMS_TO_TICKS(100));
 | 
			
		||||
    vTaskDelay(pdMS_TO_TICKS(10)); // Shorter delay for more responsive loop
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -125,6 +258,9 @@ void start_scale(bool touchSensorConnected) {
 | 
			
		||||
  //vTaskDelay(pdMS_TO_TICKS(5000));
 | 
			
		||||
  //scale.tare();
 | 
			
		||||
 | 
			
		||||
  // Initialize weight stabilization filter
 | 
			
		||||
  resetWeightFilter();
 | 
			
		||||
 | 
			
		||||
  // Display Gewicht
 | 
			
		||||
  oledShowWeight(0);
 | 
			
		||||
 | 
			
		||||
@@ -209,6 +345,7 @@ uint8_t calibrate_scale() {
 | 
			
		||||
      oledShowProgressBar(2, 3, "Scale Cal.", "Remove weight");
 | 
			
		||||
 | 
			
		||||
      scale.set_scale(newCalibrationValue);
 | 
			
		||||
      resetWeightFilter(); // Reset filter after calibration
 | 
			
		||||
      for (uint16_t i = 0; i < 2000; i++) {
 | 
			
		||||
        yield();
 | 
			
		||||
        vTaskDelay(pdMS_TO_TICKS(1));
 | 
			
		||||
 
 | 
			
		||||
@@ -9,6 +9,13 @@ uint8_t start_scale(bool touchSensorConnected);
 | 
			
		||||
uint8_t calibrate_scale();
 | 
			
		||||
uint8_t tareScale();
 | 
			
		||||
 | 
			
		||||
// Weight stabilization functions
 | 
			
		||||
void resetWeightFilter();
 | 
			
		||||
float calculateMovingAverage();
 | 
			
		||||
float applyLowPassFilter(float newValue);
 | 
			
		||||
int16_t processWeightReading(float rawWeight);
 | 
			
		||||
int16_t getFilteredDisplayWeight();
 | 
			
		||||
 | 
			
		||||
extern HX711 scale;
 | 
			
		||||
extern int16_t weight;
 | 
			
		||||
extern uint8_t weigthCouterToApi;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user