Merge branch 'Aircoookie:main' into pr_fxsegs
This commit is contained in:
commit
ae7eedf523
@ -91,6 +91,10 @@ class AutoSaveUsermod : public Usermod {
|
||||
#endif
|
||||
}
|
||||
|
||||
void enable(bool enable) {
|
||||
enabled = enable;
|
||||
}
|
||||
|
||||
public:
|
||||
|
||||
// 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.
|
||||
* Below it is shown how this could be used for e.g. a light sensor
|
||||
*/
|
||||
//void addToJsonInfo(JsonObject& root) {
|
||||
//JsonObject user = root["u"];
|
||||
//if (user.isNull()) user = root.createNestedObject("u");
|
||||
//JsonArray data = user.createNestedArray(F("Autosave"));
|
||||
//data.add(F("Loaded."));
|
||||
//}
|
||||
void addToJsonInfo(JsonObject& root) {
|
||||
JsonObject user = root["u"];
|
||||
if (user.isNull()) {
|
||||
user = root.createNestedObject("u");
|
||||
}
|
||||
|
||||
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("\"></i></button>");
|
||||
infoArr.add(uiDomString);
|
||||
}
|
||||
|
||||
/*
|
||||
* 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).
|
||||
* Values in the state object may be modified by connected clients
|
||||
*/
|
||||
//void readFromJsonState(JsonObject& root) {
|
||||
// if (!initDone) return; // prevent crash on boot applyPreset()
|
||||
//}
|
||||
void readFromJsonState(JsonObject& root) {
|
||||
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.
|
||||
|
@ -318,7 +318,7 @@ bool deserializeConfig(JsonObject doc, bool fromFS) {
|
||||
JsonObject light_tr = light["tr"];
|
||||
CJSON(fadeTransition, light_tr["mode"]);
|
||||
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"]);
|
||||
|
||||
JsonObject light_nl = light["nl"];
|
||||
|
@ -9,6 +9,7 @@
|
||||
|
||||
//Defaults
|
||||
#define DEFAULT_CLIENT_SSID "Your_Network"
|
||||
#define DEFAULT_AP_SSID "WLED-AP"
|
||||
#define DEFAULT_AP_PASS "wled1234"
|
||||
#define DEFAULT_OTA_PASS "wledota"
|
||||
|
||||
|
@ -133,7 +133,7 @@ void WLED::loop()
|
||||
ntpLastSyncTime = 0;
|
||||
strip.restartRuntime();
|
||||
}
|
||||
if (millis() - lastMqttReconnectAttempt > 30000) {
|
||||
if (millis() - lastMqttReconnectAttempt > 30000 || lastMqttReconnectAttempt == 0) { // lastMqttReconnectAttempt==0 forces immediate broadcast
|
||||
lastMqttReconnectAttempt = millis();
|
||||
initMqtt();
|
||||
yield();
|
||||
@ -366,7 +366,13 @@ void WLED::setup()
|
||||
#endif
|
||||
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"));
|
||||
deserializeConfigFromFS();
|
||||
|
||||
@ -400,10 +406,6 @@ void WLED::setup()
|
||||
}
|
||||
#endif
|
||||
|
||||
// generate module IDs
|
||||
escapedMac = WiFi.macAddress();
|
||||
escapedMac.replace(":", "");
|
||||
escapedMac.toLowerCase();
|
||||
// fill in unique mdns default
|
||||
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);
|
||||
@ -480,8 +482,8 @@ void WLED::initAP(bool resetAP)
|
||||
return;
|
||||
|
||||
if (resetAP) {
|
||||
strcpy_P(apSSID, PSTR("WLED-AP"));
|
||||
strcpy_P(apPass, PSTR(DEFAULT_AP_PASS));
|
||||
WLED_SET_AP_SSID();
|
||||
strcpy_P(apPass, PSTR(WLED_AP_PASS));
|
||||
}
|
||||
DEBUG_PRINT(F("Opening access point "));
|
||||
DEBUG_PRINTLN(apSSID);
|
||||
@ -802,6 +804,7 @@ void WLED::handleConnection()
|
||||
initInterfaces();
|
||||
userConnected();
|
||||
usermods.connected();
|
||||
lastMqttReconnectAttempt = 0; // force immediate update
|
||||
|
||||
// shut down AP
|
||||
if (apBehavior != AP_BEHAVIOR_ALWAYS && apActive) {
|
||||
|
@ -8,7 +8,7 @@
|
||||
*/
|
||||
|
||||
// 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
|
||||
//#define WLED_USE_MY_CONFIG
|
||||
@ -175,6 +175,19 @@ using PSRAMDynamicJsonDocument = BasicJsonDocument<PSRAM_Allocator>;
|
||||
#define CLIENT_PASS ""
|
||||
#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
|
||||
#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.\
|
||||
@ -229,7 +242,7 @@ WLED_GLOBAL char versionString[] _INIT(TOSTRING(WLED_VERSION));
|
||||
#define WLED_CODENAME "Hoshi"
|
||||
|
||||
// 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);
|
||||
|
||||
// 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_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
|
||||
#define SET_F(x) (const char*)F(x)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user