Version 0.5.0 nearly done
Improved user interface Added Nightlight user interface page Added Welcome page for new users Added 12 User Interface Themes Added option for custom theme, including font Separated settings page into 6 sub-pages Fixed Favicon not working Fixed Alexa discovery bug Added options to specify receiving brightness/color/effect from notifications Added effect intensity setting. Only experimental use by 3 effects (blink) at the moment Improved speed of Access point availability on initial setup Removed need to reboot after enabling NTP time TODO: IX bug Updating readmes
This commit is contained in:
parent
76dd7b63fb
commit
6ebe889d5e
@ -1,8 +1,8 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head><meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
|
||||
<head><meta charset="utf-8">
|
||||
<link rel='shortcut icon' type='image/x-icon' href='/favicon.ico'/>
|
||||
<title>WLED 0.5dev</title>
|
||||
<title>WLED 0.5.0</title>
|
||||
<script>
|
||||
var d=document;
|
||||
var w=window.getComputedStyle(d.querySelector("html"));
|
||||
@ -12,6 +12,7 @@
|
||||
var nsa=false;
|
||||
var sto=false;
|
||||
var uwv=false;
|
||||
var sbf=true;
|
||||
var firstload=true;
|
||||
var lastsx = 0;
|
||||
var nState = 0;
|
||||
@ -31,7 +32,6 @@
|
||||
var w=window.getComputedStyle(d.querySelector("html"));
|
||||
aC = w.getPropertyValue("--aCol");
|
||||
bC = w.getPropertyValue("--bCol");
|
||||
cC = w.getPropertyValue("--cCol");
|
||||
dC = w.getPropertyValue("--dCol");
|
||||
CV(0);
|
||||
setInterval('GIO()', 5000);
|
||||
@ -60,12 +60,15 @@
|
||||
d.Cf.SX.value = this.responseXML.getElementsByTagName('sx')[0].childNodes[0].nodeValue;
|
||||
d.Cf.IX.value = this.responseXML.getElementsByTagName('ix')[0].childNodes[0].nodeValue;
|
||||
nla = (this.responseXML.getElementsByTagName('nl')[0].innerHTML)!=0?true:false;
|
||||
if(firstload){
|
||||
d.Cf.NC.checked = (this.responseXML.getElementsByTagName('nf')[0].innerHTML)!=0?true:false;
|
||||
d.Cf.SN.value = this.responseXML.getElementsByTagName('nd')[0].childNodes[0].nodeValue;
|
||||
d.Cf.ST.value = this.responseXML.getElementsByTagName('nt')[0].childNodes[0].nodeValue;
|
||||
CV(parseInt(this.responseXML.getElementsByTagName('md')[0].childNodes[0].nodeValue));
|
||||
}firstload=false;
|
||||
nState = 0;
|
||||
nState = (this.responseXML.getElementsByTagName('nr')[0].innerHTML)!=0?1:0;
|
||||
nState += (this.responseXML.getElementsByTagName('ns')[0].innerHTML)!=0?2:0;
|
||||
if(firstload)CV(this.responseXML.getElementsByTagName('md')[0].childNodes[0].nodeValue);
|
||||
d.getElementsByClassName("desc")[0].innerHTML = this.responseXML.getElementsByTagName('desc')[0].innerHTML;
|
||||
UV();
|
||||
}
|
||||
@ -75,7 +78,6 @@
|
||||
request.open("GET", "win/" +resp +nocache, true);
|
||||
request.send(null);
|
||||
resp="";
|
||||
firstload=false;
|
||||
}
|
||||
function GC()
|
||||
{
|
||||
@ -174,7 +176,7 @@
|
||||
case 2: gId("path1").style.fill = dC;gId("path2").style.fill = aC;break;
|
||||
case 3: gId("path1").style.fill = aC; gId("path2").style.fill = aC;
|
||||
}
|
||||
tgb.style.fill=(Cf.SA.selectedIndex>0)?aC:dC;
|
||||
tgb.style.fill=(Cf.SA.value>0)?aC:dC;
|
||||
ccX.style.display=(Cf.TX.selectedIndex>52)?"block":"none";
|
||||
fof.style.fill=(Cf.TX.selectedIndex>52)?aC:dC;
|
||||
fmr.style.fill=(Cf.TX.selectedIndex<1)?aC:dC;
|
||||
@ -239,7 +241,8 @@
|
||||
stb.style.fill=aC;
|
||||
cdB.style.display="none";
|
||||
stf.style.display="inline";
|
||||
stf.src="/settings";
|
||||
if(sbf)stf.src="/settings";
|
||||
sbf=false;
|
||||
}
|
||||
function CloseSettings()
|
||||
{
|
||||
@ -263,6 +266,7 @@
|
||||
if(nla){
|
||||
resp+="&NL="+d.Cf.SN.value;
|
||||
resp+="&NT="+d.Cf.ST.value;
|
||||
resp+=(d.Cf.NC.checked)?"&NF=1":"&NF=0";
|
||||
}else{
|
||||
resp+="&NL=0";
|
||||
}
|
||||
@ -338,7 +342,8 @@
|
||||
--bCol: #124;
|
||||
--cCol: #334;
|
||||
--dCol: #288;
|
||||
--sCol: #003eff;
|
||||
--sCol: #FF00FF;
|
||||
--cFn: Verdana;
|
||||
}
|
||||
.ctrl_box {
|
||||
margin: auto;
|
||||
@ -402,14 +407,14 @@
|
||||
background: linear-gradient(to right, black, red);
|
||||
}
|
||||
body {
|
||||
font-family: Verdana, Helvetica, sans-serif;
|
||||
font-family: var(--cFn), Helvetica, sans-serif;
|
||||
text-align: center;
|
||||
background: linear-gradient(var(--bCol),black);
|
||||
height: 100%;
|
||||
margin: 0;
|
||||
background-repeat: no-repeat;
|
||||
background-attachment: fixed;
|
||||
color: var(--dCol);
|
||||
color: var(--tCol);
|
||||
}
|
||||
html {
|
||||
height: 100%;
|
||||
@ -431,10 +436,10 @@
|
||||
width: 12vw;
|
||||
height: 10vmin;
|
||||
filter: drop-shadow( -5px -5px 5px var(--sCol) );
|
||||
|
||||
}
|
||||
input {
|
||||
filter: drop-shadow( -5px -5px 5px var(--sCol) );
|
||||
font-family: var(--cFn), sans-serif;
|
||||
}
|
||||
button {
|
||||
background: var(--bCol);
|
||||
@ -442,16 +447,18 @@
|
||||
border: 0.5ch solid var(--bCol);
|
||||
margin-bottom: 1vh;
|
||||
filter: drop-shadow( -5px -5px 5px var(--sCol) );
|
||||
font-family: var(--cFn), sans-serif;
|
||||
}
|
||||
select {
|
||||
background: var(--bCol);
|
||||
color: var(--dCol);
|
||||
color: var(--tCol);
|
||||
border: 0.5ch solid var(--bCol);
|
||||
filter: drop-shadow( -5px -5px 5px var(--sCol) );
|
||||
font-family: var(--cFn), sans-serif;
|
||||
}
|
||||
input[type=number] {
|
||||
background: var(--bCol);
|
||||
color: var(--dCol);
|
||||
color: var(--tCol);
|
||||
border: 0.5ch solid var(--bCol);
|
||||
width: 3em;
|
||||
}
|
||||
|
@ -1,11 +1,16 @@
|
||||
<!DOCTYPE html>
|
||||
<html><head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
|
||||
<title>WLED Message</title>
|
||||
<script>
|
||||
function B() {
|
||||
window.history.back();
|
||||
}
|
||||
function RS() {
|
||||
window.location = "/settings";
|
||||
}
|
||||
function RP() {
|
||||
top.location.href=top.location.href;
|
||||
}
|
||||
</script>
|
||||
<style>
|
||||
:root {
|
||||
@ -14,22 +19,25 @@
|
||||
--cCol: #1D2731;
|
||||
--dCol: #328CC1;
|
||||
--sCol: #000;
|
||||
--tCol: #328CC1;
|
||||
--cFn: Verdana;
|
||||
}
|
||||
button {
|
||||
background: var(--bCol);
|
||||
color: var(--dCol);
|
||||
color: var(--tCol);
|
||||
border: 0.3ch solid var(--bCol);
|
||||
display: inline-block;
|
||||
filter: drop-shadow( -5px -5px 5px var(--sCol) );
|
||||
font-family: var(--cFn), sans-serif;
|
||||
font-size: 20px;
|
||||
margin: 8px;
|
||||
margin-top: 12px;
|
||||
}
|
||||
body {
|
||||
font-family: Verdana, Helvetica, sans-serif;
|
||||
font-family: var(--cFn), sans-serif;
|
||||
text-align: center;
|
||||
background: var(--cCol);
|
||||
color: var(--dCol);
|
||||
color: var(--tCol);
|
||||
line-height: 200%;
|
||||
margin: 0;
|
||||
background-attachment: fixed;
|
||||
|
@ -9,9 +9,10 @@
|
||||
--cCol: #1D2731;
|
||||
--dCol: #328CC1;
|
||||
--sCol: #000;
|
||||
--tCol: #328CC1;
|
||||
--cFn: Verdana;
|
||||
}
|
||||
body {
|
||||
font-family: Verdana, Helvetica, sans-serif;
|
||||
text-align: center;
|
||||
background: var(--cCol);
|
||||
height: 100%;
|
||||
@ -20,11 +21,13 @@
|
||||
}
|
||||
button {
|
||||
background: var(--bCol);
|
||||
color: var(--dCol);
|
||||
color: var(--tCol);
|
||||
font-family: var(--cFn), Helvetica, sans-serif;
|
||||
border: 0.3ch solid var(--bCol);
|
||||
display: inline-block;
|
||||
filter: drop-shadow( -5px -5px 5px var(--sCol) );
|
||||
font-size: 9vmin;
|
||||
font-size: 8vmin;
|
||||
height:13.86vh;
|
||||
width: 95%;
|
||||
margin-top: 2.4vh;
|
||||
}
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,20 +0,0 @@
|
||||
6. Amber:
|
||||
--aCol: #f7c331;
|
||||
--bCol: #dcc7aa;
|
||||
--cCol: #6b7a8f;
|
||||
--dCol: #f7882f;
|
||||
--sCol: #0007;
|
||||
|
||||
7. Club
|
||||
--aCol: #fc3;
|
||||
--bCol: #124;
|
||||
--cCol: #334;
|
||||
--dCol: #f1d;
|
||||
--sCol: #f00;
|
||||
|
||||
8: Air:
|
||||
--aCol: #0ac;
|
||||
--bCol: #124;
|
||||
--cCol: #334;
|
||||
--dCol: #00ced1;
|
||||
--sCol: #003eff;
|
@ -1,6 +1,6 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head><meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
|
||||
<head>
|
||||
<title>WLED Setup</title>
|
||||
<style>
|
||||
:root {
|
||||
@ -20,6 +20,7 @@
|
||||
background-attachment: fixed;
|
||||
color: var(--dCol);
|
||||
}
|
||||
|
||||
svg {
|
||||
fill: var(--dCol);
|
||||
}
|
||||
|
File diff suppressed because one or more lines are too long
@ -2,7 +2,7 @@
|
||||
* Settings html
|
||||
*/
|
||||
const char PAGE_settingsCss[] PROGMEM = R"=====(
|
||||
body{font-family:Verdana,Helvetica,sans-serif;text-align:center;background:var(--cCol);color:var(--dCol);line-height:200%;margin:0;background-attachment:fixed}hr{border-color:var(--dCol);filter:drop-shadow(-5px -5px 5px var(--sCol))}button{background:var(--bCol);color:var(--dCol);border:.3ch solid var(--bCol);display:inline-block;filter:drop-shadow(-5px -5px 5px var(--sCol));font-size:20px;margin:8px;margin-top:12px}.helpB{text-align:left;position:absolute;width:60px}input{background:var(--bCol);color:var(--dCol);border:.5ch solid var(--bCol);filter:drop-shadow(-5px -5px 5px var(--sCol))}input[type=number]{width:3em}select{background:var(--bCol);color:var(--dCol);border:0.5ch solid var(--bCol);filter:drop-shadow( -5px -5px 5px var(--sCol) );}</style>
|
||||
body{font-family:var(--cFn),sans-serif;text-align:center;background:var(--cCol);color:var(--tCol);line-height:200%;margin:0;background-attachment:fixed}hr{border-color:var(--dCol);filter:drop-shadow(-5px -5px 5px var(--sCol))}button{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}.helpB{text-align:left;position:absolute;width:60px}input{background:var(--bCol);color:var(--tCol);font-family:var(--cFn),sans-serif;border:.5ch solid var(--bCol);filter:drop-shadow(-5px -5px 5px var(--sCol))}input[type=number]{width:3em}select{background:var(--bCol);color:var(--tCol);font-family:var(--cFn),sans-serif;border:0.5ch solid var(--bCol);filter:drop-shadow( -5px -5px 5px var(--sCol) );}</style>
|
||||
)=====";
|
||||
|
||||
const char PAGE_settings0[] PROGMEM = R"=====(
|
||||
@ -13,7 +13,7 @@ const char PAGE_settings0[] PROGMEM = R"=====(
|
||||
)=====";
|
||||
|
||||
const char PAGE_settings1[] PROGMEM = R"=====(
|
||||
body{font-family:Verdana,Helvetica,sans-serif;text-align:center;background:var(--cCol);height:100%;margin:0;background-attachment:fixed}button{background:var(--bCol);color:var(--dCol);border:.3ch solid var(--bCol);display:inline-block;filter:drop-shadow(-5px -5px 5px var(--sCol));font-size:9vmin;width:95%;margin-top:2.4vh}</style>
|
||||
body{text-align:center;background:var(--cCol);height:100%;margin:0;background-attachment:fixed}button{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:8vmin;height:13.86vh;width:95%;margin-top:2.4vh}</style>
|
||||
</head>
|
||||
<body>
|
||||
<form action=/settings/wifi><button type=submit>WiFi Setup</button></form>
|
||||
@ -37,7 +37,7 @@ const char PAGE_settings_wifi1[] PROGMEM = R"=====(
|
||||
<body onload="GetV()">
|
||||
<form id="form_s" name="Sf" method="post">
|
||||
<div class="helpB"><button type="button" onclick="H()">?</button></div>
|
||||
<button type="button" onclick="B()">Back</button><button type="submit" name="SUBM">Save</button><hr>
|
||||
<button type="button" onclick="B()">Back</button><button type="submit" name="SUBM">Save & Reboot</button><hr>
|
||||
<h2>WiFi setup</h2>
|
||||
<h3>Connect to existing network</h3>
|
||||
Network name (SSID, empty to not connect): <br><input name="CSSID" maxlength="32"> <br>
|
||||
@ -67,7 +67,7 @@ Hide AP name: <input type="checkbox" name="APHSSID"> <br>
|
||||
AP password (leave empty for open): <br> <input type="password" name="APPASS" maxlength="63"> <br>
|
||||
Access Point WiFi channel: <input name="APCHAN" type="number" min="1" max="13" required> <br>
|
||||
AP IP: <span class="sip"> Not active </span> <hr>
|
||||
<button type="button" onclick="B()">Back</button><button type="submit" name="SUBM">Save</button>
|
||||
<button type="button" onclick="B()">Back</button><button type="submit" name="SUBM">Save & Reboot</button>
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
||||
@ -152,21 +152,24 @@ Color Theme:
|
||||
<option value="6">Amber</option>
|
||||
<option value="7">Club</option>
|
||||
<option value="8">Air</option>
|
||||
<option value="9">Coookie</option>
|
||||
<option value="10">Unused</option>
|
||||
<option value="11">Unused</option>
|
||||
<option value="12">Unused</option>
|
||||
<option value="13">Unused</option>
|
||||
<option value="9">Nixie</option>
|
||||
<option value="10">Terminal</option>
|
||||
<option value="11">Placeholder</option>
|
||||
<option value="12">Placeholder</option>
|
||||
<option value="13">Placeholder</option>
|
||||
<option value="14">The End</option>
|
||||
<option value="15" id="co">Custom</option>
|
||||
</select><br>
|
||||
<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 background: <input maxlength=9 name="CCOL1"><br>
|
||||
Custom panel color: <input maxlength=9 name="CCOL2"><br>
|
||||
Custom text color: <input maxlength=9 name="CCOL3"><br>
|
||||
Custom shadow: <input maxlength=9 name="CCOL4"><br></div>
|
||||
Custom icon color: <input maxlength=9 name="CCOL3"><br>
|
||||
Custom shadow: <input maxlength=9 name="CCOL4"><br>
|
||||
Custom text color: <input maxlength=9 name="CCOL5"><br></div>
|
||||
Use font: <input maxlength=32 name="CFONT"><br>
|
||||
Make sure the font you use is installed on your system!<br>
|
||||
<hr><button type="button" onclick="B()">Back</button><button type="submit" name="SUBM">Save</button>
|
||||
</form>
|
||||
</body>
|
||||
@ -233,9 +236,8 @@ const char PAGE_settings_time1[] PROGMEM = R"=====(
|
||||
<div class="helpB"><button type="button" onclick="H()">?</button></div>
|
||||
<button type="button" onclick="B()">Back</button><button type="submit" name="SUBM">Save</button><hr>
|
||||
<h2>Time setup</h2>
|
||||
Requires reboot. <br>
|
||||
Get time from NTP server: <input type="checkbox" name="NTPON"><br>
|
||||
NTP server: <input name="NTPSR" maxlength="32"><br>
|
||||
<!--NTP server: <input name="NTPSR" maxlength="32"><br>
|
||||
Time zone:
|
||||
<select name="TZONE">
|
||||
<option value="1" selected>GMT(UTC)</option>
|
||||
@ -252,7 +254,7 @@ Time zone:
|
||||
<option value="12">AEST/AEDT</option>
|
||||
<option value="13">NZST/NZDT</option>
|
||||
</select><br>
|
||||
Hour/Min offset: <input name="TOFSH" type="number" min="-255" max="255" required> <input name="TOFSM" type="number" min="-255" max="255" required><br>
|
||||
Hour/Min offset: <input name="TOFSH" type="number" min="-255" max="255" required> <input name="TOFSM" type="number" min="-255" max="255" required><br>-->
|
||||
Current local time is <span class="times">unknown</span>.
|
||||
<h3>Weather</h3>
|
||||
Coming soon! Not yet implemented!
|
||||
@ -264,7 +266,8 @@ Reverse (turns on at sunset): <input type="checkbox" name="WREVL"><br>
|
||||
Fade duration: <input name="WSDUR" type="number" min="0" max="255" required><br>
|
||||
Sunrise/Sunset Offset: <input name="WSOFS" type="number" min="-255" max="255" required>-->
|
||||
<h3>Advanced Macros</h3>
|
||||
Define API macros here:<br>
|
||||
Coming soon! Not yet implemented!
|
||||
<!--Define API macros here:<br>
|
||||
0: <input name="MCR00" maxlength="64"><br>
|
||||
1: <input name="MCR01" maxlength="64"><br>
|
||||
2: <input name="MCR02" maxlength="64"><br>
|
||||
@ -283,19 +286,21 @@ Define API macros here:<br>
|
||||
15: <input name="MCR15" maxlength="64"><br>
|
||||
<br>
|
||||
<i>Use -1 to use the default action instead of a macro</i><br>
|
||||
<!--1st Time-Controlled Macro:-->
|
||||
<--1st Time-Controlled Macro:
|
||||
Alexa On/Off Macros: <input name="MCA0I" type="number" min="-1" max="15" required> <input name="MCA0O" type="number" min="-1" max="15" required><br>
|
||||
<!--Emulate 2nd Alexa device:
|
||||
Emulate 3rd Alexa device:-->
|
||||
<--Emulate 2nd Alexa device:
|
||||
|
||||
Emulate 3rd Alexa device:
|
||||
Button Macro: <input name="MCBT0" type="number" min="-1" max="15" required><br>
|
||||
Button Long Press Macro: <input name="MCBT1" type="number" min="-1" max="15" required><br>
|
||||
<!--Sunrise Macro
|
||||
Sunset Macro-->
|
||||
Countdown-Over Macro: <input name="MCNTD" type="number" min="-1" max="15" required><br>
|
||||
<--Sunrise Macro
|
||||
Sunset Macro
|
||||
Countdown-Over Macro: <input name="MCNTD" type="number" min="-1" max="15" required><br>-->
|
||||
<hr>
|
||||
<button type="button" onclick="B()">Back</button><button type="submit" name="SUBM">Save</button>
|
||||
</form>
|
||||
</body></html>
|
||||
</body>
|
||||
</html>
|
||||
)=====";
|
||||
|
||||
const char PAGE_settings_sec0[] PROGMEM = R"=====(
|
||||
@ -309,7 +314,7 @@ const char PAGE_settings_sec1[] PROGMEM = R"=====(
|
||||
<body onload="GetV()">
|
||||
<form id="form_s" name="Sf" method="post">
|
||||
<div class="helpB"><button type="button" onclick="H()">?</button></div>
|
||||
<button type="button" onclick="B()">Back</button><button type="submit" name="SUBM">Save</button><hr>
|
||||
<button type="button" onclick="B()">Back</button><button type="submit" name="SUBM">Save & Reboot</button><hr>
|
||||
<h2>Security & Update setup</h2>
|
||||
Enable OTA lock: <input type="checkbox" name="NOOTA"><br>
|
||||
Passphrase: <input type="password" name="OPASS" maxlength="32"><br>
|
||||
@ -328,7 +333,7 @@ HTTP traffic is not encrypted. An attacker in the same network could intercept f
|
||||
<button type="button" onclick="U()">Manual OTA Update</button><br>
|
||||
Enable ArduinoOTA: <input type="checkbox" name="AROTA"><br>
|
||||
<h3>About</h3>
|
||||
<a href="https://github.com/Aircoookie/WLED">WLED</a> version 0.5dev<br>
|
||||
<a href="https://github.com/Aircoookie/WLED">WLED</a> version 0.5.0<br>
|
||||
(c) 2016-2018 Christian Schwinne <br>
|
||||
<i>Licensed under the MIT license</i><br><br>
|
||||
<i>Uses libraries:</i><br>
|
||||
@ -339,7 +344,7 @@ Enable ArduinoOTA: <input type="checkbox" name="AROTA"><br>
|
||||
<i><a href="https://github.com/Aircoookie/Espalexa">Espalexa</a> by Aircoookie (modified)</i><br><br>
|
||||
<i>UI icons by <a href="https://linearicons.com">Linearicons</a> created by <a href="https://perxis.com">Perxis</a>! (CC-BY-SA 4.0)</i> <br><br>
|
||||
Server message: <span class="msg"> Response error! </span><hr>
|
||||
<button type="button" onclick="B()">Back</button><button type="submit" name="SUBM">Save</button>
|
||||
<button type="button" onclick="B()">Back</button><button type="submit" name="SUBM">Save & Reboot</button>
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -4,12 +4,11 @@
|
||||
const char PAGE_msg0[] PROGMEM = R"=====(
|
||||
<!DOCTYPE html>
|
||||
<html><head>
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<title>WLED Message</title>
|
||||
<script>function B(){window.history.back()};</script>
|
||||
<script>function B(){window.history.back()};function RS(){window.location = "/settings";}function RP(){top.location.href=top.location.href;}</script>
|
||||
)=====";
|
||||
const char PAGE_msg1[] PROGMEM = R"=====(
|
||||
button{background:var(--bCol);color:var(--dCol);border:.3ch solid var(--bCol);display:inline-block;filter:drop-shadow(-5px -5px 5px var(--sCol));font-size:20px;margin:8px;margin-top:12px}body{font-family:Verdana,Helvetica,sans-serif;text-align:center;background:var(--cCol);color:var(--dCol);line-height:200%;margin:0;background-attachment:fixed}</style>
|
||||
button{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}body{font-family:var(--cFn),sans-serif;text-align:center;background:var(--cCol);color:var(--tCol);line-height:200%;margin:0;background-attachment:fixed}</style>
|
||||
</head>
|
||||
<body>
|
||||
)=====";
|
||||
@ -20,7 +19,7 @@ const char PAGE_welcome0[] PROGMEM = R"=====(
|
||||
<title>WLED Welcome!</title>
|
||||
)=====";
|
||||
const char PAGE_welcome1[] PROGMEM = R"=====(
|
||||
body{font-family:Verdana, Helvetica, sans-serif;text-align:center;background:linear-gradient(var(--bCol),black);height:100%;margin:0;background-repeat:no-repeat;background-attachment: fixed;color: var(--dCol);}svg {fill: var(--dCol);}
|
||||
body{font-family:var(--cFn),sans-serif;text-align:center;background:linear-gradient(var(--bCol),black);height:100%;margin:0;background-repeat:no-repeat;background-attachment: fixed;color: var(--tCol);}svg {fill: var(--dCol);}
|
||||
</style></head>
|
||||
<body>
|
||||
<svg style="position: absolute; width: 0; height: 0; overflow: hidden;" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
||||
@ -54,7 +53,7 @@ const char PAGE_edit[] PROGMEM = R"=====(SPIFFS disabled)=====";
|
||||
/*
|
||||
* favicon
|
||||
*/
|
||||
const char favicon[156] PROGMEM = {
|
||||
const char favicon[] PROGMEM = {
|
||||
0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x10, 0x10, 0x00, 0x00, 0x01, 0x00,
|
||||
0x18, 0x00, 0x86, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x89, 0x50,
|
||||
0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0x00, 0x00, 0x00, 0x0D, 0x49, 0x48,
|
||||
|
@ -12,16 +12,17 @@
|
||||
|
||||
|
||||
const char* ESP8266HTTPUpdateServer::_serverIndex =
|
||||
R"(<html><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> to find the details of this version.</i><br>
|
||||
<b>Double check to be sure to upload a valid .bin firmware file for your ESP! Otherwise you'll need USB recovery!</b><br><br>
|
||||
<form method='POST' action='' enctype='multipart/form-data'>
|
||||
<input type='file' name='update'>
|
||||
<input type='submit' value='Update!'>
|
||||
</form>
|
||||
</body></html>)";
|
||||
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>
|
||||
<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>
|
||||
<form method='POST' action='' enctype='multipart/form-data'>
|
||||
<input type='file' name='update'>
|
||||
<input type='submit' value='Update!'>
|
||||
</form>
|
||||
</body></html>)";
|
||||
const char* ESP8266HTTPUpdateServer::_failedResponse = R"(Update Failed!)";
|
||||
const char* ESP8266HTTPUpdateServer::_successResponse = "<META http-equiv=\"refresh\" content=\"15;URL=./\">Update Successful! Rebooting, please wait for redirect...";
|
||||
const char* ESP8266HTTPUpdateServer::_successResponse = R"(<script>setTimeout(function(){top.location.href="/";},20000);</script>Update Successful! Rebooting, please wait for redirect...)";
|
||||
|
||||
ESP8266HTTPUpdateServer::ESP8266HTTPUpdateServer(bool serial_debug)
|
||||
{
|
||||
|
@ -3,7 +3,7 @@
|
||||
*/
|
||||
/*
|
||||
* @title WLED project sketch
|
||||
* @version 0.5dev
|
||||
* @version 0.5.0
|
||||
* @author Christian Schwinne
|
||||
*/
|
||||
|
||||
@ -30,8 +30,8 @@
|
||||
#include "WS2812FX.h"
|
||||
|
||||
//version in format yymmddb (b = daily build)
|
||||
#define VERSION 1802193
|
||||
const String versionName = "WLED 0.5dev";
|
||||
#define VERSION 1802221
|
||||
const String versionString = "0.5.0";
|
||||
|
||||
//AP and OTA default passwords (change them!)
|
||||
String appass = "wled1234";
|
||||
@ -83,7 +83,7 @@ bool ntpEnabled = true;
|
||||
#endif
|
||||
|
||||
//Default CONFIG
|
||||
String serverDescription = versionName;
|
||||
String serverDescription = versionString;
|
||||
uint8_t currentTheme = 0;
|
||||
String clientssid = "Your_Network_Here";
|
||||
String clientpass = "Dummy_Pass";
|
||||
@ -112,12 +112,12 @@ uint8_t nightlightTargetBri = 0, bri_nl_t;
|
||||
bool fadeTransition = true;
|
||||
bool sweepTransition = false, sweepDirection = true;
|
||||
uint16_t transitionDelay = 1200;
|
||||
bool otaLock = true;
|
||||
bool otaLock = false, wifiLock = false;
|
||||
bool aOtaEnabled = true;
|
||||
bool onlyAP = false;
|
||||
bool buttonEnabled = true;
|
||||
bool notifyDirect = true, notifyButton = true, notifyDirectDefault = true, alexaNotify = false, macroNotify = false;
|
||||
bool receiveNotifications = true, receiveNotificationBrightness = true, receiveNotificlationColor = true, receiveNotificationEffects = true;
|
||||
bool receiveNotifications = true, receiveNotificationBrightness = true, receiveNotificationColor = true, receiveNotificationEffects = true;
|
||||
uint8_t briMultiplier = 100;
|
||||
uint8_t nightlightDelayMins = 60;
|
||||
bool nightlightFade = true;
|
||||
@ -182,6 +182,7 @@ uint8_t effectIntensity = 128;
|
||||
boolean udpConnected = false;
|
||||
byte udpIn[1026];
|
||||
String cssCol[]={"","","","","",""};
|
||||
String cssFont="Verdana";
|
||||
String cssColorString="";
|
||||
//NTP stuff
|
||||
boolean ntpConnected = false;
|
||||
@ -252,7 +253,7 @@ WS2812FX strip = WS2812FX(LEDCOUNT);
|
||||
//1 -> 0.4p 1711272 and up
|
||||
//2 -> 0.4p 1711302 and up
|
||||
//3 -> 0.4 1712121 and up
|
||||
//4 -> 0.5dev 1801271 and up
|
||||
//4 -> 0.5.0 and up
|
||||
|
||||
#ifdef DEBUG
|
||||
#define DEBUG_PRINT(x) Serial.print (x)
|
||||
@ -295,7 +296,7 @@ const uint8_t gamma8[] = {
|
||||
|
||||
String txd = "Please disable OTA Lock in security settings!";
|
||||
|
||||
void serveMessage(int,String,String,bool=false);
|
||||
void serveMessage(int,String,String,int=255);
|
||||
|
||||
void down()
|
||||
{
|
||||
|
@ -19,7 +19,6 @@ void saveSettingsToEEPROM()
|
||||
{
|
||||
clearEEPROM();
|
||||
EEPROM.write(233, 233);
|
||||
showWelcomePage = true;
|
||||
} else
|
||||
{
|
||||
showWelcomePage = false;
|
||||
@ -130,15 +129,20 @@ void saveSettingsToEEPROM()
|
||||
EEPROM.write(390, aOtaEnabled);
|
||||
EEPROM.write(391, receiveNotificationColor);
|
||||
EEPROM.write(392, receiveNotificationEffects);
|
||||
if (currentTheme == 15)
|
||||
{
|
||||
for (int k=0;k<6;k++){
|
||||
for (int i = 900+k*8; i < (908+k*8); ++i)
|
||||
EEPROM.write(393, wifiLock);
|
||||
|
||||
for (int k=0;k<6;k++){
|
||||
int in = 900+k*8;
|
||||
for (int i=in; i < in+8; ++i)
|
||||
{
|
||||
EEPROM.write(i, cssCol[k].charAt(i-900));
|
||||
EEPROM.write(i, cssCol[k].charAt(i-in));
|
||||
}}
|
||||
}
|
||||
|
||||
EEPROM.write(948,currentTheme);
|
||||
for (int i = 950; i < 982; ++i)
|
||||
{
|
||||
EEPROM.write(i, cssFont.charAt(i-950));
|
||||
}
|
||||
|
||||
EEPROM.commit();
|
||||
}
|
||||
@ -147,6 +151,7 @@ void loadSettingsFromEEPROM(bool first)
|
||||
{
|
||||
if (EEPROM.read(233) != 233) //first boot/reset to default
|
||||
{
|
||||
showWelcomePage=true;
|
||||
saveSettingsToEEPROM();
|
||||
return;
|
||||
}
|
||||
@ -280,24 +285,29 @@ void loadSettingsFromEEPROM(bool first)
|
||||
aOtaEnabled = EEPROM.read(390);
|
||||
receiveNotificationColor = EEPROM.read(391);
|
||||
receiveNotificationEffects = EEPROM.read(392);
|
||||
cssFont = "";
|
||||
for (int i = 950; i < 982; ++i)
|
||||
{
|
||||
if (EEPROM.read(i) == 0) break;
|
||||
cssFont += char(EEPROM.read(i));
|
||||
}
|
||||
}
|
||||
receiveNotifications = (receiveNotificationBrightness || receiveNotificationColor || receiveNotificationEffects);
|
||||
|
||||
bootPreset = EEPROM.read(389);
|
||||
wifiLock = EEPROM.read(393);
|
||||
|
||||
//favorite setting memory (25 slots/ each 20byte)
|
||||
//400 - 899 reserved
|
||||
|
||||
currentTheme = EEPROM.read(948);
|
||||
if (currentTheme == 15)
|
||||
{
|
||||
for (int k=0;k<6;k++){
|
||||
for (int i = 900+k*8; i < (908+k*8); ++i)
|
||||
for (int k=0;k<6;k++){
|
||||
int in=900+k*8;
|
||||
for (int i=in; i < in+8; ++i)
|
||||
{
|
||||
if (EEPROM.read(i) == 0) break;
|
||||
cssCol[k] += char(EEPROM.read(i));
|
||||
}}
|
||||
}
|
||||
|
||||
//custom macro memory (16 slots/ each 64byte)
|
||||
//1024-2047 reserved
|
||||
|
@ -153,6 +153,7 @@ String getSettings(uint8_t subPage)
|
||||
resp += ds + "BOOTP" + v + bootPreset +";";
|
||||
resp += ds + "FXDEF" + v + effectDefault +";";
|
||||
resp += ds + "SXDEF" + v + effectSpeedDefault +";";
|
||||
resp += ds + "IXDEF" + v + effectIntensityDefault +";";
|
||||
resp += ds + "GCBRI" + c + useGammaCorrectionBri +";";
|
||||
resp += ds + "GCRGB" + c + useGammaCorrectionRGB +";";
|
||||
resp += ds + "TFADE" + c + fadeTransition +";";
|
||||
@ -172,8 +173,9 @@ String getSettings(uint8_t subPage)
|
||||
resp += ds + "DESC" + v + "\"" + serverDescription + "\";";
|
||||
resp += ds + "COLMD" + c + useHSBDefault + ";";
|
||||
resp += ds + "THEME.selectedIndex=" + String(currentTheme) + ";";
|
||||
for(int i=0;i<5;i++)
|
||||
for(int i=0;i<6;i++)
|
||||
resp += ds + "CCOL" + i + v + "\"" + cssCol[i] + "\";";
|
||||
resp += ds + "CFONT" + v + "\"" + cssFont + "\";";
|
||||
}
|
||||
|
||||
if (subPage == 4)
|
||||
@ -199,9 +201,10 @@ String getSettings(uint8_t subPage)
|
||||
if (subPage == 6)
|
||||
{
|
||||
resp += ds + "NOOTA" + c + otaLock +";";
|
||||
resp += ds + "OWIFI" + c + wifiLock +";";
|
||||
resp += ds + "AROTA" + c + aOtaEnabled +";";
|
||||
resp += ds + "NORAP" + c + recoveryAPDisabled +";";
|
||||
resp += dg + "(\"msg\")[0]" + ih + "\""+ versionName +" (build " + VERSION + ") OK\";";
|
||||
resp += dg + "(\"msg\")[0]" + ih + "\"WLED "+ versionString +" (build " + VERSION + ") OK\";";
|
||||
}
|
||||
resp += "}</script>";
|
||||
|
||||
|
@ -196,6 +196,11 @@ void handleSettingsSet(uint8_t subPage)
|
||||
int i = server.arg("SXDEF").toInt();
|
||||
if (i >= 0 && i <= 255) effectSpeedDefault = i;
|
||||
}
|
||||
if (server.hasArg("IXDEF"))
|
||||
{
|
||||
int i = server.arg("IXDEF").toInt();
|
||||
if (i >= 0 && i <= 255) effectIntensityDefault = i;
|
||||
}
|
||||
}
|
||||
turnOnAtBoot = server.hasArg("BOOTN");
|
||||
if (server.hasArg("BOOTP"))
|
||||
@ -251,10 +256,11 @@ void handleSettingsSet(uint8_t subPage)
|
||||
useHSBDefault = server.hasArg("COLMD");
|
||||
useHSB = useHSBDefault;
|
||||
if (server.hasArg("THEME")) currentTheme = server.arg("THEME").toInt();
|
||||
for(int i=0;i<5;i++)
|
||||
for(int i=0;i<6;i++)
|
||||
{
|
||||
if (server.hasArg(("CCOL"+i))) cssCol[i] = server.arg(("CCOL"+i));
|
||||
if (server.hasArg("CCOL"+String(i))) cssCol[i] = server.arg("CCOL"+String(i));
|
||||
}
|
||||
if (server.hasArg("CFONT")) cssFont = server.arg("CFONT");
|
||||
buildCssColorString();
|
||||
}
|
||||
|
||||
@ -281,6 +287,7 @@ void handleSettingsSet(uint8_t subPage)
|
||||
if (subPage == 5)
|
||||
{
|
||||
ntpEnabled = server.hasArg("NTPON");
|
||||
if (ntpEnabled && WiFi.status() == WL_CONNECTED && !ntpConnected) ntpConnected = ntpUdp.begin(ntpLocalPort); //start if not already connected
|
||||
}
|
||||
|
||||
//SECURITY
|
||||
@ -289,27 +296,27 @@ void handleSettingsSet(uint8_t subPage)
|
||||
if (server.hasArg("RESET"))
|
||||
{
|
||||
clearEEPROM();
|
||||
serveMessage(200, "All Settings erased.", "Rebooting...");
|
||||
serveMessage(200, "All Settings erased.", "Connect to WLED-AP to setup again...",255);
|
||||
reset();
|
||||
}
|
||||
|
||||
|
||||
bool pwdCorrect = !otaLock; //always allow access if ota not locked
|
||||
if (server.hasArg("OPASS"))
|
||||
{
|
||||
if (!otaLock)
|
||||
if (otaLock && otapass.equals(server.arg("OPASS")))
|
||||
{
|
||||
pwdCorrect = true;
|
||||
}
|
||||
if (!otaLock && server.arg("OPASS").length() > 0)
|
||||
{
|
||||
if (server.arg("OPASS").length() > 0)
|
||||
otapass = server.arg("OPASS");
|
||||
} else if (!server.hasArg("NOOTA"))
|
||||
{
|
||||
if (otapass.equals(server.arg("OPASS")))
|
||||
{
|
||||
otaLock = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (server.hasArg("NOOTA")) otaLock = true;
|
||||
if (!otaLock)
|
||||
|
||||
if (pwdCorrect) //allow changes if correct pwd or no ota active
|
||||
{
|
||||
otaLock = server.hasArg("NOOTA");
|
||||
wifiLock = server.hasArg("OWIFI");
|
||||
recoveryAPDisabled = server.hasArg("NORAP");
|
||||
aOtaEnabled = server.hasArg("AROTA");
|
||||
}
|
||||
@ -547,7 +554,8 @@ boolean handleSet(String req)
|
||||
}
|
||||
}
|
||||
//toggle nightlight mode
|
||||
if (req.indexOf("NL=") > 0)
|
||||
pos = req.indexOf("NL=");
|
||||
if (pos > 0)
|
||||
{
|
||||
if (req.indexOf("NL=0") > 0)
|
||||
{
|
||||
@ -555,15 +563,10 @@ boolean handleSet(String req)
|
||||
bri = bri_t;
|
||||
} else {
|
||||
nightlightActive = true;
|
||||
nightlightDelayMins = req.substring(pos + 3).toInt();
|
||||
nightlightStartTime = millis();
|
||||
}
|
||||
}
|
||||
//set nightlight delay
|
||||
pos = req.indexOf("ND=");
|
||||
if (pos > 0) {
|
||||
nightlightDelayMins = req.substring(pos + 3).toInt();
|
||||
nightlightActive_old = false; //re-init
|
||||
}
|
||||
//set nightlight target brightness
|
||||
pos = req.indexOf("NT=");
|
||||
if (pos > 0) {
|
||||
|
@ -75,7 +75,12 @@ void wledInit()
|
||||
serveSettings(0);
|
||||
});
|
||||
server.on("/settings/wifi", HTTP_GET, [](){
|
||||
serveSettings(1);
|
||||
if (!(wifiLock && otaLock))
|
||||
{
|
||||
serveSettings(1);
|
||||
}else{
|
||||
serveMessage(500, "Access Denied", txd, 254);
|
||||
}
|
||||
});
|
||||
server.on("/settings/leds", HTTP_GET, [](){
|
||||
serveSettings(2);
|
||||
@ -94,7 +99,10 @@ void wledInit()
|
||||
});
|
||||
|
||||
server.on("/favicon.ico", HTTP_GET, [](){
|
||||
if(!handleFileRead("/favicon.ico")) server.send(200, "image/x-icon", favicon);
|
||||
if(!handleFileRead("/favicon.ico"))
|
||||
{
|
||||
server.send_P(200, "image/x-icon", favicon, 156);
|
||||
}
|
||||
});
|
||||
|
||||
server.on("/", HTTP_GET, [](){
|
||||
@ -116,39 +124,39 @@ void wledInit()
|
||||
});
|
||||
|
||||
server.on("/reset", HTTP_GET, [](){
|
||||
serveMessage(200,"Rebooting now...","(takes ~15 seconds)");
|
||||
serveMessage(200,"Rebooting now...","(takes ~20 seconds, wait for auto-redirect)",139);
|
||||
reset();
|
||||
});
|
||||
|
||||
server.on("/settings/wifi", HTTP_POST, [](){
|
||||
handleSettingsSet(1);
|
||||
serveMessage(200,"WiFi settings saved.","Rebooting now...");
|
||||
if (!(wifiLock && otaLock)) handleSettingsSet(1);
|
||||
serveMessage(200,"WiFi settings saved.","Rebooting now... (takes ~20 seconds, wait for auto-redirect)",139);
|
||||
reset();
|
||||
});
|
||||
|
||||
server.on("/settings/leds", HTTP_POST, [](){
|
||||
handleSettingsSet(2);
|
||||
serveMessage(200,"LED settings saved.","",true);
|
||||
serveMessage(200,"LED settings saved.","Redirecting...",1);
|
||||
});
|
||||
|
||||
server.on("/settings/ui", HTTP_POST, [](){
|
||||
handleSettingsSet(3);
|
||||
serveMessage(200,"UI settings saved.","",true);
|
||||
serveMessage(200,"UI settings saved.","Reloading to apply theme...",122);
|
||||
});
|
||||
|
||||
server.on("/settings/sync", HTTP_POST, [](){
|
||||
handleSettingsSet(4);
|
||||
serveMessage(200,"Sync settings saved.","",true);
|
||||
serveMessage(200,"Sync settings saved.","Redirecting...",1);
|
||||
});
|
||||
|
||||
server.on("/settings/time", HTTP_POST, [](){
|
||||
handleSettingsSet(5);
|
||||
serveMessage(200,"Time settings saved.","If you made changes to NTP, please reboot.",true);
|
||||
serveMessage(200,"Time settings saved.","Redirecting...",1);
|
||||
});
|
||||
|
||||
server.on("/settings/sec", HTTP_POST, [](){
|
||||
handleSettingsSet(6);
|
||||
serveMessage(200,"Security settings saved.","Rebooting now...");
|
||||
serveMessage(200,"Security settings saved.","Rebooting now... (takes ~20 seconds, wait for auto-redirect)",139);
|
||||
reset();
|
||||
});
|
||||
|
||||
@ -166,12 +174,12 @@ void wledInit()
|
||||
|
||||
server.on("/power", HTTP_GET, [](){
|
||||
String val = (String)(int)strip.getPowerEstimate(ledcount,strip.getColor(),strip.getBrightness());
|
||||
val += "mA currently\nNotice: This is just an estimate which does not take into account several factors (like effects and wire resistance). It is NOT an accurate measurement!";
|
||||
server.send(200, "text/plain", val);
|
||||
val += "mA currently";
|
||||
serveMessage(200,val,"This is just an estimate (does not take into account several factors like effects and wire resistance). It is NOT an accurate measurement!",254);
|
||||
});
|
||||
|
||||
server.on("/teapot", HTTP_GET, [](){
|
||||
serveMessage(418, "418. I'm a teapot.","(Tangible Embedded Advanced Project Of Twinkling)");
|
||||
serveMessage(418, "418. I'm a teapot.","(Tangible Embedded Advanced Project Of Twinkling)",254);
|
||||
});
|
||||
|
||||
server.on("/build", HTTP_GET, [](){
|
||||
@ -181,8 +189,8 @@ void wledInit()
|
||||
#else
|
||||
info += "platform: esp8266\r\n";
|
||||
#endif
|
||||
info += "name: " + versionName + "\r\n";
|
||||
info += "version: " + (String)VERSION + "\r\n";
|
||||
info += "version: " + versionString + "\r\n";
|
||||
info += "build: " + (String)VERSION + "\r\n";
|
||||
info += "eepver: " + String(EEPVER) + "\r\n";
|
||||
#ifdef RGBW
|
||||
info += "rgbw: true\r\n";
|
||||
@ -236,19 +244,19 @@ void wledInit()
|
||||
} else
|
||||
{
|
||||
server.on("/edit", HTTP_GET, [](){
|
||||
serveMessage(500, "Access Denied", txd);
|
||||
serveMessage(500, "Access Denied", txd, 254);
|
||||
});
|
||||
server.on("/down", HTTP_GET, [](){
|
||||
serveMessage(500, "Access Denied", txd);
|
||||
serveMessage(500, "Access Denied", txd, 254);
|
||||
});
|
||||
server.on("/cleareeprom", HTTP_GET, [](){
|
||||
serveMessage(500, "Access Denied", txd);
|
||||
serveMessage(500, "Access Denied", txd, 254);
|
||||
});
|
||||
server.on("/update", HTTP_GET, [](){
|
||||
serveMessage(500, "Access Denied", txd);
|
||||
serveMessage(500, "Access Denied", txd, 254);
|
||||
});
|
||||
server.on("/list", HTTP_GET, [](){
|
||||
serveMessage(500, "Access Denied", txd);
|
||||
serveMessage(500, "Access Denied", txd, 254);
|
||||
});
|
||||
}
|
||||
//called when the url is not defined here, ajax-in; get-settings
|
||||
@ -313,7 +321,7 @@ void initAP(){
|
||||
void initCon()
|
||||
{
|
||||
int fail_count = 0;
|
||||
if (clientssid.length() <1) fail_count = 33;
|
||||
if (clientssid.length() <1 || clientssid.equals("Your_Network_Here")) fail_count = apWaitTimeSecs*2;
|
||||
WiFi.begin(clientssid.c_str(), clientpass.c_str());
|
||||
while(WiFi.status() != WL_CONNECTED) {
|
||||
delay(500);
|
||||
@ -332,31 +340,37 @@ void initCon()
|
||||
|
||||
void buildCssColorString()
|
||||
{
|
||||
String cs[]={"","","","","",""};
|
||||
switch (currentTheme)
|
||||
{
|
||||
default: cssCol[0]="D9B310"; cssCol[1]="0B3C5D"; cssCol[2]="1D2731"; cssCol[3]="328CC1"; cssCol[4]="000"; break; //night
|
||||
case 1: cssCol[0]="eee"; cssCol[1]="ddd"; cssCol[2]="b9b9b9"; cssCol[3]="049"; cssCol[4]="777"; break; //modern
|
||||
case 2: cssCol[0]="abc"; cssCol[1]="fff"; cssCol[2]="ddd"; cssCol[3]="000"; cssCol[4]="0004"; break; //bright
|
||||
case 3: cssCol[0]="c09f80"; cssCol[1]="d7cec7"; cssCol[2]="76323f"; cssCol[3]="888"; cssCol[4]="3334"; break; //wine
|
||||
case 4: cssCol[0]="3cc47c"; cssCol[1]="828081"; cssCol[2]="d9a803"; cssCol[3]="1e392a"; cssCol[4]="000a"; break; //electric
|
||||
case 5: cssCol[0]="57bc90"; cssCol[1]="a5a5af"; cssCol[2]="015249"; cssCol[3]="88c9d4"; cssCol[4]="0004"; break; //mint
|
||||
case 6: cssCol[0]="f7c331"; cssCol[1]="dcc7aa"; cssCol[2]="6b7a8f"; cssCol[3]="f7882f"; cssCol[4]="0007"; break; //amber
|
||||
case 7: cssCol[0]="fc3"; cssCol[1]="124"; cssCol[2]="334"; cssCol[3]="f1d"; cssCol[4]="f00"; break; //club
|
||||
case 14: cssCol[0]="fc7"; cssCol[1]="49274a"; cssCol[2]="94618e"; cssCol[3]="f4decb"; cssCol[4]="0008"; break; //end
|
||||
//case 15 do nothing since custom vals are already loaded
|
||||
default: cs[0]="D9B310"; cs[1]="0B3C5D"; cs[2]="1D2731"; cs[3]="328CC1"; cs[4]="000"; cs[5]="328CC1"; break; //night
|
||||
case 1: cs[0]="eee"; cs[1]="ddd"; cs[2]="b9b9b9"; cs[3]="049"; cs[4]="777"; cs[5]="049"; break; //modern
|
||||
case 2: cs[0]="abc"; cs[1]="fff"; cs[2]="ddd"; cs[3]="000"; cs[4]="0004"; cs[5]="000"; break; //bright
|
||||
case 3: cs[0]="c09f80"; cs[1]="d7cec7"; cs[2]="76323f"; cs[3]="888"; cs[4]="3334"; cs[5]="888"; break; //wine
|
||||
case 4: cs[0]="3cc47c"; cs[1]="828081"; cs[2]="d9a803"; cs[3]="1e392a"; cs[4]="000a"; cs[5]="1e392a"; break; //electric
|
||||
case 5: cs[0]="57bc90"; cs[1]="a5a5af"; cs[2]="015249"; cs[3]="88c9d4"; cs[4]="0004"; cs[5]="88c9d4"; break; //mint
|
||||
case 6: cs[0]="f7c331"; cs[1]="dcc7aa"; cs[2]="6b7a8f"; cs[3]="f7882f"; cs[4]="0007"; cs[5]="f7882f"; break; //amber
|
||||
case 7: cs[0]="fc3"; cs[1]="124"; cs[2]="334"; cs[3]="f1d"; cs[4]="f00"; cs[5]="f1d"; break;//club
|
||||
case 8: cs[0]="0ac"; cs[1]="124"; cs[2]="224"; cs[3]="003eff"; cs[4]="003eff"; cs[5]="003eff"; break;//air
|
||||
case 9: cs[0]="f70"; cs[1]="421"; cs[2]="221"; cs[3]="a50"; cs[4]="f70"; cs[5]="f70"; break;//nixie
|
||||
case 10: cs[0]="2d2"; cs[1]="010"; cs[2]="121"; cs[3]="060"; cs[4]="040"; cs[5]="3f3"; break; //terminal
|
||||
case 14: cs[0]="fc7"; cs[1]="49274a"; cs[2]="94618e"; cs[3]="f4decb"; cs[4]="0008"; cs[5]="f4decb"; break; //end
|
||||
case 15: for (int i=0;i<6;i++)cs[i]=cssCol[i];//custom
|
||||
}
|
||||
cssColorString="<style>:root{--aCol:#";
|
||||
cssColorString+=cssCol[0];
|
||||
cssColorString+=cs[0];
|
||||
cssColorString+=";--bCol:#";
|
||||
cssColorString+=cssCol[1];
|
||||
cssColorString+=cs[1];
|
||||
cssColorString+=";--cCol:#";
|
||||
cssColorString+=cssCol[2];
|
||||
cssColorString+=cs[2];
|
||||
cssColorString+=";--dCol:#";
|
||||
cssColorString+=cssCol[3];
|
||||
cssColorString+=cs[3];
|
||||
cssColorString+=";--sCol:#";
|
||||
cssColorString+=cssCol[4];
|
||||
cssColorString+=cs[4];
|
||||
cssColorString+=";--tCol:#";
|
||||
cssColorString+=cssCol[5];
|
||||
cssColorString+=cs[5];
|
||||
cssColorString+=";--cFn:";
|
||||
cssColorString+=cssFont;
|
||||
cssColorString+=";}";
|
||||
}
|
||||
|
||||
@ -376,18 +390,27 @@ void serveIndex()
|
||||
}
|
||||
}
|
||||
|
||||
void serveMessage(int code, String headl, String subl="", bool backToSettings)
|
||||
void serveMessage(int code, String headl, String subl="", int optionType)
|
||||
{
|
||||
String messageBody = "<h2>";
|
||||
messageBody += headl;
|
||||
messageBody += "</h2>";
|
||||
messageBody += subl;
|
||||
if (backToSettings)
|
||||
switch(optionType)
|
||||
{
|
||||
messageBody += "<form action=/settings><button type=submit>Back</button></form>";
|
||||
}else
|
||||
case 255: break; //simple message
|
||||
case 254: messageBody += "<br><br><button type=\"button\" onclick=\"B()\">Back</button>"; break; //back button
|
||||
case 253: messageBody += "<br><br><form action=/settings><button type=submit>Back</button></form>"; //button to settings
|
||||
}
|
||||
if (optionType < 60) //redirect to settings after optionType seconds
|
||||
{
|
||||
messageBody += "<br><br><button type=\"button\" onclick=\"B()\">Back</button>";
|
||||
messageBody += "<script>setTimeout(RS," + String(optionType*1000) + ")</script>";
|
||||
} else if (optionType < 120) //redirect back after optionType-60 seconds
|
||||
{
|
||||
messageBody += "<script>setTimeout(B," + String((optionType-60)*1000) + ")</script>";
|
||||
} else if (optionType < 180) //reload parent after optionType-120 seconds
|
||||
{
|
||||
messageBody += "<script>setTimeout(RP," + String((optionType-120)*1000) + ")</script>";
|
||||
}
|
||||
messageBody += "</body></html>";
|
||||
server.setContentLength(strlen_P(PAGE_msg0) + cssColorString.length() + strlen_P(PAGE_msg1) + messageBody.length());
|
||||
|
@ -46,36 +46,39 @@ void handleNotifications()
|
||||
{
|
||||
if(udpConnected && receiveNotifications){
|
||||
int packetSize = notifierUdp.parsePacket();
|
||||
if(packetSize && notifierUdp.remoteIP() != WiFi.localIP())
|
||||
if(packetSize && notifierUdp.remoteIP() != WiFi.localIP()) //don't process broadcasts we send ourselves
|
||||
{
|
||||
notifierUdp.read(udpIn, packetSize);
|
||||
if (udpIn[0] == 0 && !arlsTimeout) //wled notifier, block if realtime packets active
|
||||
{
|
||||
if (receiveNotificationColor)
|
||||
{
|
||||
col[0] = udpIn[3];
|
||||
col[1] = udpIn[4];
|
||||
col[2] = udpIn[5];
|
||||
if (udpIn[11] > 1)
|
||||
{
|
||||
col_sec[0] = udpIn[12];
|
||||
col_sec[1] = udpIn[13];
|
||||
col_sec[2] = udpIn[14];
|
||||
white_sec = udpIn[15];
|
||||
}
|
||||
if (udpIn[11] > 0) //check if sending modules white val is inteded
|
||||
if (udpIn[11] > 0 && receiveNotificationColor) //check if sending modules white val is inteded
|
||||
{
|
||||
white = udpIn[10];
|
||||
if (udpIn[11] > 1 )
|
||||
{
|
||||
col_sec[0] = udpIn[12];
|
||||
col_sec[1] = udpIn[13];
|
||||
col_sec[2] = udpIn[14];
|
||||
white_sec = udpIn[15];
|
||||
}
|
||||
}
|
||||
if (udpIn[8] != effectCurrent)
|
||||
if (udpIn[8] != effectCurrent && receiveNotificationEffects)
|
||||
{
|
||||
effectCurrent = udpIn[8];
|
||||
strip.setMode(effectCurrent);
|
||||
}
|
||||
if (udpIn[9] != effectSpeed)
|
||||
if (udpIn[9] != effectSpeed && receiveNotificationEffects)
|
||||
{
|
||||
effectSpeed = udpIn[9];
|
||||
strip.setSpeed(effectSpeed);
|
||||
}
|
||||
if (udpIn[11] > 3 && udpIn[16] != effectIntensity)
|
||||
if (udpIn[11] > 3 && udpIn[16] != effectIntensity && receiveNotificationEffects)
|
||||
{
|
||||
effectSpeed = udpIn[16];
|
||||
strip.setIntensity(effectIntensity);
|
||||
@ -83,7 +86,7 @@ void handleNotifications()
|
||||
nightlightActive = udpIn[6];
|
||||
if (!nightlightActive)
|
||||
{
|
||||
bri = udpIn[2];
|
||||
if (receiveNotificationBrightness) bri = udpIn[2];
|
||||
colorUpdated(3);
|
||||
}
|
||||
} else if (udpIn[0] == 1) //warls
|
||||
|
Loading…
Reference in New Issue
Block a user