Revert disable OTA & optional Arduino OTA

- new compile flag WLED_ENABLE_AOTA
- modify WLED_CONNECTED macro
- bugfix in Network isConnected() when static IP is set
This commit is contained in:
Blaz Kristan 2025-06-25 11:23:13 +02:00
parent 66869f8341
commit 7973fd84f1
5 changed files with 36 additions and 31 deletions

View File

@ -73,17 +73,13 @@ void NetworkClass::localMAC(uint8_t* MAC)
bool NetworkClass::isConnected() bool NetworkClass::isConnected()
{ {
#if defined(ARDUINO_ARCH_ESP32) && defined(WLED_USE_ETHERNET) return (WiFi.localIP()[0] != 0 && WiFi.status() == WL_CONNECTED) || isEthernet();
return (WiFi.localIP()[0] != 0 && WiFi.status() == WL_CONNECTED) || ETH.localIP()[0] != 0;
#else
return (WiFi.localIP()[0] != 0 && WiFi.status() == WL_CONNECTED);
#endif
} }
bool NetworkClass::isEthernet() bool NetworkClass::isEthernet()
{ {
#if defined(ARDUINO_ARCH_ESP32) && defined(WLED_USE_ETHERNET) #if defined(ARDUINO_ARCH_ESP32) && defined(WLED_USE_ETHERNET)
return (ETH.localIP()[0] != 0); return (ETH.localIP()[0] != 0) && ETH.linkUp();
#endif #endif
return false; return false;
} }

View File

