#pragma GCC diagnostic ignored "-Wdeprecated-declarations" #include "master.h" #include // Aquacross Timer - ESP32 Master (Webserver + ESP-NOW + Anlernmodus) #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include const char *firmwareversion = "1.0.0"; // Version der Firmware void saveButtonConfig() { preferences.begin("buttons", false); preferences.putBytes("config", &buttonConfigs, sizeof(buttonConfigs)); preferences.end(); } void loadButtonConfig() { preferences.begin("buttons", true); size_t schLen = preferences.getBytesLength("config"); if (schLen == sizeof(buttonConfigs)) { preferences.getBytes("config", &buttonConfigs, schLen); } preferences.end(); } void saveBestTimes() { preferences.begin("times", false); preferences.putULong("best1", timerData.bestTime1); preferences.putULong("best2", timerData.bestTime2); preferences.end(); } void loadBestTimes() { preferences.begin("times", true); timerData.bestTime1 = preferences.getULong("best1", 0); timerData.bestTime2 = preferences.getULong("best2", 0); preferences.end(); } void saveSettings() { preferences.begin("settings", false); preferences.putULong("maxTime", maxTimeBeforeReset); preferences.putULong("maxTimeDisplay", maxTimeDisplay); preferences.end(); } void loadSettings() { preferences.begin("settings", true); maxTimeBeforeReset = preferences.getULong("maxTime", 300000); maxTimeDisplay = preferences.getULong("maxTimeDisplay", 20000); preferences.end(); } void saveWifiSettings() { preferences.begin("wifi", false); preferences.putString("ssid", ssidSTA); preferences.putString("password", passwordSTA); preferences.end(); delay(500); // Warte 2 Sekunden, bevor der Neustart erfolgt ESP.restart(); // Neustart des ESP32 } void loadLocationSettings() { preferences.begin("location", true); masterlocation = preferences.getString("location", ""); preferences.end(); } void saveLocationSettings() { preferences.begin("location", false); preferences.putString("location", masterlocation); preferences.end(); } void loadWifiSettings() { preferences.begin("wifi", true); String ssid = preferences.getString("ssid", ""); String password = preferences.getString("password", ""); ssidSTA = strdup(ssid.c_str()); passwordSTA = strdup(password.c_str()); preferences.end(); } int checkLicence() { loadLicenceFromPrefs(); String id = getUniqueDeviceID(); int tier = getLicenseTier(id, licence); // licence = stored or entered key return tier; } String getTimerDataJSON() { DynamicJsonDocument doc(1024); unsigned long currentTime = millis(); // Bahn 1 if (timerData.isRunning1) { doc["time1"] = (currentTime - timerData.localStartTime1) / 1000.0; doc["status1"] = "running"; } else if (timerData.endTime1 > 0) { doc["time1"] = (timerData.endTime1 - timerData.startTime1) / 1000.0; doc["status1"] = "finished"; } else { doc["time1"] = 0; doc["status1"] = "ready"; } // Bahn 2 if (timerData.isRunning2) { doc["time2"] = (currentTime - timerData.localStartTime2) / 1000.0; doc["status2"] = "running"; } else if (timerData.endTime2 > 0) { doc["time2"] = (timerData.endTime2 - timerData.startTime2) / 1000.0; doc["status2"] = "finished"; } else { doc["time2"] = 0; doc["status2"] = "ready"; } // Beste Zeiten doc["best1"] = timerData.bestTime1 / 1000.0; doc["best2"] = timerData.bestTime2 / 1000.0; // Lernmodus doc["learningMode"] = learningMode; if (learningMode) { String buttons[] = {"Start Bahn 1", "Stop Bahn 1", "Start Bahn 2", "Stop Bahn 2"}; doc["learningButton"] = buttons[learningStep]; } String result; serializeJson(doc, result); return result; } void setup() { Serial.begin(115200); if (!SPIFFS.begin(true)) { Serial.println("SPIFFS Mount Failed"); return; } // setup API libararies setupTimeAPI(server); setupLicenceAPI(server); setupDebugAPI(server); setupBackendRoutes(server); setupRFIDRoute(server); // Gespeicherte Daten laden loadButtonConfig(); loadBestTimes(); loadSettings(); loadWifiSettings(); loadLocationSettings(); setupWifi(); // WiFi initialisieren setupOTA(&server); setupRoutes(); setupWebSocket(); setupLED(); setupMqttServer(); // MQTT Server initialisieren // setupBattery(); // setupRFID(); } void loop() { checkAutoReset(); loopMqttServer(); // MQTT Server in der Loop aufrufen loopWebSocket(); // loopBattery(); // Batterie-Loop aufrufen // loopRFID(); // RFID Loop aufrufen }