Compare commits

..

208 Commits

Author SHA1 Message Date
5c2db22a90 docs: update changelog and header for version v1.5.11
All checks were successful
Release Workflow / detect-provider (push) Successful in 3s
Release Workflow / github-release (push) Has been skipped
Release Workflow / gitea-release (push) Successful in 3m2s
2025-08-27 17:46:13 +02:00
164c7b2af5 docs: update platformio.ini for version v1.5.11 2025-08-27 17:46:13 +02:00
cd1c93c485 docs: update changelog and header for version v1.5.10
All checks were successful
Release Workflow / detect-provider (push) Successful in 3s
Release Workflow / github-release (push) Has been skipped
Release Workflow / gitea-release (push) Successful in 3m5s
2025-08-27 17:40:41 +02:00
15219fa1e4 docs: update platformio.ini for version v1.5.10 2025-08-27 17:40:40 +02:00
206db69e6d Merge branch 'main' of https://gitlab.fire-devils.org/3D-Druck/Filaman 2025-08-27 17:30:12 +02:00
9e67af7343 fix: improve weight processing logic and add auto-send feature for Bambu spool ID 2025-08-27 17:21:29 +02:00
9e58b042c8 fix: improve weight processing logic and add auto-send feature for Bambu spool ID 2025-08-27 17:21:29 +02:00
55200d31cd Changed Amazon Link for PN532 2025-08-23 19:01:07 +02:00
65967ca047 Changed Amazon Link for PN532 2025-08-23 19:01:07 +02:00
86e5f7e48a docs: update changelog and header for version v1.5.9 2025-08-11 14:18:12 +02:00
e4d1ba6c1c docs: update changelog and header for version v1.5.9
All checks were successful
Release Workflow / detect-provider (push) Successful in 4s
Release Workflow / github-release (push) Has been skipped
Release Workflow / gitea-release (push) Successful in 3m31s
2025-08-11 14:18:12 +02:00
7ccdde8489 docs: update platformio.ini for version v1.5.9 2025-08-11 14:18:12 +02:00
88598611c5 docs: update platformio.ini for version v1.5.9 2025-08-11 14:18:12 +02:00
619979ab14 Enhance API to support weight updates after successful spool tag updates 2025-08-11 14:17:57 +02:00
377f4bc146 Enhance API to support weight updates after successful spool tag updates 2025-08-11 14:17:57 +02:00
174c48f734 docs: update changelog and header for version v1.5.8 2025-08-10 14:39:44 +02:00
7cbd34bc91 docs: update changelog and header for version v1.5.8
All checks were successful
Release Workflow / detect-provider (push) Successful in 52s
Release Workflow / github-release (push) Has been skipped
Release Workflow / gitea-release (push) Successful in 3m19s
2025-08-10 14:39:44 +02:00
fdeb6d5b61 docs: update platformio.ini for version v1.5.8 2025-08-10 14:39:44 +02:00
f7484f635e docs: update platformio.ini for version v1.5.8 2025-08-10 14:39:44 +02:00
fb7dca38f0 Merge pull request #45 from janecker/nfc_write_improvements
Nfc write improvements
2025-08-10 14:38:11 +02:00
90ce30215f Merge pull request #45 from janecker/nfc_write_improvements
Nfc write improvements
2025-08-10 14:38:11 +02:00
Jan Philipp Ecker
69ae5cab5f Adds a link to the spool in spoolman when reading a spool tag
Adds a link to the website that lets the user directly jump to the spool in spoolman that is currently scanned.
2025-08-08 18:14:26 +02:00
Jan Philipp Ecker
5fa93f2695 Adds a link to the spool in spoolman when reading a spool tag
Adds a link to the website that lets the user directly jump to the spool in spoolman that is currently scanned.
2025-08-08 18:14:26 +02:00
Jan Philipp Ecker
0e00fd8b91 Introduces periodic Spoolman Healthcheck
Introduces a spoolman healthcheck that is executed every 60 seconds. Also fixes a bug with the periodic wifi update.
2025-08-08 18:00:25 +02:00
Jan Philipp Ecker
4706152022 Introduces periodic Spoolman Healthcheck
Introduces a spoolman healthcheck that is executed every 60 seconds. Also fixes a bug with the periodic wifi update.
2025-08-08 18:00:25 +02:00
Jan Philipp Ecker
accb02ab80 Fixes issue that scale not calibrated message was not shown
There was no warning any more if the scale is not calibrated. This change fixes that.
2025-08-08 16:16:39 +02:00
Jan Philipp Ecker
5509d98969 Fixes issue that scale not calibrated message was not shown
There was no warning any more if the scale is not calibrated. This change fixes that.
2025-08-08 16:16:39 +02:00
Jan Philipp Ecker
d7ee52ba1f Improves init - NFC reading now only starts after boot is finished
NFC tags that are on the scale during startup will only be read after the boot sequence is finished.
2025-08-08 15:39:10 +02:00
Jan Philipp Ecker
a7c99d3f26 Improves init - NFC reading now only starts after boot is finished
NFC tags that are on the scale during startup will only be read after the boot sequence is finished.
2025-08-08 15:39:10 +02:00
Jan Philipp Ecker
0a02912e4a Improves NFC writing workaround and removes debug output
Improved version of the NFC writing workaround. The task is no longer suspended. There is now a suspend request and a suspend state variable that is used to communicate between the writing and the reading task. The reading is stopped gracefully to prevent resets during writing.
2025-08-08 15:33:08 +02:00
Jan Philipp Ecker
89a5728cc0 Improves NFC writing workaround and removes debug output
Improved version of the NFC writing workaround. The task is no longer suspended. There is now a suspend request and a suspend state variable that is used to communicate between the writing and the reading task. The reading is stopped gracefully to prevent resets during writing.
2025-08-08 15:33:08 +02:00
Jan Philipp Ecker
f133a1b321 Further improvements on NFC writing
Fixes some issues related to tag writing. Allos writing of tags that are already on the scale when pressing the write button, but introduces a confirmation dialog before doing so. Also first test to fix reset issue when trying to write tags.
2025-08-07 21:12:01 +02:00
Jan Philipp Ecker
b95497aec2 Further improvements on NFC writing
Fixes some issues related to tag writing. Allos writing of tags that are already on the scale when pressing the write button, but introduces a confirmation dialog before doing so. Also first test to fix reset issue when trying to write tags.
2025-08-07 21:12:01 +02:00
9a9ed175dd Merge pull request #44 from janecker/graphics_rework
Graphics rework
2025-08-06 08:27:24 +02:00
Jan Philipp Ecker
5b04c2eb80 Fixes types and some issues in the new graphics
Fixes further issues with the new graphics. Fixes some typos. Adds progress bar for upgrade process.
2025-08-05 19:43:05 +02:00
Jan Philipp Ecker
b94db80321 Fixes typos in upgrade page
Fixes names of binary files on the upgrade page.
2025-08-05 19:41:06 +02:00
Jan Philipp Ecker
d815733550 Graphic rework of the NFC writing process
Introduces the new graphics for the NFC writing process. Also fixes some minor display bugs. Hides the service status icons during boot time. Fixes bugs in NFC write process where mutliple parallel API calls a created. Fixes a bug where spoolman is updated if a location tag is written (which is not required or correct).
2025-08-05 17:44:59 +02:00
Jan Philipp Ecker
afef544c66 Reworks graphics of tag reading and some api fixes
Reworks the graphics of the NFC-Tag reading process of spool and location tags. Introduces progress bar for reading process. Also first re-work of the spoolman availability (not fixed completly yet). Also fixes an issue where the API request to spoolman and octoprint was sent in parallel. This now happens sequentially to reduce heap load.
2025-08-03 16:51:09 +02:00
Jan Philipp Ecker
6b6aec07b3 Remove unused parameter of sendNfcData()
Removes unused client parameter of the sendNfcData function.
2025-08-02 23:05:56 +02:00
Jan Philipp Ecker
852a2f4c69 Replaces usage of String with const char* in heap debug function
Replaces String with const char* in printHeapDebugData to reduce heap fragmentation.
2025-08-02 22:53:38 +02:00
Jan Philipp Ecker
4b81703e38 Reworks startup graphics and timings
Reworks the graphics during the startup. Introduces a progress bar to visualize how much of the boot is completed. Also changes the the optics of the bambu, spoolman and wifi icons. They are now always displayed but they will be striked out if not working and they will start blinking. Also removes some unnessesary waits.
2025-08-02 22:52:19 +02:00
7ba0c4f933 docs: update changelog and header for version v1.5.7 2025-07-28 09:51:55 +02:00
d0b793a300 docs: update platformio.ini for version v1.5.7 2025-07-28 09:51:55 +02:00
7c320a87fe refactor: clean up unused variables and improve .gitignore entries 2025-07-28 09:51:46 +02:00
0777b6371d docs: update changelog and header for version v1.5.6 2025-07-28 09:32:35 +02:00
fcdf91071c docs: update webpages for version v1.5.6 2025-07-28 09:32:35 +02:00
ffb1117150 docs: update platformio.ini for version v1.5.6 2025-07-28 09:32:30 +02:00
c317610229 Merge pull request #42 from janecker/configuration_nvs_storage
Changes configuration storage of spoolman and bambu values
2025-07-28 09:31:33 +02:00
73c3457f40 Merge branch 'main' into configuration_nvs_storage 2025-07-28 09:31:23 +02:00
cf62e12aa4 Merge pull request #41 from janecker/memory_leak_fixes
Memory leak fixes
2025-07-28 09:26:30 +02:00
Jan Philipp Ecker
b583ef71ad Changes configuration storage of spoolman and bambu values
Change that moves configuration values of spoolman and bambu credentials to use NVS storage. Also fixes some typos and missing translation.
2025-07-27 17:33:09 +02:00
Jan Philipp Ecker
b991f2ee27 Fixes compiler warnings in nfc
Replaces the depricated function call containsKey() with is<T>() of JsonDocument.
2025-07-26 22:52:10 +02:00
Jan Philipp Ecker
e2e0a23f0a Adds ENABLE_HEAP_DEBUGGING define as comment to the build flags
Adds the new ENABLE_HEAP_DEBUGGING define to the build falgs. The option is commented out, but it makes it easier to quickly enable it
2025-07-26 22:50:08 +02:00
Jan Philipp Ecker
537f452601 Adds data directory and further .vscode files to to .gitignore
Adds the whole data folder that is created during build of the project and further visual studio code related files to the .gitignore file.
2025-07-26 22:39:37 +02:00
Jan Philipp Ecker
faaffee391 Memory leak fixes in api and nfc, location tag fix
Fixes multiple potential memory leaks in API and NFC. Also fixes an issue in the new locaiton tag feature that could lead to multiple parallel API requests. This could cause memory leak issues but also result in wrong weights being registered for a spool.
2025-07-26 22:36:04 +02:00
Jan Philipp Ecker
d536181a73 Introduces new heap debugging feature and fixes some memory leaks in website feature
Introduces a new define HEAP_DEBUG_MESSAGE(location) that can be used to instrument the code to get heap information output on the Serial output. It can be enabled via the define ENABLE_HEAP_DEBUGGING. Also fixes some memory leaks in the website part of the project.
2025-07-26 22:14:58 +02:00
e38220739d docs: update changelog and header for version v1.5.5 2025-07-22 17:36:45 +02:00
fc48d6e67c docs: update platformio.ini for version v1.5.5 2025-07-22 17:36:45 +02:00
aeb61ba462 Merge pull request #40 from janecker/location_bambu_fix
Fixes some issues with the new location tags
2025-07-22 17:35:02 +02:00
Jan Philipp Ecker
7f25f3e14f Fixes some issues with the new location tags
Fixes an issue where the location dropdown is not visible if the Bambu integration is active. Adds support for the "NFC-Tag" view on the webpage, it now also shows info about the location tags. Revers a change that was not supposed to go into main where the amount of data written to the spool tag is reduced to only the sm_id.
2025-07-22 10:47:47 +02:00
150a178038 docs: update changelog and header for version v1.5.4 2025-07-22 06:36:16 +02:00
8b43f34a86 docs: update platformio.ini for version v1.5.4 2025-07-22 06:36:16 +02:00
7a85ce6a04 Merge branch 'main' of github.com:ManuelW77/Filaman 2025-07-22 06:35:13 +02:00
68fa1e77a1 Merge pull request #39 from janecker/location_tags
Adds new feature to write and read location tags
2025-07-22 06:32:44 +02:00
9c06fe6725 Merge pull request #38 from janecker/scale_debouncing
Adds slight debouncing to the scale loop weight logic
2025-07-22 06:32:31 +02:00
1cf392c1cd fix: uncomment monitor_port configuration in platformio.ini 2025-07-22 06:31:51 +02:00
Jan Philipp Ecker
69d6ba4bcb Adds new feature to write and read location tags
Location tags can be written via the website. If a location tag is read after reading a spool tag, the location of the spool will be updated in spoolman to the location from the tag.
2025-07-21 21:03:55 +02:00
Jan Philipp Ecker
21ec4e0ff3 Adds slight debouncing to the scale loop weight logic
Adds slight debouncing to the scale loop to prevent jitter of the
weight displayed on the screen.
2025-06-19 10:08:15 +02:00
c2a09b21a0 add loadcell desc. 2025-05-02 16:44:57 +02:00
0937a9e9f0 docs: update changelog and header for version v1.5.3 2025-04-25 15:52:56 +02:00
818b8387c0 docs: update platformio.ini for version v1.5.3 2025-04-25 15:52:56 +02:00
3f2beb6f54 fix: update spool weight conditionally based on NFC ID 2025-04-25 15:52:38 +02:00
56248ff2cb Affiliate Links 2025-04-25 09:41:02 +02:00
6a4945666e docs: update changelog and header for version v1.5.2 2025-04-23 17:47:40 +02:00
97d1519489 docs: update platformio.ini for version v1.5.2 2025-04-23 17:47:40 +02:00
f608c4a19b feat: implement multi-color filament display and styles for dropdown options 2025-04-23 17:47:02 +02:00
aa2eb91d64 fix: add remaining weight logging for PUT requests and improve error reporting in sendToApi function 2025-04-23 14:51:31 +02:00
35d2445c6c fix: add remaining weight logging and display after successful spool update 2025-04-23 11:33:07 +02:00
537607ed40 fix: update weight field in update payload to only include values greater than 10 2025-04-23 11:08:32 +02:00
7e330dca1a fix: add weight field to update payload in updateSpoolTagId function 2025-04-23 11:07:30 +02:00
d943d15c0a fix: increase stack size for sendToApi task to improve stability 2025-04-15 16:38:16 +02:00
a345b76cd2 fix: adjust tare weight tolerance to ignore deviations of 2g 2025-03-31 10:59:54 +02:00
836e48bde2 fix: improve weight stability check before sending to API 2025-03-31 10:08:26 +02:00
a6a8c69aee docs: update changelog and header for version v1.5.1 2025-03-30 16:38:38 +02:00
ddb4cd8e53 chore: update version to 1.5.1 and improve OTA update handling with task management 2025-03-30 16:38:23 +02:00
d45313a3ff docs: update changelog and header for version v1.4.14 2025-03-30 16:01:45 +02:00
70350e19f8 docs: update platformio.ini for version v1.4.14 2025-03-30 16:01:45 +02:00
7613effccf feat: add auto-tare functionality and update scale handling based on touch sensor connection 2025-03-30 16:01:17 +02:00
7280d5be7f docs: update changelog and header for version v1.4.13 2025-03-30 12:59:57 +02:00
ada4a84942 docs: update platformio.ini for version v1.4.13 2025-03-30 12:59:57 +02:00
e32aa6ec51 fix: update touch sensor connection logic to correctly identify connection status 2025-03-30 12:59:51 +02:00
04a18469b5 docs: update changelog and header for version v1.4.12 2025-03-30 12:55:33 +02:00
1c4d5f3874 docs: update platformio.ini for version v1.4.12 2025-03-30 12:55:33 +02:00
a2eb57cd7a fix: add touch sensor connection check and update logic 2025-03-30 12:55:26 +02:00
1c619c5bcb docs: update README files to clarify PN532 DIP switch settings 2025-03-30 12:35:50 +02:00
2e05651f88 docs: update changelog and header for version v1.4.11 2025-03-30 12:21:57 +02:00
f1b803a3c1 docs: update platformio.ini for version v1.4.11 2025-03-30 12:21:57 +02:00
5c4ba9f0ba Merge branch 'main' of github.com:ManuelW77/Filaman 2025-03-30 12:21:04 +02:00
19d70301f5 docs: update changelog and header for version v1.4.10 2025-03-30 12:19:25 +02:00
4fa21d3c0e docs: update platformio.ini for version v1.4.10 2025-03-30 12:19:25 +02:00
f22a01127c fix: update TTP223 pin configuration and adjust touch sensor logic 2025-03-30 12:19:07 +02:00
92d377713d fix: add manual tare functionality for scale 2025-03-29 14:44:33 +01:00
8732c81bb9 Merge pull request #31 from janecker/nfc_rework
Introducing enum for handling the NFC state to improve code readability
2025-03-29 14:25:20 +01:00
e7bbf45a9f fix: add debounce handling for TTP223 touch sensor 2025-03-29 14:23:55 +01:00
a8ce964add feat: add TTP223 touch sensor support and wiring configuration 2025-03-29 14:18:58 +01:00
Jan Philipp Ecker
69f01d1e57 Renamed states of NFC state machine and introduced new state machine for spoolman API 2025-03-29 13:21:47 +01:00
Jan Philipp Ecker
99231786a5 Introducing enum for handling the NFC state to improve code readability 2025-03-29 11:45:38 +01:00
8536b4f8fa docs: update changelog and header for version v1.4.9 2025-03-29 10:11:25 +01:00
c84c5fa734 docs: update platformio.ini for version v1.4.9 2025-03-29 10:11:25 +01:00
2a60e149b9 fix: enhance HTTP method handling in sendToApi function 2025-03-29 10:03:17 +01:00
7e486191b7 docs: update changelog and header for version v1.4.8 2025-03-29 07:58:12 +01:00
610479bc5a docs: update platformio.ini for version v1.4.8 2025-03-29 07:58:12 +01:00
b7fa53da7e Merge pull request #30 from janecker/main
Fix memory leak issue in HTTPClient
2025-03-29 07:55:45 +01:00
629b4276cf Merge branch 'testing' into main 2025-03-29 07:55:33 +01:00
cb15dae87e fix: improve HTTP client configuration and clear update documents after API calls 2025-03-29 07:52:49 +01:00
Jan Philipp Ecker
abed1c9806 Fixes memory leak in HTTPClient by disabling connection reuse 2025-03-28 22:40:50 +01:00
db1f33c2b6 fix: update reload logic after removing and saving Bambu credentials for better cache handling 2025-03-27 19:13:57 +01:00
174a58906c docs: update changelog and header for version v1.4.7 2025-03-27 18:54:33 +01:00
20cc9b196b docs: update platformio.ini for version v1.4.7 2025-03-27 18:54:33 +01:00
ff80b05502 Merge branch 'testing' 2025-03-27 18:54:15 +01:00
edfdef53f4 style: update remove button for Bambu credentials with red background 2025-03-27 18:07:33 +01:00
89a3fed7a9 feat: add forced cache refresh after removing and saving Bambu credentials 2025-03-27 18:03:40 +01:00
f44173824f feat: add functionality to remove Bambu credentials and update API handling 2025-03-27 18:01:15 +01:00
169d73bfc0 fix: handle Bambu connection state by introducing bambuDisabled flag 2025-03-27 11:18:04 +01:00
c78f36d21a feat: add rfid_bambu.html and update bambu connection handling 2025-03-27 10:35:10 +01:00
054bc43f65 Merge pull request #28 from tugsi/main
Fix rfid.js-Failure with X1-Series, if you wanna send a Spool to AMS
2025-03-26 11:54:41 +01:00
31c41576ee docs: update changelog and header for version v1.4.6 2025-03-26 11:52:46 +01:00
3a744bc1e6 docs: update platformio.ini for version v1.4.6 2025-03-26 11:52:46 +01:00
42f76fc20a fix: handle potential undefined value for tray_info_idx in handleSpoolIn function, by @tugsi 2025-03-26 11:51:58 +01:00
tugsi
124f326670 Fix rfid.js-Failure with X1-Series,
if you wanna send a Spool to AMS:
 - Uncaught TypeError: Cannot read properties of undefined (reading 'replace')
    at handleSpoolIn (rfid.js:493:67)
    at HTMLButtonElement.onclick ((Index):1:1)
