Merge branch 'Aircoookie:main' into pr_fxsegs

This commit is contained in:
mx 2022-11-20 23:48:06 +01:00 committed by GitHub
commit ae7eedf523
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 81 additions and 20 deletions

View File

@ -91,6 +91,10 @@ class AutoSaveUsermod : public Usermod {
#endif #endif
} }
void enable(bool enable) {
enabled = enable;
}
public: public:
// gets called once at boot. Do all initialization that doesn't depend on // gets called once at boot. Do all initialization that doesn't depend on
@ -155,12 +159,24 @@ class AutoSaveUsermod : public Usermod {
* Creating an "u" object allows you to add custom key/value pairs to the Info section of the WLED web UI. * Creating an "u" object allows you to add custom key/value pairs to the Info section of the WLED web UI.
* Below it is shown how this could be used for e.g. a light sensor * Below it is shown how this could be used for e.g. a light sensor
*/ */
//void addToJsonInfo(JsonObject& root) { void addToJsonInfo(JsonObject& root) {
//JsonObject user = root["u"]; JsonObject user = root["u"];
//if (user.isNull()) user = root.createNestedObject("u"); if (user.isNull()) {
//JsonArray data = user.createNestedArray(F("Autosave")); user = root.createNestedObject("u");
//data.add(F("Loaded.")); }
//}
JsonArray infoArr = user.createNestedArray(FPSTR(_name)); // name
String uiDomString = F("<button class=\"btn btn-xs\" onclick=\"requestJson({");
uiDomString += FPSTR(_name);
uiDomString += F(":{");
uiDomString += FPSTR(_autoSaveEnabled);
uiDomString += enabled ? F(":false}});\">") : F(":true}});\">");
uiDomString += F("<i class=\"icons ");
uiDomString += enabled ? "on" : "off";
uiDomString += F("\">&#xe08f;</i></button>");
infoArr.add(uiDomString);
}
/* /*
* addToJsonState() can be used to add custom entries to the /json/state part of the JSON API (state object). * addToJsonState() can be used to add custom entries to the /json/state part of the JSON API (state object).
@ -173,9 +189,20 @@ class AutoSaveUsermod : public Usermod {
* readFromJsonState() can be used to receive data clients send to the /json/state part of the JSON API (state object). * readFromJsonState() can be used to receive data clients send to the /json/state part of the JSON API (state object).
* Values in the state object may be modified by connected clients * Values in the state object may be modified by connected clients
*/ */
//void readFromJsonState(JsonObject& root) { void readFromJsonState(JsonObject& root) {
// if (!initDone) return; // prevent crash on boot applyPreset() if (!initDone) return; // prevent crash on boot applyPreset()
//} bool en = enabled;
JsonObject um = root[FPSTR(_name)];
if (!um.isNull()) {
if (um[FPSTR(_autoSaveEnabled)].is<bool>()) {
en = um[FPSTR(_autoSaveEnabled)].as<bool>();
} else {
String str = um[FPSTR(_autoSaveEnabled)]; // checkbox -> off or on
en = (bool)(str!="off"); // off is guaranteed to be present
}
if (en != enabled) enable(en);
}
}
/* /*
* addToConfig() can be used to add custom persistent settings to the cfg.json file in the "um" (usermod) object. * addToConfig() can be used to add custom persistent settings to the cfg.json file in the "um" (usermod) object.

View File

@ -318,7 +318,7 @@ bool deserializeConfig(JsonObject doc, bool fromFS) {
JsonObject light_tr = light["tr"]; JsonObject light_tr = light["tr"];
CJSON(fadeTransition, light_tr["mode"]); CJSON(fadeTransition, light_tr["mode"]);
int tdd = light_tr["dur"] | -1; int tdd = light_tr["dur"] | -1;
if (tdd >= 0) transitionDelayDefault = tdd * 100; if (tdd >= 0) transitionDelay = transitionDelayDefault = tdd * 100;
CJSON(strip.paletteFade, light_tr["pal"]); CJSON(strip.paletteFade, light_tr["pal"]);
JsonObject light_nl = light["nl"]; JsonObject light_nl = light["nl"];

View File

@ -9,6 +9,7 @@
//Defaults //Defaults
#define DEFAULT_CLIENT_SSID "Your_Network" #define DEFAULT_CLIENT_SSID "Your_Network"
#define DEFAULT_AP_SSID "WLED-AP"
#define DEFAULT_AP_PASS "wled1234" #define DEFAULT_AP_PASS "wled1234"
#define DEFAULT_OTA_PASS "wledota" #define DEFAULT_OTA_PASS "wledota"

View File

@ -133,7 +133,7 @@ void WLED::loop()
ntpLastSyncTime = 0; ntpLastSyncTime = 0;
strip.restartRuntime(); strip.restartRuntime();
} }
if (millis() - lastMqttReconnectAttempt > 30000) { if (millis() - lastMqttReconnectAttempt > 30000 || lastMqttReconnectAttempt == 0) { // lastMqttReconnectAttempt==0 forces immediate broadcast
lastMqttReconnectAttempt = millis(); lastMqttReconnectAttempt = millis();
initMqtt(); initMqtt();
yield(); yield();
@ -366,7 +366,13 @@ void WLED::setup()
#endif #endif
updateFSInfo(); updateFSInfo();
strcpy_P(apSSID, PSTR("WLED-AP")); // otherwise it is empty on first boot until config is saved // generate module IDs must be done before AP setup
escapedMac = WiFi.macAddress();
escapedMac.replace(":", "");
escapedMac.toLowerCase();
WLED_SET_AP_SSID(); // otherwise it is empty on first boot until config is saved
DEBUG_PRINTLN(F("Reading config")); DEBUG_PRINTLN(F("Reading config"));
deserializeConfigFromFS(); deserializeConfigFromFS();
@ -400,10 +406,6 @@ void WLED::setup()
} }
#endif #endif
// generate module IDs
escapedMac = WiFi.macAddress();
escapedMac.replace(":", "");
escapedMac.toLowerCase();
// fill in unique mdns default // fill in unique mdns default
if (strcmp(cmDNS, "x") == 0) sprintf_P(cmDNS, PSTR("wled-%*s"), 6, escapedMac.c_str() + 6); if (strcmp(cmDNS, "x") == 0) sprintf_P(cmDNS, PSTR("wled-%*s"), 6, escapedMac.c_str() + 6);
if (mqttDeviceTopic[0] == 0) sprintf_P(mqttDeviceTopic, PSTR("wled/%*s"), 6, escapedMac.c_str() + 6); if (mqttDeviceTopic[0] == 0) sprintf_P(mqttDeviceTopic, PSTR("wled/%*s"), 6, escapedMac.c_str() + 6);
@ -480,8 +482,8 @@ void WLED::initAP(bool resetAP)
return; return;
if (resetAP) { if (resetAP) {
strcpy_P(apSSID, PSTR("WLED-AP")); WLED_SET_AP_SSID();
strcpy_P(apPass, PSTR(DEFAULT_AP_PASS)); strcpy_P(apPass, PSTR(WLED_AP_PASS));
} }
DEBUG_PRINT(F("Opening access point ")); DEBUG_PRINT(F("Opening access point "));
DEBUG_PRINTLN(apSSID); DEBUG_PRINTLN(apSSID);
@ -802,6 +804,7 @@ void WLED::handleConnection()
initInterfaces(); initInterfaces();
userConnected(); userConnected();
usermods.connected(); usermods.connected();
lastMqttReconnectAttempt = 0; // force immediate update
// shut down AP // shut down AP
if (apBehavior != AP_BEHAVIOR_ALWAYS && apActive) { if (apBehavior != AP_BEHAVIOR_ALWAYS && apActive) {

View File

@ -8,7 +8,7 @@
*/ */
// version code in format yymmddb (b = daily build) // version code in format yymmddb (b = daily build)
#define VERSION 2211190 #define VERSION 2211200
//uncomment this if you have a "my_config.h" file you'd like to use //uncomment this if you have a "my_config.h" file you'd like to use
//#define WLED_USE_MY_CONFIG //#define WLED_USE_MY_CONFIG
@ -175,6 +175,19 @@ using PSRAMDynamicJsonDocument = BasicJsonDocument<PSRAM_Allocator>;
#define CLIENT_PASS "" #define CLIENT_PASS ""
#endif #endif
#if defined(WLED_AP_PASS) && !defined(WLED_AP_SSID)
#error WLED_AP_PASS is defined but WLED_AP_SSID is still the default. \
Please change WLED_AP_SSID to something unique.
#endif
#ifndef WLED_AP_SSID
#define WLED_AP_SSID DEFAULT_AP_SSID
#endif
#ifndef WLED_AP_PASS
#define WLED_AP_PASS DEFAULT_AP_PASS
#endif
#ifndef SPIFFS_EDITOR_AIRCOOOKIE #ifndef SPIFFS_EDITOR_AIRCOOOKIE
#error You are not using the Aircoookie fork of the ESPAsyncWebserver library.\ #error You are not using the Aircoookie fork of the ESPAsyncWebserver library.\
Using upstream puts your WiFi password at risk of being served by the filesystem.\ Using upstream puts your WiFi password at risk of being served by the filesystem.\
@ -229,7 +242,7 @@ WLED_GLOBAL char versionString[] _INIT(TOSTRING(WLED_VERSION));
#define WLED_CODENAME "Hoshi" #define WLED_CODENAME "Hoshi"
// AP and OTA default passwords (for maximum security change them!) // AP and OTA default passwords (for maximum security change them!)
WLED_GLOBAL char apPass[65] _INIT(DEFAULT_AP_PASS); WLED_GLOBAL char apPass[65] _INIT(WLED_AP_PASS);
WLED_GLOBAL char otaPass[33] _INIT(DEFAULT_OTA_PASS); WLED_GLOBAL char otaPass[33] _INIT(DEFAULT_OTA_PASS);
// Hardware and pin config // Hardware and pin config
@ -729,6 +742,23 @@ WLED_GLOBAL volatile uint8_t jsonBufferLock _INIT(0);
#define WLED_WIFI_CONFIGURED (strlen(clientSSID) >= 1 && strcmp(clientSSID, DEFAULT_CLIENT_SSID) != 0) #define WLED_WIFI_CONFIGURED (strlen(clientSSID) >= 1 && strcmp(clientSSID, DEFAULT_CLIENT_SSID) != 0)
#define WLED_MQTT_CONNECTED (mqtt != nullptr && mqtt->connected()) #define WLED_MQTT_CONNECTED (mqtt != nullptr && mqtt->connected())
#ifndef WLED_AP_SSID_UNIQUE
#define WLED_SET_AP_SSID() do { \
strcpy_P(apSSID, PSTR(WLED_AP_SSID)); \
} while(0)
#else
#define WLED_SET_AP_SSID() do { \
strcpy_P(apSSID, PSTR(WLED_AP_SSID)); \
snprintf_P(\
apSSID+strlen(WLED_AP_SSID), \
sizeof(apSSID)-strlen(WLED_AP_SSID), \
PSTR("-%*s"), \
6, \
escapedMac.c_str() + 6\
); \
} while(0)
#endif
//macro to convert F to const //macro to convert F to const
#define SET_F(x) (const char*)F(x) #define SET_F(x) (const char*)F(x)