Merge branch 'ver4dev' into ver4dev

This commit is contained in:
Mit4el
2025-03-10 22:40:53 +03:00
committed by GitHub
201 changed files with 21245 additions and 1364 deletions

View File

@@ -32,6 +32,10 @@
#define FIRMWARE_NAME "esp32_4mb"
#endif
#ifdef esp32_4mb3f
#define FIRMWARE_NAME "esp32_4mb3f"
#endif
#ifdef esp32cam_4mb
#define FIRMWARE_NAME "esp32cam_4mb"
#endif
@@ -52,6 +56,18 @@
#define FIRMWARE_NAME "esp32s3_16mb"
#endif
#ifdef bk7231n
#define FIRMWARE_NAME "bk7231n"
#endif
#ifdef esp32c6_4mb
#define FIRMWARE_NAME "esp32c6_4mb"
#endif
#ifdef esp32c6_8mb
#define FIRMWARE_NAME "esp32c6_8mb"
#endif
// Размер буфера json
#define JSON_BUFFER_SIZE 4096 // держим 2 кб не меняем
@@ -72,8 +88,9 @@ WEB_SOCKETS_FRAME_SIZE создан для того что бы не загру
#define STANDARD_WEB_SERVER
#define STANDARD_WEB_SOCKETS
//#ifndef LIBRETINY
#define UDP_ENABLED
//#endif
// #define REST_FILE_OPERATIONS
#define MQTT_RECONNECT_INTERVAL 20000
@@ -91,22 +108,26 @@ WEB_SOCKETS_FRAME_SIZE создан для того что бы не загру
enum TimerTask_t {
WIFI_SCAN,
WIFI_MQTT_CONNECTION_CHECK,
#ifndef ESP8266
WIFI_CONN,
#endif
TIME,
TIME_SYNC,
UPTIME,
UDP, // UDPP
// TIME_SYNC, // не используется
// UPTIME, // не используется
UDPt, // UDPP
TIMES, // периодические секундные проверки
PTASK,
ST,
PiWS,
END
};
// задачи которые надо протащить через loop
enum NotAsyncActions {
do_ZERO,
do_MQTTPARAMSCHANGED,
do_LAST,
};
// задачи которые надо протащить через loop // не используется
// enum NotAsyncActions {
// do_ZERO,
// do_MQTTPARAMSCHANGED,
// do_LAST,
// };
// состояния обновления
enum UpdateStates { UPDATE_COMPLETED, UPDATE_FAILED, PATH_ERROR };
@@ -114,7 +135,7 @@ enum UpdateStates { UPDATE_COMPLETED, UPDATE_FAILED, PATH_ERROR };
enum distination {
TO_MQTT,
TO_WS,
TO_MQTT_WS,
TO_MQTT_WS
};
#define WS_BROADCAST -1
// #define WS_BROADCAST -1 // не используется

34
include/DebugTrace.h Normal file
View File

@@ -0,0 +1,34 @@
#pragma once
// В папке toolchchain с которым собирались
// (Для esp32 например %%USERPROFILE%/.platformio/packages/toolchain-xtensa-esp32@8.4.0+2021r2-patch5/bin)
// из командной строки Windows (cmd) запустить файл c параметрами:
// xtensa-esp32-elf-addr2line.exe -pfiaC -e Путь_к_файлу/firmware.elf Стэк_адресов_из_сообщения
// %%USERPROFILE%/.platformio/packages/toolchain-xtensa-esp32@8.4.0+2021r2-patch5/bin xtensa-esp32-elf-addr2line.exe -pfiaC -e .pio/build/esp32_4mb3f/firmware.elf Стэк_адресов
#include "Global.h"
#if defined(ESP32) && !defined(esp32c3m_4mb) && !defined(esp32c6_4mb) && !defined(esp32c6_8mb)
#define RESTART_DEBUG_INFO
#endif
#if defined(RESTART_DEBUG_INFO)
#define CONFIG_RESTART_DEBUG_STACK_DEPTH 15
typedef struct {
size_t heap_total;
size_t heap_free;
size_t heap_free_min;
time_t heap_min_time;
uint32_t backtrace[CONFIG_RESTART_DEBUG_STACK_DEPTH];
} re_restart_debug_t;
__NOINIT_ATTR static int8_t bootloop_panic_count;
void IRAM_ATTR debugUpdate();
#endif // RESTART_DEBUG_INFO
extern "C" void __real_esp_panic_handler(void*);
void printDebugTrace();
void sendDebugTraceAndFreeMemory(bool);
void startWatchDog();
//extern "C" bool verifyRollbackLater();
void verifyFirmware();

