初始化提交

This commit is contained in:
王立帮
2024-07-20 22:09:06 +08:00
commit c247dd07a6
6876 changed files with 2743096 additions and 0 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,225 @@
#ifndef QDPweb_h
#define QDPweb_h
/*
* ESP-DASH V2
* Made by Ayush Sharma
* Github URL: https://github.com/ayushsharma82/ESP-DASH
* Support Me: https://www.patreon.com/asrocks5
*
* - Version Changelog -
* V1.0.0 - 11 Nov. 2017 - Library was Born
* V1.0.1 - 13 Nov. 2017 - Fixed Empty SPIFFS Issue
* V1.0.2 - 13 Nov. 2017 - Improvements on SPIFFS Issue
* V1.0.3 - 24 Dec. 2017 - Pushing to Library Manager
*
* = Library Rewritten! =
* V2.0.0 - 25 Jan 2019 - Wohoo! A breakthrough in performance and capabilities!
*
*
* Credits:
* Malcolm Brook (https://github.com/malbrook) for Slider Card
*/
#include "Arduino.h"
#include "stdlib_noniso.h"
#if defined(ESP8266)
#define HARDWARE "ESP8266"
#include "ESP8266WiFi.h"
#include "ESPAsyncTCP.h"
#include "ESPAsyncWebServer.h"
#include "ArduinoJson.h"
#elif defined(ESP32)
#define HARDWARE "ESP32"
#include <esp_int_wdt.h>
#include <esp_task_wdt.h>
#include "WiFi.h"
#include "AsyncTCP.h"
#include "ESPAsyncWebServer.h"
#include "ArduinoJson.h"
#endif
#include "webpage.h"
typedef std::function<void(const char* buttonId)> DashButtonHandler;
typedef std::function<void(const char* sliderId, int sliderValue)> DashSliderHandler;
#define DEBUG_MODE 1 // change to 1 for DEBUG Messages
// Debug mode
#define TEMPERATURE_CARD_TYPES 6
#define STATUS_CARD_TYPES 4
#define SLIDER_CARD_TYPES 4
#if defined(ESP8266)
#define BUTTON_CARD_LIMIT 20
#define NUMBER_CARD_LIMIT 20
#define TEMPERATURE_CARD_LIMIT 20
#define HUMIDITY_CARD_LIMIT 20
#define STATUS_CARD_LIMIT 20
#define LINE_CHART_LIMIT 5
#define GAUGE_CHART_LIMIT 20
#define SLIDER_CARD_LIMIT 10
#elif defined(ESP32)
#define BUTTON_CARD_LIMIT 50
#define NUMBER_CARD_LIMIT 50
#define TEMPERATURE_CARD_LIMIT 50
#define HUMIDITY_CARD_LIMIT 50
#define STATUS_CARD_LIMIT 50
#define LINE_CHART_LIMIT 10
#define GAUGE_CHART_LIMIT 50
#define SLIDER_CARD_LIMIT 20
#endif
class QDPwebClass{
public:
void init(AsyncWebServer& server);
void disableStats(); // To Disable Stats and disable reboot
void addNumberCard(const char* _id, const char* _name, int _value = 0); // Add Number card with custom value
void updateNumberCard(const char* _id, int _value); // Update Number Card with custom value
void addTemperatureCard(const char* _id, const char* _name, int _type, int _value = 0); // Add Temperature Card with custom value
void updateTemperatureCard(const char* _id, int _value); // Update Temperature Card with custom value
void addHumidityCard(const char* _id, const char* _name, int _value = 0); // Add Humidity Card with custom value
void updateHumidityCard(const char* _id, int _value); // Update Humidity Card with custom value
void addStatusCard(const char* _id, const char* _name, int _type = 0); // Add Status Card with more status types
void addStatusCard(const char* _id, const char* _name, bool _type); // Add Status Card with true / false
void updateStatusCard(const char* _id, int _type);
void updateStatusCard(const char* _id, bool _type);
void addButtonCard(const char* _id, const char* _name); // Add Button
// Add Slider Card
void addSliderCard(const char* _id, const char* _name, int _type);
void updateSliderCard(const char* _id, int _value);
//Initiate a Line Chart with Integer x axis and custom y axis
void addLineChart(const char* _id, const char* _name, int _x_axis_value[], int _x_axis_size, const char* _y_axis_name, int _y_axis_value[], int _y_axis_size);
// Initiate a Line Chart with String x axis and custom y axis
void addLineChart(const char* _id, const char* _name, String _x_axis_value[], int _x_axis_size, const char* _y_axis_name, int _y_axis_value[], int _y_axis_size);
void updateLineChart(const char* _id, int _x_axis_value[], int _x_axis_size, int _y_axis_value[], int _y_axis_size); // Update a Line Chart with custom Int x axis and y axis
void updateLineChart(const char* _id, String _x_axis_value[], int _x_axis_size, int _y_axis_value[], int _y_axis_size); // Update a Line Chart with custom String x axis and y axis
void addGaugeChart(const char *_id, const char *_name, int _value = 0); // Add Gauge card
void updateGaugeChart(const char* _id, int _value); // Update Gauge card
void attachButtonClick(DashButtonHandler handler){
_buttonClickFunc = handler;
}
void attachSliderChanged(DashSliderHandler handler){
_sliderChangedFunc = handler;
}
private:
bool stats_enabled = true;
DashButtonHandler _buttonClickFunc;
DashSliderHandler _sliderChangedFunc;
// Button Cards
// Data Relation:
// (Handle Incomming Websocket Requests via Card ID) Card ID -> Card Name
String button_card_id[BUTTON_CARD_LIMIT] = {};
String button_card_name[BUTTON_CARD_LIMIT] = {};
// Number Cards
// Card ID -> Card Name -> Integer Value
String number_card_id[NUMBER_CARD_LIMIT] = {};
String number_card_name[NUMBER_CARD_LIMIT] = {};
uint16_t number_card_value[NUMBER_CARD_LIMIT] = {};
// Temperature Cards
// Data Relation:
// Card ID -> Card Name ->>
// Types
// 0 - °C [Celsius]
// 1 - °F [Fahrenheit]
// 2 - K [Kelvin]
// 3 - °R [Rakine]
// 4 - °De [Delisle]
// 5 - °N [Newton]
// ->> Integer Value
String temperature_card_id[TEMPERATURE_CARD_LIMIT] = {};
String temperature_card_name[TEMPERATURE_CARD_LIMIT] = {};
int temperature_card_type[TEMPERATURE_CARD_LIMIT] = {};
int temperature_card_value[TEMPERATURE_CARD_LIMIT] = {};
// Humidity Cards
// Data Relation:
// Card ID -> Card Name -> Integer Value
String humidity_card_id[HUMIDITY_CARD_LIMIT] = {};
String humidity_card_name[HUMIDITY_CARD_LIMIT] = {};
int humidity_card_value[HUMIDITY_CARD_LIMIT] = {};
// Status Cards
// Data Relation:
// Card ID -> Card Name -> Card Type
// 0 - false
// 1 - true
// 2 - warning
// 3 - paused
String status_card_id[STATUS_CARD_LIMIT] = {};
String status_card_name[STATUS_CARD_LIMIT] = {};
int status_card_value[STATUS_CARD_LIMIT] = {};
// Graph Cards
// Data Relation:
// Card ID -> Card Name ->>
// X Axis -> Bool Type -> String <- OR -> ( Array Length -> Integer Array )
// Y Axis -> Y Axis Name -> Array Length -> Integer Array
String line_chart_id[LINE_CHART_LIMIT] = {};
String line_chart_name[LINE_CHART_LIMIT] = {};
// X Axis // A Graph can either have a STRING Type X Axis or Integer Type
bool line_chart_x_axis_type[LINE_CHART_LIMIT] = {}; // Boolean which indicates the type // true = String, false = Int
String line_chart_x_axis_value_string[LINE_CHART_LIMIT][100] = {}; // String Type
int line_chart_x_axis_size[LINE_CHART_LIMIT] = {};
int line_chart_x_axis_value_int[LINE_CHART_LIMIT][100] = {}; // Integer Type
// Y Axis
String line_chart_y_axis_name[LINE_CHART_LIMIT] = {};
int line_chart_y_axis_size[LINE_CHART_LIMIT] = {};
int line_chart_y_axis_value[LINE_CHART_LIMIT][100] = {};
// Gauge Charts
// Card ID -> Card Name -> Integer Value
String gauge_chart_id[GAUGE_CHART_LIMIT] = {};
String gauge_chart_name[GAUGE_CHART_LIMIT] = {};
uint16_t gauge_chart_value[GAUGE_CHART_LIMIT] = {};
// Slider Card
// Data Relation:
// Card ID -> Card Name -> Card Type
// 0 - vertical bottom to top
// 1 - vertical top to bottom
// 2 - horizontal left to right
// 3 - horizontal right to left
String slider_card_id[SLIDER_CARD_LIMIT] = {};
String slider_card_name[SLIDER_CARD_LIMIT] = {};
int slider_card_type[SLIDER_CARD_LIMIT] = {};
int slider_card_value[SLIDER_CARD_LIMIT] = {};
static void onWsEvent(AsyncWebSocket * server, AsyncWebSocketClient * client, AwsEventType type, void * arg, uint8_t *data, size_t len);
void generateLayoutResponse(String& result);
void generateStatsResponse(String& result);
void generateRebootResponse(String& result);
size_t getTotalResponseCapacity();
size_t getNumberCardsLen();
size_t getTemperatureCardsLen();
size_t getHumidityCardsLen();
size_t getStatusCardsLen();
size_t getButtonCardsLen();
size_t getLineChartsLen();
size_t getGaugeChartsLen();
size_t getSliderCardsLen();
};
extern QDPwebClass QDPweb;
#endif

File diff suppressed because one or more lines are too long