mirror of
https://github.com/wled/WLED.git
synced 2025-07-27 12:46:38 +00:00
New WiFi logic
This commit is contained in:
parent
31e4e7c709
commit
d13d60d752
@ -20,7 +20,7 @@ const char PAGE_msg[] PROGMEM = R"=====(<!DOCTYPE html>
|
|||||||
const char PAGE_update[] PROGMEM = R"=====(<!DOCTYPE html>
|
const char PAGE_update[] PROGMEM = R"=====(<!DOCTYPE html>
|
||||||
<html><head><meta content='width=device-width' name='viewport'><title>WLED Update</title><script>function B(){window.history.back()}</script>
|
<html><head><meta content='width=device-width' name='viewport'><title>WLED Update</title><script>function B(){window.history.back()}</script>
|
||||||
%CSS%.bt{background:var(--bCol);color:var(--tCol);font-family:var(--cFn),sans-serif;border:.3ch solid var(--bCol);display:inline-block;filter:drop-shadow(-5px -5px 5px var(--sCol));font-size:20px;margin:8px;margin-top:12px}input[type=file]{font-size:16px}body{font-family:var(--cFn),sans-serif;text-align:center;background:var(--cCol);color:var(--tCol);line-height:200%%}</style></head>
|
%CSS%.bt{background:var(--bCol);color:var(--tCol);font-family:var(--cFn),sans-serif;border:.3ch solid var(--bCol);display:inline-block;filter:drop-shadow(-5px -5px 5px var(--sCol));font-size:20px;margin:8px;margin-top:12px}input[type=file]{font-size:16px}body{font-family:var(--cFn),sans-serif;text-align:center;background:var(--cCol);color:var(--tCol);line-height:200%%}</style></head>
|
||||||
<body><h2>WLED Software Update</h2>Installed version: 0.8.5<br>Download the latest binary: <a href="https://github.com/Aircoookie/WLED/releases"><img src="https://img.shields.io/github/release/Aircoookie/WLED.svg?style=flat-square"></a><br><form method='POST' action='/update' enctype='multipart/form-data'><input type='file' class="bt" name='update' required><br><input type='submit' class="bt" value='Update!'></form><button type="button" class="bt" onclick="B()">Back</button></body></html>)=====";
|
<body><h2>WLED Software Update</h2>Installed version: 0.8.6<br>Download the latest binary: <a href="https://github.com/Aircoookie/WLED/releases"><img src="https://img.shields.io/github/release/Aircoookie/WLED.svg?style=flat-square"></a><br><form method='POST' action='/update' enctype='multipart/form-data'><input type='file' class="bt" name='update' required><br><input type='submit' class="bt" value='Update!'></form><button type="button" class="bt" onclick="B()">Back</button></body></html>)=====";
|
||||||
|
|
||||||
|
|
||||||
//new user welcome page
|
//new user welcome page
|
||||||
|
@ -28,7 +28,7 @@ const char PAGE_settings_wifi[] PROGMEM = R"=====(<!DOCTYPE html>
|
|||||||
%CSS%%SCSS%</head><body onload="GetV()">
|
%CSS%%SCSS%</head><body onload="GetV()">
|
||||||
<form id="form_s" name="Sf" method="post">
|
<form id="form_s" name="Sf" method="post">
|
||||||
<div class="helpB"><button type="button" onclick="H()">?</button></div>
|
<div class="helpB"><button type="button" onclick="H()">?</button></div>
|
||||||
<button type="button" onclick="B()">Back</button><button type="submit">Save & Reboot</button><hr>
|
<button type="button" onclick="B()">Back</button><button type="submit">Save & Connect</button><hr>
|
||||||
<h2>WiFi setup</h2>
|
<h2>WiFi setup</h2>
|
||||||
<h3>Connect to existing network</h3>
|
<h3>Connect to existing network</h3>
|
||||||
Network name (SSID, empty to not connect): <br><input name="CS" maxlength="32"><br>
|
Network name (SSID, empty to not connect): <br><input name="CS" maxlength="32"><br>
|
||||||
@ -50,15 +50,20 @@ Static subnet mask:<br>
|
|||||||
<input name="S3" type="number" min="0" max="255" required><br>
|
<input name="S3" type="number" min="0" max="255" required><br>
|
||||||
mDNS address (leave empty for no mDNS):<br/>
|
mDNS address (leave empty for no mDNS):<br/>
|
||||||
http:// <input name="CM" maxlength="32"> .local<br>
|
http:// <input name="CM" maxlength="32"> .local<br>
|
||||||
Try connecting before opening AP for: <input name="AT" type="number" min="0" max="255" required> s <br>
|
|
||||||
Client IP: <span class="sip"> Not connected </span><br>
|
Client IP: <span class="sip"> Not connected </span><br>
|
||||||
<h3>Configure Access Point</h3>
|
<h3>Configure Access Point</h3>
|
||||||
AP SSID (leave empty for no AP):<br><input name="AS" maxlength="32"><br>
|
AP SSID (leave empty for no AP):<br><input name="AS" maxlength="32"><br>
|
||||||
Hide AP name: <input type="checkbox" name="AH"><br>
|
Hide AP name: <input type="checkbox" name="AH"><br>
|
||||||
AP password (leave empty for open):<br> <input type="password" name="AP" maxlength="63"><br>
|
AP password (leave empty for open):<br> <input type="password" name="AP" maxlength="63"><br>
|
||||||
Access Point WiFi channel: <input name="AC" type="number" min="1" max="13" required><br>
|
Access Point WiFi channel: <input name="AC" type="number" min="1" max="13" required><br>
|
||||||
|
AP opens:
|
||||||
|
<select name="AB">
|
||||||
|
<option value="0">No connection after boot</option>
|
||||||
|
<option value="1">Disconnected</option>
|
||||||
|
<option value="2">Always</option>
|
||||||
|
<option value="3">Never (not recommended)</option></select><br>
|
||||||
AP IP: <span class="sip"> Not active </span><hr>
|
AP IP: <span class="sip"> Not active </span><hr>
|
||||||
<button type="button" onclick="B()">Back</button><button type="submit">Save & Reboot</button>
|
<button type="button" onclick="B()">Back</button><button type="submit">Save & Connect</button>
|
||||||
</form>
|
</form>
|
||||||
</body>
|
</body>
|
||||||
</html>)=====";
|
</html>)=====";
|
||||||
@ -390,9 +395,6 @@ The password should be changed when OTA is enabled.<br>
|
|||||||
<b>Disable OTA when not in use, otherwise an attacker can reflash device software!</b><br>
|
<b>Disable OTA when not in use, otherwise an attacker can reflash device software!</b><br>
|
||||||
<i>Settings on this page are only changable if OTA lock is disabled!</i><br>
|
<i>Settings on this page are only changable if OTA lock is disabled!</i><br>
|
||||||
Deny access to WiFi settings if locked: <input type="checkbox" name="OW"><br><br>
|
Deny access to WiFi settings if locked: <input type="checkbox" name="OW"><br><br>
|
||||||
Disable recovery AP: <input type="checkbox" name="NA"><br>
|
|
||||||
In case of an error there will be no wireless recovery possible!<br>
|
|
||||||
Completely disables all Access Point functions.<br><br>
|
|
||||||
Factory reset: <input type="checkbox" name="RS"><br>
|
Factory reset: <input type="checkbox" name="RS"><br>
|
||||||
All EEPROM content (settings) will be erased.<br><br>
|
All EEPROM content (settings) will be erased.<br><br>
|
||||||
HTTP traffic is unencrypted. An attacker in the same network can intercept form data!
|
HTTP traffic is unencrypted. An attacker in the same network can intercept form data!
|
||||||
@ -400,7 +402,7 @@ HTTP traffic is unencrypted. An attacker in the same network can intercept form
|
|||||||
<button type="button" onclick="U()">Manual OTA Update</button><br>
|
<button type="button" onclick="U()">Manual OTA Update</button><br>
|
||||||
Enable ArduinoOTA: <input type="checkbox" name="AO"><br>
|
Enable ArduinoOTA: <input type="checkbox" name="AO"><br>
|
||||||
<h3>About</h3>
|
<h3>About</h3>
|
||||||
<a href="https://github.com/Aircoookie/WLED" target="_blank">WLED</a> version 0.8.5<br><br>
|
<a href="https://github.com/Aircoookie/WLED" target="_blank">WLED</a> version 0.8.6<br><br>
|
||||||
<a href="https://github.com/Aircoookie/WLED/wiki/Contributors-&-About" target="_blank">Contributors, dependencies and special thanks</a><br>
|
<a href="https://github.com/Aircoookie/WLED/wiki/Contributors-&-About" target="_blank">Contributors, dependencies and special thanks</a><br>
|
||||||
A huge thank you to everyone who helped me create WLED!<br><br>
|
A huge thank you to everyone who helped me create WLED!<br><br>
|
||||||
(c) 2016-2019 Christian Schwinne <br>
|
(c) 2016-2019 Christian Schwinne <br>
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
*/
|
*/
|
||||||
/*
|
/*
|
||||||
* @title WLED project sketch
|
* @title WLED project sketch
|
||||||
* @version 0.8.5-dev
|
* @version 0.8.6
|
||||||
* @author Christian Schwinne
|
* @author Christian Schwinne
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -30,7 +30,7 @@
|
|||||||
//#define WLED_ENABLE_FS_EDITOR //enable /edit page for editing SPIFFS content. Will also be disabled with OTA lock
|
//#define WLED_ENABLE_FS_EDITOR //enable /edit page for editing SPIFFS content. Will also be disabled with OTA lock
|
||||||
|
|
||||||
//to toggle usb serial debug (un)comment the following line
|
//to toggle usb serial debug (un)comment the following line
|
||||||
#define WLED_DEBUG
|
//#define WLED_DEBUG
|
||||||
|
|
||||||
|
|
||||||
//library inclusions
|
//library inclusions
|
||||||
@ -99,8 +99,8 @@
|
|||||||
|
|
||||||
|
|
||||||
//version code in format yymmddb (b = daily build)
|
//version code in format yymmddb (b = daily build)
|
||||||
#define VERSION 1910201
|
#define VERSION 1910251
|
||||||
char versionString[] = "0.8.5";
|
char versionString[] = "0.8.6";
|
||||||
|
|
||||||
|
|
||||||
//AP and OTA default passwords (for maximum change them!)
|
//AP and OTA default passwords (for maximum change them!)
|
||||||
@ -123,9 +123,9 @@ char cmDNS[33] = "x"; //mDNS address (placeholder, will
|
|||||||
char apSSID[33] = ""; //AP off by default (unless setup)
|
char apSSID[33] = ""; //AP off by default (unless setup)
|
||||||
byte apChannel = 1; //2.4GHz WiFi AP channel (1-13)
|
byte apChannel = 1; //2.4GHz WiFi AP channel (1-13)
|
||||||
byte apHide = 0; //hidden AP SSID
|
byte apHide = 0; //hidden AP SSID
|
||||||
byte apWaitTimeSecs = 32; //time to wait for connection before opening AP
|
//byte apWaitTimeSecs = 32; //time to wait for connection before opening AP
|
||||||
bool apAlwaysOn = false;
|
byte apBehavior = 0; //0: Open AP when no connection after boot 1: Open when no connection 2: Always open 3: Only when button pressed for 6 sec
|
||||||
bool recoveryAPDisabled = false; //never open AP (not recommended)
|
//bool recoveryAPDisabled = false; //never open AP (not recommended)
|
||||||
IPAddress staticIP(0, 0, 0, 0); //static IP of ESP
|
IPAddress staticIP(0, 0, 0, 0); //static IP of ESP
|
||||||
IPAddress staticGateway(0, 0, 0, 0); //gateway (router) IP
|
IPAddress staticGateway(0, 0, 0, 0); //gateway (router) IP
|
||||||
IPAddress staticSubnet(255, 255, 255, 0); //most common subnet in home networks
|
IPAddress staticSubnet(255, 255, 255, 0); //most common subnet in home networks
|
||||||
@ -335,8 +335,6 @@ unsigned long hueLastRequestSent = 0;
|
|||||||
bool hueAuthRequired = false;
|
bool hueAuthRequired = false;
|
||||||
bool hueReceived = false;
|
bool hueReceived = false;
|
||||||
bool hueStoreAllowed = false, hueNewKey = false;
|
bool hueStoreAllowed = false, hueNewKey = false;
|
||||||
//unsigned long huePollIntervalMsTemp = huePollIntervalMs;
|
|
||||||
//bool hueAttempt = false;
|
|
||||||
|
|
||||||
//overlays
|
//overlays
|
||||||
byte overlayCurrent = overlayDefault;
|
byte overlayCurrent = overlayDefault;
|
||||||
|
@ -134,8 +134,8 @@ void saveSettingsToEEPROM()
|
|||||||
EEPROM.write(372, useRGBW);
|
EEPROM.write(372, useRGBW);
|
||||||
EEPROM.write(373, effectPaletteDefault);
|
EEPROM.write(373, effectPaletteDefault);
|
||||||
EEPROM.write(374, strip.paletteFade);
|
EEPROM.write(374, strip.paletteFade);
|
||||||
EEPROM.write(375, apWaitTimeSecs);
|
//EEPROM.write(375, apWaitTimeSecs);
|
||||||
EEPROM.write(376, recoveryAPDisabled);
|
EEPROM.write(376, apBehavior);
|
||||||
|
|
||||||
EEPROM.write(377, EEPVER); //eeprom was updated to latest
|
EEPROM.write(377, EEPVER); //eeprom was updated to latest
|
||||||
|
|
||||||
@ -365,8 +365,8 @@ void loadSettingsFromEEPROM(bool first)
|
|||||||
//374 - strip.paletteFade
|
//374 - strip.paletteFade
|
||||||
|
|
||||||
if (lastEEPROMversion > 0) {
|
if (lastEEPROMversion > 0) {
|
||||||
apWaitTimeSecs = EEPROM.read(375);
|
//apWaitTimeSecs = EEPROM.read(375);
|
||||||
recoveryAPDisabled = EEPROM.read(376);
|
apBehavior = EEPROM.read(376);
|
||||||
}
|
}
|
||||||
//377 = lastEEPROMversion
|
//377 = lastEEPROMversion
|
||||||
if (lastEEPROMversion > 1) {
|
if (lastEEPROMversion > 1) {
|
||||||
|
@ -187,7 +187,7 @@ void getSettingsJS(byte subPage, char* dest)
|
|||||||
}
|
}
|
||||||
|
|
||||||
sappends('s',"CM",cmDNS);
|
sappends('s',"CM",cmDNS);
|
||||||
sappend('v',"AT",apWaitTimeSecs);
|
sappend('i',"AB",apBehavior);
|
||||||
sappends('s',"AS",apSSID);
|
sappends('s',"AS",apSSID);
|
||||||
sappend('c',"AH",apHide);
|
sappend('c',"AH",apHide);
|
||||||
|
|
||||||
@ -390,7 +390,6 @@ void getSettingsJS(byte subPage, char* dest)
|
|||||||
sappend('c',"NO",otaLock);
|
sappend('c',"NO",otaLock);
|
||||||
sappend('c',"OW",wifiLock);
|
sappend('c',"OW",wifiLock);
|
||||||
sappend('c',"AO",aOtaEnabled);
|
sappend('c',"AO",aOtaEnabled);
|
||||||
sappend('c',"NA",recoveryAPDisabled);
|
|
||||||
sappends('m',"(\"msg\")[0]","WLED ");
|
sappends('m',"(\"msg\")[0]","WLED ");
|
||||||
olen -= 2; //delete ";
|
olen -= 2; //delete ";
|
||||||
oappend(versionString);
|
oappend(versionString);
|
||||||
|
@ -28,12 +28,12 @@ void handleSettingsSet(AsyncWebServerRequest *request, byte subPage)
|
|||||||
|
|
||||||
strcpy(cmDNS, request->arg("CM").c_str());
|
strcpy(cmDNS, request->arg("CM").c_str());
|
||||||
|
|
||||||
int t = request->arg("AT").toInt(); if (t > 9 && t <= 255) apWaitTimeSecs = t;
|
apBehavior = request->arg("AB").toInt();
|
||||||
strcpy(apSSID, request->arg("AS").c_str());
|
strcpy(apSSID, request->arg("AS").c_str());
|
||||||
apHide = request->hasArg("AH");
|
apHide = request->hasArg("AH");
|
||||||
int passlen = request->arg("AP").length();
|
int passlen = request->arg("AP").length();
|
||||||
if (passlen == 0 || (passlen > 7 && request->arg("AP").charAt(0) != '*')) strcpy(apPass, request->arg("AP").c_str());
|
if (passlen == 0 || (passlen > 7 && request->arg("AP").charAt(0) != '*')) strcpy(apPass, request->arg("AP").c_str());
|
||||||
t = request->arg("AC").toInt(); if (t > 0 && t < 14) apChannel = t;
|
int t = request->arg("AC").toInt(); if (t > 0 && t < 14) apChannel = t;
|
||||||
|
|
||||||
char k[3]; k[2] = 0;
|
char k[3]; k[2] = 0;
|
||||||
for (int i = 0; i<4; i++)
|
for (int i = 0; i<4; i++)
|
||||||
@ -304,7 +304,6 @@ void handleSettingsSet(AsyncWebServerRequest *request, byte subPage)
|
|||||||
{
|
{
|
||||||
otaLock = request->hasArg("NO");
|
otaLock = request->hasArg("NO");
|
||||||
wifiLock = request->hasArg("OW");
|
wifiLock = request->hasArg("OW");
|
||||||
recoveryAPDisabled = request->hasArg("NA");
|
|
||||||
aOtaEnabled = request->hasArg("AO");
|
aOtaEnabled = request->hasArg("AO");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -122,15 +122,14 @@ void beginStrip()
|
|||||||
|
|
||||||
|
|
||||||
void initAP(bool resetAP=false){
|
void initAP(bool resetAP=false){
|
||||||
if (recoveryAPDisabled) return;
|
if (apBehavior == 3 && !resetAP) return;
|
||||||
bool set = apSSID[0];
|
|
||||||
if (!set || resetAP) strcpy(apSSID, "WLED-AP");
|
if (!apSSID[0] || resetAP) strcpy(apSSID, "WLED-AP");
|
||||||
if (resetAP) strcpy(apPass,"wled1234");
|
if (resetAP) strcpy(apPass,"wled1234");
|
||||||
DEBUG_PRINT("Opening access point ");
|
DEBUG_PRINT("Opening access point ");
|
||||||
DEBUG_PRINTLN(apSSID);
|
DEBUG_PRINTLN(apSSID);
|
||||||
WiFi.softAPConfig(IPAddress(4, 3, 2, 1), IPAddress(4, 3, 2, 1), IPAddress(255,255,255,0));
|
WiFi.softAPConfig(IPAddress(4, 3, 2, 1), IPAddress(4, 3, 2, 1), IPAddress(255,255,255,0));
|
||||||
WiFi.softAP(apSSID, apPass, apChannel, apHide);
|
WiFi.softAP(apSSID, apPass, apChannel, apHide);
|
||||||
if (!set) apSSID[0] = 0;
|
|
||||||
|
|
||||||
if (!apActive) //start captive portal if AP active
|
if (!apActive) //start captive portal if AP active
|
||||||
{
|
{
|
||||||
@ -168,7 +167,7 @@ void initConnection()
|
|||||||
if (!apActive) initAP(); //instantly go to ap mode
|
if (!apActive) initAP(); //instantly go to ap mode
|
||||||
return;
|
return;
|
||||||
} else if (!apActive) {
|
} else if (!apActive) {
|
||||||
if (apAlwaysOn)
|
if (apBehavior == 2)
|
||||||
{
|
{
|
||||||
initAP();
|
initAP();
|
||||||
} else
|
} else
|
||||||
@ -194,7 +193,6 @@ void initConnection()
|
|||||||
|
|
||||||
void initInterfaces() {
|
void initInterfaces() {
|
||||||
DEBUG_PRINTLN("Init STA interfaces");
|
DEBUG_PRINTLN("Init STA interfaces");
|
||||||
server.begin();
|
|
||||||
|
|
||||||
if (hueIP[0] == 0)
|
if (hueIP[0] == 0)
|
||||||
{
|
{
|
||||||
@ -207,7 +205,7 @@ void initInterfaces() {
|
|||||||
if (alexaEnabled) alexaInit();
|
if (alexaEnabled) alexaInit();
|
||||||
|
|
||||||
#ifndef WLED_DISABLE_OTA
|
#ifndef WLED_DISABLE_OTA
|
||||||
if (aOtaEnabled) ArduinoOTA.begin();
|
if (aOtaEnabled) ArduinoOTA.begin(false);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
strip.service();
|
strip.service();
|
||||||
@ -216,16 +214,21 @@ void initInterfaces() {
|
|||||||
{
|
{
|
||||||
if (MDNS.begin(cmDNS))
|
if (MDNS.begin(cmDNS))
|
||||||
{
|
{
|
||||||
|
DEBUG_PRINTLN("mDNS started");
|
||||||
MDNS.addService("http", "tcp", 80);
|
MDNS.addService("http", "tcp", 80);
|
||||||
MDNS.addService("wled", "tcp", 80);
|
MDNS.addService("wled", "tcp", 80);
|
||||||
DEBUG_PRINTLN("mDNS started");
|
if (aOtaEnabled) MDNS.enableArduino(8266);
|
||||||
} else {
|
} else {
|
||||||
DEBUG_PRINTLN("mDNS failed!");
|
DEBUG_PRINTLN("mDNS failed!");
|
||||||
}
|
}
|
||||||
DEBUG_PRINTLN("mDNS started");
|
|
||||||
}
|
}
|
||||||
strip.service();
|
server.begin();
|
||||||
|
|
||||||
|
if (udpPort > 0 && udpPort != ntpLocalPort)
|
||||||
|
{
|
||||||
|
udpConnected = notifierUdp.begin(udpPort);
|
||||||
|
if (udpConnected && udpRgbPort != udpPort) udpRgbConnected = rgbUdp.begin(udpRgbPort);
|
||||||
|
}
|
||||||
if (ntpEnabled && WLED_CONNECTED)
|
if (ntpEnabled && WLED_CONNECTED)
|
||||||
ntpConnected = ntpUdp.begin(ntpLocalPort);
|
ntpConnected = ntpUdp.begin(ntpLocalPort);
|
||||||
|
|
||||||
@ -239,9 +242,14 @@ void initInterfaces() {
|
|||||||
byte stacO = 0;
|
byte stacO = 0;
|
||||||
|
|
||||||
void handleConnection() {
|
void handleConnection() {
|
||||||
|
//TODO: reconnect if heap <8000
|
||||||
byte stac = 0;
|
byte stac = 0;
|
||||||
#ifdef ESP8266
|
#ifdef ESP8266
|
||||||
stac = wifi_softap_get_station_num();
|
stac = wifi_softap_get_station_num();
|
||||||
|
#else
|
||||||
|
wifi_sta_list_t stationList;
|
||||||
|
esp_wifi_ap_get_sta_list(&stationList);
|
||||||
|
stac = stationList.num;
|
||||||
#endif
|
#endif
|
||||||
if (stac != stacO)
|
if (stac != stacO)
|
||||||
{
|
{
|
||||||
@ -267,7 +275,7 @@ void handleConnection() {
|
|||||||
initConnection();
|
initConnection();
|
||||||
}
|
}
|
||||||
if (millis() - lastReconnectAttempt > 300000 && WLED_WIFI_CONFIGURED) initConnection();
|
if (millis() - lastReconnectAttempt > 300000 && WLED_WIFI_CONFIGURED) initConnection();
|
||||||
if (!apActive && millis() - lastReconnectAttempt > apWaitTimeSecs*1000) initAP();
|
if (!apActive && millis() - lastReconnectAttempt > 12000) initAP();
|
||||||
} else if (!interfacesInited) { //newly connected
|
} else if (!interfacesInited) { //newly connected
|
||||||
DEBUG_PRINTLN("");
|
DEBUG_PRINTLN("");
|
||||||
DEBUG_PRINT("Connected! IP address: ");
|
DEBUG_PRINT("Connected! IP address: ");
|
||||||
@ -276,12 +284,12 @@ void handleConnection() {
|
|||||||
userConnected();
|
userConnected();
|
||||||
|
|
||||||
//shut down AP
|
//shut down AP
|
||||||
if (!apAlwaysOn && apActive)
|
if (apBehavior != 2 && apActive)
|
||||||
{
|
{
|
||||||
dnsServer.stop();
|
dnsServer.stop();
|
||||||
DEBUG_PRINTLN("Access point disabled.");
|
|
||||||
WiFi.softAPdisconnect(true);
|
WiFi.softAPdisconnect(true);
|
||||||
apActive = false;
|
apActive = false;
|
||||||
|
DEBUG_PRINTLN("Access point disabled.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -44,7 +44,7 @@ void onMqttConnect(bool sessionPresent)
|
|||||||
}
|
}
|
||||||
|
|
||||||
doSendHADiscovery = true;
|
doSendHADiscovery = true;
|
||||||
//doPublishMqtt = true;
|
doPublishMqtt = true;
|
||||||
DEBUG_PRINTLN("MQTT ready");
|
DEBUG_PRINTLN("MQTT ready");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -98,6 +98,8 @@ void publishMqtt()
|
|||||||
|
|
||||||
const char HA_static_JSON[] PROGMEM = R"=====(,"bri_val_tpl":"{{value}}","rgb_cmd_tpl":"{{'#%02x%02x%02x' | format(red, green, blue)}}","rgb_val_tpl":"{{value[1:3]|int(base=16)}},{{value[3:5]|int(base=16)}},{{value[5:7]|int(base=16)}}","qos":0,"opt":true,"pl_on":"ON","pl_off":"OFF","fx_val_tpl":"{{value}}","fx_list":[)=====";
|
const char HA_static_JSON[] PROGMEM = R"=====(,"bri_val_tpl":"{{value}}","rgb_cmd_tpl":"{{'#%02x%02x%02x' | format(red, green, blue)}}","rgb_val_tpl":"{{value[1:3]|int(base=16)}},{{value[3:5]|int(base=16)}},{{value[5:7]|int(base=16)}}","qos":0,"opt":true,"pl_on":"ON","pl_off":"OFF","fx_val_tpl":"{{value}}","fx_list":[)=====";
|
||||||
|
|
||||||
|
char buffer[2400]; //TODO: this is a TERRIBLE waste of precious memory, local var leads to exception though. Maybe dynamic allocation, but it is unclear when to free
|
||||||
|
|
||||||
void sendHADiscoveryMQTT()
|
void sendHADiscoveryMQTT()
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -138,7 +140,7 @@ Send out HA MQTT Discovery message on MQTT connect (~2.4kB):
|
|||||||
doSendHADiscovery = false;
|
doSendHADiscovery = false;
|
||||||
if (mqtt == nullptr || !mqtt->connected()) return;
|
if (mqtt == nullptr || !mqtt->connected()) return;
|
||||||
|
|
||||||
char bufc[36], bufcol[38], bufg[36], bufapi[38], buffer[2500];
|
char bufc[36], bufcol[38], bufg[36], bufapi[38];
|
||||||
|
|
||||||
strcpy(bufc, mqttDeviceTopic);
|
strcpy(bufc, mqttDeviceTopic);
|
||||||
strcpy(bufcol, mqttDeviceTopic);
|
strcpy(bufcol, mqttDeviceTopic);
|
||||||
@ -211,7 +213,6 @@ Send out HA MQTT Discovery message on MQTT connect (~2.4kB):
|
|||||||
strcat(pubt, mqttClientID);
|
strcat(pubt, mqttClientID);
|
||||||
strcat(pubt, "/config");
|
strcat(pubt, "/config");
|
||||||
DEBUG_PRINTLN(mqtt->publish(pubt, 0, true, buffer));
|
DEBUG_PRINTLN(mqtt->publish(pubt, 0, true, buffer));
|
||||||
yield();
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user