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
}
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("\">&#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).
@ -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.

View File

@ -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"];

View File

@ -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"

View File

@ -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) {

View File

@ -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)