Helligkeit/src/wifi.cpp

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;
}