logLoop for console + USB/OTA envs

This commit is contained in:
Patrick Haßel 2025-01-09 11:02:17 +01:00
parent 5b9e0d3f63
commit ff14910c89
6 changed files with 136 additions and 12 deletions

View File

@ -1,19 +1,43 @@
[env:Sporttafel]
[common]
platform = espressif32
board = esp32dev
framework = arduino
build_type = debug
board_build.filesystem = littlefs
lib_deps = bblanchon/ArduinoJson
; https://github.com/adafruit/Adafruit_NeoPixel
; https://github.com/adafruit/Adafruit_NeoPixel
https://github.com/me-no-dev/ESPAsyncWebServer.git
build_flags = -DWIFI_SSID=\"HappyNet\"
-DWIFI_PKEY=\"1Grausame!Sackratte7\"
-DWIFI_HOST=\"Sporttafel\"
upload_port = 10.0.0.119
upload_protocol = espota
;upload_port = /dev/ttyUSB0
;upload_speed = 921600
monitor_port = /dev/ttyUSB0
monitor_speed = 115200
monitor_filters = esp32_exception_decoder
[env:Sporttafel_USB]
platform = ${common.platform}
board = ${common.board}
framework = ${common.framework}
build_type = ${common.build_type}
board_build.filesystem = ${common.board_build.filesystem}
lib_deps = ${common.lib_deps}
build_flags = ${common.build_flags}
monitor_port = ${common.monitor_port}
monitor_speed = ${common.monitor_speed}
monitor_filters = ${common.monitor_filters}
upload_port = /dev/ttyUSB0
upload_speed = 921600
[env:Sporttafel_OTA]
platform = ${common.platform}
board = ${common.board}
framework = ${common.framework}
build_type = ${common.build_type}
board_build.filesystem = ${common.board_build.filesystem}
lib_deps = ${common.lib_deps}
build_flags = ${common.build_flags}
monitor_port = ${common.monitor_port}
monitor_speed = ${common.monitor_speed}
monitor_filters = ${common.monitor_filters}
upload_port = /dev/ttyUSB0
upload_speed = 921600

View File

@ -31,7 +31,7 @@ void clockLoop() {
clockOffset = now;
} else {
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());
}
}
@ -39,16 +39,44 @@ bool isClockSet() {
return startupTime != 0;
}
char buffer[20];
char *getClockStr() {
const auto now = time(nullptr);
tm t{0};
char *getClockStr(const time_t epoch) {
auto now = epoch;
if (now == 0) {
now = time(nullptr);
}
tm 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);
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) {
return now < CLOCK_EPOCH_SECONDS_MIN;
}

View File

@ -7,7 +7,13 @@ void clockLoop();
bool isClockSet();
char * getClockStr();
char *getClockStr(time_t epoch = 0);
char *getStartupStr();
time_t getUptimeSeconds();
char *getUptimeStr();
bool isCorrectTime(time_t now);

View File

@ -2,6 +2,7 @@
#include <cstdarg>
#include <cstdio>
#include <WiFi.h>
#include "clock.h"
@ -15,6 +16,68 @@ void logSetup() {
info("Startup");
}
void execute(const char *cmd) {
if (strcmp(cmd, "help") == 0) {
info("HELP");
info(" network");
info(" reboot");
info(" reconnect");
info(" time");
} else if (strcmp(cmd, "network") == 0) {
info("NETWORK");
info(" %-10s %s", "mac:", WiFi.macAddress().c_str());
info(" %-10s %s", "state:", WiFi.localIP() != 0 ? "connected" : "disconnected");
info(" %-10s %s", "ssid:", WiFi.SSID().c_str());
info(" %-10s %s", "bssid:", WiFi.BSSIDstr().c_str());
info(" %-10s %s", "ip:", WiFi.localIP().toString().c_str());
info(" %-10s %s", "mask:", WiFi.subnetMask().toString().c_str());
info(" %-10s %s", "gateway:", WiFi.gatewayIP().toString().c_str());
info(" %-10s %s", "dns:", WiFi.dnsIP().toString().c_str());
} else if (strcmp(cmd, "reboot") == 0) {
info("REBOOT");
delay(1000);
yield();
ESP.restart();
} else if (strcmp(cmd, "reconnect") == 0) {
info("RECONNECT");
WiFi.disconnect();
} else if (strcmp(cmd, "time") == 0) {
info("TIME");
info(" %-10s %s", "epoch:", time(nullptr));
info(" %-10s %s", "real:", getClockStr());
info(" %-10s %s", "startup:", getStartupStr());
info(" %-10s %s", "uptime:", getUptimeStr());
} else {
info("UNKNOWN COMMAND: %s", cmd);
}
}
void logLoop() {
static char cmd[64];
static auto write = cmd;
if (Serial.available() > 0) {
const auto c = static_cast<char>(Serial.read());
switch (c) {
case 13:
execute(cmd);
write = cmd;
*write = 0;
break;
case 8:
Serial.print(c);
if (write > cmd) {
*write-- = 0;
}
break;
default:
Serial.print(c);
*write = c;
write++;
break;
}
}
}
void log(const LogLevel level, const char *format, ...) {
va_list args;
va_start(args, format);

View File

@ -10,6 +10,8 @@ enum LogLevel {
void logSetup();
void logLoop();
void error(const char *format, ...);
void warn(const char *format, ...);

View File

@ -15,6 +15,7 @@ void setup() {
}
void loop() {
logLoop();
wifiLoop();
appLoop();
}