Compare commits
	
		
			4 Commits
		
	
	
		
			v1.4.10
			...
			7fd01bd1b9
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 7fd01bd1b9 | |||
| 458cc4eaf2 | |||
|  | ac8adca84d | ||
|  | c701149c64 | 
| @@ -3,7 +3,8 @@ | |||||||
| #include <ArduinoJson.h> | #include <ArduinoJson.h> | ||||||
| #include "commonFS.h" | #include "commonFS.h" | ||||||
|  |  | ||||||
| bool spoolman_connected = false; | volatile spoolmanApiStateType spoolmanApiState = API_INIT; | ||||||
|  | //bool spoolman_connected = false; | ||||||
| String spoolmanUrl = ""; | String spoolmanUrl = ""; | ||||||
| bool octoEnabled = false; | bool octoEnabled = false; | ||||||
| String octoUrl = ""; | String octoUrl = ""; | ||||||
| @@ -85,6 +86,7 @@ JsonDocument fetchSingleSpoolInfo(int spoolId) { | |||||||
| } | } | ||||||
|  |  | ||||||
| void sendToApi(void *parameter) { | void sendToApi(void *parameter) { | ||||||
|  |     spoolmanApiState = API_TRANSMITTING; | ||||||
|     SendToApiParams* params = (SendToApiParams*)parameter; |     SendToApiParams* params = (SendToApiParams*)parameter; | ||||||
|  |  | ||||||
|     // Extrahiere die Werte |     // Extrahiere die Werte | ||||||
| @@ -119,6 +121,7 @@ void sendToApi(void *parameter) { | |||||||
|     // Speicher freigeben |     // Speicher freigeben | ||||||
|     delete params; |     delete params; | ||||||
|     vTaskDelete(NULL); |     vTaskDelete(NULL); | ||||||
|  |     spoolmanApiState = API_IDLE; | ||||||
| } | } | ||||||
|  |  | ||||||
| bool updateSpoolTagId(String uidString, const char* payload) { | bool updateSpoolTagId(String uidString, const char* payload) { | ||||||
| @@ -479,7 +482,8 @@ bool checkSpoolmanInstance(const String& url) { | |||||||
|                     return false; |                     return false; | ||||||
|                 } |                 } | ||||||
|  |  | ||||||
|                 spoolman_connected = true; |                 spoolmanApiState = API_IDLE; | ||||||
|  |                 oledShowTopRow(); | ||||||
|                 return strcmp(status, "healthy") == 0; |                 return strcmp(status, "healthy") == 0; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|   | |||||||
| @@ -6,7 +6,13 @@ | |||||||
| #include "website.h" | #include "website.h" | ||||||
| #include "display.h" | #include "display.h" | ||||||
| #include <ArduinoJson.h> | #include <ArduinoJson.h> | ||||||
|  | typedef enum { | ||||||
|  |     API_INIT, | ||||||
|  |     API_IDLE, | ||||||
|  |     API_TRANSMITTING | ||||||
|  | } spoolmanApiStateType; | ||||||
|  |  | ||||||
|  | extern volatile spoolmanApiStateType spoolmanApiState; | ||||||
| extern bool spoolman_connected; | extern bool spoolman_connected; | ||||||
| extern String spoolmanUrl; | extern String spoolmanUrl; | ||||||
| extern bool octoEnabled; | extern bool octoEnabled; | ||||||
|   | |||||||
| @@ -177,7 +177,7 @@ void oledShowTopRow() { | |||||||
|         display.drawBitmap(50, 0, bitmap_off , 16, 16, WHITE); |         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); |         display.drawBitmap(80, 0, bitmap_spoolman_on , 16, 16, WHITE); | ||||||
|     } else { |     } else { | ||||||
|         display.drawBitmap(80, 0, bitmap_off , 16, 16, WHITE); |         display.drawBitmap(80, 0, bitmap_off , 16, 16, WHITE); | ||||||
|   | |||||||
							
								
								
									
										11
									
								
								src/main.cpp
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								src/main.cpp
									
									
									
									
									
								
							| @@ -122,7 +122,7 @@ void loop() { | |||||||
|  |  | ||||||
|     if (intervalElapsed(currentMillis, lastAutoSetBambuAmsTime, autoSetBambuAmsInterval))  |     if (intervalElapsed(currentMillis, lastAutoSetBambuAmsTime, autoSetBambuAmsInterval))  | ||||||
|     { |     { | ||||||
|       if (hasReadRfidTag == 0) |       if (nfcReaderState == NFC_IDLE) | ||||||
|       { |       { | ||||||
|         lastAutoSetBambuAmsTime = currentMillis; |         lastAutoSetBambuAmsTime = currentMillis; | ||||||
|         oledShowMessage("Auto Set         " + String(autoSetBambuAmsCounter - autoAmsCounter) + "s"); |         oledShowMessage("Auto Set         " + String(autoSetBambuAmsCounter - autoAmsCounter) + "s"); | ||||||
| @@ -156,7 +156,7 @@ void loop() { | |||||||
|   // Ausgabe der Waage auf Display |   // Ausgabe der Waage auf Display | ||||||
|   if(pauseMainTask == 0) |   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); |       (weight < 2) ? ((weight < -2) ? oledShowMessage("!! -0") : oledShowWeight(0)) : oledShowWeight(weight); | ||||||
|     } |     } | ||||||
| @@ -169,7 +169,7 @@ void loop() { | |||||||
|  |  | ||||||
|  |  | ||||||
|   // Wenn Timer abgelaufen und nicht gerade ein RFID-Tag geschrieben wird |   // 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; |     lastWeightReadTime = currentMillis; | ||||||
|  |  | ||||||
| @@ -186,7 +186,8 @@ void loop() { | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   // reset weight counter after writing tag |   // 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; |     weigthCouterToApi = 0; | ||||||
|   } |   } | ||||||
| @@ -194,7 +195,7 @@ void loop() { | |||||||
|   lastWeight = weight; |   lastWeight = weight; | ||||||
|  |  | ||||||
|   // Wenn ein Tag mit SM id erkannte wurde und der Waage Counter anspricht an SM Senden |   // 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"); |     oledShowIcon("loading"); | ||||||
|     if (updateSpoolWeight(spoolId, weight))  |     if (updateSpoolWeight(spoolId, weight))  | ||||||
|     { |     { | ||||||
|   | |||||||
							
								
								
									
										28
									
								
								src/nfc.cpp
									
									
									
									
									
								
							
							
						
						
									
										28
									
								
								src/nfc.cpp
									
									
									
									
									
								
							| @@ -18,7 +18,7 @@ String spoolId = ""; | |||||||
| String nfcJsonData = ""; | String nfcJsonData = ""; | ||||||
| volatile bool pauseBambuMqttTask = false; | volatile bool pauseBambuMqttTask = false; | ||||||
|  |  | ||||||
| volatile uint8_t hasReadRfidTag = 0; | volatile nfcReaderStateType nfcReaderState = NFC_IDLE; | ||||||
| // 0 = nicht gelesen | // 0 = nicht gelesen | ||||||
| // 1 = erfolgreich gelesen | // 1 = erfolgreich gelesen | ||||||
| // 2 = fehler beim Lesen | // 2 = fehler beim Lesen | ||||||
| @@ -242,7 +242,7 @@ void writeJsonToTag(void *parameter) { | |||||||
|   Serial.println("Erstelle NDEF-Message..."); |   Serial.println("Erstelle NDEF-Message..."); | ||||||
|   Serial.println(payload); |   Serial.println(payload); | ||||||
|  |  | ||||||
|   hasReadRfidTag = 3; |   nfcReaderState = NFC_WRITING; | ||||||
|   vTaskSuspend(RfidReaderTask); |   vTaskSuspend(RfidReaderTask); | ||||||
|   vTaskDelay(50 / portTICK_PERIOD_MS); |   vTaskDelay(50 / portTICK_PERIOD_MS); | ||||||
|  |  | ||||||
| @@ -288,7 +288,7 @@ void writeJsonToTag(void *parameter) { | |||||||
|         //oledShowMessage("NFC-Tag written"); |         //oledShowMessage("NFC-Tag written"); | ||||||
|         oledShowIcon("success"); |         oledShowIcon("success"); | ||||||
|         vTaskDelay(1000 / portTICK_PERIOD_MS); |         vTaskDelay(1000 / portTICK_PERIOD_MS); | ||||||
|         hasReadRfidTag = 5; |         nfcReaderState = NFC_WRITE_SUCCESS; | ||||||
|         // aktualisieren der Website wenn sich der Status ändert |         // aktualisieren der Website wenn sich der Status ändert | ||||||
|         sendNfcData(nullptr); |         sendNfcData(nullptr); | ||||||
|         pauseBambuMqttTask = false; |         pauseBambuMqttTask = false; | ||||||
| @@ -310,7 +310,7 @@ void writeJsonToTag(void *parameter) { | |||||||
|         Serial.println("Fehler beim Schreiben der NDEF-Message auf den Tag"); |         Serial.println("Fehler beim Schreiben der NDEF-Message auf den Tag"); | ||||||
|         oledShowIcon("failed"); |         oledShowIcon("failed"); | ||||||
|         vTaskDelay(2000 / portTICK_PERIOD_MS); |         vTaskDelay(2000 / portTICK_PERIOD_MS); | ||||||
|         hasReadRfidTag = 4; |         nfcReaderState = NFC_WRITE_ERROR; | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|   else |   else | ||||||
| @@ -318,7 +318,7 @@ void writeJsonToTag(void *parameter) { | |||||||
|     Serial.println("Fehler: Kein Tag zu schreiben gefunden."); |     Serial.println("Fehler: Kein Tag zu schreiben gefunden."); | ||||||
|     oledShowMessage("No NFC-Tag found"); |     oledShowMessage("No NFC-Tag found"); | ||||||
|     vTaskDelay(2000 / portTICK_PERIOD_MS); |     vTaskDelay(2000 / portTICK_PERIOD_MS); | ||||||
|     hasReadRfidTag = 0; |     nfcReaderState = NFC_IDLE; | ||||||
|   } |   } | ||||||
|    |    | ||||||
|   sendWriteResult(nullptr, success); |   sendWriteResult(nullptr, success); | ||||||
| @@ -334,7 +334,7 @@ void startWriteJsonToTag(const char* payload) { | |||||||
|   char* payloadCopy = strdup(payload); |   char* payloadCopy = strdup(payload); | ||||||
|    |    | ||||||
|   // Task nicht mehrfach starten |   // Task nicht mehrfach starten | ||||||
|   if (hasReadRfidTag != 3) { |   if (nfcReaderState != NFC_WRITING) { | ||||||
|     // Erstelle die Task |     // Erstelle die Task | ||||||
|     xTaskCreate( |     xTaskCreate( | ||||||
|         writeJsonToTag,        // Task-Funktion |         writeJsonToTag,        // Task-Funktion | ||||||
| @@ -351,7 +351,7 @@ void scanRfidTask(void * parameter) { | |||||||
|   Serial.println("RFID Task gestartet"); |   Serial.println("RFID Task gestartet"); | ||||||
|   for(;;) { |   for(;;) { | ||||||
|     // Wenn geschrieben wird Schleife aussetzen |     // Wenn geschrieben wird Schleife aussetzen | ||||||
|     if (hasReadRfidTag != 3) |     if (nfcReaderState != NFC_WRITING) | ||||||
|     { |     { | ||||||
|       yield(); |       yield(); | ||||||
|  |  | ||||||
| @@ -363,12 +363,12 @@ void scanRfidTask(void * parameter) { | |||||||
|  |  | ||||||
|       foundNfcTag(nullptr, success); |       foundNfcTag(nullptr, success); | ||||||
|        |        | ||||||
|       if (success && hasReadRfidTag != 1) |       if (success && nfcReaderState != NFC_READ_SUCCESS) | ||||||
|       { |       { | ||||||
|         // Display some basic information about the card |         // Display some basic information about the card | ||||||
|         Serial.println("Found an ISO14443A card"); |         Serial.println("Found an ISO14443A card"); | ||||||
|  |  | ||||||
|         hasReadRfidTag = 6; |         nfcReaderState = NFC_READING; | ||||||
|  |  | ||||||
|         oledShowIcon("transfer"); |         oledShowIcon("transfer"); | ||||||
|         vTaskDelay(500 / portTICK_PERIOD_MS); |         vTaskDelay(500 / portTICK_PERIOD_MS); | ||||||
| @@ -406,11 +406,11 @@ void scanRfidTask(void * parameter) { | |||||||
|             { |             { | ||||||
|               oledShowMessage("NFC-Tag unknown"); |               oledShowMessage("NFC-Tag unknown"); | ||||||
|               vTaskDelay(2000 / portTICK_PERIOD_MS); |               vTaskDelay(2000 / portTICK_PERIOD_MS); | ||||||
|               hasReadRfidTag = 2; |               nfcReaderState = NFC_READ_ERROR; | ||||||
|             } |             } | ||||||
|             else  |             else  | ||||||
|             { |             { | ||||||
|               hasReadRfidTag = 1; |               nfcReaderState = NFC_READ_SUCCESS; | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             free(data); |             free(data); | ||||||
| @@ -418,7 +418,7 @@ void scanRfidTask(void * parameter) { | |||||||
|           else |           else | ||||||
|           { |           { | ||||||
|             oledShowMessage("NFC-Tag read error"); |             oledShowMessage("NFC-Tag read error"); | ||||||
|             hasReadRfidTag = 2; |             nfcReaderState = NFC_READ_ERROR; | ||||||
|           } |           } | ||||||
|         } |         } | ||||||
|         else |         else | ||||||
| @@ -427,9 +427,9 @@ void scanRfidTask(void * parameter) { | |||||||
|         } |         } | ||||||
|       } |       } | ||||||
|  |  | ||||||
|       if (!success && hasReadRfidTag > 0) |       if (!success && nfcReaderState != NFC_IDLE) | ||||||
|       { |       { | ||||||
|         hasReadRfidTag = 0; |         nfcReaderState = NFC_IDLE; | ||||||
|         //uidString = ""; |         //uidString = ""; | ||||||
|         nfcJsonData = ""; |         nfcJsonData = ""; | ||||||
|         Serial.println("Tag entfernt"); |         Serial.println("Tag entfernt"); | ||||||
|   | |||||||
							
								
								
									
										14
									
								
								src/nfc.h
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								src/nfc.h
									
									
									
									
									
								
							| @@ -3,6 +3,16 @@ | |||||||
|  |  | ||||||
| #include <Arduino.h> | #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 startNfc(); | ||||||
| void scanRfidTask(void * parameter); | void scanRfidTask(void * parameter); | ||||||
| void startWriteJsonToTag(const char* payload); | void startWriteJsonToTag(const char* payload); | ||||||
| @@ -10,7 +20,9 @@ void startWriteJsonToTag(const char* payload); | |||||||
| extern TaskHandle_t RfidReaderTask; | extern TaskHandle_t RfidReaderTask; | ||||||
| extern String nfcJsonData; | extern String nfcJsonData; | ||||||
| extern String spoolId; | extern String spoolId; | ||||||
| extern volatile uint8_t hasReadRfidTag; | extern volatile nfcReaderStateType nfcReaderState; | ||||||
| extern volatile bool pauseBambuMqttTask; | extern volatile bool pauseBambuMqttTask; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #endif | #endif | ||||||
| @@ -22,7 +22,7 @@ AsyncWebServer server(webserverPort); | |||||||
| AsyncWebSocket ws("/ws"); | AsyncWebSocket ws("/ws"); | ||||||
|  |  | ||||||
| uint8_t lastSuccess = 0; | 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) { | 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; |         JsonDocument doc; | ||||||
|         deserializeJson(doc, message); |         deserializeJson(doc, message); | ||||||
|  |  | ||||||
|  |         bool spoolmanConnected = (spoolmanApiState != API_INIT); | ||||||
|  |  | ||||||
|         if (doc["type"] == "heartbeat") { |         if (doc["type"] == "heartbeat") { | ||||||
|             // Sende Heartbeat-Antwort |             // Sende Heartbeat-Antwort | ||||||
|             ws.text(client->id(), "{" |             ws.text(client->id(), "{" | ||||||
|                 "\"type\":\"heartbeat\"," |                 "\"type\":\"heartbeat\"," | ||||||
|                 "\"freeHeap\":" + String(ESP.getFreeHeap()/1024) + "," |                 "\"freeHeap\":" + String(ESP.getFreeHeap()/1024) + "," | ||||||
|                 "\"bambu_connected\":" + String(bambu_connected) + "," |                 "\"bambu_connected\":" + String(bambu_connected) + "," | ||||||
|                 "\"spoolman_connected\":" + String(spoolman_connected) + "" |                 "\"spoolman_connected\":" + String(spoolmanConnected) + "" | ||||||
|                 "}"); |                 "}"); | ||||||
|         } |         } | ||||||
|  |  | ||||||
| @@ -139,34 +141,31 @@ void foundNfcTag(AsyncWebSocketClient *client, uint8_t success) { | |||||||
| } | } | ||||||
|  |  | ||||||
| void sendNfcData(AsyncWebSocketClient *client) { | void sendNfcData(AsyncWebSocketClient *client) { | ||||||
|     if (lastHasReadRfidTag == hasReadRfidTag) return; |     if (lastnfcReaderState == nfcReaderState) return; | ||||||
|     if (hasReadRfidTag == 0) { |     // TBD: Why is there no status for reading the tag? | ||||||
|  |     switch(nfcReaderState){ | ||||||
|  |         case NFC_IDLE: | ||||||
|             ws.textAll("{\"type\":\"nfcData\", \"payload\":{}}"); |             ws.textAll("{\"type\":\"nfcData\", \"payload\":{}}"); | ||||||
|     } |             break; | ||||||
|     else if (hasReadRfidTag == 1) { |         case NFC_READ_SUCCESS: | ||||||
|             ws.textAll("{\"type\":\"nfcData\", \"payload\":" + nfcJsonData + "}"); |             ws.textAll("{\"type\":\"nfcData\", \"payload\":" + nfcJsonData + "}"); | ||||||
|     } |             break; | ||||||
|     else if (hasReadRfidTag == 2) |         case NFC_READ_ERROR: | ||||||
|     { |  | ||||||
|             ws.textAll("{\"type\":\"nfcData\", \"payload\":{\"error\":\"Empty Tag or Data not readable\"}}"); |             ws.textAll("{\"type\":\"nfcData\", \"payload\":{\"error\":\"Empty Tag or Data not readable\"}}"); | ||||||
|     } |             break; | ||||||
|     else if (hasReadRfidTag == 3) |         case NFC_WRITING: | ||||||
|     { |  | ||||||
|             ws.textAll("{\"type\":\"nfcData\", \"payload\":{\"info\":\"Schreibe Tag...\"}}"); |             ws.textAll("{\"type\":\"nfcData\", \"payload\":{\"info\":\"Schreibe Tag...\"}}"); | ||||||
|     } |             break; | ||||||
|     else if (hasReadRfidTag == 4) |         case NFC_WRITE_SUCCESS: | ||||||
|     { |  | ||||||
|         ws.textAll("{\"type\":\"nfcData\", \"payload\":{\"error\":\"Error writing to Tag\"}}"); |  | ||||||
|     } |  | ||||||
|     else if (hasReadRfidTag == 5) |  | ||||||
|     { |  | ||||||
|             ws.textAll("{\"type\":\"nfcData\", \"payload\":{\"info\":\"Tag erfolgreich geschrieben\"}}"); |             ws.textAll("{\"type\":\"nfcData\", \"payload\":{\"info\":\"Tag erfolgreich geschrieben\"}}"); | ||||||
|     } |             break; | ||||||
|     else  |         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\"}}"); |             ws.textAll("{\"type\":\"nfcData\", \"payload\":{\"error\":\"Something went wrong\"}}"); | ||||||
|     } |     } | ||||||
|     lastHasReadRfidTag = hasReadRfidTag; |     lastnfcReaderState = nfcReaderState; | ||||||
| } | } | ||||||
|  |  | ||||||
| void sendAmsData(AsyncWebSocketClient *client) { | void sendAmsData(AsyncWebSocketClient *client) { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user