Compare commits
	
		
			16 Commits
		
	
	
		
			v1.4.10
			...
			a450d4bd1a
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| a450d4bd1a | |||
| d48d994c00 | |||
| 32bb85f897 | |||
| e9d32ee060 | |||
| aba28422bd | |||
| 4a55620d39 | |||
| 7b18266534 | |||
| d81acb2b61 | |||
| 8c7fc159d3 | |||
| 476d3e82e2 | |||
| 3c294a135f | |||
| bb751b6289 | |||
| 7fd01bd1b9 | |||
| 458cc4eaf2 | |||
|  | ac8adca84d | ||
|  | c701149c64 | 
							
								
								
									
										36
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										36
									
								
								CHANGELOG.md
									
									
									
									
									
								
							| @@ -1,5 +1,41 @@ | ||||
| # Changelog | ||||
|  | ||||
| ## [1.4.14] - 2025-03-30 | ||||
| ### Added | ||||
| - add auto-tare functionality and update scale handling based on touch sensor connection | ||||
|  | ||||
| ### Changed | ||||
| - update platformio.ini for version v1.4.14 | ||||
|  | ||||
|  | ||||
| ## [1.4.13] - 2025-03-30 | ||||
| ### Changed | ||||
| - update platformio.ini for version v1.4.13 | ||||
|  | ||||
| ### Fixed | ||||
| - update touch sensor connection logic to correctly identify connection status | ||||
|  | ||||
|  | ||||
| ## [1.4.12] - 2025-03-30 | ||||
| ### Added | ||||
| - add touch sensor connection check and update logic | ||||
|  | ||||
| ### Changed | ||||
| - update platformio.ini for version v1.4.12 | ||||
| - update README files to clarify PN532 DIP switch settings | ||||
|  | ||||
|  | ||||
| ## [1.4.11] - 2025-03-30 | ||||
| ### Added | ||||
| - Renamed states of NFC state machine and introduced new state machine for spoolman API | ||||
|  | ||||
| ### Changed | ||||
| - update platformio.ini for version v1.4.11 | ||||
| - Merge branch 'main' of github.com:ManuelW77/Filaman | ||||
| - Merge pull request #31 from janecker/nfc_rework | ||||
| - Introducing enum for handling the NFC state to improve code readability | ||||
|  | ||||
|  | ||||
| ## [1.4.10] - 2025-03-30 | ||||
| ### Added | ||||
| - add manual tare functionality for scale | ||||
|   | ||||
| @@ -82,7 +82,7 @@ Discord Server: [https://discord.gg/my7Gvaxj2v](https://discord.gg/my7Gvaxj2v) | ||||
| | PN532 SCL         | 22        | | ||||
| | TTP223 I/O        | 25        | | ||||
|  | ||||
| **!! Achte darauf, dass am PN532 die DIP-Schalter auf I2C gestellt sind** | ||||
| **!! Achte darauf, dass am PN532 die DIP-Schalter auf I2C gestellt sind**   | ||||
| **Nutze den 3V Pin vom ESP für den Touch Sensor** | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -86,7 +86,7 @@ Discord Server: [https://discord.gg/my7Gvaxj2v](https://discord.gg/my7Gvaxj2v) | ||||
| | PN532 SCL         | 22        | | ||||
| | TTP223 I/O        | 25        | | ||||
|  | ||||
| **!! Make sure that the DIP switches on the PN532 are set to I2C** | ||||
| **!! Make sure that the DIP switches on the PN532 are set to I2C**   | ||||
| **Use the 3V pin from the ESP for the touch sensor** | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -55,6 +55,7 @@ | ||||
|                 <h5 class="card-title">Sacle Calibration</h5> | ||||
|                 <button id="calibrateBtn" class="btn btn-primary">Calibrate Scale</button> | ||||
|                 <button id="tareBtn" class="btn btn-secondary">Tare Scale</button> | ||||
|                    Enable Auto-TARE <input type="checkbox" id="autoTareCheckbox" onchange="setAutoTare(this.checked);" {{autoTare}}> | ||||
|                 <div id="statusMessage" class="mt-3"></div> | ||||
|             </div> | ||||
|         </div> | ||||
| @@ -140,6 +141,15 @@ | ||||
|             })); | ||||
|         }); | ||||
|  | ||||
|         // Add auto-tare function | ||||
|         function setAutoTare(enabled) { | ||||
|             ws.send(JSON.stringify({ | ||||
|                 type: 'scale', | ||||
|                 payload: 'setAutoTare', | ||||
|                 enabled: enabled | ||||
|             })); | ||||
|         } | ||||
|  | ||||
|         // WebSocket-Verbindung beim Laden der Seite initiieren | ||||
|         connectWebSocket(); | ||||
|     </script> | ||||
|   | ||||
| @@ -9,7 +9,7 @@ | ||||
| ; https://docs.platformio.org/page/projectconf.html | ||||
|  | ||||
| [common] | ||||
| version = "1.4.10" | ||||
| version = "1.4.14" | ||||
| to_old_version = "1.4.0" | ||||
|  | ||||
| ## | ||||
|   | ||||
| @@ -14,7 +14,7 @@ def copy_file(input_file, output_file): | ||||
|  | ||||
| def should_compress(file): | ||||
|      # Skip compression for spoolman.html | ||||
|     if file == 'spoolman.html': | ||||
|     if file == 'spoolman.html' or file == 'waage.html': | ||||
|         return False | ||||
|     # Komprimiere nur bestimmte Dateitypen | ||||
|     return file.endswith(('.js', '.png', '.css', '.html')) | ||||
|   | ||||
| @@ -3,7 +3,8 @@ | ||||
| #include <ArduinoJson.h> | ||||
| #include "commonFS.h" | ||||
|  | ||||
| bool spoolman_connected = false; | ||||
| volatile spoolmanApiStateType spoolmanApiState = API_INIT; | ||||
| //bool spoolman_connected = false; | ||||
| String spoolmanUrl = ""; | ||||
| bool octoEnabled = false; | ||||
| String octoUrl = ""; | ||||
| @@ -85,6 +86,7 @@ JsonDocument fetchSingleSpoolInfo(int spoolId) { | ||||
| } | ||||
|  | ||||
| void sendToApi(void *parameter) { | ||||
|     spoolmanApiState = API_TRANSMITTING; | ||||
|     SendToApiParams* params = (SendToApiParams*)parameter; | ||||
|  | ||||
|     // Extrahiere die Werte | ||||
| @@ -119,6 +121,7 @@ void sendToApi(void *parameter) { | ||||
|     // Speicher freigeben | ||||
|     delete params; | ||||
|     vTaskDelete(NULL); | ||||
|     spoolmanApiState = API_IDLE; | ||||
| } | ||||
|  | ||||
| bool updateSpoolTagId(String uidString, const char* payload) { | ||||
| @@ -479,7 +482,8 @@ bool checkSpoolmanInstance(const String& url) { | ||||
|                     return false; | ||||
|                 } | ||||
|  | ||||
|                 spoolman_connected = true; | ||||
|                 spoolmanApiState = API_IDLE; | ||||
|                 oledShowTopRow(); | ||||
|                 return strcmp(status, "healthy") == 0; | ||||
|             } | ||||
|         } | ||||
|   | ||||
| @@ -6,7 +6,13 @@ | ||||
| #include "website.h" | ||||
| #include "display.h" | ||||
| #include <ArduinoJson.h> | ||||
| typedef enum { | ||||
|     API_INIT, | ||||
|     API_IDLE, | ||||
|     API_TRANSMITTING | ||||
| } spoolmanApiStateType; | ||||
|  | ||||
| extern volatile spoolmanApiStateType spoolmanApiState; | ||||
| extern bool spoolman_connected; | ||||
| extern String spoolmanUrl; | ||||
| extern bool octoEnabled; | ||||
|   | ||||
| @@ -177,7 +177,7 @@ void oledShowTopRow() { | ||||
|         display.drawBitmap(50, 0, bitmap_off , 16, 16, WHITE); | ||||
|     } | ||||
|  | ||||
|     if (spoolman_connected == 1) { | ||||
|     if (spoolmanApiState != API_INIT) { | ||||
|         display.drawBitmap(80, 0, bitmap_spoolman_on , 16, 16, WHITE); | ||||
|     } else { | ||||
|         display.drawBitmap(80, 0, bitmap_off , 16, 16, WHITE); | ||||
|   | ||||
							
								
								
									
										37
									
								
								src/main.cpp
									
									
									
									
									
								
							
							
						
						
									
										37
									
								
								src/main.cpp
									
									
									
									
									
								
							| @@ -15,6 +15,7 @@ | ||||
|  | ||||
| bool mainTaskWasPaused = 0; | ||||
| uint8_t scaleTareCounter = 0; | ||||
| bool touchSensorConnected = false; | ||||
|  | ||||
| // ##### SETUP ##### | ||||
| void setup() { | ||||
| @@ -47,8 +48,16 @@ void setup() { | ||||
|   // NFC Reader | ||||
|   startNfc(); | ||||
|  | ||||
|   // Touch Sensor | ||||
|   pinMode(TTP223_PIN, INPUT_PULLUP); | ||||
|   if (digitalRead(TTP223_PIN) == LOW)  | ||||
|   { | ||||
|     Serial.println("Touch Sensor is connected"); | ||||
|     touchSensorConnected = true; | ||||
|   } | ||||
|  | ||||
|   // Scale | ||||
|   start_scale(); | ||||
|   start_scale(touchSensorConnected); | ||||
|  | ||||
|   // WDT initialisieren mit 10 Sekunden Timeout | ||||
|   bool panic = true; // Wenn true, löst ein WDT-Timeout einen System-Panik aus | ||||
| @@ -56,9 +65,6 @@ void setup() { | ||||
|  | ||||
|   // Aktuellen Task (loopTask) zum Watchdog hinzufügen | ||||
|   esp_task_wdt_add(NULL); | ||||
|  | ||||
|   // Touch Sensor | ||||
|   pinMode(TTP223_PIN, INPUT_PULLUP); | ||||
| } | ||||
|  | ||||
|  | ||||
| @@ -100,7 +106,7 @@ void loop() { | ||||
|   unsigned long currentMillis = millis(); | ||||
|  | ||||
|   // Überprüfe den Status des Touch Sensors | ||||
|   if (digitalRead(TTP223_PIN) == HIGH && currentMillis - lastButtonPress > debounceDelay)  | ||||
|   if (touchSensorConnected && digitalRead(TTP223_PIN) == HIGH && currentMillis - lastButtonPress > debounceDelay)  | ||||
|   { | ||||
|     lastButtonPress = currentMillis; | ||||
|     scaleTareRequest = true; | ||||
| @@ -122,7 +128,7 @@ void loop() { | ||||
|  | ||||
|     if (intervalElapsed(currentMillis, lastAutoSetBambuAmsTime, autoSetBambuAmsInterval))  | ||||
|     { | ||||
|       if (hasReadRfidTag == 0) | ||||
|       if (nfcReaderState == NFC_IDLE) | ||||
|       { | ||||
|         lastAutoSetBambuAmsTime = currentMillis; | ||||
|         oledShowMessage("Auto Set         " + String(autoSetBambuAmsCounter - autoAmsCounter) + "s"); | ||||
| @@ -156,7 +162,7 @@ void loop() { | ||||
|   // Ausgabe der Waage auf Display | ||||
|   if(pauseMainTask == 0) | ||||
|   { | ||||
|     if (mainTaskWasPaused || (weight != lastWeight && hasReadRfidTag == 0 && (!autoSendToBambu || autoSetToBambuSpoolId == 0))) | ||||
|     if (mainTaskWasPaused || (weight != lastWeight && nfcReaderState == NFC_IDLE && (!autoSendToBambu || autoSetToBambuSpoolId == 0))) | ||||
|     { | ||||
|       (weight < 2) ? ((weight < -2) ? oledShowMessage("!! -0") : oledShowWeight(0)) : oledShowWeight(weight); | ||||
|     } | ||||
| @@ -169,10 +175,20 @@ void loop() { | ||||
|  | ||||
|  | ||||
|   // Wenn Timer abgelaufen und nicht gerade ein RFID-Tag geschrieben wird | ||||
|   if (currentMillis - lastWeightReadTime >= weightReadInterval && hasReadRfidTag < 3) | ||||
|   if (currentMillis - lastWeightReadTime >= weightReadInterval && nfcReaderState < NFC_WRITING) | ||||
|   { | ||||
|     lastWeightReadTime = currentMillis; | ||||
|  | ||||
|     // Prüfen ob die Waage korrekt genullt ist | ||||
|     if (autoTare && (weight > 0 && weight < 5) || weight < 0) | ||||
|     { | ||||
|       scale_tare_counter++; | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|       scale_tare_counter = 0; | ||||
|     } | ||||
|  | ||||
|     // Prüfen ob das Gewicht gleich bleibt und dann senden | ||||
|     if (weight == lastWeight && weight > 5) | ||||
|     { | ||||
| @@ -186,7 +202,8 @@ void loop() { | ||||
|   } | ||||
|  | ||||
|   // reset weight counter after writing tag | ||||
|   if (currentMillis - lastWeightReadTime >= weightReadInterval && hasReadRfidTag > 1) | ||||
|   // TBD: what exactly is the logic behind this? | ||||
|   if (currentMillis - lastWeightReadTime >= weightReadInterval && nfcReaderState != NFC_IDLE && nfcReaderState != NFC_READ_SUCCESS) | ||||
|   { | ||||
|     weigthCouterToApi = 0; | ||||
|   } | ||||
| @@ -194,7 +211,7 @@ void loop() { | ||||
|   lastWeight = weight; | ||||
|  | ||||
|   // Wenn ein Tag mit SM id erkannte wurde und der Waage Counter anspricht an SM Senden | ||||
|   if (spoolId != "" && weigthCouterToApi > 3 && weightSend == 0 && hasReadRfidTag == 1) { | ||||
|   if (spoolId != "" && weigthCouterToApi > 3 && weightSend == 0 && nfcReaderState == NFC_READ_SUCCESS) { | ||||
|     oledShowIcon("loading"); | ||||
|     if (updateSpoolWeight(spoolId, weight))  | ||||
|     { | ||||
|   | ||||
							
								
								
									
										28
									
								
								src/nfc.cpp
									
									
									
									
									
								
							
							
						
						
									
										28
									
								
								src/nfc.cpp
									
									
									
									
									
								
							| @@ -18,7 +18,7 @@ String spoolId = ""; | ||||
| String nfcJsonData = ""; | ||||
| volatile bool pauseBambuMqttTask = false; | ||||
|  | ||||
| volatile uint8_t hasReadRfidTag = 0; | ||||
| volatile nfcReaderStateType nfcReaderState = NFC_IDLE; | ||||
| // 0 = nicht gelesen | ||||
| // 1 = erfolgreich gelesen | ||||
| // 2 = fehler beim Lesen | ||||
| @@ -242,7 +242,7 @@ void writeJsonToTag(void *parameter) { | ||||
|   Serial.println("Erstelle NDEF-Message..."); | ||||
|   Serial.println(payload); | ||||
|  | ||||
|   hasReadRfidTag = 3; | ||||
|   nfcReaderState = NFC_WRITING; | ||||
|   vTaskSuspend(RfidReaderTask); | ||||
|   vTaskDelay(50 / portTICK_PERIOD_MS); | ||||
|  | ||||
| @@ -288,7 +288,7 @@ void writeJsonToTag(void *parameter) { | ||||
|         //oledShowMessage("NFC-Tag written"); | ||||
|         oledShowIcon("success"); | ||||
|         vTaskDelay(1000 / portTICK_PERIOD_MS); | ||||
|         hasReadRfidTag = 5; | ||||
|         nfcReaderState = NFC_WRITE_SUCCESS; | ||||
|         // aktualisieren der Website wenn sich der Status ändert | ||||
|         sendNfcData(nullptr); | ||||
|         pauseBambuMqttTask = false; | ||||
| @@ -310,7 +310,7 @@ void writeJsonToTag(void *parameter) { | ||||
|         Serial.println("Fehler beim Schreiben der NDEF-Message auf den Tag"); | ||||
|         oledShowIcon("failed"); | ||||
|         vTaskDelay(2000 / portTICK_PERIOD_MS); | ||||
|         hasReadRfidTag = 4; | ||||
|         nfcReaderState = NFC_WRITE_ERROR; | ||||
|     } | ||||
|   } | ||||
|   else | ||||
| @@ -318,7 +318,7 @@ void writeJsonToTag(void *parameter) { | ||||
|     Serial.println("Fehler: Kein Tag zu schreiben gefunden."); | ||||
|     oledShowMessage("No NFC-Tag found"); | ||||
|     vTaskDelay(2000 / portTICK_PERIOD_MS); | ||||
|     hasReadRfidTag = 0; | ||||
|     nfcReaderState = NFC_IDLE; | ||||
|   } | ||||
|    | ||||
|   sendWriteResult(nullptr, success); | ||||
| @@ -334,7 +334,7 @@ void startWriteJsonToTag(const char* payload) { | ||||
|   char* payloadCopy = strdup(payload); | ||||
|    | ||||
|   // Task nicht mehrfach starten | ||||
|   if (hasReadRfidTag != 3) { | ||||
|   if (nfcReaderState != NFC_WRITING) { | ||||
|     // Erstelle die Task | ||||
|     xTaskCreate( | ||||
|         writeJsonToTag,        // Task-Funktion | ||||
| @@ -351,7 +351,7 @@ void scanRfidTask(void * parameter) { | ||||
|   Serial.println("RFID Task gestartet"); | ||||
|   for(;;) { | ||||
|     // Wenn geschrieben wird Schleife aussetzen | ||||
|     if (hasReadRfidTag != 3) | ||||
|     if (nfcReaderState != NFC_WRITING) | ||||
|     { | ||||
|       yield(); | ||||
|  | ||||
| @@ -363,12 +363,12 @@ void scanRfidTask(void * parameter) { | ||||
|  | ||||
|       foundNfcTag(nullptr, success); | ||||
|        | ||||
|       if (success && hasReadRfidTag != 1) | ||||
|       if (success && nfcReaderState != NFC_READ_SUCCESS) | ||||
|       { | ||||
|         // Display some basic information about the card | ||||
|         Serial.println("Found an ISO14443A card"); | ||||
|  | ||||
|         hasReadRfidTag = 6; | ||||
|         nfcReaderState = NFC_READING; | ||||
|  | ||||
|         oledShowIcon("transfer"); | ||||
|         vTaskDelay(500 / portTICK_PERIOD_MS); | ||||
| @@ -406,11 +406,11 @@ void scanRfidTask(void * parameter) { | ||||
|             { | ||||
|               oledShowMessage("NFC-Tag unknown"); | ||||
|               vTaskDelay(2000 / portTICK_PERIOD_MS); | ||||
|               hasReadRfidTag = 2; | ||||
|               nfcReaderState = NFC_READ_ERROR; | ||||
|             } | ||||
|             else  | ||||
|             { | ||||
|               hasReadRfidTag = 1; | ||||
|               nfcReaderState = NFC_READ_SUCCESS; | ||||
|             } | ||||
|  | ||||
|             free(data); | ||||
| @@ -418,7 +418,7 @@ void scanRfidTask(void * parameter) { | ||||
|           else | ||||
|           { | ||||
|             oledShowMessage("NFC-Tag read error"); | ||||
|             hasReadRfidTag = 2; | ||||
|             nfcReaderState = NFC_READ_ERROR; | ||||
|           } | ||||
|         } | ||||
|         else | ||||
| @@ -427,9 +427,9 @@ void scanRfidTask(void * parameter) { | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       if (!success && hasReadRfidTag > 0) | ||||
|       if (!success && nfcReaderState != NFC_IDLE) | ||||
|       { | ||||
|         hasReadRfidTag = 0; | ||||
|         nfcReaderState = NFC_IDLE; | ||||
|         //uidString = ""; | ||||
|         nfcJsonData = ""; | ||||
|         Serial.println("Tag entfernt"); | ||||
|   | ||||
							
								
								
									
										14
									
								
								src/nfc.h
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								src/nfc.h
									
									
									
									
									
								
							| @@ -3,6 +3,16 @@ | ||||
|  | ||||
| #include <Arduino.h> | ||||
|  | ||||
| typedef enum{ | ||||
|     NFC_IDLE, | ||||
|     NFC_READING, | ||||
|     NFC_READ_SUCCESS, | ||||
|     NFC_READ_ERROR, | ||||
|     NFC_WRITING, | ||||
|     NFC_WRITE_SUCCESS, | ||||
|     NFC_WRITE_ERROR | ||||
| } nfcReaderStateType; | ||||
|  | ||||
| void startNfc(); | ||||
| void scanRfidTask(void * parameter); | ||||
| void startWriteJsonToTag(const char* payload); | ||||
| @@ -10,7 +20,9 @@ void startWriteJsonToTag(const char* payload); | ||||
| extern TaskHandle_t RfidReaderTask; | ||||
| extern String nfcJsonData; | ||||
| extern String spoolId; | ||||
| extern volatile uint8_t hasReadRfidTag; | ||||
| extern volatile nfcReaderStateType nfcReaderState; | ||||
| extern volatile bool pauseBambuMqttTask; | ||||
|  | ||||
|  | ||||
|  | ||||
| #endif | ||||
| @@ -14,6 +14,7 @@ TaskHandle_t ScaleTask; | ||||
| int16_t weight = 0; | ||||
|  | ||||
| uint8_t weigthCouterToApi = 0; | ||||
| uint8_t scale_tare_counter = 0; | ||||
| bool scaleTareRequest = false; | ||||
| uint8_t pauseMainTask = 0; | ||||
| uint8_t scaleCalibrated = 1; | ||||
| @@ -21,8 +22,23 @@ uint8_t scaleCalibrated = 1; | ||||
| Preferences preferences; | ||||
| const char* NVS_NAMESPACE = "scale"; | ||||
| const char* NVS_KEY_CALIBRATION = "cal_value"; | ||||
| const char* NVS_KEY_AUTOTARE = "auto_tare"; | ||||
| bool autoTare = true; | ||||
|  | ||||
| // ##### Funktionen für Waage ##### | ||||
| uint8_t setAutoTare(bool autoTareValue) { | ||||
|   Serial.print("Set AutoTare to "); | ||||
|   Serial.println(autoTareValue); | ||||
|   autoTare = autoTareValue; | ||||
|  | ||||
|   // Speichern mit NVS | ||||
|   preferences.begin(NVS_NAMESPACE, false); // false = readwrite | ||||
|   preferences.putBool(NVS_KEY_AUTOTARE, autoTare); | ||||
|   preferences.end(); | ||||
|  | ||||
|   return 1; | ||||
| } | ||||
|  | ||||
| uint8_t tareScale() { | ||||
|   Serial.println("Tare scale"); | ||||
|   scale.tare(); | ||||
| @@ -38,6 +54,14 @@ void scale_loop(void * parameter) { | ||||
|   for(;;) { | ||||
|     if (scale.is_ready())  | ||||
|     { | ||||
|       // Waage automatisch Taren, wenn zu lange Abweichung | ||||
|       if (autoTare && scale_tare_counter >= 5)  | ||||
|       { | ||||
|         Serial.println("Auto Tare scale"); | ||||
|         scale.tare(); | ||||
|         scale_tare_counter = 0; | ||||
|       } | ||||
|  | ||||
|       // Waage manuell Taren | ||||
|       if (scaleTareRequest == true)  | ||||
|       { | ||||
| @@ -57,13 +81,20 @@ void scale_loop(void * parameter) { | ||||
|   } | ||||
| } | ||||
|  | ||||
| void start_scale() { | ||||
| void start_scale(bool touchSensorConnected) { | ||||
|   Serial.println("Prüfe Calibration Value"); | ||||
|   float calibrationValue; | ||||
|  | ||||
|   // NVS lesen | ||||
|   preferences.begin(NVS_NAMESPACE, true); // true = readonly | ||||
|   calibrationValue = preferences.getFloat(NVS_KEY_CALIBRATION, defaultScaleCalibrationValue); | ||||
|    | ||||
|   // auto Tare | ||||
|   // Wenn Touch Sensor verbunden, dann autoTare auf false setzen | ||||
|   // Danach prüfen was in NVS gespeichert ist | ||||
|   autoTare = (touchSensorConnected) ? false : true; | ||||
|   autoTare = preferences.getBool(NVS_KEY_AUTOTARE, autoTare); | ||||
|  | ||||
|   preferences.end(); | ||||
|  | ||||
|   Serial.print("Read Scale Calibration Value "); | ||||
|   | ||||
| @@ -4,17 +4,19 @@ | ||||
| #include <Arduino.h> | ||||
| #include "HX711.h" | ||||
|  | ||||
|  | ||||
| uint8_t start_scale(); | ||||
| uint8_t setAutoTare(bool autoTareValue); | ||||
| uint8_t start_scale(bool touchSensorConnected); | ||||
| uint8_t calibrate_scale(); | ||||
| uint8_t tareScale(); | ||||
|  | ||||
| extern HX711 scale; | ||||
| extern int16_t weight; | ||||
| extern uint8_t weigthCouterToApi; | ||||
| extern uint8_t scale_tare_counter; | ||||
| extern uint8_t scaleTareRequest; | ||||
| extern uint8_t pauseMainTask; | ||||
| extern uint8_t scaleCalibrated; | ||||
| extern bool autoTare; | ||||
|  | ||||
| extern TaskHandle_t ScaleTask; | ||||
|  | ||||
|   | ||||
| @@ -22,7 +22,7 @@ AsyncWebServer server(webserverPort); | ||||
| AsyncWebSocket ws("/ws"); | ||||
|  | ||||
| uint8_t lastSuccess = 0; | ||||
| uint8_t lastHasReadRfidTag = 0; | ||||
| nfcReaderStateType lastnfcReaderState = NFC_IDLE; | ||||
|  | ||||
|  | ||||
| void onWsEvent(AsyncWebSocket *server, AsyncWebSocketClient *client, AwsEventType type, void *arg, uint8_t *data, size_t len) { | ||||
| @@ -44,13 +44,15 @@ void onWsEvent(AsyncWebSocket *server, AsyncWebSocketClient *client, AwsEventTyp | ||||
|         JsonDocument doc; | ||||
|         deserializeJson(doc, message); | ||||
|  | ||||
|         bool spoolmanConnected = (spoolmanApiState != API_INIT); | ||||
|  | ||||
|         if (doc["type"] == "heartbeat") { | ||||
|             // Sende Heartbeat-Antwort | ||||
|             ws.text(client->id(), "{" | ||||
|                 "\"type\":\"heartbeat\"," | ||||
|                 "\"freeHeap\":" + String(ESP.getFreeHeap()/1024) + "," | ||||
|                 "\"bambu_connected\":" + String(bambu_connected) + "," | ||||
|                 "\"spoolman_connected\":" + String(spoolman_connected) + "" | ||||
|                 "\"spoolman_connected\":" + String(spoolmanConnected) + "" | ||||
|                 "}"); | ||||
|         } | ||||
|  | ||||
| @@ -73,6 +75,10 @@ void onWsEvent(AsyncWebSocket *server, AsyncWebSocketClient *client, AwsEventTyp | ||||
|                 success = calibrate_scale(); | ||||
|             } | ||||
|  | ||||
|             if (doc["payload"] == "setAutoTare") { | ||||
|                 success = setAutoTare(doc["enabled"].as<bool>()); | ||||
|             } | ||||
|  | ||||
|             if (success) { | ||||
|                 ws.textAll("{\"type\":\"scale\",\"payload\":\"success\"}"); | ||||
|             } else { | ||||
| @@ -139,34 +145,31 @@ void foundNfcTag(AsyncWebSocketClient *client, uint8_t success) { | ||||
| } | ||||
|  | ||||
| void sendNfcData(AsyncWebSocketClient *client) { | ||||
|     if (lastHasReadRfidTag == hasReadRfidTag) return; | ||||
|     if (hasReadRfidTag == 0) { | ||||
|         ws.textAll("{\"type\":\"nfcData\", \"payload\":{}}"); | ||||
|     if (lastnfcReaderState == nfcReaderState) return; | ||||
|     // TBD: Why is there no status for reading the tag? | ||||
|     switch(nfcReaderState){ | ||||
|         case NFC_IDLE: | ||||
|             ws.textAll("{\"type\":\"nfcData\", \"payload\":{}}"); | ||||
|             break; | ||||
|         case NFC_READ_SUCCESS: | ||||
|             ws.textAll("{\"type\":\"nfcData\", \"payload\":" + nfcJsonData + "}"); | ||||
|             break; | ||||
|         case NFC_READ_ERROR: | ||||
|             ws.textAll("{\"type\":\"nfcData\", \"payload\":{\"error\":\"Empty Tag or Data not readable\"}}"); | ||||
|             break; | ||||
|         case NFC_WRITING: | ||||
|             ws.textAll("{\"type\":\"nfcData\", \"payload\":{\"info\":\"Schreibe Tag...\"}}"); | ||||
|             break; | ||||
|         case NFC_WRITE_SUCCESS: | ||||
|             ws.textAll("{\"type\":\"nfcData\", \"payload\":{\"info\":\"Tag erfolgreich geschrieben\"}}"); | ||||
|             break; | ||||
|         case NFC_WRITE_ERROR: | ||||
|             ws.textAll("{\"type\":\"nfcData\", \"payload\":{\"error\":\"Error writing to Tag\"}}"); | ||||
|             break; | ||||
|         case DEFAULT: | ||||
|             ws.textAll("{\"type\":\"nfcData\", \"payload\":{\"error\":\"Something went wrong\"}}"); | ||||
|     } | ||||
|     else if (hasReadRfidTag == 1) { | ||||
|         ws.textAll("{\"type\":\"nfcData\", \"payload\":" + nfcJsonData + "}"); | ||||
|     } | ||||
|     else if (hasReadRfidTag == 2) | ||||
|     { | ||||
|         ws.textAll("{\"type\":\"nfcData\", \"payload\":{\"error\":\"Empty Tag or Data not readable\"}}"); | ||||
|     } | ||||
|     else if (hasReadRfidTag == 3) | ||||
|     { | ||||
|         ws.textAll("{\"type\":\"nfcData\", \"payload\":{\"info\":\"Schreibe Tag...\"}}"); | ||||
|     } | ||||
|     else if (hasReadRfidTag == 4) | ||||
|     { | ||||
|         ws.textAll("{\"type\":\"nfcData\", \"payload\":{\"error\":\"Error writing to Tag\"}}"); | ||||
|     } | ||||
|     else if (hasReadRfidTag == 5) | ||||
|     { | ||||
|         ws.textAll("{\"type\":\"nfcData\", \"payload\":{\"info\":\"Tag erfolgreich geschrieben\"}}"); | ||||
|     } | ||||
|     else  | ||||
|     { | ||||
|         ws.textAll("{\"type\":\"nfcData\", \"payload\":{\"error\":\"Something went wrong\"}}"); | ||||
|     } | ||||
|     lastHasReadRfidTag = hasReadRfidTag; | ||||
|     lastnfcReaderState = nfcReaderState; | ||||
| } | ||||
|  | ||||
| void sendAmsData(AsyncWebSocketClient *client) { | ||||
| @@ -204,10 +207,14 @@ void setupWebserver(AsyncWebServer &server) { | ||||
|     // Route für Waage | ||||
|     server.on("/waage", HTTP_GET, [](AsyncWebServerRequest *request){ | ||||
|         Serial.println("Anfrage für /waage erhalten"); | ||||
|         AsyncWebServerResponse *response = request->beginResponse(LittleFS, "/waage.html.gz", "text/html"); | ||||
|         response->addHeader("Content-Encoding", "gzip"); | ||||
|         response->addHeader("Cache-Control", CACHE_CONTROL); | ||||
|         request->send(response); | ||||
|         //AsyncWebServerResponse *response = request->beginResponse(LittleFS, "/waage.html.gz", "text/html"); | ||||
|         //response->addHeader("Content-Encoding", "gzip"); | ||||
|         //response->addHeader("Cache-Control", CACHE_CONTROL); | ||||
|  | ||||
|         String html = loadHtmlWithHeader("/waage.html"); | ||||
|         html.replace("{{autoTare}}", (autoTare) ? "checked" : ""); | ||||
|  | ||||
|         request->send(200, "text/html", html); | ||||
|     }); | ||||
|  | ||||
|     // Route für RFID | ||||
|   | ||||
		Reference in New Issue
	
	Block a user