diff --git a/html/wifi.html b/html/wifi.html
index 709a43f..cda0883 100644
--- a/html/wifi.html
+++ b/html/wifi.html
@@ -12,7 +12,7 @@
diff --git a/platformio.ini b/platformio.ini
index 4b8d1fe..ff85c2c 100644
--- a/platformio.ini
+++ b/platformio.ini
@@ -9,7 +9,7 @@
; https://docs.platformio.org/page/projectconf.html
[common]
-version = "1.2.0"
+version = "1.2.1"
[env:esp32dev]
platform = espressif32
diff --git a/src/api.cpp b/src/api.cpp
index b706dcd..8b188fe 100644
--- a/src/api.cpp
+++ b/src/api.cpp
@@ -175,20 +175,20 @@ void sendToApi(void *parameter) {
vTaskDelete(NULL);
}
-uint8_t updateSpoolTagId(String uidString, const char* payload) {
+bool updateSpoolTagId(String uidString, const char* payload) {
JsonDocument doc;
DeserializationError error = deserializeJson(doc, payload);
if (error) {
Serial.print("Fehler beim JSON-Parsing: ");
Serial.println(error.c_str());
- return 0;
+ return false;
}
// Überprüfe, ob die erforderlichen Felder vorhanden sind
if (!doc.containsKey("sm_id") || doc["sm_id"] == "") {
Serial.println("Keine Spoolman-ID gefunden.");
- return 0;
+ return false;
}
String spoolsUrl = spoolmanUrl + apiUrl + "/spool/" + doc["sm_id"].as();
@@ -207,7 +207,7 @@ uint8_t updateSpoolTagId(String uidString, const char* payload) {
SendToApiParams* params = new SendToApiParams();
if (params == nullptr) {
Serial.println("Fehler: Kann Speicher für Task-Parameter nicht allokieren.");
- return 0;
+ return false;
}
params->httpType = "PATCH";
params->spoolsUrl = spoolsUrl;
@@ -223,7 +223,7 @@ uint8_t updateSpoolTagId(String uidString, const char* payload) {
NULL // Task-Handle (nicht benötigt)
);
- return 1;
+ return true;
}
uint8_t updateSpoolWeight(String spoolId, uint16_t weight) {
diff --git a/src/api.h b/src/api.h
index de9fab4..3b80c93 100644
--- a/src/api.h
+++ b/src/api.h
@@ -17,7 +17,7 @@ bool checkSpoolmanExtraFields(); // Neue Funktion zum Überprüfen der Extrafeld
JsonDocument fetchSpoolsForWebsite(); // API-Funktion für die Webseite
JsonDocument fetchAllSpoolsInfo();
void sendAmsData(AsyncWebSocketClient *client); // Neue Funktion zum Senden von AMS-Daten
-uint8_t updateSpoolTagId(String uidString, const char* payload); // Neue Funktion zum Aktualisieren eines Spools
+bool updateSpoolTagId(String uidString, const char* payload); // Neue Funktion zum Aktualisieren eines Spools
uint8_t updateSpoolWeight(String spoolId, uint16_t weight); // Neue Funktion zum Aktualisieren des Gewichts
bool initSpoolman(); // Neue Funktion zum Initialisieren von Spoolman
diff --git a/src/nfc.cpp b/src/nfc.cpp
index 2cff742..2aed149 100644
--- a/src/nfc.cpp
+++ b/src/nfc.cpp
@@ -93,14 +93,6 @@ bool formatNdefTag() {
}
uint8_t ntag2xx_WriteNDEF(const char *payload) {
- /*
- if (!formatNdefTag()) {
- Serial.println("Fehler beim Formatieren des NDEF-Tags.");
- hasReadRfidTag = 2;
- return 0;
- }
- */
-
uint8_t tagSize = 240; // 144 bytes is maximum for NTAG213
Serial.print("Tag Size: ");Serial.println(tagSize);
@@ -137,9 +129,6 @@ uint8_t ntag2xx_WriteNDEF(const char *payload) {
return 0;
}
- //Serial.println();
- //Serial.print("Header Size: ");Serial.println(sizeof(pageHeader));
-
// Kombiniere Header und Payload
int totalSize = sizeof(pageHeader) + len;
uint8_t* combinedData = (uint8_t*) malloc(totalSize);
@@ -149,37 +138,10 @@ uint8_t ntag2xx_WriteNDEF(const char *payload) {
return 0;
}
- // Überprüfe die Kombination von Header und Payload
- /*
- Serial.print("Header: ");
- for (int i = 0; i < sizeof(pageHeader); i++) {
- Serial.print(pageHeader[i], HEX);
- Serial.print(" ");
- }
- Serial.println();
-
- Serial.print("Payload: ");
- for (int i = 0; i < len; i++) {
- Serial.print(payload[i], HEX);
- Serial.print(" ");
- }
- Serial.println();
- */
-
// Kombiniere Header und Payload
memcpy(combinedData, pageHeader, sizeof(pageHeader));
memcpy(&combinedData[sizeof(pageHeader)], payload, len);
- // Überprüfe die Kombination von Header und Payload
- /*
- Serial.print("Kombinierte Daten: ");
- for (int i = 0; i < totalSize; i++) {
- Serial.print(combinedData[i], HEX);
- Serial.print(" ");
- }
- Serial.println();
- */
-
// Schreibe die Seiten
uint8_t a = 0;
uint8_t i = 0;
@@ -188,21 +150,9 @@ uint8_t ntag2xx_WriteNDEF(const char *payload) {
int bytesToWrite = (totalSize < 4) ? totalSize : 4;
memcpy(pageBuffer, combinedData + a, bytesToWrite);
- // Überprüfe die Schreibung der Seiten
- /*
- Serial.print("Seite ");
- Serial.print(i);
- Serial.print(": ");
- for (int j = 0; j < bytesToWrite; j++) {
- Serial.print(pageBuffer[j], HEX);
- Serial.print(" ");
- }
- Serial.println();
- */
- uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 }; // Buffer to store the returned UID
- uint8_t uidLength;
- nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength, 500);
- //Serial.print("Schreibe Seite: ");Serial.println(i);
+ //uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 }; // Buffer to store the returned UID
+ //uint8_t uidLength;
+ //nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength, 100);
if (!(nfc.ntag2xx_WritePage(4+i, pageBuffer)))
{
@@ -210,8 +160,6 @@ uint8_t ntag2xx_WriteNDEF(const char *payload) {
free(combinedData);
return 0;
}
-
- //Serial.print("Seite geschrieben: ");Serial.println(i);
yield();
//esp_task_wdt_reset();
@@ -285,11 +233,15 @@ void writeJsonToTag(void *parameter) {
// Gib die erstellte NDEF-Message aus
Serial.println("Erstelle NDEF-Message...");
+ Serial.println(payload);
+
hasReadRfidTag = 3;
vTaskSuspend(RfidReaderTask);
+ vTaskDelay(500 / portTICK_PERIOD_MS);
//pauseBambuMqttTask = true;
// aktualisieren der Website wenn sich der Status ändert
sendNfcData(nullptr);
+ oledShowMessage("Waiting for NFC-Tag");
// Wait 10sec for tag
uint8_t success = 0;
@@ -326,13 +278,21 @@ void writeJsonToTag(void *parameter) {
Serial.println("NDEF-Message erfolgreich auf den Tag geschrieben");
//oledShowMessage("NFC-Tag written");
oledShowIcon("success");
- vTaskDelay(2000 / portTICK_PERIOD_MS);
+ vTaskDelay(1000 / portTICK_PERIOD_MS);
hasReadRfidTag = 5;
// aktualisieren der Website wenn sich der Status ändert
sendNfcData(nullptr);
- vTaskResume(RfidReaderTask);
pauseBambuMqttTask = false;
- updateSpoolTagId(uidString, payload);
+ if (updateSpoolTagId(uidString, payload)) {
+ uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 }; // Buffer to store the returned UID
+ uint8_t uidLength;
+ oledShowIcon("success");
+ while (nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength, 500)) {
+ yield();
+ }
+ }
+ vTaskResume(RfidReaderTask);
+ vTaskDelay(500 / portTICK_PERIOD_MS);
}
else
{
@@ -361,16 +321,19 @@ void writeJsonToTag(void *parameter) {
void startWriteJsonToTag(const char* payload) {
char* payloadCopy = strdup(payload);
-
- // Erstelle die Task
- xTaskCreate(
- writeJsonToTag, // Task-Funktion
- "WriteJsonToTagTask", // Task-Name
- 4096, // Stackgröße in Bytes
- (void*)payloadCopy, // Parameter
- rfidWriteTaskPrio, // Priorität
- NULL // Task-Handle (nicht benötigt)
- );
+
+ // Task nicht mehrfach starten
+ if (hasReadRfidTag != 3) {
+ // Erstelle die Task
+ xTaskCreate(
+ writeJsonToTag, // Task-Funktion
+ "WriteJsonToTagTask", // Task-Name
+ 4096, // Stackgröße in Bytes
+ (void*)payloadCopy, // Parameter
+ rfidWriteTaskPrio, // Priorität
+ NULL // Task-Handle (nicht benötigt)
+ );
+ }
}
void scanRfidTask(void * parameter) {