Compare commits
4 Commits
fad84e12c8
...
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?
|
||||||
ws.textAll("{\"type\":\"nfcData\", \"payload\":{}}");
|
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) {
|
lastnfcReaderState = nfcReaderState;
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void sendAmsData(AsyncWebSocketClient *client) {
|
void sendAmsData(AsyncWebSocketClient *client) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user