diff --git a/patches/AsyncWeb_Prometheus.patch b/patches/AsyncWeb_Prometheus.patch
index 21fe22cd..3c7deac4 100644
--- a/patches/AsyncWeb_Prometheus.patch
+++ b/patches/AsyncWeb_Prometheus.patch
@@ -1,26 +1,26 @@
diff --git a/src/AsyncWebSocket.cpp b/src/AsyncWebSocket.cpp
-index 12be5f8..cffeed7 100644
+index 6e88da9..09359c3 100644
--- a/src/AsyncWebSocket.cpp
+++ b/src/AsyncWebSocket.cpp
-@@ -737,7 +737,7 @@ void AsyncWebSocketClient::binary(const __FlashStringHelper *data, size_t len)
- IPAddress AsyncWebSocketClient::remoteIP() const
- {
- if (!_client)
-- return IPAddress(0U);
-+ return IPAddress();
+@@ -827,7 +827,7 @@ void AsyncWebSocketClient::binary(AsyncWebSocketMessageBuffer * buffer)
+ IPAddress AsyncWebSocketClient::remoteIP() {
+ if(!_client) {
+- return IPAddress((uint32_t)0);
++ return IPAddress();
+ }
return _client->remoteIP();
}
diff --git a/src/WebResponses.cpp b/src/WebResponses.cpp
-index 22a549f..e0b36b3 100644
+index a22e991..babef18 100644
--- a/src/WebResponses.cpp
+++ b/src/WebResponses.cpp
-@@ -318,7 +318,7 @@ size_t AsyncAbstractResponse::_ack(AsyncWebServerRequest *request, size_t len, u
+@@ -317,7 +317,7 @@ size_t AsyncAbstractResponse::_ack(AsyncWebServerRequest *request, size_t len, u
free(buf);
return 0;
}
-- outLen = sprintf_P((char*)buf+headLen, PSTR("%x"), readLen) + headLen;
-+ outLen = sprintf_P((char*)buf+headLen, PSTR("%04x"), readLen) + headLen;
+- outLen = sprintf((char*)buf+headLen, "%x", readLen) + headLen;
++ outLen = sprintf((char*)buf+headLen, "%04x", readLen) + headLen;
while(outLen < headLen + 4) buf[outLen++] = ' ';
buf[outLen++] = '\r';
buf[outLen++] = '\n';
diff --git a/scripts/applyPatches.py b/scripts/applyPatches.py
index 147fb0f3..57f1fa23 100644
--- a/scripts/applyPatches.py
+++ b/scripts/applyPatches.py
@@ -26,9 +26,10 @@ def applyPatch(libName, patchFile):
# list of patches to apply (relative to /src)
-if env['PIOENV'][:22] != "opendtufusion-ethernet":
- applyPatch("ESP Async WebServer", "../patches/AsyncWeb_Prometheus.patch")
+applyPatch("ESPAsyncWebServer-esphome", "../patches/AsyncWeb_Prometheus.patch")
if env['PIOENV'][:13] == "opendtufusion":
applyPatch("GxEPD2", "../patches/GxEPD2_SW_SPI.patch")
+
+if (env['PIOENV'][:13] == "opendtufusion"): # or (env['PIOENV'][:13] == "esp32-wroom32"):
applyPatch("RF24", "../patches/RF24_Hal.patch")
diff --git a/src/CHANGES.md b/src/CHANGES.md
index 412c57d8..f9bedf29 100644
--- a/src/CHANGES.md
+++ b/src/CHANGES.md
@@ -1,5 +1,11 @@
# Development Changes
+## 0.8.94 - 2024-03-16
+* switched AsyncWebServer library
+* Ethernet version now uses same AsyncWebServer library as Wifi version
+* fix languange of `/history`
+* fix RSSI on `/history` #1463
+
## 0.8.93 - 2024-03-14
* improved history graph in WebUI #1491
* merge PR: 1491
diff --git a/src/defines.h b/src/defines.h
index 8fcdc000..b5e5dc6c 100644
--- a/src/defines.h
+++ b/src/defines.h
@@ -13,7 +13,7 @@
//-------------------------------------
#define VERSION_MAJOR 0
#define VERSION_MINOR 8
-#define VERSION_PATCH 93
+#define VERSION_PATCH 94
//-------------------------------------
typedef struct {
diff --git a/src/eth/ahoyeth.cpp b/src/eth/ahoyeth.cpp
index 9dc0fb36..83f0aef0 100644
--- a/src/eth/ahoyeth.cpp
+++ b/src/eth/ahoyeth.cpp
@@ -31,12 +31,7 @@ void ahoyeth::setup(settings_t *config, uint32_t *utcTimestamp, OnNetworkCB onNe
WiFi.onEvent([this](WiFiEvent_t event, arduino_event_info_t info) -> void { this->onEthernetEvent(event, info); });
Serial.flush();
- //#if defined(CONFIG_IDF_TARGET_ESP32S3)
mEthSpi.begin(DEF_ETH_MISO_PIN, DEF_ETH_MOSI_PIN, DEF_ETH_SCK_PIN, DEF_ETH_CS_PIN, DEF_ETH_IRQ_PIN, DEF_ETH_RST_PIN);
- //#else
- //ETH.begin(ETH_PHY_ADDR, ETH_PHY_POWER, ETH_PHY_MDC, ETH_PHY_MDIO, ETH_PHY_TYPE, ETH_CLK_MODE);
- //ETH.begin(ETH_PHY_ADDR, ETH_PHY_POWER, ETH_PHY_MDC, DEF_ETH_MOSI_PIN, ETH_PHY_TYPE, ETH_CLK_MODE);
- //#endif
if(mConfig->sys.ip.ip[0] != 0) {
IPAddress ip(mConfig->sys.ip.ip);
@@ -52,11 +47,6 @@ void ahoyeth::setup(settings_t *config, uint32_t *utcTimestamp, OnNetworkCB onNe
//-----------------------------------------------------------------------------
bool ahoyeth::updateNtpTime(void) {
- DPRINTLN(DBG_DEBUG, F(__FUNCTION__)); Serial.flush();
- Serial.printf("ETH.linkUp()=%s\n", ETH.linkUp() ? "up" : "down");
- Serial.print("ETH.localIP()=");
- Serial.println(ETH.localIP());
- Serial.printf("Go on? %s\n", (!ETH.localIP()) ? "No..." : "Yes...");
if (!ETH.localIP())
return false;
@@ -134,137 +124,55 @@ void ahoyeth::welcome(String ip, String mode) {
void ahoyeth::onEthernetEvent(WiFiEvent_t event, arduino_event_info_t info) {
DPRINTLN(DBG_VERBOSE, F("[ETH]: Got event..."));
switch (event) {
-#if ( ( defined(ESP_ARDUINO_VERSION_MAJOR) && (ESP_ARDUINO_VERSION_MAJOR >= 2) ) && ( ARDUINO_ESP32_GIT_VER != 0x46d5afb1 ) )
- // For breaking core v2.0.0
- // Why so strange to define a breaking enum arduino_event_id_t in WiFiGeneric.h
- // compared to the old system_event_id_t, now in tools/sdk/esp32/include/esp_event/include/esp_event_legacy.h
- // You can preserve the old enum order and just adding new items to do no harm
- case ARDUINO_EVENT_ETH_START:
- DPRINTLN(DBG_INFO, F("\nETH Started"));
- //set eth hostname here
- if(String(mConfig->sys.deviceName) != "")
- ETH.setHostname(mConfig->sys.deviceName);
- else
- ETH.setHostname("ESP32_W5500");
- break;
-
- case ARDUINO_EVENT_ETH_CONNECTED:
- DPRINTLN(DBG_INFO, F("ETH Connected"));
- break;
-
- case ARDUINO_EVENT_ETH_GOT_IP:
- if (!mEthConnected) {
- DPRINT(DBG_INFO, F("ETH MAC: "));
- #if defined (CONFIG_IDF_TARGET_ESP32S3)
- DBGPRINT(mEthSpi.macAddress());
- #else
- DBGPRINT(ETH.macAddress());
- #endif
- DBGPRINT(F(", IPv4: "));
- DBGPRINTLN(String(ETH.localIP()));
-
- if (ETH.fullDuplex()) {
- DPRINTLN(DBG_INFO, F("FULL_DUPLEX, "));
- } else {
- DPRINTLN(DBG_INFO, F("HALF_DUPLEX, "));
+ case ARDUINO_EVENT_ETH_START:
+ DPRINTLN(DBG_VERBOSE, F("ETH Started"));
+
+ if(String(mConfig->sys.deviceName) != "")
+ ETH.setHostname(mConfig->sys.deviceName);
+ else
+ ETH.setHostname(F("ESP32_W5500"));
+ break;
+
+ case ARDUINO_EVENT_ETH_CONNECTED:
+ DPRINTLN(DBG_VERBOSE, F("ETH Connected"));
+ break;
+
+ case ARDUINO_EVENT_ETH_GOT_IP:
+ if (!mEthConnected) {
+ /*DPRINT(DBG_INFO, F("ETH MAC: "));
+ DBGPRINT(mEthSpi.macAddress());*/
+ welcome(ETH.localIP().toString(), F(" (Station)"));
+
+ mEthConnected = true;
+ mOnNetworkCB(true);
}
- DPRINT(DBG_INFO, String(ETH.linkSpeed()));
- DBGPRINTLN(F("Mbps"));
-
- mEthConnected = true;
- mOnNetworkCB(true);
- }
- if (!MDNS.begin(mConfig->sys.deviceName)) {
- DPRINTLN(DBG_ERROR, F("Error setting up MDNS responder!"));
- } else {
- DBGPRINT(F("[WiFi] mDNS established: "));
- DBGPRINT(mConfig->sys.deviceName);
- DBGPRINTLN(F(".local"));
- }
- break;
-
- case ARDUINO_EVENT_ETH_DISCONNECTED:
- DPRINTLN(DBG_INFO, "ETH Disconnected");
- mEthConnected = false;
- mUdp.close();
- mOnNetworkCB(false);
- break;
-
- case ARDUINO_EVENT_ETH_STOP:
- DPRINTLN(DBG_INFO, "\nETH Stopped");
- mEthConnected = false;
- mUdp.close();
- mOnNetworkCB(false);
- break;
-
-#else
-
- // For old core v1.0.6-
- // Core v2.0.0 defines a stupid enum arduino_event_id_t, breaking any code for ESP32_W5500 written for previous core
- // Why so strange to define a breaking enum arduino_event_id_t in WiFiGeneric.h
- // compared to the old system_event_id_t, now in tools/sdk/esp32/include/esp_event/include/esp_event_legacy.h
- // You can preserve the old enum order and just adding new items to do no harm
- case SYSTEM_EVENT_ETH_START:
- DPRINTLN(DBG_INFO, F("\nETH Started"));
- //set eth hostname here
- if(String(mConfig->sys.deviceName) != "")
- ETH.setHostname(mConfig->sys.deviceName);
- else
- ETH.setHostname("ESP32_W5500");
- break;
-
- case SYSTEM_EVENT_ETH_CONNECTED:
- DPRINTLN(DBG_INFO, F("ETH Connected"));
- break;
-
- case SYSTEM_EVENT_ETH_GOT_IP:
- if (!ESP32_W5500_eth_connected) {
- DPRINT(DBG_INFO, F("ETH MAC: "));
- DBGPRINT(ETH.macAddress());
- DBGPRINT(F(", IPv4: "));
- DBGPRINTLN(ETH.localIP());
-
- if (ETH.fullDuplex()) {
- DPRINTLN(DBG_INFO, F("FULL_DUPLEX, "));
+ if (!MDNS.begin(mConfig->sys.deviceName)) {
+ DPRINTLN(DBG_ERROR, F("Error setting up MDNS responder!"));
} else {
- DPRINTLN(DBG_INFO, F("HALF_DUPLEX, "));
+ DBGPRINT(F("mDNS established: "));
+ DBGPRINT(mConfig->sys.deviceName);
+ DBGPRINTLN(F(".local"));
}
-
- DPRINT(DBG_INFO, ETH.linkSpeed());
- DBGPRINTLN(F("Mbps"));
-
- ESP32_W5500_eth_connected = true;
- mOnNetworkCB(true);
- }
- if (!MDNS.begin(mConfig->sys.deviceName)) {
- DPRINTLN(DBG_ERROR, F("Error setting up MDNS responder!"));
- } else {
- DBGPRINT(F("[WiFi] mDNS established: "));
- DBGPRINT(mConfig->sys.deviceName);
- DBGPRINTLN(F(".local"));
- }
- break;
-
- case SYSTEM_EVENT_ETH_DISCONNECTED:
- DPRINT(DBG_INFO, F("ETH Disconnected"));
- ESP32_W5500_eth_connected = false;
- mUdp.close();
- mOnNetworkCB(false);
- break;
-
- case SYSTEM_EVENT_ETH_STOP:
- DPRINT(DBG_INFO, F("ETH Stopped"));
- ESP32_W5500_eth_connected = false;
- mUdp.close();
- mOnNetworkCB(false);
- break;
-#endif
-
- default:
-
- break;
- }
+ break;
+
+ case ARDUINO_EVENT_ETH_DISCONNECTED:
+ DPRINTLN(DBG_INFO, F("ETH Disconnected"));
+ mEthConnected = false;
+ mUdp.close();
+ mOnNetworkCB(false);
+ break;
+
+ case ARDUINO_EVENT_ETH_STOP:
+ DPRINTLN(DBG_INFO, F("ETH Stopped"));
+ mEthConnected = false;
+ mUdp.close();
+ mOnNetworkCB(false);
+ break;
+
+ default:
+ break;
+ }
}
diff --git a/src/platformio.ini b/src/platformio.ini
index 869f74c0..20f8005a 100644
--- a/src/platformio.ini
+++ b/src/platformio.ini
@@ -25,7 +25,7 @@ extra_scripts =
pre:../scripts/reduceGxEPD2.py
lib_deps =
- https://github.com/yubox-node-org/ESPAsyncWebServer
+ https://github.com/esphome/ESPAsyncWebServer @ ^3.1.0
https://github.com/nRF24/RF24 @ 1.4.8
paulstoffregen/Time @ ^1.6.1
https://github.com/bertmelis/espMqttClient#v1.6.0
@@ -216,7 +216,7 @@ monitor_filters =
platform = espressif32
board = lolin_d32
build_flags = ${env.build_flags}
- -D ETHERNET
+ -DETHERNET
-DRELEASE
-DUSE_HSPI_FOR_EPD
-DENABLE_MQTT
@@ -241,7 +241,7 @@ monitor_filters =
platform = espressif32
board = lolin_d32
build_flags = ${env.build_flags}
- -D ETHERNET
+ -DETHERNET
-DRELEASE
-DUSE_HSPI_FOR_EPD
-DLANG_DE
@@ -436,16 +436,16 @@ monitor_filters =
[env:opendtufusion-ethernet]
platform = espressif32@6.5.0
board = esp32-s3-devkitc-1
-lib_deps =
- khoih-prog/AsyncWebServer_ESP32_W5500
- khoih-prog/AsyncUDP_ESP32_W5500
- https://github.com/nrf24/RF24 @ ^1.4.8
- paulstoffregen/Time @ ^1.6.1
- https://github.com/bertmelis/espMqttClient#v1.6.0
- bblanchon/ArduinoJson @ ^6.21.3
- https://github.com/JChristensen/Timezone @ ^1.2.4
- olikraus/U8g2 @ ^2.35.9
- https://github.com/zinggjm/GxEPD2#1.5.3
+#lib_deps =
+# khoih-prog/AsyncWebServer_ESP32_W5500
+# khoih-prog/AsyncUDP_ESP32_W5500
+# https://github.com/nrf24/RF24 @ ^1.4.8
+# paulstoffregen/Time @ ^1.6.1
+# https://github.com/bertmelis/espMqttClient#v1.6.0
+# bblanchon/ArduinoJson @ ^6.21.3
+# https://github.com/JChristensen/Timezone @ ^1.2.4
+# olikraus/U8g2 @ ^2.35.9
+# https://github.com/zinggjm/GxEPD2#1.5.3
upload_protocol = esp-builtin
build_flags = ${env.build_flags}
-DETHERNET
@@ -481,16 +481,16 @@ monitor_filters =
[env:opendtufusion-ethernet-de]
platform = espressif32@6.5.0
board = esp32-s3-devkitc-1
-lib_deps =
- khoih-prog/AsyncWebServer_ESP32_W5500
- khoih-prog/AsyncUDP_ESP32_W5500
- https://github.com/nrf24/RF24 @ ^1.4.8
- paulstoffregen/Time @ ^1.6.1
- https://github.com/bertmelis/espMqttClient#v1.6.0
- bblanchon/ArduinoJson @ ^6.21.3
- https://github.com/JChristensen/Timezone @ ^1.2.4
- olikraus/U8g2 @ ^2.35.9
- https://github.com/zinggjm/GxEPD2#1.5.3
+#lib_deps =
+# khoih-prog/AsyncWebServer_ESP32_W5500
+# khoih-prog/AsyncUDP_ESP32_W5500
+# https://github.com/nrf24/RF24 @ ^1.4.8
+# paulstoffregen/Time @ ^1.6.1
+# https://github.com/bertmelis/espMqttClient#v1.6.0
+# bblanchon/ArduinoJson @ ^6.21.3
+# https://github.com/JChristensen/Timezone @ ^1.2.4
+# olikraus/U8g2 @ ^2.35.9
+# https://github.com/zinggjm/GxEPD2#1.5.3
upload_protocol = esp-builtin
build_flags = ${env.build_flags}
-DETHERNET
diff --git a/src/web/RestApi.h b/src/web/RestApi.h
index 1ab12c30..399ea91f 100644
--- a/src/web/RestApi.h
+++ b/src/web/RestApi.h
@@ -350,8 +350,9 @@ class RestApi {
void getGeneric(AsyncWebServerRequest *request, JsonObject obj) {
mApp->resetLockTimeout();
-
+ #if !defined(ETHERNET)
obj[F("wifi_rssi")] = (WiFi.status() != WL_CONNECTED) ? 0 : WiFi.RSSI();
+ #endif
obj[F("ts_uptime")] = mApp->getUptime();
obj[F("ts_now")] = mApp->getTimestamp();
obj[F("version")] = String(mApp->getVersion());
@@ -378,12 +379,13 @@ class RestApi {
obj[F("ssid")] = mConfig->sys.stationSsid;
obj[F("ap_pwd")] = mConfig->sys.apPwd;
obj[F("hidd")] = mConfig->sys.isHidden;
+ obj[F("mac")] = WiFi.macAddress();
+ obj[F("wifi_channel")] = WiFi.channel();
#endif /* !defined(ETHERNET) */
obj[F("device_name")] = mConfig->sys.deviceName;
obj[F("dark_mode")] = (bool)mConfig->sys.darkMode;
obj[F("sched_reboot")] = (bool)mConfig->sys.schedReboot;
- obj[F("mac")] = WiFi.macAddress();
obj[F("hostname")] = mConfig->sys.deviceName;
obj[F("pwd_set")] = (strlen(mConfig->sys.adminPwd) > 0);
obj[F("prot_mask")] = mConfig->sys.protectionMask;
@@ -393,7 +395,6 @@ class RestApi {
obj[F("heap_free")] = mHeapFree;
obj[F("sketch_total")] = ESP.getFreeSketchSpace();
obj[F("sketch_used")] = ESP.getSketchSize() / 1024; // in kb
- obj[F("wifi_channel")] = WiFi.channel();
getGeneric(request, obj);
getRadioNrf(obj.createNestedObject(F("radioNrf")));
@@ -426,9 +427,9 @@ class RestApi {
//obj[F("littlefs_total")] = LittleFS.totalBytes();
//obj[F("littlefs_used")] = LittleFS.usedBytes();
- uint8_t max;
+ /*uint8_t max;
mApp->getSchedulerInfo(&max);
- obj[F("schMax")] = max;
+ obj[F("schMax")] = max;*/
}
void getHtmlSystem(AsyncWebServerRequest *request, JsonObject obj) {
diff --git a/src/web/html/history.html b/src/web/html/history.html
index 2d1509d4..57bff2fc 100644
--- a/src/web/html/history.html
+++ b/src/web/html/history.html
@@ -12,12 +12,12 @@
{#HTML_NAV}
-
Total Power
+
{#TOTAL_POWER}
-
Total Power Today
+
{#TOTAL_POWER_DAY}
-
Total Yield per day
+
{#TOTAL_YIELD_PER_DAY}
@@ -136,8 +136,8 @@
return [
mlNs("polyline", {stroke: "url(#gLine)", fill: "none", points: pts}),
mlNs("polyline", {stroke: "none", fill: "url(#gFill)", points: pts2}),
- mlNs("text", {x: i*.8, y: 10}, "Maximum: " + String(obj.max) + "W"),
- mlNs("text", {x: i*.8, y: 25}, "Last: " + String(lastVal) + "W")
+ mlNs("text", {x: i*.8, y: 10}, "{#MAX_DAY}: " + String(obj.max) + "W"),
+ mlNs("text", {x: i*.8, y: 25}, "{#LAST_VALUE}: " + String(lastVal) + "W")
]
}
@@ -145,7 +145,9 @@
function parsePowerHistory(obj){
if(once) {
once = false
- parseNav(obj.generic);
+ parseNav(obj.generic)
+ parseESP(obj.generic)
+ parseRssi(obj.generic)
window.setInterval("getAjax('/api/powerHistory', parsePowerHistory)", obj.refresh * 1000)
setTimeout(() => {
window.setInterval("getAjax('/api/powerHistoryDay', parsePowerHistoryDay)", refresh * 1000)
diff --git a/src/web/lang.json b/src/web/lang.json
index 6416a61a..f1723688 100644
--- a/src/web/lang.json
+++ b/src/web/lang.json
@@ -1528,16 +1528,6 @@
"en": "Total Power",
"de": "Gesamtleistung"
},
- {
- "token": "LAST",
- "en": "Last",
- "de": "Die letzten"
- },
- {
- "token": "VALUES",
- "en": "values",
- "de": "Werte"
- },
{
"token": "TOTAL_POWER_DAY",
"en": "Total Power Today",
@@ -1557,21 +1547,6 @@
"token": "LAST_VALUE",
"en": "Last value",
"de": "Letzter Wert"
- },
- {
- "token": "MAXIMUM",
- "en": "Maximum value",
- "de": "Maximalwert"
- },
- {
- "token": "UPDATED",
- "en": "Updated every",
- "de": "Aktualisiert alle"
- },
- {
- "token": "SECONDS",
- "en": "seconds",
- "de": "Sekunden"
}
]
}
diff --git a/src/wifi/ahoywifi.cpp b/src/wifi/ahoywifi.cpp
index 9bcbdadc..69665b31 100644
--- a/src/wifi/ahoywifi.cpp
+++ b/src/wifi/ahoywifi.cpp
@@ -198,7 +198,7 @@ void ahoywifi::tickWifiLoop() {
if (!MDNS.begin(mConfig->sys.deviceName)) {
DPRINTLN(DBG_ERROR, F("Error setting up MDNS responder!"));
} else {
- DBGPRINT(F("[WiFi] mDNS established: "));
+ DBGPRINT(F("mDNS established: "));
DBGPRINT(mConfig->sys.deviceName);
DBGPRINTLN(F(".local"));
}
diff --git a/src/wifi/ahoywifi.h b/src/wifi/ahoywifi.h
index d38701aa..e971c997 100644
--- a/src/wifi/ahoywifi.h
+++ b/src/wifi/ahoywifi.h
@@ -9,6 +9,7 @@
#include "../utils/dbg.h"
#include
+#include
#include
#include
#include "ESPAsyncWebServer.h"