Skip to content

Commit

Permalink
Merge pull request #225 from ayushsharma82/dev
Browse files Browse the repository at this point in the history
v4.0.5
  • Loading branch information
ayushsharma82 authored Jun 28, 2024
2 parents 549aa98 + e64eb8b commit 6f07395
Show file tree
Hide file tree
Showing 10 changed files with 65 additions and 31 deletions.
16 changes: 8 additions & 8 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ jobs:
run: ARDUINO_LIBRARY_ENABLE_UNSAFE_INSTALL=true arduino-cli lib install --git-url https://github.com/mathieucarbou/esphome-ESPAsyncTCP#v2.0.0

- name: Install ESPAsyncWebServer
run: ARDUINO_LIBRARY_ENABLE_UNSAFE_INSTALL=true arduino-cli lib install --git-url https://github.com/mathieucarbou/ESPAsyncWebServer#v2.10.1
run: ARDUINO_LIBRARY_ENABLE_UNSAFE_INSTALL=true arduino-cli lib install --git-url https://github.com/mathieucarbou/ESPAsyncWebServer#v3.0.2

- name: Install ArduinoJson
run: ARDUINO_LIBRARY_ENABLE_UNSAFE_INSTALL=true arduino-cli lib install --git-url https://github.com/bblanchon/ArduinoJson#v7.0.4
Expand Down Expand Up @@ -97,31 +97,31 @@ jobs:
- name: esp32dev|arduino
board: esp32dev
platform: espressif32
opts:
opts: "--project-option 'lib_compat_mode = strict'"
- name: esp32dev|arduino-2
board: esp32dev
platform: [email protected]
opts:
opts: "--project-option 'lib_compat_mode = strict'"
- name: esp32dev|arduino-3
board: esp32dev
platform: espressif32
opts: "--project-option 'platform_packages=platformio/framework-arduinoespressif32 @ https://github.com/espressif/arduino-esp32.git#3.0.0, platform_packages=platformio/framework-arduinoespressif32-libs @ https://github.com/espressif/arduino-esp32/releases/download/3.0.0/esp32-arduino-libs-3.0.0.zip'"
opts: "--project-option 'lib_compat_mode = strict' --project-option 'platform_packages=platformio/framework-arduinoespressif32 @ https://github.com/espressif/arduino-esp32.git#3.0.2, platform_packages=platformio/framework-arduinoespressif32-libs @ https://github.com/espressif/arduino-esp32/releases/download/3.0.2/esp32-arduino-libs-3.0.2.zip'"
- name: esp32-s3-devkitc-1|arduino
board: esp32-s3-devkitc-1
platform: espressif32
opts:
opts: "--project-option 'lib_compat_mode = strict'"
- name: esp32-s3-devkitc-1|arduino-2
board: esp32-s3-devkitc-1
platform: [email protected]
opts:
opts: "--project-option 'lib_compat_mode = strict'"
- name: esp32-s3-devkitc-1|arduino-3
board: esp32-s3-devkitc-1
platform: espressif32
opts: "--project-option 'platform_packages=platformio/framework-arduinoespressif32 @ https://github.com/espressif/arduino-esp32.git#3.0.0, platform_packages=platformio/framework-arduinoespressif32-libs @ https://github.com/espressif/arduino-esp32/releases/download/3.0.0/esp32-arduino-libs-3.0.0.zip'"
opts: "--project-option 'lib_compat_mode = strict' --project-option 'platform_packages=platformio/framework-arduinoespressif32 @ https://github.com/espressif/arduino-esp32.git#3.0.2, platform_packages=platformio/framework-arduinoespressif32-libs @ https://github.com/espressif/arduino-esp32/releases/download/3.0.2/esp32-arduino-libs-3.0.2.zip'"
- name: huzzah|espressif8266
board: huzzah
platform: espressif8266
opts:
opts: "--project-option 'lib_compat_mode = strict'"
steps:
- uses: actions/checkout@v4
- name: Set up cache
Expand Down
17 changes: 17 additions & 0 deletions .github/workflows/stale.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
name: 'Close stale issues and PR'
on:
schedule:
- cron: '30 6 * * *'

jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v9
with:
stale-issue-message: 'This issue is stale because it has been open 30 days with no activity. Remove stale label or comment or this will be closed in 5 days.'
stale-pr-message: 'This PR is marked as stale because it has been open 45 days with no activity. You can remove stale label or comment if this PR is still valid.'
close-issue-message: 'This issue was closed because it has been stalled for 5 days with no activity.'
days-before-stale: 30
days-before-close: 5
days-before-pr-close: -1
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ ESP-DASH Pro comes with the following extended functionality:

