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: a2cc7be221adca01Author: 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: 153000b5e84b944aAuthor: 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: f1964917063fbab6Author: 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: 50a2eb134af90cbcAuthor: 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:
137
src/main.cpp
137
src/main.cpp
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user