Refactored settings names to save bandwidth and heap

Fixed update page back button
This commit is contained in:
cschwinne 2018-03-14 19:05:51 +01:00
parent c93b185f54
commit 8d7a066680
12 changed files with 386 additions and 393 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

View File

@ -40,33 +40,33 @@ const char PAGE_settings_wifi1[] PROGMEM = R"=====(
<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 & Reboot</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="CSSID" maxlength="32"> <br> Network name (SSID, empty to not connect): <br><input name="CS" maxlength="32"><br>
Network password: <br> <input type="password" name="CPASS" maxlength="63"> <br> Network password: <br> <input type="password" name="CP" maxlength="63"><br>
Static IP (leave at 0.0.0.0 for DHCP): <br> Static IP (leave at 0.0.0.0 for DHCP):<br>
<input name="CSIP0" type="number" min="0" max="255" required> . <input name="I0" type="number" min="0" max="255" required> .
<input name="CSIP1" type="number" min="0" max="255" required> . <input name="I1" type="number" min="0" max="255" required> .
<input name="CSIP2" type="number" min="0" max="255" required> . <input name="I2" type="number" min="0" max="255" required> .
<input name="CSIP3" type="number" min="0" max="255" required> <br> <input name="I3" type="number" min="0" max="255" required><br>
Static gateway: <br> Static gateway:<br>
<input name="CSGW0" type="number" min="0" max="255" required> . <input name="G0" type="number" min="0" max="255" required> .
<input name="CSGW1" type="number" min="0" max="255" required> . <input name="G1" type="number" min="0" max="255" required> .
<input name="CSGW2" type="number" min="0" max="255" required> . <input name="G2" type="number" min="0" max="255" required> .
<input name="CSGW3" type="number" min="0" max="255" required> <br> <input name="G3" type="number" min="0" max="255" required><br>
Static subnet mask: <br> Static subnet mask:<br>
<input name="CSSN0" type="number" min="0" max="255" required> . <input name="S0" type="number" min="0" max="255" required> .
<input name="CSSN1" type="number" min="0" max="255" required> . <input name="S1" type="number" min="0" max="255" required> .
<input name="CSSN2" type="number" min="0" max="255" required> . <input name="S2" type="number" min="0" max="255" required> .
<input name="CSSN3" 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="CMDNS" maxlength="32"> .local <br> http:// <input name="CM" maxlength="32"> .local<br>
Try connecting before opening AP for: <input name="APWTM" type="number" min="0" max="255" required> s <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="APSSID" maxlength="32"> <br> AP SSID (leave empty for no AP):<br> <input name="AS" maxlength="32"><br>
Hide AP name: <input type="checkbox" name="APHSSID"> <br> Hide AP name: <input type="checkbox" name="AH"><br>
AP password (leave empty for open): <br> <input type="password" name="APPASS" maxlength="63"> <br> AP password (leave empty for open):<br> <input type="password" name="AP" maxlength="63"> <br>
Access Point WiFi channel: <input name="APCHAN" type="number" min="1" max="13" required> <br> Access Point WiFi channel: <input name="AC" type="number" min="1" max="13" required><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 & Reboot</button>
</form> </form>
</body> </body>
@ -85,44 +85,43 @@ const char PAGE_settings_leds1[] PROGMEM = R"=====(
<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</button><hr> <button type="button" onclick="B()">Back</button><button type="submit">Save</button><hr>
<h2>LED setup</h2> <h2>LED setup</h2>
LED count (max. 255): <input name="LEDCN" type="number" min="1" max="255" required> <br> LED count (max. 255): <input name="LC" type="number" min="1" max="255" required><br>
<i>The default boot color is always saved in preset slot 0.</i><br> <i>The default boot color is always saved in preset slot 0.</i><br>
Alternatively, apply preset <input name="BOOTP" type="number" min="0" max="25" required> at boot<br> Alternatively, apply preset <input name="BP" type="number" min="0" max="25" required> at boot<br>
Default RGB color: Default RGB color:
<input name="CLDFR" type="number" min="0" max="255" required> <input name="CR" type="number" min="0" max="255" required>
<input name="CLDFG" type="number" min="0" max="255" required> <input name="CG" type="number" min="0" max="255" required>
<input name="CLDFB" type="number" min="0" max="255" required> <br> <input name="CB" type="number" min="0" max="255" required><br>
Default brightness: <input name="CLDFA" type="number" min="0" max="255" required> (0-255) <br> Default brightness: <input name="CA" type="number" min="0" max="255" required> (0-255)<br>
Default white value (only RGBW, -1 to disable): <input name="CLDFW" type="number" min="-1" max="255" required> <br> Default white value (only RGBW, -1 to disable): <input name="CW" type="number" min="-1" max="255" required><br>
Default effect ID: <input name="FXDEF" type="number" min="0" max="57" required> <br> Default effect ID: <input name="FX" type="number" min="0" max="57" required> <br>
Default effect speed: <input name="SXDEF" type="number" min="0" max="255" required> <br> Default effect speed: <input name="SX" type="number" min="0" max="255" required> <br>
Default effect intensity: <input name="IXDEF" type="number" min="0" max="255" required> <br> Default effect intensity: <input name="IX" type="number" min="0" max="255" required> <br>
Default secondary RGB(W):<br> Default secondary RGB(W):<br>
<input name="CSECR" type="number" min="0" max="255" required> <input name="SR" type="number" min="0" max="255" required>
<input name="CSECG" type="number" min="0" max="255" required> <input name="SG" type="number" min="0" max="255" required>
<input name="CSECB" type="number" min="0" max="255" required> <input name="SB" type="number" min="0" max="255" required>
<input name="CSECW" type="number" min="0" max="255" required><br> <input name="SW" type="number" min="0" max="255" required><br>
Ignore and use current color, brightness and effects: <input type="checkbox" name="CBEOR"> <br> Ignore and use current color, brightness and effects: <input type="checkbox" name="IS"><br>
Turn on after power up/reset: <input type="checkbox" name="BOOTN"> <br> Turn on after power up/reset: <input type="checkbox" name="BO"><br>
Use Gamma correction for brightness: <input type="checkbox" name="GCBRI"> <br> Use Gamma correction for brightness: <input type="checkbox" name="GB"><br>
Use Gamma correction for color: <input type="checkbox" name="GCRGB"> <br> Use Gamma correction for color: <input type="checkbox" name="GC"><br>
Brightness factor: <input name="NRBRI" type="number" min="0" max="255" required> % Brightness factor: <input name="BF" type="number" min="0" max="255" required> %
<h3>Transitions</h3> <h3>Transitions</h3>
Fade: <input type="checkbox" name="TFADE"><br> Fade: <input type="checkbox" name="TF"><br>
Sweep: <input type="checkbox" name="TSWEE"> Invert direction: <input type="checkbox" name="TSDIR"><br> Sweep: <input type="checkbox" name="TS"> Invert direction: <input type="checkbox" name="TI"><br>
Transition Delay: <input name="TDLAY" maxlength="5" size="2"> ms Transition Delay: <input name="TD" maxlength="5" size="2"> ms
<h3>Timed light</h3> <h3>Timed light</h3>
Default Duration: <input name="TLDUR" type="number" min="1" max="255" required> min<br> Default Duration: <input name="TL" type="number" min="1" max="255" required> min<br>
Default Target brightness: <input name="TLBRI" type="number" min="0" max="255" required><br> Default Target brightness: <input name="TB" type="number" min="0" max="255" required><br>
Fade down: <input type="checkbox" name="TLFDE"><br> Fade down: <input type="checkbox" name="TW"><br>
<h3>Advanced</h3> <h3>Advanced</h3>
Reverse LED order (rotate 180): <input type="checkbox" name="LEDRV"><br> Reverse LED order (rotate 180): <input type="checkbox" name="RV"><br>
WARLS offset: <input name="WOFFS" type="number" min="-255" max="255" required><hr> WARLS offset: <input name="WO" type="number" min="-255" max="255" required><hr>
<button type="button" onclick="B()">Back</button><button type="submit">Save</button> <button type="button" onclick="B()">Back</button><button type="submit">Save</button>
</form> </form>
</body> </body>
</html> </html>
)====="; )=====";
const char PAGE_settings_ui0[] PROGMEM = R"=====( const char PAGE_settings_ui0[] PROGMEM = R"=====(
@ -139,10 +138,10 @@ const char PAGE_settings_ui1[] PROGMEM = R"=====(
<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</button><hr> <button type="button" onclick="B()">Back</button><button type="submit">Save</button><hr>
<h2>Web Setup</h2> <h2>Web Setup</h2>
Server description: <input name="DESC" maxlength="32"><br> Server description: <input name="DS" maxlength="32"><br>
Use HSB sliders instead of RGB by default: <input type="checkbox" name="COLMD"><br> Use HSB sliders instead of RGB by default: <input type="checkbox" name="MD"><br>
Color Theme: Color Theme:
<select name="THEME" onchange="Ct()"> <select name="TH" onchange="Ct()">
<option value="0" selected>Night</option> <option value="0" selected>Night</option>
<option value="1">Modern</option> <option value="1">Modern</option>
<option value="2">Bright</option> <option value="2">Bright</option>
@ -162,13 +161,13 @@ Color Theme:
</select><br> </select><br>
<div id="cth"> <div id="cth">
Please specify your custom hex colors (e.g. FF0000 for red)<br> Please specify your custom hex colors (e.g. FF0000 for red)<br>
Custom accent color: <input maxlength=9 name="CCOL0"><br> Custom accent color: <input maxlength=9 name="C0"><br>
Custom background: <input maxlength=9 name="CCOL1"><br> Custom background: <input maxlength=9 name="C1"><br>
Custom panel color: <input maxlength=9 name="CCOL2"><br> Custom panel color: <input maxlength=9 name="C2"><br>
Custom icon color: <input maxlength=9 name="CCOL3"><br> Custom icon color: <input maxlength=9 name="C3"><br>
Custom shadow: <input maxlength=9 name="CCOL4"><br> Custom shadow: <input maxlength=9 name="C4"><br>
Custom text color: <input maxlength=9 name="CCOL5"><br></div> Custom text color: <input maxlength=9 name="C5"><br></div>
Use font: <input maxlength=32 name="CFONT"><br> Use font: <input maxlength=32 name="CF"><br>
Make sure the font you use is installed on your system!<br> Make sure the font you use is installed on your system!<br>
<hr><button type="button" onclick="B()">Back</button><button type="submit">Save</button> <hr><button type="button" onclick="B()">Back</button><button type="submit">Save</button>
</form> </form>
@ -189,34 +188,30 @@ const char PAGE_settings_sync1[] PROGMEM = R"=====(
<button type="button" onclick="B()">Back</button><button type="submit">Save</button><hr> <button type="button" onclick="B()">Back</button><button type="submit">Save</button><hr>
<h2>Sync setup</h2> <h2>Sync setup</h2>
<h3>Button setup</h3> <h3>Button setup</h3>
On/Off button enabled: <input type="checkbox" name="BTNON"> On/Off button enabled: <input type="checkbox" name="BT">
<h3>WLED Broadcast</h3> <h3>WLED Broadcast</h3>
UDP Port: <input name="NUDPP" maxlength="5" size="4"><br> UDP Port: <input name="UP" maxlength="5" size="4"><br>
Receive <input type="checkbox" name="NRCBR">Brightness, <input type="checkbox" name="NRCCL">Color, and <input type="checkbox" name="NRCFX">Effects<br> Receive <input type="checkbox" name="RB">Brightness, <input type="checkbox" name="RC">Color, and <input type="checkbox" name="RX">Effects<br>
Send notifications on direct change: <input type="checkbox" name="NSDIR"><br> Send notifications on direct change: <input type="checkbox" name="SD"><br>
Send notifications on button press: <input type="checkbox" name="NSBTN"><br> Send notifications on button press: <input type="checkbox" name="SB"><br>
Send Alexa notifications: <input type="checkbox" name="NSALX"><br> Send Alexa notifications: <input type="checkbox" name="SA"><br>
Send Philips Hue change notifications: <input type="checkbox" name="NSHUE"> Send Philips Hue change notifications: <input type="checkbox" name="SH"><br>
Send notifications twice: <input type="checkbox" name="NS2XS"> Send notifications twice: <input type="checkbox" name="S2">
<h3>Alexa Voice Assistant</h3> <h3>Alexa Voice Assistant</h3>
Emulate Alexa device: <input type="checkbox" name="ALEXA"><br> Emulate Alexa device: <input type="checkbox" name="AL"><br>
Alexa invocation name: <input name="AINVN" maxlength="32"><br> Alexa invocation name: <input name="AI" maxlength="32"><br>
<h3>Philips Hue</h3> <h3>Philips Hue</h3>
<i>You can find the bridge IP and the light number in the 'About' section of the hue app.</i><br> <i>You can find the bridge IP and the light number in the 'About' section of the hue app.</i><br>
Hue Bridge IP:<br> Hue Bridge IP:<br>
<input name="HUIP0" type="number" min="0" max="255" required> . <input name="H0" type="number" min="0" max="255" required> .
<input name="HUIP1" type="number" min="0" max="255" required> . <input name="H1" type="number" min="0" max="255" required> .
<input name="HUIP2" type="number" min="0" max="255" required> . <input name="H2" type="number" min="0" max="255" required> .
<input name="HUIP3" type="number" min="0" max="255" required> <br> <input name="H3" type="number" min="0" max="255" required><br>
<b>Press the pushlink button on the bridge, after that save this page!</b><br> <b>Press the pushlink button on the bridge, after that save this page!</b><br>
(when first connecting)<br> (when first connecting)<br>
<!--Update Hue group <input name="HUEGR" type="number" min="0" max="99" required> <br> Poll Hue light <input name="HL" type="number" min="1" max="99" required> every <input name="HI" type="number" min="100" max="65000" required> ms: <input type="checkbox" name="HP"><br>
Send <input type="checkbox" name="HUEIO"> On/Off, <input type="checkbox" name="HUEBR"> Brightness, and <input type="checkbox" name="HUECL"> Color<br>--> Then, receive <input type="checkbox" name="HO"> On/Off, <input type="checkbox" name="HB"> Brightness, and <input type="checkbox" name="HC"> Color<br>
Poll Hue light <input name="HUELI" type="number" min="1" max="99" required> every <input name="HUEPI" type="number" min="100" max="65000" required> ms: <input type="checkbox" name="HUEPL"><br> Hue status: <span class="hms"> Internal ESP Error! </span><hr>
Then, receive <input type="checkbox" name="HURIO"> On/Off, <input type="checkbox" name="HURBR"> Brightness, and <input type="checkbox" name="HURCL"> Color<br>
<!--After device color update, ignore Hue updates for <input name="HUELI" type="number" min="0" max="255" required> minutes<br>-->
Hue status: <span class="hms"> Internal ESP Error! </span>
<hr>
<button type="button" onclick="B()">Back</button><button type="submit">Save</button> <button type="button" onclick="B()">Back</button><button type="submit">Save</button>
</form> </form>
</body> </body>
@ -235,10 +230,10 @@ const char PAGE_settings_time1[] PROGMEM = R"=====(
<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</button><hr> <button type="button" onclick="B()">Back</button><button type="submit">Save</button><hr>
<h2>Time setup</h2> <h2>Time setup</h2>
Get time from NTP server: <input type="checkbox" name="NTPON"><br> Get time from NTP server: <input type="checkbox" name="NT"><br>
Use 24h format: <input type="checkbox" name="CL24H"><br> Use 24h format: <input type="checkbox" name="CF"><br>
Time zone: Time zone:
<select name="TZONE"> <select name="TZ">
<option value="0" selected>GMT(UTC)</option> <option value="0" selected>GMT(UTC)</option>
<option value="1">GMT/BST</option> <option value="1">GMT/BST</option>
<option value="2">CET/CEST</option> <option value="2">CET/CEST</option>
@ -253,11 +248,11 @@ Time zone:
<option value="11">AEST/AEDT</option> <option value="11">AEST/AEDT</option>
<option value="12">NZST/NZDT</option> <option value="12">NZST/NZDT</option>
</select><br> </select><br>
UTC offset: <input name="UTCOS" type="number" min="-65500" max="65500" required> seconds (max. 18 hours)<br> UTC offset: <input name="UO" type="number" min="-65500" max="65500" required> seconds (max. 18 hours)<br>
Current local time is <span class="times">unknown</span>. Current local time is <span class="times">unknown</span>.
<h3>Clock</h3> <h3>Clock</h3>
Clock Overlay: Clock Overlay:
<select name="OLMDE" onchange="Cs()"> <select name="OL" onchange="Cs()">
<option value="0" id="cn" selected>None</option> <option value="0" id="cn" selected>None</option>
<option value="1">Static color</option> <option value="1">Static color</option>
<option value="2" id="ca">Analog Clock</option> <option value="2" id="ca">Analog Clock</option>
@ -265,46 +260,44 @@ Clock Overlay:
<option value="4" id="cc">Cronixie Clock</option> <option value="4" id="cc">Cronixie Clock</option>
</select><br> </select><br>
<div id="coc"> <div id="coc">
First LED: <input name="OLIN1" type="number" min="0" max="255" required> Last LED: <input name="OLIN2" type="number" min="0" max="255" required><br> First LED: <input name="O1" type="number" min="0" max="255" required> Last LED: <input name="O2" type="number" min="0" max="255" required><br>
<div id="cac"> <div id="cac">
12h LED: <input name="OLINM" type="number" min="0" max="255" required><br> 12h LED: <input name="OM" type="number" min="0" max="255" required><br>
Show 5min marks: <input type="checkbox" name="OL5MI"><br></div> Show 5min marks: <input type="checkbox" name="O5"><br></div>
Seconds (as trail): <input type="checkbox" name="OLSTR"><br> Seconds (as trail): <input type="checkbox" name="OS"><br>
</div> </div>
<div id="ccc"> <div id="ccc">
Cronixie Display: <input name="CRONX" maxlength="6"><br> Cronixie Display: <input name="CX" maxlength="6"><br>
Cronixie Backlight: <input type="checkbox" name="CROBL"><br> Cronixie Backlight: <input type="checkbox" name="CB"><br>
</div> </div>
Countdown Mode: <input type="checkbox" name="CLCND"><br> Countdown Mode: <input type="checkbox" name="CE"><br>
Countdown Goal: Year: 20 <input name="CDGYR" type="number" min="0" max="99" required> Month: <input name="CDGMN" type="number" min="1" max="12" required> Day: <input name="CDGDY" type="number" min="1" max="31" required><br> Countdown Goal: Year: 20 <input name="CY" type="number" min="0" max="99" required> Month: <input name="CI" type="number" min="1" max="12" required> Day: <input name="CD" type="number" min="1" max="31" required><br>
Hour: <input name="CDGHR" type="number" min="0" max="23" required> Minute: <input name="CDGMI" type="number" min="0" max="59" required> Second: <input name="CDGSC" type="number" min="0" max="59" required><br> Hour: <input name="CH" type="number" min="0" max="23" required> Minute: <input name="CM" type="number" min="0" max="59" required> Second: <input name="CS" type="number" min="0" max="59" required><br>
<h3>Advanced Macros</h3> <h3>Advanced Macros</h3>
Define API macros here:<br> Define API macros here:<br>
1: <input name="MC1" maxlength="64"><br> 1: <input name="M1" maxlength="64"><br>
2: <input name="MC2" maxlength="64"><br> 2: <input name="M2" maxlength="64"><br>
3: <input name="MC3" maxlength="64"><br> 3: <input name="M3" maxlength="64"><br>
4: <input name="MC4" maxlength="64"><br> 4: <input name="M4" maxlength="64"><br>
5: <input name="MC5" maxlength="64"><br> 5: <input name="M5" maxlength="64"><br>
6: <input name="MC6" maxlength="64"><br> 6: <input name="M6" maxlength="64"><br>
7: <input name="MC7" maxlength="64"><br> 7: <input name="M7" maxlength="64"><br>
8: <input name="MC8" maxlength="64"><br> 8: <input name="M8" maxlength="64"><br>
9: <input name="MC9" maxlength="64"><br> 9: <input name="M9" maxlength="64"><br>
10: <input name="MC10" maxlength="64"><br> 10: <input name="M10" maxlength="64"><br>
11: <input name="MC11" maxlength="64"><br> 11: <input name="M11" maxlength="64"><br>
12: <input name="MC12" maxlength="64"><br> 12: <input name="M12" maxlength="64"><br>
13: <input name="MC13" maxlength="64"><br> 13: <input name="M13" maxlength="64"><br>
14: <input name="MC14" maxlength="64"><br> 14: <input name="M14" maxlength="64"><br>
15: <input name="MC15" maxlength="64"><br> 15: <input name="M15" maxlength="64"><br>
16: <input name="MC16" maxlength="64"><br> 16: <input name="M16" maxlength="64"><br><br>
<br>
<i>Use 0 for the default action instead of a macro</i><br> <i>Use 0 for the default action instead of a macro</i><br>
Time controlled macros coming soon!<br> Time controlled macros coming soon!<br>
Boot Macro: <input name="MCRBT" type="number" min="0" max="16" required><br> Boot Macro: <input name="MB" type="number" min="0" max="16" required><br>
Alexa On/Off Macros: <input name="MCA0I" type="number" min="0" max="16" required> <input name="MCA0O" type="number" min="0" max="16" required><br> Alexa On/Off Macros: <input name="A0" type="number" min="0" max="16" required> <input name="A1" type="number" min="0" max="16" required><br>
Button Macro: <input name="MCB0D" type="number" min="0" max="16" required> Long Press: <input name="MCB0L" type="number" min="0" max="16" required><br> Button Macro: <input name="MP" type="number" min="0" max="16" required> Long Press: <input name="ML" type="number" min="0" max="16" required><br>
Countdown-Over Macro: <input name="MCNTD" type="number" min="0" max="16" required><br> Countdown-Over Macro: <input name="MC" type="number" min="0" max="16" required><br>
Timed-Light-Over Macro: <input name="MCNLO" type="number" min="0" max="16" required><br> Timed-Light-Over Macro: <input name="MN" type="number" min="0" max="16" required><hr>
<hr>
<button type="button" onclick="B()">Back</button><button type="submit">Save</button> <button type="button" onclick="B()">Back</button><button type="submit">Save</button>
</form> </form>
</body> </body>
@ -324,22 +317,22 @@ const char PAGE_settings_sec1[] PROGMEM = R"=====(
<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 & Reboot</button><hr>
<h2>Security & Update setup</h2> <h2>Security & Update setup</h2>
Enable OTA lock: <input type="checkbox" name="NOOTA"><br> Enable OTA lock: <input type="checkbox" name="NO"><br>
Passphrase: <input type="password" name="OPASS" maxlength="32"><br> Passphrase: <input type="password" name="OP" maxlength="32"><br>
To enable OTA, for security reasons you need to also enter the correct password!<br> To enable OTA, for security reasons you need to also enter the correct password!<br>
The password may/should be changed when OTA is enabled.<br> The password should be changed when OTA is enabled.<br>
<b>Disable OTA when not in use, otherwise an attacker could 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="OWIFI"><br><br> Deny access to WiFi settings if locked: <input type="checkbox" name="OW"><br><br>
Disable recovery AP: <input type="checkbox" name="NORAP"><br> Disable recovery AP: <input type="checkbox" name="NA"><br>
In case of a connection error there will be no wireless recovery possible!<br> In case of an error there will be no wireless recovery possible!<br>
Completely disables all Access Point functions.<br><br> Completely disables all Access Point functions.<br><br>
Factory reset: <input type="checkbox" name="RESET"><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 not encrypted. An attacker in the same network could intercept form data! HTTP traffic is unencrypted. An attacker in the same network can intercept form data!
<h3>Software Update</h3> <h3>Software Update</h3>
<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="AROTA"><br> Enable ArduinoOTA: <input type="checkbox" name="AO"><br>
<h3>About</h3> <h3>About</h3>
<a href="https://github.com/Aircoookie/WLED">WLED</a> version 0.6.0<br> <a href="https://github.com/Aircoookie/WLED">WLED</a> version 0.6.0<br>
(c) 2016-2018 Christian Schwinne <br> (c) 2016-2018 Christian Schwinne <br>

View File

@ -15,7 +15,7 @@ const char* ESP8266HTTPUpdateServer::_serverIndex =
R"(<html><head><script>function B(){window.history.back()}</script></head><body><h2>WLED Software Update</h2><br>Get the latest binaries on the <a href="https://github.com/Aircoookie/WLED/tree/master/bin">project GitHub page</a>!<br> R"(<html><head><script>function B(){window.history.back()}</script></head><body><h2>WLED Software Update</h2><br>Get the latest binaries on the <a href="https://github.com/Aircoookie/WLED/tree/master/bin">project GitHub page</a>!<br>
<i>Unsure which binary is correct? Go to the <a href="./build">/build subpage</a> for the details of this version.</i><br> <i>Unsure which binary is correct? Go to the <a href="./build">/build subpage</a> for the details of this version.</i><br>
<b>Be sure to upload a valid .bin file for your ESP! Otherwise you'll need USB recovery!</b><br> <b>Be sure to upload a valid .bin file for your ESP! Otherwise you'll need USB recovery!</b><br>
<br><br><button onclick="B()\">Back</button><br><br> <br><br><button onclick='B()'>Back</button><br><br>
<form method='POST' action='' enctype='multipart/form-data'> <form method='POST' action='' enctype='multipart/form-data'>
<input type='file' name='update'> <input type='file' name='update'>
<input type='submit' value='Update!'> <input type='submit' value='Update!'>

View File

@ -33,7 +33,7 @@
#include "WS2812FX.h" #include "WS2812FX.h"
//version in format yymmddb (b = daily build) //version in format yymmddb (b = daily build)
#define VERSION 1803143 #define VERSION 1803144
const String versionString = "0.6.0"; const String versionString = "0.6.0";
//AP and OTA default passwords (change them!) //AP and OTA default passwords (change them!)

View File

@ -7,7 +7,7 @@ void XML_response()
String resp; String resp;
resp = resp + "<?xml version = \"1.0\" ?>"; resp = resp + "<?xml version = \"1.0\" ?>";
resp = resp + "<vs>"; resp = resp + "<vs>";
resp = resp + "<act>"; resp = resp + "<ac>";
if (nightlightActive && nightlightFade) if (nightlightActive && nightlightFade)
{ {
resp = resp + briT; resp = resp + briT;
@ -15,7 +15,7 @@ void XML_response()
{ {
resp = resp + bri; resp = resp + bri;
} }
resp = resp + "</act>"; resp = resp + "</ac>";
for (int i = 0; i < 3; i++) for (int i = 0; i < 3; i++)
{ {
@ -49,9 +49,9 @@ void XML_response()
} }
resp = resp + "</wv><md>"; resp = resp + "</wv><md>";
resp = resp + useHSB; resp = resp + useHSB;
resp = resp + "</md><desc>"; resp = resp + "</md><ds>";
resp = resp + serverDescription; resp = resp + serverDescription;
resp = resp + "</desc>"; resp = resp + "</ds>";
resp = resp + "</vs>"; resp = resp + "</vs>";
server.send(200, "text/xml", resp); server.send(200, "text/xml", resp);
} }
@ -73,36 +73,36 @@ String getSettings(byte subPage)
String si = ".selectedIndex="; String si = ".selectedIndex=";
if (subPage == 1) { if (subPage == 1) {
resp += ds + "CSSID" + v + "\"" + clientSSID + "\";"; resp += ds + "CS" + v + "\"" + clientSSID + "\";";
resp += ds + "CPASS" + v + "\""; resp += ds + "CP" + v + "\"";
for (int i = 0; i < clientPass.length(); i++) for (int i = 0; i < clientPass.length(); i++)
{ {
resp += "*"; resp += "*";
} }
resp += "\";"; resp += "\";";
resp += ds + "CSIP0" + v + staticIP[0] +";"; resp += ds + "I0" + v + staticIP[0] +";";
resp += ds + "CSIP1" + v + staticIP[1] +";"; resp += ds + "I1" + v + staticIP[1] +";";
resp += ds + "CSIP2" + v + staticIP[2] +";"; resp += ds + "I2" + v + staticIP[2] +";";
resp += ds + "CSIP3" + v + staticIP[3] +";"; resp += ds + "I3" + v + staticIP[3] +";";
resp += ds + "CSGW0" + v + staticGateway[0] +";"; resp += ds + "G0" + v + staticGateway[0] +";";
resp += ds + "CSGW1" + v + staticGateway[1] +";"; resp += ds + "G1" + v + staticGateway[1] +";";
resp += ds + "CSGW2" + v + staticGateway[2] +";"; resp += ds + "G2" + v + staticGateway[2] +";";
resp += ds + "CSGW3" + v + staticGateway[3] +";"; resp += ds + "G3" + v + staticGateway[3] +";";
resp += ds + "CSSN0" + v + staticSubnet[0] +";"; resp += ds + "S0" + v + staticSubnet[0] +";";
resp += ds + "CSSN1" + v + staticSubnet[1] +";"; resp += ds + "S1" + v + staticSubnet[1] +";";
resp += ds + "CSSN2" + v + staticSubnet[2] +";"; resp += ds + "S2" + v + staticSubnet[2] +";";
resp += ds + "CSSN3" + v + staticSubnet[3] +";"; resp += ds + "S3" + v + staticSubnet[3] +";";
resp += ds + "CMDNS" + v + "\"" + cmDNS + "\";"; resp += ds + "CM" + v + "\"" + cmDNS + "\";";
resp += ds + "APWTM" + v + apWaitTimeSecs +";"; resp += ds + "AT" + v + apWaitTimeSecs +";";
resp += ds + "APSSID" + v + "\"" + apSSID + "\";"; resp += ds + "AS" + v + "\"" + apSSID + "\";";
resp += ds + "APHSSID" + c + apHide + ";"; resp += ds + "AH" + c + apHide + ";";
resp += ds + "APPASS" + v + "\""; resp += ds + "AP" + v + "\"";
for (int i = 0; i < apPass.length(); i++) for (int i = 0; i < apPass.length(); i++)
{ {
resp += "*"; resp += "*";
} }
resp += "\";"; resp += "\";";
resp += ds + "APCHAN" + v + apChannel +";"; resp += ds + "AC" + v + apChannel +";";
resp += dg + "(\"sip\")[0]" + ih + "\""; resp += dg + "(\"sip\")[0]" + ih + "\"";
if (!WiFi.localIP()[0] == 0) if (!WiFi.localIP()[0] == 0)
{ {
@ -136,117 +136,117 @@ String getSettings(byte subPage)
} }
if (subPage == 2) { if (subPage == 2) {
resp += ds + "LEDCN" + v + ledCount +";"; resp += ds + "LC" + v + ledCount +";";
resp += ds + "CLDFR" + v + colS[0] +";"; resp += ds + "CR" + v + colS[0] +";";
resp += ds + "CLDFG" + v + colS[1] +";"; resp += ds + "CG" + v + colS[1] +";";
resp += ds + "CLDFB" + v + colS[2] +";"; resp += ds + "CB" + v + colS[2] +";";
resp += ds + "CLDFA" + v + briS +";"; resp += ds + "CA" + v + briS +";";
if (useRGBW) { if (useRGBW) {
resp += ds + "CLDFW" + v + whiteS +";"; resp += ds + "CW" + v + whiteS +";";
} else { } else {
resp += ds + "CLDFW" + v + "-1;"; resp += ds + "CW" + v + "-1;";
} }
resp += ds + "CSECR" + v + colSecS[0] +";"; resp += ds + "SR" + v + colSecS[0] +";";
resp += ds + "CSECG" + v + colSecS[1] +";"; resp += ds + "SG" + v + colSecS[1] +";";
resp += ds + "CSECB" + v + colSecS[2] +";"; resp += ds + "SB" + v + colSecS[2] +";";
resp += ds + "CSECW" + v + whiteSecS +";"; resp += ds + "SW" + v + whiteSecS +";";
resp += ds + "BOOTN" + c + turnOnAtBoot +";"; resp += ds + "BO" + c + turnOnAtBoot +";";
resp += ds + "BOOTP" + v + bootPreset +";"; resp += ds + "BP" + v + bootPreset +";";
resp += ds + "FXDEF" + v + effectDefault +";"; resp += ds + "FX" + v + effectDefault +";";
resp += ds + "SXDEF" + v + effectSpeedDefault +";"; resp += ds + "SX" + v + effectSpeedDefault +";";
resp += ds + "IXDEF" + v + effectIntensityDefault +";"; resp += ds + "IX" + v + effectIntensityDefault +";";
resp += ds + "GCBRI" + c + useGammaCorrectionBri +";"; resp += ds + "GB" + c + useGammaCorrectionBri +";";
resp += ds + "GCRGB" + c + useGammaCorrectionRGB +";"; resp += ds + "GC" + c + useGammaCorrectionRGB +";";
resp += ds + "TFADE" + c + fadeTransition +";"; resp += ds + "TF" + c + fadeTransition +";";
resp += ds + "TSWEE" + c + sweepTransition +";"; resp += ds + "TS" + c + sweepTransition +";";
resp += ds + "TSDIR" + c + !sweepDirection +";"; resp += ds + "TI" + c + !sweepDirection +";";
resp += ds + "TDLAY" + v + transitionDelay +";"; resp += ds + "TD" + v + transitionDelay +";";
resp += ds + "NRBRI" + v + briMultiplier +";"; resp += ds + "BF" + v + briMultiplier +";";
resp += ds + "TLBRI" + v + nightlightTargetBri +";"; resp += ds + "TB" + v + nightlightTargetBri +";";
resp += ds + "TLDUR" + v + nightlightDelayMins +";"; resp += ds + "TL" + v + nightlightDelayMins +";";
resp += ds + "TLFDE" + c + nightlightFade +";"; resp += ds + "TW" + c + nightlightFade +";";
resp += ds + "LEDRV" + c + reverseMode +";"; resp += ds + "RV" + c + reverseMode +";";
resp += ds + "WOFFS" + v + arlsOffset +";"; resp += ds + "WO" + v + arlsOffset +";";
} }
if (subPage == 3) if (subPage == 3)
{ {
resp += ds + "DESC" + v + "\"" + serverDescription + "\";"; resp += ds + "DS" + v + "\"" + serverDescription + "\";";
resp += ds + "COLMD" + c + useHSBDefault + ";"; resp += ds + "MD" + c + useHSBDefault + ";";
resp += ds + "THEME" + si + String(currentTheme) + ";"; resp += ds + "TH" + si + String(currentTheme) + ";";
for(int i=0;i<6;i++) for(int i=0;i<6;i++)
resp += ds + "CCOL" + i + v + "\"" + cssCol[i] + "\";"; resp += ds + "C" + i + v + "\"" + cssCol[i] + "\";";
resp += ds + "CFONT" + v + "\"" + cssFont + "\";"; resp += ds + "CF" + v + "\"" + cssFont + "\";";
} }
if (subPage == 4) if (subPage == 4)
{ {
resp += ds + "BTNON" + c + buttonEnabled +";"; resp += ds + "BT" + c + buttonEnabled +";";
resp += ds + "NUDPP" + v + udpPort +";"; resp += ds + "UP" + v + udpPort +";";
resp += ds + "NRCBR" + c + receiveNotificationBrightness +";"; resp += ds + "RB" + c + receiveNotificationBrightness +";";
resp += ds + "NRCCL" + c + receiveNotificationColor +";"; resp += ds + "RC" + c + receiveNotificationColor +";";
resp += ds + "NRCFX" + c + receiveNotificationEffects +";"; resp += ds + "RX" + c + receiveNotificationEffects +";";
resp += ds + "NSDIR" + c + notifyDirectDefault +";"; resp += ds + "SD" + c + notifyDirectDefault +";";
resp += ds + "NSBTN" + c + notifyButton +";"; resp += ds + "SB" + c + notifyButton +";";
resp += ds + "NSHUE" + c + notifyHue +";"; resp += ds + "SH" + c + notifyHue +";";
resp += ds + "NS2XS" + c + notifyTwice +";"; resp += ds + "S2" + c + notifyTwice +";";
resp += ds + "ALEXA" + c + alexaEnabled +";"; resp += ds + "AL" + c + alexaEnabled +";";
resp += ds + "AINVN" + v + "\"" + alexaInvocationName + "\";"; resp += ds + "AI" + v + "\"" + alexaInvocationName + "\";";
resp += ds + "NSALX" + c + alexaNotify +";"; resp += ds + "SA" + c + alexaNotify +";";
resp += ds + "HUIP0" + v + hueIP[0] +";"; resp += ds + "H0" + v + hueIP[0] +";";
resp += ds + "HUIP1" + v + hueIP[1] +";"; resp += ds + "H1" + v + hueIP[1] +";";
resp += ds + "HUIP2" + v + hueIP[2] +";"; resp += ds + "H2" + v + hueIP[2] +";";
resp += ds + "HUIP3" + v + hueIP[3] +";"; resp += ds + "H3" + v + hueIP[3] +";";
resp += ds + "HUELI" + v + huePollLightId +";"; resp += ds + "HL" + v + huePollLightId +";";
resp += ds + "HUEPI" + v + huePollIntervalMs +";"; resp += ds + "HI" + v + huePollIntervalMs +";";
resp += ds + "HUEPL" + c + huePollingEnabled +";"; resp += ds + "HP" + c + huePollingEnabled +";";
resp += ds + "HURIO" + c + hueApplyOnOff +";"; resp += ds + "HO" + c + hueApplyOnOff +";";
resp += ds + "HURBR" + c + hueApplyBri +";"; resp += ds + "HB" + c + hueApplyBri +";";
resp += ds + "HURCL" + c + hueApplyColor +";"; resp += ds + "HC" + c + hueApplyColor +";";
resp += dg + "(\"hms\")[0]" + ih + "\"" + hueError + "\";"; resp += dg + "(\"hms\")[0]" + ih + "\"" + hueError + "\";";
} }
if (subPage == 5) if (subPage == 5)
{ {
resp += ds + "NTPON" + c + ntpEnabled +";"; resp += ds + "NT" + c + ntpEnabled +";";
resp += ds + "CL24H" + c + !useAMPM +";"; resp += ds + "CF" + c + !useAMPM +";";
resp += ds + "TZONE" + si + String(currentTimezone) + ";"; resp += ds + "TZ" + si + String(currentTimezone) + ";";
resp += ds + "UTCOS" + v + utcOffsetSecs +";"; resp += ds + "UO" + v + utcOffsetSecs +";";
resp += dg + "(\"times\")[0]" + ih + "\"" + getTimeString() + "\";"; resp += dg + "(\"times\")[0]" + ih + "\"" + getTimeString() + "\";";
resp += ds + "OLMDE" + si + String(overlayCurrent) + ";"; resp += ds + "OL" + si + String(overlayCurrent) + ";";
resp += ds + "OLIN1" + v + overlayMin +";"; resp += ds + "O1" + v + overlayMin +";";
resp += ds + "OLIN2" + v + overlayMax +";"; resp += ds + "O2" + v + overlayMax +";";
resp += ds + "OLINM" + v + analogClock12pixel +";"; resp += ds + "OM" + v + analogClock12pixel +";";
resp += ds + "OLSTR" + c + analogClockSecondsTrail +";"; resp += ds + "OS" + c + analogClockSecondsTrail +";";
resp += ds + "OL5MI" + c + analogClock5MinuteMarks +";"; resp += ds + "O5" + c + analogClock5MinuteMarks +";";
resp += ds + "CRONX" + v + "\"" + cronixieDisplay + "\";"; resp += ds + "CX" + v + "\"" + cronixieDisplay + "\";";
resp += ds + "CROBL" + c + cronixieBacklight +";"; resp += ds + "CB" + c + cronixieBacklight +";";
resp += ds + "CLCND" + c + countdownMode +";"; resp += ds + "CE" + c + countdownMode +";";
resp += ds + "CDGYR" + v + countdownYear +";"; resp += ds + "CY" + v + countdownYear +";";
resp += ds + "CDGMN" + v + countdownMonth +";"; resp += ds + "CI" + v + countdownMonth +";";
resp += ds + "CDGDY" + v + countdownDay +";"; resp += ds + "CD" + v + countdownDay +";";
resp += ds + "CDGHR" + v + countdownHour +";"; resp += ds + "CH" + v + countdownHour +";";
resp += ds + "CDGMI" + v + countdownMin +";"; resp += ds + "CM" + v + countdownMin +";";
resp += ds + "CDGSC" + v + countdownSec +";"; resp += ds + "CS" + v + countdownSec +";";
for (int i=1;i<17;i++) for (int i=1;i<17;i++)
{ {
resp += ds + "MC" + String(i) + v + "\"" + loadMacro(i) + "\";"; resp += ds + "M" + String(i) + v + "\"" + loadMacro(i) + "\";";
} }
resp += ds + "MCRBT" + v + macroBoot +";"; resp += ds + "MB" + v + macroBoot +";";
resp += ds + "MCA0I" + v + macroAlexaOn +";"; resp += ds + "A0" + v + macroAlexaOn +";";
resp += ds + "MCA0O" + v + macroAlexaOff +";"; resp += ds + "A1" + v + macroAlexaOff +";";
resp += ds + "MCB0D" + v + macroButton +";"; resp += ds + "MP" + v + macroButton +";";
resp += ds + "MCB0L" + v + macroLongPress +";"; resp += ds + "ML" + v + macroLongPress +";";
resp += ds + "MCNTD" + v + macroCountdown +";"; resp += ds + "MC" + v + macroCountdown +";";
resp += ds + "MCNLO" + v + macroNl +";"; resp += ds + "MN" + v + macroNl +";";
} }
if (subPage == 6) if (subPage == 6)
{ {
resp += ds + "NOOTA" + c + otaLock +";"; resp += ds + "NO" + c + otaLock +";";
resp += ds + "OWIFI" + c + wifiLock +";"; resp += ds + "OW" + c + wifiLock +";";
resp += ds + "AROTA" + c + aOtaEnabled +";"; resp += ds + "AO" + c + aOtaEnabled +";";
resp += ds + "NORAP" + c + recoveryAPDisabled +";"; resp += ds + "NA" + c + recoveryAPDisabled +";";
resp += dg + "(\"msg\")[0]" + ih + "\"WLED "+ versionString +" (build " + VERSION + ") OK\";"; resp += dg + "(\"msg\")[0]" + ih + "\"WLED "+ versionString +" (build " + VERSION + ") OK\";";
} }
resp += "}</script>"; resp += "}</script>";

View File

@ -27,90 +27,90 @@ void handleSettingsSet(byte subPage)
//WIFI SETTINGS //WIFI SETTINGS
if (subPage == 1) if (subPage == 1)
{ {
if (server.hasArg("CSSID")) clientSSID = server.arg("CSSID"); if (server.hasArg("CS")) clientSSID = server.arg("CS");
if (server.hasArg("CPASS")) if (server.hasArg("CP"))
{ {
if (!server.arg("CPASS").indexOf('*') == 0) if (!server.arg("CP").indexOf('*') == 0)
{ {
DEBUG_PRINTLN("Setting pass"); DEBUG_PRINTLN("Setting pass");
clientPass = server.arg("CPASS"); clientPass = server.arg("CP");
} }
} }
if (server.hasArg("CMDNS")) cmDNS = server.arg("CMDNS"); if (server.hasArg("CM")) cmDNS = server.arg("CM");
if (server.hasArg("APWTM")) if (server.hasArg("AT"))
{ {
int i = server.arg("APWTM").toInt(); int i = server.arg("AT").toInt();
if (i >= 0 && i <= 255) apWaitTimeSecs = i; if (i >= 0 && i <= 255) apWaitTimeSecs = i;
} }
if (server.hasArg("APSSID")) apSSID = server.arg("APSSID"); if (server.hasArg("AS")) apSSID = server.arg("AS");
apHide = server.hasArg("APHSSID"); apHide = server.hasArg("AH");
if (server.hasArg("APPASS")) if (server.hasArg("AP"))
{ {
if (!server.arg("APPASS").indexOf('*') == 0) apPass = server.arg("APPASS"); if (!server.arg("AP").indexOf('*') == 0) apPass = server.arg("AP");
} }
if (server.hasArg("APCHAN")) if (server.hasArg("AC"))
{ {
int chan = server.arg("APCHAN").toInt(); int chan = server.arg("AC").toInt();
if (chan > 0 && chan < 14) apChannel = chan; if (chan > 0 && chan < 14) apChannel = chan;
} }
if (server.hasArg("CSIP0")) if (server.hasArg("I0"))
{ {
int i = server.arg("CSIP0").toInt(); int i = server.arg("I0").toInt();
if (i >= 0 && i <= 255) staticIP[0] = i; if (i >= 0 && i <= 255) staticIP[0] = i;
} }
if (server.hasArg("CSIP1")) if (server.hasArg("I1"))
{ {
int i = server.arg("CSIP1").toInt(); int i = server.arg("I1").toInt();
if (i >= 0 && i <= 255) staticIP[1] = i; if (i >= 0 && i <= 255) staticIP[1] = i;
} }
if (server.hasArg("CSIP2")) if (server.hasArg("I2"))
{ {
int i = server.arg("CSIP2").toInt(); int i = server.arg("I2").toInt();
if (i >= 0 && i <= 255) staticIP[2] = i; if (i >= 0 && i <= 255) staticIP[2] = i;
} }
if (server.hasArg("CSIP3")) if (server.hasArg("I3"))
{ {
int i = server.arg("CSIP3").toInt(); int i = server.arg("I3").toInt();
if (i >= 0 && i <= 255) staticIP[3] = i; if (i >= 0 && i <= 255) staticIP[3] = i;
} }
if (server.hasArg("CSGW0")) if (server.hasArg("G0"))
{ {
int i = server.arg("CSGW0").toInt(); int i = server.arg("G0").toInt();
if (i >= 0 && i <= 255) staticGateway[0] = i; if (i >= 0 && i <= 255) staticGateway[0] = i;
} }
if (server.hasArg("CSGW1")) if (server.hasArg("G1"))
{ {
int i = server.arg("CSGW1").toInt(); int i = server.arg("G1").toInt();
if (i >= 0 && i <= 255) staticGateway[1] = i; if (i >= 0 && i <= 255) staticGateway[1] = i;
} }
if (server.hasArg("CSGW2")) if (server.hasArg("G2"))
{ {
int i = server.arg("CSGW2").toInt(); int i = server.arg("G2").toInt();
if (i >= 0 && i <= 255) staticGateway[2] = i; if (i >= 0 && i <= 255) staticGateway[2] = i;
} }
if (server.hasArg("CSGW3")) if (server.hasArg("G3"))
{ {
int i = server.arg("CSGW3").toInt(); int i = server.arg("G3").toInt();
if (i >= 0 && i <= 255) staticGateway[3] = i; if (i >= 0 && i <= 255) staticGateway[3] = i;
} }
if (server.hasArg("CSSN0")) if (server.hasArg("S0"))
{ {
int i = server.arg("CSSN0").toInt(); int i = server.arg("S0").toInt();
if (i >= 0 && i <= 255) staticSubnet[0] = i; if (i >= 0 && i <= 255) staticSubnet[0] = i;
} }
if (server.hasArg("CSSN1")) if (server.hasArg("S1"))
{ {
int i = server.arg("CSSN1").toInt(); int i = server.arg("S1").toInt();
if (i >= 0 && i <= 255) staticSubnet[1] = i; if (i >= 0 && i <= 255) staticSubnet[1] = i;
} }
if (server.hasArg("CSSN2")) if (server.hasArg("S2"))
{ {
int i = server.arg("CSSN2").toInt(); int i = server.arg("S2").toInt();
if (i >= 0 && i <= 255) staticSubnet[2] = i; if (i >= 0 && i <= 255) staticSubnet[2] = i;
} }
if (server.hasArg("CSSN3")) if (server.hasArg("S3"))
{ {
int i = server.arg("CSSN3").toInt(); int i = server.arg("S3").toInt();
if (i >= 0 && i <= 255) staticSubnet[3] = i; if (i >= 0 && i <= 255) staticSubnet[3] = i;
} }
} }
@ -118,13 +118,13 @@ void handleSettingsSet(byte subPage)
//LED SETTINGS //LED SETTINGS
if (subPage == 2) if (subPage == 2)
{ {
if (server.hasArg("LEDCN")) if (server.hasArg("LC"))
{ {
int i = server.arg("LEDCN").toInt(); int i = server.arg("LC").toInt();
if (i >= 0 && i <= LEDCOUNT) ledCount = i; if (i >= 0 && i <= LEDCOUNT) ledCount = i;
strip.setLedCount(ledCount); strip.setLedCount(ledCount);
} }
if (server.hasArg("CBEOR")) //ignore settings and save current brightness, colors and fx as default if (server.hasArg("IS")) //ignore settings and save current brightness, colors and fx as default
{ {
colS[0] = col[0]; colS[0] = col[0];
colS[1] = col[1]; colS[1] = col[1];
@ -134,44 +134,44 @@ void handleSettingsSet(byte subPage)
effectDefault = effectCurrent; effectDefault = effectCurrent;
effectSpeedDefault = effectSpeed; effectSpeedDefault = effectSpeed;
} else { } else {
if (server.hasArg("CLDFR")) if (server.hasArg("CR"))
{ {
int i = server.arg("CLDFR").toInt(); int i = server.arg("CR").toInt();
if (i >= 0 && i <= 255) colS[0] = i; if (i >= 0 && i <= 255) colS[0] = i;
} }
if (server.hasArg("CLDFG")) if (server.hasArg("CG"))
{ {
int i = server.arg("CLDFG").toInt(); int i = server.arg("CG").toInt();
if (i >= 0 && i <= 255) colS[1] = i; if (i >= 0 && i <= 255) colS[1] = i;
} }
if (server.hasArg("CLDFB")) if (server.hasArg("CB"))
{ {
int i = server.arg("CLDFB").toInt(); int i = server.arg("CB").toInt();
if (i >= 0 && i <= 255) colS[2] = i; if (i >= 0 && i <= 255) colS[2] = i;
} }
if (server.hasArg("CSECR")) if (server.hasArg("SR"))
{ {
int i = server.arg("CSECR").toInt(); int i = server.arg("SR").toInt();
if (i >= 0 && i <= 255) colSecS[0] = i; if (i >= 0 && i <= 255) colSecS[0] = i;
} }
if (server.hasArg("CSECG")) if (server.hasArg("SG"))
{ {
int i = server.arg("CSECG").toInt(); int i = server.arg("SG").toInt();
if (i >= 0 && i <= 255) colSecS[1] = i; if (i >= 0 && i <= 255) colSecS[1] = i;
} }
if (server.hasArg("CSECB")) if (server.hasArg("SB"))
{ {
int i = server.arg("CSECB").toInt(); int i = server.arg("SB").toInt();
if (i >= 0 && i <= 255) colSecS[2] = i; if (i >= 0 && i <= 255) colSecS[2] = i;
} }
if (server.hasArg("CSECW")) if (server.hasArg("SW"))
{ {
int i = server.arg("CSECW").toInt(); int i = server.arg("SW").toInt();
if (i >= 0 && i <= 255) whiteSecS = i; if (i >= 0 && i <= 255) whiteSecS = i;
} }
if (server.hasArg("CLDFW")) if (server.hasArg("CW"))
{ {
int i = server.arg("CLDFW").toInt(); int i = server.arg("CW").toInt();
if (i >= 0 && i <= 255) if (i >= 0 && i <= 255)
{ {
useRGBW = true; useRGBW = true;
@ -181,65 +181,65 @@ void handleSettingsSet(byte subPage)
whiteS = 0; whiteS = 0;
} }
} }
if (server.hasArg("CLDFA")) if (server.hasArg("CA"))
{ {
int i = server.arg("CLDFA").toInt(); int i = server.arg("CA").toInt();
if (i >= 0 && i <= 255) briS = i; if (i >= 0 && i <= 255) briS = i;
} }
if (server.hasArg("FXDEF")) if (server.hasArg("FX"))
{ {
int i = server.arg("FXDEF").toInt(); int i = server.arg("FX").toInt();
if (i >= 0 && i <= 255) effectDefault = i; if (i >= 0 && i <= 255) effectDefault = i;
} }
if (server.hasArg("SXDEF")) if (server.hasArg("SX"))
{ {
int i = server.arg("SXDEF").toInt(); int i = server.arg("SX").toInt();
if (i >= 0 && i <= 255) effectSpeedDefault = i; if (i >= 0 && i <= 255) effectSpeedDefault = i;
} }
if (server.hasArg("IXDEF")) if (server.hasArg("IX"))
{ {
int i = server.arg("IXDEF").toInt(); int i = server.arg("IX").toInt();
if (i >= 0 && i <= 255) effectIntensityDefault = i; if (i >= 0 && i <= 255) effectIntensityDefault = i;
} }
} }
turnOnAtBoot = server.hasArg("BOOTN"); turnOnAtBoot = server.hasArg("BO");
if (server.hasArg("BOOTP")) if (server.hasArg("BP"))
{ {
int i = server.arg("BOOTP").toInt(); int i = server.arg("BP").toInt();
if (i >= 0 && i <= 25) bootPreset = i; if (i >= 0 && i <= 25) bootPreset = i;
} }
useGammaCorrectionBri = server.hasArg("GCBRI"); useGammaCorrectionBri = server.hasArg("GB");
useGammaCorrectionRGB = server.hasArg("GCRGB"); useGammaCorrectionRGB = server.hasArg("GC");
fadeTransition = server.hasArg("TFADE"); fadeTransition = server.hasArg("TF");
sweepTransition = server.hasArg("TSWEE"); sweepTransition = server.hasArg("TS");
sweepDirection = !server.hasArg("TSDIR"); sweepDirection = !server.hasArg("TI");
if (server.hasArg("TDLAY")) if (server.hasArg("TD"))
{ {
int i = server.arg("TDLAY").toInt(); int i = server.arg("TD").toInt();
if (i > 0){ if (i > 0){
transitionDelay = i; transitionDelay = i;
} }
} }
if (server.hasArg("TLBRI")) if (server.hasArg("TB"))
{ {
nightlightTargetBri = server.arg("TLBRI").toInt(); nightlightTargetBri = server.arg("TB").toInt();
} }
if (server.hasArg("TLDUR")) if (server.hasArg("TL"))
{ {
int i = server.arg("TLDUR").toInt(); int i = server.arg("TL").toInt();
if (i > 0) nightlightDelayMins = i; if (i > 0) nightlightDelayMins = i;
} }
nightlightFade = server.hasArg("TLFDE"); nightlightFade = server.hasArg("TW");
reverseMode = server.hasArg("LEDRV"); reverseMode = server.hasArg("RV");
strip.setReverseMode(reverseMode); strip.setReverseMode(reverseMode);
if (server.hasArg("WOFFS")) if (server.hasArg("WO"))
{ {
int i = server.arg("WOFFS").toInt(); int i = server.arg("WO").toInt();
if (i >= -255 && i <= 255) arlsOffset = i; if (i >= -255 && i <= 255) arlsOffset = i;
} }
if (server.hasArg("NRBRI")) if (server.hasArg("BF"))
{ {
int i = server.arg("NRBRI").toInt(); int i = server.arg("BF").toInt();
if (i > 0) briMultiplier = i; if (i > 0) briMultiplier = i;
} }
} }
@ -247,57 +247,57 @@ void handleSettingsSet(byte subPage)
//UI //UI
if (subPage == 3) if (subPage == 3)
{ {
if (server.hasArg("DESC")) serverDescription = server.arg("DESC"); if (server.hasArg("DS")) serverDescription = server.arg("DS");
useHSBDefault = server.hasArg("COLMD"); useHSBDefault = server.hasArg("MD");
useHSB = useHSBDefault; useHSB = useHSBDefault;
if (server.hasArg("THEME")) currentTheme = server.arg("THEME").toInt(); if (server.hasArg("TH")) currentTheme = server.arg("TH").toInt();
for(int i=0;i<6;i++) for(int i=0;i<6;i++)
{ {
if (server.hasArg("CCOL"+String(i))) cssCol[i] = server.arg("CCOL"+String(i)); if (server.hasArg("C"+String(i))) cssCol[i] = server.arg("C"+String(i));
} }
if (server.hasArg("CFONT")) cssFont = server.arg("CFONT"); if (server.hasArg("CF")) cssFont = server.arg("CF");
buildCssColorString(); buildCssColorString();
} }
//SYNC //SYNC
if (subPage == 4) if (subPage == 4)
{ {
buttonEnabled = server.hasArg("BTNON"); buttonEnabled = server.hasArg("BT");
if (server.hasArg("NUDPP")) if (server.hasArg("UP"))
{ {
udpPort = server.arg("NUDPP").toInt(); udpPort = server.arg("UP").toInt();
} }
receiveNotificationBrightness = server.hasArg("NRCBR"); receiveNotificationBrightness = server.hasArg("RB");
receiveNotificationColor = server.hasArg("NRCCL"); receiveNotificationColor = server.hasArg("RC");
receiveNotificationEffects = server.hasArg("NRCFX"); receiveNotificationEffects = server.hasArg("RX");
receiveNotifications = (receiveNotificationBrightness || receiveNotificationColor || receiveNotificationEffects); receiveNotifications = (receiveNotificationBrightness || receiveNotificationColor || receiveNotificationEffects);
notifyDirectDefault = server.hasArg("NSDIR"); notifyDirectDefault = server.hasArg("SD");
notifyDirect = notifyDirectDefault; notifyDirect = notifyDirectDefault;
notifyButton = server.hasArg("NSBTN"); notifyButton = server.hasArg("SB");
notifyTwice = server.hasArg("NS2XS"); notifyTwice = server.hasArg("S2");
alexaEnabled = server.hasArg("ALEXA"); alexaEnabled = server.hasArg("AL");
if (server.hasArg("AINVN")) alexaInvocationName = server.arg("AINVN"); if (server.hasArg("AI")) alexaInvocationName = server.arg("AI");
alexaNotify = server.hasArg("NSALX"); alexaNotify = server.hasArg("SA");
notifyHue = server.hasArg("NSHUE"); notifyHue = server.hasArg("SH");
for (int i=0;i<4;i++){ for (int i=0;i<4;i++){
String a = "HUIP"+String(i); String a = "H"+String(i);
if (server.hasArg(a)) if (server.hasArg(a))
hueIP[i] = server.arg(a).toInt(); hueIP[i] = server.arg(a).toInt();
} }
if (server.hasArg("HUELI")) if (server.hasArg("HL"))
{ {
int i = server.arg("HUELI").toInt(); int i = server.arg("HL").toInt();
if (i > 0) huePollLightId = i; if (i > 0) huePollLightId = i;
} }
if (server.hasArg("HUEPI")) if (server.hasArg("HI"))
{ {
int i = server.arg("HUEPI").toInt(); int i = server.arg("HI").toInt();
if (i > 50) huePollIntervalMs = i; if (i > 50) huePollIntervalMs = i;
} }
hueApplyOnOff = server.hasArg("HURIO"); hueApplyOnOff = server.hasArg("HO");
hueApplyBri = server.hasArg("HURBR"); hueApplyBri = server.hasArg("HB");
hueApplyColor = server.hasArg("HURCL"); hueApplyColor = server.hasArg("HC");
if (server.hasArg("HUEPL")) if (server.hasArg("HP"))
{ {
if (!huePollingEnabled) hueAttempt = true; if (!huePollingEnabled) hueAttempt = true;
if (!setupHue()) hueAttempt = true; if (!setupHue()) hueAttempt = true;
@ -311,56 +311,56 @@ void handleSettingsSet(byte subPage)
//TIME //TIME
if (subPage == 5) if (subPage == 5)
{ {
ntpEnabled = server.hasArg("NTPON"); ntpEnabled = server.hasArg("NT");
useAMPM = !server.hasArg("CL24H"); useAMPM = !server.hasArg("CF");
if (server.hasArg("TZONE")) currentTimezone = server.arg("TZONE").toInt(); if (server.hasArg("TZ")) currentTimezone = server.arg("TZ").toInt();
if (server.hasArg("UTCOS")) utcOffsetSecs = server.arg("UTCOS").toInt(); if (server.hasArg("UO")) utcOffsetSecs = server.arg("UO").toInt();
if (ntpEnabled && WiFi.status() == WL_CONNECTED && !ntpConnected) ntpConnected = ntpUdp.begin(ntpLocalPort); //start if not already connected if (ntpEnabled && WiFi.status() == WL_CONNECTED && !ntpConnected) ntpConnected = ntpUdp.begin(ntpLocalPort); //start if not already connected
if (server.hasArg("OLMDE")){ if (server.hasArg("OL")){
overlayDefault = server.arg("OLMDE").toInt(); overlayDefault = server.arg("OL").toInt();
overlayCurrent = overlayDefault; overlayCurrent = overlayDefault;
strip.unlockAll(); strip.unlockAll();
} }
if (server.hasArg("OLIN1")) overlayMin = server.arg("OLIN1").toInt(); if (server.hasArg("O1")) overlayMin = server.arg("O1").toInt();
if (server.hasArg("OLIN2")) overlayMax = server.arg("OLIN2").toInt(); if (server.hasArg("O2")) overlayMax = server.arg("O2").toInt();
if (server.hasArg("OLINM")) analogClock12pixel = server.arg("OLINM").toInt(); if (server.hasArg("OM")) analogClock12pixel = server.arg("OM").toInt();
analogClock5MinuteMarks = server.hasArg("OL5MI"); analogClock5MinuteMarks = server.hasArg("O5");
analogClockSecondsTrail = server.hasArg("OLSTR"); analogClockSecondsTrail = server.hasArg("OS");
if (server.hasArg("CRONX")) cronixieDisplay = server.arg("CRONX"); if (server.hasArg("CX")) cronixieDisplay = server.arg("CX");
bool cbOld = cronixieBacklight; bool cbOld = cronixieBacklight;
cronixieBacklight = server.hasArg("CROBL"); cronixieBacklight = server.hasArg("CB");
if (cbOld != cronixieBacklight && overlayCurrent == 4) if (cbOld != cronixieBacklight && overlayCurrent == 4)
{ {
strip.setCronixieBacklight(cronixieBacklight); overlayRefreshedTime = 0; strip.setCronixieBacklight(cronixieBacklight); overlayRefreshedTime = 0;
} }
countdownMode = server.hasArg("CLCND"); countdownMode = server.hasArg("CE");
if (server.hasArg("CDGYR")) countdownYear = server.arg("CDGYR").toInt(); if (server.hasArg("CY")) countdownYear = server.arg("CY").toInt();
if (server.hasArg("CDGMN")) countdownMonth = server.arg("CDGMN").toInt(); if (server.hasArg("CI")) countdownMonth = server.arg("CI").toInt();
if (server.hasArg("CDGDY")) countdownDay = server.arg("CDGDY").toInt(); if (server.hasArg("CD")) countdownDay = server.arg("CD").toInt();
if (server.hasArg("CDGHR")) countdownHour = server.arg("CDGHR").toInt(); if (server.hasArg("CH")) countdownHour = server.arg("CH").toInt();
if (server.hasArg("CDGMI")) countdownMin = server.arg("CDGMI").toInt(); if (server.hasArg("CM")) countdownMin = server.arg("CM").toInt();
if (server.hasArg("CDGSC")) countdownSec = server.arg("CDGSC").toInt(); if (server.hasArg("CS")) countdownSec = server.arg("CS").toInt();
for (int i=1;i<17;i++) for (int i=1;i<17;i++)
{ {
String a = "MC"+String(i); String a = "M"+String(i);
if (server.hasArg(a)) saveMacro(i,server.arg(a),false); if (server.hasArg(a)) saveMacro(i,server.arg(a),false);
} }
if (server.hasArg("MCRBT")) macroBoot = server.arg("MCRBT").toInt(); if (server.hasArg("MB")) macroBoot = server.arg("MB").toInt();
if (server.hasArg("MCA0I")) macroAlexaOn = server.arg("MCA0I").toInt(); if (server.hasArg("A0")) macroAlexaOn = server.arg("A0").toInt();
if (server.hasArg("MCA0O")) macroAlexaOff = server.arg("MCA0O").toInt(); if (server.hasArg("A1")) macroAlexaOff = server.arg("A1").toInt();
if (server.hasArg("MCB0D")) macroButton = server.arg("MCB0D").toInt(); if (server.hasArg("MP")) macroButton = server.arg("MP").toInt();
if (server.hasArg("MCB0L")) macroLongPress = server.arg("MCB0L").toInt(); if (server.hasArg("ML")) macroLongPress = server.arg("ML").toInt();
if (server.hasArg("MCNTD")) macroCountdown = server.arg("MCNTD").toInt(); if (server.hasArg("MC")) macroCountdown = server.arg("MC").toInt();
if (server.hasArg("MCNLO")) macroNl = server.arg("MCNLO").toInt(); if (server.hasArg("MN")) macroNl = server.arg("MN").toInt();
} }
//SECURITY //SECURITY
if (subPage == 6) if (subPage == 6)
{ {
if (server.hasArg("RESET")) if (server.hasArg("RS"))
{ {
clearEEPROM(); clearEEPROM();
serveMessage(200, "All Settings erased.", "Connect to WLED-AP to setup again...",255); serveMessage(200, "All Settings erased.", "Connect to WLED-AP to setup again...",255);
@ -368,24 +368,24 @@ void handleSettingsSet(byte subPage)
} }
bool pwdCorrect = !otaLock; //always allow access if ota not locked bool pwdCorrect = !otaLock; //always allow access if ota not locked
if (server.hasArg("OPASS")) if (server.hasArg("OP"))
{ {
if (otaLock && otaPass.equals(server.arg("OPASS"))) if (otaLock && otaPass.equals(server.arg("OP")))
{ {
pwdCorrect = true; pwdCorrect = true;
} }
if (!otaLock && server.arg("OPASS").length() > 0) if (!otaLock && server.arg("OP").length() > 0)
{ {
otaPass = server.arg("OPASS"); otaPass = server.arg("OP");
} }
} }
if (pwdCorrect) //allow changes if correct pwd or no ota active if (pwdCorrect) //allow changes if correct pwd or no ota active
{ {
otaLock = server.hasArg("NOOTA"); otaLock = server.hasArg("NO");
wifiLock = server.hasArg("OWIFI"); wifiLock = server.hasArg("OW");
recoveryAPDisabled = server.hasArg("NORAP"); recoveryAPDisabled = server.hasArg("NA");
aOtaEnabled = server.hasArg("AROTA"); aOtaEnabled = server.hasArg("AO");
} }
} }