mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-03-28 23:22:19 +03:00
Compare commits
12 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f8a50e09b7 | ||
|
|
a6117db46e | ||
|
|
ec187af09d | ||
|
|
7bc5be8db5 | ||
|
|
a29a8b246c | ||
|
|
8d16ae9188 | ||
|
|
70d0378034 | ||
|
|
a2c146a0e9 | ||
|
|
92c8b79e2a | ||
|
|
96db5965f6 | ||
|
|
05ff2225c9 | ||
|
|
f91960e325 |
130
Cmd.ino
130
Cmd.ino
@@ -1,8 +1,11 @@
|
|||||||
void CMD_init() {
|
void CMD_init() {
|
||||||
|
|
||||||
sCmd.addCommand("button", button);
|
sCmd.addCommand("button", button);
|
||||||
sCmd.addCommand("buttonSet", buttonSet);
|
sCmd.addCommand("buttonSet", buttonSet);
|
||||||
|
sCmd.addCommand("buttonChange", buttonChange);
|
||||||
|
|
||||||
sCmd.addCommand("pinSet", pinSet);
|
sCmd.addCommand("pinSet", pinSet);
|
||||||
|
sCmd.addCommand("pinChange", pinChange);
|
||||||
|
|
||||||
sCmd.addCommand("pwm", pwm);
|
sCmd.addCommand("pwm", pwm);
|
||||||
sCmd.addCommand("pwmSet", pwmSet);
|
sCmd.addCommand("pwmSet", pwmSet);
|
||||||
@@ -12,41 +15,50 @@ 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("dhtDewpoint", dhtDewpoint);
|
||||||
|
|
||||||
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);
|
||||||
|
*/
|
||||||
//=================================//
|
//=================================//
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -129,13 +141,30 @@ void buttonSet() {
|
|||||||
sendSTATUS("buttonSet" + button_number, button_state);
|
sendSTATUS("buttonSet" + button_number, button_state);
|
||||||
}
|
}
|
||||||
|
|
||||||
void pinSet() {
|
void buttonChange() {
|
||||||
|
String button_number = sCmd.next();
|
||||||
|
String current_state = jsonRead(configJson, "buttonSet" + button_number);
|
||||||
|
if (current_state == "1") {
|
||||||
|
current_state = "0";
|
||||||
|
} else if (current_state == "0") {
|
||||||
|
current_state = "1";
|
||||||
|
}
|
||||||
|
order_loop += "buttonSet " + button_number + " " + current_state + ",";
|
||||||
|
jsonWrite(configJson, "buttonSet" + button_number, current_state);
|
||||||
|
sendSTATUS("buttonSet" + button_number, current_state);
|
||||||
|
}
|
||||||
|
|
||||||
|
void pinSet() {
|
||||||
String pin_number = sCmd.next();
|
String pin_number = sCmd.next();
|
||||||
String pin_state = sCmd.next();
|
String pin_state = sCmd.next();
|
||||||
pinMode(pin_number.toInt(), OUTPUT);
|
pinMode(pin_number.toInt(), OUTPUT);
|
||||||
digitalWrite(pin_number.toInt(), pin_state.toInt());
|
digitalWrite(pin_number.toInt(), pin_state.toInt());
|
||||||
|
}
|
||||||
|
|
||||||
|
void pinChange() {
|
||||||
|
String pin_number = sCmd.next();
|
||||||
|
pinMode(pin_number.toInt(), OUTPUT);
|
||||||
|
digitalWrite(pin_number.toInt(), !digitalRead(pin_number.toInt()));
|
||||||
}
|
}
|
||||||
//==================================================================================================================
|
//==================================================================================================================
|
||||||
//==========================================Модуль управления ШИМ===================================================
|
//==========================================Модуль управления ШИМ===================================================
|
||||||
@@ -211,7 +240,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 +259,38 @@ 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();
|
||||||
|
jsonWrite(configJson, "timeSet" + number, start_state);
|
||||||
|
createViget (viget_name, page_name, page_number, "vigets/viget.inputTime.json", "timeSet" + number);
|
||||||
|
}
|
||||||
|
void timeSet() {
|
||||||
|
String number = sCmd.next();
|
||||||
|
String value = sCmd.next();
|
||||||
|
jsonWrite(configJson, "timeSet" + number, value);
|
||||||
|
sendSTATUS("timeSet" + number, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
void handle_time_init() {
|
||||||
|
ts.add(TIME, 1000, [&](void*) {
|
||||||
|
|
||||||
|
String tmp = GetTime();
|
||||||
|
tmp.replace(":", "-");
|
||||||
|
jsonWrite(configJson, "timenowSet", tmp);
|
||||||
|
eventGen ("timenowSet", "");
|
||||||
|
|
||||||
|
}, nullptr, true);
|
||||||
|
}
|
||||||
|
|
||||||
//=====================================================================================================================================
|
//=====================================================================================================================================
|
||||||
//=========================================Добавление текстового виджета============================================================
|
//=========================================Добавление текстового виджета============================================================
|
||||||
void text() {
|
void text() {
|
||||||
@@ -251,9 +312,10 @@ void textSet() {
|
|||||||
|
|
||||||
if (text.indexOf("-time") >= 0) {
|
if (text.indexOf("-time") >= 0) {
|
||||||
text.replace("-time", "");
|
text.replace("-time", "");
|
||||||
|
text.replace("#", " ");
|
||||||
String time = GetTime();
|
String time = GetTime();
|
||||||
time.replace(":", ".");
|
time.replace(":", ".");
|
||||||
text = GetDataDigital() + " " + time + " " + text;
|
text = text + " " + GetDataDigital() + " " + time;
|
||||||
}
|
}
|
||||||
|
|
||||||
jsonWrite(configJson, "textSet" + number, text);
|
jsonWrite(configJson, "textSet" + number, text);
|
||||||
@@ -262,7 +324,8 @@ void textSet() {
|
|||||||
|
|
||||||
|
|
||||||
//====================================================================================================================================================
|
//====================================================================================================================================================
|
||||||
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 +335,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 +353,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 +374,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 +494,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 +516,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 +541,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) {
|
||||||
|
|
||||||
|
|||||||
205
Init.ino
205
Init.ino
@@ -5,7 +5,6 @@ void All_init() {
|
|||||||
request->send(200, "text/text", "OK"); // отправляем ответ о выполнении
|
request->send(200, "text/text", "OK"); // отправляем ответ о выполнении
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
server.on("/scenario", HTTP_GET, [](AsyncWebServerRequest * request) {
|
server.on("/scenario", HTTP_GET, [](AsyncWebServerRequest * request) {
|
||||||
if (request->hasArg("status")) {
|
if (request->hasArg("status")) {
|
||||||
jsonWrite(configSetup, "scenario", request->getParam("status")->value());
|
jsonWrite(configSetup, "scenario", request->getParam("status")->value());
|
||||||
@@ -24,6 +23,8 @@ void All_init() {
|
|||||||
request->send(200, "text/text", "OK"); // отправляем ответ о выполнении
|
request->send(200, "text/text", "OK"); // отправляем ответ о выполнении
|
||||||
});
|
});
|
||||||
|
|
||||||
|
prsets_init();
|
||||||
|
|
||||||
Device_init();
|
Device_init();
|
||||||
Scenario_init();
|
Scenario_init();
|
||||||
Timer_countdown_init();
|
Timer_countdown_init();
|
||||||
@@ -38,7 +39,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 +51,203 @@ void Scenario_init() {
|
|||||||
scenario = readFile("firmware.scenario.txt", 2048);
|
scenario = readFile("firmware.scenario.txt", 2048);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void prsets_init() {
|
||||||
|
|
||||||
|
//part 1===============================================================================
|
||||||
|
|
||||||
|
server.on("/relay", HTTP_GET, [](AsyncWebServerRequest * request) {
|
||||||
|
writeFile("firmware.config.txt", readFile("configs/relay.config.txt", 2048));
|
||||||
|
writeFile("firmware.scenario.txt", readFile("configs/relay.scenario.txt", 2048));
|
||||||
|
Device_init();
|
||||||
|
Scenario_init();
|
||||||
|
String tmp = "";
|
||||||
|
request->redirect("/page.htm?configuration");
|
||||||
|
});
|
||||||
|
|
||||||
|
server.on("/relay_timer", HTTP_GET, [](AsyncWebServerRequest * request) {
|
||||||
|
writeFile("firmware.config.txt", readFile("configs/relay_t.config.txt", 2048));
|
||||||
|
writeFile("firmware.scenario.txt", readFile("configs/relay_t.scenario.txt", 2048));
|
||||||
|
Device_init();
|
||||||
|
Scenario_init();
|
||||||
|
request->redirect("/page.htm?configuration");
|
||||||
|
});
|
||||||
|
|
||||||
|
server.on("/relay_countdown", HTTP_GET, [](AsyncWebServerRequest * request) {
|
||||||
|
writeFile("firmware.config.txt", readFile("configs/relay_c.config.txt", 2048));
|
||||||
|
writeFile("firmware.scenario.txt", readFile("configs/relay_c.scenario.txt", 2048));
|
||||||
|
Device_init();
|
||||||
|
Scenario_init();
|
||||||
|
request->redirect("/page.htm?configuration");
|
||||||
|
});
|
||||||
|
|
||||||
|
server.on("/relay_several", HTTP_GET, [](AsyncWebServerRequest * request) {
|
||||||
|
writeFile("firmware.config.txt", readFile("configs/relay_s.config.txt", 2048));
|
||||||
|
writeFile("firmware.scenario.txt", readFile("configs/relay_s.scenario.txt", 2048));
|
||||||
|
Device_init();
|
||||||
|
Scenario_init();
|
||||||
|
request->redirect("/page.htm?configuration");
|
||||||
|
});
|
||||||
|
|
||||||
|
server.on("/relay_switch", HTTP_GET, [](AsyncWebServerRequest * request) {
|
||||||
|
writeFile("firmware.config.txt", readFile("configs/relay_sw.config.txt", 2048));
|
||||||
|
writeFile("firmware.scenario.txt", readFile("configs/relay_sw.scenario.txt", 2048));
|
||||||
|
Device_init();
|
||||||
|
Scenario_init();
|
||||||
|
request->redirect("/page.htm?configuration");
|
||||||
|
});
|
||||||
|
|
||||||
|
server.on("/relay_button_remote", HTTP_GET, [](AsyncWebServerRequest * request) {
|
||||||
|
writeFile("firmware.config.txt", readFile("configs/relay_br.config.txt", 2048));
|
||||||
|
writeFile("firmware.scenario.txt", readFile("configs/relay_br.scenario.txt", 2048));
|
||||||
|
Device_init();
|
||||||
|
Scenario_init();
|
||||||
|
request->redirect("/page.htm?configuration");
|
||||||
|
});
|
||||||
|
|
||||||
|
server.on("/relay_switch_remote", HTTP_GET, [](AsyncWebServerRequest * request) {
|
||||||
|
writeFile("firmware.config.txt", readFile("configs/relay_sr.config.txt", 2048));
|
||||||
|
writeFile("firmware.scenario.txt", readFile("configs/relay_sr.scenario.txt", 2048));
|
||||||
|
Device_init();
|
||||||
|
Scenario_init();
|
||||||
|
request->redirect("/page.htm?configuration");
|
||||||
|
});
|
||||||
|
|
||||||
|
server.on("/pwm", HTTP_GET, [](AsyncWebServerRequest * request) {
|
||||||
|
writeFile("firmware.config.txt", readFile("configs/pwm.config.txt", 2048));
|
||||||
|
writeFile("firmware.scenario.txt", readFile("configs/pwm.scenario.txt", 2048));
|
||||||
|
Device_init();
|
||||||
|
Scenario_init();
|
||||||
|
request->redirect("/page.htm?configuration");
|
||||||
|
});
|
||||||
|
|
||||||
|
//part 2===============================================================================
|
||||||
|
|
||||||
|
server.on("/dht11", HTTP_GET, [](AsyncWebServerRequest * request) {
|
||||||
|
writeFile("firmware.config.txt", readFile("configs/dht11.config.txt", 2048));
|
||||||
|
writeFile("firmware.scenario.txt", readFile("configs/dht11.scenario.txt", 2048));
|
||||||
|
Device_init();
|
||||||
|
Scenario_init();
|
||||||
|
request->redirect("/page.htm?configuration");
|
||||||
|
});
|
||||||
|
|
||||||
|
server.on("/dht22", HTTP_GET, [](AsyncWebServerRequest * request) {
|
||||||
|
writeFile("firmware.config.txt", readFile("configs/dht22.config.txt", 2048));
|
||||||
|
writeFile("firmware.scenario.txt", readFile("configs/dht22.scenario.txt", 2048));
|
||||||
|
Device_init();
|
||||||
|
Scenario_init();
|
||||||
|
request->redirect("/page.htm?configuration");
|
||||||
|
});
|
||||||
|
|
||||||
|
server.on("/analog", HTTP_GET, [](AsyncWebServerRequest * request) {
|
||||||
|
writeFile("firmware.config.txt", readFile("configs/analog.config.txt", 2048));
|
||||||
|
writeFile("firmware.scenario.txt", readFile("configs/analog.scenario.txt", 2048));
|
||||||
|
Device_init();
|
||||||
|
Scenario_init();
|
||||||
|
request->redirect("/page.htm?configuration");
|
||||||
|
});
|
||||||
|
|
||||||
|
server.on("/dallas", HTTP_GET, [](AsyncWebServerRequest * request) {
|
||||||
|
writeFile("firmware.config.txt", readFile("configs/dallas.config.txt", 2048));
|
||||||
|
writeFile("firmware.scenario.txt", readFile("configs/dallas.scenario.txt", 2048));
|
||||||
|
Device_init();
|
||||||
|
Scenario_init();
|
||||||
|
request->redirect("/page.htm?configuration");
|
||||||
|
});
|
||||||
|
|
||||||
|
server.on("/termostat", HTTP_GET, [](AsyncWebServerRequest * request) {
|
||||||
|
writeFile("firmware.config.txt", readFile("configs/termostat.config.txt", 2048));
|
||||||
|
writeFile("firmware.scenario.txt", readFile("configs/termostat.scenario.txt", 2048));
|
||||||
|
Device_init();
|
||||||
|
Scenario_init();
|
||||||
|
request->redirect("/page.htm?configuration");
|
||||||
|
});
|
||||||
|
|
||||||
|
server.on("/level", HTTP_GET, [](AsyncWebServerRequest * request) {
|
||||||
|
writeFile("firmware.config.txt", readFile("configs/level.config.txt", 2048));
|
||||||
|
writeFile("firmware.scenario.txt", readFile("configs/level.scenario.txt", 2048));
|
||||||
|
Device_init();
|
||||||
|
Scenario_init();
|
||||||
|
request->redirect("/page.htm?configuration");
|
||||||
|
});
|
||||||
|
|
||||||
|
server.on("/moution_relay", HTTP_GET, [](AsyncWebServerRequest * request) {
|
||||||
|
writeFile("firmware.config.txt", readFile("configs/moution_r.config.txt", 2048));
|
||||||
|
writeFile("firmware.scenario.txt", readFile("configs/moution_r.scenario.txt", 2048));
|
||||||
|
Device_init();
|
||||||
|
Scenario_init();
|
||||||
|
request->redirect("/page.htm?configuration");
|
||||||
|
});
|
||||||
|
|
||||||
|
server.on("/moution_security", HTTP_GET, [](AsyncWebServerRequest * request) {
|
||||||
|
writeFile("firmware.config.txt", readFile("configs/moution_s.config.txt", 2048));
|
||||||
|
writeFile("firmware.scenario.txt", readFile("configs/moution_s.scenario.txt", 2048));
|
||||||
|
Device_init();
|
||||||
|
Scenario_init();
|
||||||
|
request->redirect("/page.htm?configuration");
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
//default===============================================================================
|
||||||
|
|
||||||
|
server.on("/default", HTTP_GET, [](AsyncWebServerRequest * request) {
|
||||||
|
writeFile("firmware.config.txt", readFile("configs/firmware.config.txt", 2048));
|
||||||
|
writeFile("firmware.scenario.txt", readFile("configs/firmware.scenario.txt", 2048));
|
||||||
|
Device_init();
|
||||||
|
Scenario_init();
|
||||||
|
request->redirect("/page.htm?configuration");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void up_time() {
|
||||||
|
uint32_t ss = millis() / 1000;
|
||||||
|
uint32_t mm = ss / 60;
|
||||||
|
uint32_t hh = mm / 60;
|
||||||
|
uint32_t dd = hh / 24;
|
||||||
|
|
||||||
|
String out = "";
|
||||||
|
|
||||||
|
if (ss != 0) {
|
||||||
|
out = "[i] uptime = " + String(ss) + " sec";
|
||||||
|
jsonWrite(configJson, "uptime", String(ss) + " sec");
|
||||||
|
}
|
||||||
|
if (mm != 0) {
|
||||||
|
out = "[i] uptime = " + String(mm) + " min";
|
||||||
|
jsonWrite(configJson, "uptime", String(mm) + " min");
|
||||||
|
}
|
||||||
|
if (hh != 0) {
|
||||||
|
out = "[i] uptime = " + String(hh) + " hours";
|
||||||
|
jsonWrite(configJson, "uptime", String(hh) + " hours");
|
||||||
|
}
|
||||||
|
if (dd != 0) {
|
||||||
|
out = "[i] uptime = " + String(dd) + " days";
|
||||||
|
jsonWrite(configJson, "uptime", String(dd) + " days");
|
||||||
|
}
|
||||||
|
Serial.println(out + ", mqtt_lost_error: " + String(mqtt_lost_error) + ", wifi_lost_error: " + String(wifi_lost_error));
|
||||||
|
}
|
||||||
|
|
||||||
|
void statistics() {
|
||||||
|
String urls = "http://backup.privet.lv/visitors/?";
|
||||||
|
|
||||||
|
urls += WiFi.macAddress().c_str();
|
||||||
|
urls += "&";
|
||||||
|
|
||||||
|
#ifdef ESP8266
|
||||||
|
urls += "iot-manager_esp8266";
|
||||||
|
#endif
|
||||||
|
#ifdef ESP32
|
||||||
|
urls += "iot-manager_esp32";
|
||||||
|
#endif
|
||||||
|
urls += "&";
|
||||||
|
|
||||||
|
#ifdef ESP8266
|
||||||
|
urls += ESP.getResetReason();
|
||||||
|
#endif
|
||||||
|
#ifdef ESP32
|
||||||
|
urls += "unknow";
|
||||||
|
#endif
|
||||||
|
urls += "&";
|
||||||
|
|
||||||
|
urls += DATE_COMPILING;
|
||||||
|
String stat = getURL(urls);
|
||||||
|
}
|
||||||
|
|||||||
16
Scenario.ino
16
Scenario.ino
@@ -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;
|
||||||
|
|||||||
206
Sensors.ino
206
Sensors.ino
@@ -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);
|
||||||
@@ -34,7 +35,7 @@ void analog() {
|
|||||||
eventGen ("analog", "");
|
eventGen ("analog", "");
|
||||||
sendSTATUS("analog", String(analog));
|
sendSTATUS("analog", String(analog));
|
||||||
if (client.connected()) {
|
if (client.connected()) {
|
||||||
Serial.println("[i] sensor analog send date " + String(analog));
|
Serial.println("[i] sensor 'analog' send date " + String(analog));
|
||||||
}
|
}
|
||||||
// }
|
// }
|
||||||
analog_old = analog;
|
analog_old = analog;
|
||||||
@@ -76,12 +77,12 @@ void level() {
|
|||||||
level = map(distance_cm,
|
level = map(distance_cm,
|
||||||
jsonReadtoInt(optionJson, "empty_level"),
|
jsonReadtoInt(optionJson, "empty_level"),
|
||||||
jsonReadtoInt(optionJson, "full_level"), 0, 100);
|
jsonReadtoInt(optionJson, "full_level"), 0, 100);
|
||||||
//jsonWrite(configJson, "level", level);
|
jsonWrite(configJson, "level", level);
|
||||||
//if (level_old != level) {
|
//if (level_old != level) {
|
||||||
eventGen ("level", "");
|
eventGen ("level", "");
|
||||||
sendSTATUS("level", String(level));
|
sendSTATUS("level", String(level));
|
||||||
if (client.connected()) {
|
if (client.connected()) {
|
||||||
Serial.println("[i] sensor tank level send date " + String(level));
|
Serial.println("[i] sensor tank 'level' send date " + String(level));
|
||||||
}
|
}
|
||||||
//}
|
//}
|
||||||
level_old = level;
|
level_old = level;
|
||||||
@@ -112,7 +113,7 @@ void dallas() {
|
|||||||
eventGen ("dallas", "");
|
eventGen ("dallas", "");
|
||||||
sendSTATUS("dallas", String(temp));
|
sendSTATUS("dallas", String(temp));
|
||||||
if (client.connected()) {
|
if (client.connected()) {
|
||||||
Serial.println("[i] sensor dallas send date " + String(temp));
|
Serial.println("[i] sensor 'dallas' send date " + String(temp));
|
||||||
}
|
}
|
||||||
//}
|
//}
|
||||||
temp_old = temp;
|
temp_old = temp;
|
||||||
@@ -123,54 +124,189 @@ 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, [&](void*) { //dht.getMinimumSamplingPeriod()
|
||||||
int value = 0;
|
float value = 0;
|
||||||
static int value_old;
|
static float value_old;
|
||||||
value = dht.getTemperature();
|
static int counter;
|
||||||
jsonWrite(configJson, "dhtT", String(value));
|
if (dht.getStatus() != 0 && counter < 5) {
|
||||||
//if (value_old != value) {
|
sendSTATUS("dhtT", String(dht.getStatusString()));
|
||||||
eventGen ("dhtT", "");
|
counter++;
|
||||||
sendSTATUS("dhtT", String(value));
|
} else {
|
||||||
if (client.connected()) {
|
counter = 0;
|
||||||
Serial.println("[i] sensor dhtT send date " + String(value));
|
value = dht.getTemperature();
|
||||||
|
jsonWrite(configJson, "dhtT", String(value));
|
||||||
|
//if (value_old != value) {
|
||||||
|
eventGen ("dhtT", "");
|
||||||
|
sendSTATUS("dhtT", String(value));
|
||||||
|
if (client.connected()) {
|
||||||
|
Serial.println("[i] sensor 'dhtT' send date " + String(value));
|
||||||
|
}
|
||||||
|
//}
|
||||||
|
value_old = value;
|
||||||
}
|
}
|
||||||
//}
|
|
||||||
value_old = value;
|
|
||||||
}, nullptr, true);
|
}, nullptr, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
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 , [&](void*) { //dht.getMinimumSamplingPeriod()
|
||||||
int value = 0;
|
int value = 0;
|
||||||
static int value_old;
|
static int value_old;
|
||||||
value = dht.getHumidity();
|
static int counter;
|
||||||
jsonWrite(configJson, "dhtH", String(value));
|
if (dht.getStatus() != 0 && counter < 5) {
|
||||||
//if (value_old != value) {
|
sendSTATUS("dhtH", String(dht.getStatusString()));
|
||||||
eventGen ("dhtH", "");
|
counter++;
|
||||||
sendSTATUS("dhtH", String(value));
|
} else {
|
||||||
if (client.connected()) {
|
counter = 0;
|
||||||
Serial.println("[i] sensor dhtH send date " + String(value));
|
value = dht.getHumidity();
|
||||||
|
jsonWrite(configJson, "dhtH", String(value));
|
||||||
|
//if (value_old != value) {
|
||||||
|
eventGen ("dhtH", "");
|
||||||
|
sendSTATUS("dhtH", String(value));
|
||||||
|
if (client.connected()) {
|
||||||
|
Serial.println("[i] sensor 'dhtH' send date " + String(value));
|
||||||
|
}
|
||||||
|
//}
|
||||||
|
value_old = value;
|
||||||
}
|
}
|
||||||
//}
|
|
||||||
value_old = value;
|
|
||||||
}, 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, dht_calculation_update_int, [&](void*) {
|
||||||
|
byte value;
|
||||||
|
if (dht.getStatus() != 0) {
|
||||||
|
sendSTATUS("dhtPerception", String(dht.getStatusString()));
|
||||||
|
} else {
|
||||||
|
value = dht.computePerception(jsonRead(configJson, "dhtT").toFloat(), jsonRead(configJson, "dhtH").toFloat(), 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, dht_calculation_update_int, [&](void*) {
|
||||||
|
float value;
|
||||||
|
ComfortState cf;
|
||||||
|
if (dht.getStatus() != 0) {
|
||||||
|
sendSTATUS("dhtComfort", String(dht.getStatusString()));
|
||||||
|
} else {
|
||||||
|
value = dht.getComfortRatio(cf, jsonRead(configJson, "dhtT").toFloat(), jsonRead(configJson, "dhtH").toFloat(), 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", "dhtDewpoint");
|
||||||
|
ts.add(DHTD, dht_calculation_update_int, [&](void*) {
|
||||||
|
float value;
|
||||||
|
if (dht.getStatus() != 0) {
|
||||||
|
sendSTATUS("dhtDewpoint", String(dht.getStatusString()));
|
||||||
|
} else {
|
||||||
|
value = dht.computeDewPoint(jsonRead(configJson, "dhtT").toFloat(), jsonRead(configJson, "dhtH").toFloat(), false);
|
||||||
|
jsonWrite(configJson, "dhtDewpoint", value);
|
||||||
|
eventGen ("dhtDewpoint", "");
|
||||||
|
sendSTATUS("dhtDewpoint", String(value));
|
||||||
|
if (client.connected()) {
|
||||||
|
Serial.println("[i] sensor 'dhtDewpoint' send date " + String(value));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, 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 +336,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);
|
||||||
|
|||||||
@@ -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("[i] 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
|
||||||
@@ -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
|
|
||||||
@@ -131,6 +131,8 @@ int readTimer(int number) {
|
|||||||
}*/
|
}*/
|
||||||
|
|
||||||
//------------------------------таймеры------------------------------------------------------
|
//------------------------------таймеры------------------------------------------------------
|
||||||
|
|
||||||
|
/*
|
||||||
void time() {
|
void time() {
|
||||||
|
|
||||||
String time_number = sCmd.next();
|
String time_number = sCmd.next();
|
||||||
@@ -183,3 +185,4 @@ void time() {
|
|||||||
}
|
}
|
||||||
}, nullptr, true);
|
}, nullptr, true);
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|||||||
235
Upgrade.ino
Normal file
235
Upgrade.ino
Normal file
@@ -0,0 +1,235 @@
|
|||||||
|
void initUpgrade() {
|
||||||
|
server.on("/upgrade", HTTP_GET, [](AsyncWebServerRequest * request) {
|
||||||
|
|
||||||
|
#ifdef ESP32
|
||||||
|
new_version = getURL("http://91.204.228.124:1100/update/esp32/version.txt");
|
||||||
|
#endif
|
||||||
|
#ifdef ESP8266
|
||||||
|
new_version = getURL("http://91.204.228.124:1100/update/esp8266/version.txt");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
Serial.println(new_version);
|
||||||
|
|
||||||
|
String tmp = "{}";
|
||||||
|
|
||||||
|
if (new_version != "error") {
|
||||||
|
if (new_version == firmware_version) {
|
||||||
|
jsonWrite(tmp, "title", "<button class=\"close\" onclick=\"toggle('my-block')\">×</button>Последняя версия прошивки уже установлена.");
|
||||||
|
jsonWrite(tmp, "class", "pop-up");
|
||||||
|
} else {
|
||||||
|
upgrade_flag = true;
|
||||||
|
jsonWrite(tmp, "title", "<button class=\"close\" onclick=\"toggle('my-block')\">×</button>Идет обновление прошивки... После завершения устройство перезагрузится.");
|
||||||
|
jsonWrite(tmp, "class", "pop-up");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
jsonWrite(tmp, "title", "<button class=\"close\" onclick=\"toggle('my-block')\">×</button>Ошибка... Cервер не найден. Попробуйте позже...");
|
||||||
|
jsonWrite(tmp, "class", "pop-up");
|
||||||
|
}
|
||||||
|
|
||||||
|
request->send(200, "text/text", tmp);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void upgrade_firmware() {
|
||||||
|
|
||||||
|
String scenario_for_update;
|
||||||
|
String config_for_update;
|
||||||
|
String configSetup_for_update;
|
||||||
|
scenario_for_update = readFile("firmware.scenario.txt", 2048);
|
||||||
|
config_for_update = readFile("firmware.config.txt", 2048);
|
||||||
|
configSetup_for_update = configSetup;
|
||||||
|
|
||||||
|
Serial.println("Start upgrade SPIFFS, please wait...");
|
||||||
|
WiFiClient client_for_upgrade;
|
||||||
|
|
||||||
|
#ifdef ESP32
|
||||||
|
httpUpdate.rebootOnUpdate(false);
|
||||||
|
t_httpUpdate_return ret = httpUpdate.updateSpiffs(client_for_upgrade, "http://91.204.228.124:1100/update/esp32/esp32-esp8266_iot-manager_modules_firmware.spiffs.bin");
|
||||||
|
#endif
|
||||||
|
#ifdef ESP8266
|
||||||
|
ESPhttpUpdate.rebootOnUpdate(false);
|
||||||
|
t_httpUpdate_return ret = ESPhttpUpdate.updateSpiffs(client_for_upgrade, "http://91.204.228.124:1100/update/esp8266/esp32-esp8266_iot-manager_modules_firmware.spiffs.bin");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (ret == HTTP_UPDATE_OK) {
|
||||||
|
|
||||||
|
writeFile("firmware.scenario.txt", scenario_for_update);
|
||||||
|
writeFile("firmware.config.txt", config_for_update);
|
||||||
|
writeFile("config.json", configSetup_for_update);
|
||||||
|
saveConfig();
|
||||||
|
|
||||||
|
Serial.println("SPIFFS upgrade done!");
|
||||||
|
Serial.println("Start upgrade BUILD, please wait...");
|
||||||
|
|
||||||
|
#ifdef ESP32
|
||||||
|
httpUpdate.rebootOnUpdate(true);
|
||||||
|
t_httpUpdate_return ret = httpUpdate.update(client_for_upgrade, "http://91.204.228.124:1100/update/esp32/esp32-esp8266_iot-manager_modules_firmware.ino.bin");
|
||||||
|
#endif
|
||||||
|
#ifdef ESP8266
|
||||||
|
ESPhttpUpdate.rebootOnUpdate(true);
|
||||||
|
t_httpUpdate_return ret = ESPhttpUpdate.update(client_for_upgrade, "http://91.204.228.124:1100/update/esp8266/esp32-esp8266_iot-manager_modules_firmware.ino.bin");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
Serial.println("BUILD upgrade done!");
|
||||||
|
Serial.println("Restart ESP....");
|
||||||
|
|
||||||
|
} else {
|
||||||
|
//upgrade_status(t_httpUpdate_return ret);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void handle_upgrade() {
|
||||||
|
if (upgrade_flag) {
|
||||||
|
upgrade_flag = false;
|
||||||
|
upgrade_firmware();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
void upgrade_status(t_httpUpdate_return set) {
|
||||||
|
switch (set) {
|
||||||
|
case HTTP_UPDATE_FAILED:
|
||||||
|
Serial.printf("UPDATE_FAILED Error (%d): %s", httpUpdate.getLastError(), httpUpdate.getLastErrorString().c_str());
|
||||||
|
break;
|
||||||
|
|
||||||
|
case HTTP_UPDATE_NO_UPDATES:
|
||||||
|
Serial.println("NO_UPDATES");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case HTTP_UPDATE_OK:
|
||||||
|
Serial.println("HTTP_UPDATE_OK");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
// ----------------------- Обновление с сайта
|
||||||
|
void webUpgrade() {
|
||||||
|
|
||||||
|
#ifdef ESP8266
|
||||||
|
String spiffsData = "http://91.204.228.124:1100/update/esp8266/esp32-esp8266_iot-manager_modules_firmware.spiffs.bin";
|
||||||
|
String buildData = "http://91.204.228.124:1100/update/esp8266/esp32-esp8266_iot-manager_modules_firmware.ino.bin";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef ESP32
|
||||||
|
String spiffsData = "http://91.204.228.124:1100/update/esp32/esp32-esp8266_iot-manager_modules_firmware.spiffs.bin";
|
||||||
|
String buildData = "http://91.204.228.124:1100/update/esp32/esp32-esp8266_iot-manager_modules_firmware.ino.bin";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (spiffsData != "") { // Если нужно прошить FS
|
||||||
|
String scenario_for_update;
|
||||||
|
String config_for_update;
|
||||||
|
String configSetup_for_update;
|
||||||
|
Serial.println(spiffsData);
|
||||||
|
scenario_for_update = readFile("firmware.scenario.txt", 2048);
|
||||||
|
config_for_update = readFile("config.all.txt", 2048);
|
||||||
|
configSetup_for_update = configSetup;
|
||||||
|
ESPhttpUpdate.rebootOnUpdate(false); // Отключим перезагрузку после обновления
|
||||||
|
updateHTTP(spiffsData, true);
|
||||||
|
writeFile("firmware.scenario.txt", scenario_for_update);
|
||||||
|
writeFile("config.all.txt", config_for_update);
|
||||||
|
writeFile("config.json", configSetup_for_update);
|
||||||
|
saveConfig();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (buildData != "") { // Если нужно прошить build
|
||||||
|
Serial.println(buildData);
|
||||||
|
ESPhttpUpdate.rebootOnUpdate(true); // Включим перезагрузку после обновления
|
||||||
|
updateHTTP(buildData, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// ------------------ Обновление по url
|
||||||
|
void updateHTTP(String url, boolean mode) {
|
||||||
|
if (url == "") return;
|
||||||
|
ESPhttpUpdate.setLedPin(LED_BUILTIN, LOW);
|
||||||
|
if (mode) {
|
||||||
|
Serial.println("Update Spiffs...");
|
||||||
|
t_httpUpdate_return ret = ESPhttpUpdate.updateSpiffs(url);
|
||||||
|
UpdateStatus(ret , "Spiffs");
|
||||||
|
} else {
|
||||||
|
Serial.println("Update Build...");
|
||||||
|
t_httpUpdate_return ret = ESPhttpUpdate.update(url);
|
||||||
|
UpdateStatus(ret , "build");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void UpdateStatus(t_httpUpdate_return set, String mode) {
|
||||||
|
|
||||||
|
switch (set) {
|
||||||
|
|
||||||
|
case HTTP_UPDATE_FAILED:
|
||||||
|
Serial.println(mode + "_FAILED");
|
||||||
|
var = "{}";
|
||||||
|
jsonWrite(var, "title", "<button class=\"close\" onclick=\"toggle('my-block')\">×</button>_FAILED");
|
||||||
|
jsonWrite(var, "class", "pop-up");
|
||||||
|
//request->send(200, "text/text", var);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case HTTP_UPDATE_NO_UPDATES:
|
||||||
|
Serial.println(mode + "_NO_UPDATES");
|
||||||
|
var = "{}";
|
||||||
|
jsonWrite(var, "title", "<button class=\"close\" onclick=\"toggle('my-block')\">×</button>_NO_UPDATES");
|
||||||
|
jsonWrite(var, "class", "pop-up");
|
||||||
|
//request->send(200, "text/text", var);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case HTTP_UPDATE_OK:
|
||||||
|
Serial.println(mode + "_UPDATE_OK");
|
||||||
|
var = "{}";
|
||||||
|
jsonWrite(var, "title", "<button class=\"close\" onclick=\"toggle('my-block')\">×</button>_UPDATE_OK");
|
||||||
|
jsonWrite(var, "class", "pop-up");
|
||||||
|
//request->send(200, "text/text", var);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
7
WiFi.ino
7
WiFi.ino
@@ -58,6 +58,8 @@ void WIFI_init() {
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
WiFi.begin(_ssid.c_str(), _password.c_str());
|
WiFi.begin(_ssid.c_str(), _password.c_str());
|
||||||
|
Serial.print("ssid: ");
|
||||||
|
Serial.println(_ssid);
|
||||||
}
|
}
|
||||||
// Делаем проверку подключения до тех пор пока счетчик tries
|
// Делаем проверку подключения до тех пор пока счетчик tries
|
||||||
// не станет равен нулю или не получим подключение
|
// не станет равен нулю или не получим подключение
|
||||||
@@ -85,8 +87,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());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
BIN
data/ace.js.gz
Normal file
BIN
data/ace.js.gz
Normal file
Binary file not shown.
1
data/config-all.json
Normal file
1
data/config-all.json
Normal 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"}
|
||||||
@@ -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 +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"}
|
||||||
7
data/configs/analog.config.txt
Normal file
7
data/configs/analog.config.txt
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
analog 0 Аналоговый#вход,#% Датчики progress-round 310 620 1 100 1
|
||||||
|
|
||||||
|
//если датчик углекислого газа выдает напряжение от 1 вольта до 2 вольт, то значит
|
||||||
|
//значение чтения аналогового входа будут примерно равным
|
||||||
|
//при 1 вольте - 310, а при 2 вольтах - 620 (считаем по пропорции)
|
||||||
|
//данная строка переведет диапазон 310-620 в диапазон 1-100 и отобразит в приложении
|
||||||
|
//варианты отображения: any-data, progress-round, progress-line
|
||||||
1
data/configs/analog.scenario.txt
Normal file
1
data/configs/analog.scenario.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
|
||||||
4
data/configs/dallas.config.txt
Normal file
4
data/configs/dallas.config.txt
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
dallas 2 Водонагреватель,#t°C Датчики any-data 1
|
||||||
|
|
||||||
|
//2 - номер пина датчика
|
||||||
|
//варианты отображения: any-data, progress-round, progress-line
|
||||||
1
data/configs/dallas.scenario.txt
Normal file
1
data/configs/dallas.scenario.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
|
||||||
8
data/configs/dht11.config.txt
Normal file
8
data/configs/dht11.config.txt
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
dhtT DHT11 2 Температура#DHT,#t°C Датчики any-data 1
|
||||||
|
dhtH DHT11 2 Влажность#DHT,#% Датчики any-data 2
|
||||||
|
dhtComfort Степень#комфорта: Датчики 3
|
||||||
|
dhtPerception Восприятие: Датчики 4
|
||||||
|
dhtDewpoint Точка#росы: Датчики 5
|
||||||
|
|
||||||
|
//2 - номер пина датчика
|
||||||
|
//варианты отображения: any-data, progress-round, progress-line
|
||||||
1
data/configs/dht11.scenario.txt
Normal file
1
data/configs/dht11.scenario.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
|
||||||
8
data/configs/dht22.config.txt
Normal file
8
data/configs/dht22.config.txt
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
dhtT DHT22 2 Температура#DHT,#t°C Датчики any-data 1
|
||||||
|
dhtH DHT22 2 Влажность#DHT,#% Датчики any-data 2
|
||||||
|
dhtComfort Степень#комфорта: Датчики 3
|
||||||
|
dhtPerception Восприятие: Датчики 4
|
||||||
|
dhtDewpoint Точка#росы: Датчики 5
|
||||||
|
|
||||||
|
//2 - номер пина датчика
|
||||||
|
//варианты отображения: any-data, progress-round, progress-line
|
||||||
1
data/configs/dht22.scenario.txt
Normal file
1
data/configs/dht22.scenario.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
|
||||||
24
data/configs/firmware.config.txt
Normal file
24
data/configs/firmware.config.txt
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
button 1 na Включить#все Реле 0 1
|
||||||
|
button 2 13 Прихожая Реле 0 2
|
||||||
|
button 3 14 Кухня Реле 0 3
|
||||||
|
pwm 1 3 Яркость#коредор: Реле 1023 4
|
||||||
|
pwm 2 4 Яркость#ванная: Реле 510 5
|
||||||
|
//---------------------------------------------------------------------
|
||||||
|
analog 0 Аналоговый#вход,#% Датчики progress-round 1 1024 1 1024 6
|
||||||
|
inputDigit digit1 При#скольки#включить? Датчики 10 7
|
||||||
|
inputDigit digit2 При#скольки#выключить? Датчики 0 8
|
||||||
|
button 4 na Нагреватель Датчики 0 9
|
||||||
|
//---------------------------------------------------------------------
|
||||||
|
button 5 na Вкл#обратный#таймер Таймеры 0 16
|
||||||
|
inputDigit digit3 Через#сколько#секунд#включить? Таймеры 5 17
|
||||||
|
button 6 na Включится#по#таймеру Таймеры 0 18
|
||||||
|
inputTime time1 Во#сколько#включить? Таймеры 20-30-00 19
|
||||||
|
button 7 5 Включится#по#таймеру Таймеры 0 20
|
||||||
|
//---------------------------------------------------------------------
|
||||||
|
switch 1 0 20
|
||||||
|
text 1 Вход: Охрана 20
|
||||||
|
textSet 1 не#обнаружено-time
|
||||||
|
button 8 na Сбросить Охрана 0 21
|
||||||
|
//---------------------------------------------------------------------
|
||||||
|
button 9 scenario Вкл#выкл#все#сценарии Сценарии 1 23
|
||||||
|
button 10 line1,line2, Вкл#выкл#выбранные#сценарии Сценарии 1 24
|
||||||
33
data/configs/firmware.scenario.txt
Normal file
33
data/configs/firmware.scenario.txt
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
button1 = 1
|
||||||
|
buttonSet 2 1
|
||||||
|
buttonSet 3 1
|
||||||
|
pwmSet 2 1024
|
||||||
|
end
|
||||||
|
button1 = 0
|
||||||
|
buttonSet 2 0
|
||||||
|
buttonSet 3 0
|
||||||
|
pwmSet 2 0
|
||||||
|
end
|
||||||
|
analog > digit1
|
||||||
|
buttonSet 4 1
|
||||||
|
end
|
||||||
|
analog < digit2
|
||||||
|
buttonSet 4 0
|
||||||
|
end
|
||||||
|
button5 = 1
|
||||||
|
timerStart 1 digit3 sec
|
||||||
|
end
|
||||||
|
timer1 = 0
|
||||||
|
buttonSet 6 1
|
||||||
|
end
|
||||||
|
timenow = time1
|
||||||
|
buttonSet 7 1
|
||||||
|
end
|
||||||
|
switch1 = 1
|
||||||
|
textSet 1 обнаружено#движение-time
|
||||||
|
push Внимание обнаружено#движение!
|
||||||
|
end
|
||||||
|
button8 = 1
|
||||||
|
textSet 1 не#обнаружено-time
|
||||||
|
buttonSet 8 0
|
||||||
|
end
|
||||||
10
data/configs/level.config.txt
Normal file
10
data/configs/level.config.txt
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
level Вода#в#баке,#% Датчики any-data 125 20 1
|
||||||
|
inputDigit digit1 При#скольки#выключить? Датчики 95 2
|
||||||
|
inputDigit digit2 При#скольки#включить? Датчики 10 3
|
||||||
|
button 1 5 Насос Датчики 0 4
|
||||||
|
button 2 line1,line2, Автоматический#режим Датчики 1 5
|
||||||
|
|
||||||
|
//125 - это расстояние от датчика до дна бака в сантиметрах
|
||||||
|
//20 - это расстояние от датчика до поверхности воды когда бак полный в сантиметрах
|
||||||
|
//вывод данных будет в процентах заполнения бака
|
||||||
|
//варианты отображения: any-data, progress-round, progress-line
|
||||||
6
data/configs/level.scenario.txt
Normal file
6
data/configs/level.scenario.txt
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
level > digit1
|
||||||
|
buttonSet 1 0
|
||||||
|
end
|
||||||
|
level < digit2
|
||||||
|
buttonSet 1 1
|
||||||
|
end
|
||||||
11
data/configs/moution_r.config.txt
Normal file
11
data/configs/moution_r.config.txt
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
button 1 5 Прихожая Освещение 0 1
|
||||||
|
inputDigit digit1 Задержка#выключения Освещение 30 2
|
||||||
|
switch 1 0 10
|
||||||
|
|
||||||
|
//0 - номер пина датчика движения
|
||||||
|
//5 - номер пина реле
|
||||||
|
//при срабатывании датчика движения включится реле и обратный таймер на 30 сек
|
||||||
|
//если движение не будет обнаружено повтороно в течении 30 секунд - свет выключится
|
||||||
|
//если движение повторится в течении 30 секунд то таймер продлится опять на 30 сек
|
||||||
|
//свет выключится только в том случае если в комнате все замрет на 30 сек
|
||||||
|
//задержку выключения можно будет настраивать в приложении
|
||||||
7
data/configs/moution_r.scenario.txt
Normal file
7
data/configs/moution_r.scenario.txt
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
switch1 = 1
|
||||||
|
timerStart 1 digit1 sec
|
||||||
|
buttonSet 1 1
|
||||||
|
end
|
||||||
|
timer1 = 0
|
||||||
|
buttonSet 1 0
|
||||||
|
end
|
||||||
10
data/configs/moution_s.config.txt
Normal file
10
data/configs/moution_s.config.txt
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
switch 1 0 20
|
||||||
|
text 1 Вход: Охрана 1
|
||||||
|
textSet 1 не#обнаружено-time
|
||||||
|
button 1 na Сбросить Охрана 0 2
|
||||||
|
|
||||||
|
//0 - номер пина датчика
|
||||||
|
//при срабатывании датчика движения устройство пошлет пуш и в приложении будет
|
||||||
|
//написано в текстовом поле, что движение было обнаружено, так же будет зафиксирован
|
||||||
|
//момент времени срабатывания датчика
|
||||||
|
//перевести датчик снова в режим ожидания движения можно нажав кнопку сброса в приложении
|
||||||
8
data/configs/moution_s.scenario.txt
Normal file
8
data/configs/moution_s.scenario.txt
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
switch1 = 1
|
||||||
|
textSet 1 обнаружено#движение-time
|
||||||
|
push Внимание обнаружено#движение!
|
||||||
|
end
|
||||||
|
button1 = 1
|
||||||
|
textSet 1 не#обнаружено-time
|
||||||
|
buttonSet 1 0
|
||||||
|
end
|
||||||
6
data/configs/pwm.config.txt
Normal file
6
data/configs/pwm.config.txt
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
pwm 1 3 Яркость#коредор: Реле 1023 1
|
||||||
|
pwm 2 4 Яркость#ванная: Реле 510 2
|
||||||
|
|
||||||
|
//в приложении появятся ползунки, соответствующее значение pwm
|
||||||
|
//будет установленно на пинах 3 и 4
|
||||||
|
//1023 и 510 это начальные значения после загрузки модуля
|
||||||
1
data/configs/pwm.scenario.txt
Normal file
1
data/configs/pwm.scenario.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
|
||||||
3
data/configs/relay.config.txt
Normal file
3
data/configs/relay.config.txt
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
button 1 5 Включить#реле Реле 0 1
|
||||||
|
|
||||||
|
//это простая кнопка номер 1 управляющая пином 5 имеющая начальное состояние 0
|
||||||
1
data/configs/relay.scenario.txt
Normal file
1
data/configs/relay.scenario.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
|
||||||
6
data/configs/relay_br.config.txt
Normal file
6
data/configs/relay_br.config.txt
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
button 1 5 Включить#все Реле 0 1
|
||||||
|
|
||||||
|
|
||||||
|
//что бы использовать эту конфигурацию на другой esp необходимо активировать пресет
|
||||||
|
//"Вкл. выкл. локального реле", затем в сценарии данного модуля подставить Device ID
|
||||||
|
//того esp, кнопка на этом девайсе будет выключать другие устройства по воздуху
|
||||||
8
data/configs/relay_br.scenario.txt
Normal file
8
data/configs/relay_br.scenario.txt
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
button1 = 1
|
||||||
|
mqtt 3233662-1589485 buttonSet_1_1
|
||||||
|
mqtt 2233662-1589486 buttonSet_1_1
|
||||||
|
end
|
||||||
|
button1 = 0
|
||||||
|
mqtt 3233662-1589485 buttonSet_1_0
|
||||||
|
mqtt 2233662-1589486 buttonSet_1_0
|
||||||
|
end
|
||||||
4
data/configs/relay_c.config.txt
Normal file
4
data/configs/relay_c.config.txt
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
button 1 5 Вкл#на#время Таймеры 0 1
|
||||||
|
inputDigit digit1 Через#сколько#секунд#выключить? Таймеры 5 2
|
||||||
|
|
||||||
|
//в сценариях можно поменять на sec, min или hours если нужны другие размерности времени
|
||||||
6
data/configs/relay_c.scenario.txt
Normal file
6
data/configs/relay_c.scenario.txt
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
button1 = 1
|
||||||
|
timerStart 1 digit1 sec
|
||||||
|
end
|
||||||
|
timer1 = 0
|
||||||
|
buttonSet 1 0
|
||||||
|
end
|
||||||
3
data/configs/relay_rm.config.txt
Normal file
3
data/configs/relay_rm.config.txt
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
switch 1 0 10
|
||||||
|
|
||||||
|
//физическая кнопка номер 1 подключенная к пину 0, задержка от дребезга 10 мс
|
||||||
3
data/configs/relay_rm.scenario.txt
Normal file
3
data/configs/relay_rm.scenario.txt
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
switch1 = 1
|
||||||
|
mqtt 3233662-1589489 buttonChange_1
|
||||||
|
end
|
||||||
3
data/configs/relay_s.config.txt
Normal file
3
data/configs/relay_s.config.txt
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
button 1 na Включить#все Освещение 0 1
|
||||||
|
|
||||||
|
//при нажатии на эту кнопку пины номер 5 и 13 поведут себя как установленно в сценариях
|
||||||
8
data/configs/relay_s.scenario.txt
Normal file
8
data/configs/relay_s.scenario.txt
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
button1 = 1
|
||||||
|
pinSet 5 1
|
||||||
|
pinSet 13 0
|
||||||
|
end
|
||||||
|
button1 = 0
|
||||||
|
pinSet 5 0
|
||||||
|
pinSet 13 1
|
||||||
|
end
|
||||||
6
data/configs/relay_sr.config.txt
Normal file
6
data/configs/relay_sr.config.txt
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
switch 1 0 10
|
||||||
|
|
||||||
|
//что бы использовать эту конфигурацию на другой esp необходимо активировать пресет
|
||||||
|
//"Вкл. выкл. локального реле", затем в сценарии данного модуля подставить Device ID
|
||||||
|
//того esp, к данному модулю нужно подключить кнопку к пину 0 и тогда
|
||||||
|
//один девайс будет управлять другим по воздуху
|
||||||
4
data/configs/relay_sr.scenario.txt
Normal file
4
data/configs/relay_sr.scenario.txt
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
switch1 = 1
|
||||||
|
mqtt 3233662-1589485 buttonChange_1
|
||||||
|
mqtt 2233662-1589486 buttonChange_1
|
||||||
|
end
|
||||||
4
data/configs/relay_sw.config.txt
Normal file
4
data/configs/relay_sw.config.txt
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
button 1 13 Включить#реле Реле 0 1
|
||||||
|
switch 1 0 10
|
||||||
|
|
||||||
|
//можно управлять реле на пине 13 кнопкой на пине 0 или кнопкой в приложении
|
||||||
3
data/configs/relay_sw.scenario.txt
Normal file
3
data/configs/relay_sw.scenario.txt
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
switch1 = 1
|
||||||
|
buttonChange 1
|
||||||
|
end
|
||||||
6
data/configs/relay_t.config.txt
Normal file
6
data/configs/relay_t.config.txt
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
inputTime time1 Во#сколько#включить? Таймеры 20-30-00 1
|
||||||
|
inputTime time2 Во#сколько#выключить? Таймеры 20-35-00 2
|
||||||
|
button 1 5 Кнопка#(по#таймеру) Таймеры 0 3
|
||||||
|
|
||||||
|
//время в приложение необходимо вводить в строгом формате: ЧЧ-ММ-СС
|
||||||
|
//можно создавать любое количество таймеров, копируя строку inputTime...
|
||||||
6
data/configs/relay_t.scenario.txt
Normal file
6
data/configs/relay_t.scenario.txt
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
timenow = time1
|
||||||
|
buttonSet 1 1
|
||||||
|
end
|
||||||
|
timenow = time2
|
||||||
|
buttonSet 1 0
|
||||||
|
end
|
||||||
12
data/configs/termostat.config.txt
Normal file
12
data/configs/termostat.config.txt
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
dallas 2 Водонагреватель,#t°C Термостат any-data 1
|
||||||
|
inputDigit digit1 При#скольки#выключить? Термостат 40 2
|
||||||
|
inputDigit digit2 При#скольки#включить? Термостат 20 3
|
||||||
|
button 1 5 Нагреватель Термостат 0 4
|
||||||
|
button 2 line1,line2, Автоматический#режим Термостат 1 5
|
||||||
|
|
||||||
|
|
||||||
|
//2 - номер пина датчика
|
||||||
|
//5 - номер пина реле
|
||||||
|
//это термостат который будет держать температуру между двумя
|
||||||
|
//установленными в приложении значениями, так же можно выключить
|
||||||
|
//автоматический режим, и тогда нагреватель будет управляться в ручную
|
||||||
6
data/configs/termostat.scenario.txt
Normal file
6
data/configs/termostat.scenario.txt
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
dallas > digit1
|
||||||
|
buttonSet 1 0
|
||||||
|
end
|
||||||
|
dallas < digit2
|
||||||
|
buttonSet 1 1
|
||||||
|
end
|
||||||
@@ -4,6 +4,7 @@
|
|||||||
"/config.live.json",
|
"/config.live.json",
|
||||||
"/config.setup.json",
|
"/config.setup.json",
|
||||||
"/config.option.json"
|
"/config.option.json"
|
||||||
|
|
||||||
],
|
],
|
||||||
"class":"col-sm-offset-1 col-sm-10",
|
"class":"col-sm-offset-1 col-sm-10",
|
||||||
"content": [
|
"content": [
|
||||||
@@ -20,9 +21,40 @@
|
|||||||
"type": "h4",
|
"type": "h4",
|
||||||
"title": "IP address: {{ip}}"
|
"title": "IP address: {{ip}}"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "h4",
|
||||||
|
"title": "Uptime: {{uptime}}"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "hr"
|
"type": "hr"
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"type":"dropdown",
|
||||||
|
"name":"help-url",
|
||||||
|
"class":"btn btn-warning btn-lg",
|
||||||
|
"style":"display:inline",
|
||||||
|
"title": {
|
||||||
|
"#":"Выбирите то, во что Вы хотите превратить ESP <span class=\"caret\"></span>",
|
||||||
|
"/relay":"Вкл. выкл. локального реле",
|
||||||
|
"/relay_timer":"Вкл. выкл. локального реле в определенное время",
|
||||||
|
"/relay_countdown":"Вкл. выкл. локального реле на определенный период времени",
|
||||||
|
"/relay_several":"Вкл. выкл. нескольких локальных реле кнопкой в приложении",
|
||||||
|
"/relay_switch":"Вкл. выкл. локального реле физической кнопкой (кнопка так же дублируется в приложении)",
|
||||||
|
"/relay_button_remote":"Вкл. выкл. нескольких удаленных реле кнопкой в приложении (нужно указать Device ID)",
|
||||||
|
"/relay_switch_remote":"Вкл. выкл. нескольких удаленных реле физической кнопкой (нужно указать Device ID)",
|
||||||
|
"/pwm":"Широтно импульсная модуляция",
|
||||||
|
"/dht11":"Сенсор DHT11",
|
||||||
|
"/dht22":"Сенсор DHT22, DHT33, DHT44, AM2302, RHT03",
|
||||||
|
"/analog":"Аналоговый сенсор",
|
||||||
|
"/dallas":"Сенсор DS18B20",
|
||||||
|
"/termostat":"Термостат на DS18B20 с переключением в ручной режим",
|
||||||
|
"/level":"Контроль уровня в баке на сенсорах: JSN-SR04T, HC-SR04, HY-SRF05 (управление насосом)",
|
||||||
|
"/moution_relay":"Датчик движения включающий свет",
|
||||||
|
"/moution_security":"Охранный датчик движения",
|
||||||
|
"/default":"Настройки по умолчанию"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "h2",
|
"type": "h2",
|
||||||
"title": "Конфигурация устройства"
|
"title": "Конфигурация устройства"
|
||||||
@@ -64,67 +96,6 @@
|
|||||||
"action": "/scenario?status=1",
|
"action": "/scenario?status=1",
|
||||||
"class":"btn btn-block btn-success"
|
"class":"btn btn-block btn-success"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"type": "h2",
|
|
||||||
"title": "Данные модулей"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "hr"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "h4",
|
|
||||||
"title": "Модуль уровня воды (level)",
|
|
||||||
"style": "width:100%"
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
"type": "h6",
|
|
||||||
"title": "Расстояние от датчика до воды: {{level_in}} см"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "h6",
|
|
||||||
"title": " Заполнение бака: {{level}} %"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "hr"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "h4",
|
|
||||||
"title": "Модуль аналогового входа (analog)",
|
|
||||||
"style": "width:100%"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "h6",
|
|
||||||
"title": "Прочитанное значение: {{analog_in}}"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "h6",
|
|
||||||
"title": "Преобразованное значение: {{analog}}"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "hr"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "h4",
|
|
||||||
"title": "Модуль температурного датчика (dallas)",
|
|
||||||
"style": "width:100%"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "h6",
|
|
||||||
"title": "Текущее значение: {{dallas}} °C"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "hr"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "h4",
|
|
||||||
"title": "Модуль pH сенсора от df robot (ph)",
|
|
||||||
"style": "width:100%"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "h6",
|
|
||||||
"title": "Текущее значение: {{ph}}"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"type": "hr"
|
"type": "hr"
|
||||||
},
|
},
|
||||||
|
|||||||
BIN
data/edit.htm.gz
Normal file
BIN
data/edit.htm.gz
Normal file
Binary file not shown.
@@ -3,18 +3,22 @@ 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
|
analog 0 Аналоговый#вход,#% Датчики progress-round 1 1024 1 1024 6
|
||||||
//dallas 2 Водонагреватель,#t°C Датчики any-data 7
|
inputDigit digit1 При#скольки#включить? Датчики 10 7
|
||||||
//dhtT 2 Температура#DHT,#t°C Датчики any-data 8
|
inputDigit digit2 При#скольки#выключить? Датчики 0 8
|
||||||
//dhtH 2 Влажность#DHT,#% Датчики any-data 9
|
button 4 na Нагреватель Датчики 0 9
|
||||||
//level Вода#в#баке,#% Датчики any-data 125 20 10
|
//---------------------------------------------------------------------
|
||||||
inputDigit digit1 При#скольки#включить? Датчики 10 11
|
button 5 na Вкл#обратный#таймер Таймеры 0 16
|
||||||
button 4 na Кнопка Датчики 0 12
|
inputDigit digit3 Через#сколько#секунд#включить? Таймеры 5 17
|
||||||
button 5 na Вкл#обратный#таймер Таймеры 0 13
|
button 6 na Включится#по#таймеру Таймеры 0 18
|
||||||
inputDigit digit2 Через#сколько#секунд#включить? Таймеры 5 14
|
inputTime time1 Во#сколько#включить? Таймеры 20-30-00 19
|
||||||
button 6 5 Включится#по#таймеру Таймеры 0 15
|
button 7 5 Включится#по#таймеру Таймеры 0 20
|
||||||
|
//---------------------------------------------------------------------
|
||||||
switch 1 0 20
|
switch 1 0 20
|
||||||
textSet 1 неопределено
|
text 1 Вход: Охрана 20
|
||||||
text 1 Квартира Двери 22
|
textSet 1 не#обнаружено-time
|
||||||
button 7 scenario Вкл#выкл#все#сценарии Сценарии 1 23
|
button 8 na Сбросить Охрана 0 21
|
||||||
button 8 line1,line2, Вкл#выкл#выбранные#сценарии Сценарии 1 24
|
//---------------------------------------------------------------------
|
||||||
|
button 9 scenario Вкл#выкл#все#сценарии Сценарии 1 23
|
||||||
|
button 10 line1,line2, Вкл#выкл#выбранные#сценарии Сценарии 1 24
|
||||||
@@ -11,19 +11,23 @@ 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
|
||||||
switch1 = 1
|
timenow = time1
|
||||||
textSet 1 закрыто-time
|
buttonSet 7 1
|
||||||
push закрыто вход
|
|
||||||
end
|
end
|
||||||
switch1 = 0
|
switch1 = 1
|
||||||
textSet 1 открыто-time
|
textSet 1 обнаружено#движение-time
|
||||||
|
push Внимание обнаружено#движение!
|
||||||
|
end
|
||||||
|
button8 = 1
|
||||||
|
textSet 1 не#обнаружено-time
|
||||||
|
buttonSet 8 0
|
||||||
end
|
end
|
||||||
@@ -19,6 +19,18 @@
|
|||||||
"type": "h4",
|
"type": "h4",
|
||||||
"title": "IP address: {{ip}}"
|
"title": "IP address: {{ip}}"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "h4",
|
||||||
|
"title": "Uptime: {{uptime}}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "h4",
|
||||||
|
"title": "Build version: {{firmware_version}}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "h4",
|
||||||
|
"title": "SPIFFS version: 2.2"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "link",
|
"type": "link",
|
||||||
"title": "Конфигурация устройства",
|
"title": "Конфигурация устройства",
|
||||||
@@ -46,6 +58,25 @@
|
|||||||
"action": "/page.htm?pushingbox",
|
"action": "/page.htm?pushingbox",
|
||||||
"class": "btn btn-block btn-success"
|
"class": "btn btn-block btn-success"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type":"h3",
|
||||||
|
"name":"my-block",
|
||||||
|
"style":"position:fixed;top:30%;left:50%;width:400px;margin-left:-200px;text-align:center;",
|
||||||
|
"class":"hidden"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "button",
|
||||||
|
"title":"Обновить прошивку",
|
||||||
|
"action": "/upgrade",
|
||||||
|
"response":"[[my-block]]",
|
||||||
|
"class": "btn btn-block btn-success"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "hr"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "link",
|
"type": "link",
|
||||||
"title": "Скачать приложение IoT Manager для android",
|
"title": "Скачать приложение IoT Manager для android",
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
data/mode-html.js.gz
Normal file
BIN
data/mode-html.js.gz
Normal file
Binary file not shown.
@@ -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"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,57 +0,0 @@
|
|||||||
{
|
|
||||||
"configs": [
|
|
||||||
|
|
||||||
"/config.live.json",
|
|
||||||
"/config.option.json",
|
|
||||||
"/config.setup.json",
|
|
||||||
"/lang/lang.ru.json",
|
|
||||||
"socket {{ip}}:81/"
|
|
||||||
|
|
||||||
],
|
|
||||||
"title": "Главная",
|
|
||||||
"class":"col-sm-offset-1 col-sm-10 col-md-offset-2 col-md-8 col-lg-offset-3 col-lg-6",
|
|
||||||
"content": [
|
|
||||||
{
|
|
||||||
"type": "h5",
|
|
||||||
"title": "{{SSDP}}",
|
|
||||||
"class":"alert-warning"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "h4",
|
|
||||||
"title": "Module tank level:",
|
|
||||||
"style": "width:80%;float:left;"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "h4",
|
|
||||||
"title": "{{module_tank_level_s}}",
|
|
||||||
"style": "width:20%;float:right;"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "h4",
|
|
||||||
"title": "Module analog:",
|
|
||||||
"style": "width:80%;float:left;"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "h4",
|
|
||||||
"title": "{{module_analog_s}}",
|
|
||||||
"style": "width:20%;float:right;"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "h4",
|
|
||||||
"title": "Module ds18b20:",
|
|
||||||
"style": "width:80%;float:left;"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "h4",
|
|
||||||
"title": "{{module_ds18b20_s}}",
|
|
||||||
"style": "width:20%;float:right;"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "link",
|
|
||||||
"title": "Главная",
|
|
||||||
"action": "/page.htm?index",
|
|
||||||
"class": "btn btn-block btn-danger btn-sm",
|
|
||||||
"style": "width:100%;float:right;"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
{
|
{
|
||||||
"widget" : "input",
|
"widget" : "input",
|
||||||
"size" : "small",
|
"color" : "blue",
|
||||||
"color" : "orange",
|
|
||||||
"type" : "time"
|
"type" : "time"
|
||||||
}
|
}
|
||||||
@@ -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",
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
void setup() {
|
void setup() {
|
||||||
|
|
||||||
Serial.begin(115200);
|
Serial.begin(115200);
|
||||||
Serial.setDebugOutput(true);
|
//Serial.setDebugOutput(true);
|
||||||
Serial.println("--------------started----------------");
|
Serial.println("--------------started----------------");
|
||||||
//--------------------------------------------------------------
|
//--------------------------------------------------------------
|
||||||
SPIFFS.begin();
|
SPIFFS.begin();
|
||||||
@@ -25,6 +25,8 @@ void setup() {
|
|||||||
Serial.setDebugOutput(0);
|
Serial.setDebugOutput(0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
jsonWrite(configSetup, "firmware_version", firmware_version);
|
||||||
|
|
||||||
prex = prefix + "/" + chipID;
|
prex = prefix + "/" + chipID;
|
||||||
Serial.println(chipID);
|
Serial.println(chipID);
|
||||||
//--------------------------------------------------------------
|
//--------------------------------------------------------------
|
||||||
@@ -48,17 +50,21 @@ void setup() {
|
|||||||
//--------------------------------------------------------------
|
//--------------------------------------------------------------
|
||||||
Push_init();
|
Push_init();
|
||||||
Serial.println("[V] Push_init");
|
Serial.println("[V] Push_init");
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
statistics();
|
||||||
|
Serial.println("[V] statistics");
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
initUpgrade();
|
||||||
|
Serial.println("[V] initUpgrade");
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
|
||||||
getMemoryLoad("[i] After loading");
|
getMemoryLoad("[i] After loading");
|
||||||
|
|
||||||
|
ts.add(TEST, 14400, [&](void*) {
|
||||||
|
|
||||||
// ts.add(TEST, 1000, [&](void*) {
|
statistics();
|
||||||
|
|
||||||
//getMemoryLoad("[i] Periodic check");
|
|
||||||
|
|
||||||
// }, nullptr, true);
|
|
||||||
|
|
||||||
|
}, nullptr, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop() {
|
void loop() {
|
||||||
@@ -78,4 +84,5 @@ void loop() {
|
|||||||
handleScenario();
|
handleScenario();
|
||||||
|
|
||||||
ts.update();
|
ts.update();
|
||||||
|
handle_upgrade();
|
||||||
}
|
}
|
||||||
|
|||||||
5
main.ino
5
main.ino
@@ -137,8 +137,7 @@ String getURL(String urls) {
|
|||||||
if (httpCode == HTTP_CODE_OK) {
|
if (httpCode == HTTP_CODE_OK) {
|
||||||
answer = http.getString();
|
answer = http.getString();
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
|
||||||
answer = "error";
|
answer = "error";
|
||||||
}
|
}
|
||||||
http.end();
|
http.end();
|
||||||
@@ -268,7 +267,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) + "%; ");
|
||||||
|
|||||||
109
mqtt.ino
109
mqtt.ino
@@ -4,45 +4,60 @@ void MQTT_init() {
|
|||||||
server.on("/mqttSave", HTTP_GET, [](AsyncWebServerRequest * request) {
|
server.on("/mqttSave", HTTP_GET, [](AsyncWebServerRequest * request) {
|
||||||
|
|
||||||
if (request->hasArg("mqttServer")) {
|
if (request->hasArg("mqttServer")) {
|
||||||
jsonWrite(configSetup, "mqttServer", request->getParam("mqttServer")->value());
|
jsonWrite(configSetup, "mqttServer", request->getParam("mqttServer")->value());
|
||||||
}
|
}
|
||||||
if (request->hasArg("mqttPort")) {
|
if (request->hasArg("mqttPort")) {
|
||||||
int port = (request->getParam("mqttPort")->value()).toInt();
|
int port = (request->getParam("mqttPort")->value()).toInt();
|
||||||
jsonWrite(configSetup, "mqttPort", port);
|
jsonWrite(configSetup, "mqttPort", port);
|
||||||
}
|
}
|
||||||
if (request->hasArg("mqttUser")) {
|
if (request->hasArg("mqttUser")) {
|
||||||
jsonWrite(configSetup, "mqttUser", request->getParam("mqttUser")->value());
|
jsonWrite(configSetup, "mqttUser", request->getParam("mqttUser")->value());
|
||||||
}
|
}
|
||||||
if (request->hasArg("mqttPass")) {
|
if (request->hasArg("mqttPass")) {
|
||||||
jsonWrite(configSetup, "mqttPass", request->getParam("mqttPass")->value());
|
jsonWrite(configSetup, "mqttPass", request->getParam("mqttPass")->value());
|
||||||
}
|
}
|
||||||
|
|
||||||
saveConfig();
|
saveConfig();
|
||||||
|
|
||||||
client.disconnect();
|
client.disconnect();
|
||||||
MQTT_Connecting(false);
|
MQTT_Connecting();
|
||||||
|
|
||||||
|
/*
|
||||||
|
int i = 0;
|
||||||
|
while (!client.connected() && i <= 25) {
|
||||||
|
delay(1000);
|
||||||
|
Serial.print(".");
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
String tmp = "{}";
|
String tmp = "{}";
|
||||||
jsonWrite(tmp, "title", "<button class=\"close\" onclick=\"toggle('my-block')\">×</button>" + stateMQTT());
|
jsonWrite(tmp, "title", "<button class=\"close\" onclick=\"toggle('my-block')\">×</button>" + stateMQTT());
|
||||||
jsonWrite(tmp, "class", "pop-up");
|
jsonWrite(tmp, "class", "pop-up");
|
||||||
|
|
||||||
|
#ifdef ESP8266
|
||||||
request->send(200, "text/text", "ok");
|
request->send(200, "text/text", "ok");
|
||||||
//request->send(200, "text/text", tmp); // отправляем ответ о выполнении
|
#endif
|
||||||
|
|
||||||
|
#ifdef ESP32
|
||||||
|
request->send(200, "text/text", tmp);
|
||||||
|
#endif
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//проверка подключения к серверу
|
//проверка подключения к серверу
|
||||||
ts.add(WIFI_MQTT_CONNECTION_CHECK, wifi_mqtt_reconnecting, [&](void*) {
|
ts.add(WIFI_MQTT_CONNECTION_CHECK, wifi_mqtt_reconnecting, [&](void*) {
|
||||||
|
up_time();
|
||||||
if (WiFi.status() == WL_CONNECTED) {
|
if (WiFi.status() == WL_CONNECTED) {
|
||||||
Serial.println("[V] WiFi-ok");
|
Serial.println("[V] WiFi-ok");
|
||||||
if (client.connected()) {
|
if (client.connected()) {
|
||||||
Serial.println("[V] MQTT-ok");
|
Serial.println("[V] MQTT-ok");
|
||||||
} else {
|
} else {
|
||||||
MQTT_Connecting(true);
|
MQTT_Connecting();
|
||||||
|
mqtt_lost_error++;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Serial.println("[E] Lost WiFi connection");
|
Serial.println("[E] Lost WiFi connection");
|
||||||
|
wifi_lost_error++;
|
||||||
ts.remove(WIFI_MQTT_CONNECTION_CHECK);
|
ts.remove(WIFI_MQTT_CONNECTION_CHECK);
|
||||||
StartAPMode();
|
StartAPMode();
|
||||||
}
|
}
|
||||||
@@ -59,63 +74,42 @@ void handleMQTT() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
//===============================================ПОДКЛЮЧЕНИЕ========================================================
|
//===============================================ПОДКЛЮЧЕНИЕ========================================================
|
||||||
void MQTT_Connecting(boolean out_date_send) {
|
boolean MQTT_Connecting() {
|
||||||
|
|
||||||
String mqtt_server = jsonRead(configSetup, "mqttServer");
|
String mqtt_server = jsonRead(configSetup, "mqttServer");
|
||||||
|
|
||||||
if ((mqtt_server != "")) {
|
if ((mqtt_server != "")) {
|
||||||
|
|
||||||
static boolean first = true;
|
static boolean first = true;
|
||||||
if (!first) Serial.println("[E] Lost MQTT connection, start reconnecting");
|
if (!first) Serial.println("[E] Lost MQTT connection, start reconnecting");
|
||||||
first = false;
|
first = false;
|
||||||
|
|
||||||
//ssl//espClient.setCACert(local_root_ca1);
|
//ssl//espClient.setCACert(local_root_ca1);
|
||||||
|
|
||||||
client.setServer(mqtt_server.c_str(), jsonReadtoInt(configSetup, "mqttPort"));
|
client.setServer(mqtt_server.c_str(), jsonReadtoInt(configSetup, "mqttPort"));
|
||||||
// подключаемся к MQTT серверу
|
|
||||||
if (WiFi.status() == WL_CONNECTED) {
|
if (WiFi.status() == WL_CONNECTED) {
|
||||||
if (!client.connected()) {
|
if (!client.connected()) {
|
||||||
Serial.println("[V] Connecting to MQTT server commenced");
|
Serial.println("[V] Connecting to MQTT server commenced");
|
||||||
//busy = true;
|
|
||||||
if (client.connect(chipID.c_str(), jsonRead(configSetup, "mqttUser").c_str(), jsonRead(configSetup, "mqttPass").c_str())) {
|
if (client.connect(chipID.c_str(), jsonRead(configSetup, "mqttUser").c_str(), jsonRead(configSetup, "mqttPass").c_str())) {
|
||||||
Serial.println("[V] MQTT connected");
|
Serial.println("[V] MQTT connected");
|
||||||
|
|
||||||
client.setCallback(callback);
|
client.setCallback(callback);
|
||||||
|
|
||||||
client.subscribe(prefix.c_str()); // Для приема получения HELLOW и подтверждения связи
|
client.subscribe(prefix.c_str()); // Для приема получения HELLOW и подтверждения связи
|
||||||
client.subscribe((prefix + "/" + chipID + "/+/control").c_str()); // Подписываемся на топики control
|
client.subscribe((prefix + "/" + chipID + "/+/control").c_str()); // Подписываемся на топики control
|
||||||
client.subscribe((prefix + "/" + chipID + "/order").c_str()); // Подписываемся на топики order
|
client.subscribe((prefix + "/" + chipID + "/order").c_str()); // Подписываемся на топики order
|
||||||
//client.subscribe((prefix + "/" + chipID + "/test").c_str()); //Для приема получения work и подтверждения связи (для приложения mqtt IOT MQTT Panel)
|
//client.subscribe((prefix + "/" + chipID + "/test").c_str()); //Для приема получения work и подтверждения связи (для приложения mqtt IOT MQTT Panel)
|
||||||
/* String tmp_line = id_of_other_device;
|
|
||||||
|
|
||||||
while (tmp_line.length() != 0) {
|
|
||||||
|
|
||||||
String id = selectToMarker(tmp_line, ","); //2058631-1589487 1
|
|
||||||
id = selectFromMarkerToMarker(id, " ", 0);
|
|
||||||
client.subscribe((prefix + "/" + id + "/+/status").c_str(), 0);
|
|
||||||
Serial.println("->subscribed to device, id: " + id);
|
|
||||||
|
|
||||||
tmp_line = deleteBeforeDelimiter(tmp_line, ",");
|
|
||||||
}*/
|
|
||||||
|
|
||||||
client.subscribe((prefix + "/ids").c_str()); // Подписываемся на топики ids
|
client.subscribe((prefix + "/ids").c_str()); // Подписываемся на топики ids
|
||||||
sendMQTT("test", "work");
|
sendMQTT("test", "work");
|
||||||
Serial.println("[V] Callback set, subscribe done");
|
Serial.println("[V] Callback set, subscribe done");
|
||||||
//busy = false;
|
//if (out_date_send) outcoming_date(); //отправляем данные в виджеты
|
||||||
if (out_date_send) outcoming_date(); //отправляем данные в виджеты
|
return true;
|
||||||
} else {
|
} else {
|
||||||
//Serial.println(stateMQTT());
|
|
||||||
Serial.println("[E] try again in " + String(wifi_mqtt_reconnecting / 1000) + " sec");
|
Serial.println("[E] try again in " + String(wifi_mqtt_reconnecting / 1000) + " sec");
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Serial.println("[E] No date for MQTT connection");
|
Serial.println("[E] No date for MQTT connection");
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//=====================================================ВХОДЯЩИЕ ДАННЫЕ========================================================
|
//=====================================================ВХОДЯЩИЕ ДАННЫЕ========================================================
|
||||||
|
|
||||||
void callback(char* topic, byte* payload, unsigned int length) {
|
void callback(char* topic, byte* payload, unsigned int length) {
|
||||||
Serial.print("[MQTT] ");
|
Serial.print("[MQTT] ");
|
||||||
Serial.print(topic);
|
Serial.print(topic);
|
||||||
@@ -127,11 +121,9 @@ void callback(char* topic, byte* payload, unsigned int length) {
|
|||||||
}
|
}
|
||||||
Serial.println(" => " + str);
|
Serial.println(" => " + str);
|
||||||
|
|
||||||
if (str == "HELLO") outcoming_date();
|
if (str == "HELLO") outcoming_date(); //превращает название топика в команду, а значение в параметр команды
|
||||||
|
|
||||||
//превращает название топика в команду, а значение в параметр команды
|
|
||||||
|
|
||||||
if (topic_str.indexOf("control") > 0) { //IoTmanager/800324-1458415/RelaySet1/control 1 /IoTmanager/9139530-1458400/RelaySet1/control -> 1
|
if (topic_str.indexOf("control") > 0) { //IoTmanager/800324-1458415/RelaySet1/control 1
|
||||||
//Serial.println(topic_str);
|
//Serial.println(topic_str);
|
||||||
String topic = selectFromMarkerToMarker(topic_str, "/", 3); //RelaySet1
|
String topic = selectFromMarkerToMarker(topic_str, "/", 3); //RelaySet1
|
||||||
String number = selectToMarkerLast(topic, "Set"); //1
|
String number = selectToMarkerLast(topic, "Set"); //1
|
||||||
@@ -151,8 +143,6 @@ void callback(char* topic, byte* payload, unsigned int length) {
|
|||||||
//данные которые отправляем при подключении или отбновлении страницы
|
//данные которые отправляем при подключении или отбновлении страницы
|
||||||
void outcoming_date() {
|
void outcoming_date() {
|
||||||
|
|
||||||
//busy = true;
|
|
||||||
|
|
||||||
sendAllWigets();
|
sendAllWigets();
|
||||||
sendAllData();
|
sendAllData();
|
||||||
|
|
||||||
@@ -163,12 +153,8 @@ void outcoming_date() {
|
|||||||
|
|
||||||
Serial.println("[V] Sending all date to iot manager completed");
|
Serial.println("[V] Sending all date to iot manager completed");
|
||||||
|
|
||||||
//busy = false;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
//======================================CONFIG==================================================
|
//======================================CONFIG==================================================
|
||||||
///IoTmanager/2058631-1589487/config {----viget----}
|
|
||||||
///sendMQTT("config", data);
|
|
||||||
boolean sendMQTT(String end_of_topik, String data) {
|
boolean sendMQTT(String end_of_topik, String data) {
|
||||||
String topik = prefix + "/" + chipID + "/" + end_of_topik;
|
String topik = prefix + "/" + chipID + "/" + end_of_topik;
|
||||||
boolean send_status = client.beginPublish(topik.c_str(), data.length(), false);
|
boolean send_status = client.beginPublish(topik.c_str(), data.length(), false);
|
||||||
@@ -177,38 +163,16 @@ boolean sendMQTT(String end_of_topik, String data) {
|
|||||||
return send_status;
|
return send_status;
|
||||||
}
|
}
|
||||||
//======================================STATUS==================================================
|
//======================================STATUS==================================================
|
||||||
///IoTmanager/2058631-1589487/rel1/status {"status":"1"}
|
|
||||||
///sendSTATUS(topic, state)
|
|
||||||
void sendSTATUS(String topik, String state) {
|
void sendSTATUS(String topik, String state) {
|
||||||
topik = prefix + "/" + chipID + "/" + topik + "/" + "status";
|
topik = prefix + "/" + chipID + "/" + topik + "/" + "status";
|
||||||
String json_ = "{}";
|
String json_ = "{}";
|
||||||
jsonWrite(json_, "status", state);
|
jsonWrite(json_, "status", state);
|
||||||
|
|
||||||
//long st_time = millis();
|
|
||||||
int send_status = client.publish (topik.c_str(), json_.c_str(), false);
|
int send_status = client.publish (topik.c_str(), json_.c_str(), false);
|
||||||
//long end_time = millis();
|
|
||||||
//Serial.println("send status = " + String(send_status) + ", timeout = " + String(end_time - st_time));
|
|
||||||
}
|
}
|
||||||
/*void sendSTATUS(String topik, String state, String type, String param) {
|
|
||||||
topik = prefix + "/" + chipID + "/" + topik + "/" + "status";
|
|
||||||
String json_ = "{}";
|
|
||||||
jsonWrite(json_, "status", state);
|
|
||||||
jsonWrite(json_, type, param);
|
|
||||||
|
|
||||||
//long st_time = millis();
|
|
||||||
int send_status = client.publish (topik.c_str(), json_.c_str(), false);
|
|
||||||
//long end_time = millis();
|
|
||||||
//Serial.println("send status = " + String(send_status) + ", timeout = " + String(end_time - st_time));
|
|
||||||
}*/
|
|
||||||
//======================================CONTROL==================================================
|
//======================================CONTROL==================================================
|
||||||
///IoTmanager/2058631-1589487/rel1/control 1
|
|
||||||
void sendCONTROL(String id, String topik, String state) {
|
void sendCONTROL(String id, String topik, String state) {
|
||||||
String all_line = prefix + "/" + id + "/" + topik + "/control";
|
String all_line = prefix + "/" + id + "/" + topik + "/control";
|
||||||
|
|
||||||
//long st_time = millis();
|
|
||||||
int send_status = client.publish (all_line.c_str(), state.c_str(), false);
|
int send_status = client.publish (all_line.c_str(), state.c_str(), false);
|
||||||
//long end_time = millis();
|
|
||||||
//Serial.println("send control = " + String(send_status) + ", timeout = " + String(end_time - st_time));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//=====================================================ОТПРАВЛЯЕМ ВИДЖЕТЫ========================================================
|
//=====================================================ОТПРАВЛЯЕМ ВИДЖЕТЫ========================================================
|
||||||
@@ -218,9 +182,7 @@ void sendAllWigets() {
|
|||||||
String line;
|
String line;
|
||||||
int psn_1 = 0;
|
int psn_1 = 0;
|
||||||
int psn_2;
|
int psn_2;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
|
|
||||||
psn_2 = all_vigets.indexOf("\r\n", psn_1);
|
psn_2 = all_vigets.indexOf("\r\n", psn_1);
|
||||||
line = all_vigets.substring(psn_1, psn_2);
|
line = all_vigets.substring(psn_1, psn_2);
|
||||||
line.replace("\n", "");
|
line.replace("\n", "");
|
||||||
@@ -228,17 +190,14 @@ void sendAllWigets() {
|
|||||||
//jsonWrite(line, "id", String(counter));
|
//jsonWrite(line, "id", String(counter));
|
||||||
//jsonWrite(line, "pageId", String(counter));
|
//jsonWrite(line, "pageId", String(counter));
|
||||||
counter++;
|
counter++;
|
||||||
sendMQTT("config",line);
|
sendMQTT("config", line);
|
||||||
Serial.println("[V] " + line);
|
Serial.println("[V] " + line);
|
||||||
psn_1 = psn_2 + 1;
|
psn_1 = psn_2 + 1;
|
||||||
|
|
||||||
} while (psn_2 + 2 < all_vigets.length());
|
} while (psn_2 + 2 < all_vigets.length());
|
||||||
|
|
||||||
getMemoryLoad("[i] after send all vigets");
|
getMemoryLoad("[i] after send all vigets");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//=====================================================ОТПРАВЛЯЕМ ДАННЫЕ В ВИДЖЕТЫ ПРИ ОБНОВЛЕНИИ СТРАНИЦЫ========================================================
|
//=====================================================ОТПРАВЛЯЕМ ДАННЫЕ В ВИДЖЕТЫ ПРИ ОБНОВЛЕНИИ СТРАНИЦЫ========================================================
|
||||||
|
|
||||||
void sendAllData() { //берет строку json и ключи превращает в топики а значения колючей в них посылает
|
void sendAllData() { //берет строку json и ключи превращает в топики а значения колючей в них посылает
|
||||||
|
|
||||||
String current_config = configJson; //{"SSDP":"MODULES","lang":"","ip":"192.168.43.60","DS":"34.00","rel1":"1","rel2":"1"}
|
String current_config = configJson; //{"SSDP":"MODULES","lang":"","ip":"192.168.43.60","DS":"34.00","rel1":"1","rel2":"1"}
|
||||||
@@ -281,7 +240,7 @@ void sendLogData(String file, String topic) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
String stateMQTT() {
|
String stateMQTT() {
|
||||||
|
|
||||||
int state = client.state();
|
int state = client.state();
|
||||||
|
|
||||||
switch (state) {
|
switch (state) {
|
||||||
|
|||||||
82
set.h
82
set.h
@@ -1,9 +1,42 @@
|
|||||||
|
String firmware_version = "2.2";
|
||||||
|
String new_version;
|
||||||
|
|
||||||
|
|
||||||
|
//#define OTA_enable
|
||||||
|
//#define MDNS_enable
|
||||||
|
//#define WS_enable
|
||||||
|
|
||||||
|
#define TIME_COMPILING String(__TIME__)
|
||||||
|
#define DATE_COMPILING String(__DATE__)
|
||||||
|
|
||||||
|
#define wifi_mqtt_reconnecting 20000
|
||||||
|
//-----------------------------------------------------------------
|
||||||
|
#define analog_update_int 5000
|
||||||
|
//-----------------------------------------------------------------
|
||||||
|
#define ph_shooting_interval 500 //интервал выстрела датчика
|
||||||
|
#define ph_times_to_send 10 //после скольки выстрелов делать отправку данных
|
||||||
|
//-----------------------------------------------------------------
|
||||||
|
#define temp_update_int 5000
|
||||||
|
//-----------------------------------------------------------------
|
||||||
|
#define tank_level_shooting_interval 500 //интервал выстрела датчика
|
||||||
|
#define tank_level_times_to_send 20 //после скольки выстрелов делать отправку данных
|
||||||
|
//-----------------------------------------------------------------
|
||||||
|
#define dhtT_update_int 10000
|
||||||
|
#define dhtH_update_int 10000
|
||||||
|
#define dht_calculation_update_int 10000
|
||||||
|
//-----------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
//==библиотеки и объекты для ESP8266==//
|
//==библиотеки и объекты для ESP8266==//
|
||||||
#ifdef ESP8266
|
#ifdef ESP8266
|
||||||
#include <ESP8266WiFi.h>
|
#include <ESP8266WiFi.h>
|
||||||
#include <ESP8266HTTPClient.h>
|
#include <ESP8266HTTPClient.h>
|
||||||
#include <ESPAsyncTCP.h>
|
#include <ESPAsyncTCP.h>
|
||||||
#include <ESP8266mDNS.h>
|
#include <ESP8266mDNS.h>
|
||||||
|
|
||||||
|
#include <ESP8266httpUpdate.h>
|
||||||
|
#include <ESP8266HTTPUpdateServer.h>
|
||||||
|
ESP8266HTTPUpdateServer httpUpdater;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//==библиотеки и объекты для ESP32==//
|
//==библиотеки и объекты для ESP32==//
|
||||||
@@ -15,11 +48,16 @@
|
|||||||
#endif
|
#endif
|
||||||
#include <AsyncTCP.h>
|
#include <AsyncTCP.h>
|
||||||
#include <analogWrite.h>
|
#include <analogWrite.h>
|
||||||
|
|
||||||
|
#include <HTTPUpdate.h>
|
||||||
#include <HTTPClient.h>
|
#include <HTTPClient.h>
|
||||||
HTTPClient http;
|
//HTTPClient http;
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//==общие библиотеки и объекты==//
|
//==общие библиотеки и объекты==//
|
||||||
|
#include "time.h"
|
||||||
#ifdef OTA_enable
|
#ifdef OTA_enable
|
||||||
#include <ArduinoOTA.h>
|
#include <ArduinoOTA.h>
|
||||||
#endif
|
#endif
|
||||||
@@ -35,7 +73,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, DHTD, 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,39 +97,14 @@ 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();
|
||||||
//-----------------------------------------------------------------
|
//-----------------------------------------------------------------
|
||||||
|
|
||||||
|
const char* hostName = "IoT Manager";
|
||||||
//#define OTA_enable
|
|
||||||
//-----------------------------------------------------------------
|
|
||||||
//#define MDNS_enable
|
|
||||||
//-----------------------------------------------------------------
|
|
||||||
//#define WS_enable
|
|
||||||
//-----------------------------------------------------------------
|
|
||||||
|
|
||||||
#define wifi_mqtt_reconnecting 20000
|
|
||||||
//-----------------------------------------------------------------
|
|
||||||
#define analog_update_int 5000
|
|
||||||
//-----------------------------------------------------------------
|
|
||||||
#define ph_shooting_interval 500 //интервал выстрела датчика
|
|
||||||
#define ph_times_to_send 10 //после скольки выстрелов делать отправку данных
|
|
||||||
//-----------------------------------------------------------------
|
|
||||||
#define temp_update_int 5000
|
|
||||||
//-----------------------------------------------------------------
|
|
||||||
#define tank_level_shooting_interval 500 //интервал выстрела датчика
|
|
||||||
#define tank_level_times_to_send 20 //после скольки выстрелов делать отправку данных
|
|
||||||
//-----------------------------------------------------------------
|
|
||||||
#define dhtT_update_int 5000
|
|
||||||
#define dhtH_update_int 5000
|
|
||||||
//-----------------------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
const char* hostName = "esp-async";
|
|
||||||
|
|
||||||
String configSetup = "{}";
|
String configSetup = "{}";
|
||||||
String configJson = "{}";
|
String configJson = "{}";
|
||||||
@@ -120,3 +133,12 @@ const String ssdpS = "SSDP";
|
|||||||
String current_time;
|
String current_time;
|
||||||
|
|
||||||
int scenario_line_status [] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
|
int scenario_line_status [] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
|
||||||
|
|
||||||
|
int wifi_lost_error = 0;
|
||||||
|
int mqtt_lost_error = -1;
|
||||||
|
|
||||||
|
String var;
|
||||||
|
|
||||||
|
boolean upgrade_flag = false;
|
||||||
|
|
||||||
|
boolean get_url_flag = false;
|
||||||
|
|||||||
Reference in New Issue
Block a user