@ -1,7 +1,10 @@
#define WLED_DEFINE_GLOBAL_VARS //only in one source file, wled.cpp! #define WLED_DEFINE_GLOBAL_VARS //only in one source file, wled.cpp!
#include "wled.h" #include "wled.h"
#include "wled_ethernet.h" #include "wled_ethernet.h"
#include <Arduino.h> #ifdef WLED_ENABLE_AOTA
#define NO_OTA_PORT
#include <ArduinoOTA.h>
#endif
#if defined(ARDUINO_ARCH_ESP32) && defined(WLED_DISABLE_BROWNOUT_DET) #if defined(ARDUINO_ARCH_ESP32) && defined(WLED_DISABLE_BROWNOUT_DET)
#include "soc/soc.h" #include "soc/soc.h"
@ -105,8 +108,8 @@ void WLED::loop()
if (!realtimeMode || realtimeOverride || (realtimeMode && useMainSegmentOnly)) // block stuff if WARLS/Adalight is enabled if (!realtimeMode || realtimeOverride || (realtimeMode && useMainSegmentOnly)) // block stuff if WARLS/Adalight is enabled
{ {
if (apActive) dnsServer.processNextRequest(); if (apActive) dnsServer.processNextRequest();
#ifndef WLED_DISABLE_OTA #ifdef WLED_ENABLE_AOTA
if (WLED_CONNECTED && aOtaEnabled && !otaLock && correctPIN) ArduinoOTA.handle(); if (Network.isConnected() && aOtaEnabled && !otaLock && correctPIN) ArduinoOTA.handle();
#endif #endif
handleNightlight(); handleNightlight();
yield(); yield();
@ -469,7 +472,7 @@ void WLED::setup()
if (mqttClientID[0] == 0) sprintf_P(mqttClientID, PSTR("WLED-%*s"), 6, escapedMac.c_str() + 6); if (mqttClientID[0] == 0) sprintf_P(mqttClientID, PSTR("WLED-%*s"), 6, escapedMac.c_str() + 6);
#endif #endif
#ifndef WLED_DISABLE_OTA #ifdef WLED_ENABLE_AOTA
if (aOtaEnabled) { if (aOtaEnabled) {
ArduinoOTA.onStart([]() { ArduinoOTA.onStart([]() {
#ifdef ESP8266 #ifdef ESP8266
@ -709,9 +712,8 @@ void WLED::initInterfaces()
alexaInit(); alexaInit();
#endif #endif
#ifndef WLED_DISABLE_OTA #ifdef WLED_ENABLE_AOTA
if (aOtaEnabled) if (aOtaEnabled) ArduinoOTA.begin();
ArduinoOTA.begin();
#endif #endif
// Set up mDNS responder: // Set up mDNS responder:
@ -782,7 +784,7 @@ void WLED::handleConnection()
if (stac != stacO) { if (stac != stacO) {
stacO = stac; stacO = stac;
DEBUG_PRINTF_P(PSTR("Connected AP clients: %d\n"), (int)stac); DEBUG_PRINTF_P(PSTR("Connected AP clients: %d\n"), (int)stac);
if (!WLED_CONNECTED && wifiConfigured) { // trying to connect, but not connected if (!Network.isConnected() && wifiConfigured) { // trying to connect, but not connected
if (stac) if (stac)
WiFi.disconnect(); // disable search so that AP can work WiFi.disconnect(); // disable search so that AP can work
else else
@ -857,7 +859,7 @@ void WLED::handleConnection()
} }
// If status LED pin is allocated for other uses, does nothing // If status LED pin is allocated for other uses, does nothing
// else blink at 1Hz when WLED_CONNECTED is false (no WiFi, ?? no Ethernet ??) // else blink at 1Hz when Network.isConnected() is false (no WiFi, ?? no Ethernet ??)
// else blink at 2Hz when MQTT is enabled but not connected // else blink at 2Hz when MQTT is enabled but not connected
// else turn the status LED off // else turn the status LED off
#if defined(STATUSLED) #if defined(STATUSLED)
@ -871,7 +873,7 @@ void WLED::handleStatusLED()
} }
#endif #endif
if (WLED_CONNECTED) { if (Network.isConnected()) {
c = RGBW32(0,255,0,0); c = RGBW32(0,255,0,0);
ledStatusType = 2; ledStatusType = 2;
} else if (WLED_MQTT_CONNECTED) { } else if (WLED_MQTT_CONNECTED) {

View File

@ -21,6 +21,9 @@
// You are required to disable over-the-air updates: // You are required to disable over-the-air updates:
//#define WLED_DISABLE_OTA // saves 14kb //#define WLED_DISABLE_OTA // saves 14kb
#ifdef WLED_ENABLE_AOTA
#undef WLED_DISABLE_OTA
#endif
// You can choose some of these features to disable: // You can choose some of these features to disable:
//#define WLED_DISABLE_ALEXA // saves 11kb //#define WLED_DISABLE_ALEXA // saves 11kb
@ -121,10 +124,6 @@
#endif #endif
#include <WiFiUdp.h> #include <WiFiUdp.h>
#include <DNSServer.h> #include <DNSServer.h>
#ifndef WLED_DISABLE_OTA
#define NO_OTA_PORT
#include <ArduinoOTA.h>
#endif
#include <SPIFFSEditor.h> #include <SPIFFSEditor.h>
#include "src/dependencies/time/TimeLib.h" #include "src/dependencies/time/TimeLib.h"
#include "src/dependencies/timezone/Timezone.h" #include "src/dependencies/timezone/Timezone.h"
@ -588,7 +587,7 @@ WLED_GLOBAL bool otaLock _INIT(true); // prevents OTA firmware update
WLED_GLOBAL bool otaLock _INIT(false); // prevents OTA firmware updates without password. ALWAYS enable if system exposed to any public networks WLED_GLOBAL bool otaLock _INIT(false); // prevents OTA firmware updates without password. ALWAYS enable if system exposed to any public networks
#endif #endif
WLED_GLOBAL bool wifiLock _INIT(false); // prevents access to WiFi settings when OTA lock is enabled WLED_GLOBAL bool wifiLock _INIT(false); // prevents access to WiFi settings when OTA lock is enabled
#ifndef WLED_DISABLE_OTA #ifdef WLED_ENABLE_AOTA
WLED_GLOBAL bool aOtaEnabled _INIT(true); // ArduinoOTA allows easy updates directly from the IDE. Careful, it does not auto-disable when OTA lock is on WLED_GLOBAL bool aOtaEnabled _INIT(true); // ArduinoOTA allows easy updates directly from the IDE. Careful, it does not auto-disable when OTA lock is on
#else #else
WLED_GLOBAL bool aOtaEnabled _INIT(false); // ArduinoOTA allows easy updates directly from the IDE. Careful, it does not auto-disable when OTA lock is on WLED_GLOBAL bool aOtaEnabled _INIT(false); // ArduinoOTA allows easy updates directly from the IDE. Careful, it does not auto-disable when OTA lock is on
@ -1024,11 +1023,7 @@ WLED_GLOBAL volatile uint8_t jsonBufferLock _INIT(0);
WLED_GLOBAL unsigned loops _INIT(0); WLED_GLOBAL unsigned loops _INIT(0);
#endif #endif
#ifdef ARDUINO_ARCH_ESP32 #define WLED_CONNECTED (Network.isConnected())
#define WLED_CONNECTED (WiFi.status() == WL_CONNECTED || ETH.localIP()[0] != 0)
#else
#define WLED_CONNECTED (WiFi.status() == WL_CONNECTED)
#endif
#ifndef WLED_AP_SSID_UNIQUE #ifndef WLED_AP_SSID_UNIQUE
#define WLED_SET_AP_SSID() do { \ #define WLED_SET_AP_SSID() do { \

View File

@ -1,9 +1,11 @@
#include "wled.h" #include "wled.h"
#ifdef ESP8266 #ifndef WLED_DISABLE_OTA
#include <Updater.h> #ifdef ESP8266
#else #include <Updater.h>
#include <Update.h> #else
#include <Update.h>
#endif
#endif #endif
#include "html_ui.h" #include "html_ui.h"
#include "html_settings.h" #include "html_settings.h"
@ -387,6 +389,7 @@ void initServer()
createEditHandler(correctPIN); createEditHandler(correctPIN);
static const char _update[] PROGMEM = "/update"; static const char _update[] PROGMEM = "/update";
#ifndef WLED_DISABLE_OTA
//init ota page //init ota page
server.on(_update, HTTP_GET, [](AsyncWebServerRequest *request){ server.on(_update, HTTP_GET, [](AsyncWebServerRequest *request){
if (otaLock) { if (otaLock) {
@ -446,6 +449,13 @@ void initServer()
} }
} }
}); });
#else
const auto notSupported = [](AsyncWebServerRequest *request){
serveMessage(request, 501, FPSTR(s_notimplemented), F("This build does not support OTA update."), 254);
};
server.on(_update, HTTP_GET, notSupported);
server.on(_update, HTTP_POST, notSupported);
#endif
#ifdef WLED_ENABLE_DMX #ifdef WLED_ENABLE_DMX
server.on(F("/dmxmap"), HTTP_GET, [](AsyncWebServerRequest *request){ server.on(F("/dmxmap"), HTTP_GET, [](AsyncWebServerRequest *request){
@ -657,6 +667,7 @@ void serveSettings(AsyncWebServerRequest* request, bool post) {
case SUBPAGE_DMX : content = PAGE_settings_dmx; len = PAGE_settings_dmx_length; break; case SUBPAGE_DMX : content = PAGE_settings_dmx; len = PAGE_settings_dmx_length; break;
#endif #endif
case SUBPAGE_UM : content = PAGE_settings_um; len = PAGE_settings_um_length; break; case SUBPAGE_UM : content = PAGE_settings_um; len = PAGE_settings_um_length; break;
#ifndef WLED_DISABLE_OTA
case SUBPAGE_UPDATE : content = PAGE_update; len = PAGE_update_length; case SUBPAGE_UPDATE : content = PAGE_update; len = PAGE_update_length;
#ifdef ARDUINO_ARCH_ESP32 #ifdef ARDUINO_ARCH_ESP32
if (request->hasArg(F("revert")) && inLocalSubnet(request->client()->remoteIP()) && Update.canRollBack()) { if (request->hasArg(F("revert")) && inLocalSubnet(request->client()->remoteIP()) && Update.canRollBack()) {
@ -670,6 +681,7 @@ void serveSettings(AsyncWebServerRequest* request, bool post) {
} }
#endif #endif
break; break;
#endif
#ifndef WLED_DISABLE_2D #ifndef WLED_DISABLE_2D
case SUBPAGE_2D : content = PAGE_settings_2D; len = PAGE_settings_2D_length; break; case SUBPAGE_2D : content = PAGE_settings_2D; len = PAGE_settings_2D_length; break;
#endif #endif

View File

@ -596,7 +596,7 @@ void getSettingsJS(byte subPage, Print& settingsScript)
snprintf_P(tmp_buf,sizeof(tmp_buf),PSTR("WLED %s (build %d)"),versionString,VERSION); snprintf_P(tmp_buf,sizeof(tmp_buf),PSTR("WLED %s (build %d)"),versionString,VERSION);
printSetClassElementHTML(settingsScript,PSTR("sip"),0,tmp_buf); printSetClassElementHTML(settingsScript,PSTR("sip"),0,tmp_buf);
settingsScript.printf_P(PSTR("sd=\"%s\";"), serverDescription); settingsScript.printf_P(PSTR("sd=\"%s\";"), serverDescription);
#ifdef WLED_DISABLE_OTA #ifndef WLED_ENABLE_AOTA
//hide settings if not compiled //hide settings if not compiled
settingsScript.print(F("toggle('aOTA');")); // hide ArduinoOTA checkbox settingsScript.print(F("toggle('aOTA');")); // hide ArduinoOTA checkbox
#endif #endif