#include #include #include "wifi.h" #include "mqtt.h" bool wifiConnected = false; bool timeSet = false; unsigned long wifiSince = 0; void wifiConnect() { wifiSince = max(1UL, millis()); WiFi.setHostname(HOSTNAME); WiFi.begin("HappyNet", "1Grausame!Sackratte7"); configTime(TZ_Europe_Berlin, "107.189.12.98"); ArduinoOTA.begin(); yield(); } void timeLoop() { const time_t now = time(nullptr); const time_t nowHour = now / 3600; static unsigned long lastHour = 0; if (!timeSet) { if (now > 1700000000) { timeSet = true; lastHour = nowHour; MySerial.printf("Got time: %s\n", getTimeString().c_str()); } } else { if (lastHour != nowHour) { lastHour = nowHour; MySerial.printf("%s\n", getTimeString().c_str()); } } } void wifiLoop() { ArduinoOTA.handle(); if (WiFi.localIP() == 0UL) { if (wifiConnected) { wifiConnected = false; MySerial.printf("WiFi disconnected.\n"); wifiConnect(); } else if (wifiSince == 0 || millis() - wifiSince >= 10000) { WiFi.disconnect(); yield(); wifiConnect(); } } else { if (!wifiConnected) { wifiConnected = true; MySerial.printf("WiFi connected as \"%s\" (%s)\n", HOSTNAME, WiFi.localIP().toString().c_str()); } timeLoop(); } } String getTimeString() { time_t now; time(&now); tm info{}; localtime_r(&now, &info); char buffer[32]; strftime(buffer, sizeof buffer, "%F %T %z", &info); return {buffer}; } bool isWifiConnected() { return wifiConnected; } bool isTimeSet() { return timeSet; }