handleSpoolIn	@	rfid.js:493
onclick	@	(Index):1
2025-03-25 17:40:55 +01:00
af34ce45dd docs: update changelog and header for version v1.4.5 2025-03-25 12:11:56 +01:00
c0cb3ff5c9 docs: update platformio.ini for version v1.4.5 2025-03-25 12:11:56 +01:00
4c754d84ff Merge branch 'testing' 2025-03-25 12:08:08 +01:00
d2c85018f5 refactor: remove unused request_topic subscription and reduce MQTT task stack size 2025-03-25 12:05:34 +01:00
8dac49ea9e fix: increase MQTT buffer size and adjust task stack size 2025-03-25 12:02:54 +01:00
5365c0e1b9 Merge pull request #26 from tugsi/main
Fix BufferSize for larger JSONs from X-Series
2025-03-25 12:01:57 +01:00
tugsi
4abe9d6d33 Fix BufferSize for larger JSONs from X-Series 2025-03-24 12:17:28 +01:00
e5d0334714 refactor: rename report_topic to topic and update MQTT subscription logic, switched publish topic to request 2025-03-23 18:01:53 +01:00
16364cbd86 docs: update changelog and header for version v1.4.4 2025-03-23 16:50:29 +01:00
1b63ab668f docs: update platformio.ini for version v1.4.4 2025-03-23 16:50:29 +01:00
f67ef8e905 fix: add error handling for missing vendor IDs in filament data 2025-03-23 16:28:13 +01:00
a490b77860 fix: adjust weight threshold for tare check to allow negative values 2025-03-23 15:03:37 +01:00
52d063b619 docs: update changelog and header for version v1.4.3 2025-03-23 11:38:57 +01:00
d5c005d6f7 docs: update platformio.ini for version v1.4.3 2025-03-23 11:38:57 +01:00
68866f1632 docs: update changelog and header for version v1.4.2 2025-03-23 11:25:52 +01:00
a4200e469d docs: update platformio.ini for version v1.4.2 2025-03-23 11:25:52 +01:00
e5e14dfc99 fix: use unique client ID for MQTT connection to avoid conflicts 2025-03-23 11:24:46 +01:00
863d591a17 fix: reload page after firmware update completion 2025-03-23 11:15:38 +01:00
69675f3c06 fix: increase WiFi connection timeout from 5 to 10 seconds 2025-03-23 11:05:10 +01:00
2ae3df1aab fix: ensure valid URL format and remove trailing slash in setupWebserver 2025-03-23 11:03:57 +01:00
3910da9fb5 fix: add WiFi connection check and restart Bambu if not connected 2025-03-23 11:03:51 +01:00
26d53929ac increase stack size for BambuMqtt task 2025-03-23 10:41:28 +01:00
64e3461264 update Discord Link 2025-03-15 16:02:18 +01:00
bc04db91b8 update Discord Link 2025-03-15 15:57:46 +01:00
f500f8bd11 remove commented-out subscription topic in MQTT setup 2025-03-10 17:41:14 +01:00
84391faffd docs: update changelog and header for version v1.4.1 2025-03-10 17:34:09 +01:00
aae93de7dd docs: update platformio.ini for version v1.4.1 2025-03-10 17:34:09 +01:00
0f847a2731 refactor length calculation to convert total length to meters before formatting 2025-03-10 17:33:47 +01:00
aa7fc7e64b Merge pull request #16 from spitzbirne32/main
Usermod for M3 heat inserts and AliExpress parts
2025-03-06 15:19:28 +01:00
spitzbirne32
e0f5f48cc4 improved housing to show display better 2025-03-06 12:16:10 +01:00
spitzbirne32
0b79891f83 added new .step, now with correct individual parts 2025-03-06 12:14:39 +01:00
spitzbirne32
11c5ca3383 removed CAD, as they were all duplicates 2025-03-06 12:13:25 +01:00
spitzbirne32
e3c3b3f42d typo in AliE link 2025-03-04 01:59:47 +01:00
spitzbirne32
8db7765e7e added changelog 2025-03-04 01:57:50 +01:00
spitzbirne32
dc97740ddc Delete usermod/spitzbirne32/STL/README.md 2025-03-04 01:48:02 +01:00
spitzbirne32
ababe8b842 Add files via upload 2025-03-04 01:43:50 +01:00
spitzbirne32
62bcbb2ae8 added .stp files of modifications 2025-03-04 01:43:20 +01:00
spitzbirne32
62330a3fd8 Update README.md 2025-03-04 01:40:33 +01:00
spitzbirne32
4556730c6e added merged picture 2025-03-04 01:33:01 +01:00
spitzbirne32
c92a8b0957 moved pictures of parts into dedicated folders 2025-03-04 01:26:41 +01:00
spitzbirne32
b08da071c2 added pictures of components bought from AliE 2025-03-04 01:21:18 +01:00
spitzbirne32
9c949e74e8 Update README.md 2025-03-04 01:17:12 +01:00
spitzbirne32
17fcf765fd Add files via upload 2025-03-04 01:06:07 +01:00
spitzbirne32
95a03f92e2 Update README.md 2025-03-04 01:05:35 +01:00
spitzbirne32
d9e69d8c14 Update README.md 2025-03-04 00:54:43 +01:00
spitzbirne32
1ec09ebf3a added pictures for heat insert location 2025-03-04 00:50:42 +01:00
spitzbirne32
7ef0cc44d5 Delete usermod/spitzbirne32/STL/ScaleTop_Heatinsert_Location_usermod_spitzbirne32_.png 2025-03-04 00:50:22 +01:00
spitzbirne32
fe962b2bfa Delete usermod/spitzbirne32/STL/Housing_Heatinsert_Location_usermod_spitzbirne32_.png 2025-03-04 00:50:14 +01:00
spitzbirne32
aec07f3c6d added pictures showing heat insert location 2025-03-04 00:49:31 +01:00
spitzbirne32
b5cb5b17ea created folders 2025-03-04 00:26:37 +01:00
spitzbirne32
c3e7758920 Update README.md 2025-03-04 00:16:01 +01:00
spitzbirne32
66395028a6 Update README.md 2025-03-04 00:15:10 +01:00
spitzbirne32
64403b9599 Create README.md 2025-03-04 00:11:54 +01:00
spitzbirne32
ebf6688701 Update README.md 2025-03-04 00:09:49 +01:00
spitzbirne32
073a5f4539 Update README.md 2025-03-04 00:05:21 +01:00
spitzbirne32
69bd5c3eb2 Create README.md 2025-03-03 22:08:45 +01:00
a328fbc6a6 Merge pull request #15 from ManuelW77/main
set to main state
2025-03-03 17:10:35 +01:00
6f52cd1686 Merge pull request #14 from janecker/scale-calibration-rework
Reworks the scale calibration handling
2025-03-03 17:08:06 +01:00
c1122ad87d refactor: remove unnecessary delay in MQTT setup and add delay before restart 2025-03-03 16:58:24 +01:00
Jan Philipp Ecker
1aeced76a2 Reworks the scale calibration handling
Fixes some issues in the scale handling. Prevents a wdg reset after
after scale calibration. Also makes sure that after calibration all
tasks are started again that have been suspsended before.
2025-03-03 16:50:46 +01:00
967ec35c6a fix: correct typo in console log for total length 2025-03-02 20:21:27 +01:00
f60113aa83 feat: add new 3D print file for Filaman scale 2025-03-02 08:06:59 +01:00
63a7398979 refactor: remove redundant scale calibration checks and enhance task management 2025-03-01 18:50:20 +01:00
40cb504251 refactor: enhance AMS data handling and streamline spool auto-setting logic 2025-03-01 18:44:35 +01:00
41a4f8af4a refactor: adjust stack size and improve scale calibration logic 2025-03-01 18:44:29 +01:00
e122224472 refactor: update labels and input types for better clarity and functionality 2025-03-01 18:44:17 +01:00
5d3a8d971f added Discord Server 2025-03-01 15:33:39 +01:00
e62e5e7062 update documentation for clarity and accuracy 2025-03-01 13:04:28 +01:00
726a60882d docs: update changelog and header for version v1.4.0 2025-03-01 12:46:18 +01:00
2918b4ca77 update NFC tag references to include NTAG213 and clarify storage capacity 2025-03-01 12:45:55 +01:00
955ba0f001 bump version to 1.4.0 2025-03-01 12:37:50 +01:00
8cf7dc0b77 add support for Spoolman Octoprint Plugin in README files 2025-03-01 12:33:26 +01:00
33e4b371ed add OctoPrint integration with configurable fields and update functionality 2025-03-01 12:18:33 +01:00
fd832d8808 add version comparison function and check for outdated versions before updates 2025-03-01 12:18:21 +01:00
c0e213a4ac remove unused version and protocol fields from JSON output; add error message for insufficient memory 2025-03-01 10:42:06 +01:00
bcc00f711b remove unused version and protocol fields from NFC data packet 2025-03-01 10:41:51 +01:00
78f336d5d7 sort vendors alphabetically in the dropdown list 2025-03-01 10:41:44 +01:00
ee7f8ff517 Merge pull request #10 from janecker/nfc-improvements
Improves NFC Tag handling
2025-03-01 10:03:46 +01:00
14 changed files with 743 additions and 711 deletions

