add time timer

This commit is contained in:
Dmitry Borisenko
2020-02-13 20:20:34 +03:00
parent 3a5a9e8312
commit f91960e325
12 changed files with 134 additions and 105 deletions

104
Cmd.ino
View File

@@ -1,5 +1,5 @@
void CMD_init() {
sCmd.addCommand("button", button);
sCmd.addCommand("buttonSet", buttonSet);
sCmd.addCommand("pinSet", pinSet);
@@ -12,7 +12,7 @@ void CMD_init() {
sCmd.addCommand("analog", analog);
sCmd.addCommand("level", level);
sCmd.addCommand("dallas", dallas);
sCmd.addCommand("dhtT", dhtT);
sCmd.addCommand("dhtH", dhtH);
@@ -21,32 +21,38 @@ void CMD_init() {
sCmd.addCommand("inputDigit", inputDigit);
sCmd.addCommand("digitSet", digitSet);
sCmd.addCommand("text", text);
sCmd.addCommand("textSet", textSet);
sCmd.addCommand("inputTime", inputTime);
sCmd.addCommand("timeSet", timeSet);
sCmd.addCommand("timerStart", timerStart);
sCmd.addCommand("timerStop", timerStop);
sCmd.addCommand("text", text);
sCmd.addCommand("textSet", textSet);
sCmd.addCommand("mqtt", mqttOrderSend);
sCmd.addCommand("http", httpOrderSend);
sCmd.addCommand("push", pushControl);
// sCmd.addCommand("time", time);
// sCmd.addCommand("timeSet", timeSet);
handle_time_init();
//======новые виджеты ver2.0=======//
sCmd.addCommand("inputText", inputText);
sCmd.addCommand("inputTextSet", inputTextSet);
/*
sCmd.addCommand("inputText", inputText);
sCmd.addCommand("inputTextSet", inputTextSet);
sCmd.addCommand("inputTime", inputTime);
sCmd.addCommand("inputTimeSet", inputTimeSet);
sCmd.addCommand("inputTime", inputTime);
sCmd.addCommand("inputTimeSet", inputTimeSet);
sCmd.addCommand("inputDate", inputDate);
sCmd.addCommand("inputDateSet", inputDateSet);
sCmd.addCommand("inputDate", inputDate);
sCmd.addCommand("inputDateSet", inputDateSet);
sCmd.addCommand("inputDate", inputDate);
sCmd.addCommand("inputDate", inputDate);
//sCmd.addCommand("inputDropdown", inputDropdown);
//sCmd.addCommand("inputDropdown", inputDropdown);
*/
//=================================//
}
@@ -211,7 +217,7 @@ void handleButton() {
}
//=====================================================================================================================================
//=========================================Добавление окна ввода переменной============================================================
//=========================================Добавление окна ввода цифры=================================================================
void inputDigit() {
String value_name = sCmd.next();
String number = value_name.substring(5);
@@ -230,6 +236,31 @@ void digitSet() {
jsonWrite(configJson, "digitSet" + number, value);
sendSTATUS("digitSet" + number, value);
}
//=====================================================================================================================================
//=========================================Добавление окна ввода времени===============================================================
void inputTime() {
String value_name = sCmd.next();
String number = value_name.substring(4);
String viget_name = sCmd.next();
viget_name.replace("#", " ");
String page_name = sCmd.next();
page_name.replace("#", " ");
String start_state = sCmd.next();
String page_number = sCmd.next();
start_state.replace(":", ".");
jsonWrite(configJson, "timeSet" + number, start_state);
start_state.replace(".", ":");
createViget (viget_name, page_name, page_number, "vigets/viget.inputTime.json", "timeSet" + number);
}
void timeSet() {
String number = sCmd.next();
String value = sCmd.next();
value.replace(":", ".");
jsonWrite(configJson, "timeSet" + number, value);
value.replace(".", ":");
sendSTATUS("timeSet" + number, value);
}
//=====================================================================================================================================
//=========================================Добавление текстового виджета============================================================
void text() {
@@ -260,9 +291,19 @@ void textSet() {
sendSTATUS("textSet" + number, text);
}
void handle_time_init() {
ts.add(TIME, 1000, [&](void*) {
String tmp = GetTimeWOsec();
tmp.replace(":", ".");
jsonWrite(configJson, "timenowSet", tmp);
eventGen ("timenowSet", "");
}, nullptr, true);
}
//====================================================================================================================================================
void inputText() {
/*
void inputText() {
String number = sCmd.next();
String viget_name = sCmd.next();
viget_name.replace("#", " ");
@@ -272,15 +313,15 @@ void inputText() {
String page_number = sCmd.next();
jsonWrite(configJson, "inputTextSet" + number, start_state);
createViget (viget_name, page_name, page_number, "vigets/viget.inputText.json", "inputTextSet" + number);
}
void inputTextSet() {
}
void inputTextSet() {
String number = sCmd.next();
String value = sCmd.next();
jsonWrite(configJson, "inputTextSet" + number, value);
sendSTATUS("inputTextSet" + number, value);
}
}
void inputTime() {
void inputTime() {
String number = sCmd.next();
String viget_name = sCmd.next();
viget_name.replace("#", " ");
@@ -290,18 +331,18 @@ void inputTime() {
String page_number = sCmd.next();
jsonWrite(configJson, "inputTimeSet" + number, start_state);
createViget (viget_name, page_name, page_number, "vigets/viget.inputTime.json", "inputTimeSet" + number);
}
void inputTimeSet() {
}
void inputTimeSet() {
String number = sCmd.next();
String value = sCmd.next();
value.replace(":", ".");
jsonWrite(configJson, "inputTimeSet" + number, value);
value.replace(".", ":");
sendSTATUS("inputTimeSet" + number, value);
}
}
void inputDate() {
void inputDate() {
String number = sCmd.next();
String viget_name = sCmd.next();
viget_name.replace("#", " ");
@@ -311,13 +352,14 @@ void inputDate() {
String page_number = sCmd.next();
jsonWrite(configJson, "inputDateSet" + number, start_state);
createViget (viget_name, page_name, page_number, "vigets/viget.inputDate.json", "inputDateSet" + number);
}
void inputDateSet() {
}
void inputDateSet() {
String number = sCmd.next();
String value = sCmd.next();
jsonWrite(configJson, "inputDateSet" + number, value);
sendSTATUS("inputDateSet" + number, value);
}
}
*/
//=================================================Глобальные команды удаленного управления===========================================================
void mqttOrderSend() {
@@ -430,7 +472,7 @@ void createViget (String viget_name, String page_name, String page_number, Stri
}
/*
void createViget (String viget_name, String page_name, String page_number, String file, String topic, String key, String value) {
void createViget (String viget_name, String page_name, String page_number, String file, String topic, String key, String value) {
String viget;
viget = readFile(file, 1024);
@@ -452,9 +494,9 @@ void createViget (String viget_name, String page_name, String page_number, Stri
all_vigets += viget + "\r\n";
viget = "";
}
}
void createViget (String viget_name, String page_name, String page_number, String file, String topic, String key, String value, String key2, String value2) {
void createViget (String viget_name, String page_name, String page_number, String file, String topic, String key, String value, String key2, String value2) {
String viget;
viget = readFile(file, 1024);
@@ -477,7 +519,7 @@ void createViget (String viget_name, String page_name, String page_number, Stri
all_vigets += viget + "\r\n";
viget = "";
}
}
*/
String vidgetConfigWrite(String viget, String key, String value) {

View File

@@ -16,17 +16,23 @@ void handleScenario() {
if (scenario_line_status[i] == 1) {
//Serial.println(i);
String condition = selectToMarker (tmp, "\n"); //выделяем первую строку самого сценария button1 = 1 (условие)
String param_name = selectFromMarkerToMarker(condition, " " , 0);
String param_name = selectFromMarkerToMarker(condition, " " , 0);
param_name = add_set(param_name); //из первой страки берем имя параметра button1 и вставляем в него Set и получаем buttonSet1
if (param_name.indexOf("timenow") != -1){
param_name = param_name + "Set";
}
String order = jsonRead(optionJson, "scenario_status"); //читаем весь файл событий
String param = selectToMarker (order, ","); //читаем первое событие из файла событий
if (param_name == param) { //если поступившее событие равно событию заданному buttonSet1 в файле начинаем его обработку
String sign = selectFromMarkerToMarker(condition, " " , 1); //читаем знак (=)
String value = selectFromMarkerToMarker(condition, " " , 2); //читаем значение (1)
if (value.indexOf("digit") != -1) {
value = add_set(value);
value = add_set(value);
value = jsonRead(configJson, value);
}
if (value.indexOf("time") != -1) {
value = add_set(value);
value = jsonRead(configJson, value);
}
boolean flag = false; //если одно из значений совпало то только тогда начинаем выполнять комнады
@@ -85,7 +91,7 @@ String add_set(String param_name) {
param_name = param_name.substring(0, param_name.length() - 2) + "Set" + num2 + num1;
} else {
if (isDigitStr(num1)) {
param_name = param_name.substring(0, param_name.length() - 1) + "Set" + num1;
param_name = param_name.substring(0, param_name.length() - 1) + "Set" + num1;
}
}
return param_name;

View File

@@ -18,7 +18,8 @@ void analog() {
ts.add(ANALOG_, analog_update_int, [&](void*) {
static int analog_old;
#ifdef ESP32
int analog_in = analogRead(pin.toInt());
//int pin_int = pin.toInt();
int analog_in;// = analogRead(pin_int);
#endif
#ifdef ESP8266
int analog_in = analogRead(A0);

View File

@@ -1,54 +1,50 @@
#ifdef ESP8266
#include <time.h>
void Time_Init() {
server.on("/Time", HTTP_GET, [](AsyncWebServerRequest * request) {
//handle_Time();
request->send(200, "text/text", "OK"); // отправляем ответ о выполнении
});
server.on("/timeZone", HTTP_GET, [](AsyncWebServerRequest * request) {
//handle_time_zone();
if (request->hasArg("timezone")) {
jsonWrite(configSetup, "timezone", request->getParam("timezone")->value());
}
saveConfig();
reconfigTime();
request->send(200, "text/text", "OK"); // отправляем ответ о выполнении
});
timeSynch(jsonReadtoInt(configSetup, "timezone"));
reconfigTime();
}
void timeSynch(int zone) {
void reconfigTime() {
if (WiFi.status() == WL_CONNECTED) {
// Настройка соединения с NTP сервером
configTime(zone * 3600, 0, "pool.ntp.org", "ru.pool.ntp.org");
// int i = 0;
// Serial.println("\nWaiting for time");
// while (!time(nullptr) && i < 10) {
// Serial.print(".");
// i++;
// delay(1000);
// }
Serial.println("");
Serial.println("ITime Ready!");
delay(1000);
Serial.println(GetTime());
Serial.println(GetDate());
}
}
/*// Установка параметров времянной зоны по запросу вида http://192.168.0.101/timeZone?timeZone=3
void handle_time_zone() {
if (request->hasArg("timeZone")) {
jsonWrite(configSetup, "timeZone", request->getParam("timeZone")->value());
}
saveConfig();
//request->send(200, "text/text", "OK");
}
void handle_Time() {
timeSynch(jsonReadtoInt(configSetup, "timezone"));
//request->send(200, "text/text", "OK");
}
*/
configTime(jsonRead(configSetup, "timezone").toInt() * 3600, 0, ntpServer);
int i = 0;
Serial.println("[i]Awaiting for time ");
#ifdef ESP32
struct tm timeinfo;
while (!getLocalTime(&timeinfo) && i <= 4) {
Serial.print(".");
i++;
delay(1000);
}
#endif
#ifdef ESP8266
// while (!time(nullptr) && i < 4) {
// Serial.print(".");
// i++;
delay(2000);
// }
#endif
Serial.print("Time = ");
Serial.print(GetDataDigital());
Serial.print(" ");
Serial.println(GetTime());
} else {
Serial.println("[E] Get time impossible, no wifi connection");
}
}
// Получение текущего времени
String GetTime() {
time_t now = time(nullptr); // получаем время с помощью библиотеки time.h

View File

@@ -1,20 +0,0 @@
#ifdef ESP32
void Time_Init() {
//init and get the time
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
printLocalTime();
}
void printLocalTime() {
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) {
Serial.println("[E] Failed to obtain time");
return;
}
Serial.println(&timeinfo, "[V] %A, %B %d %Y %H:%M:%S");
}
#endif

View File

@@ -85,8 +85,9 @@ void WIFI_init() {
// о подключении и выводим адрес IP
Serial.println("");
Serial.println("[V] WiFi connected");
Serial.println("[V] IP address: ");
Serial.println(WiFi.localIP());
Serial.print("[V] IP address: ");
Serial.print(WiFi.localIP());
Serial.println("");
jsonWrite(configJson, "ip", WiFi.localIP().toString());
}

View File

@@ -1 +0,0 @@
{"SSDP":"MODULES","chipID":"905542-1458415","ssidAP":"WiFi","passwordAP":"","ssid":"rise","password":"hostel3333","timezone":3,"mqttServer":"m12.cloudmqtt.com","mqttPort":14053,"mqttUser":"lbscvzuj","mqttPass":"bLxlveOgaF8F","scenario":"1","timers":"0","pushingbox_id":"v7C133E426B0C69E","web_login":"admin","web_pass":"admin"}

1
data/config-users.json Normal file
View File

@@ -0,0 +1 @@
{"SSDP":"MODULES","chipID":"905542-1458415","ssidAP":"WiFi","passwordAP":"","ssid":"your_ssid","password":"your_pass","timezone":3,"mqttServer":"","mqttPort":0,"mqttUser":"","mqttPass":"","scenario":"1","timers":"0","pushingbox_id":"","web_login":"admin","web_pass":"admin"}

View File

@@ -1 +1 @@
{"SSDP":"MODULES","chipID":"905542-1458415","ssidAP":"WiFi","passwordAP":"","ssid":"your_ssid","password":"your_pass","timezone":3,"mqttServer":"","mqttPort":0,"mqttUser":"","mqttPass":"","scenario":"1","timers":"0","pushingbox_id":"","web_login":"admin","web_pass":"admin"}
{"SSDP":"MODULES","chipID":"905542-1458415","ssidAP":"WiFi","passwordAP":"","ssid":"rise","password":"hostel3333","timezone":3,"mqttServer":"m12.cloudmqtt.com","mqttPort":14053,"mqttUser":"lbscvzuj","mqttPass":"bLxlveOgaF8F","scenario":"1","timers":"0","pushingbox_id":"v7C133E426B0C69E","web_login":"admin","web_pass":"admin"}

View File

@@ -1,6 +1,5 @@
{
"widget" : "input",
"size" : "small",
"color" : "orange",
"color" : "blue",
"type" : "time"
}

View File

@@ -251,6 +251,9 @@ void sendAllData() { //берет строку json и ключи превра
String tmp = selectToMarker (current_config, ",");
String topic = selectToMarker (tmp, ":");
if (topic.indexOf("time") < 0) {
state.replace(".", ":");
}
topic.replace("\"", "");
String state = selectToMarkerLast (tmp, ":");
state.replace("\"", "");

3
set.h
View File

@@ -20,6 +20,7 @@ HTTPClient http;
#endif
//==общие библиотеки и объекты==//
#include "time.h"
#ifdef OTA_enable
#include <ArduinoOTA.h>
#endif
@@ -35,7 +36,7 @@ AsyncEventSource events("/events");
#include "time.h"
#include <TickerScheduler.h>
TickerScheduler ts(30);
enum { ROUTER_SEARCHING, WIFI_MQTT_CONNECTION_CHECK, LEVEL, ANALOG_, DALLAS, DHTT, DHTH, ANALOG_LOG, LEVEL_LOG, DALLAS_LOG, PH_LOG, CMD , TIMER_COUNTDOWN, TIMERS, TEST};
enum { ROUTER_SEARCHING, WIFI_MQTT_CONNECTION_CHECK, LEVEL, ANALOG_, DALLAS, DHTT, DHTH, ANALOG_LOG, LEVEL_LOG, DALLAS_LOG, PH_LOG, CMD , TIMER_COUNTDOWN, TIMERS, TIME, TEST};
//ssl//#include "dependencies/WiFiClientSecure/WiFiClientSecure.h" //using older WiFiClientSecure
#include <PubSubClient.h>