Implemented first readonly version of ntp settings

This commit is contained in:
Thomas Basler 2022-04-17 23:13:36 +02:00
parent 821b9b16d1
commit 1f692f241f
8 changed files with 107 additions and 2 deletions

View File

@ -3,12 +3,15 @@
#include <Arduino.h> #include <Arduino.h>
#define CONFIG_FILENAME "/config.bin" #define CONFIG_FILENAME "/config.bin"
#define CONFIG_VERSION 0x00010000 // 0.1.0 #define CONFIG_VERSION 0x00010400 // 0.1.4 // make sure to clean all after change
#define WIFI_MAX_SSID_STRLEN 31 #define WIFI_MAX_SSID_STRLEN 31
#define WIFI_MAX_PASSWORD_STRLEN 31 #define WIFI_MAX_PASSWORD_STRLEN 31
#define WIFI_MAX_HOSTNAME_STRLEN 31 #define WIFI_MAX_HOSTNAME_STRLEN 31
#define NTP_MAX_SERVER_STRLEN 31
#define NTP_MAX_TIMEZONE_STRLEN 50
struct CONFIG_T { struct CONFIG_T {
uint32_t Cfg_Version; uint32_t Cfg_Version;
uint Cfg_SaveCount; uint Cfg_SaveCount;
@ -22,6 +25,9 @@ struct CONFIG_T {
byte WiFi_Dns2[4]; byte WiFi_Dns2[4];
bool WiFi_Dhcp; bool WiFi_Dhcp;
char WiFi_Hostname[WIFI_MAX_HOSTNAME_STRLEN + 1]; char WiFi_Hostname[WIFI_MAX_HOSTNAME_STRLEN + 1];
char Ntp_Server[NTP_MAX_SERVER_STRLEN + 1];
char Ntp_Timezone[NTP_MAX_TIMEZONE_STRLEN + 1];
}; };
class ConfigurationClass { class ConfigurationClass {

14
include/NtpSettings.h Normal file
View File

@ -0,0 +1,14 @@
#pragma once
#include <Arduino.h>
class NtpSettingsClass {
public:
NtpSettingsClass();
void init();
void setServer();
void setTimezone();
};
extern NtpSettingsClass NtpSettings;

View File

@ -18,9 +18,12 @@ private:
void onNetworkStatus(AsyncWebServerRequest* request); void onNetworkStatus(AsyncWebServerRequest* request);
void onSystemStatus(AsyncWebServerRequest* request); void onSystemStatus(AsyncWebServerRequest* request);
void onNtpStatus(AsyncWebServerRequest* request);
void onNetworkAdminGet(AsyncWebServerRequest* request); void onNetworkAdminGet(AsyncWebServerRequest* request);
void onNetworkAdminPost(AsyncWebServerRequest* request); void onNetworkAdminPost(AsyncWebServerRequest* request);
void onNtpAdminGet(AsyncWebServerRequest* request);
}; };
extern WebApiClass WebApi; extern WebApiClass WebApi;

View File

@ -15,4 +15,7 @@
#define WIFI_SSID "" #define WIFI_SSID ""
#define WIFI_PASSWORD "" #define WIFI_PASSWORD ""
#define WIFI_DHCP true #define WIFI_DHCP true
#define NTP_SERVER "pool.ntp.org"
#define NTP_TIMEZONE "CET-1CEST,M3.5.0,M10.5.0/3"

View File

@ -15,6 +15,10 @@ void ConfigurationClass::init()
strlcpy(config.WiFi_Password, WIFI_PASSWORD, sizeof(config.WiFi_Password)); strlcpy(config.WiFi_Password, WIFI_PASSWORD, sizeof(config.WiFi_Password));
config.WiFi_Dhcp = WIFI_DHCP; config.WiFi_Dhcp = WIFI_DHCP;
strlcpy(config.WiFi_Hostname, APP_HOSTNAME, sizeof(config.WiFi_Hostname)); strlcpy(config.WiFi_Hostname, APP_HOSTNAME, sizeof(config.WiFi_Hostname));
// NTP Settings
strlcpy(config.Ntp_Server, NTP_SERVER, sizeof(config.Ntp_Server));
strlcpy(config.Ntp_Timezone, NTP_TIMEZONE, sizeof(config.Ntp_Timezone));
} }
bool ConfigurationClass::write() bool ConfigurationClass::write()
@ -48,6 +52,10 @@ bool ConfigurationClass::read()
void ConfigurationClass::migrate() void ConfigurationClass::migrate()
{ {
if (config.Cfg_Version < 0x00010400) {
strlcpy(config.Ntp_Server, NTP_SERVER, sizeof(config.Ntp_Server));
strlcpy(config.Ntp_Timezone, NTP_TIMEZONE, sizeof(config.Ntp_Timezone));
}
config.Cfg_Version = CONFIG_VERSION; config.Cfg_Version = CONFIG_VERSION;
write(); write();
} }

