mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-03-30 20:09:14 +03:00
getData
This commit is contained in:
@@ -1,7 +1,99 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "Global.h"
|
#include "Utils/TimeUtils.h"
|
||||||
|
#include "Utils/PrintMessage.h"
|
||||||
|
|
||||||
void startTimeSync();
|
#include "time.h"
|
||||||
|
|
||||||
void reconfigTime();
|
class Clock {
|
||||||
|
const char* MODULE = "Clock";
|
||||||
|
|
||||||
|
public:
|
||||||
|
Clock() : _timezone{0}, _ntp{}, _hasSynced{false}, _configured{false} {
|
||||||
|
}
|
||||||
|
|
||||||
|
bool hasSync() {
|
||||||
|
if (!_hasSynced) {
|
||||||
|
startSync();
|
||||||
|
}
|
||||||
|
return _hasSynced;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
|
||||||
|
setNtpPool(String ntp) {
|
||||||
|
_ntp = ntp;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setTimezone(int timezone) {
|
||||||
|
_timezone = timezone;
|
||||||
|
}
|
||||||
|
|
||||||
|
time_t getSystemTime() {
|
||||||
|
timeval tv{0, 0};
|
||||||
|
timezone tz = getTimeZone(getBiasInMinutes());
|
||||||
|
time_t epoch = 0;
|
||||||
|
if (gettimeofday(&tv, &tz) != -1)
|
||||||
|
epoch = tv.tv_sec;
|
||||||
|
return epoch;
|
||||||
|
}
|
||||||
|
|
||||||
|
void startSync() {
|
||||||
|
if (!_configured) {
|
||||||
|
pm.info("sync to: " + _ntp + " time zone: " + String(_timezone));
|
||||||
|
setupSntp();
|
||||||
|
_configured = true;
|
||||||
|
}
|
||||||
|
_hasSynced = hasTimeSynced();
|
||||||
|
if (_hasSynced) {
|
||||||
|
pm.info("synced " + getDateDigitalFormated() + " " + getTime());
|
||||||
|
} else {
|
||||||
|
pm.error("failed to obtain");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void setupSntp() {
|
||||||
|
int tzs = getBiasInSeconds();
|
||||||
|
int tzh = tzs / 3600;
|
||||||
|
tzs -= tzh * 3600;
|
||||||
|
int tzm = tzs / 60;
|
||||||
|
tzs -= tzm * 60;
|
||||||
|
|
||||||
|
char tzstr[64];
|
||||||
|
snprintf(tzstr, sizeof tzstr, "ESPUSER<%+d:%02d:%02d>", tzh, tzm, tzs);
|
||||||
|
pm.info(String(tzstr));
|
||||||
|
configTime(tzstr, _ntp.c_str());
|
||||||
|
}
|
||||||
|
// #ifdef ESP32
|
||||||
|
// uint8_t i = 0;
|
||||||
|
// struct tm timeinfo;
|
||||||
|
// while (!getLocalTime(&timeinfo) && i <= 4) {
|
||||||
|
// Serial.print(".");
|
||||||
|
// i++;
|
||||||
|
// delay(1000);
|
||||||
|
// }
|
||||||
|
// #endif
|
||||||
|
private:
|
||||||
|
bool hasTimeSynced() {
|
||||||
|
unsigned long now = time(nullptr);
|
||||||
|
return now > millis();
|
||||||
|
}
|
||||||
|
|
||||||
|
int getBiasInSeconds() {
|
||||||
|
return getBiasInMinutes() * 60;
|
||||||
|
}
|
||||||
|
|
||||||
|
int getBiasInMinutes() {
|
||||||
|
return _timezone * 60;
|
||||||
|
}
|
||||||
|
|
||||||
|
const timezone getTimeZone(int minutes) {
|
||||||
|
return timezone{minutes, 0};
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
int _timezone;
|
||||||
|
String _ntp;
|
||||||
|
bool _hasSynced;
|
||||||
|
bool _configured;
|
||||||
|
};
|
||||||
@@ -9,6 +9,7 @@
|
|||||||
#define MQTT_RECONNECT_INTERVAL 20000
|
#define MQTT_RECONNECT_INTERVAL 20000
|
||||||
// 1000 * 60 * 60 * 2
|
// 1000 * 60 * 60 * 2
|
||||||
#define TELEMETRY_UPDATE_INTERVAL 0
|
#define TELEMETRY_UPDATE_INTERVAL 0
|
||||||
|
|
||||||
#define DEVICE_CONFIG_FILE "dev_conf.txt"
|
#define DEVICE_CONFIG_FILE "dev_conf.txt"
|
||||||
#define DEVICE_SCENARIO_FILE "dev_scen.txt"
|
#define DEVICE_SCENARIO_FILE "dev_scen.txt"
|
||||||
#define DEFAULT_PRESET 100
|
#define DEFAULT_PRESET 100
|
||||||
|
|||||||
@@ -21,7 +21,6 @@
|
|||||||
#include "Utils\JsonUtils.h"
|
#include "Utils\JsonUtils.h"
|
||||||
#include "Utils\StringUtils.h"
|
#include "Utils\StringUtils.h"
|
||||||
#include "Utils\SysUtils.h"
|
#include "Utils\SysUtils.h"
|
||||||
#include "Utils\TimeUtils.h"
|
|
||||||
#include "Utils\PrintMessage.h"
|
#include "Utils\PrintMessage.h"
|
||||||
#include "Utils\WiFiUtils.h"
|
#include "Utils\WiFiUtils.h"
|
||||||
|
|
||||||
@@ -45,6 +44,8 @@ extern AsyncWebSocket ws;
|
|||||||
//extern AsyncEventSource events;
|
//extern AsyncEventSource events;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
extern Clock* rtc;
|
||||||
|
|
||||||
extern TickerScheduler ts;
|
extern TickerScheduler ts;
|
||||||
|
|
||||||
extern WiFiClient espClient;
|
extern WiFiClient espClient;
|
||||||
@@ -165,7 +166,6 @@ extern void choose_log_date_and_send();
|
|||||||
|
|
||||||
// Main
|
// Main
|
||||||
extern void setChipId();
|
extern void setChipId();
|
||||||
extern void printMemoryStatus(String text);
|
|
||||||
extern void saveConfig();
|
extern void saveConfig();
|
||||||
extern String getURL(const String& urls);
|
extern String getURL(const String& urls);
|
||||||
|
|
||||||
@@ -229,9 +229,10 @@ extern int readTimer(int number);
|
|||||||
extern void init_updater();
|
extern void init_updater();
|
||||||
|
|
||||||
// widget
|
// widget
|
||||||
extern void createWidget(String widget_name, String page_name, String page_number, String file, String topic);
|
|
||||||
|
extern void createWidgetByType(String widget_name, String page_name, String page_number, String file, String topic);
|
||||||
extern void createWidgetParam(String widget_name, String page_name, String page_number, String file, String topic, String name1, String param1, String name2, String param2, String name3, String param3);
|
extern void createWidgetParam(String widget_name, String page_name, String page_number, String file, String topic, String name1, String param1, String name2, String param2, String name3, String param3);
|
||||||
extern void createWidgetByType(String widget_name, String page_name, String page_number, String type, String topik);
|
extern void createWidget(String widget_name, String page_name, String page_number, String type, String topik);
|
||||||
extern void createChart(String widget_name, String page_name, String page_number, String file, String topic, String maxCount);
|
extern void createChart(String widget_name, String page_name, String page_number, String file, String topic, String maxCount);
|
||||||
|
|
||||||
// PushingBox
|
// PushingBox
|
||||||
|
|||||||
@@ -11,3 +11,5 @@ String jsonWriteStr(String& json, String name, String volume);
|
|||||||
String jsonWriteInt(String& json, String name, int volume);
|
String jsonWriteInt(String& json, String name, int volume);
|
||||||
|
|
||||||
String jsonWriteFloat(String& json, String name, float volume);
|
String jsonWriteFloat(String& json, String name, float volume);
|
||||||
|
|
||||||
|
boolean jsonReadBool(String& json, String name);
|
||||||
@@ -14,11 +14,11 @@ class PrintMessage {
|
|||||||
_module = module;
|
_module = module;
|
||||||
}
|
}
|
||||||
|
|
||||||
void error(const String str) {
|
void error(const String& str) {
|
||||||
print(EL_ERROR, str);
|
print(EL_ERROR, str);
|
||||||
}
|
}
|
||||||
|
|
||||||
void info(const String str) {
|
void info(const String& str) {
|
||||||
print(EL_INFO, str);
|
print(EL_INFO, str);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,6 @@
|
|||||||
|
|
||||||
const String getChipId();
|
const String getChipId();
|
||||||
|
|
||||||
void printMemoryStatus(String text = "");
|
const String printMemoryStatus();
|
||||||
|
|
||||||
String getHeapStats();
|
const String getHeapStats();
|
||||||
|
|||||||
@@ -35,12 +35,6 @@ int timeToMin(String Time);
|
|||||||
|
|
||||||
const String prettyMillis(unsigned long time_ms = millis());
|
const String prettyMillis(unsigned long time_ms = millis());
|
||||||
|
|
||||||
int timeZoneInSeconds(const byte timeZone);
|
|
||||||
|
|
||||||
bool hasTimeSynced();
|
|
||||||
|
|
||||||
int getBiasInSeconds();
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Время (мс) прошедщее с @simce
|
* Время (мс) прошедщее с @simce
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ lib_deps =
|
|||||||
[env:esp8266]
|
[env:esp8266]
|
||||||
platform = https://github.com/platformio/platform-espressif8266.git
|
platform = https://github.com/platformio/platform-espressif8266.git
|
||||||
build_flags = ${env.build_flags} -D=${PIOENV}
|
build_flags = ${env.build_flags} -D=${PIOENV}
|
||||||
|
##-DCORE_DEBUG_LEVEL=5
|
||||||
board = nodemcuv2
|
board = nodemcuv2
|
||||||
monitor_filters = esp8266_exception_decoder
|
monitor_filters = esp8266_exception_decoder
|
||||||
monitor_speed = 115200
|
monitor_speed = 115200
|
||||||
@@ -51,3 +52,4 @@ lib_deps =
|
|||||||
DHT sensor library for ESPx
|
DHT sensor library for ESPx
|
||||||
Adafruit BMP280 Library
|
Adafruit BMP280 Library
|
||||||
Adafruit BME280 Library
|
Adafruit BME280 Library
|
||||||
|
|
||||||
|
|||||||
@@ -1,54 +0,0 @@
|
|||||||
#include "Clock.h"
|
|
||||||
|
|
||||||
#include "Utils/TimeUtils.h"
|
|
||||||
|
|
||||||
static const char* MODULE = "Clock";
|
|
||||||
|
|
||||||
void startTimeSync() {
|
|
||||||
if (!hasTimeSynced()) {
|
|
||||||
pm.info("Start sync");
|
|
||||||
reconfigTime();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void setupSntp() {
|
|
||||||
int tzs = getBiasInSeconds();
|
|
||||||
int tzh = tzs / 3600;
|
|
||||||
tzs -= tzh * 3600;
|
|
||||||
int tzm = tzs / 60;
|
|
||||||
tzs -= tzm * 60;
|
|
||||||
|
|
||||||
String ntp = jsonReadStr(configSetupJson, "ntp");
|
|
||||||
pm.info("Setup ntp: " + ntp);
|
|
||||||
char tzstr[64];
|
|
||||||
snprintf(tzstr, sizeof tzstr, "ESPUSER<%+d:%02d:%02d>", tzh, tzm, tzs);
|
|
||||||
return configTime(tzstr, ntp.c_str(), "pool.ntp.org", "time.nist.gov");
|
|
||||||
}
|
|
||||||
|
|
||||||
void reconfigTime() {
|
|
||||||
#ifdef ESP32
|
|
||||||
uint8_t i = 0;
|
|
||||||
struct tm timeinfo;
|
|
||||||
while (!getLocalTime(&timeinfo) && i <= 4) {
|
|
||||||
Serial.print(".");
|
|
||||||
i++;
|
|
||||||
delay(1000);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef ESP8266
|
|
||||||
setupSntp();
|
|
||||||
uint8_t i = 0;
|
|
||||||
while (!hasTimeSynced() && i < 4) {
|
|
||||||
Serial.print(".");
|
|
||||||
i++;
|
|
||||||
delay(30);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (getTimeUnix() != "failed") {
|
|
||||||
pm.info("Time synced " + getDateDigitalFormated() + " " + getTime());
|
|
||||||
} else {
|
|
||||||
pm.error("Failed to obtain");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
54
src/Cmd.cpp
54
src/Cmd.cpp
@@ -13,6 +13,8 @@ Servo myServo1;
|
|||||||
Servo myServo2;
|
Servo myServo2;
|
||||||
SoftwareSerial *mySerial = nullptr;
|
SoftwareSerial *mySerial = nullptr;
|
||||||
|
|
||||||
|
void getData();
|
||||||
|
|
||||||
void CMD_init() {
|
void CMD_init() {
|
||||||
sCmd.addCommand("button", button);
|
sCmd.addCommand("button", button);
|
||||||
sCmd.addCommand("buttonSet", buttonSet);
|
sCmd.addCommand("buttonSet", buttonSet);
|
||||||
@@ -97,36 +99,38 @@ void CMD_init() {
|
|||||||
sCmd.addCommand("firmwareUpdate", firmwareUpdate);
|
sCmd.addCommand("firmwareUpdate", firmwareUpdate);
|
||||||
sCmd.addCommand("firmwareVersion", firmwareVersion);
|
sCmd.addCommand("firmwareVersion", firmwareVersion);
|
||||||
|
|
||||||
|
sCmd.addCommand("getData", getData);
|
||||||
|
|
||||||
handle_time_init();
|
handle_time_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
//==========================================================================================================
|
//==========================================================================================================
|
||||||
//==========================================Модуль кнопок===================================================
|
//==========================================Модуль кнопок===================================================
|
||||||
void button() {
|
void button() {
|
||||||
pm.info("create button");
|
pm.info("create 'button'");
|
||||||
String button_number = sCmd.next();
|
String number = sCmd.next();
|
||||||
String button_param = sCmd.next();
|
String param = sCmd.next();
|
||||||
String widget = sCmd.next();
|
String widget = sCmd.next();
|
||||||
String page = sCmd.next();
|
String page = sCmd.next();
|
||||||
String start_state = sCmd.next();
|
String state = sCmd.next();
|
||||||
String pageNumber = sCmd.next();
|
String pageNumber = sCmd.next();
|
||||||
|
|
||||||
jsonWriteStr(configOptionJson, "button_param" + button_number, button_param);
|
jsonWriteStr(configOptionJson, "button_param" + number, param);
|
||||||
jsonWriteStr(configLiveJson, "button" + button_number, start_state);
|
jsonWriteStr(configLiveJson, "button" + number, state);
|
||||||
|
|
||||||
if (isDigitStr(button_param)) {
|
if (isDigitStr(param)) {
|
||||||
pinMode(button_param.toInt(), OUTPUT);
|
pinMode(param.toInt(), OUTPUT);
|
||||||
digitalWrite(button_param.toInt(), start_state.toInt());
|
digitalWrite(param.toInt(), state.toInt());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (button_param == "scen") {
|
if (param == "scen") {
|
||||||
jsonWriteStr(configSetupJson, "scen", start_state);
|
jsonWriteStr(configSetupJson, "scen", state);
|
||||||
loadScenario();
|
loadScenario();
|
||||||
saveConfig();
|
saveConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (button_param.indexOf("line") != -1) {
|
if (param.indexOf("line") != -1) {
|
||||||
String str = button_param;
|
String str = param;
|
||||||
while (str.length()) {
|
while (str.length()) {
|
||||||
if (str == "") return;
|
if (str == "") return;
|
||||||
String tmp = selectToMarker(str, ","); //line1,
|
String tmp = selectToMarker(str, ","); //line1,
|
||||||
@@ -134,11 +138,11 @@ void button() {
|
|||||||
number.replace(",", "");
|
number.replace(",", "");
|
||||||
Serial.println(number);
|
Serial.println(number);
|
||||||
int number_int = number.toInt();
|
int number_int = number.toInt();
|
||||||
scenario_line_status[number_int] = start_state.toInt();
|
scenario_line_status[number_int] = state.toInt();
|
||||||
str = deleteBeforeDelimiter(str, ",");
|
str = deleteBeforeDelimiter(str, ",");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
createWidget(widget, page, pageNumber, "toggle", "button" + button_number);
|
createWidget(widget, page, pageNumber, "toggle", "button" + number);
|
||||||
}
|
}
|
||||||
|
|
||||||
void buttonSet() {
|
void buttonSet() {
|
||||||
@@ -547,6 +551,14 @@ void serialBegin() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void getData() {
|
||||||
|
String param = sCmd.next();
|
||||||
|
String res = param.length() ? jsonReadStr(configLiveJson, param) : configLiveJson;
|
||||||
|
if (term) {
|
||||||
|
term->println(res.c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void serialWrite() {
|
void serialWrite() {
|
||||||
String payload = sCmd.next();
|
String payload = sCmd.next();
|
||||||
if (term) {
|
if (term) {
|
||||||
@@ -578,11 +590,13 @@ void firmwareUpdate() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void firmwareVersion() {
|
void firmwareVersion() {
|
||||||
String widget_name = sCmd.next();
|
String widget = sCmd.next();
|
||||||
String page_name = sCmd.next();
|
String page = sCmd.next();
|
||||||
String page_number = sCmd.next();
|
String pageNumber = sCmd.next();
|
||||||
|
|
||||||
jsonWriteStr(configLiveJson, "firmver", FIRMWARE_VERSION);
|
jsonWriteStr(configLiveJson, "firmver", FIRMWARE_VERSION);
|
||||||
createWidgetByType(widget_name, page_name, page_number, "anydata", "firmver");
|
|
||||||
|
createWidget(widget, page, pageNumber, "anydata", "firmver");
|
||||||
}
|
}
|
||||||
|
|
||||||
void addCommandLoop(const String &cmdStr) {
|
void addCommandLoop(const String &cmdStr) {
|
||||||
@@ -596,7 +610,7 @@ void loopCmd() {
|
|||||||
if (order_loop.length()) {
|
if (order_loop.length()) {
|
||||||
String tmp = selectToMarker(order_loop, ","); //выделяем первую команду rel 5 1,
|
String tmp = selectToMarker(order_loop, ","); //выделяем первую команду rel 5 1,
|
||||||
sCmd.readStr(tmp); //выполняем
|
sCmd.readStr(tmp); //выполняем
|
||||||
Serial.println("[ORDER] => " + order_loop);
|
pm.info("do: " + order_loop);
|
||||||
order_loop = deleteBeforeDelimiter(order_loop, ","); //осекаем
|
order_loop = deleteBeforeDelimiter(order_loop, ","); //осекаем
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ AsyncWebSocket ws;
|
|||||||
//AsyncEventSource events;
|
//AsyncEventSource events;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Clock* rtc;
|
||||||
|
|
||||||
TickerScheduler ts(TEST + 1);
|
TickerScheduler ts(TEST + 1);
|
||||||
|
|
||||||
WiFiClient espClient;
|
WiFiClient espClient;
|
||||||
|
|||||||
@@ -8,6 +8,12 @@ String jsonReadStr(String& json, String name) {
|
|||||||
return root[name].as<String>();
|
return root[name].as<String>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boolean jsonReadBool(String& json, String name) {
|
||||||
|
DynamicJsonBuffer jsonBuffer;
|
||||||
|
JsonObject& root = jsonBuffer.parseObject(json);
|
||||||
|
return root[name].as<boolean>();
|
||||||
|
}
|
||||||
|
|
||||||
int jsonReadInt(String& json, String name) {
|
int jsonReadInt(String& json, String name) {
|
||||||
DynamicJsonBuffer jsonBuffer;
|
DynamicJsonBuffer jsonBuffer;
|
||||||
JsonObject& root = jsonBuffer.parseObject(json);
|
JsonObject& root = jsonBuffer.parseObject(json);
|
||||||
|
|||||||
@@ -23,25 +23,24 @@ static uint32_t total_memory = 52864;
|
|||||||
static uint32_t total_memory = 362868;
|
static uint32_t total_memory = 362868;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void printMemoryStatus(String text) {
|
const String printMemoryStatus() {
|
||||||
uint32_t free = ESP.getFreeHeap();
|
uint32_t free = ESP.getFreeHeap();
|
||||||
uint32_t used = total_memory - free;
|
uint32_t used = total_memory - free;
|
||||||
uint32_t memory_load = (used * 100) / total_memory;
|
uint32_t memory_load = (used * 100) / total_memory;
|
||||||
if (text) {
|
char buf[64];
|
||||||
Serial.print(text);
|
sprintf(buf, "used: %d%% free: %s", memory_load, getHeapStats().c_str());
|
||||||
}
|
return String(buf);
|
||||||
Serial.printf(" used: %d%% free: %s\n", memory_load, prettyBytes(free).c_str());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef ESP8266
|
#ifdef ESP8266
|
||||||
String getHeapStats() {
|
const String getHeapStats() {
|
||||||
uint32_t free;
|
uint32_t free;
|
||||||
uint16_t max;
|
uint16_t max;
|
||||||
uint8_t frag;
|
uint8_t frag;
|
||||||
ESP.getHeapStats(&free, &max, &frag);
|
ESP.getHeapStats(&free, &max, &frag);
|
||||||
String buf;
|
String buf;
|
||||||
buf += prettyBytes(free);
|
buf += prettyBytes(free);
|
||||||
buf += " ";
|
buf += " frag: ";
|
||||||
buf += frag;
|
buf += frag;
|
||||||
buf += '%';
|
buf += '%';
|
||||||
return buf;
|
return buf;
|
||||||
|
|||||||
@@ -6,33 +6,17 @@
|
|||||||
#define ONE_MINUTE_s 60
|
#define ONE_MINUTE_s 60
|
||||||
#define ONE_HOUR_s 60 * ONE_MINUTE_s
|
#define ONE_HOUR_s 60 * ONE_MINUTE_s
|
||||||
|
|
||||||
int getBiasInSeconds() {
|
time_t t;
|
||||||
return 3600 * jsonReadStr(configSetupJson, "timezone").toInt();
|
struct tm* tm;
|
||||||
}
|
static const char* wd[7] = {"Sun", "Mon", "Tue", "Wed", "Thr", "Fri", "Sat"};
|
||||||
|
|
||||||
int getBiasInMinutes() {
|
|
||||||
return getBiasInSeconds() / 60;
|
|
||||||
}
|
|
||||||
|
|
||||||
const timezone getTimeZone() {
|
|
||||||
return timezone{getBiasInMinutes(), 0};
|
|
||||||
}
|
|
||||||
|
|
||||||
time_t getSystemTime() {
|
|
||||||
timeval tv{0, 0};
|
|
||||||
timezone tz = getTimeZone();
|
|
||||||
time_t epoch = 0;
|
|
||||||
if (gettimeofday(&tv, &tz) != -1)
|
|
||||||
epoch = tv.tv_sec;
|
|
||||||
return epoch;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool hasTimeSynced() {
|
|
||||||
unsigned long now = time(nullptr);
|
|
||||||
return now > millis();
|
|
||||||
}
|
|
||||||
|
|
||||||
String getTimeUnix() {
|
String getTimeUnix() {
|
||||||
|
t = time(NULL);
|
||||||
|
tm = localtime(&t);
|
||||||
|
Serial.printf("%04d/%02d/%02d(%s) %02d:%02d:%02d\n",
|
||||||
|
tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday,
|
||||||
|
wd[tm->tm_wday],
|
||||||
|
tm->tm_hour, tm->tm_min, tm->tm_sec);
|
||||||
|
delay(1000);
|
||||||
time_t now = time(nullptr);
|
time_t now = time(nullptr);
|
||||||
if (now < 30000) {
|
if (now < 30000) {
|
||||||
return "failed";
|
return "failed";
|
||||||
@@ -149,127 +133,6 @@ const String prettyMillis(unsigned long time_ms) {
|
|||||||
return String(buf);
|
return String(buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
int timeZoneInSeconds(const byte timeZone) {
|
|
||||||
int res = 0;
|
|
||||||
switch (constrain(timeZone, 1, 38)) {
|
|
||||||
case 1:
|
|
||||||
res = -12 * ONE_HOUR_s;
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
res = -11 * ONE_HOUR_s;
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
res = -10 * ONE_HOUR_s;
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
res = -9 * ONE_HOUR_s - 30 * ONE_MINUTE_s;
|
|
||||||
break;
|
|
||||||
case 5:
|
|
||||||
res = -9 * ONE_HOUR_s;
|
|
||||||
break;
|
|
||||||
case 6:
|
|
||||||
res = -8 * ONE_HOUR_s;
|
|
||||||
break;
|
|
||||||
case 7:
|
|
||||||
res = -7 * ONE_HOUR_s;
|
|
||||||
break;
|
|
||||||
case 8:
|
|
||||||
res = -6 * ONE_HOUR_s;
|
|
||||||
break;
|
|
||||||
case 9:
|
|
||||||
res = -5 * ONE_HOUR_s;
|
|
||||||
break;
|
|
||||||
case 10:
|
|
||||||
res = -4 * ONE_HOUR_s;
|
|
||||||
break;
|
|
||||||
case 11:
|
|
||||||
res = -3 * ONE_HOUR_s - 30 * ONE_MINUTE_s;
|
|
||||||
break;
|
|
||||||
case 12:
|
|
||||||
res = -3 * ONE_HOUR_s;
|
|
||||||
break;
|
|
||||||
case 13:
|
|
||||||
res = -2 * ONE_HOUR_s;
|
|
||||||
break;
|
|
||||||
case 14:
|
|
||||||
res = -1 * ONE_HOUR_s;
|
|
||||||
break;
|
|
||||||
case 15:
|
|
||||||
res = 0;
|
|
||||||
break;
|
|
||||||
case 16:
|
|
||||||
res = 1 * ONE_HOUR_s;
|
|
||||||
break;
|
|
||||||
case 17:
|
|
||||||
res = 2 * ONE_HOUR_s;
|
|
||||||
break;
|
|
||||||
case 18:
|
|
||||||
res = 3 * ONE_HOUR_s;
|
|
||||||
break;
|
|
||||||
case 19:
|
|
||||||
res = 3 * ONE_HOUR_s + 30 * ONE_MINUTE_s;
|
|
||||||
break;
|
|
||||||
case 20:
|
|
||||||
res = 4 * ONE_HOUR_s;
|
|
||||||
break;
|
|
||||||
case 21:
|
|
||||||
res = 4 * ONE_HOUR_s + 30 * ONE_MINUTE_s;
|
|
||||||
break;
|
|
||||||
case 22:
|
|
||||||
res = 5 * ONE_HOUR_s;
|
|
||||||
break;
|
|
||||||
case 23:
|
|
||||||
res = 5 * ONE_HOUR_s + 30 * ONE_MINUTE_s;
|
|
||||||
break;
|
|
||||||
case 24:
|
|
||||||
res = 5 * ONE_HOUR_s + 45 * ONE_MINUTE_s;
|
|
||||||
break;
|
|
||||||
case 25:
|
|
||||||
res = 6 * ONE_HOUR_s;
|
|
||||||
break;
|
|
||||||
case 26:
|
|
||||||
res = 6 * ONE_HOUR_s + 30 * ONE_MINUTE_s;
|
|
||||||
break;
|
|
||||||
case 27:
|
|
||||||
res = 7 * ONE_HOUR_s;
|
|
||||||
break;
|
|
||||||
case 28:
|
|
||||||
res = 8 * ONE_HOUR_s;
|
|
||||||
break;
|
|
||||||
case 29:
|
|
||||||
res = 8 * ONE_HOUR_s + 45 * ONE_MINUTE_s;
|
|
||||||
break;
|
|
||||||
case 30:
|
|
||||||
res = 9 * ONE_HOUR_s;
|
|
||||||
break;
|
|
||||||
case 31:
|
|
||||||
res = 9 * ONE_HOUR_s + 30 * ONE_MINUTE_s;
|
|
||||||
break;
|
|
||||||
case 32:
|
|
||||||
res = 10 * ONE_HOUR_s;
|
|
||||||
break;
|
|
||||||
case 33:
|
|
||||||
res = 10 * ONE_HOUR_s + 30 * ONE_MINUTE_s;
|
|
||||||
break;
|
|
||||||
case 34:
|
|
||||||
res = 11 * ONE_HOUR_s;
|
|
||||||
break;
|
|
||||||
case 35:
|
|
||||||
res = 12 * ONE_HOUR_s;
|
|
||||||
break;
|
|
||||||
case 36:
|
|
||||||
res = 12 * ONE_HOUR_s + 45 * ONE_MINUTE_s;
|
|
||||||
break;
|
|
||||||
case 37:
|
|
||||||
res = 13 * ONE_HOUR_s;
|
|
||||||
break;
|
|
||||||
case 38:
|
|
||||||
res = 14 * ONE_HOUR_s;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned long millis_since(unsigned long sinse) {
|
unsigned long millis_since(unsigned long sinse) {
|
||||||
return millis_passed(sinse, millis());
|
return millis_passed(sinse, millis());
|
||||||
}
|
}
|
||||||
|
|||||||
10
src/Web.cpp
10
src/Web.cpp
@@ -130,15 +130,17 @@ void web_init() {
|
|||||||
}
|
}
|
||||||
//--------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------
|
||||||
if (request->hasArg("timezone")) {
|
if (request->hasArg("timezone")) {
|
||||||
jsonWriteStr(configSetupJson, "timezone", request->getParam("timezone")->value());
|
String timezoneStr = request->getParam("timezone")->value();
|
||||||
|
jsonWriteStr(configSetupJson, "timezone", timezoneStr);
|
||||||
saveConfig();
|
saveConfig();
|
||||||
reconfigTime();
|
rtc->setTimezone(timezoneStr.toInt());
|
||||||
request->send(200, "text/text", "OK");
|
request->send(200, "text/text", "OK");
|
||||||
}
|
}
|
||||||
if (request->hasArg("ntp")) {
|
if (request->hasArg("ntp")) {
|
||||||
jsonWriteStr(configSetupJson, "ntp", request->getParam("ntp")->value());
|
String ntpStr = request->getParam("ntp")->value();
|
||||||
|
jsonWriteStr(configSetupJson, "ntp", ntpStr);
|
||||||
saveConfig();
|
saveConfig();
|
||||||
reconfigTime();
|
rtc->setNtpPool(ntpStr);
|
||||||
request->send(200, "text/text", "OK");
|
request->send(200, "text/text", "OK");
|
||||||
}
|
}
|
||||||
//--------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------
|
||||||
|
|||||||
10
src/main.cpp
10
src/main.cpp
@@ -56,10 +56,14 @@ void setup() {
|
|||||||
pm.info("WebAdmin");
|
pm.info("WebAdmin");
|
||||||
web_init();
|
web_init();
|
||||||
|
|
||||||
pm.info("TimeSync");
|
pm.info("Clock");
|
||||||
|
rtc = new Clock();
|
||||||
|
rtc->setNtpPool(jsonReadStr(configSetupJson, "ntp"));
|
||||||
|
rtc->setTimezone(jsonReadStr(configSetupJson, "timezone").toInt());
|
||||||
|
|
||||||
ts.add(
|
ts.add(
|
||||||
TIME_SYNC, 30000, [&](void*) {
|
TIME_SYNC, 30000, [&](void*) {
|
||||||
startTimeSync();
|
rtc->hasSync();
|
||||||
},
|
},
|
||||||
nullptr, true);
|
nullptr, true);
|
||||||
|
|
||||||
@@ -69,7 +73,7 @@ void setup() {
|
|||||||
#endif
|
#endif
|
||||||
ts.add(
|
ts.add(
|
||||||
TEST, 10000, [&](void*) {
|
TEST, 10000, [&](void*) {
|
||||||
printMemoryStatus();
|
pm.info(printMemoryStatus());
|
||||||
},
|
},
|
||||||
nullptr, true);
|
nullptr, true);
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ void add_dev_in_list(String fileName, String id, String dev_name, String ip);
|
|||||||
|
|
||||||
#ifdef UDP_ENABLED
|
#ifdef UDP_ENABLED
|
||||||
void UDP_init() {
|
void UDP_init() {
|
||||||
removeFile("/dev.csv");
|
removeFile("dev.csv");
|
||||||
addFile("dev.csv", "device id;device name;ip address");
|
addFile("dev.csv", "device id;device name;ip address");
|
||||||
|
|
||||||
#ifdef ESP8266
|
#ifdef ESP8266
|
||||||
|
|||||||
Reference in New Issue
Block a user