6 Commits
2.1.0 ... 2.1.1

Author SHA1 Message Date
Dmitry Borisenko
70d0378034 dht comfort add 2020-02-15 20:21:00 +03:00
Dmitry Borisenko
a2c146a0e9 DHT new library and uptime support 2020-02-15 20:17:25 +03:00
Dmitry Borisenko
92c8b79e2a time zone input add 2020-02-13 21:26:36 +03:00
Dmitry Borisenko
96db5965f6 time zone input add 2020-02-13 21:22:54 +03:00
Dmitry Borisenko
05ff2225c9 some fix 2020-02-13 21:18:51 +03:00
Dmitry Borisenko
f91960e325 add time timer 2020-02-13 20:20:34 +03:00
17 changed files with 340 additions and 139 deletions

106
Cmd.ino
View File

@@ -1,5 +1,5 @@
void CMD_init() { void CMD_init() {
sCmd.addCommand("button", button); sCmd.addCommand("button", button);
sCmd.addCommand("buttonSet", buttonSet); sCmd.addCommand("buttonSet", buttonSet);
sCmd.addCommand("pinSet", pinSet); sCmd.addCommand("pinSet", pinSet);
@@ -12,41 +12,49 @@ void CMD_init() {
sCmd.addCommand("analog", analog); sCmd.addCommand("analog", analog);
sCmd.addCommand("level", level); sCmd.addCommand("level", level);
sCmd.addCommand("dallas", dallas); sCmd.addCommand("dallas", dallas);
sCmd.addCommand("dhtT", dhtT); sCmd.addCommand("dhtT", dhtT);
sCmd.addCommand("dhtH", dhtH); sCmd.addCommand("dhtH", dhtH);
sCmd.addCommand("dhtPerception", dhtPerception);
sCmd.addCommand("dhtComfort", dhtComfort);
sCmd.addCommand("logging", logging); sCmd.addCommand("logging", logging);
sCmd.addCommand("inputDigit", inputDigit); sCmd.addCommand("inputDigit", inputDigit);
sCmd.addCommand("digitSet", digitSet); sCmd.addCommand("digitSet", digitSet);
sCmd.addCommand("text", text); sCmd.addCommand("inputTime", inputTime);
sCmd.addCommand("textSet", textSet); sCmd.addCommand("timeSet", timeSet);
sCmd.addCommand("timerStart", timerStart); sCmd.addCommand("timerStart", timerStart);
sCmd.addCommand("timerStop", timerStop); sCmd.addCommand("timerStop", timerStop);
sCmd.addCommand("text", text);
sCmd.addCommand("textSet", textSet);
sCmd.addCommand("mqtt", mqttOrderSend); sCmd.addCommand("mqtt", mqttOrderSend);
sCmd.addCommand("http", httpOrderSend); sCmd.addCommand("http", httpOrderSend);
sCmd.addCommand("push", pushControl); sCmd.addCommand("push", pushControl);
// sCmd.addCommand("time", time);
// sCmd.addCommand("timeSet", timeSet); handle_time_init();
//======новые виджеты ver2.0=======// //======новые виджеты ver2.0=======//
sCmd.addCommand("inputText", inputText); /*
sCmd.addCommand("inputTextSet", inputTextSet); sCmd.addCommand("inputText", inputText);
sCmd.addCommand("inputTextSet", inputTextSet);
sCmd.addCommand("inputTime", inputTime); sCmd.addCommand("inputTime", inputTime);
sCmd.addCommand("inputTimeSet", inputTimeSet); sCmd.addCommand("inputTimeSet", inputTimeSet);
sCmd.addCommand("inputDate", inputDate); sCmd.addCommand("inputDate", inputDate);
sCmd.addCommand("inputDateSet", inputDateSet); sCmd.addCommand("inputDateSet", inputDateSet);
sCmd.addCommand("inputDate", inputDate); sCmd.addCommand("inputDate", inputDate);
//sCmd.addCommand("inputDropdown", inputDropdown); //sCmd.addCommand("inputDropdown", inputDropdown);
*/
//=================================// //=================================//
} }
@@ -211,7 +219,7 @@ void handleButton() {
} }
//===================================================================================================================================== //=====================================================================================================================================
//=========================================Добавление окна ввода переменной============================================================ //=========================================Добавление окна ввода цифры=================================================================
void inputDigit() { void inputDigit() {
String value_name = sCmd.next(); String value_name = sCmd.next();
String number = value_name.substring(5); String number = value_name.substring(5);
@@ -230,6 +238,31 @@ void digitSet() {
jsonWrite(configJson, "digitSet" + number, value); jsonWrite(configJson, "digitSet" + number, value);
sendSTATUS("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() { void text() {
@@ -260,9 +293,19 @@ void textSet() {
sendSTATUS("textSet" + number, text); 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 number = sCmd.next();
String viget_name = sCmd.next(); String viget_name = sCmd.next();
viget_name.replace("#", " "); viget_name.replace("#", " ");
@@ -272,15 +315,15 @@ void inputText() {
String page_number = sCmd.next(); String page_number = sCmd.next();
jsonWrite(configJson, "inputTextSet" + number, start_state); jsonWrite(configJson, "inputTextSet" + number, start_state);
createViget (viget_name, page_name, page_number, "vigets/viget.inputText.json", "inputTextSet" + number); createViget (viget_name, page_name, page_number, "vigets/viget.inputText.json", "inputTextSet" + number);
} }
void inputTextSet() { void inputTextSet() {
String number = sCmd.next(); String number = sCmd.next();
String value = sCmd.next(); String value = sCmd.next();
jsonWrite(configJson, "inputTextSet" + number, value); jsonWrite(configJson, "inputTextSet" + number, value);
sendSTATUS("inputTextSet" + number, value); sendSTATUS("inputTextSet" + number, value);
} }
void inputTime() { void inputTime() {
String number = sCmd.next(); String number = sCmd.next();
String viget_name = sCmd.next(); String viget_name = sCmd.next();
viget_name.replace("#", " "); viget_name.replace("#", " ");
@@ -290,18 +333,18 @@ void inputTime() {
String page_number = sCmd.next(); String page_number = sCmd.next();
jsonWrite(configJson, "inputTimeSet" + number, start_state); jsonWrite(configJson, "inputTimeSet" + number, start_state);
createViget (viget_name, page_name, page_number, "vigets/viget.inputTime.json", "inputTimeSet" + number); createViget (viget_name, page_name, page_number, "vigets/viget.inputTime.json", "inputTimeSet" + number);
} }
void inputTimeSet() { void inputTimeSet() {
String number = sCmd.next(); String number = sCmd.next();
String value = sCmd.next(); String value = sCmd.next();
value.replace(":", "."); value.replace(":", ".");
jsonWrite(configJson, "inputTimeSet" + number, value); jsonWrite(configJson, "inputTimeSet" + number, value);
value.replace(".", ":"); value.replace(".", ":");
sendSTATUS("inputTimeSet" + number, value); sendSTATUS("inputTimeSet" + number, value);
} }
void inputDate() { void inputDate() {
String number = sCmd.next(); String number = sCmd.next();
String viget_name = sCmd.next(); String viget_name = sCmd.next();
viget_name.replace("#", " "); viget_name.replace("#", " ");
@@ -311,13 +354,14 @@ void inputDate() {
String page_number = sCmd.next(); String page_number = sCmd.next();
jsonWrite(configJson, "inputDateSet" + number, start_state); jsonWrite(configJson, "inputDateSet" + number, start_state);
createViget (viget_name, page_name, page_number, "vigets/viget.inputDate.json", "inputDateSet" + number); createViget (viget_name, page_name, page_number, "vigets/viget.inputDate.json", "inputDateSet" + number);
} }
void inputDateSet() { void inputDateSet() {
String number = sCmd.next(); String number = sCmd.next();
String value = sCmd.next(); String value = sCmd.next();
jsonWrite(configJson, "inputDateSet" + number, value); jsonWrite(configJson, "inputDateSet" + number, value);
sendSTATUS("inputDateSet" + number, value); sendSTATUS("inputDateSet" + number, value);
} }
*/
//=================================================Глобальные команды удаленного управления=========================================================== //=================================================Глобальные команды удаленного управления===========================================================
void mqttOrderSend() { void mqttOrderSend() {
@@ -430,7 +474,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; String viget;
viget = readFile(file, 1024); viget = readFile(file, 1024);
@@ -452,9 +496,9 @@ void createViget (String viget_name, String page_name, String page_number, Stri
all_vigets += viget + "\r\n"; all_vigets += viget + "\r\n";
viget = ""; 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; String viget;
viget = readFile(file, 1024); viget = readFile(file, 1024);
@@ -477,7 +521,7 @@ void createViget (String viget_name, String page_name, String page_number, Stri
all_vigets += viget + "\r\n"; all_vigets += viget + "\r\n";
viget = ""; viget = "";
} }
*/ */
String vidgetConfigWrite(String viget, String key, String value) { String vidgetConfigWrite(String viget, String key, String value) {

View File

@@ -38,7 +38,7 @@ void Device_init() {
ts.remove(DHTT); ts.remove(DHTT);
ts.remove(DHTH); ts.remove(DHTH);
//================ //================
all_vigets = ""; all_vigets = "";
txtExecution("firmware.config.txt"); txtExecution("firmware.config.txt");
//outcoming_date(); //outcoming_date();
@@ -50,3 +50,23 @@ void Scenario_init() {
scenario = readFile("firmware.scenario.txt", 2048); scenario = readFile("firmware.scenario.txt", 2048);
} }
} }
void up_time() {
uint32_t ss = millis() / 1000;
uint32_t mm = ss / 60;
uint32_t hh = mm / 60;
uint32_t dd = hh / 24;
if (mm != 0) {
Serial.println(String(mm) + " min");
jsonWrite(configJson, "uptime", String(mm) + " min");
}
if (hh != 0) {
Serial.println(String(hh) + " hours");
jsonWrite(configJson, "uptime", String(hh) + " hours");
}
if (dd != 0) {
Serial.println(String(dd) + " days");
jsonWrite(configJson, "uptime", String(dd) + " days");
}
}

View File

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

View File

@@ -18,7 +18,8 @@ void analog() {
ts.add(ANALOG_, analog_update_int, [&](void*) { ts.add(ANALOG_, analog_update_int, [&](void*) {
static int analog_old; static int analog_old;
#ifdef ESP32 #ifdef ESP32
int analog_in = analogRead(pin.toInt()); //int pin_int = pin.toInt();
int analog_in;// = analogRead(pin_int);
#endif #endif
#ifdef ESP8266 #ifdef ESP8266
int analog_in = analogRead(A0); int analog_in = analogRead(A0);
@@ -123,16 +124,22 @@ void dallas() {
//====================================================================================================================== //======================================================================================================================
//=========================================Модуль сенсоров DHT========================================================== //=========================================Модуль сенсоров DHT==========================================================
void dhtT() { void dhtT() {
String sensor_type = sCmd.next();
String pin = sCmd.next(); String pin = sCmd.next();
String viget_name = sCmd.next(); String viget_name = sCmd.next();
String page_name = sCmd.next(); String page_name = sCmd.next();
String type = sCmd.next(); String type = sCmd.next();
String page_number = sCmd.next(); String page_number = sCmd.next();
dht.setup(pin.toInt()); if (sensor_type == "DHT11") {
dht.setup(pin.toInt(), DHTesp::DHT11);
}
if (sensor_type == "DHT22") {
dht.setup(pin.toInt(), DHTesp::DHT22);
}
choose_viget_and_create(viget_name, page_name, page_number, type, "dhtT"); choose_viget_and_create(viget_name, page_name, page_number, type, "dhtT");
ts.add(DHTT, dhtT_update_int, [&](void*) { ts.add(DHTT, dhtT_update_int + dht.getMinimumSamplingPeriod(), [&](void*) {
int value = 0; float value = 0;
static int value_old; static float value_old;
value = dht.getTemperature(); value = dht.getTemperature();
jsonWrite(configJson, "dhtT", String(value)); jsonWrite(configJson, "dhtT", String(value));
//if (value_old != value) { //if (value_old != value) {
@@ -148,14 +155,20 @@ void dhtT() {
void dhtH() { void dhtH() {
String sensor_type = sCmd.next();
String pin = sCmd.next(); String pin = sCmd.next();
String viget_name = sCmd.next(); String viget_name = sCmd.next();
String page_name = sCmd.next(); String page_name = sCmd.next();
String type = sCmd.next(); String type = sCmd.next();
String page_number = sCmd.next(); String page_number = sCmd.next();
dht.setup(pin.toInt()); if (sensor_type == "DHT11") {
dht.setup(pin.toInt(), DHTesp::DHT11);
}
if (sensor_type == "DHT22") {
dht.setup(pin.toInt(), DHTesp::DHT22);
}
choose_viget_and_create(viget_name, page_name, page_number, type, "dhtH"); choose_viget_and_create(viget_name, page_name, page_number, type, "dhtH");
ts.add(DHTH, dhtH_update_int, [&](void*) { ts.add(DHTH, dhtH_update_int + dht.getMinimumSamplingPeriod(), [&](void*) {
int value = 0; int value = 0;
static int value_old; static int value_old;
value = dht.getHumidity(); value = dht.getHumidity();
@@ -171,6 +184,107 @@ void dhtH() {
}, nullptr, true); }, nullptr, true);
} }
void dhtPerception() {
String viget_name = sCmd.next();
String page_name = sCmd.next();
String page_number = sCmd.next();
choose_viget_and_create(viget_name, page_name, page_number, "any-data", "dhtPerception");
ts.add(DHTP, dhtPerception_update_int, [&](void*) {
byte value;
ComfortState cf;
value = dht.computePerception(jsonRead(configJson, "dhtT").toFloat(), jsonRead(configJson, "dhtH").toInt(), false);
String final_line = perception(value);
jsonWrite(configJson, "dhtPerception", final_line);
eventGen ("dhtPerception", "");
sendSTATUS("dhtPerception", final_line);
if (client.connected()) {
Serial.println("[i] sensor dhtPerception send date " + final_line);
}
}, nullptr, true);
}
String perception(byte value) {
if (value == 0) return "Сухой воздух";
if (value == 1) return "Комфортно";
if (value == 2) return "Уютно";
if (value == 3) return "Хорошо";
if (value == 4) return "Неудобно";
if (value == 5) return "Довольно неудобно";
if (value == 6) return "Очень неудобно";
if (value == 7) return "Сильно неудобно, полный звиздец";
}
void dhtComfort() {
String viget_name = sCmd.next();
String page_name = sCmd.next();
String page_number = sCmd.next();
choose_viget_and_create(viget_name, page_name, page_number, "any-data", "dhtComfort");
ts.add(DHTC, dhtComfort_update_int, [&](void*) {
float value;
ComfortState cf;
value = dht.getComfortRatio(cf, jsonRead(configJson, "dhtT").toFloat(), jsonRead(configJson, "dhtH").toInt(), false);
String comfortStatus;
switch (cf) {
case Comfort_OK:
comfortStatus = "Отлично";
break;
case Comfort_TooHot:
comfortStatus = "Очень жарко";
break;
case Comfort_TooCold:
comfortStatus = "Очень холодно";
break;
case Comfort_TooDry:
comfortStatus = "Очень сухо";
break;
case Comfort_TooHumid:
comfortStatus = "Очень влажно";
break;
case Comfort_HotAndHumid:
comfortStatus = "Жарко и влажно";
break;
case Comfort_HotAndDry:
comfortStatus = "Жарко и сухо";
break;
case Comfort_ColdAndHumid:
comfortStatus = "Холодно и влажно";
break;
case Comfort_ColdAndDry:
comfortStatus = "Холодно и сухо";
break;
default:
comfortStatus = "Неизвестно";
break;
};
String final_line = comfortStatus;
jsonWrite(configJson, "dhtComfort", final_line);
eventGen ("dhtComfort", "");
sendSTATUS("dhtComfort", final_line);
if (client.connected()) {
Serial.println("[i] sensor dhtComfort send date " + final_line);
}
}, nullptr, true);
}
void dhtDewPoint() {
String viget_name = sCmd.next();
String page_name = sCmd.next();
String page_number = sCmd.next();
choose_viget_and_create(viget_name, page_name, page_number, "any-data", "dhtPerception");
ts.add(DHTP, dhtPerception_update_int, [&](void*) {
byte value;
ComfortState cf;
value = dht.computePerception(jsonRead(configJson, "dhtT").toFloat(), jsonRead(configJson, "dhtH").toInt(), false);
String final_line = perception(value);
jsonWrite(configJson, "dhtPerception", final_line);
eventGen ("dhtPerception", "");
sendSTATUS("dhtPerception", final_line);
if (client.connected()) {
Serial.println("[i] sensor dhtPerception send date " + final_line);
}
}, nullptr, true);
}
void choose_viget_and_create(String viget_name, String page_name, String page_number, String type, String topik) { void choose_viget_and_create(String viget_name, String page_name, String page_number, String type, String topik) {
@@ -200,12 +314,12 @@ void logging() {
if (sensor_name == "level") jsonWrite(optionJson, "level_logging_count", maxCount); if (sensor_name == "level") jsonWrite(optionJson, "level_logging_count", maxCount);
if (sensor_name == "dallas") jsonWrite(optionJson, "dallas_logging_count", maxCount); if (sensor_name == "dallas") jsonWrite(optionJson, "dallas_logging_count", maxCount);
if (sensor_name == "ph") jsonWrite(optionJson, "ph_logging_count", maxCount); if (sensor_name == "ph") jsonWrite(optionJson, "ph_logging_count", maxCount);
/* /*
if (sensor_name == "analog") createViget (viget_name, page_name, page_number, "vigets/viget.chart.json", "loganalog", "maxCount", maxCount); if (sensor_name == "analog") createViget (viget_name, page_name, page_number, "vigets/viget.chart.json", "loganalog", "maxCount", maxCount);
if (sensor_name == "level") createViget (viget_name, page_name, page_number, "vigets/viget.chart.json", "loglevel", "maxCount", maxCount); if (sensor_name == "level") createViget (viget_name, page_name, page_number, "vigets/viget.chart.json", "loglevel", "maxCount", maxCount);
if (sensor_name == "dallas") createViget (viget_name, page_name, page_number, "vigets/viget.chart.json", "logdallas", "maxCount", maxCount); if (sensor_name == "dallas") createViget (viget_name, page_name, page_number, "vigets/viget.chart.json", "logdallas", "maxCount", maxCount);
if (sensor_name == "ph") createViget (viget_name, page_name, page_number, "vigets/viget.chart.json", "logph", "maxCount", maxCount); if (sensor_name == "ph") createViget (viget_name, page_name, page_number, "vigets/viget.chart.json", "logph", "maxCount", maxCount);
*/ */
if (sensor_name == "analog") { if (sensor_name == "analog") {
flagLoggingAnalog = true; flagLoggingAnalog = true;
ts.remove(ANALOG_LOG); ts.remove(ANALOG_LOG);

View File

@@ -1,54 +1,50 @@
#ifdef ESP8266
#include <time.h>
void Time_Init() { 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) { 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"); // отправляем ответ о выполнении request->send(200, "text/text", "OK"); // отправляем ответ о выполнении
}); });
reconfigTime();
timeSynch(jsonReadtoInt(configSetup, "timezone"));
} }
void reconfigTime() {
void timeSynch(int zone) {
if (WiFi.status() == WL_CONNECTED) { 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() { configTime(jsonRead(configSetup, "timezone").toInt() * 3600, 0, ntpServer);
timeSynch(jsonReadtoInt(configSetup, "timezone"));
//request->send(200, "text/text", "OK"); 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 #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() { String GetTime() {
time_t now = time(nullptr); // получаем время с помощью библиотеки time.h 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 // о подключении и выводим адрес IP
Serial.println(""); Serial.println("");
Serial.println("[V] WiFi connected"); Serial.println("[V] WiFi connected");
Serial.println("[V] IP address: "); Serial.print("[V] IP address: ");
Serial.println(WiFi.localIP()); Serial.print(WiFi.localIP());
Serial.println("");
jsonWrite(configJson, "ip", WiFi.localIP().toString()); jsonWrite(configJson, "ip", WiFi.localIP().toString());
} }

View File

@@ -20,6 +20,10 @@
"type": "h4", "type": "h4",
"title": "IP address: {{ip}}" "title": "IP address: {{ip}}"
}, },
{
"type": "h4",
"title": "Uptime: {{uptime}}"
},
{ {
"type": "hr" "type": "hr"
}, },

View File

@@ -3,18 +3,27 @@ button 2 13 Прихожая Реле 0 2
button 3 14 Кухня Реле 0 3 button 3 14 Кухня Реле 0 3
pwm 1 3 Яркость#коредор: Реле 1023 4 pwm 1 3 Яркость#коредор: Реле 1023 4
pwm 2 4 Яркость#ванная: Реле 510 5 pwm 2 4 Яркость#ванная: Реле 510 5
analog 0 Аналоговый#вход,#% Датчики progress-round 1 1024 1 1024 6 //-------------------------------------------------------------------------------------------------
//dallas 2 Водонагреватель,#t°C Датчики any-data 7 //analog 0 Аналоговый#вход,#% Датчики progress-round 1 1024 1 1024 6
//dhtT 2 Температура#DHT,#t°C Датчики any-data 8 inputDigit digit1 При#скольки#включить? Датчики 10 7
//dhtH 2 Влажность#DHT,#% Датчики any-data 9 inputDigit digit2 При#скольки#выключить? Датчики 0 8
//level Вода#в#баке,#% Датчики any-data 125 20 10 button 4 na Нагреватель Датчики 0 9
inputDigit digit1 При#скольки#включить? Датчики 10 11 //dallas 2 Водонагреватель,#t°C Датчики any-data 10
button 4 na Кнопка Датчики 0 12 dhtT DHT11 2 Температура#DHT,#t°C Датчики any-data 11
button 5 na Вкл#обратный#таймер Таймеры 0 13 dhtH DHT11 2 Влажность#DHT,#% Датчики any-data 12
inputDigit digit2 Через#сколько#секунд#включить? Таймеры 5 14 dhtComfort Степень#комфорта: Датчики 12
button 6 5 Включится#по#таймеру Таймеры 0 15 dhtPerception Восприятие: Датчики 13
//level Вода#в#баке,#% Датчики any-data 125 20 14
//-------------------------------------------------------------------------------------------------
button 5 na Вкл#обратный#таймер Таймеры 0 15
inputDigit digit3 Через#сколько#секунд#включить? Таймеры 5 16
button 6 na Включится#по#таймеру Таймеры 0 17
inputTime time1 Во#сколько#включить? Таймеры 20.30 18
button 7 5 Включится#по#таймеру Таймеры 0 19
//-------------------------------------------------------------------------------------------------
switch 1 0 20 switch 1 0 20
textSet 1 неопределено textSet 1 неопределено
text 1 Квартира Двери 22 text 1 Квартира Двери 22
button 7 scenario Вкл#выкл#все#сценарии Сценарии 1 23 //-------------------------------------------------------------------------------------------------
button 8 line1,line2, Вкл#выкл#выбранные#сценарии Сценарии 1 24 button 8 scenario Вкл#выкл#все#сценарии Сценарии 1 23
button 9 line1,line2, Вкл#выкл#выбранные#сценарии Сценарии 1 24

View File

@@ -11,15 +11,18 @@ end
analog > digit1 analog > digit1
buttonSet 4 1 buttonSet 4 1
end end
analog < digit1 analog < digit2
buttonSet 4 0 buttonSet 4 0
end end
button5 = 1 button5 = 1
timerStart 1 digit2 sec timerStart 1 digit3 sec
end end
timer1 = 0 timer1 = 0
buttonSet 6 1 buttonSet 6 1
end end
timenow = time1
buttonSet 7 1
end
switch1 = 1 switch1 = 1
textSet 1 закрыто-time textSet 1 закрыто-time
push закрыто вход push закрыто вход

View File

@@ -116,6 +116,26 @@
"action": "web?web_login=[[web-login]]&web_pass=[[web-pass]]", "action": "web?web_login=[[web-login]]&web_pass=[[web-pass]]",
"class": "btn btn-block btn-success" "class": "btn btn-block btn-success"
}, },
{
"type": "hr"
},
{
"type": "h2",
"title": "Временная зона"
},
{
"type": "input",
"title": "Логин",
"name":"time-zone",
"state": "{{timezone}}",
"pattern": ".{1,20}"
},
{
"type": "button",
"title": "Сохранить",
"action": "timeZone?timezone=[[time-zone]]",
"class": "btn btn-block btn-success"
},
{ {
"type": "hr" "type": "hr"
}, },

View File

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

View File

@@ -1,7 +1,6 @@
{ {
"widget" : "progress-round", "widget" : "progress-round",
"icon" : "globe", "descrColor" : "",
"descrColor" : "orange",
"max" : "100", "max" : "100",
"stroke" : "20", "stroke" : "20",
"color" : "#45ccce", "color" : "#45ccce",

View File

@@ -53,11 +53,11 @@ void setup() {
getMemoryLoad("[i] After loading"); getMemoryLoad("[i] After loading");
// ts.add(TEST, 1000, [&](void*) { ts.add(TEST, 5000, [&](void*) {
//getMemoryLoad("[i] Periodic check"); up_time();
// }, nullptr, true); }, nullptr, true);
} }

View File

@@ -268,7 +268,7 @@ void getMemoryLoad(String text) {
#endif #endif
int memory_remain = ESP.getFreeHeap(); int memory_remain = ESP.getFreeHeap();
int memory_used = all_memory - memory_remain; int memory_used = all_memory - memory_remain;
int memory_load = memory_used * 100 / all_memory; int memory_load = (memory_used * 100) / all_memory;
if (memory_load > 65) Serial.print("Attention!!! too match memory used!!!"); if (memory_load > 65) Serial.print("Attention!!! too match memory used!!!");
Serial.print(text + " memory used:"); Serial.print(text + " memory used:");
Serial.print(String(memory_load) + "%; "); Serial.print(String(memory_load) + "%; ");

View File

@@ -250,9 +250,12 @@ void sendAllData() { //берет строку json и ключи превра
while (current_config.length() != 0) { while (current_config.length() != 0) {
String tmp = selectToMarker (current_config, ","); String tmp = selectToMarker (current_config, ",");
String topic = selectToMarker (tmp, ":"); String topic = selectToMarker (tmp, ":");
topic.replace("\"", ""); topic.replace("\"", "");
String state = selectToMarkerLast (tmp, ":"); String state = selectToMarkerLast (tmp, ":");
if (topic.indexOf("time") < 0) {
state.replace(".", ":");
}
state.replace("\"", ""); state.replace("\"", "");
if (topic != ssdpS && topic != "lang" && topic != "ip" && topic.indexOf("_in") < 0) { if (topic != ssdpS && topic != "lang" && topic != "ip" && topic.indexOf("_in") < 0) {
sendSTATUS(topic, state); sendSTATUS(topic, state);

9
set.h
View File

@@ -20,6 +20,7 @@ HTTPClient http;
#endif #endif
//==общие библиотеки и объекты==// //==общие библиотеки и объекты==//
#include "time.h"
#ifdef OTA_enable #ifdef OTA_enable
#include <ArduinoOTA.h> #include <ArduinoOTA.h>
#endif #endif
@@ -35,7 +36,7 @@ AsyncEventSource events("/events");
#include "time.h" #include "time.h"
#include <TickerScheduler.h> #include <TickerScheduler.h>
TickerScheduler ts(30); 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, DHTC, DHTP, ANALOG_LOG, LEVEL_LOG, DALLAS_LOG, PH_LOG, CMD , TIMER_COUNTDOWN, TIMERS, TIME, TEST};
//ssl//#include "dependencies/WiFiClientSecure/WiFiClientSecure.h" //using older WiFiClientSecure //ssl//#include "dependencies/WiFiClientSecure/WiFiClientSecure.h" //using older WiFiClientSecure
#include <PubSubClient.h> #include <PubSubClient.h>
@@ -59,8 +60,8 @@ GMedian medianFilter;
OneWire *oneWire; OneWire *oneWire;
DallasTemperature sensors; DallasTemperature sensors;
//---------------------------------------------------------------- //----------------------------------------------------------------
#include <DHT.h> //https://github.com/markruys/arduino-DHT #include "DHTesp.h"
DHT dht; DHTesp dht;
//---------------------------------------------------------------- //----------------------------------------------------------------
#include "Adafruit_Si7021.h" //https://github.com/adafruit/Adafruit_Si7021 #include "Adafruit_Si7021.h" //https://github.com/adafruit/Adafruit_Si7021
Adafruit_Si7021 sensor_Si7021 = Adafruit_Si7021(); Adafruit_Si7021 sensor_Si7021 = Adafruit_Si7021();
@@ -88,6 +89,8 @@ Adafruit_Si7021 sensor_Si7021 = Adafruit_Si7021();
//----------------------------------------------------------------- //-----------------------------------------------------------------
#define dhtT_update_int 5000 #define dhtT_update_int 5000
#define dhtH_update_int 5000 #define dhtH_update_int 5000
#define dhtComfort_update_int 5000
#define dhtPerception_update_int 5000
//----------------------------------------------------------------- //-----------------------------------------------------------------