View File

@@ -1,13 +1,15 @@
#pragma once
#include "Global.h"
#ifdef ESP8266
#if defined (ESP8266) || defined(LIBRETINY)
// эта библиотека встроена в ядро
#include "ESPAsyncUDP.h"
#else
#elif defined(ESP32)
#include "AsyncUDP.h"
#endif
#ifndef LIBRETINY
extern AsyncUDP asyncUdp;
#endif
extern const String getThisDevice();
extern void addThisDeviceToList();

View File

@@ -6,4 +6,4 @@ extern std::list<IoTItem*> IoTItems; // вектор ссылок базово
extern void configure(String path);
void clearConfigure();
extern IoTItem* myIoTItem;
// extern IoTItem* myIoTItem; // экономим память, используется в одном месте

View File

@@ -15,6 +15,18 @@ extern FS* filesystem;
#endif
#endif
#if defined(LIBRETINY)
#include <FS.h>
#include "LittleFS.h"
#define FileFS LittleFS
#define FS_NAME "LittleFS_LT"
#define FILE_READ "r"
#define FILE_WRITE "w"
#define FILE_APPEND "a"
#endif
#ifdef ESP8266
#if USE_LITTLEFS
#include "LittleFS.h"
@@ -39,6 +51,7 @@ extern void globalVarsSync();
// extern String getParamsJson();
extern void syncSettingsFlashJson();
void resetSettingsFlashByPanic();
extern void syncValuesFlashJson();
extern const String getChipId();

View File

@@ -9,6 +9,15 @@
#include <PubSubClient.h>
#include <list>
#ifdef LIBRETINY
#include <vector>
#include <typedef.h>
#ifdef STANDARD_WEB_SERVER
#include <WebServer.h>
#endif
#include <HTTPClient.h>
#endif
#ifdef ESP32
#include "WiFi.h"
#include <HTTPClient.h>
@@ -22,6 +31,7 @@
#ifdef ASYNC_WEB_SERVER
#include <ESPAsyncWebServer.h>
#include "AsyncWebServer.h"
#endif
#ifdef STANDARD_WEB_SERVER
@@ -50,7 +60,7 @@
#include "utils/StringUtils.h"
#include "PeriodicTasks.h"
#include "classes/IoTGpio.h"
#include "classes/IoTDiscovery.h"
/*********************************************************************************************************************
*****************************************глобальные объекты классов***************************************************
**********************************************************************************************************************/
@@ -60,6 +70,9 @@ extern IoTItem* rtcItem;
extern IoTItem* tlgrmItem;
extern IoTBench* benchLoadItem;
extern IoTBench* benchTaskItem;
extern IoTDiscovery* HADiscovery;
extern IoTDiscovery* HOMEdDiscovery;
extern TickerScheduler ts;
extern WiFiClient espClient;
@@ -77,6 +90,9 @@ extern ESP8266HTTPUpdateServer httpUpdater;
#ifdef ESP32
extern WebServer HTTP;
#endif
#ifdef LIBRETINY
extern WebServer HTTP;
#endif
#endif
#ifdef STANDARD_WEB_SOCKETS
@@ -108,6 +124,7 @@ extern int mqttPort;
extern String mqttPrefix;
extern String mqttUser;
extern String mqttPass;
extern String nameId;
extern unsigned long mqttUptime;
extern unsigned long flashWriteNumber;
@@ -146,6 +163,8 @@ extern Time_t _time_local;
extern Time_t _time_utc;
extern bool _time_isTrust;
#define WEBSOCKETS_CLIENT_MAX 5
extern int8_t ws_clients[WEBSOCKETS_CLIENT_MAX];
// extern unsigned long loopPeriod;
// extern DynamicJsonDocument settingsFlashJsonDoc;

View File

