управление ошибками

This commit is contained in:
Dmitry Borisenko
2022-02-09 16:44:44 +01:00
parent 01428f4531
commit c728d34f03
8 changed files with 62 additions and 37 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,7 +1,7 @@
#pragma once
//Это версия прошивки
#define FIRMWARE_VERSION 400
#define FIRMWARE_VERSION 401
//Размер буфера json
#define JSON_BUFFER_SIZE 1024

View File

@@ -2,6 +2,8 @@
#include "Global.h"
void writeUint8tToString(uint8_t* payload, size_t length, size_t headerLenth, String& payloadStr);
void hex2string(byte array[], unsigned int len, char buffer[]);
int string2hex(const char* str, unsigned char* bytes);

View File

@@ -13,6 +13,10 @@ void standWebServerInit() {
HTTP.send(200, "application/json", settingsFlashJson);
});
HTTP.on("/errors.json", HTTP_GET, []() {
HTTP.send(200, "application/json", errorsHeapJson);
});
HTTP.on("/paramsh.json", HTTP_GET, []() {
HTTP.send(200, "application/json", paramsHeapJson);
});

View File

@@ -30,69 +30,80 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t* payload, size_t length)
} break;
case WStype_TEXT: {
//максимальное количество символов заголовка
size_t headerLenth = 7;
bool endOfHeaderFound = false;
size_t maxAllowedHeaderSize = 15; //максимальное количество символов заголовка
size_t headerLenth = 0;
String headerStr;
headerStr.reserve(headerLenth + 1);
for (size_t i = 0; i < headerLenth; i++) {
headerStr += (char)payload[i];
for (size_t i = 0; i <= maxAllowedHeaderSize; i++) {
headerLenth++;
char s = (char)payload[i];
headerStr += s;
if (s == '|') {
endOfHeaderFound = true;
break;
}
}
//отправка данных которые нужны для всех страниц веб интерфейса
//эти данные мы отправляем в двух случаях:
// 1 пользователь перешел на новую страницу
// 2 каждые 30 секунд
if (!endOfHeaderFound) {
SerialPrint("E", "WS " + String(num), "Package without header");
}
// all pages===================================================================
//**отправка**//
if (headerStr == ("/all")) {
if (headerStr == ("/all|")) {
standWebSocket.sendTXT(num, ssidListHeapJson);
standWebSocket.broadcastTXT(errorsHeapJson);
standWebSocket.sendTXT(num, errorsHeapJson);
}
// dashboard===================================================================
//**отправка**//
if (headerStr == "/") {
if (headerStr == "/|") {
sendFileToWs("/layout.json", num, 1024);
standWebSocket.sendTXT(num, paramsHeapJson);
}
//**сохранение**//
if (headerStr == "/tuoyal") {
if (headerStr == "/tuoyal|") {
writeFileUint8tByFrames("layout.json", payload, length, headerLenth, 256);
}
// configutation===============================================================
//**отправка**//
if (headerStr == "/config") {
if (headerStr == "/config|") {
sendFileToWs("/items.json", num, 1024);
sendFileToWs("/widgets.json", num, 1024);
sendFileToWs("/config.json", num, 1024);
sendFileToWs("/settings.json", num, 1024);
}
//**сохранение**//
if (headerStr == "/gifnoc") {
if (headerStr == "/gifnoc|") {
writeFileUint8tByFrames("config.json", payload, length, headerLenth, 256);
}
// connection===================================================================
//**отправка**//
if (headerStr == "/connec") {
if (headerStr == "/connection|") {
sendFileToWs("/settings.json", num, 1024);
//запуск асинхронного сканирования wifi сетей при переходе на страницу соединений
RouterFind(jsonReadStr(settingsFlashJson, F("routerssid")));
}
//**отправка**//
if (headerStr == "/scan") {
//запуск асинхронного сканирования wifi сетей при нажатии выпадающего списка
RouterFind(jsonReadStr(settingsFlashJson, F("routerssid")));
}
//**сохранение**//
if (headerStr == "/cennoc") {
if (headerStr == "/sgnittes|") {
writeFileUint8tByFrames("settings.json", payload, length, headerLenth, 256);
settingsFlashJson = readFile(F("settings.json"), 4096);
}
//**отправка**//
if (headerStr == "/scan|") {
//запуск асинхронного сканирования wifi сетей при нажатии выпадающего списка
RouterFind(jsonReadStr(settingsFlashJson, F("routerssid")));
}
// list ===================================================================
//**отправка**//
if (headerStr == "/list") {
if (headerStr == "/list|") {
standWebSocket.sendTXT(num, devListHeapJson);
}
// system ===================================================================
//**сохранение**//
if (headerStr == "/rorre|") {
writeUint8tToString(payload, length, headerLenth, errorsHeapJson);
}
// orders ===================================================================
if (headerStr == "/reboot") {
if (headerStr == "/reboot|") {
ESP.restart();
}

View File

@@ -1,13 +1,5 @@
#include "Utils/FileUtils.h"
void writeStrValueToJsonFile(const String& filename, String key, String value) {
String tmp = readFile(filename, 4096);
if (!jsonWriteStr_(tmp, key, value)) {
Serial.println(F("failed write json value to file"));
}
writeFile(filename, tmp);
}
//данная функция записывает файл из буфера страницами указанного размера
void writeFileUint8tByFrames(const String& filename, uint8_t*& big_buf, size_t length, size_t headerLenth, size_t frameSize) {
String path = filepath(filename);
@@ -31,6 +23,14 @@ void writeFileUint8tByFrames(const String& filename, uint8_t*& big_buf, size_t l
file.close();
}
// void writeStrValueToJsonFile(const String& filename, String key, String value) {
// String tmp = readFile(filename, 4096);
// if (!jsonWriteStr_(tmp, key, value)) {
// Serial.println(F("failed write json value to file"));
// }
// writeFile(filename, tmp);
// }
//данная функция читает из файла страницами указанного размера
// void readFileUint8tByFrames(const String& filename, size_t frameSize) {
// String path = filepath(filename);

View File

@@ -1,5 +1,13 @@
#include "Utils/StringUtils.h"
void writeUint8tToString(uint8_t* payload, size_t length, size_t headerLenth, String& payloadStr) {
payloadStr = "";
payloadStr.reserve(length + 1);
for (size_t i = headerLenth; i < length; i++) {
payloadStr += (char)payload[i];
}
}
String selectToMarkerLast(String str, String found) {
int p = str.lastIndexOf(found);
return str.substring(p + found.length());