mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-06-10 11:59:19 +03:00
добавлена кнопка перезагрузки
This commit is contained in:
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "IoTmanager",
|
"name": "IoTmanagerVer4",
|
||||||
"apssid": "IoTmanager",
|
"apssid": "IoTmanager",
|
||||||
"appass": "",
|
"appass": "",
|
||||||
"routerssid": "rise",
|
"routerssid": "rise",
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ enum TimerTask_t { WIFI_SCAN,
|
|||||||
UPTIME,
|
UPTIME,
|
||||||
SYGNAL,
|
SYGNAL,
|
||||||
TIMES,
|
TIMES,
|
||||||
MYTEST };
|
PTASK };
|
||||||
|
|
||||||
//задачи которые надо протащить через loop
|
//задачи которые надо протащить через loop
|
||||||
enum NotAsyncActions {
|
enum NotAsyncActions {
|
||||||
|
|||||||
@@ -79,6 +79,7 @@ extern WebSocketsServer standWebSocket;
|
|||||||
***********************************************глобальные переменные**************************************************
|
***********************************************глобальные переменные**************************************************
|
||||||
**********************************************************************************************************************/
|
**********************************************************************************************************************/
|
||||||
extern String settingsFlashJson;
|
extern String settingsFlashJson;
|
||||||
|
extern String errorsHeapJson;
|
||||||
extern String paramsFlashJson;
|
extern String paramsFlashJson;
|
||||||
extern String paramsHeapJson;
|
extern String paramsHeapJson;
|
||||||
|
|
||||||
@@ -87,9 +88,9 @@ extern String orderBuf;
|
|||||||
extern String eventBuf;
|
extern String eventBuf;
|
||||||
|
|
||||||
// wifi
|
// wifi
|
||||||
extern String ssidListJson;
|
extern String ssidListHeapJson;
|
||||||
|
|
||||||
extern String devListJson;
|
extern String devListHeapJson;
|
||||||
|
|
||||||
// Mqtt
|
// Mqtt
|
||||||
extern String mqttServer;
|
extern String mqttServer;
|
||||||
|
|||||||
@@ -10,3 +10,4 @@
|
|||||||
#include "MqttClient.h"
|
#include "MqttClient.h"
|
||||||
#include "WsServer.h"
|
#include "WsServer.h"
|
||||||
#include "DeviceList.h"
|
#include "DeviceList.h"
|
||||||
|
#include "PeriodicTasks.h"
|
||||||
|
|||||||
5
include/PeriodicTasks.h
Normal file
5
include/PeriodicTasks.h
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "Global.h"
|
||||||
|
#include "WsServer.h"
|
||||||
|
|
||||||
|
extern void periodicTasksInit();
|
||||||
@@ -12,6 +12,7 @@ extern void hexdump(const void* mem, uint32_t len, uint8_t cols);
|
|||||||
|
|
||||||
void sendFileToWs(const char* filename, uint8_t num, size_t frameSize);
|
void sendFileToWs(const char* filename, uint8_t num, size_t frameSize);
|
||||||
void publishStatusWs(const String& topic, const String& data);
|
void publishStatusWs(const String& topic, const String& data);
|
||||||
|
void periodicWsSend();
|
||||||
void sendStringToWs(const String& msg, uint8_t num, String name);
|
void sendStringToWs(const String& msg, uint8_t num, String name);
|
||||||
|
|
||||||
// void sendMark(const char* filename, const char* mark, uint8_t num);
|
// void sendMark(const char* filename, const char* mark, uint8_t num);
|
||||||
|
|||||||
@@ -1,19 +1,19 @@
|
|||||||
#include "DeviceList.h"
|
#include "DeviceList.h"
|
||||||
|
|
||||||
void addThisDeviceToList() {
|
void addThisDeviceToList() {
|
||||||
jsonWriteStr_(devListJson, "devicelist", ""); //метка для парсинга
|
jsonWriteStr_(devListHeapJson, "devicelist", ""); //метка для парсинга
|
||||||
jsonWriteStr_(devListJson, "ip", jsonReadStr(settingsFlashJson, "ip"));
|
jsonWriteStr_(devListHeapJson, "ip", jsonReadStr(settingsFlashJson, "ip"));
|
||||||
jsonWriteStr_(devListJson, "id", jsonReadStr(settingsFlashJson, "id"));
|
jsonWriteStr_(devListHeapJson, "id", jsonReadStr(settingsFlashJson, "id"));
|
||||||
jsonWriteStr_(devListJson, "name", jsonReadStr(settingsFlashJson, "name"));
|
jsonWriteStr_(devListHeapJson, "name", jsonReadStr(settingsFlashJson, "name"));
|
||||||
|
|
||||||
// для проверки
|
// для проверки
|
||||||
// devListJson = devListJson + ",";
|
// devListHeapJson = devListHeapJson + ",";
|
||||||
// String test;
|
// String test;
|
||||||
// jsonWriteStr_(test, "ip", "192.168.88.88");
|
// jsonWriteStr_(test, "ip", "192.168.88.88");
|
||||||
// jsonWriteStr_(test, "id", "123456789");
|
// jsonWriteStr_(test, "id", "123456789");
|
||||||
// jsonWriteStr_(test, "name", "test");
|
// jsonWriteStr_(test, "name", "test");
|
||||||
// devListJson = devListJson + test;
|
// devListHeapJson = devListHeapJson + test;
|
||||||
|
|
||||||
devListJson = "[" + devListJson + "]";
|
devListHeapJson = "[" + devListHeapJson + "]";
|
||||||
Serial.println(devListJson);
|
Serial.println(devListHeapJson);
|
||||||
}
|
}
|
||||||
@@ -17,9 +17,12 @@ void globalVarsSync() {
|
|||||||
mqttRootDevice = mqttPrefix + "/" + chipId;
|
mqttRootDevice = mqttPrefix + "/" + chipId;
|
||||||
jsonWriteStr_(settingsFlashJson, "root", mqttRootDevice);
|
jsonWriteStr_(settingsFlashJson, "root", mqttRootDevice);
|
||||||
jsonWriteStr_(settingsFlashJson, "id", chipId);
|
jsonWriteStr_(settingsFlashJson, "id", chipId);
|
||||||
|
|
||||||
saveSettingsFlashJson();
|
saveSettingsFlashJson();
|
||||||
jsonWriteStr_(ssidListJson, "ssid", ""); //метка для парсинга
|
|
||||||
jsonWriteStr(paramsHeapJson, "params", ""); //метка для парсинга
|
jsonWriteStr_(errorsHeapJson, "errors", ""); //метка для парсинга
|
||||||
|
jsonWriteStr_(ssidListHeapJson, "ssid", ""); //метка для парсинга
|
||||||
|
jsonWriteStr(paramsHeapJson, "params", ""); //метка для парсинга
|
||||||
}
|
}
|
||||||
|
|
||||||
void saveSettingsFlashJson() {
|
void saveSettingsFlashJson() {
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
*****************************************глобальные объекты классов***************************************************
|
*****************************************глобальные объекты классов***************************************************
|
||||||
**********************************************************************************************************************/
|
**********************************************************************************************************************/
|
||||||
|
|
||||||
TickerScheduler ts(MYTEST + 1);
|
TickerScheduler ts(PTASK + 1);
|
||||||
WiFiClient espClient;
|
WiFiClient espClient;
|
||||||
PubSubClient mqtt(espClient);
|
PubSubClient mqtt(espClient);
|
||||||
StringCommand sCmd;
|
StringCommand sCmd;
|
||||||
@@ -31,17 +31,19 @@ WebSocketsServer standWebSocket = WebSocketsServer(81);
|
|||||||
**********************************************************************************************************************/
|
**********************************************************************************************************************/
|
||||||
|
|
||||||
String settingsFlashJson = "{}"; //переменная в которой хранятся все настройки, находится в оперативной памяти и синхронизированна с flash памятью
|
String settingsFlashJson = "{}"; //переменная в которой хранятся все настройки, находится в оперативной памяти и синхронизированна с flash памятью
|
||||||
String paramsFlashJson = "{}"; //переменная в которой хранятся все параметры, находится в оперативной памяти и синхронизированна с flash памятью
|
String errorsHeapJson = "{}"; //переменная в которой хранятся все ошибки, находится в оперативной памяти только
|
||||||
String paramsHeapJson = "{}"; //переменная в которой хранятся все параметры, находится в оперативной памяти только
|
|
||||||
|
String paramsFlashJson = "{}"; //переменная в которой хранятся все параметры, находится в оперативной памяти и синхронизированна с flash памятью
|
||||||
|
String paramsHeapJson = "{}"; //переменная в которой хранятся все параметры, находится в оперативной памяти только
|
||||||
|
|
||||||
// buf
|
// buf
|
||||||
String orderBuf = "";
|
String orderBuf = "";
|
||||||
String eventBuf = "";
|
String eventBuf = "";
|
||||||
|
|
||||||
// wifi
|
// wifi
|
||||||
String ssidListJson = "{}";
|
String ssidListHeapJson = "{}";
|
||||||
|
|
||||||
String devListJson;
|
String devListHeapJson;
|
||||||
|
|
||||||
// Mqtt
|
// Mqtt
|
||||||
String mqttServer = "";
|
String mqttServer = "";
|
||||||
|
|||||||
@@ -48,13 +48,8 @@ void setup() {
|
|||||||
|
|
||||||
configure("/config.json");
|
configure("/config.json");
|
||||||
|
|
||||||
//задачи редкого выполнения
|
//инициализация задач переодического выполнения
|
||||||
ts.add(
|
periodicTasksInit();
|
||||||
MYTEST, 1000 * 30, [&](void*) {
|
|
||||||
SerialPrint(F("i"), F("HEAP"), prettyBytes(ESP.getFreeHeap()));
|
|
||||||
standWebSocket.broadcastTXT(devListJson);
|
|
||||||
},
|
|
||||||
nullptr, true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop() {
|
void loop() {
|
||||||
|
|||||||
11
src/PeriodicTasks.cpp
Normal file
11
src/PeriodicTasks.cpp
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
#include "PeriodicTasks.h"
|
||||||
|
|
||||||
|
void periodicTasksInit() {
|
||||||
|
//задачи редкого выполнения
|
||||||
|
ts.add(
|
||||||
|
PTASK, 1000 * 30, [&](void*) {
|
||||||
|
SerialPrint(F("i"), F("HEAP"), prettyBytes(ESP.getFreeHeap()));
|
||||||
|
periodicWsSend();
|
||||||
|
},
|
||||||
|
nullptr, true);
|
||||||
|
}
|
||||||
@@ -3,6 +3,7 @@
|
|||||||
void standWebSocketsInit() {
|
void standWebSocketsInit() {
|
||||||
standWebSocket.begin();
|
standWebSocket.begin();
|
||||||
standWebSocket.onEvent(webSocketEvent);
|
standWebSocket.onEvent(webSocketEvent);
|
||||||
|
SerialPrint("i", "WS", "WS server initialized");
|
||||||
}
|
}
|
||||||
|
|
||||||
void webSocketEvent(uint8_t num, WStype_t type, uint8_t* payload, size_t length) {
|
void webSocketEvent(uint8_t num, WStype_t type, uint8_t* payload, size_t length) {
|
||||||
@@ -16,9 +17,16 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t* payload, size_t length)
|
|||||||
} break;
|
} break;
|
||||||
|
|
||||||
case WStype_CONNECTED: {
|
case WStype_CONNECTED: {
|
||||||
IPAddress ip = standWebSocket.remoteIP(num);
|
// IPAddress ip = standWebSocket.remoteIP(num);
|
||||||
Serial.printf("[%u] Connected from %d.%d.%d.%d url: %s\n", num, ip[0], ip[1], ip[2], ip[3], payload);
|
SerialPrint("i", "WS " + String(num), "WS client connected");
|
||||||
standWebSocket.sendTXT(num, "Connected");
|
if (num > 3) {
|
||||||
|
SerialPrint("E", "WS", "Too many clients, connection closed!!!");
|
||||||
|
jsonWriteInt(errorsHeapJson, "wscle", 1);
|
||||||
|
standWebSocket.close();
|
||||||
|
standWebSocketsInit();
|
||||||
|
}
|
||||||
|
// Serial.printf("[%u] Connected from %d.%d.%d.%d url: %s\n", num, ip[0], ip[1], ip[2], ip[3], payload);
|
||||||
|
// standWebSocket.sendTXT(num, "Connected");
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
case WStype_TEXT: {
|
case WStype_TEXT: {
|
||||||
@@ -29,42 +37,63 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t* payload, size_t length)
|
|||||||
for (size_t i = 0; i < headerLenth; i++) {
|
for (size_t i = 0; i < headerLenth; i++) {
|
||||||
headerStr += (char)payload[i];
|
headerStr += (char)payload[i];
|
||||||
}
|
}
|
||||||
|
//отправка данных которые нужны для всех страниц веб интерфейса
|
||||||
|
//эти данные мы отправляем в двух случаях:
|
||||||
|
// 1 пользователь перешел на новую страницу
|
||||||
|
// 2 каждые 30 секунд
|
||||||
|
// all pages===================================================================
|
||||||
|
//**отправка**//
|
||||||
|
if (headerStr == ("/all")) {
|
||||||
|
standWebSocket.sendTXT(num, ssidListHeapJson);
|
||||||
|
standWebSocket.broadcastTXT(errorsHeapJson);
|
||||||
|
}
|
||||||
// dashboard===================================================================
|
// dashboard===================================================================
|
||||||
|
//**отправка**//
|
||||||
if (headerStr == "/") {
|
if (headerStr == "/") {
|
||||||
sendFileToWs("/layout.json", num, 1024);
|
sendFileToWs("/layout.json", num, 1024);
|
||||||
standWebSocket.sendTXT(num, paramsHeapJson);
|
standWebSocket.sendTXT(num, paramsHeapJson);
|
||||||
}
|
}
|
||||||
|
//**сохранение**//
|
||||||
if (headerStr == "/tuoyal") {
|
if (headerStr == "/tuoyal") {
|
||||||
writeFileUint8tByFrames("layout.json", payload, length, headerLenth, 256);
|
writeFileUint8tByFrames("layout.json", payload, length, headerLenth, 256);
|
||||||
}
|
}
|
||||||
// configutation===============================================================
|
// configutation===============================================================
|
||||||
|
//**отправка**//
|
||||||
if (headerStr == "/config") {
|
if (headerStr == "/config") {
|
||||||
sendFileToWs("/items.json", num, 1024);
|
sendFileToWs("/items.json", num, 1024);
|
||||||
sendFileToWs("/widgets.json", num, 1024);
|
sendFileToWs("/widgets.json", num, 1024);
|
||||||
sendFileToWs("/config.json", num, 1024);
|
sendFileToWs("/config.json", num, 1024);
|
||||||
sendFileToWs("/settings.json", num, 1024);
|
// sendFileToWs("/settings.json", num, 1024);
|
||||||
}
|
}
|
||||||
|
//**сохранение**//
|
||||||
if (headerStr == "/gifnoc") {
|
if (headerStr == "/gifnoc") {
|
||||||
writeFileUint8tByFrames("config.json", payload, length, headerLenth, 256);
|
writeFileUint8tByFrames("config.json", payload, length, headerLenth, 256);
|
||||||
}
|
}
|
||||||
// connection===================================================================
|
// connection===================================================================
|
||||||
|
//**отправка**//
|
||||||
if (headerStr == "/connec") {
|
if (headerStr == "/connec") {
|
||||||
sendFileToWs("/settings.json", num, 1024);
|
sendFileToWs("/settings.json", num, 1024);
|
||||||
|
//запуск асинхронного сканирования wifi сетей при переходе на страницу соединений
|
||||||
RouterFind(jsonReadStr(settingsFlashJson, F("routerssid")));
|
RouterFind(jsonReadStr(settingsFlashJson, F("routerssid")));
|
||||||
standWebSocket.sendTXT(num, ssidListJson);
|
|
||||||
}
|
}
|
||||||
|
//**отправка**//
|
||||||
if (headerStr == "/scan") {
|
if (headerStr == "/scan") {
|
||||||
|
//запуск асинхронного сканирования wifi сетей при нажатии выпадающего списка
|
||||||
RouterFind(jsonReadStr(settingsFlashJson, F("routerssid")));
|
RouterFind(jsonReadStr(settingsFlashJson, F("routerssid")));
|
||||||
standWebSocket.sendTXT(num, ssidListJson);
|
|
||||||
}
|
}
|
||||||
|
//**сохранение**//
|
||||||
if (headerStr == "/cennoc") {
|
if (headerStr == "/cennoc") {
|
||||||
writeFileUint8tByFrames("settings.json", payload, length, headerLenth, 256);
|
writeFileUint8tByFrames("settings.json", payload, length, headerLenth, 256);
|
||||||
settingsFlashJson = readFile(F("settings.json"), 4096);
|
settingsFlashJson = readFile(F("settings.json"), 4096);
|
||||||
}
|
}
|
||||||
// list ===================================================================
|
// list ===================================================================
|
||||||
|
//**отправка**//
|
||||||
if (headerStr == "/list") {
|
if (headerStr == "/list") {
|
||||||
standWebSocket.sendTXT(num, devListJson);
|
standWebSocket.sendTXT(num, devListHeapJson);
|
||||||
sendFileToWs("/settings.json", num, 1024);
|
}
|
||||||
|
// orders ===================================================================
|
||||||
|
if (headerStr == "/reboot") {
|
||||||
|
ESP.restart();
|
||||||
}
|
}
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
@@ -105,6 +134,13 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t* payload, size_t length)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//данные которые мы отправляем в сокеты переодически
|
||||||
|
void periodicWsSend() {
|
||||||
|
standWebSocket.broadcastTXT(devListHeapJson);
|
||||||
|
standWebSocket.broadcastTXT(ssidListHeapJson);
|
||||||
|
standWebSocket.broadcastTXT(errorsHeapJson);
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef ESP32
|
#ifdef ESP32
|
||||||
void hexdump(const void* mem, uint32_t len, uint8_t cols = 16) {
|
void hexdump(const void* mem, uint32_t len, uint8_t cols = 16) {
|
||||||
const uint8_t* src = (const uint8_t*)mem;
|
const uint8_t* src = (const uint8_t*)mem;
|
||||||
|
|||||||
@@ -1,5 +1,13 @@
|
|||||||
#include "Utils/FileUtils.h"
|
#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) {
|
void writeFileUint8tByFrames(const String& filename, uint8_t*& big_buf, size_t length, size_t headerLenth, size_t frameSize) {
|
||||||
String path = filepath(filename);
|
String path = filepath(filename);
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ void routerConnect() {
|
|||||||
if (WiFi.status() == WL_CONNECT_FAILED) {
|
if (WiFi.status() == WL_CONNECT_FAILED) {
|
||||||
SerialPrint("E", "WIFI", "password is not correct");
|
SerialPrint("E", "WIFI", "password is not correct");
|
||||||
tries = 1;
|
tries = 1;
|
||||||
jsonWriteInt(settingsFlashJson, "pass_status", 1);
|
jsonWriteInt(errorsHeapJson, "passer", 1);
|
||||||
}
|
}
|
||||||
Serial.print(".");
|
Serial.print(".");
|
||||||
delay(1000);
|
delay(1000);
|
||||||
@@ -61,7 +61,7 @@ bool startAPMode() {
|
|||||||
SerialPrint("i", "WIFI", "AP IP: " + myIP.toString());
|
SerialPrint("i", "WIFI", "AP IP: " + myIP.toString());
|
||||||
jsonWriteStr(settingsFlashJson, "ip", myIP.toString());
|
jsonWriteStr(settingsFlashJson, "ip", myIP.toString());
|
||||||
|
|
||||||
if (jsonReadInt(settingsFlashJson, "pass_status") != 1) {
|
if (jsonReadInt(errorsHeapJson, "passer") != 1) {
|
||||||
ts.add(
|
ts.add(
|
||||||
WIFI_SCAN, 10 * 1000, [&](void*) {
|
WIFI_SCAN, 10 * 1000, [&](void*) {
|
||||||
String sta_ssid = jsonReadStr(settingsFlashJson, "routerssid");
|
String sta_ssid = jsonReadStr(settingsFlashJson, "routerssid");
|
||||||
@@ -104,12 +104,12 @@ boolean RouterFind(String ssid) {
|
|||||||
res = true;
|
res = true;
|
||||||
}
|
}
|
||||||
// SerialPrint("i", "WIFI", (res ? "*" : "") + String(i, DEC) + ") " + WiFi.SSID(i));
|
// SerialPrint("i", "WIFI", (res ? "*" : "") + String(i, DEC) + ") " + WiFi.SSID(i));
|
||||||
jsonWriteStr_(ssidListJson, String(i), WiFi.SSID(i));
|
jsonWriteStr_(ssidListHeapJson, String(i), WiFi.SSID(i));
|
||||||
|
|
||||||
// String(WiFi.RSSI(i)
|
// String(WiFi.RSSI(i)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
SerialPrint("i", "WIFI", ssidListJson);
|
SerialPrint("i", "WIFI", ssidListHeapJson);
|
||||||
WiFi.scanDelete();
|
WiFi.scanDelete();
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user