<h2>License</h2>

ESP-DASH is licensed under General Public License v3 ( GPLv3 ). If you are intending to use ESP-DASH in a commercial project, please consider buying the [ESP-DASH Pro](https://espdash.pro) which comes with a less restrictive SCL-1.0 license ( SOFTT Commercial License 1.0 ).
ESP-DASH is licensed under General Public License v3 ( GPLv3 ). If you are intending to use ESP-DASH in a commercial project, please consider buying the [ESP-DASH Pro](https://espdash.pro) which comes with a less restrictive SCL-1.1 license ( SOFTT Commercial License 1.1 ).

<br>
<br>
4 changes: 2 additions & 2 deletions library.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
"maintainer": true
}
],
"version": "4.0.4",
"version": "4.0.5",
"frameworks": "arduino",
"platforms": ["espressif32", "espressif8266"],
"dependencies": [
Expand All @@ -28,7 +28,7 @@
{
"owner": "mathieucarbou",
"name": "ESP Async WebServer",
"version": "^2.10.1",
"version": "^3.0.2",
"platforms": ["espressif8266", "espressif32"]
}
]
Expand Down
2 changes: 1 addition & 1 deletion library.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name=ESP-DASH
version=4.0.4
version=4.0.5
author=Ayush Sharma
category=Communication
maintainer=Ayush Sharma <[email protected]>
Expand Down
8 changes: 4 additions & 4 deletions platformio.ini
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ build_flags =
lib_deps =
bblanchon/ArduinoJson @ 7.0.4
mathieucarbou/Async TCP @ ^3.1.4
mathieucarbou/ESP Async WebServer @ 2.10.1
mathieucarbou/ESP Async WebServer @ 3.0.2
upload_protocol = esptool
monitor_speed = 115200
monitor_filters = esp32_exception_decoder, log2file
Expand All @@ -32,14 +32,14 @@ board = esp32-s3-devkitc-1
[env:arduino-3]
platform = espressif32
platform_packages=
platformio/framework-arduinoespressif32 @ https://github.com/espressif/arduino-esp32.git#3.0.0
platformio/framework-arduinoespressif32-libs @ https://github.com/espressif/arduino-esp32/releases/download/3.0.0/esp32-arduino-libs-3.0.0.zip
platformio/framework-arduinoespressif32 @ https://github.com/espressif/arduino-esp32.git#3.0.2
platformio/framework-arduinoespressif32-libs @ https://github.com/espressif/arduino-esp32/releases/download/3.0.2/esp32-arduino-libs-3.0.2.zip
board = esp32-s3-devkitc-1

