mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-03-30 03:49:13 +03:00
renaming
This commit is contained in:
@@ -34,6 +34,20 @@
|
|||||||
"title": "Сканировать",
|
"title": "Сканировать",
|
||||||
"action": "/set?itoc",
|
"action": "/set?itoc",
|
||||||
"class": "btn btn-block btn-default"
|
"class": "btn btn-block btn-default"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "h3",
|
||||||
|
"title": "Проверка ФС"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "h4",
|
||||||
|
"title": "{{fscheck}}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "link",
|
||||||
|
"title": "Запустить",
|
||||||
|
"action": "/set?fscheck",
|
||||||
|
"class": "btn btn-block btn-default"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
5
data/widgets/any-data.json
Normal file
5
data/widgets/any-data.json
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"widget": "anydata",
|
||||||
|
"after": "",
|
||||||
|
"icon": ""
|
||||||
|
}
|
||||||
12
data/widgets/progress-line.json
Normal file
12
data/widgets/progress-line.json
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"widget": "progress-line",
|
||||||
|
"icon": "sunny",
|
||||||
|
"descrColor": "",
|
||||||
|
"color": "",
|
||||||
|
"max": "100",
|
||||||
|
"background": "",
|
||||||
|
"stroke": "10",
|
||||||
|
"disabled": "",
|
||||||
|
"before": "",
|
||||||
|
"after": ""
|
||||||
|
}
|
||||||
11
data/widgets/progress-round.json
Normal file
11
data/widgets/progress-round.json
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"widget": "progress-round",
|
||||||
|
"descrColor": "",
|
||||||
|
"max": "100",
|
||||||
|
"stroke": "20",
|
||||||
|
"color": "#45ccce",
|
||||||
|
"background": "#777",
|
||||||
|
"before": "",
|
||||||
|
"semicircle": "1",
|
||||||
|
"after": ""
|
||||||
|
}
|
||||||
5
data/widgets/toggle.json
Normal file
5
data/widgets/toggle.json
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"widget": "toggle",
|
||||||
|
"icon": "",
|
||||||
|
"iconOff": ""
|
||||||
|
}
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"widget" : "anydata",
|
|
||||||
"after" : "",
|
|
||||||
"icon" : ""
|
|
||||||
}
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
{
|
|
||||||
"widget" : "progress-line",
|
|
||||||
"icon" : "sunny",
|
|
||||||
"descrColor" : "",
|
|
||||||
"color" : "",
|
|
||||||
"max" : "100",
|
|
||||||
"background" : "",
|
|
||||||
"stroke" : "10",
|
|
||||||
"disabled" : "",
|
|
||||||
"before" : "",
|
|
||||||
"after" : ""
|
|
||||||
}
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
{
|
|
||||||
"widget" : "progress-round",
|
|
||||||
"descrColor" : "",
|
|
||||||
"max" : "100",
|
|
||||||
"stroke" : "20",
|
|
||||||
"color" : "#45ccce",
|
|
||||||
"background": "#777",
|
|
||||||
"before" : "",
|
|
||||||
"semicircle" : "1",
|
|
||||||
"after" : ""
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"widget" : "toggle",
|
|
||||||
"icon" : "",
|
|
||||||
"iconOff" : ""
|
|
||||||
}
|
|
||||||
@@ -38,13 +38,7 @@
|
|||||||
#include <TickerScheduler.h>
|
#include <TickerScheduler.h>
|
||||||
#include <Wire.h>
|
#include <Wire.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#ifdef OTA_UPDATES_ENABLED
|
|
||||||
#include <ArduinoOTA.h>
|
#include <ArduinoOTA.h>
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Objects.h(без данных)
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef WEBSOCKET_ENABLED
|
#ifdef WEBSOCKET_ENABLED
|
||||||
extern AsyncWebSocket ws;
|
extern AsyncWebSocket ws;
|
||||||
@@ -240,7 +234,7 @@ extern void init_updater();
|
|||||||
// widget
|
// widget
|
||||||
extern void createWidget(String widget_name, String page_name, String page_number, String file, String topic);
|
extern void createWidget(String widget_name, String page_name, String page_number, String file, String topic);
|
||||||
extern void createWidgetParam(String widget_name, String page_name, String page_number, String file, String topic, String name1, String param1, String name2, String param2, String name3, String param3);
|
extern void createWidgetParam(String widget_name, String page_name, String page_number, String file, String topic, String name1, String param1, String name2, String param2, String name3, String param3);
|
||||||
extern void choose_widget_and_create(String widget_name, String page_name, String page_number, String type, String topik);
|
extern void createWidgetByType(String widget_name, String page_name, String page_number, String type, String topik);
|
||||||
extern void createChart(String widget_name, String page_name, String page_number, String file, String topic, String maxCount);
|
extern void createChart(String widget_name, String page_name, String page_number, String file, String topic, String maxCount);
|
||||||
|
|
||||||
// PushingBox
|
// PushingBox
|
||||||
@@ -255,6 +249,7 @@ extern void do_mqtt_send_settings_to_udp();
|
|||||||
extern void Web_server_init();
|
extern void Web_server_init();
|
||||||
|
|
||||||
// iot_firmware
|
// iot_firmware
|
||||||
|
extern void addCommandLoop(const String& cmdStr);
|
||||||
extern void loopSerial();
|
extern void loopSerial();
|
||||||
extern void loopCmd();
|
extern void loopCmd();
|
||||||
extern void loopButton();
|
extern void loopButton();
|
||||||
|
|||||||
9
include/HttpServer.h
Normal file
9
include/HttpServer.h
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "Global.h"
|
||||||
|
|
||||||
|
namespace HttpServer {
|
||||||
|
|
||||||
|
void init();
|
||||||
|
|
||||||
|
} // namespace HttpServer
|
||||||
73
include/Utils/WebUtils.h
Normal file
73
include/Utils/WebUtils.h
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "ESPAsyncWebServer.h"
|
||||||
|
|
||||||
|
const String getMethodName(AsyncWebServerRequest* request) {
|
||||||
|
String res = F("UNKNOWN");
|
||||||
|
if (request->method() == HTTP_GET)
|
||||||
|
res = F("GET");
|
||||||
|
else if (request->method() == HTTP_POST)
|
||||||
|
res = F("POST");
|
||||||
|
else if (request->method() == HTTP_DELETE)
|
||||||
|
res = F("DELETE");
|
||||||
|
else if (request->method() == HTTP_PUT)
|
||||||
|
res = F("PUT");
|
||||||
|
else if (request->method() == HTTP_PATCH)
|
||||||
|
res = F("PATCH");
|
||||||
|
else if (request->method() == HTTP_HEAD)
|
||||||
|
res = F("HEAD");
|
||||||
|
else if (request->method() == HTTP_OPTIONS)
|
||||||
|
res = F("OPTIONS");
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
const String getRequestInfo(AsyncWebServerRequest* request) {
|
||||||
|
String res = getMethodName(request);
|
||||||
|
res += ' ';
|
||||||
|
res += "http://";
|
||||||
|
res += request->host();
|
||||||
|
res += request->url();
|
||||||
|
res += '\n';
|
||||||
|
if (request->contentLength()) {
|
||||||
|
res += "content-type: ";
|
||||||
|
res += request->contentType();
|
||||||
|
res += " content-lenght: ";
|
||||||
|
res += prettyBytes(request->contentLength());
|
||||||
|
res += '\n';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (request->headers()) {
|
||||||
|
res += "headers:\n";
|
||||||
|
for (size_t i = 0; i < request->headers(); i++) {
|
||||||
|
AsyncWebHeader* h = request->getHeader(i);
|
||||||
|
res += h->name();
|
||||||
|
res += '=';
|
||||||
|
res += h->value();
|
||||||
|
res += '\n';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (request->params()) {
|
||||||
|
res += "params:\n";
|
||||||
|
for (size_t i = 0; i < request->params(); i++) {
|
||||||
|
AsyncWebParameter* p = request->getParam(i);
|
||||||
|
if (p->isFile()) {
|
||||||
|
res += "FILE";
|
||||||
|
} else if (p->isPost()) {
|
||||||
|
res += "POST";
|
||||||
|
} else {
|
||||||
|
res += "GET";
|
||||||
|
}
|
||||||
|
res += ' ';
|
||||||
|
res += p->name();
|
||||||
|
res += ':';
|
||||||
|
res += p->value();
|
||||||
|
if (p->isFile()) {
|
||||||
|
res += " size:";
|
||||||
|
res += p->size();
|
||||||
|
}
|
||||||
|
res += '\n';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
20
src/Cmd.cpp
20
src/Cmd.cpp
@@ -541,7 +541,7 @@ void serialBegin() {
|
|||||||
String line = String(str);
|
String line = String(str);
|
||||||
pm.info("serial read: " + line);
|
pm.info("serial read: " + line);
|
||||||
//line.replace("#", " ");
|
//line.replace("#", " ");
|
||||||
order_loop += line + ",";
|
addCommandLoop(line);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -560,9 +560,6 @@ void mqttOrderSend() {
|
|||||||
String order = sCmd.next();
|
String order = sCmd.next();
|
||||||
|
|
||||||
String all_line = jsonReadStr(configSetupJson, "mqttPrefix") + "/" + id + "/order";
|
String all_line = jsonReadStr(configSetupJson, "mqttPrefix") + "/" + id + "/order";
|
||||||
//Serial.print(all_line);
|
|
||||||
//Serial.print("->");
|
|
||||||
//Serial.println(order);
|
|
||||||
mqtt.publish(all_line.c_str(), order.c_str(), false);
|
mqtt.publish(all_line.c_str(), order.c_str(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -583,13 +580,18 @@ void firmwareVersion() {
|
|||||||
String page_name = sCmd.next();
|
String page_name = sCmd.next();
|
||||||
String page_number = sCmd.next();
|
String page_number = sCmd.next();
|
||||||
jsonWriteStr(configLiveJson, "firmver", FIRMWARE_VERSION);
|
jsonWriteStr(configLiveJson, "firmver", FIRMWARE_VERSION);
|
||||||
choose_widget_and_create(widget_name, page_name, page_number, "any-data", "firmver");
|
createWidgetByType(widget_name, page_name, page_number, "any-data", "firmver");
|
||||||
|
}
|
||||||
|
|
||||||
|
void addCommandLoop(const String &cmdStr) {
|
||||||
|
order_loop += cmdStr;
|
||||||
|
if (!cmdStr.endsWith(",")) {
|
||||||
|
order_loop += ",";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//==============================================================================================================================
|
|
||||||
//============================выполнение команд (в лупе) по очереди из строки order=============================================
|
|
||||||
void loopCmd() {
|
void loopCmd() {
|
||||||
if (order_loop != "") {
|
if (order_loop.length()) {
|
||||||
String tmp = selectToMarker(order_loop, ","); //выделяем первую команду rel 5 1,
|
String tmp = selectToMarker(order_loop, ","); //выделяем первую команду rel 5 1,
|
||||||
sCmd.readStr(tmp); //выполняем
|
sCmd.readStr(tmp); //выполняем
|
||||||
Serial.println("[ORDER] => " + order_loop);
|
Serial.println("[ORDER] => " + order_loop);
|
||||||
@@ -597,8 +599,6 @@ void loopCmd() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================================================================================
|
|
||||||
//=======================================================================================================================================
|
|
||||||
void txtExecution(String file) {
|
void txtExecution(String file) {
|
||||||
String command_all = readFile(file, 2048) + "\r\n";
|
String command_all = readFile(file, 2048) + "\r\n";
|
||||||
|
|
||||||
|
|||||||
@@ -1,171 +1,78 @@
|
|||||||
#include "Global.h"
|
#include "HttpServer.h"
|
||||||
|
|
||||||
#include "Utils/FileUtils.h"
|
#include "Utils/FileUtils.h"
|
||||||
|
#include "Utils/WebUtils.h"
|
||||||
|
|
||||||
void Web_server_init() {
|
namespace HttpServer {
|
||||||
/*********************************************************************************
|
|
||||||
***************************************OTA****************************************
|
|
||||||
*********************************************************************************/
|
|
||||||
#ifdef OTA_UPDATES_ENABLED
|
|
||||||
ArduinoOTA.onStart([]() {
|
|
||||||
events.send("Update Start", "ota");
|
|
||||||
});
|
|
||||||
ArduinoOTA.onEnd([]() {
|
|
||||||
events.send("Update End", "ota");
|
|
||||||
});
|
|
||||||
ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
|
|
||||||
char p[32];
|
|
||||||
sprintf(p, "Progress: %u%%\n", (progress / (total / 100)));
|
|
||||||
events.send(p, "ota");
|
|
||||||
});
|
|
||||||
ArduinoOTA.onError([](ota_error_t error) {
|
|
||||||
if (error == OTA_AUTH_ERROR)
|
|
||||||
events.send("Auth Failed", "ota");
|
|
||||||
else if (error == OTA_BEGIN_ERROR)
|
|
||||||
events.send("Begin Failed", "ota");
|
|
||||||
else if (error == OTA_CONNECT_ERROR)
|
|
||||||
events.send("Connect Failed", "ota");
|
|
||||||
else if (error == OTA_RECEIVE_ERROR)
|
|
||||||
events.send("Recieve Failed", "ota");
|
|
||||||
else if (error == OTA_END_ERROR)
|
|
||||||
events.send("End Failed", "ota");
|
|
||||||
});
|
|
||||||
ArduinoOTA.setHostname(hostName);
|
|
||||||
ArduinoOTA.begin();
|
|
||||||
#endif
|
|
||||||
/*********************************************************************************
|
|
||||||
**************************************MDNS****************************************
|
|
||||||
*********************************************************************************/
|
|
||||||
#ifdef MDNS_ENABLED
|
|
||||||
MDNS.addService("http", "tcp", 80);
|
|
||||||
#endif
|
|
||||||
//LittleFS.begin();
|
|
||||||
/*********************************************************************************
|
|
||||||
**************************************WS******************************************
|
|
||||||
*********************************************************************************/
|
|
||||||
#ifdef WS_enable
|
|
||||||
ws.onEvent(onWsEvent);
|
|
||||||
server.addHandler(&ws);
|
|
||||||
|
|
||||||
events.onConnect([](AsyncEventSourceClient *client) {
|
static const char *MODULE = "Http";
|
||||||
//!!!client->send("hello!", NULL, millis(), 1000);
|
/* Forward declaration */
|
||||||
});
|
void initOta();
|
||||||
|
void initMDNS();
|
||||||
|
void initWS();
|
||||||
|
|
||||||
server.addHandler(&events);
|
void init() {
|
||||||
#endif
|
String login = jsonReadStr(configSetupJson, "weblogin");
|
||||||
/*********************************************************************************
|
String pass = jsonReadStr(configSetupJson, "webpass");
|
||||||
**************************************WEB****************************************
|
|
||||||
*********************************************************************************/
|
|
||||||
#ifdef ESP32
|
#ifdef ESP32
|
||||||
|
server.addHandler(new SPIFFSEditor(LittleFS, login, pass);
|
||||||
server.addHandler(new SPIFFSEditor(LittleFS, jsonReadStr(configSetupJson, "weblogin").c_str(), jsonReadStr(configSetupJson, "webpass").c_str()));
|
|
||||||
#elif defined(ESP8266)
|
#elif defined(ESP8266)
|
||||||
server.addHandler(new SPIFFSEditor(jsonReadStr(configSetupJson, "weblogin").c_str(), jsonReadStr(configSetupJson, "webpass").c_str()));
|
server.addHandler(new SPIFFSEditor(login, pass));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* server.on("/heap", HTTP_GET, [](AsyncWebServerRequest * request) {
|
server.serveStatic("/css/", LittleFS, "/css/").setCacheControl("max-age=600");
|
||||||
request->send(200, "text/plain", String(ESP.getFreeHeap()));
|
server.serveStatic("/js/", LittleFS, "/js/").setCacheControl("max-age=600");
|
||||||
});*/
|
server.serveStatic("/favicon.ico", LittleFS, "/favicon.ico").setCacheControl("max-age=600");
|
||||||
|
server.serveStatic("/icon.jpeg", LittleFS, "/icon.jpeg").setCacheControl("max-age=600");
|
||||||
|
|
||||||
server.serveStatic("/css/", LittleFS, "/css/").setCacheControl("max-age=31536000");
|
server.serveStatic("/", LittleFS, "/").setDefaultFile("index.htm").setAuthentication(login.c_str(), pass.c_str());
|
||||||
server.serveStatic("/js/", LittleFS, "/js/").setCacheControl("max-age=31536000");
|
|
||||||
server.serveStatic("/favicon.ico", LittleFS, "/favicon.ico").setCacheControl("max-age=31536000");
|
|
||||||
server.serveStatic("/icon.jpeg", LittleFS, "/icon.jpeg").setCacheControl("max-age=31536000");
|
|
||||||
|
|
||||||
server.serveStatic("/", LittleFS, "/").setDefaultFile("index.htm").setAuthentication(jsonReadStr(configSetupJson, "weblogin").c_str(), jsonReadStr(configSetupJson, "webpass").c_str());
|
|
||||||
|
|
||||||
server.onNotFound([](AsyncWebServerRequest *request) {
|
server.onNotFound([](AsyncWebServerRequest *request) {
|
||||||
Serial.printf("NOT_FOUND: ");
|
pm.error("not found:\n" + getRequestInfo(request));
|
||||||
if (request->method() == HTTP_GET)
|
|
||||||
Serial.printf("GET");
|
|
||||||
else if (request->method() == HTTP_POST)
|
|
||||||
Serial.printf("POST");
|
|
||||||
else if (request->method() == HTTP_DELETE)
|
|
||||||
Serial.printf("DELETE");
|
|
||||||
else if (request->method() == HTTP_PUT)
|
|
||||||
Serial.printf("PUT");
|
|
||||||
else if (request->method() == HTTP_PATCH)
|
|
||||||
Serial.printf("PATCH");
|
|
||||||
else if (request->method() == HTTP_HEAD)
|
|
||||||
Serial.printf("HEAD");
|
|
||||||
else if (request->method() == HTTP_OPTIONS)
|
|
||||||
Serial.printf("OPTIONS");
|
|
||||||
else
|
|
||||||
Serial.printf("UNKNOWN");
|
|
||||||
Serial.printf(" http://%s%s\n", request->host().c_str(), request->url().c_str());
|
|
||||||
|
|
||||||
if (request->contentLength()) {
|
|
||||||
Serial.printf("_CONTENT_TYPE: %s\n", request->contentType().c_str());
|
|
||||||
Serial.printf("_CONTENT_LENGTH: %u\n", request->contentLength());
|
|
||||||
}
|
|
||||||
|
|
||||||
int headers = request->headers();
|
|
||||||
int i;
|
|
||||||
for (i = 0; i < headers; i++) {
|
|
||||||
AsyncWebHeader *h = request->getHeader(i);
|
|
||||||
Serial.printf("_HEADER[%s]: %s\n", h->name().c_str(), h->value().c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
int params = request->params();
|
|
||||||
for (i = 0; i < params; i++) {
|
|
||||||
AsyncWebParameter *p = request->getParam(i);
|
|
||||||
if (p->isFile()) {
|
|
||||||
Serial.printf("_FILE[%s]: %s, size: %u\n", p->name().c_str(), p->value().c_str(), p->size());
|
|
||||||
} else if (p->isPost()) {
|
|
||||||
Serial.printf("_POST[%s]: %s\n", p->name().c_str(), p->value().c_str());
|
|
||||||
} else {
|
|
||||||
Serial.printf("_GET[%s]: %s\n", p->name().c_str(), p->value().c_str());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
request->send(404);
|
request->send(404);
|
||||||
});
|
});
|
||||||
|
|
||||||
server.onFileUpload([](AsyncWebServerRequest *request, const String &filename, size_t index, uint8_t *data, size_t len, bool final) {
|
server.onFileUpload([](AsyncWebServerRequest *request, const String &filename, size_t index, uint8_t *data, size_t len, bool final) {
|
||||||
if (!index)
|
// TODO
|
||||||
Serial.printf("UploadStart: %s\n", filename.c_str());
|
if (!index) {
|
||||||
Serial.printf("%s", (const char *)data);
|
pm.info("start upload " + filename);
|
||||||
if (final)
|
}
|
||||||
Serial.printf("UploadEnd: %s (%u)\n", filename.c_str(), index + len);
|
if (final) {
|
||||||
|
pm.info("finish upload: " + prettyBytes(index + len));
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
server.onRequestBody([](AsyncWebServerRequest *request, uint8_t *data, size_t len, size_t index, size_t total) {
|
// динамические данные
|
||||||
if (!index)
|
|
||||||
Serial.printf("BodyStart: %u\n", total);
|
|
||||||
Serial.printf("%s", (const char *)data);
|
|
||||||
if (index + len == total)
|
|
||||||
Serial.printf("BodyEnd: %u\n", total);
|
|
||||||
});
|
|
||||||
|
|
||||||
server.begin();
|
|
||||||
|
|
||||||
// --------------------Выдаем данные configJson //config.live.json - динамические данные
|
|
||||||
server.on("/config.live.json", HTTP_GET, [](AsyncWebServerRequest *request) {
|
server.on("/config.live.json", HTTP_GET, [](AsyncWebServerRequest *request) {
|
||||||
request->send(200, "application/json", configLiveJson);
|
request->send(200, "application/json", configLiveJson);
|
||||||
});
|
});
|
||||||
// --------------------Выдаем данные optionJson //config.option.json - данные не являющиеся событиями
|
|
||||||
|
// данные не являющиеся событиями
|
||||||
server.on("/config.option.json", HTTP_GET, [](AsyncWebServerRequest *request) {
|
server.on("/config.option.json", HTTP_GET, [](AsyncWebServerRequest *request) {
|
||||||
request->send(200, "application/json", configOptionJson);
|
request->send(200, "application/json", configOptionJson);
|
||||||
});
|
});
|
||||||
// -------------------Выдаем данные configSetup //config.setup.json - для хранения постоянных данных
|
|
||||||
|
// для хранения постоянных данных
|
||||||
server.on("/config.setup.json", HTTP_GET, [](AsyncWebServerRequest *request) {
|
server.on("/config.setup.json", HTTP_GET, [](AsyncWebServerRequest *request) {
|
||||||
request->send(200, "application/json", configSetupJson);
|
request->send(200, "application/json", configSetupJson);
|
||||||
});
|
});
|
||||||
|
|
||||||
// ------------------Выполнение команды из запроса
|
|
||||||
//http://192.168.88.45/cmd?command=rel%201%201
|
|
||||||
server.on("/cmd", HTTP_GET, [](AsyncWebServerRequest *request) {
|
server.on("/cmd", HTTP_GET, [](AsyncWebServerRequest *request) {
|
||||||
String com = request->getParam("command")->value();
|
String cmdStr = request->getParam("command")->value();
|
||||||
Serial.println(com);
|
pm.info("command: " + cmdStr);
|
||||||
order_loop += com + ",";
|
addCommandLoop(cmdStr);
|
||||||
request->send(200, "text/text", "OK"); // отправляем ответ о выполнении
|
request->send(200, "text/text", "OK");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
server.begin();
|
||||||
|
|
||||||
|
initOta();
|
||||||
|
initMDNS();
|
||||||
|
initWS();
|
||||||
}
|
}
|
||||||
/*********************************************************************************************************************************
|
|
||||||
*********************************************************WS**********************************************************************
|
|
||||||
********************************************************************************************************************************/
|
|
||||||
#ifdef WS_enable
|
|
||||||
void onWsEvent(AsyncWebSocket *server, AsyncWebSocketClient *client, AwsEventType type, void *arg, uint8_t *data, size_t len) {
|
void onWsEvent(AsyncWebSocket *server, AsyncWebSocketClient *client, AwsEventType type, void *arg, uint8_t *data, size_t len) {
|
||||||
|
#ifdef WS_enable
|
||||||
if (type == WS_EVT_CONNECT) {
|
if (type == WS_EVT_CONNECT) {
|
||||||
Serial.printf("ws[%s][%u] connect\n", server->url(), client->id());
|
Serial.printf("ws[%s][%u] connect\n", server->url(), client->id());
|
||||||
client->printf(json.c_str(), client->id());
|
client->printf(json.c_str(), client->id());
|
||||||
@@ -235,5 +142,59 @@ void onWsEvent(AsyncWebSocket *server, AsyncWebSocketClient *client, AwsEventTyp
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
void initMDNS() {
|
||||||
|
#ifdef MDNS_ENABLED
|
||||||
|
MDNS.addService("http", "tcp", 80);
|
||||||
|
// TODO Add Adduino OTA
|
||||||
|
#endif
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
|
void initOta() {
|
||||||
|
#ifdef OTA_UPDATES_ENABLED
|
||||||
|
ArduinoOTA.onStart([]() {
|
||||||
|
events.send("Update Start", "ota");
|
||||||
|
});
|
||||||
|
ArduinoOTA.onEnd([]() {
|
||||||
|
events.send("Update End", "ota");
|
||||||
|
});
|
||||||
|
ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
|
||||||
|
char p[32];
|
||||||
|
sprintf(p, "Progress: %u%%\n", (progress / (total / 100)));
|
||||||
|
events.send(p, "ota");
|
||||||
|
});
|
||||||
|
ArduinoOTA.onError([](ota_error_t error) {
|
||||||
|
if (error == OTA_AUTH_ERROR)
|
||||||
|
events.send("Auth Failed", "ota");
|
||||||
|
else if (error == OTA_BEGIN_ERROR)
|
||||||
|
events.send("Begin Failed", "ota");
|
||||||
|
else if (error == OTA_CONNECT_ERROR)
|
||||||
|
events.send("Connect Failed", "ota");
|
||||||
|
else if (error == OTA_RECEIVE_ERROR)
|
||||||
|
events.send("Recieve Failed", "ota");
|
||||||
|
else if (error == OTA_END_ERROR)
|
||||||
|
events.send("End Failed", "ota");
|
||||||
|
});
|
||||||
|
ArduinoOTA.setHostname(hostName);
|
||||||
|
ArduinoOTA.begin();
|
||||||
|
#endif
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
|
void initWS() {
|
||||||
|
#ifdef WS_enable
|
||||||
|
ws.onEvent(onWsEvent);
|
||||||
|
server.addHandler(&ws);
|
||||||
|
events.onConnect([](AsyncEventSourceClient *client) {
|
||||||
|
//!!!client->send("hello!", NULL, millis(), 1000);
|
||||||
|
});
|
||||||
|
server.addHandler(&events);
|
||||||
|
#endif
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace HttpServer
|
||||||
@@ -99,7 +99,7 @@ void levelPr() {
|
|||||||
jsonWriteStr(configOptionJson, "echo", echo);
|
jsonWriteStr(configOptionJson, "echo", echo);
|
||||||
pinMode(trig.toInt(), OUTPUT);
|
pinMode(trig.toInt(), OUTPUT);
|
||||||
pinMode(echo.toInt(), INPUT);
|
pinMode(echo.toInt(), INPUT);
|
||||||
choose_widget_and_create(widget_name, page_name, page_number, type, value_name);
|
createWidgetByType(widget_name, page_name, page_number, type, value_name);
|
||||||
sensors_reading_map[0] = 1;
|
sensors_reading_map[0] = 1;
|
||||||
}
|
}
|
||||||
//ultrasonicCm cm 14 12 Дистанция,#см Датчики fill-gauge 1
|
//ultrasonicCm cm 14 12 Дистанция,#см Датчики fill-gauge 1
|
||||||
@@ -118,7 +118,7 @@ void ultrasonicCm() {
|
|||||||
jsonWriteStr(configOptionJson, "echo", echo);
|
jsonWriteStr(configOptionJson, "echo", echo);
|
||||||
pinMode(trig.toInt(), OUTPUT);
|
pinMode(trig.toInt(), OUTPUT);
|
||||||
pinMode(echo.toInt(), INPUT);
|
pinMode(echo.toInt(), INPUT);
|
||||||
choose_widget_and_create(widget_name, page_name, page_number, type, value_name);
|
createWidgetByType(widget_name, page_name, page_number, type, value_name);
|
||||||
sensors_reading_map[0] = 1;
|
sensors_reading_map[0] = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -181,7 +181,7 @@ void analog() {
|
|||||||
jsonWriteStr(configOptionJson, value_name + "_end", analog_end);
|
jsonWriteStr(configOptionJson, value_name + "_end", analog_end);
|
||||||
jsonWriteStr(configOptionJson, value_name + "_st_out", analog_start_out);
|
jsonWriteStr(configOptionJson, value_name + "_st_out", analog_start_out);
|
||||||
jsonWriteStr(configOptionJson, value_name + "_end_out", analog_end_out);
|
jsonWriteStr(configOptionJson, value_name + "_end_out", analog_end_out);
|
||||||
choose_widget_and_create(widget_name, page_name, page_number, type, value_name);
|
createWidgetByType(widget_name, page_name, page_number, type, value_name);
|
||||||
if (enter_to_analog_counter == 1) {
|
if (enter_to_analog_counter == 1) {
|
||||||
sensors_reading_map[1] = 1;
|
sensors_reading_map[1] = 1;
|
||||||
}
|
}
|
||||||
@@ -243,7 +243,7 @@ void dallas() {
|
|||||||
sensors.setOneWire(oneWire);
|
sensors.setOneWire(oneWire);
|
||||||
sensors.begin();
|
sensors.begin();
|
||||||
sensors.setResolution(12);
|
sensors.setResolution(12);
|
||||||
choose_widget_and_create(widget_name, page_name, page_number, type, "dallas");
|
createWidgetByType(widget_name, page_name, page_number, type, "dallas");
|
||||||
sensors_reading_map[3] = 1;
|
sensors_reading_map[3] = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -276,7 +276,7 @@ void dhtT() {
|
|||||||
if (sensor_type == "dht22") {
|
if (sensor_type == "dht22") {
|
||||||
dht.setup(pin.toInt(), DHTesp::DHT22);
|
dht.setup(pin.toInt(), DHTesp::DHT22);
|
||||||
}
|
}
|
||||||
choose_widget_and_create(widget_name, page_name, page_number, type, value_name);
|
createWidgetByType(widget_name, page_name, page_number, type, value_name);
|
||||||
sensors_reading_map[4] = 1;
|
sensors_reading_map[4] = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -314,7 +314,7 @@ void dhtH() {
|
|||||||
if (sensor_type == "dht22") {
|
if (sensor_type == "dht22") {
|
||||||
dht.setup(pin.toInt(), DHTesp::DHT22);
|
dht.setup(pin.toInt(), DHTesp::DHT22);
|
||||||
}
|
}
|
||||||
choose_widget_and_create(widget_name, page_name, page_number, type, value_name);
|
createWidgetByType(widget_name, page_name, page_number, type, value_name);
|
||||||
sensors_reading_map[5] = 1;
|
sensors_reading_map[5] = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -341,7 +341,7 @@ void dhtP() {
|
|||||||
String widget_name = sCmd.next();
|
String widget_name = sCmd.next();
|
||||||
String page_name = sCmd.next();
|
String page_name = sCmd.next();
|
||||||
String page_number = sCmd.next();
|
String page_number = sCmd.next();
|
||||||
choose_widget_and_create(widget_name, page_name, page_number, "any-data", "dhtPerception");
|
createWidgetByType(widget_name, page_name, page_number, "any-data", "dhtPerception");
|
||||||
sensors_reading_map[6] = 1;
|
sensors_reading_map[6] = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -399,7 +399,7 @@ void dhtC() {
|
|||||||
String widget_name = sCmd.next();
|
String widget_name = sCmd.next();
|
||||||
String page_name = sCmd.next();
|
String page_name = sCmd.next();
|
||||||
String page_number = sCmd.next();
|
String page_number = sCmd.next();
|
||||||
choose_widget_and_create(widget_name, page_name, page_number, "any-data", "dhtComfort");
|
createWidgetByType(widget_name, page_name, page_number, "any-data", "dhtComfort");
|
||||||
sensors_reading_map[7] = 1;
|
sensors_reading_map[7] = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -459,7 +459,7 @@ void dhtD() {
|
|||||||
String widget_name = sCmd.next();
|
String widget_name = sCmd.next();
|
||||||
String page_name = sCmd.next();
|
String page_name = sCmd.next();
|
||||||
String page_number = sCmd.next();
|
String page_number = sCmd.next();
|
||||||
choose_widget_and_create(widget_name, page_name, page_number, "any-data", "dhtDewpoint");
|
createWidgetByType(widget_name, page_name, page_number, "any-data", "dhtDewpoint");
|
||||||
sensors_reading_map[8] = 1;
|
sensors_reading_map[8] = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -489,7 +489,7 @@ void bmp280T() {
|
|||||||
String type = sCmd.next();
|
String type = sCmd.next();
|
||||||
String page_number = sCmd.next();
|
String page_number = sCmd.next();
|
||||||
bmp280T_value_name = value_name;
|
bmp280T_value_name = value_name;
|
||||||
choose_widget_and_create(widget_name, page_name, page_number, type, value_name);
|
createWidgetByType(widget_name, page_name, page_number, type, value_name);
|
||||||
bmp.begin(hexStringToUint8(address));
|
bmp.begin(hexStringToUint8(address));
|
||||||
bmp.setSampling(Adafruit_BMP280::MODE_NORMAL, /* Operating Mode. */
|
bmp.setSampling(Adafruit_BMP280::MODE_NORMAL, /* Operating Mode. */
|
||||||
Adafruit_BMP280::SAMPLING_X2, /* Temp. oversampling */
|
Adafruit_BMP280::SAMPLING_X2, /* Temp. oversampling */
|
||||||
@@ -520,7 +520,7 @@ void bmp280P() {
|
|||||||
String type = sCmd.next();
|
String type = sCmd.next();
|
||||||
String page_number = sCmd.next();
|
String page_number = sCmd.next();
|
||||||
bmp280P_value_name = value_name;
|
bmp280P_value_name = value_name;
|
||||||
choose_widget_and_create(widget_name, page_name, page_number, type, value_name);
|
createWidgetByType(widget_name, page_name, page_number, type, value_name);
|
||||||
bmp.begin(hexStringToUint8(address));
|
bmp.begin(hexStringToUint8(address));
|
||||||
bmp.setSampling(Adafruit_BMP280::MODE_NORMAL, /* Operating Mode. */
|
bmp.setSampling(Adafruit_BMP280::MODE_NORMAL, /* Operating Mode. */
|
||||||
Adafruit_BMP280::SAMPLING_X2, /* Temp. oversampling */
|
Adafruit_BMP280::SAMPLING_X2, /* Temp. oversampling */
|
||||||
@@ -554,7 +554,7 @@ void bme280T() {
|
|||||||
String type = sCmd.next();
|
String type = sCmd.next();
|
||||||
String page_number = sCmd.next();
|
String page_number = sCmd.next();
|
||||||
bme280T_value_name = value_name;
|
bme280T_value_name = value_name;
|
||||||
choose_widget_and_create(widget_name, page_name, page_number, type, value_name);
|
createWidgetByType(widget_name, page_name, page_number, type, value_name);
|
||||||
bme.begin(hexStringToUint8(address));
|
bme.begin(hexStringToUint8(address));
|
||||||
sensors_reading_map[11] = 1;
|
sensors_reading_map[11] = 1;
|
||||||
}
|
}
|
||||||
@@ -577,7 +577,7 @@ void bme280P() {
|
|||||||
String type = sCmd.next();
|
String type = sCmd.next();
|
||||||
String page_number = sCmd.next();
|
String page_number = sCmd.next();
|
||||||
bme280P_value_name = value_name;
|
bme280P_value_name = value_name;
|
||||||
choose_widget_and_create(widget_name, page_name, page_number, type, value_name);
|
createWidgetByType(widget_name, page_name, page_number, type, value_name);
|
||||||
bme.begin(hexStringToUint8(address));
|
bme.begin(hexStringToUint8(address));
|
||||||
sensors_reading_map[12] = 1;
|
sensors_reading_map[12] = 1;
|
||||||
}
|
}
|
||||||
@@ -601,7 +601,7 @@ void bme280H() {
|
|||||||
String type = sCmd.next();
|
String type = sCmd.next();
|
||||||
String page_number = sCmd.next();
|
String page_number = sCmd.next();
|
||||||
bme280H_value_name = value_name;
|
bme280H_value_name = value_name;
|
||||||
choose_widget_and_create(widget_name, page_name, page_number, type, value_name);
|
createWidgetByType(widget_name, page_name, page_number, type, value_name);
|
||||||
bme.begin(hexStringToUint8(address));
|
bme.begin(hexStringToUint8(address));
|
||||||
sensors_reading_map[13] = 1;
|
sensors_reading_map[13] = 1;
|
||||||
}
|
}
|
||||||
@@ -624,7 +624,7 @@ void bme280A() {
|
|||||||
String type = sCmd.next();
|
String type = sCmd.next();
|
||||||
String page_number = sCmd.next();
|
String page_number = sCmd.next();
|
||||||
bme280A_value_name = value_name;
|
bme280A_value_name = value_name;
|
||||||
choose_widget_and_create(widget_name, page_name, page_number, type, value_name);
|
createWidgetByType(widget_name, page_name, page_number, type, value_name);
|
||||||
bme.begin(hexStringToUint8(address));
|
bme.begin(hexStringToUint8(address));
|
||||||
sensors_reading_map[14] = 1;
|
sensors_reading_map[14] = 1;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,12 +7,11 @@ static const char* item_names[NUM_ITEMS] = {"relay", "pwm",
|
|||||||
"motion", "stepper",
|
"motion", "stepper",
|
||||||
"servo", "firmware"};
|
"servo", "firmware"};
|
||||||
|
|
||||||
static const char* config_file_fmt = "configs/%d-%s.%s.txt";
|
static const char* config_file_fmt = "/conf/%03d%s.txt";
|
||||||
|
|
||||||
const String getPresetFile(uint8_t preset, ConfigType_t type) {
|
const String getPresetFile(uint8_t preset, ConfigType_t type) {
|
||||||
Item_t item = getPresetItem(preset);
|
|
||||||
char buf[64];
|
char buf[64];
|
||||||
sprintf(buf, config_file_fmt, preset, getItemName(item).c_str(), type == CT_MACRO ? "c" : "s");
|
sprintf(buf, config_file_fmt, preset, type == CT_MACRO ? "c" : "s");
|
||||||
return String(buf);
|
return String(buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
16
src/Web.cpp
16
src/Web.cpp
@@ -11,7 +11,7 @@ static const uint8_t MAX_PRESET = 21;
|
|||||||
bool parseRequestForPreset(AsyncWebServerRequest* request, uint8_t& preset) {
|
bool parseRequestForPreset(AsyncWebServerRequest* request, uint8_t& preset) {
|
||||||
if (request->hasArg("preset")) {
|
if (request->hasArg("preset")) {
|
||||||
preset = request->getParam("preset")->value().toInt();
|
preset = request->getParam("preset")->value().toInt();
|
||||||
return preset >= MIN_PRESET && preset <= MAX_PRESET;
|
return (preset >= MIN_PRESET && preset <= MAX_PRESET) || preset == 100;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -22,9 +22,9 @@ void web_init() {
|
|||||||
server.on("/set", HTTP_GET, [](AsyncWebServerRequest* request) {
|
server.on("/set", HTTP_GET, [](AsyncWebServerRequest* request) {
|
||||||
uint8_t preset;
|
uint8_t preset;
|
||||||
if (parseRequestForPreset(request, preset)) {
|
if (parseRequestForPreset(request, preset)) {
|
||||||
|
pm.info("activate # " + String(preset, DEC) + "(" + getItemName(getPresetItem(preset)) + ")");
|
||||||
String srcMacro = preset == 21 ? "configs/100с.txt" : getPresetFile(preset, CT_MACRO);
|
String srcMacro = preset == 21 ? "configs/100с.txt" : getPresetFile(preset, CT_MACRO);
|
||||||
String srcScenario = preset == 21 ? "configs/100s.txt" : getPresetFile(preset, CT_SCENARIO);
|
String srcScenario = preset == 21 ? "configs/100s.txt" : getPresetFile(preset, CT_SCENARIO);
|
||||||
pm.info("activate " + getItemName(getPresetItem(preset)));
|
|
||||||
copyFile(srcMacro, "100с.txt");
|
copyFile(srcMacro, "100с.txt");
|
||||||
copyFile(srcScenario, "100s.txt");
|
copyFile(srcScenario, "100s.txt");
|
||||||
|
|
||||||
@@ -226,13 +226,17 @@ void web_init() {
|
|||||||
//==============================upgrade settings=============================================
|
//==============================upgrade settings=============================================
|
||||||
server.on("/check", HTTP_GET, [](AsyncWebServerRequest* request) {
|
server.on("/check", HTTP_GET, [](AsyncWebServerRequest* request) {
|
||||||
upgrade_url = true;
|
upgrade_url = true;
|
||||||
Serial.print("[I] Last firmware version: ");
|
pm.info("firmware version: " + last_version);
|
||||||
Serial.println(last_version);
|
|
||||||
String tmp = "{}";
|
String tmp = "{}";
|
||||||
int case_of_update;
|
int case_of_update;
|
||||||
|
|
||||||
if (WiFi.status() != WL_CONNECTED) last_version = "nowifi";
|
if (WiFi.status() != WL_CONNECTED) {
|
||||||
if (!FLASH_4MB) last_version = "less";
|
last_version = "nowifi";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!FLASH_4MB) {
|
||||||
|
last_version = "less";
|
||||||
|
}
|
||||||
|
|
||||||
if (last_version == FIRMWARE_VERSION) case_of_update = 1;
|
if (last_version == FIRMWARE_VERSION) case_of_update = 1;
|
||||||
if (last_version != FIRMWARE_VERSION) case_of_update = 2;
|
if (last_version != FIRMWARE_VERSION) case_of_update = 2;
|
||||||
|
|||||||
127
src/Widgets.cpp
127
src/Widgets.cpp
@@ -1,90 +1,85 @@
|
|||||||
#include "Global.h"
|
#include "Global.h"
|
||||||
|
|
||||||
//======================================================================================================================
|
const String getWidgetFile(const String& name);
|
||||||
//===============================================Создание виджетов=======================================================
|
|
||||||
void createWidget (String widget_name, String page_name, String page_number, String file, String topic) {
|
|
||||||
|
|
||||||
String widget;
|
bool loadWidget(const String filename, String& buf) {
|
||||||
widget = readFile(file, 1024);
|
buf = readFile(filename, 1024);
|
||||||
|
return !(buf == "Failed" || buf == "Large");
|
||||||
if (widget == "Failed") return;
|
|
||||||
if (widget == "Large") return;
|
|
||||||
|
|
||||||
widget_name.replace("#", " ");
|
|
||||||
page_name.replace("#", " ");
|
|
||||||
|
|
||||||
jsonWriteStr(widget, "page", page_name);
|
|
||||||
jsonWriteStr(widget, "order", page_number);
|
|
||||||
jsonWriteStr(widget, "descr", widget_name);
|
|
||||||
jsonWriteStr(widget, "topic", prex + "/" + topic);
|
|
||||||
|
|
||||||
#ifdef LAYOUT_IN_RAM
|
|
||||||
all_widgets += widget + "\r\n";
|
|
||||||
#else
|
|
||||||
addFile("layout.txt", widget);
|
|
||||||
#endif
|
|
||||||
widget = "";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void createWidgetParam (String widget_name, String page_name, String page_number, String file, String topic, String name1, String param1, String name2, String param2, String name3, String param3) {
|
void createWidget(String widget, String page, String pageNumber, String filename, String topic) {
|
||||||
|
String buf;
|
||||||
|
if (!loadWidget(filename, buf)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
String widget;
|
widget.replace("#", " ");
|
||||||
widget = readFile(file, 1024);
|
page.replace("#", " ");
|
||||||
|
|
||||||
if (widget == "Failed") return;
|
jsonWriteStr(buf, "page", page);
|
||||||
if (widget == "Large") return;
|
jsonWriteStr(buf, "order", pageNumber);
|
||||||
|
jsonWriteStr(buf, "descr", widget);
|
||||||
widget_name.replace("#", " ");
|
jsonWriteStr(buf, "topic", prex + "/" + topic);
|
||||||
page_name.replace("#", " ");
|
|
||||||
|
|
||||||
jsonWriteStr(widget, "page", page_name);
|
|
||||||
jsonWriteStr(widget, "order", page_number);
|
|
||||||
jsonWriteStr(widget, "descr", widget_name);
|
|
||||||
jsonWriteStr(widget, "topic", prex + "/" + topic);
|
|
||||||
|
|
||||||
if (name1 != "") jsonWriteStr(widget, name1, param1);
|
|
||||||
if (name2 != "") jsonWriteStr(widget, name2, param2);
|
|
||||||
if (name3 != "") jsonWriteStr(widget, name3, param3);
|
|
||||||
|
|
||||||
#ifdef LAYOUT_IN_RAM
|
#ifdef LAYOUT_IN_RAM
|
||||||
all_widgets += widget + "\r\n";
|
all_widgets += widget + "\r\n";
|
||||||
#else
|
#else
|
||||||
addFile("layout.txt", widget);
|
addFile("layout.txt", buf);
|
||||||
#endif
|
#endif
|
||||||
widget = "";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void createChart (String widget_name, String page_name, String page_number, String file, String topic, String maxCount) {
|
void createWidgetParam(String widget, String page, String pageNumber, String filename, String topic, String name1, String param1, String name2, String param2, String name3, String param3) {
|
||||||
|
String buf;
|
||||||
|
if (!loadWidget(filename, buf)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
String widget;
|
widget.replace("#", " ");
|
||||||
widget = readFile(file, 1024);
|
page.replace("#", " ");
|
||||||
|
|
||||||
if (widget == "Failed") return;
|
jsonWriteStr(buf, "page", page);
|
||||||
if (widget == "Large") return;
|
jsonWriteStr(buf, "order", pageNumber);
|
||||||
|
jsonWriteStr(buf, "descr", widget);
|
||||||
|
jsonWriteStr(buf, "topic", prex + "/" + topic);
|
||||||
|
|
||||||
widget_name.replace("#", " ");
|
if (name1) jsonWriteStr(buf, name1, param1);
|
||||||
page_name.replace("#", " ");
|
if (name2) jsonWriteStr(buf, name2, param2);
|
||||||
|
if (name3) jsonWriteStr(buf, name3, param3);
|
||||||
jsonWriteStr(widget, "page", page_name);
|
|
||||||
jsonWriteStr(widget, "order", page_number);
|
|
||||||
//jsonWriteStr(widget, "descr", widget_name);
|
|
||||||
jsonWriteStr(widget, "series", widget_name);
|
|
||||||
jsonWriteStr(widget, "maxCount", maxCount);
|
|
||||||
jsonWriteStr(widget, "topic", prex + "/" + topic);
|
|
||||||
|
|
||||||
#ifdef LAYOUT_IN_RAM
|
#ifdef LAYOUT_IN_RAM
|
||||||
all_widgets += widget + "\r\n";
|
all_widgets += widget + "\r\n";
|
||||||
#else
|
#else
|
||||||
addFile("layout.txt", widget);
|
addFile("layout.txt", buf);
|
||||||
#endif
|
#endif
|
||||||
widget = "";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void choose_widget_and_create(String widget_name, String page_name, String page_number, String type, String topik) {
|
void createChart(String widget, String page, String pageNumber, String filename, String topic, String maxCount) {
|
||||||
|
String buf;
|
||||||
|
if (!loadWidget(filename, buf)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (type == "any-data") createWidget (widget_name, page_name, page_number, "widgets/widget.anyData.json", topik);
|
widget.replace("#", " ");
|
||||||
if (type == "progress-line") createWidget (widget_name, page_name, page_number, "widgets/widget.progLine.json", topik);
|
page.replace("#", " ");
|
||||||
if (type == "progress-round") createWidget (widget_name, page_name, page_number, "widgets/widget.progRound.json", topik);
|
|
||||||
if (type == "fill-gauge") createWidget (widget_name, page_name, page_number, "widgets/widget.fillGauge.json", topik);
|
|
||||||
|
|
||||||
}
|
jsonWriteStr(buf, "page", page);
|
||||||
|
jsonWriteStr(buf, "order", pageNumber);
|
||||||
|
//jsonWriteStr(widget, "descr", widget_name);
|
||||||
|
jsonWriteStr(buf, "series", widget);
|
||||||
|
jsonWriteStr(buf, "maxCount", maxCount);
|
||||||
|
jsonWriteStr(buf, "topic", prex + "/" + topic);
|
||||||
|
|
||||||
|
#ifdef LAYOUT_IN_RAM
|
||||||
|
all_widgets += widget + "\r\n";
|
||||||
|
#else
|
||||||
|
addFile("layout.txt", buf);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void createWidgetByType(String widget, String page, String pageNumber, String type, String topic) {
|
||||||
|
createWidget(widget, page, pageNumber, getWidgetFile(type), topic);
|
||||||
|
}
|
||||||
|
|
||||||
|
const String getWidgetFile(const String& name) {
|
||||||
|
return "widgets/" + name + ".json";
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
#include "Global.h"
|
#include "Global.h"
|
||||||
|
|
||||||
|
#include "HttpServer.h"
|
||||||
|
|
||||||
void not_async_actions();
|
void not_async_actions();
|
||||||
|
|
||||||
static const char* MODULE = "Main";
|
static const char* MODULE = "Main";
|
||||||
@@ -44,8 +46,8 @@ void setup() {
|
|||||||
pm.info("Updater");
|
pm.info("Updater");
|
||||||
init_updater();
|
init_updater();
|
||||||
|
|
||||||
pm.info("WebServer");
|
pm.info("HttpServer");
|
||||||
Web_server_init();
|
HttpServer::init();
|
||||||
|
|
||||||
pm.info("WebAdmin");
|
pm.info("WebAdmin");
|
||||||
web_init();
|
web_init();
|
||||||
|
|||||||
Reference in New Issue
Block a user