Remove old and modified libs, switch to ESPAsyncWebserver, add support for ESP32-H2 and multiple Ethernet modules (#455)

* Asyncwebserver

* Squashed commit of the following:

commit 575ef02f593918ec6654c87407a4d11fc17071b8
Author: technyon <j.o.schuemann@gmx.de>
Date:   Mon Aug 12 17:56:11 2024 +0200

    merge master

commit 35e5adf4ecd80f9829e8801181f35dd2c1d94759
Merge: a2cc7be2 21adca01
Author: technyon <j.o.schuemann@gmx.de>
Date:   Mon Aug 12 17:41:04 2024 +0200

    Merge branch 'master' of github.com:technyon/nuki_hub into DM9051

commit a2cc7be2954cbd8767ab8186296c0b14134d1d0b
Author: technyon <j.o.schuemann@gmx.de>
Date:   Mon Aug 12 10:51:50 2024 +0200

    update nuki ble

commit 20c809f3dca28b29b219d1ff3a183f1981316de5
Author: technyon <j.o.schuemann@gmx.de>
Date:   Mon Aug 12 10:44:46 2024 +0200

    backup

commit dd41c218efb5270f5efeb734e64dff695920db16
Merge: 153000b5 e84b944a
Author: technyon <j.o.schuemann@gmx.de>
Date:   Mon Aug 12 10:40:03 2024 +0200

    Merge branch 'master' of github.com:technyon/nuki_hub into DM9051

commit 153000b5b1af7df1fbeb5263df94eb26f689cc0a
Author: technyon <j.o.schuemann@gmx.de>
Date:   Mon Aug 12 10:23:07 2024 +0200

    fix linker error

commit a93bbfbfc4301e46ff3696a763dd13c6c89efefb
Author: technyon <j.o.schuemann@gmx.de>
Date:   Sun Aug 11 11:27:07 2024 +0200

    backup

commit f611c75ce8c35f829bcad6cf7e86188f4b3ec331
Merge: f1964917 063fbab6
Author: technyon <j.o.schuemann@gmx.de>
Date:   Sun Aug 11 11:24:47 2024 +0200

    merge master

commit f1964917b4dade3920f1ecdb699c58630199e6da
Author: technyon <j.o.schuemann@gmx.de>
Date:   Sat Aug 10 15:17:45 2024 +0200

    update platformio.ini

commit f448e5e8a7e93be38e09e2ab0b622199a3721af6
Author: technyon <j.o.schuemann@gmx.de>
Date:   Sat Aug 10 11:28:09 2024 +0200

    add SPIClass instance for DM9051

commit 1f190e9aa08033535a2eb442a92e6e20409bbda1
Author: technyon <j.o.schuemann@gmx.de>
Date:   Sat Aug 10 11:22:26 2024 +0200

    add definitions and constructor for DM9051

commit 726b3602ae91594ee1210ad5b6714f75cc5e42a7
Merge: 50a2eb13 4af90cbc
Author: technyon <j.o.schuemann@gmx.de>
Date:   Sat Aug 10 10:19:34 2024 +0200

    merge master

commit 50a2eb136d75d90921f1c6974f18bc107bddc123
Author: technyon <j.o.schuemann@gmx.de>
Date:   Fri Aug 9 11:52:09 2024 +0200

    add comment

commit 9437e485cae169efdf8e5a7bf188a1c7e792d1e5
Author: technyon <j.o.schuemann@gmx.de>
Date:   Sun Aug 4 08:29:21 2024 +0200

    move LAN8720 definitions to seperate file

* Remove Core 2 Ethernet library

* Custom Ethernet

* GPIO and Preferences

* H2
This commit is contained in:
iranl
2024-08-16 13:02:37 +02:00
committed by GitHub
parent 346c5c65d1
commit 9a896a7ab1
206 changed files with 4055 additions and 20829 deletions

View File

@@ -1,16 +1,14 @@
#define IS_VALID_DETECT 0xa00ab00bc00bd00d;
#include "Arduino.h"
#include "hardware/W5500EthServer.h"
#include "hardware/WifiEthServer.h"
#include "esp_crt_bundle.h"
#include "esp_ota_ops.h"
#include "esp_http_client.h"
#include "esp_https_ota.h"
#include <esp_task_wdt.h>
#include "Config.h"
#ifndef NUKI_HUB_UPDATER
#include "Config.h"
#include "NukiWrapper.h"
#include "NukiNetworkLock.h"
#include "PresenceDetection.h"
@@ -28,7 +26,6 @@
#include <WString.h>
#include <MycilaWebSerial.h>
AsyncWebServer webserialserver(81);
char log_print_buffer[1024];
NukiNetworkLock* networkLock = nullptr;
@@ -53,7 +50,6 @@ int64_t restartTs = ((2^64) - (5 * 1000 * 60000)) / 1000;
#include "../../src/WebCfgServer.h"
#include "../../src/Logger.h"
#include "../../src/PreferencesKeys.h"
#include "../../src/Config.h"
#include "../../src/RestartReason.h"
#include "../../src/NukiNetwork.h"
@@ -61,16 +57,17 @@ int64_t restartTs = 10 * 1000 * 60000;
#endif
AsyncWebServer* asyncServer = nullptr;
NukiNetwork* network = nullptr;
WebCfgServer* webCfgServer = nullptr;
Preferences* preferences = nullptr;
EthServer* ethServer = nullptr;
RTC_NOINIT_ATTR int restartReason;
RTC_NOINIT_ATTR uint64_t restartReasonValidDetect;
RTC_NOINIT_ATTR bool rebuildGpioRequested;
RTC_NOINIT_ATTR uint64_t bootloopValidDetect;
RTC_NOINIT_ATTR int8_t bootloopCounter;
RTC_NOINIT_ATTR bool forceEnableWebServer;
bool restartReason_isValid;
RestartReason currentRestartReason = RestartReason::NotApplicable;
@@ -109,7 +106,7 @@ int _log_vprintf(const char *fmt, va_list args) {
void setReroute(){
esp_log_set_vprintf(_log_vprintf);
if(preferences->getBool(preference_mqtt_log_enabled)) esp_log_level_set("*", ESP_LOG_INFO);
else
else
{
esp_log_level_set("*", ESP_LOG_DEBUG);
esp_log_level_set("nvs", ESP_LOG_INFO);
@@ -122,7 +119,6 @@ void networkTask(void *pvParameters)
{
int64_t networkLoopTs = 0;
bool secrets = preferences->getBool(preference_show_secrets, false);
bool webEnabled = preferences->getBool(preference_webserver_enabled, true);
bool reroute = true;
while(true)
@@ -149,9 +145,6 @@ void networkTask(void *pvParameters)
}
#endif
if(connected && openerEnabled) networkOpener->update();
if(preferences->getBool(preference_webserver_enabled, true)) webCfgServer->update();
#else
webCfgServer->update();
#endif
if((esp_timer_get_time() / 1000) - networkLoopTs > 120000)
@@ -328,20 +321,33 @@ void otaTask(void *pvParameter)
};
Log->print(F("Attempting to download update from "));
Log->println(config.url);
esp_err_t ret = esp_https_ota(&ota_config);
if (ret == ESP_OK) {
Log->println("OTA Succeeded, Rebooting...");
esp_ota_set_boot_partition(esp_ota_get_next_update_partition(NULL));
restartEsp(RestartReason::OTACompleted);
} else {
Log->println("Firmware upgrade failed");
restartEsp(RestartReason::OTAAborted);
}
while (1) {
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
esp_task_wdt_reset();
int retryMax = 3;
int retryCount = 0;
while (retryCount <= retryMax)
{
esp_err_t ret = esp_https_ota(&ota_config);
if (ret == ESP_OK) {
Log->println("OTA Succeeded, Rebooting...");
esp_ota_set_boot_partition(esp_ota_get_next_update_partition(NULL));
restartEsp(RestartReason::OTACompleted);
break;
} else {
Log->println("Firmware upgrade failed, retrying in 5 seconds");
retryCount++;
esp_task_wdt_reset();
delay(5000);
continue;
}
while (1) {
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}
Log->println("Firmware upgrade failed, restarting");
esp_ota_set_boot_partition(esp_ota_get_next_update_partition(NULL));
restartEsp(RestartReason::OTAAborted);
}
void setupTasks(bool ota)
@@ -370,22 +376,6 @@ void setupTasks(bool ota)
}
}
void initEthServer(const NetworkDeviceType device)
{
switch (device)
{
case NetworkDeviceType::W5500:
ethServer = new W5500EthServer(80);
break;
case NetworkDeviceType::WiFi:
ethServer = new WifiEthServer(80);
break;
default:
ethServer = new WifiEthServer(80);
break;
}
}
void setup()
{
esp_log_level_set("*", ESP_LOG_ERROR);
@@ -395,11 +385,13 @@ void setup()
preferences = new Preferences();
preferences->begin("nukihub", false);
bool firstStart = initPreferences(preferences);
bool doOta = false;
uint8_t partitionType = checkPartition();
initializeRestartReason();
if((partitionType==1 && preferences->getString(preference_ota_updater_url, "").length() > 0) || (partitionType==2 && preferences->getString(preference_ota_main_url, "").length() > 0)) doOta = true;
#ifndef NUKI_HUB_UPDATER
if(preferences->getBool(preference_enable_bootloop_reset, false))
{
@@ -408,17 +400,31 @@ void setup()
#endif
#ifdef NUKI_HUB_UPDATER
Log->print(F("Nuki Hub OTA version ")); Log->println(NUKI_HUB_VERSION);
Log->print(F("Nuki Hub OTA build ")); Log->println(NUKI_HUB_BUILD);
Log->print(F("Nuki Hub OTA version "));
Log->println(NUKI_HUB_VERSION);
Log->print(F("Nuki Hub OTA build "));
Log->println();
if(preferences->getString(preference_updater_version, "") != NUKI_HUB_VERSION) preferences->putString(preference_updater_version, NUKI_HUB_VERSION);
if(preferences->getString(preference_updater_build, "") != NUKI_HUB_BUILD) preferences->putString(preference_updater_build, NUKI_HUB_BUILD);
if(preferences->getString(preference_updater_date, "") != NUKI_HUB_DATE) preferences->putString(preference_updater_date, NUKI_HUB_DATE);
network = new NukiNetwork(preferences);
network->initialize();
initEthServer(network->networkDeviceType());
webCfgServer = new WebCfgServer(network, ethServer, preferences, network->networkDeviceType() == NetworkDeviceType::WiFi, partitionType);
webCfgServer->initialize();
if(!doOta)
{
asyncServer = new AsyncWebServer(80);
webCfgServer = new WebCfgServer(network, preferences, network->networkDeviceType() == NetworkDeviceType::WiFi, partitionType, asyncServer);
webCfgServer->initialize();
asyncServer->onNotFound([](AsyncWebServerRequest* request) { request->redirect("/"); });
asyncServer->begin();
}
#else
Log->print(F("Nuki Hub version ")); Log->println(NUKI_HUB_VERSION);
Log->print(F("Nuki Hub build ")); Log->println(NUKI_HUB_BUILD);
Log->print(F("Nuki Hub version "));
Log->println(NUKI_HUB_VERSION);
Log->print(F("Nuki Hub build "));
Log->println(NUKI_HUB_BUILD);
uint32_t devIdOpener = preferences->getUInt(preference_device_id_opener);
@@ -470,8 +476,6 @@ void setup()
networkOpener->initialize();
}
initEthServer(network->networkDeviceType());
Log->println(lockEnabled ? F("Nuki Lock enabled") : F("Nuki Lock disabled"));
if(lockEnabled)
{
@@ -486,20 +490,33 @@ void setup()
nukiOpener->initialize();
}
if(preferences->getBool(preference_webserver_enabled, true))
if(forceEnableWebServer || preferences->getBool(preference_webserver_enabled, true) || preferences->getBool(preference_webserial_enabled, false))
{
webCfgServer = new WebCfgServer(nuki, nukiOpener, network, gpio, ethServer, preferences, network->networkDeviceType() == NetworkDeviceType::WiFi, partitionType);
webCfgServer->initialize();
}
if(!doOta)
{
asyncServer = new AsyncWebServer(80);
WebSerial.setAuthentication(preferences->getString(preference_cred_user), preferences->getString(preference_cred_password));
WebSerial.begin(&webserialserver);
WebSerial.setBuffer(1024);
webserialserver.onNotFound([](AsyncWebServerRequest* request) { request->redirect("/webserial"); });
webserialserver.begin();
if(forceEnableWebServer || preferences->getBool(preference_webserver_enabled, true))
{
webCfgServer = new WebCfgServer(nuki, nukiOpener, network, gpio, preferences, network->networkDeviceType() == NetworkDeviceType::WiFi, partitionType, asyncServer);
webCfgServer->initialize();
asyncServer->onNotFound([](AsyncWebServerRequest* request) { request->redirect("/"); });
}
else asyncServer->onNotFound([](AsyncWebServerRequest* request) { request->redirect("/webserial"); });
if(preferences->getBool(preference_webserial_enabled, false))
{
WebSerial.setAuthentication(preferences->getString(preference_cred_user), preferences->getString(preference_cred_password));
WebSerial.begin(asyncServer);
WebSerial.setBuffer(1024);
}
asyncServer->begin();
}
}
#endif
if((partitionType==1 && preferences->getString(preference_ota_updater_url, "").length() > 0) || (partitionType==2 && preferences->getString(preference_ota_main_url, "").length() > 0)) setupTasks(true);
if(doOta) setupTasks(true);
else setupTasks(false);
}