26
src/NtpSettings.cpp Normal file
View File

@ -0,0 +1,26 @@
#include "NtpSettings.h"
#include "Configuration.h"
#include <time.h>
NtpSettingsClass::NtpSettingsClass()
{
}
void NtpSettingsClass::init()
{
setServer();
setTimezone();
}
void NtpSettingsClass::setServer()
{
configTime(0, 0, Configuration.get().Ntp_Server);
}
void NtpSettingsClass::setTimezone()
{
setenv("TZ", Configuration.get().Ntp_Timezone, 1);
tzset();
}
NtpSettingsClass NtpSettings;

View File

@ -30,6 +30,9 @@ void WebApiClass::init()
_server.on("/api/network/config", HTTP_GET, std::bind(&WebApiClass::onNetworkAdminGet, this, _1)); _server.on("/api/network/config", HTTP_GET, std::bind(&WebApiClass::onNetworkAdminGet, this, _1));
_server.on("/api/network/config", HTTP_POST, std::bind(&WebApiClass::onNetworkAdminPost, this, _1)); _server.on("/api/network/config", HTTP_POST, std::bind(&WebApiClass::onNetworkAdminPost, this, _1));
_server.on("/api/ntp/status", HTTP_GET, std::bind(&WebApiClass::onNtpStatus, this, _1));
_server.on("/api/ntp/config", HTTP_GET, std::bind(&WebApiClass::onNtpAdminGet, this, _1));
_server.serveStatic("/", LITTLEFS, "/", "max-age=86400").setDefaultFile("index.html"); _server.serveStatic("/", LITTLEFS, "/", "max-age=86400").setDefaultFile("index.html");
_server.onNotFound(std::bind(&WebApiClass::onNotFound, this, _1)); _server.onNotFound(std::bind(&WebApiClass::onNotFound, this, _1));
_server.begin(); _server.begin();
@ -271,4 +274,40 @@ void WebApiClass::onNetworkAdminPost(AsyncWebServerRequest* request)
WiFiSettings.applyConfig(); WiFiSettings.applyConfig();
} }
void WebApiClass::onNtpStatus(AsyncWebServerRequest* request)
{
AsyncJsonResponse* response = new AsyncJsonResponse();
JsonObject root = response->getRoot();
CONFIG_T& config = Configuration.get();
root[F("ntp_server")] = config.Ntp_Server;
root[F("ntp_timezone")] = config.Ntp_Timezone;
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) {
root[F("ntp_status")] = false;
} else {
root[F("ntp_status")] = true;
}
char timeStringBuff[50];
strftime(timeStringBuff, sizeof(timeStringBuff), "%A, %B %d %Y %H:%M:%S", &timeinfo);
root[F("ntp_localtime")] = timeStringBuff;
response->setLength();
request->send(response);
}
void WebApiClass::onNtpAdminGet(AsyncWebServerRequest* request)
{
AsyncJsonResponse* response = new AsyncJsonResponse();
JsonObject root = response->getRoot();
CONFIG_T& config = Configuration.get();
root[F("ntp_server")] = config.Ntp_Server;
root[F("ntp_timezone")] = config.Ntp_Timezone;
response->setLength();
request->send(response);
}
WebApiClass WebApi; WebApiClass WebApi;

View File

@ -1,4 +1,5 @@
#include "Configuration.h" #include "Configuration.h"
#include "NtpSettings.h"
#include "WebApi.h" #include "WebApi.h"
#include "WiFiSettings.h" #include "WiFiSettings.h"
#include "defaults.h" #include "defaults.h"
@ -45,6 +46,11 @@ void setup()
Serial.println(F("done")); Serial.println(F("done"));
WiFiSettings.applyConfig(); WiFiSettings.applyConfig();
// Initialize NTP
Serial.print(F("Initialize NTP... "));
NtpSettings.init();
Serial.println(F("done"));
// Initialize WebApi // Initialize WebApi
Serial.print(F("Initialize WebApi... ")); Serial.print(F("Initialize WebApi... "));
WebApi.init(); WebApi.init();