@@ -29,8 +29,8 @@ bool publishChartFileToMqtt(String path, String id, int maxCount);
void publishWidgets();
void mqttCallback(char* topic, uint8_t* payload, size_t length);
void handleMqttStatus(bool send);
void handleMqttStatus(bool send, int state);
//void handleMqttStatus(bool send);
void handleMqttStatus(bool send, int state = -1);
const String getStateStr(int e);

View File

@@ -9,6 +9,8 @@ extern bool handleFileRead(String path);
extern void handleFileUpload();
extern void handleFileDelete();
extern void handleFileCreate();
extern void handleLocalOTA();
extern void handleLocalOTA_Handler();
extern void handleFileList();
//void printDirectory(File dir, String& out);
extern void handleStatus();

View File

@@ -3,7 +3,7 @@
// #include "Upgrade.h"
#ifdef ESP8266
// #include "ESP8266.h"
#else
#elif ESP32
#include <HTTPUpdate.h>
#endif
@@ -22,7 +22,7 @@ extern bool upgradeFS(String path);
extern bool upgradeBuild(String path);
extern void restartEsp();
extern const String getBinPath(String file);
extern const String getBinPath();
extern void putUserDataToRam();
extern void saveUserDataToFlash();
extern void saveUpdeteStatus(String key, int val);

View File

@@ -19,6 +19,6 @@ void periodicWsSend();
void sendFileToWsByFrames(const String& filename, const String& header, const String& json, int client_id, size_t frameSize);
void sendStringToWs(const String& header, String& payload, int client_id);
void disconnectWSClient(uint8_t client_id);
void sendDeviceList(uint8_t num);
int getNumWSClients();

View File

@@ -0,0 +1,36 @@
#pragma once
#include <Arduino.h>
#include "Global.h"
#include "classes/IoTItem.h"
class IoTDiscovery : public IoTItem
{
public:
IoTDiscovery(const String &parameters);
~IoTDiscovery();
// inline bool isDiscoveryHomed() { return HOMEd; }
// inline bool isDiscoveryHA() { return HA; }
String HOMEdTopic = "";
String HATopic = "";
//String ChipId = "";
virtual void mqttSubscribeDiscovery();
virtual void publishStatusHOMEd(const String &topic, const String &data);
protected:
boolean publishRetain(const String &topic, const String &data);
virtual void getlayoutHA();
virtual void deleteFromHOMEd();
virtual void getlayoutHOMEd();
//bool HOMEd = false;
//bool HA = false;
//String HOMEdTopic;
};

View File

@@ -4,6 +4,7 @@
//#include "classes/IoTBench.h"
class IoTBench;
class IoTDiscovery;
struct IoTValue {
float valD = 0;
@@ -58,8 +59,10 @@ class IoTItem {
//virtual IoTItem* getCAMDriver();
virtual IoTItem* getTlgrmDriver();
//virtual IoTBench* getBenchmark();
virtual IoTBench*getBenchmarkTask();
virtual IoTBench*getBenchmarkLoad();
virtual IoTBench* getBenchmarkTask();
virtual IoTBench* getBenchmarkLoad();
virtual IoTDiscovery* getHADiscovery();
virtual IoTDiscovery* getHOMEdDiscovery();
virtual unsigned long getRtcUnixTime();
// делаем доступным модулям отправку сообщений в телеграм

View File

@@ -40,7 +40,7 @@ boolean isDigitDotCommaStr(const String& str);
String prettyBytes(size_t size);
String uint64ToString(uint64_t input, uint8_t base = 10);
String uint64ToStringIoTM(uint64_t input, uint8_t base = 10);
void cleanString(String& str);

View File

@@ -4,8 +4,20 @@
#include "MqttClient.h"
boolean isNetworkActive();
uint8_t getNumAPClients();
void routerConnect();
bool startAPMode();
#ifdef ESP8266
void routerConnect();
boolean RouterFind(std::vector<String> jArray);
#else
void handleScanResults();
void WiFiUtilsItit();
void connectToNextNetwork();
void checkConnection();
void ScanAsync();
#endif
uint8_t RSSIquality();
extern void wifiSignalInit();
//extern void wifiSignalInit();
#ifdef LIBRETINY
String httpGetString(HTTPClient &http);
#endif