MQTT messages. Button anleren, Wifi frontend

This commit is contained in:
Carsten Graf
2025-06-05 23:34:11 +02:00
parent 3b4f63f072
commit e0d3031d6f
10 changed files with 269 additions and 114 deletions

View File

@@ -24,100 +24,11 @@ const char* firmwareversion = "1.0.0"; // Version der Firmware
void handleLearningMode(const uint8_t* mac) {
// Prüfen ob MAC bereits einem anderen Button zugewiesen ist
if (buttonConfigs.start1.isAssigned && memcmp(buttonConfigs.start1.mac, mac, 6) == 0) {
Serial.println("Diese MAC ist bereits zugewiesen - wird ignoriert");
return;
}
if (buttonConfigs.stop1.isAssigned && memcmp(buttonConfigs.stop1.mac, mac, 6) == 0) {
Serial.println("Diese MAC ist bereits zugewiesen - wird ignoriert");
return;
}
if (buttonConfigs.start2.isAssigned && memcmp(buttonConfigs.start2.mac, mac, 6) == 0) {
Serial.println("Diese MAC ist bereits zugewiesen - wird ignoriert");
return;
}
if (buttonConfigs.stop2.isAssigned && memcmp(buttonConfigs.stop2.mac, mac, 6) == 0) {
Serial.println("Diese MAC ist bereits zugewiesen - wird ignoriert");
return;
}
// MAC ist noch nicht zugewiesen, normal fortfahren
switch(learningStep) {
case 0: // Start1
memcpy(buttonConfigs.start1.mac, mac, 6);
buttonConfigs.start1.isAssigned = true;
Serial.println("Start1 Button zugewiesen");
break;
case 1: // Stop1
memcpy(buttonConfigs.stop1.mac, mac, 6);
buttonConfigs.stop1.isAssigned = true;
Serial.println("Stop1 Button zugewiesen");
break;
case 2: // Start2
memcpy(buttonConfigs.start2.mac, mac, 6);
buttonConfigs.start2.isAssigned = true;
Serial.println("Start2 Button zugewiesen");
break;
case 3: // Stop2
memcpy(buttonConfigs.stop2.mac, mac, 6);
buttonConfigs.stop2.isAssigned = true;
Serial.println("Stop2 Button zugewiesen");
break;
}
learningStep++;
if (learningStep >= 4) {
learningMode = false;
learningStep = 0;
saveButtonConfig();
Serial.println("Lernmodus beendet!");
}
}
void handleStartLearning() {
learningMode = true;
// Count assigned buttons and set appropriate learning step
int assignedButtons = 0;
if (buttonConfigs.start1.isAssigned) assignedButtons++;
if (buttonConfigs.stop1.isAssigned) assignedButtons++;
if (buttonConfigs.start2.isAssigned) assignedButtons++;
if (buttonConfigs.stop2.isAssigned) assignedButtons++;
learningStep = assignedButtons;
Serial.printf("Learning mode started - %d buttons already assigned, continuing at step %d\n",
assignedButtons, learningStep);
}
void handleLearningStatus() {
DynamicJsonDocument doc(256);
doc["active"] = learningMode;
doc["step"] = learningStep;
String response;
serializeJson(doc, response);
}
void unlearnButton() {
memset(buttonConfigs.start1.mac, 0, 6);
buttonConfigs.start1.isAssigned = false;
memset(buttonConfigs.stop1.mac, 0, 6);
buttonConfigs.stop1.isAssigned = false;
memset(buttonConfigs.start2.mac, 0, 6);
buttonConfigs.start2.isAssigned = false;
memset(buttonConfigs.stop2.mac, 0, 6);
buttonConfigs.stop2.isAssigned = false;
saveButtonConfig();
Serial.println("Buttons wurden verlernt.");
}
void handleStart1() {
if (!timerData.isRunning1) {
if (!timerData.isRunning1 && timerData.isReady1) {
timerData.isReady1 = false; // Setze auf "Nicht bereit" bis Stopp
timerData.startTime1 = millis();
timerData.isRunning1 = true;
timerData.endTime1 = 0;
@@ -141,7 +52,8 @@ void handleStop1() {
}
void handleStart2() {
if (!timerData.isRunning2) {
if (!timerData.isRunning2 && timerData.isReady2) {
timerData.isReady2 = false; // Setze auf "Nicht bereit" bis Stopp
timerData.startTime2 = millis();
timerData.isRunning2 = true;
timerData.endTime2 = 0;
@@ -185,6 +97,7 @@ void checkAutoReset() {
timerData.startTime1 = 0;
timerData.endTime1 = 0;
timerData.finishedSince1 = 0;
timerData.isReady1 = true; // Zurücksetzen auf "Bereit"
Serial.println("Bahn 1 automatisch auf 'Bereit' zurückgesetzt");
}
}
@@ -194,6 +107,7 @@ void checkAutoReset() {
timerData.startTime2 = 0;
timerData.endTime2 = 0;
timerData.finishedSince2 = 0;
timerData.isReady2 = true; // Zurücksetzen auf "Bereit"
Serial.println("Bahn 2 automatisch auf 'Bereit' zurückgesetzt");
}
}
@@ -321,12 +235,11 @@ void setup() {
setupRoutes();
setupLED();
setupMqttServer(); // MQTT Server initialisieren
}
void loop() {
checkAutoReset();
loopMqttServer(); // MQTT Server in der Loop aufrufen
delay(100);
}