парсинг данных страниц в вебе и отправка виджетов в приложение

This commit is contained in:
Dmitry Borisenko
2022-02-13 00:40:15 +01:00
parent 09bbd96a63
commit ed78401762
8 changed files with 103 additions and 66 deletions

View File

@@ -52,6 +52,10 @@ void setup() {
//инициализация задач переодического выполнения
periodicTasksInit();
// test
Serial.println("-------test start--------");
Serial.println("--------test end---------");
}
void loop() {

View File

@@ -248,73 +248,43 @@ boolean publishInfo(const String& topic, const String& data) {
return mqtt.publish(path.c_str(), data.c_str(), false);
}
#ifdef LAYOUT_IN_RAM
void publishWidgets() {
if (all_widgets != "") {
int counter = 0;
String line;
int psn_1 = 0;
int psn_2;
do {
psn_2 = all_widgets.indexOf("\r\n", psn_1); //\r\n
line = all_widgets.substring(psn_1, psn_2);
line.replace("\n", "");
line.replace("\r\n", "");
// jsonWriteStr(line, "id", String(counter));
// jsonWriteStr(line, "pageId", String(counter));
counter++;
sendMQTT("config", line);
Serial.println("[V] " + line);
psn_1 = psn_2 + 1;
} while (psn_2 + 2 < all_widgets.length());
getMemoryLoad("I after send all widgets");
}
}
#endif
#ifndef LAYOUT_IN_RAM
void publishWidgets() {
auto file = seekFile("layout.txt");
auto file = seekFile("layout.json");
if (!file) {
SerialPrint("E", F("MQTT"), F("no file layout.txt"));
SerialPrint("E", F("MQTT"), F("no file layout.json"));
return;
}
while (file.available()) {
String payload = file.readStringUntil('\n');
SerialPrint("I", F("MQTT"), "widgets: " + payload);
publishData("config", payload);
size_t size = file.size();
DynamicJsonDocument doc(size * 1.5);
DeserializationError error = deserializeJson(doc, file);
if (error) {
SerialPrint("E", F("MQTT"), error.f_str());
handleError("jse3", 1);
}
JsonArray arr = doc.as<JsonArray>();
for (JsonVariant value : arr) {
publishData("config", value.as<String>());
}
file.close();
}
#endif
void publishState() {
//// берет строку json и ключи превращает в топики а значения колючей в них посылает
// String str;
// if (paramsHeapJson != "{}") {
// str += paramsHeapJson;
// }
// if (paramsFlashJson != "{}") {
// str += "," + paramsFlashJson;
// }
// str.replace("{", "");
// str.replace("}", "");
// str.replace("\"", "");
// str += ",";
//
// while (str.length() != 0) {
// String tmp = selectToMarker(str, ",");
//
// String topic = selectToMarker(tmp, ":");
// String state = deleteBeforeDelimiter(tmp, ":");
//
// if (topic != "" && state != "") {
// if (topic != "timenow") {
// publishStatusMqtt(topic, state);
// }
// }
// str = deleteBeforeDelimiter(str, ",");
//}
String json = "{}";
jsonMerge(json, paramsHeapJson);
jsonMerge(json, paramsFlashJson);
json.replace("{", "");
json.replace("}", "");
json.replace("\"", "");
json += ",";
while (json.length() != 0) {
String tmp = selectToMarker(json, ",");
String topic = selectToMarker(tmp, ":");
String state = deleteBeforeDelimiter(tmp, ":");
if (topic != "" && state != "") {
publishStatusMqtt(topic, state);
}
json = deleteBeforeDelimiter(json, ",");
}
}
void handleMqttStatus(bool send) {

View File

@@ -21,6 +21,14 @@ void periodicTasksInit() {
nullptr, true);
}
void handleError(String errorId, String errorValue) {
jsonWriteStr_(errorsHeapJson, errorId, errorValue);
}
void handleError(String errorId, int errorValue) {
jsonWriteInt_(errorsHeapJson, errorId, errorValue);
}
void printGlobalVarSize() {
size_t settingsFlashJsonSize = settingsFlashJson.length();
// SerialPrint(F("i"), F("settingsFlashJson"), String(settingsFlashJsonSize));
@@ -37,4 +45,51 @@ void printGlobalVarSize() {
SerialPrint(F("EE"), F("Json"), F("Insufficient buffer size!!!"));
jsonWriteInt(errorsHeapJson, "jse1", 1);
}
}
}
#ifdef ESP8266
String ESP_getResetReason(void) {
return ESP.getResetReason();
}
#else
String ESP_getResetReason(void) {
return ESP32GetResetReason(0); // CPU 0
}
String ESP32GetResetReason(uint32_t cpu_no) {
// tools\sdk\include\esp32\rom\rtc.h
switch (rtc_get_reset_reason((RESET_REASON)cpu_no)) {
case POWERON_RESET:
return F("Vbat power on reset"); // 1
case SW_RESET:
return F("Software reset digital core"); // 3
case OWDT_RESET:
return F("Legacy watch dog reset digital core"); // 4
case DEEPSLEEP_RESET:
return F("Deep Sleep reset digital core"); // 5
case SDIO_RESET:
return F("Reset by SLC module, reset digital core"); // 6
case TG0WDT_SYS_RESET:
return F("Timer Group0 Watch dog reset digital core"); // 7
case TG1WDT_SYS_RESET:
return F("Timer Group1 Watch dog reset digital core"); // 8
case RTCWDT_SYS_RESET:
return F("RTC Watch dog Reset digital core"); // 9
case INTRUSION_RESET:
return F("Instrusion tested to reset CPU"); // 10
case TGWDT_CPU_RESET:
return F("Time Group reset CPU"); // 11
case SW_CPU_RESET:
return F("Software reset CPU"); // 12
case RTCWDT_CPU_RESET:
return F("RTC Watch dog Reset CPU"); // 13
case EXT_CPU_RESET:
return F("or APP CPU, reseted by PRO CPU"); // 14
case RTCWDT_BROWN_OUT_RESET:
return F("Reset when the vdd voltage is not stable"); // 15
case RTCWDT_RTC_RESET:
return F("RTC Watch dog reset digital core and rtc module"); // 16
default:
return F("NO_MEAN"); // 0
}
}
#endif

View File

@@ -17,14 +17,14 @@ void standWebServerInit() {
HTTP.send(200, "application/json", readFile(F("settings.json"), 20000));
});
HTTP.on("/errors.json", HTTP_GET, []() {
HTTP.send(200, "application/json", errorsHeapJson);
});
HTTP.on("/paramsh.json", HTTP_GET, []() {
HTTP.send(200, "application/json", paramsHeapJson);
});
HTTP.on("/errors.json", HTTP_GET, []() {
HTTP.send(200, "application/json", errorsHeapJson);
});
HTTP.on("/config.json", HTTP_GET, []() {
HTTP.send(200, "application/json", readFile(F("config.json"), 20000));
});

View File

@@ -51,7 +51,10 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t* payload, size_t length)
//**отправка**//
if (headerStr == "/|") {
sendFileToWs("/layout.json", num, 1024);
standWebSocket.sendTXT(num, paramsHeapJson);
String json = "{}";
jsonMerge(json, paramsHeapJson);
jsonMerge(json, paramsFlashJson);
standWebSocket.sendTXT(num, json);
}
//**сохранение**//
if (headerStr == "/tuoyal|") {
@@ -97,6 +100,7 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t* payload, size_t length)
handleMqttStatus(false, 8); //меняем статус на неопределенный
mqttReconnect(); //начинаем переподключение
standWebSocket.sendTXT(num, errorsHeapJson); //отправляем что статус неопределен
standWebSocket.sendTXT(num, ssidListHeapJson);
}
// page list ==========================================================================
//**отправка**//