Compare commits
4 Commits
3a1003b0af
...
8bae83ea32
| Author | SHA1 | Date | |
|---|---|---|---|
| 8bae83ea32 | |||
| 38ebd8d32a | |||
| dd64709884 | |||
| ebacfbed02 |
@ -4,6 +4,8 @@
|
|||||||
#include "clock.h"
|
#include "clock.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
|
|
||||||
|
#define BOOT_DELAY_SECONDS 3
|
||||||
|
|
||||||
void bootDelay() {
|
void bootDelay() {
|
||||||
info("Waiting for WiFi...");
|
info("Waiting for WiFi...");
|
||||||
while (!isWiFiConnected()) {
|
while (!isWiFiConnected()) {
|
||||||
@ -18,9 +20,9 @@ void bootDelay() {
|
|||||||
yield();
|
yield();
|
||||||
}
|
}
|
||||||
|
|
||||||
info("Waiting 5 seconds for OTA update...");
|
info("Waiting %d seconds for OTA update...", BOOT_DELAY_SECONDS);
|
||||||
const auto start = millis();
|
const auto start = millis();
|
||||||
while (millis() - start < 5000) {
|
while (millis() - start < BOOT_DELAY_SECONDS * 1000) {
|
||||||
wifiLoop();
|
wifiLoop();
|
||||||
yield();
|
yield();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -22,16 +22,16 @@ void clockLoop() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!ntpSet && isWiFiConnected()) {
|
if (!ntpSet && isWiFiConnected()) {
|
||||||
configTime(CLOCK_GMT_OFFSET_SECONDS, CLOCK_DST_OFFSET_SECONDS, WiFi.gatewayIP().toString().c_str(), CLOCK_NTP_SERVER2_URL);
|
configTime(CLOCK_GMT_OFFSET_SECONDS, CLOCK_DST_OFFSET_SECONDS, CLOCK_NTP_SERVER2_URL, WiFi.gatewayIP().toString().c_str());
|
||||||
ntpSet = true;
|
ntpSet = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto now = time(nullptr);
|
const auto now = time(nullptr);
|
||||||
if (isCorrectTime(now)) {
|
if (isCorrectTime(now)) {
|
||||||
clockOffset = now;
|
|
||||||
} else {
|
|
||||||
startupTime = now - clockOffset;
|
startupTime = now - clockOffset;
|
||||||
info("clock set after %ld seconds! So startup was at %s", clockOffset, getClockStr());
|
info("clock set after %ld seconds! So startup was at %s", clockOffset, getStartupStr());
|
||||||
|
} else {
|
||||||
|
clockOffset = now;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -39,18 +39,46 @@ bool isClockSet() {
|
|||||||
return startupTime != 0;
|
return startupTime != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
char buffer[20];
|
|
||||||
|
|
||||||
char *getClockStr() {
|
char *getClockStr(const time_t epoch) {
|
||||||
const auto now = time(nullptr);
|
auto now = epoch;
|
||||||
tm t{0};
|
if (now == 0) {
|
||||||
|
now = time(nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
tm t{};
|
||||||
localtime_r(&now, &t);
|
localtime_r(&now, &t);
|
||||||
|
|
||||||
|
static char buffer[20];
|
||||||
snprintf(buffer, sizeof buffer, "%04d-%02d-%02d %02d:%02d:%02d", t.tm_year + 1900, t.tm_mon + 1, t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec);
|
snprintf(buffer, sizeof buffer, "%04d-%02d-%02d %02d:%02d:%02d", t.tm_year + 1900, t.tm_mon + 1, t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec);
|
||||||
return buffer;
|
return buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char *getStartupStr() {
|
||||||
|
return getClockStr(startupTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
time_t getUptimeSeconds() {
|
||||||
|
return time(nullptr) - startupTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *getUptimeStr() {
|
||||||
|
const auto totalSeconds = getUptimeSeconds();
|
||||||
|
const auto totalMinutes = totalSeconds / 60;
|
||||||
|
const auto totalHours = totalMinutes / 60;
|
||||||
|
|
||||||
|
const auto partSeconds = totalSeconds % 60;
|
||||||
|
const auto partMinutes = totalMinutes % 60;
|
||||||
|
const auto partHours = totalHours % 24;
|
||||||
|
const auto partDays = totalHours / 24;
|
||||||
|
|
||||||
|
static char buffer[20];
|
||||||
|
snprintf(buffer, sizeof buffer, "%dd %2dh %2dm %2ds", partDays, partHours, partMinutes, partSeconds);
|
||||||
|
return buffer;
|
||||||
|
}
|
||||||
|
|
||||||
bool isCorrectTime(const time_t now) {
|
bool isCorrectTime(const time_t now) {
|
||||||
return now < CLOCK_EPOCH_SECONDS_MIN;
|
return now >= CLOCK_EPOCH_SECONDS_MIN;
|
||||||
}
|
}
|
||||||
|
|
||||||
time_t clockCorrect(const time_t t) {
|
time_t clockCorrect(const time_t t) {
|
||||||
|
|||||||
@ -7,7 +7,13 @@ void clockLoop();
|
|||||||
|
|
||||||
bool isClockSet();
|
bool isClockSet();
|
||||||
|
|
||||||
char * getClockStr();
|
char *getClockStr(time_t epoch = 0);
|
||||||
|
|
||||||
|
char *getStartupStr();
|
||||||
|
|
||||||
|
time_t getUptimeSeconds();
|
||||||
|
|
||||||
|
char *getUptimeStr();
|
||||||
|
|
||||||
bool isCorrectTime(time_t now);
|
bool isCorrectTime(time_t now);
|
||||||
|
|
||||||
|
|||||||
@ -1,13 +1,53 @@
|
|||||||
#include "log.h"
|
#include "log.h"
|
||||||
|
|
||||||
#include <cstdio>
|
|
||||||
#include <cstdarg>
|
|
||||||
|
|
||||||
#include "clock.h"
|
#include "clock.h"
|
||||||
|
|
||||||
|
void doLog(LogLevel level, const char *format, va_list args);
|
||||||
|
|
||||||
auto logLevel = DEBUG;
|
auto logLevel = DEBUG;
|
||||||
|
|
||||||
void log(const LogLevel level, const char *format, const va_list args) {
|
void logSetup() {
|
||||||
|
delay(500);
|
||||||
|
Serial.begin(115200);
|
||||||
|
info("Startup");
|
||||||
|
}
|
||||||
|
|
||||||
|
void log(const LogLevel level, const char *format, ...) {
|
||||||
|
va_list args;
|
||||||
|
va_start(args, format);
|
||||||
|
doLog(level, format, args);
|
||||||
|
va_end(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
void error(const char *format, ...) {
|
||||||
|
va_list args;
|
||||||
|
va_start(args, format);
|
||||||
|
doLog(ERROR, format, args);
|
||||||
|
va_end(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
void warn(const char *format, ...) {
|
||||||
|
va_list args;
|
||||||
|
va_start(args, format);
|
||||||
|
doLog(WARN, format, args);
|
||||||
|
va_end(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
void info(const char *format, ...) {
|
||||||
|
va_list args;
|
||||||
|
va_start(args, format);
|
||||||
|
doLog(INFO, format, args);
|
||||||
|
va_end(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
void debug(const char *format, ...) {
|
||||||
|
va_list args;
|
||||||
|
va_start(args, format);
|
||||||
|
doLog(DEBUG, format, args);
|
||||||
|
va_end(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
void doLog(const LogLevel level, const char *format, const va_list args) {
|
||||||
if (level > logLevel) {
|
if (level > logLevel) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -34,38 +74,3 @@ void log(const LogLevel level, const char *format, const va_list args) {
|
|||||||
|
|
||||||
yield();
|
yield();
|
||||||
}
|
}
|
||||||
|
|
||||||
void log(const LogLevel level, const char *format, ...) {
|
|
||||||
va_list args;
|
|
||||||
va_start(args, format);
|
|
||||||
log(level, format, args);
|
|
||||||
va_end(args);
|
|
||||||
}
|
|
||||||
|
|
||||||
void error(const char *format, ...) {
|
|
||||||
va_list args;
|
|
||||||
va_start(args, format);
|
|
||||||
log(ERROR, format, args);
|
|
||||||
va_end(args);
|
|
||||||
}
|
|
||||||
|
|
||||||
void warn(const char *format, ...) {
|
|
||||||
va_list args;
|
|
||||||
va_start(args, format);
|
|
||||||
log(WARN, format, args);
|
|
||||||
va_end(args);
|
|
||||||
}
|
|
||||||
|
|
||||||
void info(const char *format, ...) {
|
|
||||||
va_list args;
|
|
||||||
va_start(args, format);
|
|
||||||
log(INFO, format, args);
|
|
||||||
va_end(args);
|
|
||||||
}
|
|
||||||
|
|
||||||
void debug(const char *format, ...) {
|
|
||||||
va_list args;
|
|
||||||
va_start(args, format);
|
|
||||||
log(DEBUG, format, args);
|
|
||||||
va_end(args);
|
|
||||||
}
|
|
||||||
|
|||||||
@ -8,7 +8,7 @@ enum LogLevel {
|
|||||||
DEBUG = 3
|
DEBUG = 3
|
||||||
};
|
};
|
||||||
|
|
||||||
void log(LogLevel level, const char *format, ...);
|
void logSetup();
|
||||||
|
|
||||||
void error(const char *format, ...);
|
void error(const char *format, ...);
|
||||||
|
|
||||||
@ -18,4 +18,6 @@ void info(const char *format, ...);
|
|||||||
|
|
||||||
void debug(const char *format, ...);
|
void debug(const char *format, ...);
|
||||||
|
|
||||||
|
void log(LogLevel level, const char *format, ...);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -2,9 +2,10 @@
|
|||||||
|
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "boot.h"
|
#include "boot.h"
|
||||||
#include "wifi.h"
|
|
||||||
#include "http.h"
|
#include "http.h"
|
||||||
|
#include "log.h"
|
||||||
#include "mqtt.h"
|
#include "mqtt.h"
|
||||||
|
#include "wifi.h"
|
||||||
|
|
||||||
#include "sensor/DallasSensor.h"
|
#include "sensor/DallasSensor.h"
|
||||||
#include "sensor/DHT22.h"
|
#include "sensor/DHT22.h"
|
||||||
@ -19,9 +20,7 @@ NodeHeizung node = NodeHeizung();
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
Serial.begin(115200);
|
logSetup();
|
||||||
delay(500);
|
|
||||||
Serial.print("Startup\n");
|
|
||||||
bootDelay();
|
bootDelay();
|
||||||
node.setup();
|
node.setup();
|
||||||
httpSetup();
|
httpSetup();
|
||||||
|
|||||||
@ -57,6 +57,7 @@ void wifiSetupOTA() {
|
|||||||
void wifiOff() {
|
void wifiOff() {
|
||||||
info("wifi disabled");
|
info("wifi disabled");
|
||||||
wifiEnabled = false;
|
wifiEnabled = false;
|
||||||
|
WiFi.disconnect();
|
||||||
}
|
}
|
||||||
|
|
||||||
void wifiLoop() {
|
void wifiLoop() {
|
||||||
@ -64,7 +65,7 @@ void wifiLoop() {
|
|||||||
if (wifiConnected != currentState) {
|
if (wifiConnected != currentState) {
|
||||||
wifiConnected = currentState;
|
wifiConnected = currentState;
|
||||||
if (wifiConnected) {
|
if (wifiConnected) {
|
||||||
info("wifi connected: %s", WiFi.localIP().toString().c_str());
|
info("wifi connected as %s", WiFi.localIP().toString().c_str());
|
||||||
wifiSetupOTA();
|
wifiSetupOTA();
|
||||||
} else {
|
} else {
|
||||||
warn("wifi disconnected");
|
warn("wifi disconnected");
|
||||||
@ -79,6 +80,7 @@ void wifiLoop() {
|
|||||||
wifiTryMillis = millis();
|
wifiTryMillis = millis();
|
||||||
WiFiClass::hostname(wifiHost);
|
WiFiClass::hostname(wifiHost);
|
||||||
WiFi.setAutoReconnect(true);
|
WiFi.setAutoReconnect(true);
|
||||||
|
info(R"(connecting to SSID "%s" with hostname "%s")", wifiSsid, wifiHost);
|
||||||
WiFi.begin(wifiSsid, wifiPkey);
|
WiFi.begin(wifiSsid, wifiPkey);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user