From f91960e32534e8dffaa598578bed685534a873e7 Mon Sep 17 00:00:00 2001 From: Dmitry Borisenko <49808844+DmitryBorisenko33@users.noreply.github.com> Date: Thu, 13 Feb 2020 20:20:34 +0300 Subject: [PATCH] add time timer --- Cmd.ino | 104 ++++++++++++++++++++++--------- Scenario.ino | 16 +++-- Sensors.ino | 3 +- Time_esp8266.ino => Time.ino | 78 +++++++++++------------ Time_esp32.ino | 20 ------ WiFi.ino | 5 +- data/config-my.json | 1 - data/config-users.json | 1 + data/config.json | 2 +- data/vigets/viget.inputTime.json | 3 +- mqtt.ino | 3 + set.h | 3 +- 12 files changed, 134 insertions(+), 105 deletions(-) rename Time_esp8266.ino => Time.ino (71%) delete mode 100644 Time_esp32.ino delete mode 100644 data/config-my.json create mode 100644 data/config-users.json diff --git a/Cmd.ino b/Cmd.ino index 224c14bc..85b4cc8d 100644 --- a/Cmd.ino +++ b/Cmd.ino @@ -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) { diff --git a/Scenario.ino b/Scenario.ino index 5b3543c8..d4c17a98 100644 --- a/Scenario.ino +++ b/Scenario.ino @@ -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; diff --git a/Sensors.ino b/Sensors.ino index 932d76f5..3016ab4d 100644 --- a/Sensors.ino +++ b/Sensors.ino @@ -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); diff --git a/Time_esp8266.ino b/Time.ino similarity index 71% rename from Time_esp8266.ino rename to Time.ino index 7b75a4d8..766aff96 100644 --- a/Time_esp8266.ino +++ b/Time.ino @@ -1,54 +1,50 @@ -#ifdef ESP8266 - -#include 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 diff --git a/Time_esp32.ino b/Time_esp32.ino deleted file mode 100644 index d70ceb99..00000000 --- a/Time_esp32.ino +++ /dev/null @@ -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 diff --git a/WiFi.ino b/WiFi.ino index 6825f657..982f84dd 100644 --- a/WiFi.ino +++ b/WiFi.ino @@ -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()); } diff --git a/data/config-my.json b/data/config-my.json deleted file mode 100644 index ae16f518..00000000 --- a/data/config-my.json +++ /dev/null @@ -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"} \ No newline at end of file diff --git a/data/config-users.json b/data/config-users.json new file mode 100644 index 00000000..0479064d --- /dev/null +++ b/data/config-users.json @@ -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"} \ No newline at end of file diff --git a/data/config.json b/data/config.json index 0479064d..ae16f518 100644 --- a/data/config.json +++ b/data/config.json @@ -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"} \ No newline at end of file +{"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"} \ No newline at end of file diff --git a/data/vigets/viget.inputTime.json b/data/vigets/viget.inputTime.json index 241a37fc..e39942a4 100644 --- a/data/vigets/viget.inputTime.json +++ b/data/vigets/viget.inputTime.json @@ -1,6 +1,5 @@ { "widget" : "input", - "size" : "small", - "color" : "orange", + "color" : "blue", "type" : "time" } \ No newline at end of file diff --git a/mqtt.ino b/mqtt.ino index f2c13be1..a9d32c69 100644 --- a/mqtt.ino +++ b/mqtt.ino @@ -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("\"", ""); diff --git a/set.h b/set.h index 650e606a..fd384f91 100644 --- a/set.h +++ b/set.h @@ -20,6 +20,7 @@ HTTPClient http; #endif //==общие библиотеки и объекты==// +#include "time.h" #ifdef OTA_enable #include #endif @@ -35,7 +36,7 @@ AsyncEventSource events("/events"); #include "time.h" #include 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