Files
IoTManager/src/Web.cpp

368 lines
14 KiB
C++
Raw Normal View History

2020-09-02 22:34:49 +03:00
#include "Web.h"
2020-10-18 09:52:17 +03:00
#include "Class/NotAsync.h"
2020-09-02 22:34:49 +03:00
#include "Global.h"
#include "Init.h"
2020-09-17 21:33:54 +03:00
#include "ItemsList.h"
2020-11-15 01:44:25 +03:00
#include "items/vLogging.h"
2020-11-05 02:23:08 +03:00
#include "Telegram.h"
#include "RemoteOrdersUdp.h"
2020-12-06 02:08:37 +03:00
#include "SoftUART.h"
2020-09-02 22:34:49 +03:00
bool parseRequestForPreset(AsyncWebServerRequest* request, uint8_t& preset) {
if (request->hasArg("preset")) {
preset = request->getParam("preset")->value().toInt();
return true;
}
return false;
}
void web_init() {
server.on("/set", HTTP_GET, [](AsyncWebServerRequest* request) {
//==============================set.device.json====================================================================================================
if (request->hasArg("addItem")) {
2020-12-09 04:08:36 +03:00
#ifdef FLASH_SIZE_1MB
itemName = request->getParam("addItem")->value();
myNotAsyncActions->make(do_addItem);
#endif
#ifndef FLASH_SIZE_1MB
addItem(request->getParam("addItem")->value());
#endif
2020-09-02 22:34:49 +03:00
request->redirect("/?set.device");
}
2020-11-03 00:04:07 +03:00
if (request->hasArg("addPreset")) {
2020-12-09 04:08:36 +03:00
#ifdef FLASH_SIZE_1MB
presetName = request->getParam("addPreset")->value();
myNotAsyncActions->make(do_addPreset);
#endif
#ifndef FLASH_SIZE_1MB
addPreset(request->getParam("addPreset")->value());
#endif
2020-11-03 00:04:07 +03:00
request->redirect("/?set.device");
}
if (request->hasArg("delChoosingItems")) {
2020-11-17 01:01:42 +03:00
jsonWriteStr(configSetupJson, "warning1", F("<div style='margin-top:10px;margin-bottom:10px;'><font color='black'><p style='border: 1px solid #DCDCDC; border-radius: 3px; background-color: #ffc7c7; padding: 10px;'>Требуется перезагрузка</p></font></div>"));
2020-10-18 09:52:17 +03:00
myNotAsyncActions->make(do_delChoosingItems);
request->send(200);
}
2020-09-02 22:34:49 +03:00
if (request->hasArg("delAllItems")) {
delAllItems();
2020-11-16 18:47:09 +03:00
cleanLogAndData();
2020-11-17 01:01:42 +03:00
jsonWriteStr(configSetupJson, "warning1", F("<div style='margin-top:10px;margin-bottom:10px;'><font color='black'><p style='border: 1px solid #DCDCDC; border-radius: 3px; background-color: #ffc7c7; padding: 10px;'>Требуется перезагрузка</p></font></div>"));
2020-09-02 22:34:49 +03:00
request->redirect("/?set.device");
}
if (request->hasArg("saveItems")) {
2020-10-18 09:52:17 +03:00
myNotAsyncActions->make(do_deviceInit);
2020-09-02 22:34:49 +03:00
request->send(200);
}
2020-09-17 21:33:54 +03:00
2020-09-02 22:34:49 +03:00
if (request->hasArg("scen")) {
bool value = request->getParam("scen")->value().toInt();
jsonWriteBool(configSetupJson, "scen", value);
saveConfig();
loadScenario();
request->send(200);
}
2020-09-17 21:33:54 +03:00
2020-09-02 22:34:49 +03:00
if (request->hasArg("sceninit")) {
loadScenario();
request->send(200);
}
2020-09-17 21:33:54 +03:00
//if (request->hasArg("snaUdp")) {
// bool value = request->getParam("snaUdp")->value().toInt();
// jsonWriteBool(configSetupJson, "snaUdp", value);
// saveConfig();
// #ifdef UDP_ENABLED
// asyncUdpInit();
// #endif
// request->send(200);
//}
//if (request->hasArg("scenUdp")) {
// myNotAsyncActions->make(do_sendScenUDP);
// request->send(200);
//}
if (request->hasArg("snaMqtt")) {
bool value = request->getParam("snaMqtt")->value().toInt();
jsonWriteBool(configSetupJson, "snaMqtt", value);
saveConfig();
mqtt.subscribe((mqttPrefix + "/+/+/status").c_str());
mqtt.subscribe((mqttPrefix + "/+/+/info").c_str());
request->send(200);
}
if (request->hasArg("scenMqtt")) {
myNotAsyncActions->make(do_sendScenMQTT);
request->send(200);
}
2020-09-02 22:34:49 +03:00
#ifdef LOGGING_ENABLED
if (request->hasArg("cleanlog")) {
2020-11-15 02:46:27 +03:00
cleanLogAndData();
2020-09-02 22:34:49 +03:00
request->send(200);
}
#endif
2020-09-17 21:33:54 +03:00
2020-09-02 22:34:49 +03:00
//==============================wifi settings=============================================
2020-10-04 02:45:26 +03:00
if (request->hasArg("devname")) {
jsonWriteStr(configSetupJson, "name", request->getParam("devname")->value());
saveConfig();
request->send(200);
}
2020-09-02 22:34:49 +03:00
if (request->hasArg("routerssid")) {
jsonWriteStr(configSetupJson, "routerssid", request->getParam("routerssid")->value());
saveConfig();
request->send(200);
}
if (request->hasArg("routerpass")) {
jsonWriteStr(configSetupJson, "routerpass", request->getParam("routerpass")->value());
saveConfig();
request->send(200);
}
2020-09-17 21:33:54 +03:00
2020-09-02 22:34:49 +03:00
if (request->hasArg("apssid")) {
jsonWriteStr(configSetupJson, "apssid", request->getParam("apssid")->value());
saveConfig();
request->send(200, "text/text", "OK");
}
if (request->hasArg("appass")) {
jsonWriteStr(configSetupJson, "appass", request->getParam("appass")->value());
saveConfig();
request->send(200);
}
2020-09-17 21:33:54 +03:00
2020-09-02 22:34:49 +03:00
if (request->hasArg("weblogin")) {
jsonWriteStr(configSetupJson, "weblogin", request->getParam("weblogin")->value());
saveConfig();
request->send(200);
}
if (request->hasArg("webpass")) {
jsonWriteStr(configSetupJson, "webpass", request->getParam("webpass")->value());
saveConfig();
request->send(200);
}
2020-09-17 21:33:54 +03:00
2020-09-02 22:34:49 +03:00
if (request->hasArg("timezone")) {
String timezoneStr = request->getParam("timezone")->value();
jsonWriteStr(configSetupJson, "timezone", timezoneStr);
saveConfig();
timeNow->setTimezone(timezoneStr.toInt());
request->send(200);
}
if (request->hasArg("ntp")) {
String ntpStr = request->getParam("ntp")->value();
jsonWriteStr(configSetupJson, "ntp", ntpStr);
saveConfig();
timeNow->setNtpPool(ntpStr);
request->send(200);
}
2020-09-17 21:33:54 +03:00
2020-09-02 22:34:49 +03:00
if (request->hasArg("blink")) {
bool value = request->getParam("blink")->value().toInt();
jsonWriteBool(configSetupJson, "blink", value);
saveConfig();
request->send(200);
}
2020-09-18 00:02:20 +03:00
2020-10-04 02:45:26 +03:00
if (request->hasArg("device")) {
if (request->getParam("device")->value() == "ok") {
ESP.restart();
}
request->send(200);
}
if (request->hasArg("test")) {
if (request->getParam("test")->value() == "ok") {
Serial.println("test pass");
}
request->send(200);
}
2020-09-02 22:34:49 +03:00
//==============================mqtt settings=============================================
2020-09-18 00:02:20 +03:00
2020-09-02 22:34:49 +03:00
if (request->hasArg("mqttServer")) {
jsonWriteStr(configSetupJson, "mqttServer", request->getParam("mqttServer")->value());
saveConfig();
2020-10-18 09:52:17 +03:00
myNotAsyncActions->make(do_MQTTPARAMSCHANGED);
2020-09-02 22:34:49 +03:00
request->send(200);
}
if (request->hasArg("mqttPort")) {
int port = (request->getParam("mqttPort")->value()).toInt();
jsonWriteInt(configSetupJson, "mqttPort", port);
saveConfig();
2020-10-18 09:52:17 +03:00
myNotAsyncActions->make(do_MQTTPARAMSCHANGED);
2020-09-02 22:34:49 +03:00
request->send(200);
}
if (request->hasArg("mqttPrefix")) {
jsonWriteStr(configSetupJson, "mqttPrefix", request->getParam("mqttPrefix")->value());
saveConfig();
2020-10-18 09:52:17 +03:00
myNotAsyncActions->make(do_MQTTPARAMSCHANGED);
2020-09-02 22:34:49 +03:00
request->send(200);
}
if (request->hasArg("mqttUser")) {
jsonWriteStr(configSetupJson, "mqttUser", request->getParam("mqttUser")->value());
saveConfig();
2020-10-18 09:52:17 +03:00
myNotAsyncActions->make(do_MQTTPARAMSCHANGED);
2020-09-02 22:34:49 +03:00
request->send(200);
}
if (request->hasArg("mqttPass")) {
jsonWriteStr(configSetupJson, "mqttPass", request->getParam("mqttPass")->value());
saveConfig();
2020-10-18 09:52:17 +03:00
myNotAsyncActions->make(do_MQTTPARAMSCHANGED);
2020-09-02 22:34:49 +03:00
request->send(200);
}
2020-09-17 21:33:54 +03:00
2020-09-02 22:34:49 +03:00
if (request->hasArg("mqttsend")) {
//myNotAsyncActions->make(do_MQTTUDP);
2020-09-02 22:34:49 +03:00
request->send(200);
}
if (request->hasArg("mqttcheck")) {
2020-10-04 02:45:26 +03:00
String buf = "<button class=\"close\" onclick=\"toggle('my-block')\">×</button>" + getStateStr();
2020-09-02 22:34:49 +03:00
String payload = "{}";
jsonWriteStr(payload, "title", buf);
jsonWriteStr(payload, "class", "pop-up");
request->send(200, "text/html", payload);
}
2020-11-04 23:48:21 +03:00
//==============================push settings=============================================
if (request->hasArg("telegramApi")) {
jsonWriteStr(configSetupJson, "telegramApi", request->getParam("telegramApi")->value());
2020-12-02 04:50:29 +03:00
saveConfig();
request->send(200);
}
if (request->hasArg("chatId")) {
jsonWriteStr(configSetupJson, "chatId", request->getParam("chatId")->value());
2020-11-05 02:23:08 +03:00
saveConfig();
request->send(200);
}
if (request->hasArg("telegonof")) {
bool value = request->getParam("telegonof")->value().toInt();
jsonWriteBool(configSetupJson, "telegonof", value);
2020-12-02 04:50:29 +03:00
saveConfig();
request->send(200);
}
if (request->hasArg("teleginput")) {
bool value = request->getParam("teleginput")->value().toInt();
jsonWriteBool(configSetupJson, "teleginput", value);
2020-11-04 23:48:21 +03:00
saveConfig();
request->send(200);
}
2020-09-02 22:34:49 +03:00
//==============================utilities settings=============================================
2020-09-18 00:02:20 +03:00
if (request->hasArg("i2c")) {
2020-10-18 09:52:17 +03:00
myNotAsyncActions->make(do_BUSSCAN);
2020-09-02 22:34:49 +03:00
request->redirect("/?set.utilities");
2020-09-18 00:24:07 +03:00
}
2020-12-06 02:08:37 +03:00
if (request->hasArg("uart")) {
bool value = request->getParam("uart")->value().toInt();
jsonWriteBool(configSetupJson, "uart", value);
saveConfig();
uartInit();
request->send(200);
}
if (request->hasArg("uartS")) {
jsonWriteStr(configSetupJson, "uartS", request->getParam("uartS")->value());
saveConfig();
uartInit();
request->send(200);
}
if (request->hasArg("uartTX")) {
jsonWriteStr(configSetupJson, "uartTX", request->getParam("uartTX")->value());
saveConfig();
uartInit();
request->send(200);
}
if (request->hasArg("uartRX")) {
jsonWriteStr(configSetupJson, "uartRX", request->getParam("uartRX")->value());
saveConfig();
uartInit();
request->send(200);
}
2020-11-01 02:52:57 +03:00
//==============================developer settings=============================================
if (request->hasArg("serverip")) {
jsonWriteStr(configSetupJson, "serverip", request->getParam("serverip")->value());
saveConfig();
serverIP = jsonReadStr(configSetupJson, "serverip");
request->send(200);
}
2020-11-04 23:48:21 +03:00
});
2020-09-02 22:34:49 +03:00
//==============================list of items=====================================================
//server.on("/del", HTTP_GET, [](AsyncWebServerRequest* request) {
// if (request->hasArg("file")) {
// itemsFile = request->getParam("file")->value();
// }
// if (request->hasArg("line")) {
// itemsLine = request->getParam("line")->value();
// }
// delElementFlag = true;
// Device_init();
// request->redirect("/?setn.device");
//});
2020-11-04 23:48:21 +03:00
/*
2020-09-02 22:34:49 +03:00
* Check
*/
server.on("/check", HTTP_GET, [](AsyncWebServerRequest* request) {
2020-10-18 09:52:17 +03:00
myNotAsyncActions->make(do_GETLASTVERSION);
2020-09-17 21:33:54 +03:00
SerialPrint("I", "Update", "firmware version: " + String(lastVersion));
2020-09-02 22:34:49 +03:00
String msg = "";
if (lastVersion == FIRMWARE_VERSION) {
msg = F("Актуальная версия прошивки уже установлена.");
2020-11-04 23:48:21 +03:00
}
else if (lastVersion > FIRMWARE_VERSION) {
2020-10-05 01:09:00 +03:00
msg = F("Новая версия прошивки<a href=\"#\" class=\"btn btn-block btn-danger\" onclick=\"send_request(this, '/upgrade');setTimeout(function(){ location.href='/?set.device'; }, 90000);html('my-block','<span class=loader></span>Идет обновление прошивки, после обновления страница перезагрузится автоматически...')\">Установить</a>");
2020-11-04 23:48:21 +03:00
}
else if (lastVersion == -1) {
2020-09-02 22:34:49 +03:00
msg = F("Cервер не найден. Попробуйте повторить позже...");
2020-11-04 23:48:21 +03:00
}
else if (lastVersion == -2) {
2020-09-02 22:34:49 +03:00
msg = F("Устройство не подключено к роутеру!");
2020-11-04 23:48:21 +03:00
}
else if (lastVersion < FIRMWARE_VERSION) {
2020-11-01 16:50:44 +03:00
msg = F("Ошибка версии. Попробуйте повторить позже...");
2020-09-02 22:34:49 +03:00
}
2020-09-18 00:02:20 +03:00
2020-09-17 21:33:54 +03:00
// else if (lastVersion == "") {
//msg = F("Нажмите на кнопку \"обновить прошивку\" повторно...");
//} else if (lastVersion == "less") {
//msg = F("Обновление \"по воздуху\" не поддерживается!");
//} else if (lastVersion == "notsupported") {
// msg = F("Обновление возможно только через usb!");
//}
2020-09-02 22:34:49 +03:00
String tmp = "{}";
jsonWriteStr(tmp, "title", "<button class=\"close\" onclick=\"toggle('my-block')\">×</button>" + msg);
jsonWriteStr(tmp, "class", "pop-up");
request->send(200, "text/html", tmp);
2020-11-04 23:48:21 +03:00
});
2020-09-02 22:34:49 +03:00
2020-11-04 23:48:21 +03:00
/*
2020-09-02 22:34:49 +03:00
* Upgrade
*/
server.on("/upgrade", HTTP_GET, [](AsyncWebServerRequest* request) {
2020-10-18 09:52:17 +03:00
myNotAsyncActions->make(do_UPGRADE);
2020-09-02 22:34:49 +03:00
request->send(200, "text/html");
2020-11-04 23:48:21 +03:00
});
2020-09-02 22:34:49 +03:00
}
void setConfigParam(const char* param, const String& value) {
2020-09-17 21:33:54 +03:00
SerialPrint("I", "Web", "set " + String(param) + ": " + value);
2020-09-02 22:34:49 +03:00
jsonWriteStr(configSetupJson, param, value);
saveConfig();
}