[env:esp8266]
platform = espressif8266
board = huzzah
lib_deps =
bblanchon/ArduinoJson @ 7.0.4
mathieucarbou/ESP Async WebServer @ 2.10.1
mathieucarbou/ESP Async WebServer @ 3.0.2
esphome/ESPAsyncTCP-esphome @ 2.0.0
22 changes: 14 additions & 8 deletions src/ESPDash.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,18 +36,18 @@ ESPDash::ESPDash(AsyncWebServer* server, const char* uri, bool enable_default_st
// Attach AsyncWebServer Routes
_server->on(uri, HTTP_GET, [this](AsyncWebServerRequest *request){
if(basic_auth){
if(!request->authenticate(username, password))
if(!request->authenticate(username.c_str(), password.c_str()))
return request->requestAuthentication();
}
// respond with the compressed frontend
AsyncWebServerResponse *response = request->beginResponse_P(200, "text/html", DASH_HTML, sizeof(DASH_HTML));
AsyncWebServerResponse *response = request->beginResponse(200, "text/html", DASH_HTML, sizeof(DASH_HTML));
response->addHeader("Content-Encoding", "gzip");
response->addHeader("Cache-Control", "public, max-age=900");
request->send(response);
});

// Websocket Callback Handler
_ws->onEvent([&](AsyncWebSocket *server, AsyncWebSocketClient *client, AwsEventType type, void *arg, uint8_t *data, size_t len){
_ws->onEvent([&](__unused AsyncWebSocket *server, AsyncWebSocketClient *client, AwsEventType type, void *arg, uint8_t *data, size_t len){
// Request Buffer
#if ARDUINOJSON_VERSION_MAJOR == 7
JsonDocument json;
Expand All @@ -64,6 +64,8 @@ ESPDash::ESPDash(AsyncWebServer* server, const char* uri, bool enable_default_st
// client side commands parsing
if (json["command"] == "get:layout") {
_asyncAccessInProgress = true;
if (_beforeUpdateCallback)
_beforeUpdateCallback(false);
generateLayoutJSON(client, false);
_asyncAccessInProgress = false;
} else if (json["command"] == "ping") {
Expand Down Expand Up @@ -105,11 +107,11 @@ ESPDash::ESPDash(AsyncWebServer* server, const char* uri, bool enable_default_st
}

void ESPDash::setAuthentication(const char *user, const char *pass) {
basic_auth = strlen(user) > 0 && strlen(pass) > 0;
username = user;
password = pass;
basic_auth = username.length() && password.length();
if(basic_auth) {
strncpy(username, user, sizeof(username));
strncpy(password, pass, sizeof(password));
_ws->setAuthentication(user, pass);
_ws->setAuthentication(username.c_str(), password.c_str());
}
}

Expand Down Expand Up @@ -314,7 +316,7 @@ void ESPDash::generateLayoutJSON(AsyncWebSocketClient* client, bool changes_only

doc["stats"][idx]["i"] = s->_id;
doc["stats"][idx]["k"] = s->_key;
if (changes_only || strlen(s->_value) > 0)
if (changes_only || s->_value.length() > 0)
doc["stats"][idx]["v"] = s->_value;
doc["stats"][idx]["v"] = s->_value;
idx++;
Expand Down Expand Up @@ -487,6 +489,8 @@ void ESPDash::sendUpdates(bool force) {
if (!hasClient()) {
return;
}
if (_beforeUpdateCallback)
_beforeUpdateCallback(!force);
generateLayoutJSON(nullptr, !force);
}

Expand All @@ -495,6 +499,8 @@ void ESPDash::refreshCard(Card *card) {
if (!hasClient()) {
return;
}
if (_beforeUpdateCallback)
_beforeUpdateCallback(true);
generateLayoutJSON(nullptr, true, card);
}

Expand Down
16 changes: 14 additions & 2 deletions src/ESPDash.h
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,11 @@ class Statistic;

// ESPDASH Class
class ESPDash{
public:
// changes_only: true (equivalent to sendUpdates(false)) - when sending updates to the client
// changes_only: false (equivalent to sendUpdates(true)) - when sending the entire layout to the client or when forcing a full update
typedef std::function<void(bool changes_only)> BeforeUpdateCallback;

private:
AsyncWebServer* _server = nullptr;
AsyncWebSocket* _ws = nullptr;
Expand All @@ -77,9 +82,10 @@ class ESPDash{
Vector<Statistic*> statistics;
bool default_stats_enabled = false;
bool basic_auth = false;
char username[64];
char password[64];
String username;
String password;
uint32_t _idCounter = 0;
BeforeUpdateCallback _beforeUpdateCallback = nullptr;

volatile bool _asyncAccessInProgress = false;

Expand Down Expand Up @@ -129,6 +135,12 @@ class ESPDash{
// in which case you should not modify them
bool isAsyncAccessInProgress() { return _asyncAccessInProgress; }

// Register a callback that will be called before some updates will be sent to the client.
// This callback can be used for example to refresh some card values that never change after only when a full layout is request (i.e. on page reload).
// This allows to avoid spending time refreshing cards that never change, but still allows them to be refreshed hen the user refresh the dashboard.
// If called from the async_http task, isAsyncAccessInProgress() will return true while in this callback.
void onBeforeUpdate(BeforeUpdateCallback callback) { _beforeUpdateCallback = callback; }

~ESPDash();
};

Expand Down
7 changes: 3 additions & 4 deletions src/Statistic.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,15 @@ Statistic::Statistic(ESPDash *dashboard, const char *key, const char *value) {
_id = dashboard->nextId();
// Safe copy
_key = key;
strncpy(_value, value, sizeof(_value));
_value = value;
_dashboard->add(this);
}

void Statistic::set(const char *value) {
// Safe copy
_changed = strcmp(_value, value) != 0;
_changed = _value != value;
if(_changed)
strncpy(_value, value, sizeof(_value));

_value = value;
}

Statistic::~Statistic() {
Expand Down
2 changes: 1 addition & 1 deletion src/Statistic.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ class Statistic {
ESPDash *_dashboard;
uint32_t _id;
const char *_key;
char _value[64];
String _value;
bool _changed = false;

public:
Expand Down

0 comments on commit 6f07395

Please sign in to comment.