diff --git a/html/waage.html b/html/waage.html
index 7f28ca4..40ffa5c 100644
--- a/html/waage.html
+++ b/html/waage.html
@@ -55,6 +55,7 @@
Sacle Calibration
+ Enable Auto-TARE
@@ -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();
diff --git a/scripts/gzip_files.py b/scripts/gzip_files.py
index c863edb..b67c70a 100644
--- a/scripts/gzip_files.py
+++ b/scripts/gzip_files.py
@@ -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'))
diff --git a/src/main.cpp b/src/main.cpp
index 24da9f0..3135fcc 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -48,16 +48,6 @@ void setup() {
// NFC Reader
startNfc();
- // Scale
- start_scale();
-
- // WDT initialisieren mit 10 Sekunden Timeout
- bool panic = true; // Wenn true, löst ein WDT-Timeout einen System-Panik aus
- esp_task_wdt_init(10, panic);
-
- // Aktuellen Task (loopTask) zum Watchdog hinzufügen
- esp_task_wdt_add(NULL);
-
// Touch Sensor
pinMode(TTP223_PIN, INPUT_PULLUP);
if (digitalRead(TTP223_PIN) == LOW)
@@ -65,6 +55,16 @@ void setup() {
Serial.println("Touch Sensor is connected");
touchSensorConnected = true;
}
+
+ // Scale
+ start_scale(touchSensorConnected);
+
+ // WDT initialisieren mit 10 Sekunden Timeout
+ bool panic = true; // Wenn true, löst ein WDT-Timeout einen System-Panik aus
+ esp_task_wdt_init(10, panic);
+
+ // Aktuellen Task (loopTask) zum Watchdog hinzufügen
+ esp_task_wdt_add(NULL);
}
@@ -179,6 +179,16 @@ 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)
{
diff --git a/src/scale.cpp b/src/scale.cpp
index 92476f4..5808829 100644
--- a/src/scale.cpp
+++ b/src/scale.cpp
@@ -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 ");
diff --git a/src/scale.h b/src/scale.h
index 4f99b7c..96f59a4 100644
--- a/src/scale.h
+++ b/src/scale.h
@@ -4,17 +4,19 @@
#include
#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;
diff --git a/src/website.cpp b/src/website.cpp
index bf9e0fb..0ff02db 100644
--- a/src/website.cpp
+++ b/src/website.cpp
@@ -75,6 +75,10 @@ void onWsEvent(AsyncWebSocket *server, AsyncWebSocketClient *client, AwsEventTyp
success = calibrate_scale();
}
+ if (doc["payload"] == "setAutoTare") {
+ success = setAutoTare(doc["enabled"].as());
+ }
+
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