1
.gitignore vendored
View File

@@ -32,6 +32,7 @@ test/README
data/*
!data/
!data/.gitkeep
# important
html/bambu_credentials.json
html/spoolman_url.json
_local/*

View File

@@ -1,5 +1,241 @@
# Changelog
## [1.5.11] - 2025-08-27
### Changed
- update platformio.ini for version v1.5.11
## [1.5.10] - 2025-08-27
### Added
- improve weight processing logic and add auto-send feature for Bambu spool ID
- improve weight processing logic and add auto-send feature for Bambu spool ID
- Adds a link to the spool in spoolman when reading a spool tag
- Fixes types and some issues in the new graphics
- Adds ENABLE_HEAP_DEBUGGING define as comment to the build flags
- Adds data directory and further .vscode files to to .gitignore
- Introduces new heap debugging feature and fixes some memory leaks in website feature
- Fixes some issues with the new location tags
- Adds new feature to write and read location tags
- Adds slight debouncing to the scale loop weight logic
- add loadcell desc.
- implement multi-color filament display and styles for dropdown options
- add remaining weight logging for PUT requests and improve error reporting in sendToApi function
- add remaining weight logging and display after successful spool update
- add weight field to update payload in updateSpoolTagId function
- add auto-tare functionality and update scale handling based on touch sensor connection
- add touch sensor connection check and update logic
- add manual tare functionality for scale
- add debounce handling for TTP223 touch sensor
- add TTP223 touch sensor support and wiring configuration
- Renamed states of NFC state machine and introduced new state machine for spoolman API
- add forced cache refresh after removing and saving Bambu credentials
- add functionality to remove Bambu credentials and update API handling
- add rfid_bambu.html and update bambu connection handling
- add error handling for missing vendor IDs in filament data
- add WiFi connection check and restart Bambu if not connected
- added new .step, now with correct individual parts
- added changelog
- Add files via upload
- added .stp files of modifications
- added merged picture
- added pictures of components bought from AliE
- Add files via upload
- added pictures for heat insert location
- added pictures showing heat insert location
- remove unnecessary delay in MQTT setup and add delay before restart
- add new 3D print file for Filaman scale
- added Discord Server
- add support for Spoolman Octoprint Plugin in README files
- add OctoPrint integration with configurable fields and update functionality
- add version comparison function and check for outdated versions before updates
- remove unused version and protocol fields from JSON output; add error message for insufficient memory
### Changed
- update platformio.ini for version v1.5.10
- Merge branch 'main' of https://gitlab.fire-devils.org/3D-Druck/Filaman
- Changed Amazon Link for PN532
- Changed Amazon Link for PN532
- update changelog and header for version v1.5.9
- update platformio.ini for version v1.5.9
- Enhance API to support weight updates after successful spool tag updates
- update changelog and header for version v1.5.8
- update platformio.ini for version v1.5.8
- Merge pull request #45 from janecker/nfc_write_improvements
- Introduces periodic Spoolman Healthcheck
- Improves init - NFC reading now only starts after boot is finished
- Further improvements on NFC writing
- Merge pull request #44 from janecker/graphics_rework
- Graphic rework of the NFC writing process
- Remove unused parameter of sendNfcData()
- Reworks startup graphics and timings
- update changelog and header for version v1.5.7
- update platformio.ini for version v1.5.7
- clean up unused variables and improve .gitignore entries
- update changelog and header for version v1.5.6
- update webpages for version v1.5.6
- update platformio.ini for version v1.5.6
- Merge pull request #42 from janecker/configuration_nvs_storage
- Merge branch 'main' into configuration_nvs_storage
- Changes configuration storage of spoolman and bambu values
- update changelog and header for version v1.5.5
- update platformio.ini for version v1.5.5
- update changelog and header for version v1.5.4
- update platformio.ini for version v1.5.4
- Merge branch 'main' of github.com:ManuelW77/Filaman
- Merge pull request #39 from janecker/location_tags
- Merge pull request #38 from janecker/scale_debouncing
- update changelog and header for version v1.5.3
- update platformio.ini for version v1.5.3
- Affiliate Links
- update changelog and header for version v1.5.2
- update platformio.ini for version v1.5.2
- update changelog and header for version v1.5.1
- update version to 1.5.1 and improve OTA update handling with task management
- update changelog and header for version v1.4.14
- update platformio.ini for version v1.4.14
- update changelog and header for version v1.4.13
- update platformio.ini for version v1.4.13
- update changelog and header for version v1.4.12
- update platformio.ini for version v1.4.12
- update README files to clarify PN532 DIP switch settings
- update changelog and header for version v1.4.11
- update platformio.ini for version v1.4.11
- Merge branch 'main' of github.com:ManuelW77/Filaman
- update changelog and header for version v1.4.10
- update platformio.ini for version v1.4.10
- Merge pull request #31 from janecker/nfc_rework
- Introducing enum for handling the NFC state to improve code readability
- update changelog and header for version v1.4.9
- update platformio.ini for version v1.4.9
- update changelog and header for version v1.4.8
- update platformio.ini for version v1.4.8
- Merge pull request #30 from janecker/main
- Merge branch 'testing' into main
- update changelog and header for version v1.4.7
- update platformio.ini for version v1.4.7
- Merge branch 'testing'
- update remove button for Bambu credentials with red background
- Merge pull request #28 from tugsi/main
- update changelog and header for version v1.4.6
- update platformio.ini for version v1.4.6
- update changelog and header for version v1.4.5
- update platformio.ini for version v1.4.5
- Merge branch 'testing'
- remove unused request_topic subscription and reduce MQTT task stack size
- Merge pull request #26 from tugsi/main
- rename report_topic to topic and update MQTT subscription logic, switched publish topic to request
- update changelog and header for version v1.4.4
- update platformio.ini for version v1.4.4
- update changelog and header for version v1.4.3
- update platformio.ini for version v1.4.3
- update changelog and header for version v1.4.2
- update platformio.ini for version v1.4.2
- increase stack size for BambuMqtt task
- update Discord Link
- update Discord Link
- remove commented-out subscription topic in MQTT setup
- update changelog and header for version v1.4.1
- update platformio.ini for version v1.4.1
- refactor length calculation to convert total length to meters before formatting
- Merge pull request #16 from spitzbirne32/main
- improved housing to show display better
- removed CAD, as they were all duplicates
- typo in AliE link
- Delete usermod/spitzbirne32/STL/README.md
- Update README.md
- moved pictures of parts into dedicated folders
- Update README.md
- Update README.md
- Update README.md
- Delete usermod/spitzbirne32/STL/ScaleTop_Heatinsert_Location_usermod_spitzbirne32_.png
- Delete usermod/spitzbirne32/STL/Housing_Heatinsert_Location_usermod_spitzbirne32_.png
- created folders
- Update README.md
- Update README.md
- Create README.md
- Update README.md
- Update README.md
- Create README.md
- Merge pull request #15 from ManuelW77/main
- Merge pull request #14 from janecker/scale-calibration-rework
- Reworks the scale calibration handling
- remove redundant scale calibration checks and enhance task management
- enhance AMS data handling and streamline spool auto-setting logic
- adjust stack size and improve scale calibration logic
- update labels and input types for better clarity and functionality
- update documentation for clarity and accuracy
- update changelog and header for version v1.4.0
- update NFC tag references to include NTAG213 and clarify storage capacity
- bump version to 1.4.0
- remove unused version and protocol fields from NFC data packet
- sort vendors alphabetically in the dropdown list
- Merge pull request #10 from janecker/nfc-improvements
### Fixed
- Fixes issue that scale not calibrated message was not shown
- Improves NFC writing workaround and removes debug output
- Fixes typos in upgrade page
- Reworks graphics of tag reading and some api fixes
- Replaces usage of String with const char* in heap debug function
- Merge pull request #41 from janecker/memory_leak_fixes
- Fixes compiler warnings in nfc
- Memory leak fixes in api and nfc, location tag fix
- Merge pull request #40 from janecker/location_bambu_fix
- uncomment monitor_port configuration in platformio.ini
- update spool weight conditionally based on NFC ID
- update weight field in update payload to only include values greater than 10
- increase stack size for sendToApi task to improve stability
- adjust tare weight tolerance to ignore deviations of 2g
- improve weight stability check before sending to API
- update touch sensor connection logic to correctly identify connection status
- update TTP223 pin configuration and adjust touch sensor logic
- enhance HTTP method handling in sendToApi function
- improve HTTP client configuration and clear update documents after API calls
- Fixes memory leak in HTTPClient by disabling connection reuse
- update reload logic after removing and saving Bambu credentials for better cache handling
- handle Bambu connection state by introducing bambuDisabled flag
- handle potential undefined value for tray_info_idx in handleSpoolIn function, by @tugsi
- Fix rfid.js-Failure with X1-Series, if you wanna send a Spool to AMS: - Uncaught TypeError: Cannot read properties of undefined (reading 'replace') at handleSpoolIn (rfid.js:493:67) at HTMLButtonElement.onclick ((Index):1:1) handleSpoolIn @ rfid.js:493 onclick @ (Index):1
- increase MQTT buffer size and adjust task stack size
- Fix BufferSize for larger JSONs from X-Series
- adjust weight threshold for tare check to allow negative values
- use unique client ID for MQTT connection to avoid conflicts
- reload page after firmware update completion
- increase WiFi connection timeout from 5 to 10 seconds
- ensure valid URL format and remove trailing slash in setupWebserver
- correct typo in console log for total length
## [1.5.9] - 2025-08-11
### Changed
- update platformio.ini for version v1.5.9
- Enhance API to support weight updates after successful spool tag updates
## [1.5.8] - 2025-08-10
### Added
- Adds a link to the spool in spoolman when reading a spool tag
- Fixes types and some issues in the new graphics
### Changed
- update platformio.ini for version v1.5.8
- Merge pull request #45 from janecker/nfc_write_improvements
- Introduces periodic Spoolman Healthcheck
- Improves init - NFC reading now only starts after boot is finished
- Further improvements on NFC writing
- Merge pull request #44 from janecker/graphics_rework
- Graphic rework of the NFC writing process
- Remove unused parameter of sendNfcData()
- Reworks startup graphics and timings
### Fixed
- Fixes issue that scale not calibrated message was not shown
- Improves NFC writing workaround and removes debug output
- Fixes typos in upgrade page
- Reworks graphics of tag reading and some api fixes
- Replaces usage of String with const char* in heap debug function
## [1.5.7] - 2025-07-28
### Changed
- update platformio.ini for version v1.5.7

View File

@@ -62,7 +62,7 @@ Discord Server: [https://discord.gg/my7Gvaxj2v](https://discord.gg/my7Gvaxj2v)
- **OLED 0.96 Zoll I2C white/yellow Display:** 128x64 SSD1306.
[Amazon Link](https://amzn.to/445aaa9)
- **PN532 NFC NXP RFID-Modul V3:** For NFC tag operations.
[Amazon Link](https://amzn.to/4iO6CO4)
[Amazon Link](https://amzn.eu/d/gy9vaBX)
- **NFC Tags NTAG213 NTAG215:** RFID Tag
[Amazon Link](https://amzn.to/3E071xO)
- **TTP223 Touch Sensor (optional):** For reTARE per Button/Touch

View File

@@ -66,7 +66,7 @@ Discord Server: [https://discord.gg/my7Gvaxj2v](https://discord.gg/my7Gvaxj2v)
- **OLED 0.96 Zoll I2C white/yellow Display:** 128x64 SSD1306.
[Amazon Link](https://amzn.to/445aaa9)
- **PN532 NFC NXP RFID-Modul V3:** For NFC tag operations.
[Amazon Link](https://amzn.to/4iO6CO4)
[Amazon Link](https://amzn.eu/d/gy9vaBX)
- **NFC Tags NTAG213 NTAG215:** RFID Tag
[Amazon Link](https://amzn.to/3E071xO)
- **TTP223 Touch Sensor (optional):** For reTARE per Button/Touch

View File

@@ -7,6 +7,7 @@ let heartbeatTimer = null;
let lastHeartbeatResponse = Date.now();
const HEARTBEAT_TIMEOUT = 20000;
let reconnectTimer = null;
let spoolDetected = false;
// WebSocket Funktionen
function startHeartbeat() {
@@ -508,12 +509,15 @@ function updateNfcStatusIndicator(data) {
if (data.found === 0) {
// Kein NFC Tag gefunden
indicator.className = 'status-circle';
spoolDetected = false;
} else if (data.found === 1) {
// NFC Tag erfolgreich gelesen
indicator.className = 'status-circle success';
spoolDetected = true;
} else {
// Fehler beim Lesen
indicator.className = 'status-circle error';
spoolDetected = true;
}
}
@@ -574,7 +578,7 @@ function updateNfcData(data) {
`;
// Spoolman ID anzeigen
html += `<p><strong>Spoolman ID:</strong> ${data.sm_id || 'No Spoolman ID'}</p>`;
html += `<p><strong>Spoolman ID:</strong> ${data.sm_id} (<a href="${spoolmanUrl}/spool/show/${data.sm_id}">Open in Spoolman</a>)</p>`;
}
else if(data.location)
{
@@ -618,78 +622,83 @@ function updateNfcData(data) {
}
function writeNfcTag() {
const selectedText = document.getElementById("selected-filament").textContent;
if (selectedText === "Please choose...") {
alert('Please select a Spool first.');
return;
}
if(!spoolDetected || confirm("Are you sure you want to overwrite the Tag?") == true){
const selectedText = document.getElementById("selected-filament").textContent;
if (selectedText === "Please choose...") {
alert('Please select a Spool first.');
return;
}
const spoolsData = window.getSpoolData();
const selectedSpool = spoolsData.find(spool =>
`${spool.id} | ${spool.filament.name} (${spool.filament.material})` === selectedText
);
const spoolsData = window.getSpoolData();
const selectedSpool = spoolsData.find(spool =>
`${spool.id} | ${spool.filament.name} (${spool.filament.material})` === selectedText
);
if (!selectedSpool) {
alert('Ausgewählte Spule konnte nicht gefunden werden.');
return;
}
if (!selectedSpool) {
alert('Ausgewählte Spule konnte nicht gefunden werden.');
return;
}
// Temperaturwerte korrekt extrahieren
let minTemp = "175";
let maxTemp = "275";
if (Array.isArray(selectedSpool.filament.nozzle_temperature) &&
selectedSpool.filament.nozzle_temperature.length >= 2) {
minTemp = String(selectedSpool.filament.nozzle_temperature[0]);
maxTemp = String(selectedSpool.filament.nozzle_temperature[1]);
}
// Temperaturwerte korrekt extrahieren
let minTemp = "175";
let maxTemp = "275";
if (Array.isArray(selectedSpool.filament.nozzle_temperature) &&
selectedSpool.filament.nozzle_temperature.length >= 2) {
minTemp = String(selectedSpool.filament.nozzle_temperature[0]);
maxTemp = String(selectedSpool.filament.nozzle_temperature[1]);
}
// Erstelle das NFC-Datenpaket mit korrekten Datentypen
const nfcData = {
color_hex: selectedSpool.filament.color_hex || "FFFFFF",
type: selectedSpool.filament.material,
min_temp: minTemp,
max_temp: maxTemp,
brand: selectedSpool.filament.vendor.name,
sm_id: String(selectedSpool.id) // Konvertiere zu String
};
// Erstelle das NFC-Datenpaket mit korrekten Datentypen
const nfcData = {
color_hex: selectedSpool.filament.color_hex || "FFFFFF",
type: selectedSpool.filament.material,
min_temp: minTemp,
max_temp: maxTemp,
brand: selectedSpool.filament.vendor.name,
sm_id: String(selectedSpool.id) // Konvertiere zu String
};
if (socket?.readyState === WebSocket.OPEN) {
const writeButton = document.getElementById("writeNfcButton");
writeButton.classList.add("writing");
writeButton.textContent = "Writing";
socket.send(JSON.stringify({
type: 'writeNfcTag',
tagType: 'spool',
payload: nfcData
}));
} else {
alert('Not connected to Server. Please check connection.');
if (socket?.readyState === WebSocket.OPEN) {
const writeButton = document.getElementById("writeNfcButton");
writeButton.classList.add("writing");
writeButton.textContent = "Writing";
socket.send(JSON.stringify({
type: 'writeNfcTag',
tagType: 'spool',
payload: nfcData
}));
} else {
alert('Not connected to Server. Please check connection.');
}
}
}
function writeLocationNfcTag() {
const selectedText = document.getElementById("locationSelect").value;
if (selectedText === "Please choose...") {
alert('Please select a location first.');
return;
}
// Erstelle das NFC-Datenpaket mit korrekten Datentypen
const nfcData = {
location: String(selectedText)
};
if(!spoolDetected || confirm("Are you sure you want to overwrite the Tag?") == true){
const selectedText = document.getElementById("locationSelect").value;
if (selectedText === "Please choose...") {
alert('Please select a location first.');
return;
}
// Erstelle das NFC-Datenpaket mit korrekten Datentypen
const nfcData = {
location: String(selectedText)
};
if (socket?.readyState === WebSocket.OPEN) {
const writeButton = document.getElementById("writeLocationNfcButton");
writeButton.classList.add("writing");
writeButton.textContent = "Writing";
socket.send(JSON.stringify({
type: 'writeNfcTag',
tagType: 'location',
payload: nfcData
}));
} else {
alert('Not connected to Server. Please check connection.');
if (socket?.readyState === WebSocket.OPEN) {
const writeButton = document.getElementById("writeLocationNfcButton");
writeButton.classList.add("writing");
writeButton.textContent = "Writing";
socket.send(JSON.stringify({
type: 'writeNfcTag',
tagType: 'location',
payload: nfcData
}));
} else {
alert('Not connected to Server. Please check connection.');
}
}
}

View File

@@ -9,7 +9,7 @@
; https://docs.platformio.org/page/projectconf.html
[common]
version = "1.5.7"
version = "1.5.11"
to_old_version = "1.5.0"
##

View File

@@ -4,8 +4,9 @@
#include "commonFS.h"
#include <Preferences.h>
#include "debug.h"
#include "scale.h"
volatile spoolmanApiStateType spoolmanApiState = API_INIT;
volatile spoolmanApiStateType spoolmanApiState = API_IDLE;
//bool spoolman_connected = false;
String spoolmanUrl = "";
bool octoEnabled = false;
@@ -13,10 +14,9 @@ bool sendOctoUpdate = false;
String octoUrl = "";
String octoToken = "";
uint16_t remainingWeight = 0;
uint16_t createdVendorId = 0; // Store ID of newly created vendor
uint16_t foundVendorId = 0; // Store ID of found vendor
uint16_t foundFilamentId = 0; // Store ID of found filament
bool spoolmanConnected = false;
bool spoolmanExtraFieldsChecked = false;
TaskHandle_t* apiTask;
struct SendToApiParams {
SpoolmanApiRequestType requestType;
@@ -24,6 +24,10 @@ struct SendToApiParams {
String spoolsUrl;
String updatePayload;
String octoToken;
// Weight update parameters for sequential execution
bool triggerWeightUpdate;
String spoolIdForWeight;
uint16_t weightValue;
};
JsonDocument fetchSingleSpoolInfo(int spoolId) {
@@ -97,15 +101,23 @@ JsonDocument fetchSingleSpoolInfo(int spoolId) {
void sendToApi(void *parameter) {
HEAP_DEBUG_MESSAGE("sendToApi begin");
// Wait until API is IDLE
while(spoolmanApiState != API_IDLE){
Serial.println("Waiting!");
yield();
}
spoolmanApiState = API_TRANSMITTING;
SendToApiParams* params = (SendToApiParams*)parameter;
// Extrahiere die Werte
// Extract values including weight update parameters
SpoolmanApiRequestType requestType = params->requestType;
String httpType = params->httpType;
String spoolsUrl = params->spoolsUrl;
String updatePayload = params->updatePayload;
String octoToken = params->octoToken;
String octoToken = params->octoToken;
bool triggerWeightUpdate = params->triggerWeightUpdate;
String spoolIdForWeight = params->spoolIdForWeight;
uint16_t weightValue = params->weightValue;
HTTPClient http;
http.setReuse(false);
@@ -117,7 +129,6 @@ void sendToApi(void *parameter) {
int httpCode;
if (httpType == "PATCH") httpCode = http.PATCH(updatePayload);
else if (httpType == "POST") httpCode = http.POST(updatePayload);
else if (httpType == "GET") httpCode = http.GET();
else httpCode = http.PUT(updatePayload);
if (httpCode == HTTP_CODE_OK) {
@@ -157,61 +168,60 @@ void sendToApi(void *parameter) {
oledShowProgressBar(5, 5, "Spool Tag", ("Done: " + String(remainingWeight) + " g remain").c_str());
remainingWeight = 0;
break;
case API_REQUEST_VENDOR_CREATE:
Serial.println("Vendor successfully created!");
createdVendorId = doc["id"].as<uint16_t>();
Serial.print("Created Vendor ID: ");
Serial.println(createdVendorId);
oledShowProgressBar(1, 1, "Vendor", "Created!");
break;
case API_REQUEST_VENDOR_CHECK:
if (doc.isNull() || doc.size() == 0) {
Serial.println("Vendor not found in response");
foundVendorId = 0;
} else {
foundVendorId = doc[0]["id"].as<uint16_t>();
Serial.print("Found Vendor ID: ");
Serial.println(foundVendorId);
}
break;
case API_REQUEST_FILAMENT_CHECK:
if (doc.isNull() || doc.size() == 0) {
Serial.println("Filament not found in response");
foundFilamentId = 0;
} else {
foundFilamentId = doc[0]["id"].as<uint16_t>();
Serial.print("Found Filament ID: ");
Serial.println(foundFilamentId);
}
break;
}
}
doc.clear();
} else if (httpCode == HTTP_CODE_CREATED) {
Serial.println("Spoolman erfolgreich erstellt");
// Parse response for created resources
String payload = http.getString();
JsonDocument doc;
DeserializationError error = deserializeJson(doc, payload);
if (error) {
Serial.print("Fehler beim Parsen der JSON-Antwort: ");
Serial.println(error.c_str());
} else {
switch(requestType){
case API_REQUEST_VENDOR_CREATE:
Serial.println("Vendor successfully created!");
createdVendorId = doc["id"].as<uint16_t>();
Serial.print("Created Vendor ID: ");
Serial.println(createdVendorId);
oledShowProgressBar(1, 1, "Vendor", "Created!");
break;
default:
// Handle other create operations if needed
break;
// Execute weight update if requested and tag update was successful
if (triggerWeightUpdate && requestType == API_REQUEST_SPOOL_TAG_ID_UPDATE && weightValue > 10) {
Serial.println("Executing weight update after successful tag update");
// Prepare weight update request
String weightUrl = spoolmanUrl + apiUrl + "/spool/" + spoolIdForWeight + "/measure";
JsonDocument weightDoc;
weightDoc["weight"] = weightValue;
String weightPayload;
serializeJson(weightDoc, weightPayload);
Serial.print("Weight update URL: ");
Serial.println(weightUrl);
Serial.print("Weight update payload: ");
Serial.println(weightPayload);
// Execute weight update
http.begin(weightUrl);
http.addHeader("Content-Type", "application/json");
int weightHttpCode = http.PUT(weightPayload);
if (weightHttpCode == HTTP_CODE_OK) {
Serial.println("Weight update successful");
String weightResponse = http.getString();
JsonDocument weightResponseDoc;
DeserializationError weightError = deserializeJson(weightResponseDoc, weightResponse);
if (!weightError) {
remainingWeight = weightResponseDoc["remaining_weight"].as<uint16_t>();
Serial.print("Updated weight: ");
Serial.println(remainingWeight);
if (!octoEnabled) {
oledShowProgressBar(1, 1, "Spool Tag", ("Done: " + String(remainingWeight) + " g remain").c_str());
remainingWeight = 0;
} else {
sendOctoUpdate = true;
}
}
weightResponseDoc.clear();
} else {
Serial.print("Weight update failed with HTTP code: ");
Serial.println(weightHttpCode);
oledShowProgressBar(1, 1, "Failure!", "Weight update");
}
weightDoc.clear();
}
doc.clear();
} else {
switch(requestType){
case API_REQUEST_SPOOL_WEIGHT_UPDATE:
@@ -225,9 +235,6 @@ void sendToApi(void *parameter) {
case API_REQUEST_BAMBU_UPDATE:
oledShowProgressBar(1, 1, "Failure!", "Bambu update");
break;
case API_REQUEST_VENDOR_CREATE:
oledShowProgressBar(1, 1, "Failure!", "Vendor create");
break;
}
Serial.println("Fehler beim Senden an Spoolman! HTTP Code: " + String(httpCode));
@@ -263,7 +270,8 @@ bool updateSpoolTagId(String uidString, const char* payload) {
return false;
}
String spoolsUrl = spoolmanUrl + apiUrl + "/spool/" + doc["sm_id"].as<String>();
String spoolId = doc["sm_id"].as<String>();
String spoolsUrl = spoolmanUrl + apiUrl + "/spool/" + spoolId;
Serial.print("Update Spule mit URL: ");
Serial.println(spoolsUrl);
@@ -287,22 +295,26 @@ bool updateSpoolTagId(String uidString, const char* payload) {
params->httpType = "PATCH";
params->spoolsUrl = spoolsUrl;
params->updatePayload = updatePayload;
// Add weight update parameters for sequential execution
params->triggerWeightUpdate = (weight > 10);
params->spoolIdForWeight = spoolId;
params->weightValue = weight;
// Erstelle die Task
// Erstelle die Task mit erhöhter Stackgröße für zusätzliche HTTP-Anfrage
BaseType_t result = xTaskCreate(
sendToApi, // Task-Funktion
"SendToApiTask", // Task-Name
6144, // Stackgröße in Bytes
8192, // Erhöhte Stackgröße für zusätzliche HTTP-Anfrage
(void*)params, // Parameter
0, // Priorität
NULL // Task-Handle (nicht benötigt)
apiTask // Task-Handle (nicht benötigt)
);
updateDoc.clear();
// Update Spool weight
//TBD: how to handle this with spool and locatin tags? Also potential parallel access again
//if (weight > 10) updateSpoolWeight(doc["sm_id"].as<String>(), weight);
// Update Spool weight now handled sequentially in sendToApi task
// to prevent parallel API access issues
return true;
}
@@ -341,7 +353,7 @@ uint8_t updateSpoolWeight(String spoolId, uint16_t weight) {
6144, // Stackgröße in Bytes
(void*)params, // Parameter
0, // Priorität
NULL // Task-Handle (nicht benötigt)
apiTask // Task-Handle (nicht benötigt)
);
updateDoc.clear();
@@ -378,17 +390,17 @@ uint8_t updateSpoolLocation(String spoolId, String location){
params->spoolsUrl = spoolsUrl;
params->updatePayload = updatePayload;
if(spoolmanApiState == API_IDLE){
// Erstelle die Task
BaseType_t result = xTaskCreate(
sendToApi, // Task-Funktion
"SendToApiTask", // Task-Name
6144, // Stackgröße in Bytes
(void*)params, // Parameter
0, // Priorität
NULL // Task-Handle (nicht benötigt)
);
if(apiTask == nullptr){
// Erstelle die Task
BaseType_t result = xTaskCreate(
sendToApi, // Task-Funktion
"SendToApiTask", // Task-Name
6144, // Stackgröße in Bytes
(void*)params, // Parameter
0, // Priorität
apiTask // Task-Handle
);
}else{
Serial.println("Not spawning new task, API still active!");
}
@@ -433,7 +445,7 @@ bool updateSpoolOcto(int spoolId) {
6144, // Stackgröße in Bytes
(void*)params, // Parameter
0, // Priorität
NULL // Task-Handle (nicht benötigt)
apiTask // Task-Handle (nicht benötigt)
);
updateDoc.clear();
@@ -486,438 +498,230 @@ bool updateSpoolBambuData(String payload) {
6144, // Stackgröße in Bytes
(void*)params, // Parameter
0, // Priorität
NULL // Task-Handle (nicht benötigt)
apiTask // Task-Handle (nicht benötigt)
);
return true;
}
// #### Filament Fabrik
uint16_t checkVendor(String vendor) {
// Check if vendor exists using task system
foundVendorId = 0; // Reset previous value
String spoolsUrl = spoolmanUrl + apiUrl + "/vendor?name=" + vendor;
Serial.print("Check vendor with URL: ");
Serial.println(spoolsUrl);
SendToApiParams* params = new SendToApiParams();
if (params == nullptr) {
Serial.println("Fehler: Kann Speicher für Task-Parameter nicht allokieren.");
return 0;
}
params->requestType = API_REQUEST_VENDOR_CHECK;
params->httpType = "GET";
params->spoolsUrl = spoolsUrl;
params->updatePayload = ""; // Empty for GET request
// Check if API is idle before creating task
if(spoolmanApiState == API_IDLE){
// Erstelle die Task
BaseType_t result = xTaskCreate(
sendToApi, // Task-Funktion
"SendToApiTask", // Task-Name
6144, // Stackgröße in Bytes
(void*)params, // Parameter
0, // Priorität
NULL // Task-Handle (nicht benötigt)
);
} else {
Serial.println("Not spawning new task, API still active!");
delete params;
return 0;
}
// Wait for task completion
while(spoolmanApiState != API_IDLE) {
vTaskDelay(100 / portTICK_PERIOD_MS);
}
// Check if vendor was found
if (foundVendorId == 0) {
Serial.println("Vendor not found, creating new vendor...");
uint16_t vendorId = createVendor(vendor);
if (vendorId == 0) {
Serial.println("Failed to create vendor, returning 0.");
return 0; // Failed to create vendor
} else {
Serial.println("Vendor created with ID: " + String(vendorId));
checkFilament(vendorId);
return vendorId;
}
} else {
Serial.println("Vendor found: " + vendor);
Serial.print("Vendor ID: ");
Serial.println(foundVendorId);
return foundVendorId;
}
}
uint16_t createVendor(String vendor) {
// Create new vendor in Spoolman database using task system
// Note: Due to async nature, the ID will be stored in createdVendorId global variable
createdVendorId = 0; // Reset previous value
String spoolsUrl = spoolmanUrl + apiUrl + "/vendor";
Serial.print("Create vendor with URL: ");
Serial.println(spoolsUrl);
// Create JSON payload for vendor creation
JsonDocument vendorDoc;
vendorDoc["name"] = vendor;
vendorDoc["comment"] = "automatically generated";
vendorDoc["empty_spool_weight"] = 180;
vendorDoc["external_id"] = vendor;
String vendorPayload;
serializeJson(vendorDoc, vendorPayload);
Serial.print("Vendor Payload: ");
Serial.println(vendorPayload);
SendToApiParams* params = new SendToApiParams();
if (params == nullptr) {
Serial.println("Fehler: Kann Speicher für Task-Parameter nicht allokieren.");
vendorDoc.clear();
return 0;
}
params->requestType = API_REQUEST_VENDOR_CREATE;
params->httpType = "POST";
params->spoolsUrl = spoolsUrl;
params->updatePayload = vendorPayload;
// Check if API is idle before creating task
if(spoolmanApiState == API_IDLE){
// Erstelle die Task
BaseType_t result = xTaskCreate(
sendToApi, // Task-Funktion
"SendToApiTask", // Task-Name
6144, // Stackgröße in Bytes
(void*)params, // Parameter
0, // Priorität
NULL // Task-Handle (nicht benötigt)
);
} else {
Serial.println("Not spawning new task, API still active!");
delete params;
vendorDoc.clear();
return 0;
}
vendorDoc.clear();
// Wait for task completion and return the created vendor ID
// Note: createdVendorId will be set by sendToApi when response is received
while(spoolmanApiState != API_IDLE) {
vTaskDelay(100 / portTICK_PERIOD_MS);
}
return createdVendorId;
}
uint16_t checkFilament(uint16_t vendorId) {
// Check if filament exists using task system
foundFilamentId = 0; // Reset previous value
String spoolsUrl = spoolmanUrl + apiUrl + "/filament?vendor.id=" + String(vendorId);
Serial.print("Check filament with URL: ");
Serial.println(spoolsUrl);
SendToApiParams* params = new SendToApiParams();
if (params == nullptr) {
Serial.println("Fehler: Kann Speicher für Task-Parameter nicht allokieren.");
return 0;
}
params->requestType = API_REQUEST_FILAMENT_CHECK;
params->httpType = "GET";
params->spoolsUrl = spoolsUrl;
params->updatePayload = ""; // Empty for GET request
// Check if API is idle before creating task
if(spoolmanApiState == API_IDLE){
// Erstelle die Task
BaseType_t result = xTaskCreate(
sendToApi, // Task-Funktion
"SendToApiTask", // Task-Name
6144, // Stackgröße in Bytes
(void*)params, // Parameter
0, // Priorität
NULL // Task-Handle (nicht benötigt)
);
} else {
Serial.println("Not spawning new task, API still active!");
delete params;
return 0;
}
// Wait for task completion
while(spoolmanApiState != API_IDLE) {
vTaskDelay(100 / portTICK_PERIOD_MS);
}
// Check if filament was found
if (foundFilamentId == 0) {
Serial.println("Filament not found, creating new filament...");
uint16_t filamentId = createFilament();
if (filamentId == 0) {
Serial.println("Failed to create filament, returning 0.");
return 0; // Failed to create filament
} else {
Serial.println("Filament created with ID: " + String(filamentId));
checkSpool();
return filamentId;
}
} else {
Serial.println("Filament found for vendor ID: " + String(vendorId));
Serial.print("Filament ID: ");
Serial.println(foundFilamentId);
return foundFilamentId;
}
}
bool createFilament() {
// {
// "name": "PolyTerra Charcoal Black",
// "vendor_id": 0,
// "material": "PLA",
// "price": 20,
// "density": 1.24,
// "diameter": 1.75,
// "weight": 1000,
// "spool_weight": 140,
// "article_number": "PM70820",
// "comment": "automatically generated",
// "settings_extruder_temp": 210,
// "settings_bed_temp": 60,
// "color_hex": "FF0000",
// "multi_color_hexes": "FF0000,00FF00,0000FF",
// "multi_color_direction": "coaxial",
// "external_id": "polymaker_pla_polysonicblack_1000_175",
// "extra": {
// "nozzle_temperature": "string"
// }
// }
}
uint16_t checkSpool() {
}
bool createSpool() {
// Implement specific handling for Spool creation
// {
// "first_used": "2019-08-24T14:15:22Z",
// "last_used": "2019-08-24T14:15:22Z",
// "filament_id": 0,
// "price": 20,
// "initial_weight": 200,
// "spool_weight": 200,
// "remaining_weight": 800,
// "used_weight": 200,
// "location": "Shelf A",
// "lot_nr": "52342",
// "comment": "",
// "archived": false,
// "extra": {
// "nfc_id": "string"
// }
// }
}
// #### Spoolman init
bool checkSpoolmanExtraFields() {
HTTPClient http;
String checkUrls[] = {
spoolmanUrl + apiUrl + "/field/spool",
spoolmanUrl + apiUrl + "/field/filament"
};
// Only check extra fields if they have not been checked before
if(!spoolmanExtraFieldsChecked){
HTTPClient http;
String checkUrls[] = {
spoolmanUrl + apiUrl + "/field/spool",
spoolmanUrl + apiUrl + "/field/filament"
};
String spoolExtra[] = {
"nfc_id"
};
String spoolExtra[] = {
"nfc_id"
};
String filamentExtra[] = {
"nozzle_temperature",
"price_meter",
"price_gramm",
"bambu_setting_id",
"bambu_cali_id",
"bambu_idx",
"bambu_k",
"bambu_flow_ratio",
"bambu_max_volspeed"
};
String filamentExtra[] = {
"nozzle_temperature",
"price_meter",
"price_gramm",
"bambu_setting_id",
"bambu_cali_id",
"bambu_idx",
"bambu_k",
"bambu_flow_ratio",
"bambu_max_volspeed"
};
String spoolExtraFields[] = {
"{\"name\": \"NFC ID\","
"\"key\": \"nfc_id\","
"\"field_type\": \"text\"}"
};
String spoolExtraFields[] = {
"{\"name\": \"NFC ID\","
"\"key\": \"nfc_id\","
"\"field_type\": \"text\"}"
};
String filamentExtraFields[] = {
"{\"name\": \"Nozzle Temp\","
"\"unit\": \"°C\","
"\"field_type\": \"integer_range\","
"\"default_value\": \"[190,230]\","
"\"key\": \"nozzle_temperature\"}",
String filamentExtraFields[] = {
"{\"name\": \"Nozzle Temp\","
"\"unit\": \"°C\","
"\"field_type\": \"integer_range\","
"\"default_value\": \"[190,230]\","
"\"key\": \"nozzle_temperature\"}",
"{\"name\": \"Price/m\","
"\"unit\": \"\","
"\"field_type\": \"float\","
"\"key\": \"price_meter\"}",
"{\"name\": \"Price/m\","
"\"unit\": \"\","
"\"field_type\": \"float\","
"\"key\": \"price_meter\"}",
"{\"name\": \"Price/g\","
"\"unit\": \"\","
"\"field_type\": \"float\","
"\"key\": \"price_gramm\"}",
"{\"name\": \"Bambu Setting ID\","
"\"field_type\": \"text\","
"\"key\": \"bambu_setting_id\"}",
"{\"name\": \"Bambu Cali ID\","
"\"field_type\": \"text\","
"\"key\": \"bambu_cali_id\"}",
"{\"name\": \"Bambu Filament IDX\","
"\"field_type\": \"text\","
"\"key\": \"bambu_idx\"}",
"{\"name\": \"Bambu k\","
"\"field_type\": \"float\","
"\"key\": \"bambu_k\"}",
"{\"name\": \"Bambu Flow Ratio\","
"\"field_type\": \"float\","
"\"key\": \"bambu_flow_ratio\"}",
"{\"name\": \"Bambu Max Vol. Speed\","
"\"unit\": \"mm3/s\","
"\"field_type\": \"integer\","
"\"default_value\": \"12\","
"\"key\": \"bambu_max_volspeed\"}"
};
Serial.println("Überprüfe Extrafelder...");
int urlLength = sizeof(checkUrls) / sizeof(checkUrls[0]);
for (uint8_t i = 0; i < urlLength; i++) {
Serial.println();
Serial.println("-------- Prüfe Felder für "+checkUrls[i]+" --------");
http.begin(checkUrls[i]);
int httpCode = http.GET();
"{\"name\": \"Price/g\","
"\"unit\": \"\","
"\"field_type\": \"float\","
"\"key\": \"price_gramm\"}",
if (httpCode == HTTP_CODE_OK) {
String payload = http.getString();
JsonDocument doc;
DeserializationError error = deserializeJson(doc, payload);
if (!error) {
String* extraFields;
String* extraFieldData;
u16_t extraLength;
"{\"name\": \"Bambu Setting ID\","
"\"field_type\": \"text\","
"\"key\": \"bambu_setting_id\"}",
"{\"name\": \"Bambu Cali ID\","
"\"field_type\": \"text\","
"\"key\": \"bambu_cali_id\"}",
"{\"name\": \"Bambu Filament IDX\","
"\"field_type\": \"text\","
"\"key\": \"bambu_idx\"}",
"{\"name\": \"Bambu k\","
"\"field_type\": \"float\","
"\"key\": \"bambu_k\"}",
"{\"name\": \"Bambu Flow Ratio\","
"\"field_type\": \"float\","
"\"key\": \"bambu_flow_ratio\"}",
"{\"name\": \"Bambu Max Vol. Speed\","
"\"unit\": \"mm3/s\","
"\"field_type\": \"integer\","
"\"default_value\": \"12\","
"\"key\": \"bambu_max_volspeed\"}"
};
Serial.println("Überprüfe Extrafelder...");
int urlLength = sizeof(checkUrls) / sizeof(checkUrls[0]);
for (uint8_t i = 0; i < urlLength; i++) {
Serial.println();
Serial.println("-------- Prüfe Felder für "+checkUrls[i]+" --------");
http.begin(checkUrls[i]);
int httpCode = http.GET();
if (httpCode == HTTP_CODE_OK) {
String payload = http.getString();
JsonDocument doc;
DeserializationError error = deserializeJson(doc, payload);
if (!error) {
String* extraFields;
String* extraFieldData;
u16_t extraLength;
if (i == 0) {
extraFields = spoolExtra;
extraFieldData = spoolExtraFields;
extraLength = sizeof(spoolExtra) / sizeof(spoolExtra[0]);
} else {
extraFields = filamentExtra;
extraFieldData = filamentExtraFields;
extraLength = sizeof(filamentExtra) / sizeof(filamentExtra[0]);
}
for (uint8_t s = 0; s < extraLength; s++) {
bool found = false;
for (JsonObject field : doc.as<JsonArray>()) {
if (field["key"].is<String>() && field["key"] == extraFields[s]) {
Serial.println("Feld gefunden: " + extraFields[s]);
found = true;
break;
}
if (i == 0) {
extraFields = spoolExtra;
extraFieldData = spoolExtraFields;
extraLength = sizeof(spoolExtra) / sizeof(spoolExtra[0]);
} else {
extraFields = filamentExtra;
extraFieldData = filamentExtraFields;
extraLength = sizeof(filamentExtra) / sizeof(filamentExtra[0]);
}
if (!found) {
Serial.println("Feld nicht gefunden: " + extraFields[s]);
// Extrafeld hinzufügen
http.begin(checkUrls[i] + "/" + extraFields[s]);
http.addHeader("Content-Type", "application/json");
int httpCode = http.POST(extraFieldData[s]);
for (uint8_t s = 0; s < extraLength; s++) {
bool found = false;
for (JsonObject field : doc.as<JsonArray>()) {
if (field["key"].is<String>() && field["key"] == extraFields[s]) {
Serial.println("Feld gefunden: " + extraFields[s]);
found = true;
break;
}
}
if (!found) {
Serial.println("Feld nicht gefunden: " + extraFields[s]);
if (httpCode > 0) {
// Antwortscode und -nachricht abrufen
String response = http.getString();
//Serial.println("HTTP-Code: " + String(httpCode));
//Serial.println("Antwort: " + response);
if (httpCode != HTTP_CODE_OK) {
// Extrafeld hinzufügen
http.begin(checkUrls[i] + "/" + extraFields[s]);
http.addHeader("Content-Type", "application/json");
int httpCode = http.POST(extraFieldData[s]);
if (httpCode > 0) {
// Antwortscode und -nachricht abrufen
String response = http.getString();
//Serial.println("HTTP-Code: " + String(httpCode));
//Serial.println("Antwort: " + response);
if (httpCode != HTTP_CODE_OK) {
return false;
}
} else {
// Fehler beim Senden der Anfrage
Serial.println("Fehler beim Senden der Anfrage: " + String(http.errorToString(httpCode)));
return false;
}
} else {
// Fehler beim Senden der Anfrage
Serial.println("Fehler beim Senden der Anfrage: " + String(http.errorToString(httpCode)));
return false;
//http.end();
}
//http.end();
yield();
vTaskDelay(100 / portTICK_PERIOD_MS);
}
yield();
vTaskDelay(100 / portTICK_PERIOD_MS);
}
doc.clear();
}
doc.clear();
}
Serial.println("-------- ENDE Prüfe Felder --------");
Serial.println();
http.end();
spoolmanExtraFieldsChecked = true;
return true;
}else{
return true;
}
Serial.println("-------- ENDE Prüfe Felder --------");
Serial.println();
http.end();
return true;
}
bool checkSpoolmanInstance(const String& url) {
bool checkSpoolmanInstance() {
HTTPClient http;
String healthUrl = url + apiUrl + "/health";
bool returnValue = false;
Serial.print("Überprüfe Spoolman-Instanz unter: ");
Serial.println(healthUrl);
// Only do the spoolman instance check if there is no active API request going on
if(spoolmanApiState == API_IDLE){
spoolmanApiState = API_TRANSMITTING;
String healthUrl = spoolmanUrl + apiUrl + "/health";
http.begin(healthUrl);
int httpCode = http.GET();
Serial.print("Checking spoolman instance: ");
Serial.println(healthUrl);
if (httpCode > 0) {
if (httpCode == HTTP_CODE_OK) {
String payload = http.getString();
JsonDocument doc;
DeserializationError error = deserializeJson(doc, payload);
if (!error && doc["status"].is<String>()) {
const char* status = doc["status"];
http.end();
http.begin(healthUrl);
int httpCode = http.GET();
if (!checkSpoolmanExtraFields()) {
Serial.println("Fehler beim Überprüfen der Extrafelder.");
if (httpCode > 0) {
if (httpCode == HTTP_CODE_OK) {
String payload = http.getString();
JsonDocument doc;
DeserializationError error = deserializeJson(doc, payload);
if (!error && doc["status"].is<String>()) {
const char* status = doc["status"];
http.end();
// TBD
oledShowMessage("Spoolman Error creating Extrafields");
vTaskDelay(2000 / portTICK_PERIOD_MS);
return false;
if (!checkSpoolmanExtraFields()) {
Serial.println("Fehler beim Überprüfen der Extrafelder.");
// TBD
oledShowMessage("Spoolman Error creating Extrafields");
vTaskDelay(2000 / portTICK_PERIOD_MS);
return false;
}
spoolmanApiState = API_IDLE;
oledShowTopRow();
spoolmanConnected = true;
returnValue = strcmp(status, "healthy") == 0;
}else{
spoolmanConnected = false;
}
spoolmanApiState = API_IDLE;
oledShowTopRow();
spoolmanConnected = true;
return strcmp(status, "healthy") == 0;
doc.clear();
}else{
spoolmanConnected = false;
}
doc.clear();
} else {
spoolmanConnected = false;
Serial.println("Error contacting spoolman instance! HTTP Code: " + String(httpCode));
}
} else {
Serial.println("Error contacting spoolman instance! HTTP Code: " + String(httpCode));
http.end();
returnValue = false;
spoolmanApiState = API_IDLE;
}else{
// If the check is skipped, return the previous status
Serial.println("Skipping spoolman healthcheck, API is active.");
returnValue = spoolmanConnected;
}
http.end();
return false;
Serial.println("Healthcheck completed!");
return returnValue;
}
bool saveSpoolmanUrl(const String& url, bool octoOn, const String& octo_url, const String& octoTk) {
@@ -930,12 +734,13 @@ bool saveSpoolmanUrl(const String& url, bool octoOn, const String& octo_url, con
preferences.end();
//TBD: This could be handled nicer in the future
spoolmanExtraFieldsChecked = false;
spoolmanUrl = url;
octoEnabled = octoOn;
octoUrl = octo_url;
octoToken = octoTk;
return true;
return checkSpoolmanInstance();
}
String loadSpoolmanUrl() {
@@ -955,15 +760,10 @@ String loadSpoolmanUrl() {
bool initSpoolman() {
oledShowProgressBar(3, 7, DISPLAY_BOOT_TEXT, "Spoolman init");
spoolmanUrl = loadSpoolmanUrl();
spoolmanUrl.trim();
if (spoolmanUrl == "") {
Serial.println("Keine Spoolman-URL gefunden.");
return false;
}
bool success = checkSpoolmanInstance(spoolmanUrl);
bool success = checkSpoolmanInstance();
if (!success) {
Serial.println("Spoolman nicht erreichbar.");
Serial.println("Spoolman not available");
return false;
}

View File

@@ -17,10 +17,7 @@ typedef enum {
API_REQUEST_BAMBU_UPDATE,
API_REQUEST_SPOOL_TAG_ID_UPDATE,
API_REQUEST_SPOOL_WEIGHT_UPDATE,
API_REQUEST_SPOOL_LOCATION_UPDATE,
API_REQUEST_VENDOR_CREATE,
API_REQUEST_VENDOR_CHECK,
API_REQUEST_FILAMENT_CHECK
API_REQUEST_SPOOL_LOCATION_UPDATE
} SpoolmanApiRequestType;
extern volatile spoolmanApiStateType spoolmanApiState;
@@ -30,12 +27,9 @@ extern bool octoEnabled;
extern bool sendOctoUpdate;
extern String octoUrl;
extern String octoToken;
extern uint16_t createdVendorId; // ID of newly created vendor
extern uint16_t foundVendorId; // ID of found vendor
extern uint16_t foundFilamentId; // ID of found filament
extern bool spoolmanConnected;
bool checkSpoolmanInstance(const String& url);
bool checkSpoolmanInstance();
bool saveSpoolmanUrl(const String& url, bool octoOn, const String& octoWh, const String& octoTk);
String loadSpoolmanUrl(); // Neue Funktion zum Laden der URL
bool checkSpoolmanExtraFields(); // Neue Funktion zum Überprüfen der Extrafelder
@@ -46,12 +40,5 @@ uint8_t updateSpoolLocation(String spoolId, String location);
bool initSpoolman(); // Neue Funktion zum Initialisieren von Spoolman
bool updateSpoolBambuData(String payload); // Neue Funktion zum Aktualisieren der Bambu-Daten
bool updateSpoolOcto(int spoolId); // Neue Funktion zum Aktualisieren der Octo-Daten
uint16_t checkVendor(String vendor); // Check if vendor exists, return ID
uint16_t createVendor(String vendor); // Create vendor, return ID
uint16_t checkFilament(); // Check if filament exists, return ID
bool createFilament(); // Create filament
uint16_t checkSpool(); // Check if spool exists, return ID
bool createSpool(); // Create spool
void createFilamentFabrik(JsonDocument payload);
#endif

View File

@@ -16,7 +16,6 @@ const uint8_t LOADCELL_DOUT_PIN = 16; //16;
const uint8_t LOADCELL_SCK_PIN = 17; //17;
const uint8_t calVal_eepromAdress = 0;
const uint16_t SCALE_LEVEL_WEIGHT = 500;
uint16_t defaultScaleCalibrationValue = 430;
// ***** HX711
// ***** TTP223 (Touch Sensor)

View File

@@ -3,36 +3,39 @@
#include <Arduino.h>
#define BAMBU_DEFAULT_AUTOSEND_TIME 60
#define BAMBU_DEFAULT_AUTOSEND_TIME 60
#define NVS_NAMESPACE_API "api"
#define NVS_KEY_SPOOLMAN_URL "spoolmanUrl"
#define NVS_KEY_OCTOPRINT_ENABLED "octoEnabled"
#define NVS_KEY_OCTOPRINT_URL "octoUrl"
#define NVS_KEY_OCTOPRINT_TOKEN "octoToken"
#define NVS_NAMESPACE_API "api"
#define NVS_KEY_SPOOLMAN_URL "spoolmanUrl"
#define NVS_KEY_OCTOPRINT_ENABLED "octoEnabled"
#define NVS_KEY_OCTOPRINT_URL "octoUrl"
#define NVS_KEY_OCTOPRINT_TOKEN "octoToken"
#define NVS_NAMESPACE_BAMBU "bambu"
#define NVS_KEY_BAMBU_IP "bambuIp"
#define NVS_KEY_BAMBU_ACCESSCODE "bambuCode"
#define NVS_KEY_BAMBU_SERIAL "bambuSerial"
#define NVS_KEY_BAMBU_AUTOSEND_ENABLE "autosendEnable"
#define NVS_KEY_BAMBU_AUTOSEND_TIME "autosendTime"
#define NVS_NAMESPACE_BAMBU "bambu"
#define NVS_KEY_BAMBU_IP "bambuIp"
#define NVS_KEY_BAMBU_ACCESSCODE "bambuCode"
#define NVS_KEY_BAMBU_SERIAL "bambuSerial"
#define NVS_KEY_BAMBU_AUTOSEND_ENABLE "autosendEnable"
#define NVS_KEY_BAMBU_AUTOSEND_TIME "autosendTime"
#define NVS_NAMESPACE_SCALE "scale"
#define NVS_KEY_CALIBRATION "cal_value"
#define NVS_KEY_AUTOTARE "auto_tare"
#define SCALE_DEFAULT_CALIBRATION_VALUE 430.0f;
#define NVS_NAMESPACE_SCALE "scale"
#define NVS_KEY_CALIBRATION "cal_value"
#define NVS_KEY_AUTOTARE "auto_tare"
#define BAMBU_USERNAME "bblp"
#define BAMBU_USERNAME "bblp"
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3CU // See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
#define SCREEN_WIDTH 128U
#define SCREEN_HEIGHT 64U
#define SCREEN_TOP_BAR_HEIGHT 16U
#define SCREEN_PROGRESS_BAR_HEIGHT 12U
#define DISPLAY_BOOT_TEXT "FilaMan"
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3CU // See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
#define SCREEN_WIDTH 128U
#define SCREEN_HEIGHT 64U
#define SCREEN_TOP_BAR_HEIGHT 16U
#define SCREEN_PROGRESS_BAR_HEIGHT 12U
#define DISPLAY_BOOT_TEXT "FilaMan"
#define WIFI_CHECK_INTERVAL 60000U
#define DISPLAY_UPDATE_INTERVAL 1000U
#define SPOOLMAN_HEALTHCHECK_INTERVAL 60000U
extern const uint8_t PN532_IRQ;
extern const uint8_t PN532_RESET;

View File

@@ -97,7 +97,8 @@ int16_t lastWeight = 0;
// WIFI check variables
unsigned long lastWifiCheckTime = 0;
const unsigned long wifiCheckInterval = 60000; // Überprüfe alle 60 Sekunden (60000 ms)
unsigned long lastTopRowUpdateTime = 0;
unsigned long lastSpoolmanHealcheckTime = 0;
// Button debounce variables
unsigned long lastButtonPress = 0;
@@ -115,17 +116,23 @@ void loop() {
}
// Überprüfe regelmäßig die WLAN-Verbindung
if (intervalElapsed(currentMillis, lastWifiCheckTime, wifiCheckInterval))
if (intervalElapsed(currentMillis, lastWifiCheckTime, WIFI_CHECK_INTERVAL))
{
checkWiFiConnection();
}
// Periodic display update
if (intervalElapsed(currentMillis, lastWifiCheckTime, 1000))
if (intervalElapsed(currentMillis, lastTopRowUpdateTime, DISPLAY_UPDATE_INTERVAL))
{
oledShowTopRow();
}
// Periodic spoolman health check
if (intervalElapsed(currentMillis, lastSpoolmanHealcheckTime, SPOOLMAN_HEALTHCHECK_INTERVAL))
{
checkSpoolmanInstance();
}
// Wenn Bambu auto set Spool aktiv
if (bambuCredentials.autosend_enable && autoSetToBambuSpoolId > 0)
{
@@ -156,94 +163,95 @@ void loop() {
}
}
// Wenn Waage nicht Kalibriert
if (scaleCalibrated == 3)
// If scale is not calibrated, only show a warning
if (!scaleCalibrated)
{
oledShowMessage("Scale not calibrated!");
vTaskDelay(5000 / portTICK_PERIOD_MS);
yield();
esp_task_wdt_reset();
return;
}
// Ausgabe der Waage auf Display
if(pauseMainTask == 0)
{
if (mainTaskWasPaused || (weight != lastWeight && nfcReaderState == NFC_IDLE && (!bambuCredentials.autosend_enable || autoSetToBambuSpoolId == 0)))
{
(weight < 2) ? ((weight < -2) ? oledShowMessage("!! -0") : oledShowWeight(0)) : oledShowWeight(weight);
// Do not show the warning if the calibratin process is onging
if(!scaleCalibrationActive){
oledShowMessage("Scale not calibrated");
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
mainTaskWasPaused = false;
}
else
{
mainTaskWasPaused = true;
}
// Wenn Timer abgelaufen und nicht gerade ein RFID-Tag geschrieben wird
if (currentMillis - lastWeightReadTime >= weightReadInterval && nfcReaderState < NFC_WRITING)
{
lastWeightReadTime = currentMillis;
// Prüfen ob die Waage korrekt genullt ist
// Abweichung von 2g ignorieren
if (autoTare && (weight > 2 && weight < 7) || weight < -2)
}else{
// Ausgabe der Waage auf Display
if(pauseMainTask == 0)
{
scale_tare_counter++;
if (mainTaskWasPaused || (weight != lastWeight && nfcReaderState == NFC_IDLE && (!bambuCredentials.autosend_enable || autoSetToBambuSpoolId == 0)))
{
(weight < 2) ? ((weight < -2) ? oledShowMessage("!! -0") : oledShowWeight(0)) : oledShowWeight(weight);
}
mainTaskWasPaused = false;
}
else
{
scale_tare_counter = 0;
mainTaskWasPaused = true;
}
// Prüfen ob das Gewicht gleich bleibt und dann senden
if (abs(weight - lastWeight) <= 2 && weight > 5)
// Wenn Timer abgelaufen und nicht gerade ein RFID-Tag geschrieben wird
if (currentMillis - lastWeightReadTime >= weightReadInterval && nfcReaderState < NFC_WRITING)
{
weigthCouterToApi++;
}
else
lastWeightReadTime = currentMillis;
// Prüfen ob die Waage korrekt genullt ist
// Abweichung von 2g ignorieren
if (autoTare && (weight > 2 && weight < 7) || weight < -2)
{
scale_tare_counter++;
}
else
{
scale_tare_counter = 0;
}
// Prüfen ob das Gewicht gleich bleibt und dann senden
if (abs(weight - lastWeight) <= 2 && weight > 5)
{
weigthCouterToApi++;
}
else
{
weigthCouterToApi = 0;
weightSend = 0;
}
}
// reset weight counter after writing tag
// TBD: what exactly is the logic behind this?
if (currentMillis - lastWeightReadTime >= weightReadInterval && nfcReaderState != NFC_IDLE && nfcReaderState != NFC_READ_SUCCESS)
{
weigthCouterToApi = 0;
weightSend = 0;
}
}
lastWeight = weight;
// reset weight counter after writing tag
// TBD: what exactly is the logic behind this?
if (currentMillis - lastWeightReadTime >= weightReadInterval && nfcReaderState != NFC_IDLE && nfcReaderState != NFC_READ_SUCCESS)
{
weigthCouterToApi = 0;
}
lastWeight = weight;
// Wenn ein Tag mit SM id erkannte wurde und der Waage Counter anspricht an SM Senden
if (activeSpoolId != "" && weigthCouterToApi > 3 && weightSend == 0 && nfcReaderState == NFC_READ_SUCCESS && tagProcessed == false && spoolmanApiState == API_IDLE) {
// set the current tag as processed to prevent it beeing processed again
tagProcessed = true;
if (updateSpoolWeight(activeSpoolId, weight))
// Wenn ein Tag mit SM id erkannte wurde und der Waage Counter anspricht an SM Senden
if (activeSpoolId != "" && weigthCouterToApi > 3 && weightSend == 0 && nfcReaderState == NFC_READ_SUCCESS && tagProcessed == false && spoolmanApiState == API_IDLE)
{
weightSend = 1;
}
else
{
oledShowIcon("failed");
vTaskDelay(2000 / portTICK_PERIOD_MS);
}
}
// set the current tag as processed to prevent it beeing processed again
tagProcessed = true;
if(sendOctoUpdate && spoolmanApiState == API_IDLE){
autoSetToBambuSpoolId = activeSpoolId.toInt();
if (updateSpoolWeight(activeSpoolId, weight))
{
weightSend = 1;
// Set Bambu spool ID for auto-send if enabled
if (bambuCredentials.autosend_enable)
{
autoSetToBambuSpoolId = activeSpoolId.toInt();
}
}
else
{
oledShowIcon("failed");
vTaskDelay(2000 / portTICK_PERIOD_MS);
}
}
if(octoEnabled)
if(octoEnabled && sendOctoUpdate && spoolmanApiState == API_IDLE)
{
updateSpoolOcto(autoSetToBambuSpoolId);
sendOctoUpdate = false;
}
sendOctoUpdate = false;
}
esp_task_wdt_reset();

View File

@@ -8,6 +8,7 @@
#include "esp_task_wdt.h"
#include "scale.h"
#include "bambu.h"
#include "main.h"
//Adafruit_PN532 nfc(PN532_SCK, PN532_MISO, PN532_MOSI, PN532_SS);
Adafruit_PN532 nfc(PN532_IRQ, PN532_RESET);
@@ -20,6 +21,8 @@ String lastSpoolId = "";
String nfcJsonData = "";
bool tagProcessed = false;
volatile bool pauseBambuMqttTask = false;
volatile bool nfcReadingTaskSuspendRequest = false;
volatile bool nfcReadingTaskSuspendState = false;
struct NfcWriteParameterType {
bool tagType;
@@ -37,11 +40,6 @@ volatile nfcReaderStateType nfcReaderState = NFC_IDLE;
// ***** PN532
// ##### Recycling Fabrik #####
bool isRecyclingFabrik(const char* brand) {
return strcmp(brand, "Recycling Fabrik") == 0;
}
// ##### Funktionen für RFID #####
void payloadToJson(uint8_t *data) {
const char* startJson = strchr((char*)data, '{');
@@ -62,13 +60,7 @@ void payloadToJson(uint8_t *data) {
int min_temp = doc["min_temp"];
int max_temp = doc["max_temp"];
const char* brand = doc["brand"];
// Recycling Fabrik
if (isRecyclingFabrik(brand)) {
// TODO: Implement specific handling for Recycling Fabrik
Serial.println("Recycling Fabrik erkannt.");
}
Serial.println();
Serial.println("-----------------");
Serial.println("JSON-Parsed Data:");
@@ -226,7 +218,7 @@ bool decodeNdefAndReturnJson(const byte* encodedMessage) {
}
// JSON-Dokument verarbeiten
JsonDocument doc;
JsonDocument doc; // Passen Sie die Größe an den JSON-Inhalt an
DeserializationError error = deserializeJson(doc, nfcJsonData);
if (error)
{
@@ -243,14 +235,12 @@ bool decodeNdefAndReturnJson(const byte* encodedMessage) {
// Sende die aktualisierten AMS-Daten an alle WebSocket-Clients
Serial.println("JSON-Dokument erfolgreich verarbeitet");
Serial.println(doc.as<String>());
if (doc["sm_id"].is<String>() && doc["sm_id"] != "" && doc["sm_id"] != "0")
if (doc["sm_id"].is<String>() && doc["sm_id"] != "")
{
oledShowProgressBar(2, octoEnabled?5:4, "Spool Tag", "Weighing");
Serial.println("SPOOL-ID gefunden: " + doc["sm_id"].as<String>());
activeSpoolId = doc["sm_id"].as<String>();
lastSpoolId = activeSpoolId;
Serial.println("Api state: " + String(spoolmanApiState));
}
else if(doc["location"].is<String>() && doc["location"] != "")
{
@@ -265,13 +255,6 @@ bool decodeNdefAndReturnJson(const byte* encodedMessage) {
oledShowProgressBar(1, 1, "Failure", "Scan spool first");
}
}
// Recycling Fabrik
else if (isRecyclingFabrik(doc["type"].as<String>().c_str())) {
// If no sm_id is present but the brand is Recycling Fabrik then
// create a new spool, maybe brand too, in Spoolman
Serial.println("Recycling Fabrik Tag found!");
createFilamentFabrik(doc);
}
else
{
Serial.println("Keine SPOOL-ID gefunden.");
@@ -296,19 +279,21 @@ void writeJsonToTag(void *parameter) {
Serial.println(params->payload);
nfcReaderState = NFC_WRITING;
vTaskSuspend(RfidReaderTask);
vTaskDelay(50 / portTICK_PERIOD_MS);
// First request the reading task to be suspended and than wait until it responds
nfcReadingTaskSuspendRequest = true;
while(nfcReadingTaskSuspendState == false){
vTaskDelay(100 / portTICK_PERIOD_MS);
}
//pauseBambuMqttTask = true;
// aktualisieren der Website wenn sich der Status ändert
sendNfcData();
vTaskDelay(100 / portTICK_PERIOD_MS);
Serial.println("CP 1");
// Wait 10sec for tag
uint8_t success = 0;
String uidString = "";
for (uint16_t i = 0; i < 20; i++) {
Serial.println("CP 2");
uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 }; // Buffer to store the returned UID
uint8_t uidLength;
// yield before potentially waiting for 400ms
@@ -316,7 +301,6 @@ void writeJsonToTag(void *parameter) {
esp_task_wdt_reset();
success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength, 400);
if (success) {
Serial.println("CP 3.1");
for (uint8_t i = 0; i < uidLength; i++) {
//TBD: Rework to remove all the string operations
uidString += String(uid[i], HEX);
@@ -326,8 +310,6 @@ void writeJsonToTag(void *parameter) {
}
foundNfcTag(nullptr, success);
break;
}else{
Serial.println("CP 3.2");
}
yield();
@@ -390,7 +372,7 @@ void writeJsonToTag(void *parameter) {
sendWriteResult(nullptr, success);
sendNfcData();
vTaskResume(RfidReaderTask);
nfcReadingTaskSuspendRequest = false;
pauseBambuMqttTask = false;
vTaskDelete(NULL);
@@ -402,7 +384,7 @@ void startWriteJsonToTag(const bool isSpoolTag, const char* payload) {
parameters->payload = strdup(payload);
// Task nicht mehrfach starten
if (nfcReaderState == NFC_IDLE) {
if (nfcReaderState == NFC_IDLE || nfcReaderState == NFC_READ_ERROR || nfcReaderState == NFC_READ_SUCCESS) {
oledShowProgressBar(0, 1, "Write Tag", "Place tag now");
// Erstelle die Task
xTaskCreate(
@@ -423,15 +405,16 @@ void scanRfidTask(void * parameter) {
Serial.println("RFID Task gestartet");
for(;;) {
// Wenn geschrieben wird Schleife aussetzen
if (nfcReaderState != NFC_WRITING)
if (nfcReaderState != NFC_WRITING && !nfcReadingTaskSuspendRequest && !booting)
{
nfcReadingTaskSuspendState = false;
yield();
uint8_t success;
uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 }; // Buffer to store the returned UID
uint8_t uidLength;
success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength, 1000);
success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength, 500);
foundNfcTag(nullptr, success);
@@ -448,8 +431,8 @@ void scanRfidTask(void * parameter) {
oledShowProgressBar(0, octoEnabled?5:4, "Reading", "Detecting tag");
vTaskDelay(500 / portTICK_PERIOD_MS);
//vTaskDelay(500 / portTICK_PERIOD_MS);
if (uidLength == 7)
{
uint16_t tagSize = readTagSize();
@@ -505,7 +488,7 @@ void scanRfidTask(void * parameter) {
}
}
if (!success && nfcReaderState != NFC_IDLE)
if (!success && nfcReaderState != NFC_IDLE && !nfcReadingTaskSuspendRequest)
{
nfcReaderState = NFC_IDLE;
//uidString = "";
@@ -518,6 +501,12 @@ void scanRfidTask(void * parameter) {
// aktualisieren der Website wenn sich der Status ändert
sendNfcData();
}
else
{
nfcReadingTaskSuspendState = true;
Serial.println("NFC Reading disabled");
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
yield();
}
}

View File

@@ -17,8 +17,9 @@ uint8_t weigthCouterToApi = 0;
uint8_t scale_tare_counter = 0;
bool scaleTareRequest = false;
uint8_t pauseMainTask = 0;
uint8_t scaleCalibrated = 1;
bool scaleCalibrated;
bool autoTare = true;
bool scaleCalibrationActive = false;
// ##### Funktionen für Waage #####
uint8_t setAutoTare(bool autoTareValue) {
@@ -88,7 +89,13 @@ void start_scale(bool touchSensorConnected) {
// NVS lesen
Preferences preferences;
preferences.begin(NVS_NAMESPACE_SCALE, true); // true = readonly
calibrationValue = preferences.getFloat(NVS_KEY_CALIBRATION, defaultScaleCalibrationValue);
if(preferences.isKey(NVS_KEY_CALIBRATION)){
calibrationValue = preferences.getFloat(NVS_KEY_CALIBRATION);
scaleCalibrated = true;
}else{
calibrationValue = SCALE_DEFAULT_CALIBRATION_VALUE;
scaleCalibrated = false;
}
// auto Tare
// Wenn Touch Sensor verbunden, dann autoTare auf false setzen
@@ -103,18 +110,6 @@ void start_scale(bool touchSensorConnected) {
scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
if (isnan(calibrationValue) || calibrationValue < 1) {
calibrationValue = defaultScaleCalibrationValue;
scaleCalibrated = 0;
oledShowMessage("Scale not calibrated!");
for (uint16_t i = 0; i < 50000; i++) {
yield();
vTaskDelay(pdMS_TO_TICKS(1));
esp_task_wdt_reset();
}
}
oledShowProgressBar(6, 7, DISPLAY_BOOT_TEXT, "Tare scale");
for (uint16_t i = 0; i < 2000; i++) {
yield();
@@ -152,6 +147,8 @@ uint8_t calibrate_scale() {
uint8_t returnState = 0;
float newCalibrationValue;
scaleCalibrationActive = true;
vTaskSuspend(RfidReaderTask);
vTaskSuspend(ScaleTask);
@@ -228,6 +225,7 @@ uint8_t calibrate_scale() {
esp_task_wdt_reset();
}
scaleCalibrated = true;
returnState = 1;
}
else
@@ -262,6 +260,7 @@ uint8_t calibrate_scale() {
vTaskResume(ScaleTask);
pauseBambuMqttTask = false;
pauseMainTask = 0;
scaleCalibrationActive = false;
return returnState;
}

View File

@@ -15,8 +15,9 @@ extern uint8_t weigthCouterToApi;
extern uint8_t scale_tare_counter;
extern uint8_t scaleTareRequest;
extern uint8_t pauseMainTask;
extern uint8_t scaleCalibrated;
extern bool scaleCalibrated;
extern bool autoTare;
extern bool scaleCalibrationActive;
extern TaskHandle_t ScaleTask;