Compare commits
	
		
			9 Commits
		
	
	
		
			v1.4.12
			...
			9ed3c70c01
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 9ed3c70c01 | |||
| e23f3a2151 | |||
| f73306f0b9 | |||
| a450d4bd1a | |||
| d48d994c00 | |||
| 32bb85f897 | |||
| e9d32ee060 | |||
| aba28422bd | |||
| 4a55620d39 | 
							
								
								
									
										21
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								CHANGELOG.md
									
									
									
									
									
								
							| @@ -1,5 +1,26 @@ | ||||
| # Changelog | ||||
|  | ||||
| ## [1.5.1] - 2025-03-30 | ||||
| ### Changed | ||||
| - update version to 1.5.1 and improve OTA update handling with task management | ||||
|  | ||||
|  | ||||
| ## [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 | ||||
|   | ||||
| @@ -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,8 +9,8 @@ | ||||
| ; https://docs.platformio.org/page/projectconf.html | ||||
|  | ||||
| [common] | ||||
| version = "1.4.12" | ||||
| to_old_version = "1.4.0" | ||||
| version = "1.5.1" | ||||
| to_old_version = "1.5.0" | ||||
|  | ||||
| ## | ||||
| [env:esp32dev] | ||||
|   | ||||
| @@ -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')) | ||||
|   | ||||
							
								
								
									
										35
									
								
								src/main.cpp
									
									
									
									
									
								
							
							
						
						
									
										35
									
								
								src/main.cpp
									
									
									
									
									
								
							| @@ -48,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 | ||||
| @@ -57,19 +65,6 @@ void setup() { | ||||
|  | ||||
|   // Aktuellen Task (loopTask) zum Watchdog hinzufügen | ||||
|   esp_task_wdt_add(NULL); | ||||
|  | ||||
|   // Touch Sensor | ||||
|   pinMode(TTP223_PIN, INPUT_PULLUP); | ||||
|   if (digitalRead(TTP223_PIN) == HIGH)  | ||||
|   { | ||||
|     Serial.println("Touch Sensor is not connected"); | ||||
|     touchSensorConnected = false; | ||||
|   }  | ||||
|   else  | ||||
|   { | ||||
|     Serial.println("Touch Sensor is connected"); | ||||
|     touchSensorConnected | ||||
|   } | ||||
| } | ||||
|  | ||||
|  | ||||
| @@ -184,8 +179,18 @@ void loop() { | ||||
|   { | ||||
|     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) | ||||
|     if (abs(weight - lastWeight) <= 2 && weight > 5) | ||||
|     { | ||||
|       weigthCouterToApi++; | ||||
|     }  | ||||
|   | ||||
							
								
								
									
										33
									
								
								src/ota.cpp
									
									
									
									
									
								
							
							
						
						
									
										33
									
								
								src/ota.cpp
									
									
									
									
									
								
							| @@ -1,6 +1,10 @@ | ||||
| #include <Arduino.h> | ||||
| #include <website.h> | ||||
| #include <commonFS.h> | ||||
| #include "scale.h" | ||||
| #include "bambu.h" | ||||
| #include "nfc.h" | ||||
|  | ||||
|  | ||||
| // Globale Variablen für Config Backups hinzufügen | ||||
| String bambuCredentialsBackup; | ||||
| @@ -151,6 +155,25 @@ void handleUpdate(AsyncWebServer &server) { | ||||
|  | ||||
|     updateHandler->onUpload([](AsyncWebServerRequest *request, String filename, | ||||
|                              size_t index, uint8_t *data, size_t len, bool final) { | ||||
|  | ||||
|         // Disable all Tasks | ||||
|         if (BambuMqttTask != NULL)  | ||||
|         { | ||||
|             Serial.println("Delete BambuMqttTask"); | ||||
|             vTaskDelete(BambuMqttTask); | ||||
|             BambuMqttTask = NULL; | ||||
|         } | ||||
|         if (ScaleTask) { | ||||
|             Serial.println("Delete ScaleTask"); | ||||
|             vTaskDelete(ScaleTask); | ||||
|             ScaleTask = NULL; | ||||
|         } | ||||
|         if (RfidReaderTask) { | ||||
|             Serial.println("Delete RfidReaderTask"); | ||||
|             vTaskDelete(RfidReaderTask); | ||||
|             RfidReaderTask = NULL; | ||||
|         } | ||||
|  | ||||
|         if (!index) { | ||||
|             updateTotalSize = request->contentLength(); | ||||
|             updateWritten = 0; | ||||
| @@ -159,9 +182,9 @@ void handleUpdate(AsyncWebServer &server) { | ||||
|             if (isSpiffsUpdate) { | ||||
|                 // Backup vor dem Update | ||||
|                 sendUpdateProgress(0, "backup", "Backing up configurations..."); | ||||
|                 delay(200); | ||||
|                 vTaskDelay(200 / portTICK_PERIOD_MS); | ||||
|                 backupJsonConfigs(); | ||||
|                 delay(200); | ||||
|                 vTaskDelay(200 / portTICK_PERIOD_MS); | ||||
|                  | ||||
|                 const esp_partition_t *partition = esp_partition_find_first(ESP_PARTITION_TYPE_DATA, ESP_PARTITION_SUBTYPE_DATA_SPIFFS, NULL); | ||||
|                 if (!partition || !Update.begin(partition->size, U_SPIFFS)) { | ||||
| @@ -169,14 +192,14 @@ void handleUpdate(AsyncWebServer &server) { | ||||
|                     return; | ||||
|                 } | ||||
|                 sendUpdateProgress(5, "starting", "Starting SPIFFS update..."); | ||||
|                 delay(200); | ||||
|                 vTaskDelay(200 / portTICK_PERIOD_MS); | ||||
|             } else { | ||||
|                 if (!Update.begin(updateTotalSize)) { | ||||
|                     request->send(400, "application/json", "{\"success\":false,\"message\":\"Update initialization failed\"}"); | ||||
|                     return; | ||||
|                 } | ||||
|                 sendUpdateProgress(0, "starting", "Starting firmware update..."); | ||||
|                 delay(200); | ||||
|                 vTaskDelay(200 / portTICK_PERIOD_MS); | ||||
|             } | ||||
|         } | ||||
|  | ||||
| @@ -202,7 +225,7 @@ void handleUpdate(AsyncWebServer &server) { | ||||
|             if (currentProgress != lastProgress && (currentProgress % 10 == 0 || final)) { | ||||
|                 sendUpdateProgress(currentProgress, "uploading"); | ||||
|                 oledShowMessage("Update: " + String(currentProgress) + "%"); | ||||
|                 delay(50); | ||||
|                 vTaskDelay(50 / portTICK_PERIOD_MS); | ||||
|                 lastProgress = currentProgress; | ||||
|             } | ||||
|         } | ||||
|   | ||||
| @@ -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; | ||||
|  | ||||
|   | ||||
| @@ -75,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 { | ||||
| @@ -203,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