76 lines
1.6 KiB
C++
76 lines
1.6 KiB
C++
#include <TZ.h>
|
|
#include <ArduinoOTA.h>
|
|
#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;
|
|
} |