Automatic UI codegeneration
This commit is contained in:
parent
579f355852
commit
190db80c28
1
.gitignore
vendored
1
.gitignore
vendored
@ -9,3 +9,4 @@
|
|||||||
.DS_Store
|
.DS_Store
|
||||||
.gitignore
|
.gitignore
|
||||||
.clang-format
|
.clang-format
|
||||||
|
node_modules
|
||||||
|
2233
package-lock.json
generated
Normal file
2233
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
31
package.json
Normal file
31
package.json
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
{
|
||||||
|
"name": "wled",
|
||||||
|
"version": "0.1.0",
|
||||||
|
"description": "Tools for WLED project",
|
||||||
|
"main": "tools/cdata.js",
|
||||||
|
"directories": {
|
||||||
|
"lib": "lib",
|
||||||
|
"test": "test"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"build": "node tools/cdata.js",
|
||||||
|
"dev": "nodemon -e js,html,htm,css,png,jpg,gif,ico,js -w tools/ -w wled00/data/ -x node tools/cdata.js"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+https://github.com/Aircoookie/WLED.git"
|
||||||
|
},
|
||||||
|
"author": "",
|
||||||
|
"license": "ISC",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/Aircoookie/WLED/issues"
|
||||||
|
},
|
||||||
|
"homepage": "https://github.com/Aircoookie/WLED#readme",
|
||||||
|
"dependencies": {
|
||||||
|
"clean-css": "^4.2.3",
|
||||||
|
"html-minifier": "^4.0.0",
|
||||||
|
"inliner": "^1.13.1",
|
||||||
|
"nodemon": "^2.0.4",
|
||||||
|
"zlib": "^1.0.5"
|
||||||
|
}
|
||||||
|
}
|
328
tools/cdata.js
Normal file
328
tools/cdata.js
Normal file
@ -0,0 +1,328 @@
|
|||||||
|
/**
|
||||||
|
* Writes compressed C arrays of data files (web interface)
|
||||||
|
* How to use it?
|
||||||
|
*
|
||||||
|
* 1) Install Node 11+ and npm
|
||||||
|
* 2) npm install
|
||||||
|
* 3) npm run build
|
||||||
|
*
|
||||||
|
* If you change data folder often, you can run it in monitoring mode (it will recompile and update *.h on every file change)
|
||||||
|
*
|
||||||
|
* > npm run dev
|
||||||
|
*
|
||||||
|
* How it works?
|
||||||
|
*
|
||||||
|
* It uses NodeJS packages to inline, minify and GZIP files. See writeHtmlGzipped and writeChunks invocations at the bottom of the page.
|
||||||
|
*/
|
||||||
|
|
||||||
|
const fs = require("fs");
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
function hexdump(buffer) {
|
||||||
|
let lines = [];
|
||||||
|
|
||||||
|
for (let i = 0; i < buffer.length; i += 16) {
|
||||||
|
let block = buffer.slice(i, i + 16); // cut buffer into blocks of 16
|
||||||
|
let hexArray = [];
|
||||||
|
|
||||||
|
for (let value of block) {
|
||||||
|
hexArray.push("0x" + value.toString(16).padStart(2, "0"));
|
||||||
|
}
|
||||||
|
|
||||||
|
let hexString = hexArray.join(", ");
|
||||||
|
let line = ` ${hexString}`;
|
||||||
|
lines.push(line);
|
||||||
|
}
|
||||||
|
|
||||||
|
return lines.join(",\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
const inliner = require("inliner");
|
||||||
|
const zlib = require("zlib");
|
||||||
|
|
||||||
|
function writeHtmlGzipped(sourceFile, resultFile) {
|
||||||
|
console.info("Reading " + sourceFile);
|
||||||
|
new inliner(sourceFile, function(error, html) {
|
||||||
|
console.info("Inlined " + html.length + " characters");
|
||||||
|
|
||||||
|
if (error) {
|
||||||
|
console.warn(error);
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
|
||||||
|
zlib.gzip(html, function(error, result) {
|
||||||
|
if (error) {
|
||||||
|
console.warn(error);
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
|
||||||
|
console.info("Compressed " + result.length + " bytes");
|
||||||
|
const array = hexdump(result);
|
||||||
|
const src = `
|
||||||
|
// Autogenerated from ${sourceFile}, do not edit!!
|
||||||
|
const uint16_t PAGE_index_L = ${result.length};
|
||||||
|
const uint8_t PAGE_index[] PROGMEM = {
|
||||||
|
${array}
|
||||||
|
};
|
||||||
|
`;
|
||||||
|
console.info("Writing " + resultFile);
|
||||||
|
fs.writeFileSync(resultFile, src);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const CleanCSS = require("clean-css");
|
||||||
|
const MinifyHTML = require("html-minifier").minify;
|
||||||
|
|
||||||
|
function filter(str, type) {
|
||||||
|
if (type === undefined) {
|
||||||
|
return str;
|
||||||
|
} else if (type == "css-minify") {
|
||||||
|
return new CleanCSS({}).minify(str).styles;
|
||||||
|
} else if (type == "html-minify") {
|
||||||
|
return MinifyHTML(str, {
|
||||||
|
collapseWhitespace: true,
|
||||||
|
maxLineLength: 80,
|
||||||
|
minifyCSS: true,
|
||||||
|
minifyJS: true,
|
||||||
|
continueOnParseError: false
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
console.warn("Unknown filter: " + type);
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function specToChunk(srcDir, s) {
|
||||||
|
if (s.method == "plaintext") {
|
||||||
|
const buf = fs.readFileSync(srcDir + "/" + s.file);
|
||||||
|
const str = buf.toString("ascii");
|
||||||
|
const chunk = `
|
||||||
|
// Autogenerated from ${srcDir}/${s.file}, do not edit!!
|
||||||
|
const char ${s.name}[] PROGMEM = R"${s.prepend || ""}${filter(
|
||||||
|
str,
|
||||||
|
s.filter
|
||||||
|
)}${s.append || ""}";
|
||||||
|
|
||||||
|
`;
|
||||||
|
return s.mangle ? s.mangle(chunk) : chunk;
|
||||||
|
} else if (s.method == "binary") {
|
||||||
|
const buf = fs.readFileSync(srcDir + "/" + s.file);
|
||||||
|
const result = hexdump(buf);
|
||||||
|
const chunk = `
|
||||||
|
// Autogenerated from ${srcDir}/${s.file}, do not edit!!
|
||||||
|
const uint16_t ${s.name}_length = ${result.length};
|
||||||
|
const uint8_t ${s.name}[] PROGMEM = {
|
||||||
|
${result}
|
||||||
|
};
|
||||||
|
|
||||||
|
`;
|
||||||
|
return s.mangle ? s.mangle(chunk) : chunk;
|
||||||
|
} else {
|
||||||
|
console.warn("Unknown method: " + s.method);
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function writeChunks(srcDir, specs, resultFile) {
|
||||||
|
let src = "";
|
||||||
|
specs.forEach(s => {
|
||||||
|
try {
|
||||||
|
console.info("Reading " + srcDir + "/" + s.file + " as " + s.name);
|
||||||
|
src += specToChunk(srcDir, s);
|
||||||
|
} catch (e) {
|
||||||
|
console.warn(
|
||||||
|
"Failed " + s.name + " from " + srcDir + "/" + s.file,
|
||||||
|
e.message.length > 60 ? e.message.substring(0, 60) : e.message
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
console.info("Writing " + src.length + " characters into " + resultFile);
|
||||||
|
fs.writeFileSync(resultFile, src);
|
||||||
|
}
|
||||||
|
|
||||||
|
writeHtmlGzipped("wled00/data/index.htm", "wled00/html_ui.h");
|
||||||
|
|
||||||
|
writeChunks(
|
||||||
|
"wled00/data",
|
||||||
|
[
|
||||||
|
{
|
||||||
|
file: "style.css",
|
||||||
|
name: "PAGE_settingsCss",
|
||||||
|
prepend: "=====(<style>",
|
||||||
|
append: "</style>)=====",
|
||||||
|
method: "plaintext",
|
||||||
|
filter: "css-minify"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
file: "settings.htm",
|
||||||
|
name: "PAGE_settings",
|
||||||
|
prepend: "=====(",
|
||||||
|
append: ")=====",
|
||||||
|
method: "plaintext",
|
||||||
|
filter: "html-minify"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
file: "settings_wifi.htm",
|
||||||
|
name: "PAGE_settings_wifi",
|
||||||
|
prepend: "=====(",
|
||||||
|
append: ")=====",
|
||||||
|
method: "plaintext",
|
||||||
|
filter: "html-minify",
|
||||||
|
mangle: str =>
|
||||||
|
str
|
||||||
|
.replace(/\<link rel="stylesheet".*\>/gms, "")
|
||||||
|
.replace(/\<style\>.*\<\/style\>/gms, "%CSS%%SCSS%")
|
||||||
|
},
|
||||||
|
{
|
||||||
|
file: "settings_leds.htm",
|
||||||
|
name: "PAGE_settings_leds",
|
||||||
|
prepend: "=====(",
|
||||||
|
append: ")=====",
|
||||||
|
method: "plaintext",
|
||||||
|
filter: "html-minify",
|
||||||
|
mangle: str =>
|
||||||
|
str
|
||||||
|
.replace(/\<link rel="stylesheet".*\>/gms, "")
|
||||||
|
.replace(/\<style\>.*\<\/style\>/gms, "%CSS%%SCSS%")
|
||||||
|
},
|
||||||
|
{
|
||||||
|
file: "settings_dmx.htm",
|
||||||
|
name: "PAGE_settings_dmx",
|
||||||
|
prepend: "=====(",
|
||||||
|
append: ")=====",
|
||||||
|
method: "plaintext",
|
||||||
|
filter: "html-minify",
|
||||||
|
mangle: str => {
|
||||||
|
const nocss = str
|
||||||
|
.replace(/\<link rel="stylesheet".*\>/gms, "")
|
||||||
|
.replace(/\<style\>.*\<\/style\>/gms, "%CSS%%SCSS%");
|
||||||
|
return `
|
||||||
|
#ifdef WLED_ENABLE_DMX
|
||||||
|
${nocss}
|
||||||
|
#else
|
||||||
|
const char PAGE_settings_dmx[] PROGMEM = R"=====()=====";
|
||||||
|
#endif
|
||||||
|
`;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
file: "settings_ui.htm",
|
||||||
|
name: "PAGE_settings_ui",
|
||||||
|
prepend: "=====(",
|
||||||
|
append: ")=====",
|
||||||
|
method: "plaintext",
|
||||||
|
filter: "html-minify",
|
||||||
|
mangle: str =>
|
||||||
|
str
|
||||||
|
.replace(/\<link rel="stylesheet".*\>/gms, "")
|
||||||
|
.replace(/\<style\>.*\<\/style\>/gms, "%CSS%%SCSS%")
|
||||||
|
},
|
||||||
|
{
|
||||||
|
file: "settings_sync.htm",
|
||||||
|
name: "PAGE_settings_sync",
|
||||||
|
prepend: "=====(",
|
||||||
|
append: ")=====",
|
||||||
|
method: "plaintext",
|
||||||
|
filter: "html-minify",
|
||||||
|
mangle: str =>
|
||||||
|
str
|
||||||
|
.replace(/\<link rel="stylesheet".*\>/gms, "")
|
||||||
|
.replace(/\<style\>.*\<\/style\>/gms, "%CSS%%SCSS%")
|
||||||
|
},
|
||||||
|
{
|
||||||
|
file: "settings_time.htm",
|
||||||
|
name: "PAGE_settings_time",
|
||||||
|
prepend: "=====(",
|
||||||
|
append: ")=====",
|
||||||
|
method: "plaintext",
|
||||||
|
filter: "html-minify",
|
||||||
|
mangle: str =>
|
||||||
|
str
|
||||||
|
.replace(/\<link rel="stylesheet".*\>/gms, "")
|
||||||
|
.replace(/\<style\>.*\<\/style\>/gms, "%CSS%%SCSS%")
|
||||||
|
},
|
||||||
|
{
|
||||||
|
file: "settings_sec.htm",
|
||||||
|
name: "PAGE_settings_sec",
|
||||||
|
prepend: "=====(",
|
||||||
|
append: ")=====",
|
||||||
|
method: "plaintext",
|
||||||
|
filter: "html-minify",
|
||||||
|
mangle: str =>
|
||||||
|
str
|
||||||
|
.replace(/\<link rel="stylesheet".*\>/gms, "")
|
||||||
|
.replace(/\<style\>.*\<\/style\>/gms, "%CSS%%SCSS%")
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"wled00/html_settings.h"
|
||||||
|
);
|
||||||
|
|
||||||
|
writeChunks(
|
||||||
|
"wled00/data",
|
||||||
|
[
|
||||||
|
{
|
||||||
|
file: "usermod.htm",
|
||||||
|
name: "PAGE_usermod",
|
||||||
|
prepend: "=====(",
|
||||||
|
append: ")=====",
|
||||||
|
method: "plaintext",
|
||||||
|
filter: "html-minify"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
file: "msg.htm",
|
||||||
|
name: "PAGE_msg",
|
||||||
|
prepend: "=====(",
|
||||||
|
append: ")=====",
|
||||||
|
method: "plaintext",
|
||||||
|
filter: "html-minify"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
file: "dmxmap.htm",
|
||||||
|
name: "PAGE_dmxmap",
|
||||||
|
prepend: "=====(",
|
||||||
|
append: ")=====",
|
||||||
|
method: "plaintext",
|
||||||
|
filter: "html-minify",
|
||||||
|
mangle: str => `
|
||||||
|
#ifdef WLED_ENABLE_DMX
|
||||||
|
${str}
|
||||||
|
#else
|
||||||
|
const char PAGE_dmxmap[] PROGMEM = R"=====()=====";
|
||||||
|
#endif
|
||||||
|
`
|
||||||
|
},
|
||||||
|
{
|
||||||
|
file: "update.htm",
|
||||||
|
name: "PAGE_update",
|
||||||
|
prepend: "=====(",
|
||||||
|
append: ")=====",
|
||||||
|
method: "plaintext",
|
||||||
|
filter: "html-minify"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
file: "welcome.htm",
|
||||||
|
name: "PAGE_welcome",
|
||||||
|
prepend: "=====(",
|
||||||
|
append: ")=====",
|
||||||
|
method: "plaintext",
|
||||||
|
filter: "html-minify"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
file: "liveview.htm",
|
||||||
|
name: "PAGE_liveview",
|
||||||
|
prepend: "=====(",
|
||||||
|
append: ")=====",
|
||||||
|
method: "plaintext",
|
||||||
|
filter: "html-minify"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
file: "favicon.ico",
|
||||||
|
name: "favicon",
|
||||||
|
method: "binary"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"wled00/html_other.h"
|
||||||
|
);
|
28
wled00/data/dmxmap.htm
Normal file
28
wled00/data/dmxmap.htm
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html><head><meta content='width=device-width' name='viewport'>
|
||||||
|
<title>DMX Map</title>
|
||||||
|
<script>function B(){window.history.back()};function RS(){window.location = "/settings";}function RP(){top.location.href="/";}function FM() {%DMXVARS%
|
||||||
|
var dmxlabels = ["SET 0","RED","GREEN","BLUE","WHITE","SHUTTER","SET 255", "DISABLED"];
|
||||||
|
var dmxchans = [];
|
||||||
|
for (i=0;i<512;i++) {
|
||||||
|
dmxchans.push(7); // set all to DISABLED
|
||||||
|
}
|
||||||
|
for (i=0;i<LC;i++) {
|
||||||
|
FS = CS + (CG * i);
|
||||||
|
for (j=0;j<CN;j++) {
|
||||||
|
DA=FS+j;
|
||||||
|
dmxchans[DA-1] = CH[j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
DMXMap = "";
|
||||||
|
for (i=0;i<512;i++) {
|
||||||
|
isstart = "";
|
||||||
|
if ((i+1) % 10 == 0) {
|
||||||
|
isstart="S"
|
||||||
|
}
|
||||||
|
DMXMap += "<div class=\"anytype " + isstart + " type" + dmxchans[i] + "\">" + String(i+1) + "<br />" + dmxlabels[dmxchans[i]] + "</div>";
|
||||||
|
}
|
||||||
|
document.getElementById("map").innerHTML = DMXMap;
|
||||||
|
}</script>
|
||||||
|
<style>.anytype{border: 1px solid white; margin: 1px; float: left; width: 100px; height: 100px;}.S { margin: 0px; border: 2px solid white;} .type7{color: #888; border: 1px dotted grey;}.type6{color: #FFF;}.type4{color: #FFF; font-weight: bold; }.type3{color: #00F; font-weight: bold; }.type2{color: #0F0; font-weight: bold; }.type1{color: #F00; font-weight: bold; } .bt{background:#333;color:#fff;font-family:Verdana,sans-serif;border:.3ch solid #333;display:inline-block;font-size:20px;margin:8px;margin-top:12px}body{font-family:Verdana,sans-serif;text-align:center;background:#222;color:#fff;line-height:200%%;margin:0}</style></head>
|
||||||
|
<body onload="FM();"><div id="map">...</div></body></html>
|
55
wled00/data/settings_dmx.htm
Normal file
55
wled00/data/settings_dmx.htm
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html><head><meta name="viewport" content="width=500"><meta charset="utf-8"><title>DMX Settings</title>
|
||||||
|
<script>
|
||||||
|
function GCH(num) {
|
||||||
|
d=document;
|
||||||
|
d.getElementById('dmxchannels').innerHTML += "";
|
||||||
|
for (i=0;i<num;i++) {
|
||||||
|
d.getElementById('dmxchannels').innerHTML += "<span id=CH" + (i+1) + "s >Channel " + (i+1) + ": <select name=CH" + (i+1) + " id=\"CH" + (i+1) + "\"><option value=0>Set to 0</option><option value=1>Red</option><option value=2>Green</option><option value=3>Blue</option><option value=4>White</option><option value=5>Shutter (Brightness)</option><option value=6>Set to 255</option></select></span><br />\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function mMap(){
|
||||||
|
d=document;
|
||||||
|
numCh=document.Sf.CN.value;
|
||||||
|
numGap=document.Sf.CG.value;
|
||||||
|
if (parseInt(numCh)>parseInt(numGap)) {
|
||||||
|
d.getElementById("gapwarning").style.display="block";
|
||||||
|
} else {
|
||||||
|
d.getElementById("gapwarning").style.display="none";
|
||||||
|
}
|
||||||
|
for (i=0;i<15;i++) {
|
||||||
|
if (i>=numCh) {
|
||||||
|
d.getElementById("CH"+(i+1) + "s").style.opacity = "0.5";
|
||||||
|
d.getElementById("CH"+(i+1)).disabled = true;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
d.getElementById("CH"+(i+1) + "s").style.opacity = "1";
|
||||||
|
d.getElementById("CH"+(i+1)).disabled = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function S(){GCH(15);GetV();mMap();}function H(){window.open("https://github.com/Aircoookie/WLED/wiki/DMX");}function B(){window.history.back();}
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body onload="S()">
|
||||||
|
<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">Save</button><hr>
|
||||||
|
<h2>Imma firin ma lazer (if it has DMX support)</h2><!-- TODO: Change to something less-meme-related //-->
|
||||||
|
|
||||||
|
Proxy Universe <input name=PU type=number min=0 max=63999 required> from E1.31 to DMX (0=disabled)<br>
|
||||||
|
<i>This will disable the LED data output to DMX configurable below</i><br><br>
|
||||||
|
<i>Number of fixtures is taken from LED config page</i><br>
|
||||||
|
|
||||||
|
Channels per fixture (15 max): <input type="number" min="1" max="15" name="CN" maxlength="2" onchange="mMap();"><br />
|
||||||
|
Start channel: <input type="number" min="1" max="512" name="CS" maxlength="2"><br />
|
||||||
|
Spacing between start channels: <input type="number" min="1" max="512" name="CG" maxlength="2" onchange="mMap();"> [ <a href="javascript:alert('if set to 10, first fixture will start at 10,\nsecond will start at 20 etc.\nRegardless of the channel count.\nMakes memorizing channel numbers easier.');">info</a> ]<br>
|
||||||
|
<div id="gapwarning" style="color: orange; display: none;">WARNING: Channel gap is lower than channels per fixture.<br />This will cause overlap.</div>
|
||||||
|
<button type="button" onclick="location.href='/dmxmap';">DMX Map</button><br>
|
||||||
|
DMX fixtures start LED: <input type="number" min="0" max="1500" name="SL">
|
||||||
|
<h3>channel functions</h3>
|
||||||
|
<div id="dmxchannels"></div>
|
||||||
|
<hr><button type="button" onclick="B()">Back</button><button type="submit">Save</button>
|
||||||
|
</form>
|
||||||
|
</body>
|
||||||
|
</html>
|
Binary file not shown.
47
wled00/data/style.css
Normal file
47
wled00/data/style.css
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
body {
|
||||||
|
font-family: Verdana, sans-serif;
|
||||||
|
text-align: center;
|
||||||
|
background: #222;
|
||||||
|
color: #fff;
|
||||||
|
line-height: 200%%;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
hr {
|
||||||
|
border-color: #666;
|
||||||
|
}
|
||||||
|
button {
|
||||||
|
background: #333;
|
||||||
|
color: #fff;
|
||||||
|
font-family: Verdana, sans-serif;
|
||||||
|
border: 0.3ch solid #333;
|
||||||
|
display: inline-block;
|
||||||
|
font-size: 20px;
|
||||||
|
margin: 8px;
|
||||||
|
margin-top: 12px;
|
||||||
|
}
|
||||||
|
.helpB {
|
||||||
|
text-align: left;
|
||||||
|
position: absolute;
|
||||||
|
width: 60px;
|
||||||
|
}
|
||||||
|
input {
|
||||||
|
background: #333;
|
||||||
|
color: #fff;
|
||||||
|
font-family: Verdana, sans-serif;
|
||||||
|
border: 0.5ch solid #333;
|
||||||
|
}
|
||||||
|
input[type="number"] {
|
||||||
|
width: 4em;
|
||||||
|
}
|
||||||
|
select {
|
||||||
|
background: #333;
|
||||||
|
color: #fff;
|
||||||
|
font-family: Verdana, sans-serif;
|
||||||
|
border: 0.5ch solid #333;
|
||||||
|
}
|
||||||
|
td {
|
||||||
|
padding: 2px;
|
||||||
|
}
|
||||||
|
.d5 {
|
||||||
|
width: 4.5em !important;
|
||||||
|
}
|
6
wled00/data/usermod.htm
Normal file
6
wled00/data/usermod.htm
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<body>No usermod custom web page set.</body>
|
||||||
|
|
||||||
|
</html>
|
@ -1,28 +1,25 @@
|
|||||||
/*
|
|
||||||
* Various web pages
|
|
||||||
*/
|
|
||||||
|
|
||||||
//USER HTML HERE (/u subpage)
|
// Autogenerated from wled00/data/usermod.htm, do not edit!!
|
||||||
const char PAGE_usermod[] PROGMEM = R"=====(<!DOCTYPE html>
|
const char PAGE_usermod[] PROGMEM = R"=====(<!DOCTYPE html><html><body>No usermod custom web page set.</body></html>)=====";
|
||||||
<html><body>No usermod custom web page set.</body></html>)=====";
|
|
||||||
|
|
||||||
|
|
||||||
//server message
|
// Autogenerated from wled00/data/msg.htm, do not edit!!
|
||||||
const char PAGE_msg[] PROGMEM = R"=====(<!DOCTYPE html>
|
const char PAGE_msg[] PROGMEM = R"=====(<!DOCTYPE html><html><head><meta content="width=device-width" name="viewport">
|
||||||
<html><head><meta content='width=device-width' name='viewport'>
|
<title>WLED Message</title><script>
|
||||||
<title>WLED Message</title>
|
function B(){window.history.back()}function RS(){window.location="/settings"}function RP(){top.location.href="/"}
|
||||||
<script>function B(){window.history.back()};function RS(){window.location = "/settings";}function RP(){top.location.href="/";}</script>
|
</script><style>
|
||||||
<style>.bt{background:#333;color:#fff;font-family:Verdana,sans-serif;border:.3ch solid #333;display:inline-block;font-size:20px;margin:8px;margin-top:12px}body{font-family:Verdana,sans-serif;text-align:center;background:#222;color:#fff;line-height:200%%;margin:0}</style></head>
|
:root{--aCol:#D9B310;--bCol:#0B3C5D;--cCol:#1D2731;--dCol:#328CC1;--sCol:#000;--tCol:#328CC1;--cFn:Verdana}.bt{background:var(--bCol);color:var(--tCol);border:.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}input[type=file]{font-size:16px}body{font-family:var(--cFn),sans-serif;text-align:center;background:var(--cCol);color:var(--tCol);line-height:200%;margin:0;background-attachment:fixed}
|
||||||
<body><h2>%MSG%</body></html>)=====";
|
</style></head><body><h2>Sample message.</h2>Sample detail.</body></html>)=====";
|
||||||
|
|
||||||
//DMX channel map
|
|
||||||
const char PAGE_dmxmap[] PROGMEM = R"=====(<!DOCTYPE html>
|
#ifdef WLED_ENABLE_DMX
|
||||||
<html><head><meta content='width=device-width' name='viewport'>
|
|
||||||
<title>DMX Map</title>
|
// Autogenerated from wled00/data/dmxmap.htm, do not edit!!
|
||||||
<script>function B(){window.history.back()};function RS(){window.location = "/settings";}function RP(){top.location.href="/";}function FM() {%DMXVARS%
|
const char PAGE_dmxmap[] PROGMEM = R"=====(<!DOCTYPE html><html><head><meta content="width=device-width" name="viewport">
|
||||||
|
<title>DMX Map</title><script>
|
||||||
|
function B(){window.history.back()};function RS(){window.location = "/settings";}function RP(){top.location.href="/";}function FM() {%DMXVARS%
|
||||||
var dmxlabels = ["SET 0","RED","GREEN","BLUE","WHITE","SHUTTER","SET 255", "DISABLED"];
|
var dmxlabels = ["SET 0","RED","GREEN","BLUE","WHITE","SHUTTER","SET 255", "DISABLED"];
|
||||||
var dmxchans = [];
|
var dmxchans = []; for (i=0;i<512;i++) {
|
||||||
for (i=0;i<512;i++) {
|
|
||||||
dmxchans.push(7); // set all to DISABLED
|
dmxchans.push(7); // set all to DISABLED
|
||||||
}
|
}
|
||||||
for (i=0;i<LC;i++) {
|
for (i=0;i<LC;i++) {
|
||||||
@ -41,93 +38,114 @@ const char PAGE_dmxmap[] PROGMEM = R"=====(<!DOCTYPE html>
|
|||||||
DMXMap += "<div class=\"anytype " + isstart + " type" + dmxchans[i] + "\">" + String(i+1) + "<br />" + dmxlabels[dmxchans[i]] + "</div>";
|
DMXMap += "<div class=\"anytype " + isstart + " type" + dmxchans[i] + "\">" + String(i+1) + "<br />" + dmxlabels[dmxchans[i]] + "</div>";
|
||||||
}
|
}
|
||||||
document.getElementById("map").innerHTML = DMXMap;
|
document.getElementById("map").innerHTML = DMXMap;
|
||||||
}</script>
|
}</script><style>
|
||||||
<style>.anytype{border: 1px solid white; margin: 1px; float: left; width: 100px; height: 100px;}.S { margin: 0px; border: 2px solid white;} .type7{color: #888; border: 1px dotted grey;}.type6{color: #FFF;}.type4{color: #FFF; font-weight: bold; }.type3{color: #00F; font-weight: bold; }.type2{color: #0F0; font-weight: bold; }.type1{color: #F00; font-weight: bold; } .bt{background:#333;color:#fff;font-family:Verdana,sans-serif;border:.3ch solid #333;display:inline-block;font-size:20px;margin:8px;margin-top:12px}body{font-family:Verdana,sans-serif;text-align:center;background:#222;color:#fff;line-height:200%%;margin:0}</style></head>
|
.anytype{border:1px solid #fff;margin:1px;float:left;width:100px;height:100px}.S{margin:0;border:2px solid #fff}.type7{color:#888;border:1px dotted grey}.type6{color:#fff}.type4{color:#fff;font-weight:700}.type3{color:#00f;font-weight:700}.type2{color:#0f0;font-weight:700}.type1{color:red;font-weight:700}.bt{background:#333;color:#fff;font-family:Verdana,sans-serif;border:.3ch solid #333;display:inline-block;font-size:20px;margin:8px;margin-top:12px}body{font-family:Verdana,sans-serif;text-align:center;background:#222;color:#fff;line-height:200%%;margin:0}
|
||||||
<body onload="FM();"><div id="map">...</div></body></html>)=====";
|
</style></head><body onload="FM()"><div id="map">...</div></body></html>)=====";
|
||||||
|
|
||||||
|
|
||||||
//firmware update page
|
#else
|
||||||
const char PAGE_update[] PROGMEM = R"=====(<!DOCTYPE html>
|
const char PAGE_dmxmap[] PROGMEM = R"=====()=====";
|
||||||
<html><head><meta content='width=device-width' name='viewport'><title>WLED Update</title><script>function B(){window.history.back()}</script>
|
#endif
|
||||||
<style>.bt{background:#333;color:#fff;font-family:Verdana,sans-serif;border:.3ch solid #333;display:inline-block;font-size:20px;margin:8px;margin-top:12px}input[type=file]{font-size:16px}body{font-family:Verdana,sans-serif;text-align:center;background:#222;color:#fff;line-height:200%}</style></head>
|
|
||||||
<body><h2>WLED Software Update</h2>Installed version: 0.10.0<br>Download the latest binary: <a href="https://github.com/Aircoookie/WLED/releases"><img src="https://img.shields.io/github/release/Aircoookie/WLED.svg?style=flat-square"></a><br><form method='POST' action='/update' enctype='multipart/form-data'><input type='file' class="bt" name='update' required><br><input type='submit' class="bt" value='Update!'></form><button type="button" class="bt" onclick="B()">Back</button></body></html>)=====";
|
|
||||||
|
|
||||||
|
// Autogenerated from wled00/data/update.htm, do not edit!!
|
||||||
//new user welcome page
|
const char PAGE_update[] PROGMEM = R"=====(<!DOCTYPE html><html><head><meta content="width=device-width" name="viewport">
|
||||||
const char PAGE_welcome[] PROGMEM = R"=====(<!DOCTYPE html><html><head><meta charset=utf-8><meta content='width=device-width' name=viewport><meta name=theme-color content=#333333><title>WLED Setup</title> <style>body{font-family:Verdana,Helvetica,sans-serif;text-align:center;background-color:#333;margin:0;color:#fff}button{outline:0;cursor:pointer}.btn{padding:8px;margin:10px;width:230px;text-transform:uppercase;font-family:helvetica;font-size:19px;background-color:#222;color:white;border:0 solid white;border-radius:5px}svg{fill:#fff}</style></head>
|
<title>WLED Message</title><script>function B(){window.history.back()}</script>
|
||||||
<body> <svg style=position:absolute;width:0;height:0;overflow:hidden version=1.1 xmlns=http://www.w3.org/2000/svg> <defs> <symbol id=lnr-smile viewBox="0 0 1024 1024"><path d="M486.4 1024c-129.922 0-252.067-50.594-343.936-142.464s-142.464-214.014-142.464-343.936c0-129.923 50.595-252.067 142.464-343.936s214.013-142.464 343.936-142.464c129.922 0 252.067 50.595 343.936 142.464s142.464 214.014 142.464 343.936-50.594 252.067-142.464 343.936c-91.869 91.87-214.014 142.464-343.936 142.464zM486.4 102.4c-239.97 0-435.2 195.23-435.2 435.2s195.23 435.2 435.2 435.2 435.2-195.23 435.2-435.2-195.23-435.2-435.2-435.2z"></path><path d="M332.8 409.6c-42.347 0-76.8-34.453-76.8-76.8s34.453-76.8 76.8-76.8 76.8 34.453 76.8 76.8-34.453 76.8-76.8 76.8zM332.8 307.2c-14.115 0-25.6 11.485-25.6 25.6s11.485 25.6 25.6 25.6 25.6-11.485 25.6-25.6-11.485-25.6-25.6-25.6z"></path><path d="M640 409.6c-42.349 0-76.8-34.453-76.8-76.8s34.451-76.8 76.8-76.8 76.8 34.453 76.8 76.8-34.451 76.8-76.8 76.8zM640 307.2c-14.115 0-25.6 11.485-25.6 25.6s11.485 25.6 25.6 25.6 25.6-11.485 25.6-25.6-11.485-25.6-25.6-25.6z"></path><path d="M486.4 870.4c-183.506 0-332.8-149.294-332.8-332.8 0-14.139 11.462-25.6 25.6-25.6s25.6 11.461 25.6 25.6c0 155.275 126.325 281.6 281.6 281.6s281.6-126.325 281.6-281.6c0-14.139 11.461-25.6 25.6-25.6s25.6 11.461 25.6 25.6c0 183.506-149.294 332.8-332.8 332.8z"></path></symbol> </defs></svg> <br><br>
|
|
||||||
<svg><use xlink:href=#lnr-smile></use></svg><h1>Welcome to WLED!</h1><h3>Thank you for installing my application!</h3> If you encounter a bug or have a question/feature suggestion, feel free to open a GitHub issue!<br><br> <b>Next steps:</b><br><br> Connect the module to your local WiFi here!<br> <button class=btn onclick="window.location.href='/settings/wifi'">WiFi settings</button><br> <i>Just trying this out in AP mode?</i><br> <button class=btn onclick="window.location.href='/sliders'">To the controls!</button></body></html>)=====";
|
|
||||||
|
|
||||||
|
|
||||||
//liveview
|
|
||||||
const char PAGE_liveview[] PROGMEM = R"=====(<!DOCTYPE html>
|
|
||||||
<html><head>
|
|
||||||
<meta name=viewport content="width=device-width, initial-scale=1, minimum-scale=1">
|
|
||||||
<meta charset=utf-8>
|
|
||||||
<meta name=theme-color content=#222222>
|
|
||||||
<title>WLED Live Preview</title>
|
|
||||||
<style>
|
<style>
|
||||||
body {margin: 0;}
|
:root{--aCol:#D9B310;--bCol:#0B3C5D;--cCol:#1D2731;--dCol:#328CC1;--sCol:#000;--tCol:#328CC1;--cFn:Verdana}.bt{background:var(--bCol);color:var(--tCol);font-family:var(--cFn),sans-serif;border:.3ch solid var(--bCol);display:inline-block;filter:drop-shadow(-5px -5px 5px var(--sCol));font-size:20px;margin:8px;margin-top:12px}input[type=file]{font-size:16px}body{font-family:var(--cFn),sans-serif;text-align:center;background:var(--cCol);color:var(--tCol);line-height:200%}
|
||||||
#canv {background: black;filter: brightness(175%);width: 100%;height: 100%;position: absolute;}
|
</style></head><body><h2>WLED Software Update</h2>Installed version: 0.8.5-dev
|
||||||
</style></head>
|
<br>Download the latest binary: <a
|
||||||
<body>
|
href="https://github.com/Aircoookie/WLED/releases"><img
|
||||||
<div id="canv" />
|
src="https://img.shields.io/github/release/Aircoookie/WLED.svg?style=flat-square">
|
||||||
<script>
|
</a><br><form method="POST" action="/update" enctype="multipart/form-data">
|
||||||
update();
|
<input type="file" class="bt" name="update" required><br><input type="submit"
|
||||||
var tmout = null;
|
class="bt" value="Update!"></form><button type="button" class="bt"
|
||||||
function update()
|
onclick="B()">Back</button></body></html>)=====";
|
||||||
{
|
|
||||||
if (document.hidden) {
|
|
||||||
clearTimeout(tmout);
|
|
||||||
tmout = setTimeout(update, 250);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
fetch('/json/live')
|
|
||||||
.then(res => {
|
|
||||||
if (!res.ok) {
|
|
||||||
clearTimeout(tmout);
|
|
||||||
tmout = setTimeout(update, 2500);
|
|
||||||
}
|
|
||||||
return res.json();
|
|
||||||
})
|
|
||||||
.then(json => {
|
|
||||||
var str = "linear-gradient(90deg,";
|
|
||||||
var len = json.leds.length;
|
|
||||||
for (i = 0; i < len; i++) {
|
|
||||||
var leddata = json.leds[i];
|
|
||||||
if (leddata.length > 6) leddata = leddata.substring(2);
|
|
||||||
str += "#" + leddata;
|
|
||||||
if (i < len -1) str += ","
|
|
||||||
}
|
|
||||||
str += ")";
|
|
||||||
document.getElementById("canv").style.background = str;
|
|
||||||
clearTimeout(tmout);
|
|
||||||
tmout = setTimeout(update, 40);
|
|
||||||
})
|
|
||||||
.catch(function (error) {
|
|
||||||
clearTimeout(tmout);
|
|
||||||
tmout = setTimeout(update, 2500);
|
|
||||||
})
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
</body></html>)=====";
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
// Autogenerated from wled00/data/welcome.htm, do not edit!!
|
||||||
* favicon
|
const char PAGE_welcome[] PROGMEM = R"=====(<!DOCTYPE html><html><head><meta charset="utf-8"><meta
|
||||||
*/
|
content="width=device-width" name="viewport"><meta name="theme-color"
|
||||||
|
content="#333333"><title>WLED Setup</title><style>
|
||||||
|
body{font-family:Verdana,Helvetica,sans-serif;text-align:center;background-color:#333;margin:0;color:#fff}button{outline:0;cursor:pointer;padding:8px;margin:10px;width:230px;text-transform:uppercase;font-family:helvetica;font-size:19px;background-color:#222;color:#fff;border:0 solid #fff;border-radius:5px}svg{fill:#fff}
|
||||||
|
</style></head><body><svg
|
||||||
|
style="position:absolute;width:0;height:0;overflow:hidden" version="1.1"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"><defs><symbol id="lnr-smile"
|
||||||
|
viewBox="0 0 1024 1024"><path
|
||||||
|
d="M486.4 1024c-129.922 0-252.067-50.594-343.936-142.464s-142.464-214.014-142.464-343.936c0-129.923 50.595-252.067 142.464-343.936s214.013-142.464 343.936-142.464c129.922 0 252.067 50.595 343.936 142.464s142.464 214.014 142.464 343.936-50.594 252.067-142.464 343.936c-91.869 91.87-214.014 142.464-343.936 142.464zM486.4 102.4c-239.97 0-435.2 195.23-435.2 435.2s195.23 435.2 435.2 435.2 435.2-195.23 435.2-435.2-195.23-435.2-435.2-435.2z">
|
||||||
|
</path><path
|
||||||
|
d="M332.8 409.6c-42.347 0-76.8-34.453-76.8-76.8s34.453-76.8 76.8-76.8 76.8 34.453 76.8 76.8-34.453 76.8-76.8 76.8zM332.8 307.2c-14.115 0-25.6 11.485-25.6 25.6s11.485 25.6 25.6 25.6 25.6-11.485 25.6-25.6-11.485-25.6-25.6-25.6z">
|
||||||
|
</path><path
|
||||||
|
d="M640 409.6c-42.349 0-76.8-34.453-76.8-76.8s34.451-76.8 76.8-76.8 76.8 34.453 76.8 76.8-34.451 76.8-76.8 76.8zM640 307.2c-14.115 0-25.6 11.485-25.6 25.6s11.485 25.6 25.6 25.6 25.6-11.485 25.6-25.6-11.485-25.6-25.6-25.6z">
|
||||||
|
</path><path
|
||||||
|
d="M486.4 870.4c-183.506 0-332.8-149.294-332.8-332.8 0-14.139 11.462-25.6 25.6-25.6s25.6 11.461 25.6 25.6c0 155.275 126.325 281.6 281.6 281.6s281.6-126.325 281.6-281.6c0-14.139 11.461-25.6 25.6-25.6s25.6 11.461 25.6 25.6c0 183.506-149.294 332.8-332.8 332.8z">
|
||||||
|
</path></symbol></defs></svg><br><br><svg><use xlink:href="#lnr-smile"></use>
|
||||||
|
</svg><h1>Welcome to WLED!</h1><h3>Thank you for installing my application!</h3>
|
||||||
|
If you encounter a bug or have a question/feature suggestion, feel free to open a GitHub issue!
|
||||||
|
<br><br><b>Next steps:</b><br><br>Connect the module to your local WiFi here!
|
||||||
|
<br><button onclick='window.location.href="/settings/wifi"'>WiFi settings
|
||||||
|
</button><br><i>Just trying this out in AP mode?</i><br><button
|
||||||
|
onclick='window.location.href="/sliders"'>To the controls!</button></body>
|
||||||
|
</html>)=====";
|
||||||
|
|
||||||
|
|
||||||
|
// Autogenerated from wled00/data/liveview.htm, do not edit!!
|
||||||
|
const char PAGE_liveview[] PROGMEM = R"=====(<!DOCTYPE html><html><head><meta name="viewport"
|
||||||
|
content="width=device-width,initial-scale=1,minimum-scale=1"><meta
|
||||||
|
charset="utf-8"><meta name="theme-color" content="#222222"><title>
|
||||||
|
WLED Live Preview</title><style>
|
||||||
|
body{margin:0}#canv{background:#000;filter:brightness(175%);width:100%;height:100%;position:absolute}
|
||||||
|
</style></head><body><div id="canv"><script>update();
|
||||||
|
|
||||||
|
var tmout = null;
|
||||||
|
function update()
|
||||||
|
{
|
||||||
|
if (document.hidden) {
|
||||||
|
clearTimeout(tmout);
|
||||||
|
tmout = setTimeout(update, 250);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
fetch('/json/live')
|
||||||
|
.then(res => {
|
||||||
|
if (!res.ok) {
|
||||||
|
clearTimeout(tmout);
|
||||||
|
tmout = setTimeout(update, 2500);
|
||||||
|
}
|
||||||
|
return res.json();
|
||||||
|
})
|
||||||
|
.then(json => {
|
||||||
|
var str = "linear-gradient(90deg,";
|
||||||
|
var len = json.leds.length;
|
||||||
|
for (i = 0; i < len; i++) {
|
||||||
|
var leddata = json.leds[i];
|
||||||
|
if (leddata.length > 6) leddata = leddata.substring(2);
|
||||||
|
str += "#" + leddata;
|
||||||
|
if (i < len -1) str += ","
|
||||||
|
}
|
||||||
|
str += ")";
|
||||||
|
document.getElementById("canv").style.background = str;
|
||||||
|
clearTimeout(tmout);
|
||||||
|
tmout = setTimeout(update, 40);
|
||||||
|
})
|
||||||
|
.catch(function (error) {
|
||||||
|
clearTimeout(tmout);
|
||||||
|
tmout = setTimeout(update, 2500);
|
||||||
|
})
|
||||||
|
|
||||||
|
}</script></body></html>)=====";
|
||||||
|
|
||||||
|
|
||||||
|
// Autogenerated from wled00/data/favicon.ico, do not edit!!
|
||||||
|
const uint16_t favicon_length = 954;
|
||||||
const uint8_t favicon[] PROGMEM = {
|
const uint8_t favicon[] PROGMEM = {
|
||||||
0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x10, 0x10, 0x00, 0x00, 0x01, 0x00,
|
0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x10, 0x10, 0x00, 0x00, 0x01, 0x00, 0x18, 0x00, 0x86, 0x00,
|
||||||
0x18, 0x00, 0x86, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x89, 0x50,
|
0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00,
|
||||||
0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0x00, 0x00, 0x00, 0x0D, 0x49, 0x48,
|
0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x08, 0x06,
|
||||||
0x44, 0x52, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x08, 0x06,
|
0x00, 0x00, 0x00, 0x1f, 0xf3, 0xff, 0x61, 0x00, 0x00, 0x00, 0x4d, 0x49, 0x44, 0x41, 0x54, 0x38,
|
||||||
0x00, 0x00, 0x00, 0x1F, 0xF3, 0xFF, 0x61, 0x00, 0x00, 0x00, 0x4D, 0x49,
|
0x8d, 0x63, 0xfc, 0xff, 0xff, 0x3f, 0x03, 0xb1, 0x80, 0xd1, 0x9e, 0x01, 0x43, 0x31, 0x13, 0xd1,
|
||||||
0x44, 0x41, 0x54, 0x38, 0x8D, 0x63, 0xFC, 0xFF, 0xFF, 0x3F, 0x03, 0xB1,
|
0xba, 0x71, 0x00, 0x8a, 0x0d, 0x60, 0x21, 0xa4, 0x00, 0xd9, 0xd9, 0xff, 0x0f, 0x32, 0x30, 0x52,
|
||||||
0x80, 0xD1, 0x9E, 0x01, 0x43, 0x31, 0x13, 0xD1, 0xBA, 0x71, 0x00, 0x8A,
|
0xdd, 0x05, 0xb4, 0xf1, 0x02, 0xb6, 0xd0, 0xa6, 0x99, 0x0b, 0x68, 0x1f, 0x0b, 0xd8, 0x42, 0x9e,
|
||||||
0x0D, 0x60, 0x21, 0xA4, 0x00, 0xD9, 0xD9, 0xFF, 0x0F, 0x32, 0x30, 0x52,
|
0xaa, 0x2e, 0xa0, 0xd8, 0x00, 0x46, 0x06, 0x3b, 0xcc, 0xcc, 0x40, 0xc8, 0xd9, 0x54, 0x75, 0x01,
|
||||||
0xDD, 0x05, 0xB4, 0xF1, 0x02, 0xB6, 0xD0, 0xA6, 0x99, 0x0B, 0x68, 0x1F,
|
0xe5, 0x5e, 0x20, 0x25, 0x3b, 0x63, 0x03, 0x00, 0x3e, 0xb7, 0x11, 0x5a, 0x8d, 0x1c, 0x07, 0xb4,
|
||||||
0x0B, 0xD8, 0x42, 0x9E, 0xAA, 0x2E, 0xA0, 0xD8, 0x00, 0x46, 0x06, 0x3B,
|
0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
|
||||||
0xCC, 0xCC, 0x40, 0xC8, 0xD9, 0x54, 0x75, 0x01, 0xE5, 0x5E, 0x20, 0x25,
|
|
||||||
0x3B, 0x63, 0x03, 0x00, 0x3E, 0xB7, 0x11, 0x5A, 0x8D, 0x1C, 0x07, 0xB4,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4E, 0x44, 0xAE, 0x42, 0x60, 0x82
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,486 +1,332 @@
|
|||||||
/*
|
|
||||||
* Settings html
|
|
||||||
*/
|
|
||||||
|
|
||||||
//common CSS of settings pages
|
// Autogenerated from wled00/data/style.css, do not edit!!
|
||||||
const char PAGE_settingsCss[] PROGMEM = R"=====(<style>body{font-family:Verdana,sans-serif;text-align:center;background:#222;color:#fff;line-height:200%%;margin:0}hr{border-color:#666}button{background:#333;color:#fff;font-family:Verdana,sans-serif;border:.3ch solid #333;display:inline-block;font-size:20px;margin:8px;margin-top:12px}.helpB{text-align:left;position:absolute;width:60px}input{background:#333;color:#fff;font-family:Verdana,sans-serif;border:.5ch solid #333}input[type=number]{width:4em}select{background:#333;color:#fff;font-family:Verdana,sans-serif;border:0.5ch solid #333}td{padding:2px;}.d5{width:4.5em !important;}</style>)=====";
|
const char PAGE_settingsCss[] PROGMEM = R"=====(<style>body{font-family:Verdana,sans-serif;text-align:center;background:#222;color:#fff;line-height:200%%;margin:0}hr{border-color:#666}button{background:#333;color:#fff;font-family:Verdana,sans-serif;border:.3ch solid #333;display:inline-block;font-size:20px;margin:8px;margin-top:12px}.helpB{text-align:left;position:absolute;width:60px}input{background:#333;color:#fff;font-family:Verdana,sans-serif;border:.5ch solid #333}input[type=number]{width:4em}select{background:#333;color:#fff;font-family:Verdana,sans-serif;border:.5ch solid #333}td{padding:2px}.d5{width:4.5em!important}</style>)=====";
|
||||||
|
|
||||||
//settings menu
|
|
||||||
const char PAGE_settings[] PROGMEM = R"=====(<!DOCTYPE html>
|
|
||||||
<html><head><title>WLED Settings</title><style>body{text-align:center;background:#222;height:100%%;margin:0}html{--h:11.55vh}button{background:#333;color:#fff;font-family:Verdana,Helvetica,sans-serif;border:.3ch solid #333;display:inline-block;font-size:8vmin;height:var(--h);width:95%%;margin-top:2.4vh}</style>
|
|
||||||
<script>function BB(){if(window.frameElement){document.getElementById("b").style.display="none";document.documentElement.style.setProperty("--h","13.86vh")}};</script></head>
|
|
||||||
<body onload=BB()>
|
|
||||||
<form action=/><button type=submit id=b>Back</button></form>
|
|
||||||
<form action=/settings/wifi><button type=submit>WiFi Setup</button></form>
|
|
||||||
<form action=/settings/leds><button type=submit>LED Preferences</button></form>
|
|
||||||
<form action=/settings/ui><button type=submit>User Interface</button></form>%DMXMENU%
|
|
||||||
<form action=/settings/sync><button type=submit>Sync Interfaces</button></form>
|
|
||||||
<form action=/settings/time><button type=submit>Time & Macros</button></form>
|
|
||||||
<form action=/settings/sec><button type=submit>Security & Updates</button></form>
|
|
||||||
|
|
||||||
|
// Autogenerated from wled00/data/settings.htm, do not edit!!
|
||||||
|
const char PAGE_settings[] PROGMEM = R"=====(<!DOCTYPE html><html><head><meta http-equiv="Content-Type"
|
||||||
|
content="text/html; charset=windows-1252"><title>WLED Settings</title><style>
|
||||||
|
:root{--aCol:#D9B310;--bCol:#0B3C5D;--cCol:#1D2731;--dCol:#328CC1;--sCol:#000;--tCol:#328CC1;--cFn:Verdana}body{text-align:center;background:var(--cCol);height:100%;margin:0;background-attachment:fixed}html{--h:11.55vh}button{background:var(--bCol);color:var(--tCol);font-family:var(--cFn),Helvetica,sans-serif;border:.3ch solid var(--bCol);display:inline-block;filter:drop-shadow( -5px -5px 5px var(--sCol) );font-size:8vmin;height:var(--h);width:95%;margin-top:2.4vh}
|
||||||
|
</style><script>
|
||||||
|
function BB(){window.frameElement&&(document.getElementById("b").style.display="none",document.documentElement.style.setProperty("--h","13.86vh"))}
|
||||||
|
</script></head><body onload="BB()"><form action="/"><button type="submit"
|
||||||
|
id="b">Back</button></form><form action="/settings/wifi"><button type="submit">
|
||||||
|
WiFi Setup</button></form><form action="/settings/leds"><button type="submit">
|
||||||
|
LED Preferences</button></form><form action="/settings/ui"><button
|
||||||
|
type="submit">User Interface</button></form><form action="/settings/sync">
|
||||||
|
<button type="submit">Sync Interfaces</button></form><form
|
||||||
|
action="/settings/time"><button type="submit">Time & Macros</button></form><form
|
||||||
|
action="/settings/sec"><button type="submit">Security & Updates</button></form>
|
||||||
</body></html>)=====";
|
</body></html>)=====";
|
||||||
|
|
||||||
|
|
||||||
//wifi settings
|
// Autogenerated from wled00/data/settings_wifi.htm, do not edit!!
|
||||||
const char PAGE_settings_wifi[] PROGMEM = R"=====(<!DOCTYPE html>
|
const char PAGE_settings_wifi[] PROGMEM = R"=====(<!DOCTYPE html><html><head><meta name="viewport" content="width=500"><title>
|
||||||
<html><head><meta name="viewport" content="width=500"><meta charset="utf-8">
|
WiFi Settings</title><script>
|
||||||
<title>WiFi Settings</title><script>function H(){window.open("https://github.com/Aircoookie/WLED/wiki/Settings#wifi-settings");}function B(){window.history.back();}function GetV(){var d=document;
|
function H(){window.open("https://github.com/Aircoookie/WLED/wiki/Settings#wifi-settings")}function B(){window.open("/settings","_self")}function GetV(){}
|
||||||
%CSS%%SCSS%</head><body onload="GetV()">
|
</script>%CSS%%SCSS%</head><body onload="GetV()"><form id="form_s" name="Sf" method="post">
|
||||||
<form id="form_s" name="Sf" method="post">
|
<div class="helpB"><button type="button" onclick="H()">?</button></div><button
|
||||||
<div class="helpB"><button type="button" onclick="H()">?</button></div>
|
type="button" onclick="B()">Back</button><button type="submit">Save & Reboot
|
||||||
<button type="button" onclick="B()">Back</button><button type="submit">Save & Connect</button><hr>
|
</button><hr><h2>WiFi setup</h2><h3>Connect to existing network</h3>
|
||||||
<h2>WiFi setup</h2>
|
Network name (SSID, empty to not connect):<br><input name="CS" maxlength="32">
|
||||||
<h3>Connect to existing network</h3>
|
<br>Network password:<br><input type="password" name="CP" maxlength="63"><br>
|
||||||
Network name (SSID, empty to not connect): <br><input name="CS" maxlength="32"><br>
|
Static IP (leave at 0.0.0.0 for DHCP):<br><input name="I0" type="number"
|
||||||
Network password: <br> <input type="password" name="CP" maxlength="63"><br>
|
min="0" max="255" required> . <input name="I1" type="number" min="0" max="255"
|
||||||
Static IP (leave at 0.0.0.0 for DHCP):<br>
|
required> . <input name="I2" type="number" min="0" max="255" required> . <input
|
||||||
<input name="I0" type="number" min="0" max="255" required> .
|
name="I3" type="number" min="0" max="255" required><br>Static gateway:<br><input
|
||||||
<input name="I1" type="number" min="0" max="255" required> .
|
name="G0" type="number" min="0" max="255" required> . <input name="G1"
|
||||||
<input name="I2" type="number" min="0" max="255" required> .
|
type="number" min="0" max="255" required> . <input name="G2" type="number"
|
||||||
<input name="I3" type="number" min="0" max="255" required><br>
|
min="0" max="255" required> . <input name="G3" type="number" min="0" max="255"
|
||||||
Static gateway:<br>
|
required><br>Static subnet mask:<br><input name="S0" type="number" min="0"
|
||||||
<input name="G0" type="number" min="0" max="255" required> .
|
max="255" required> . <input name="S1" type="number" min="0" max="255" required>
|
||||||
<input name="G1" type="number" min="0" max="255" required> .
|
. <input name="S2" type="number" min="0" max="255" required> . <input
|
||||||
<input name="G2" type="number" min="0" max="255" required> .
|
name="S3" type="number" min="0" max="255" required><br>
|
||||||
<input name="G3" type="number" min="0" max="255" required><br>
|
mDNS address (leave empty for no mDNS):<br>http:// <input name="CM"
|
||||||
Static subnet mask:<br>
|
maxlength="32"> .local<br>Client IP: <span class="sip">Not connected</span><br>
|
||||||
<input name="S0" type="number" min="0" max="255" required> .
|
<h3>Configure Access Point</h3>AP SSID (leave empty for no AP):<br><input
|
||||||
<input name="S1" type="number" min="0" max="255" required> .
|
name="AS" maxlength="32"><br>Hide AP name: <input type="checkbox" name="AH"><br>
|
||||||
<input name="S2" type="number" min="0" max="255" required> .
|
AP password (leave empty for open):<br><input type="password" name="AP"
|
||||||
<input name="S3" type="number" min="0" max="255" required><br>
|
maxlength="63"><br>Access Point WiFi channel: <input name="AC" type="number"
|
||||||
mDNS address (leave empty for no mDNS):<br/>
|
min="1" max="13" required><br>AP opens: <select name="AB"><option value="0">
|
||||||
http:// <input name="CM" maxlength="32"> .local<br>
|
No connection after boot</option><option value="1">Disconnected</option><option
|
||||||
Client IP: <span class="sip"> Not connected </span><br>
|
value="2">Always</option><option value="3">Never (not recommended)</option>
|
||||||
<h3>Configure Access Point</h3>
|
</select><br>AP IP: <span class="sip">Not active</span><hr><button
|
||||||
AP name (SSID):<br><input name="AS" maxlength="32"><br>
|
type="button" onclick="B()">Back</button><button type="submit">Save & Reboot
|
||||||
Hide AP name: <input type="checkbox" name="AH"><br>
|
</button></form></body></html>)=====";
|
||||||
AP password (leave empty for open):<br> <input type="password" name="AP" maxlength="63"><br>
|
|
||||||
Access Point WiFi channel: <input name="AC" type="number" min="1" max="13" required><br>
|
|
||||||
AP opens:
|
|
||||||
<select name="AB">
|
|
||||||
<option value="0">No connection after boot</option>
|
|
||||||
<option value="1">Disconnected</option>
|
|
||||||
<option value="2">Always</option>
|
|
||||||
<option value="3">Never (not recommended)</option></select><br>
|
|
||||||
AP IP: <span class="sip"> Not active </span><br>
|
|
||||||
<h3>Experimental</h3>
|
|
||||||
Disable WiFi sleep: <input type="checkbox" name="WS"><br>
|
|
||||||
<i>Can help with connectivity issues.<br>
|
|
||||||
Do not enable if WiFi is working correctly, increases power consumption.</i>
|
|
||||||
<hr>
|
|
||||||
<button type="button" onclick="B()">Back</button><button type="submit">Save & Connect</button>
|
|
||||||
</form>
|
|
||||||
</body>
|
|
||||||
</html>)=====";
|
|
||||||
|
|
||||||
|
|
||||||
//LED settings
|
// Autogenerated from wled00/data/settings_leds.htm, do not edit!!
|
||||||
const char PAGE_settings_leds[] PROGMEM = R"=====(<!DOCTYPE html>
|
const char PAGE_settings_leds[] PROGMEM = R"=====(<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport"
|
||||||
<html><head>
|
content="width=500"><title>LED Settings</title><script>
|
||||||
<meta charset=utf-8>
|
var d=document,laprev=55;function H(){window.open("https://github.com/Aircoookie/WLED/wiki/Settings#led-settings")}function B(){window.open("/settings","_self")}function S(){GetV(),setABL()}function enABL(){var e=d.getElementById("able").checked;d.Sf.LA.value=e?laprev:0,d.getElementById("abl").style.display=e?"inline":"none",d.getElementById("psu2").style.display=e?"inline":"none",0<d.Sf.LA.value&&setABL()}function enLA(){var e=d.Sf.LAsel.value;d.Sf.LA.value=e,d.getElementById("LAdis").style.display=50==e?"inline":"none",UI()}function setABL(){switch(d.getElementById("able").checked=!0,d.Sf.LAsel.value=50,parseInt(d.Sf.LA.value)){case 0:d.getElementById("able").checked=!1,enABL();break;case 30:d.Sf.LAsel.value=30;break;case 35:d.Sf.LAsel.value=35;break;case 55:d.Sf.LAsel.value=55;break;case 255:d.Sf.LAsel.value=255;break;default:d.getElementById("LAdis").style.display="inline"}UI()}function UI(){var e=d.querySelectorAll(".wc"),l=e.length;for(i=0;i<l;i++)e[i].style.display=d.getElementById("rgbw").checked?"inline":"none";d.getElementById("ledwarning").style.display=1e3<d.Sf.LC.value?"inline":"none",d.getElementById("ampwarning").style.display=7200<d.Sf.MA.value?"inline":"none",255==d.Sf.LA.value?laprev=12:0<d.Sf.LA.value&&(laprev=d.Sf.LA.value);var n=5<(n=Math.ceil((100+d.Sf.LC.value*laprev)/500)/2)?Math.ceil(n):n,t="",a=30==d.Sf.LAsel.value,s=255==d.Sf.LAsel.value;n<1.02&&!a&&!s?t="ESP 5V pin with 1A USB supply":(t+=a?"12V ":s?"WS2815 12V ":"5V ",t+=n,t+="A supply connected to LEDs");var u=Math.ceil((100+d.Sf.LC.value*laprev)/1500)/2,c="(for most effects, ~";c+=u=5<u?Math.ceil(u):u,c+="A is enough)<br>",d.getElementById("psu").innerHTML=t,d.getElementById("psu2").innerHTML=s?"":c}function GetV(){}
|
||||||
<meta name=viewport content="width=500">
|
</script>%CSS%%SCSS%</head><body onload="S()"><form id="form_s" name="Sf" method="post"><div
|
||||||
<title>LED Settings</title>
|
class="helpB"><button type="button" onclick="H()">?</button></div><button
|
||||||
<script>var d=document,laprev=55;function H(){window.open("https://github.com/Aircoookie/WLED/wiki/Settings#led-settings")}function B(){window.open("/settings","_self")}function S(){GetV();setABL()}
|
type="button" onclick="B()">Back</button><button type="submit">Save</button><hr>
|
||||||
function enABL(){var a=d.getElementById("able").checked;d.Sf.LA.value=(a)?laprev:0;d.getElementById("abl").style.display=(a)?"inline":"none";d.getElementById("psu2").style.display=(a)?"inline":"none";if(d.Sf.LA.value>0){setABL()}}function enLA(){var a=d.Sf.LAsel.value;d.Sf.LA.value=a;d.getElementById("LAdis").style.display=(a==50)?"inline":"none";UI()}function setABL(){d.getElementById("able").checked=true;d.Sf.LAsel.value=50;switch(parseInt(d.Sf.LA.value)){case 0:d.getElementById("able").checked=false;enABL();break;case 30:d.Sf.LAsel.value=30;break;case 35:d.Sf.LAsel.value=35;break;case 55:d.Sf.LAsel.value=55;break;case 255:d.Sf.LAsel.value=255;break;default:d.getElementById("LAdis").style.display="inline"}UI()}function UI(){var b=d.querySelectorAll(".wc"),a=b.length;for(i=0;i<a;i++){b[i].style.display=(d.getElementById("rgbw").checked)?"inline":"none"}d.getElementById("ledwarning").style.display=(d.Sf.LC.value>1000)?"inline":"none";d.getElementById("ampwarning").style.display=(d.Sf.MA.value>7200)?"inline":"none";if(d.Sf.LA.value==255){laprev=12} else if(d.Sf.LA.value>0){laprev=d.Sf.LA.value}var j=Math.ceil((100+d.Sf.LC.value*laprev)/500)/2;j=(j>5)?Math.ceil(j):j;var g="";var e=(d.Sf.LAsel.value==30);var i=(d.Sf.LAsel.value==255);if(j<1.02&&!e&&!i){g="ESP 5V pin with 1A USB supply"}else{g+=e?"12V ":i?"WS2815 12V ":"5V ";g+=j;g+="A supply connected to LEDs"}var h=Math.ceil((100+d.Sf.LC.value*laprev)/1500)/2;h=(h>5)?Math.ceil(h):h;var c="(for most effects, ~";c+=h;c+="A is enough)<br>";d.getElementById("psu").innerHTML=g;d.getElementById("psu2").innerHTML=i?"":c}function GetV(){var d=document;
|
<h2>LED setup</h2>LED count: <input name="LC" type="number" min="1" max="1500"
|
||||||
%CSS%%SCSS%</head><body onload=S()>
|
oninput="UI()" required><br><div id="ledwarning"
|
||||||
<form id=form_s name=Sf method=post>
|
style="color:orange;display:none">
|
||||||
<div class=helpB><button type=button onclick=H()>?</button></div>
|
|
||||||
<button type=button onclick=B()>Back</button><button type=submit>Save</button><hr>
|
|
||||||
<h2>LED setup</h2>
|
|
||||||
LED count: <input name=LC type=number min=1 max=1500 oninput=UI() required><br>
|
|
||||||
<div id=ledwarning style=color:orange;display:none>
|
|
||||||
⚠ You might run into stability or lag issues.<br>
|
⚠ You might run into stability or lag issues.<br>
|
||||||
Use less than 1000 LEDs per ESP for the best experience!<br>
|
Use less than 1000 LEDs per ESP for the best experience!<br></div><i>
|
||||||
</div>
|
Recommended power supply for brightest white:</i><br><b><span id="psu">?</span>
|
||||||
<i>Recommended power supply for brightest white:</i><br>
|
</b><br><span id="psu2"><br></span><br>Enable automatic brightness limiter:
|
||||||
<b><span id=psu>?</span></b><br>
|
<input type="checkbox" name="ABen" onchange="enABL()" id="able"><br><div
|
||||||
<span id=psu2><br></span>
|
id="abl">Maximum Current: <input name="MA" type="number" min="250" max="65000"
|
||||||
<br>
|
oninput="UI()" required> mA<br><div id="ampwarning"
|
||||||
Enable automatic brightness limiter: <input type=checkbox name=ABen onchange=enABL() id=able><br>
|
style="color:orange;display:none">
|
||||||
<div id=abl>
|
|
||||||
Maximum Current: <input name=MA type=number min=250 max=65000 oninput=UI() required> mA<br>
|
|
||||||
<div id=ampwarning style=color:orange;display:none>
|
|
||||||
⚠ Your power supply provides high current.<br>
|
⚠ Your power supply provides high current.<br>
|
||||||
To improve the safety of your setup,<br>
|
To improve the safety of your setup,<br>please use thick cables,<br>
|
||||||
please use thick cables,<br>
|
multiple power injection points and a fuse!<br></div><i>
|
||||||
multiple power injection points and a fuse!<br>
|
Automatically limits brightness to stay close to the limit.<br>
|
||||||
</div>
|
|
||||||
<i>Automatically limits brightness to stay close to the limit.<br>
|
|
||||||
Keep at <1A if powering LEDs directly from the ESP 5V pin!<br>
|
Keep at <1A if powering LEDs directly from the ESP 5V pin!<br>
|
||||||
If you are using an external power supply, enter its rating.<br>
|
If you are using an external power supply, enter its rating.<br>
|
||||||
(Current estimated usage: <span class=pow>unknown</span>)</i><br><br>
|
(Current estimated usage: <span class="pow">unknown</span>)</i><br><br>
|
||||||
LED voltage (Max. current for a single LED):<br>
|
LED voltage (Max. current for a single LED):<br><select name="LAsel"
|
||||||
<select name=LAsel onchange=enLA()>
|
onchange="enLA()"><option value="55" selected="selected">5V default (55mA)
|
||||||
<option value=55 selected>5V default (55mA)</option>
|
</option><option value="35">5V efficient (35mA)</option><option value="30">
|
||||||
<option value=35>5V efficient (35mA)</option>
|
12V (30mA)</option><option value="255">WS2815 (12mA)</option><option value="50">
|
||||||
<option value=30>12V (30mA)</option>
|
Custom</option></select><br><span id="LAdis" style="display:none">
|
||||||
<option value=255>WS2815 (12mA)</option>
|
Custom max. current per LED: <input name="LA" type="number" min="0" max="255"
|
||||||
<option value=50>Custom</option>
|
id="la" oninput="UI()" required> mA<br></span><i>
|
||||||
</select><br>
|
Keep at default if you are unsure about your type of LEDs.</i><br></div><br>
|
||||||
<span id=LAdis style=display:none>Custom max. current per LED: <input name=LA type=number min=0 max=255 id=la oninput=UI() required> mA<br></span>
|
LEDs are 4-channel type (RGBW): <input type="checkbox" name="EW"
|
||||||
<i>Keep at default if you are unsure about your type of LEDs.</i><br>
|
onchange="UI()" id="rgbw"><br><span class="wc">
|
||||||
</div>
|
Auto-calculate white channel from RGB: <input type="checkbox" name="AW"><br>
|
||||||
<br>
|
</span>Color order: <select name="CO"><option value="0">GRB</option><option
|
||||||
LEDs are 4-channel type (RGBW): <input type=checkbox name=EW onchange=UI() id=rgbw><br>
|
value="1">RGB</option><option value="2">BRG</option><option value="3">RBG
|
||||||
<span class=wc>
|
</option><option value="4">BGR</option><option value="5">GBR</option></select>
|
||||||
Auto-calculate white channel from RGB:<br>
|
<h3>Defaults</h3>Turn LEDs on after power up/reset: <input type="checkbox"
|
||||||
<select name=AW>
|
name="BO"><br>Default brightness: <input name="CA" type="number" min="0"
|
||||||
<option value=0>None</option>
|
max="255" required> (0-255)<br><br>Apply preset <input name="BP" type="number"
|
||||||
<option value=1>Brighter</option>
|
min="0" max="16" required> at boot (0 uses defaults)<br>- <i>or</i> -<br>
|
||||||
<option value=2>Accurate</option>
|
Set current preset cycle setting as boot default: <input type="checkbox"
|
||||||
<option value=3>Dual</option>
|
name="PC"><br><br>Use Gamma correction for color: <input type="checkbox"
|
||||||
<option value=4>Legacy</option>
|
name="GC"> (strongly recommended)<br>Use Gamma correction for brightness: <input
|
||||||
</select>
|
type="checkbox" name="GB"> (not recommended)<br><br>Brightness factor: <input
|
||||||
<br></span>
|
name="BF" type="number" min="1" max="255" required> %<h3>Transitions</h3>
|
||||||
Color order:
|
Crossfade: <input type="checkbox" name="TF"><br>Transition Time: <input
|
||||||
<select name=CO>
|
name="TD" maxlength="5" size="2"> ms<br>Enable Palette transitions: <input
|
||||||
<option value=0>GRB</option>
|
type="checkbox" name="PF"><h3>Timed light</h3>Default Duration: <input
|
||||||
<option value=1>RGB</option>
|
name="TL" type="number" min="1" max="255" required> min<br>
|
||||||
<option value=2>BRG</option>
|
Default Target brightness: <input name="TB" type="number" min="0" max="255"
|
||||||
<option value=3>RBG</option>
|
required><br>Fade down: <input type="checkbox" name="TW"><br><h3>Advanced</h3>
|
||||||
<option value=4>BGR</option>
|
Palette blending: <select name="PB"><option value="0">Linear (wrap if moving)
|
||||||
<option value=5>GBR</option>
|
</option><option value="1">Linear (always wrap)</option><option value="2">
|
||||||
</select>
|
Linear (never wrap)</option><option value="3">None (not recommended)</option>
|
||||||
<h3>Defaults</h3>
|
</select><br>Reverse LED order (rotate 180): <input type="checkbox" name="RV">
|
||||||
Turn LEDs on after power up/reset: <input type=checkbox name=BO><br>
|
<br>Skip first LED: <input type="checkbox" name="SL"><br><button type="button"
|
||||||
Default brightness: <input name=CA type=number min=0 max=255 required> (0-255)<br><br>
|
onclick="B()">Back</button><button type="submit">Save</button></form></body>
|
||||||
Apply preset <input name=BP type=number min=0 max=16 required> at boot (0 uses defaults)
|
</html>)=====";
|
||||||
<br>- <i>or</i> -<br>
|
|
||||||
Set current preset cycle setting as boot default: <input type=checkbox name=PC><br><br>
|
|
||||||
Use Gamma correction for color: <input type=checkbox name=GC> (strongly recommended)<br>
|
|
||||||
Use Gamma correction for brightness: <input type=checkbox name=GB> (not recommended)<br><br>
|
|
||||||
Brightness factor: <input name=BF type=number min=1 max=255 required> %
|
|
||||||
<h3>Transitions</h3>
|
|
||||||
Crossfade: <input type=checkbox name=TF><br>
|
|
||||||
Transition Time: <input name=TD maxlength=5 size=2> ms<br>
|
|
||||||
Enable Palette transitions: <input type=checkbox name=PF>
|
|
||||||
<h3>Timed light</h3>
|
|
||||||
Default Duration: <input name=TL type=number min=1 max=255 required> min<br>
|
|
||||||
Default Target brightness: <input name=TB type=number min=0 max=255 required><br>
|
|
||||||
Fade down: <input type=checkbox name=TW><br>
|
|
||||||
<h3>Advanced</h3>
|
|
||||||
Palette blending:
|
|
||||||
<select name=PB>
|
|
||||||
<option value=0>Linear (wrap if moving)</option>
|
|
||||||
<option value=1>Linear (always wrap)</option>
|
|
||||||
<option value=2>Linear (never wrap)</option>
|
|
||||||
<option value=3>None (not recommended)</option>
|
|
||||||
</select><br>
|
|
||||||
Reverse LED order (rotate 180): <input type=checkbox name=RV><br>
|
|
||||||
Skip first LED: <input type=checkbox name=SL><hr>
|
|
||||||
<button type=button onclick=B()>Back</button><button type=submit>Save</button>
|
|
||||||
</form></body></html>)=====";
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef WLED_ENABLE_DMX
|
#ifdef WLED_ENABLE_DMX
|
||||||
//DMX Output settings
|
|
||||||
const char PAGE_settings_dmx[] PROGMEM = R"=====(<!DOCTYPE html>
|
|
||||||
<html><head><meta name="viewport" content="width=500"><meta charset="utf-8"><title>DMX Settings</title><script>
|
|
||||||
function GCH(num) {
|
|
||||||
d=document;
|
|
||||||
|
|
||||||
d.getElementById('dmxchannels').innerHTML += "";
|
|
||||||
for (i=0;i<num;i++) {
|
|
||||||
d.getElementById('dmxchannels').innerHTML += "<span id=CH" + (i+1) + "s >Channel " + (i+1) + ": <select name=CH" + (i+1) + " id=\"CH" + (i+1) + "\"><option value=0>Set to 0</option><option value=1>Red</option><option value=2>Green</option><option value=3>Blue</option><option value=4>White</option><option value=5>Shutter (Brightness)</option><option value=6>Set to 255</option></select></span><br />\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function mMap(){
|
|
||||||
d=document;
|
|
||||||
numCh=document.Sf.CN.value;
|
|
||||||
numGap=document.Sf.CG.value;
|
|
||||||
if (parseInt(numCh)>parseInt(numGap)) {
|
|
||||||
d.getElementById("gapwarning").style.display="block";
|
|
||||||
} else {
|
|
||||||
d.getElementById("gapwarning").style.display="none";
|
|
||||||
}
|
|
||||||
for (i=0;i<15;i++) {
|
|
||||||
if (i>=numCh) {
|
|
||||||
d.getElementById("CH"+(i+1) + "s").style.opacity = "0.5";
|
|
||||||
d.getElementById("CH"+(i+1)).disabled = true;
|
|
||||||
|
|
||||||
} else {
|
|
||||||
d.getElementById("CH"+(i+1) + "s").style.opacity = "1";
|
|
||||||
d.getElementById("CH"+(i+1)).disabled = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function S(){GCH(15);GetV();mMap();}function H(){window.open("https://github.com/Aircoookie/WLED/wiki/DMX");}function B(){window.history.back();}function GetV(){var d=document;
|
|
||||||
%CSS%%SCSS%</head>
|
|
||||||
<body onload="S()">
|
|
||||||
<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">Save</button><hr>
|
|
||||||
<h2>Imma firin ma lazer (if it has DMX support)</h2><!-- TODO: Change to something less-meme-related //-->
|
|
||||||
|
|
||||||
Proxy Universe <input name=PU type=number min=0 max=63999 required> from E1.31 to DMX (0=disabled)<br>
|
// Autogenerated from wled00/data/settings_dmx.htm, do not edit!!
|
||||||
<i>This will disable the LED data output to DMX configurable below</i><br><br>
|
const char PAGE_settings_dmx[] PROGMEM = R"=====(<!DOCTYPE html><html><head><meta name="viewport" content="width=500"><meta
|
||||||
<i>Number of fixtures is taken from LED config page</i><br>
|
charset="utf-8"><title>DMX Settings</title><script>
|
||||||
|
function GCH(e){for(d=document,d.getElementById("dmxchannels").innerHTML+="",i=0;i<e;i++)d.getElementById("dmxchannels").innerHTML+="<span id=CH"+(i+1)+"s >Channel "+(i+1)+": <select name=CH"+(i+1)+' id="CH'+(i+1)+'"><option value=0>Set to 0</option><option value=1>Red</option><option value=2>Green</option><option value=3>Blue</option><option value=4>White</option><option value=5>Shutter (Brightness)</option><option value=6>Set to 255</option></select></span><br />\n'}function mMap(){for(d=document,numCh=document.Sf.CN.value,numGap=document.Sf.CG.value,parseInt(numCh)>parseInt(numGap)?d.getElementById("gapwarning").style.display="block":d.getElementById("gapwarning").style.display="none",i=0;i<15;i++)i>=numCh?(d.getElementById("CH"+(i+1)+"s").style.opacity="0.5",d.getElementById("CH"+(i+1)).disabled=!0):(d.getElementById("CH"+(i+1)+"s").style.opacity="1",d.getElementById("CH"+(i+1)).disabled=!1)}function S(){GCH(15),GetV(),mMap()}function H(){window.open("https://github.com/Aircoookie/WLED/wiki/DMX")}function B(){window.history.back()}
|
||||||
|
</script></head><body onload="S()"><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">Save</button><hr>
|
||||||
|
<h2>Imma firin ma lazer (if it has DMX support)</h2>
|
||||||
|
<!-- TODO: Change to something less-meme-related //--> Proxy Universe <input
|
||||||
|
name="PU" type="number" min="0" max="63999" required>
|
||||||
|
from E1.31 to DMX (0=disabled)<br><i>
|
||||||
|
This will disable the LED data output to DMX configurable below</i><br><br><i>
|
||||||
|
Number of fixtures is taken from LED config page</i><br>
|
||||||
|
Channels per fixture (15 max): <input type="number" min="1" max="15" name="CN"
|
||||||
|
maxlength="2" onchange="mMap()"><br>Start channel: <input type="number" min="1"
|
||||||
|
max="512" name="CS" maxlength="2"><br>Spacing between start channels: <input
|
||||||
|
type="number" min="1" max="512" name="CG" maxlength="2" onchange="mMap()"> [ <a
|
||||||
|
href="javascript:alert('if set to 10, first fixture will start at 10,\nsecond will start at 20 etc.\nRegardless of the channel count.\nMakes memorizing channel numbers easier.');">
|
||||||
|
info</a> ]<br><div id="gapwarning" style="color:orange;display:none">
|
||||||
|
WARNING: Channel gap is lower than channels per fixture.<br>
|
||||||
|
This will cause overlap.</div><button type="button"
|
||||||
|
onclick='location.href="/dmxmap"'>DMX Map</button><br>DMX fixtures start LED:
|
||||||
|
<input type="number" min="0" max="1500" name="SL"><h3>channel functions</h3><div
|
||||||
|
id="dmxchannels"></div><hr><button type="button" onclick="B()">Back</button>
|
||||||
|
<button type="submit">Save</button></form></body></html>)=====";
|
||||||
|
|
||||||
Channels per fixture (15 max): <input type="number" min="1" max="15" name="CN" maxlength="2" onchange="mMap();"><br />
|
|
||||||
Start channel: <input type="number" min="1" max="512" name="CS" maxlength="2"><br />
|
|
||||||
Spacing between start channels: <input type="number" min="1" max="512" name="CG" maxlength="2" onchange="mMap();"> [ <a href="javascript:alert('if set to 10, first fixture will start at 10,\nsecond will start at 20 etc.\nRegardless of the channel count.\nMakes memorizing channel numbers easier.');">info</a> ]<br>
|
|
||||||
<div id="gapwarning" style="color: orange; display: none;">WARNING: Channel gap is lower than channels per fixture.<br />This will cause overlap.</div>
|
|
||||||
<button type="button" onclick="location.href='/dmxmap';">DMX Map</button><br>
|
|
||||||
DMX fixtures start LED: <input type="number" min="0" max="1500" name="SL">
|
|
||||||
<h3>channel functions</h3>
|
|
||||||
<div id="dmxchannels"></div>
|
|
||||||
<hr><button type="button" onclick="B()">Back</button><button type="submit">Save</button>
|
|
||||||
</form>
|
|
||||||
</body>
|
|
||||||
</html>)=====";
|
|
||||||
|
|
||||||
#else
|
#else
|
||||||
const char PAGE_settings_dmx[] PROGMEM = R"=====()=====";
|
const char PAGE_settings_dmx[] PROGMEM = R"=====()=====";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//User Interface settings
|
// Autogenerated from wled00/data/settings_ui.htm, do not edit!!
|
||||||
const char PAGE_settings_ui[] PROGMEM = R"=====(<!DOCTYPE html>
|
const char PAGE_settings_ui[] PROGMEM = R"=====(<!DOCTYPE html><html><head><meta name="viewport" content="width=500"><title>
|
||||||
<html><head><meta name="viewport" content="width=500"><meta charset="utf-8"><title>UI Settings</title><script>
|
UI Settings</title><script>
|
||||||
function gId(s){return document.getElementById(s);}function S(){GetV();Ct();}function H(){window.open("https://github.com/Aircoookie/WLED/wiki/Settings#user-interface-settings");}function B(){window.history.back();}function Ct(){if (gId("co").selected){gId("cth").style.display="block";}else{gId("cth").style.display="none";}}function GetV(){var d=document;
|
function gId(t){return document.getElementById(t)}function S(){GetV(),Ct()}function H(){window.open("https://github.com/Aircoookie/WLED/wiki/Settings#user-interface-settings")}function B(){window.open("/settings","_self")}function Ct(){gId("co").selected?gId("cth").style.display="block":gId("cth").style.display="none"}function GetV(){document}
|
||||||
%CSS%%SCSS%</head>
|
</script>%CSS%%SCSS%</head><body onload="S()"><form id="form_s" name="Sf" method="post"><div
|
||||||
<body onload="S()">
|
class="helpB"><button type="button" onclick="H()">?</button></div><button
|
||||||
<form id="form_s" name="Sf" method="post">
|
type="button" onclick="B()">Back</button><button type="submit">Save</button><hr>
|
||||||
<div class="helpB"><button type="button" onclick="H()">?</button></div>
|
<h2>Web Setup</h2>Server description: <input name="DS" maxlength="32"><br>
|
||||||
<button type="button" onclick="B()">Back</button><button type="submit">Save</button><hr>
|
Sync button toggles both send and receive: <input type="checkbox" name="ST"><br>
|
||||||
<h2>Web Setup</h2>
|
<br><hr><button type="button" onclick="B()">Back</button><button type="submit">
|
||||||
Server description: <input name="DS" maxlength="32"><br>
|
Save</button></form></body></html>)=====";
|
||||||
Sync button toggles both send and receive: <input type="checkbox" name="ST"><br><br>
|
|
||||||
<hr><button type="button" onclick="B()">Back</button><button type="submit">Save</button>
|
|
||||||
</form>
|
|
||||||
</body>
|
|
||||||
</html>)=====";
|
|
||||||
|
|
||||||
|
|
||||||
|
// Autogenerated from wled00/data/settings_sync.htm, do not edit!!
|
||||||
//sync settings
|
const char PAGE_settings_sync[] PROGMEM = R"=====(<!DOCTYPE html><html><head><meta name="viewport" content="width=500"><meta
|
||||||
const char PAGE_settings_sync[] PROGMEM = R"=====(<!DOCTYPE html>
|
charset="utf-8"><title>Sync Settings</title><script>
|
||||||
<html><head><meta name=viewport content="width=500"><meta charset=utf-8><title>Sync Settings</title>
|
var d=document;function H(){window.open("https://github.com/Aircoookie/WLED/wiki/Settings#sync-settings")}function B(){window.open("/settings","_self")}function GetV(){document}function adj(){6454==d.Sf.DI.value?(1==d.Sf.DA.value&&(d.Sf.DA.value=0),1==d.Sf.EU.value&&(d.Sf.EU.value=0)):5568==d.Sf.DI.value&&(0==d.Sf.DA.value&&(d.Sf.DA.value=1),0==d.Sf.EU.value&&(d.Sf.EU.value=1))}function SP(){var e=d.Sf.DI.value;d.getElementById("xp").style.display=0<e?"none":"block",0<e&&(d.Sf.EP.value=e)}function SetVal(){switch(parseInt(d.Sf.EP.value)){case 5568:d.Sf.DI.value=5568;break;case 6454:d.Sf.DI.value=6454}SP()}function S(){GetV(),SetVal()}
|
||||||
<script>var d=document;function H(){window.open("https://github.com/Aircoookie/WLED/wiki/Settings#sync-settings")}function B(){window.open("/settings","_self")}function adj(){if(d.Sf.DI.value==6454){if(d.Sf.DA.value==1){d.Sf.DA.value=0}if(d.Sf.EU.value==1){d.Sf.EU.value=0}}else{if(d.Sf.DI.value==5568){if(d.Sf.DA.value==0){d.Sf.DA.value=1}if(d.Sf.EU.value==0){d.Sf.EU.value=1}}}}function SP(){var a=d.Sf.DI.value;d.getElementById("xp").style.display=(a>0)?"none":"block";if(a>0){d.Sf.EP.value=a}}function SetVal(){switch(parseInt(d.Sf.EP.value)){case 5568:d.Sf.DI.value=5568;break;case 6454:d.Sf.DI.value=6454;break}SP()}function S(){GetV();SetVal()};function GetV(){
|
</script>%CSS%%SCSS%</head><body onload="S()"><form id="form_s" name="Sf" method="post"><div
|
||||||
%CSS%%SCSS%</head>
|
class="helpB"><button type="button" onclick="H()">?</button></div><button
|
||||||
<body onload=S()>
|
type="button" onclick="B()">Back</button><button type="submit">Save</button><hr>
|
||||||
<form id=form_s name=Sf method=post>
|
<h2>Sync setup</h2><h3>Button setup</h3>On/Off button enabled: <input
|
||||||
<div class=helpB><button type=button onclick=H()>?</button></div>
|
type="checkbox" name="BT"><br>Infrared remote: <select name="IR"><option
|
||||||
<button type=button onclick=B()>Back</button><button type=submit>Save</button><hr>
|
value="0">Disabled</option><option value="1">24-key RGB</option><option
|
||||||
<h2>Sync setup</h2>
|
value="2">24-key with CT</option><option value="3">40-key blue</option><option
|
||||||
<h3>Button setup</h3>
|
value="4">44-key RGB</option><option value="5">21-key RGB</option><option
|
||||||
On/Off button enabled: <input type=checkbox name=BT><br>
|
value="6">6-key black</option></select><br><a
|
||||||
Infrared remote:
|
href="https://github.com/Aircoookie/WLED/wiki/Infrared-Control" target="_blank">
|
||||||
<select name=IR>
|
IR info</a><h3>WLED Broadcast</h3>UDP Port: <input name="UP" type="number"
|
||||||
<option value=0>Disabled</option>
|
min="1" max="65535" class="d5" required><br>Receive <input type="checkbox"
|
||||||
<option value=1>24-key RGB</option>
|
name="RB">Brightness, <input type="checkbox" name="RC">Color, and <input
|
||||||
<option value=2>24-key with CT</option>
|
type="checkbox" name="RX">Effects<br>Send notifications on direct change: <input
|
||||||
<option value=3>40-key blue</option>
|
type="checkbox" name="SD"><br>Send notifications on button press: <input
|
||||||
<option value=4>44-key RGB</option>
|
type="checkbox" name="SB"><br>Send Alexa notifications: <input type="checkbox"
|
||||||
<option value=5>21-key RGB</option>
|
name="SA"><br>Send Philips Hue change notifications: <input type="checkbox"
|
||||||
<option value=6>6-key black</option>
|
name="SH"><br>Send Macro notifications: <input type="checkbox" name="SM"><br>
|
||||||
</select><br>
|
Send notifications twice: <input type="checkbox" name="S2"><h3>Realtime</h3>
|
||||||
<a href=https://github.com/Aircoookie/WLED/wiki/Infrared-Control target=_blank>IR info</a>
|
Receive UDP realtime: <input type="checkbox" name="RD"><br><br><i>
|
||||||
<h3>WLED Broadcast</h3>
|
Network DMX input</i><br>Type: <select name="DI" onchange="SP(),adj()"><option
|
||||||
UDP Port: <input name=UP type=number min=1 max=65535 class=d5 required><br>
|
value="5568">E1.31 (sACN)</option><option value="6454">Art-Net</option><option
|
||||||
Receive <input type=checkbox name=RB>Brightness, <input type=checkbox name=RC>Color, and <input type=checkbox name=RX>Effects<br>
|
value="0" selected="selected">Custom port</option></select><br><div id="xp">
|
||||||
Send notifications on direct change: <input type=checkbox name=SD><br>
|
Port: <input name="EP" type="number" min="1" max="65535" value="5568"
|
||||||
Send notifications on button press: <input type=checkbox name=SB><br>
|
class="d5" required><br></div>Multicast: <input type="checkbox" name="EM"><br>
|
||||||
Send Alexa notifications: <input type=checkbox name=SA><br>
|
Start universe: <input name="EU" type="number" min="0" max="63999" required><br>
|
||||||
Send Philips Hue change notifications: <input type=checkbox name=SH><br>
|
<i>Reboot required.</i> Check out <a href="https://github.com/ahodges9/LedFx"
|
||||||
Send Macro notifications: <input type=checkbox name=SM><br>
|
target="_blank">LedFx</a>!<br>Skip out-of-sequence packets: <input
|
||||||
Send notifications twice: <input type=checkbox name=S2>
|
type="checkbox" name="ES"><br>DMX start address: <input name="DA" type="number"
|
||||||
<h3>Realtime</h3>
|
min="0" max="510" required><br>DMX mode: <select name="DM"><option value="0">
|
||||||
Receive UDP realtime: <input type=checkbox name=RD><br><br>
|
Disabled</option><option value="1">Single RGB</option><option value="2">
|
||||||
<i>Network DMX input</i><br>
|
Single DRGB</option><option value="3">Effect</option><option value="4">Multi RGB
|
||||||
Type:
|
</option><option value="5">Multi DRGB</option></select><br><a
|
||||||
<select name=DI onchange=SP();adj()>
|
href="https://github.com/Aircoookie/WLED/wiki/E1.31-DMX" target="_blank">
|
||||||
<option value=5568>E1.31 (sACN)</option>
|
E1.31 info</a><br>Timeout: <input name="ET" type="number" min="1" max="65000"
|
||||||
<option value=6454>Art-Net</option>
|
required> ms<br>Force max brightness: <input type="checkbox" name="FB"><br>
|
||||||
<option value=0 selected>Custom port</option>
|
Disable realtime gamma correction: <input type="checkbox" name="RG"><br>
|
||||||
</select><br>
|
Realtime LED offset: <input name="WO" type="number" min="-255" max="255"
|
||||||
<div id=xp>Port: <input name=EP type=number min=1 max=65535 value=5568 class=d5 required><br></div>
|
required><h3>Alexa Voice Assistant</h3>Emulate Alexa device: <input
|
||||||
Multicast: <input type=checkbox name=EM><br>
|
type="checkbox" name="AL"><br>Alexa invocation name: <input name="AI"
|
||||||
Start universe: <input name=EU type=number min=0 max=63999 required><br>
|
maxlength="32"><h3>Blynk</h3><b>
|
||||||
<i>Reboot required.</i> Check out <a href=https://github.com/ahodges9/LedFx target=_blank>LedFx</a>!<br>
|
Blynk, MQTT and Hue sync all connect to external hosts!<br>
|
||||||
Skip out-of-sequence packets: <input type=checkbox name=ES><br>
|
|
||||||
DMX start address: <input name=DA type=number min=0 max=510 required><br>
|
|
||||||
DMX mode:
|
|
||||||
<select name=DM>
|
|
||||||
<option value=0>Disabled</option>
|
|
||||||
<option value=1>Single RGB</option>
|
|
||||||
<option value=2>Single DRGB</option>
|
|
||||||
<option value=3>Effect</option>
|
|
||||||
<option value=4>Multi RGB</option>
|
|
||||||
<option value=5>Multi DRGB</option>
|
|
||||||
</select><br>
|
|
||||||
<a href=https://github.com/Aircoookie/WLED/wiki/E1.31-DMX target=_blank>E1.31 info</a><br>
|
|
||||||
Timeout: <input name=ET type=number min=1 max=65000 required> ms<br>
|
|
||||||
Force max brightness: <input type=checkbox name=FB><br>
|
|
||||||
Disable realtime gamma correction: <input type=checkbox name=RG><br>
|
|
||||||
Realtime LED offset: <input name=WO type=number min=-255 max=255 required>
|
|
||||||
<h3>Alexa Voice Assistant</h3>
|
|
||||||
Emulate Alexa device: <input type=checkbox name=AL><br>
|
|
||||||
Alexa invocation name: <input name=AI maxlength=32>
|
|
||||||
<h3>Blynk</h3>
|
|
||||||
<b>Blynk, MQTT and Hue sync all connect to external hosts!<br>
|
|
||||||
This may impact the responsiveness of the ESP8266.</b><br>
|
This may impact the responsiveness of the ESP8266.</b><br>
|
||||||
For best results, only use one of these services at a time.<br>
|
For best results, only use one of these services at a time.<br>
|
||||||
(alternatively, connect a second ESP to them and use the UDP sync)<br><br>
|
(alternatively, connect a second ESP to them and use the UDP sync)<br><br>
|
||||||
Device Auth token: <input name=BK maxlength=33><br>
|
Device Auth token: <input name="BK" maxlength="33"><br><i>
|
||||||
<i>Clear the token field to disable. </i><a href=https://github.com/Aircoookie/WLED/wiki/Blynk target=_blank>Setup info</a>
|
Clear the token field to disable. </i><a
|
||||||
<h3>MQTT</h3>
|
href="https://github.com/Aircoookie/WLED/wiki/Blynk" target="_blank">Setup info
|
||||||
Enable MQTT: <input type=checkbox name=MQ><br>
|
</a><h3>MQTT</h3>Enable MQTT: <input type="checkbox" name="MQ"><br>Broker:
|
||||||
Broker: <input name=MS maxlength=32>
|
<input name="MS" maxlength="32"> Port: <input name="MQPORT" type="number"
|
||||||
Port: <input name=MQPORT type=number min=1 max=65535 class=d5><br>
|
min="1" max="65535" class="d5"><br><b>
|
||||||
<b>The MQTT credentials are sent over an unsecured connection.<br>
|
The MQTT credentials are sent over an unsecured connection.<br>
|
||||||
Never use the MQTT password for another service!</b><br>
|
Never use the MQTT password for another service!</b><br>Username: <input
|
||||||
Username: <input name=MQUSER maxlength=40><br>
|
name="MQUSER" maxlength="40"><br>Password: <input type="password" input
|
||||||
Password: <input type=password input name=MQPASS maxlength=40><br>
|
name="MQPASS" maxlength="40"><br>Client ID: <input name="MQCID" maxlength="40">
|
||||||
Client ID: <input name=MQCID maxlength=40><br>
|
<br>Device Topic: <input name="MD" maxlength="32"><br>Group Topic: <input
|
||||||
Device Topic: <input name=MD maxlength=32><br>
|
name="MG" maxlength="32"><br><i>Reboot required to apply changes. </i><a
|
||||||
Group Topic: <input name=MG maxlength=32><br>
|
href="https://github.com/Aircoookie/WLED/wiki/MQTT" target="_blank">MQTT info
|
||||||
<i>Reboot required to apply changes. </i><a href=https://github.com/Aircoookie/WLED/wiki/MQTT target=_blank>MQTT info</a>
|
</a><h3>Philips Hue</h3><i>
|
||||||
<h3>Philips Hue</h3>
|
You can find the bridge IP and the light number in the 'About' section of the hue app.
|
||||||
<i>You can find the bridge IP and the light number in the 'About' section of the hue app.</i><br>
|
</i><br>Poll Hue light <input name="HL" type="number" min="1" max="99"> every
|
||||||
Poll Hue light <input name=HL type=number min=1 max=99> every <input name=HI type=number min=100 max=65000> ms: <input type=checkbox name=HP><br>
|
<input name="HI" type="number" min="100" max="65000"> ms: <input
|
||||||
Then, receive <input type=checkbox name=HO> On/Off, <input type=checkbox name=HB> Brightness, and <input type=checkbox name=HC> Color<br>
|
type="checkbox" name="HP"><br>Then, receive <input type="checkbox" name="HO">
|
||||||
Hue Bridge IP:<br>
|
On/Off, <input type="checkbox" name="HB"> Brightness, and <input
|
||||||
<input name=H0 type=number min=0 max=255> .
|
type="checkbox" name="HC"> Color<br>Hue Bridge IP:<br><input name="H0"
|
||||||
<input name=H1 type=number min=0 max=255> .
|
type="number" min="0" max="255"> . <input name="H1" type="number" min="0"
|
||||||
<input name=H2 type=number min=0 max=255> .
|
max="255"> . <input name="H2" type="number" min="0" max="255"> . <input
|
||||||
<input name=H3 type=number min=0 max=255><br>
|
name="H3" type="number" min="0" max="255"><br><b>
|
||||||
<b>Press the pushlink button on the bridge, after that save this page!</b><br>
|
Press the pushlink button on the bridge, after that save this page!</b><br>
|
||||||
(when first connecting)<br>
|
(when first connecting)<br>Hue status: <span class="hms">Disabled in this build
|
||||||
Hue status: <span class=sip> Disabled in this build </span><hr>
|
</span><hr><button type="button" onclick="B()">Back</button><button
|
||||||
<button type=button onclick=B()>Back</button><button type=submit>Save</button>
|
type="submit">Save</button></form></body></html>)=====";
|
||||||
</form>
|
|
||||||
</body></html>)=====";
|
|
||||||
|
|
||||||
|
|
||||||
//time and macro settings
|
// Autogenerated from wled00/data/settings_time.htm, do not edit!!
|
||||||
const char PAGE_settings_time[] PROGMEM = R"=====(<!DOCTYPE html>
|
const char PAGE_settings_time[] PROGMEM = R"=====(<!DOCTYPE html><html><head><meta name="viewport" content="width=500"><title>
|
||||||
<html><head><meta name="viewport" content="width=500"><meta charset="utf-8"><title>Time Settings</title>
|
Time Settings</title><script>
|
||||||
<script>var d=document;function H(){window.open("https://github.com/Aircoookie/WLED/wiki/Settings#time-settings");}function B(){window.open("/settings","_self");}function S(){BTa();GetV();Cs();FC();}function gId(s){return d.getElementById(s);}function Cs(){gId("cac").style.display="none";gId("coc").style.display="block";gId("ccc").style.display="none";if (gId("ca").selected){gId("cac").style.display="block";}if (gId("cc").selected){gId("coc").style.display="none";gId("ccc").style.display="block";}if (gId("cn").selected){gId("coc").style.display="none";}}
|
var d=document;function H(){window.open("https://github.com/Aircoookie/WLED/wiki/Settings#time-settings")}function B(){window.open("/settings","_self")}function S(){BTa(),GetV(),Cs(),FC()}function gId(t){return d.getElementById(t)}function Cs(){gId("cac").style.display="none",gId("coc").style.display="block",gId("ccc").style.display="none",gId("ca").selected&&(gId("cac").style.display="block"),gId("cc").selected&&(gId("coc").style.display="none",gId("ccc").style.display="block"),gId("cn").selected&&(gId("coc").style.display="none")}function BTa(){var t="<tr><th>Active</th><th>Hour</th><th>Minute</th><th>Macro</th><th>M</th><th>T</th><th>W</th><th>T</th><th>F</th><th>S</th><th>S</th></tr>";for(i=0;i<8;i++)for(t+='<tr><td><input name="W'+i+'" id="W'+i+'" type="number" style="display:none"><input id="W'+i+'0" type="checkbox"></td><td><input name="H'+i+'" type="number" min="0" max="24"></td><td><input name="N'+i+'" type="number" min="0" max="59"></td><td><input name="T'+i+'" type="number" min="0" max="16"></td>',j=1;j<8;j++)t+='<td><input id="W'+i+j+'" type="checkbox"></td>';gId("TMT").innerHTML=t}function FC(){for(j=0;j<8;j++)for(i=0;i<8;i++)gId("W"+i+j).checked=gId("W"+i).value>>j&1}function Wd(){for(a=[0,0,0,0,0,0,0,0],i=0;i<8;i++){for(m=1,j=0;j<8;j++)a[i]+=gId("W"+i+j).checked*m,m*=2;gId("W"+i).value=a[i]}}function GetV(){}
|
||||||
function BTa(){var ih="<tr><th>Active</th><th>Hour</th><th>Minute</th><th>Macro</th><th>M</th><th>T</th><th>W</th><th>T</th><th>F</th><th>S</th><th>S</th></tr>";for (i=0;i<8;i++){ih+="<tr><td><input name=\"W"+i+"\" id=\"W"+i+"\" type=\"number\" style=\"display:none\"><input id=\"W"+i+"0\" type=\"checkbox\"></td><td><input name=\"H"+i+"\" type=\"number\" min=\"0\" max=\"24\"></td><td><input name=\"N"+i+"\" type=\"number\" min=\"0\" max=\"59\"></td><td><input name=\"T"+i+"\" type=\"number\" min=\"0\" max=\"16\"></td>";for (j=1;j<8;j++) ih+="<td><input id=\"W"+i+j+"\" type=\"checkbox\"></td>";}gId("TMT").innerHTML=ih;}
|
</script>%CSS%%SCSS%</head><body onload="S()"><form id="form_s" name="Sf" method="post"
|
||||||
function FC(){for(j=0;j<8;j++){for(i=0;i<8;i++)gId("W"+i+j).checked=gId("W"+i).value>>j&1;}}
|
onsubmit="Wd()"><div class="helpB"><button type="button" onclick="H()">?
|
||||||
function Wd(){a=[0,0,0,0,0,0,0,0];for(i=0;i<8;i++){m=1;for(j=0;j<8;j++){a[i]+=gId("W"+i+j).checked*m;m*=2;}gId("W"+i).value=a[i];}}function GetV(){
|
</button></div><button type="button" onclick="B()">Back</button><button
|
||||||
%CSS%%SCSS%</head>
|
type="submit">Save</button><hr><h2>Time setup</h2>Get time from NTP server:
|
||||||
<body onload="S()">
|
<input type="checkbox" name="NT"><br><input name="NS" maxlength="32"><br>
|
||||||
<form id="form_s" name="Sf" method="post" onsubmit="Wd()">
|
Use 24h format: <input type="checkbox" name="CF"><br>Time zone: <select
|
||||||
<div class="helpB"><button type="button" onclick="H()">?</button></div>
|
name="TZ"><option value="0" selected="selected">GMT(UTC)</option><option
|
||||||
<button type="button" onclick="B()">Back</button><button type="submit">Save</button><hr>
|
value="1">GMT/BST</option><option value="2">CET/CEST</option><option value="3">
|
||||||
<h2>Time setup</h2>
|
EET/EEST</option><option value="4">US-EST/EDT</option><option value="5">
|
||||||
Get time from NTP server: <input type="checkbox" name="NT"><br>
|
US-CST/CDT</option><option value="6">US-MST/MDT</option><option value="7">US-AZ
|
||||||
<input name="NS" maxlength="32"><br>
|
</option><option value="8">US-PST/PDT</option><option value="9">CST(AWST)
|
||||||
Use 24h format: <input type="checkbox" name="CF"><br>
|
</option><option value="10">JST(KST)</option><option value="11">AEST/AEDT
|
||||||
Time zone:
|
</option><option value="12">NZST/NZDT</option><option value="13">North Korea
|
||||||
<select name="TZ">
|
</option></select><br>UTC offset: <input name="UO" type="number" min="-65500"
|
||||||
<option value="0" selected>GMT(UTC)</option>
|
max="65500" required> seconds (max. 18 hours)<br>Current local time is <span
|
||||||
<option value="1">GMT/BST</option>
|
class="times">unknown</span>.<h3>Clock</h3>Clock Overlay: <select name="OL"
|
||||||
<option value="2">CET/CEST</option>
|
onchange="Cs()"><option value="0" id="cn" selected="selected">None</option>
|
||||||
<option value="3">EET/EEST</option>
|
<option value="1" id="ca">Analog Clock</option><option value="2">
|
||||||
<option value="4">US-EST/EDT</option>
|
Single Digit Clock</option><option value="3" id="cc">Cronixie Clock</option>
|
||||||
<option value="5">US-CST/CDT</option>
|
</select><br><div id="coc">First LED: <input name="O1" type="number" min="0"
|
||||||
<option value="6">US-MST/MDT</option>
|
max="255" required> Last LED: <input name="O2" type="number" min="0" max="255"
|
||||||
<option value="7">US-AZ</option>
|
required><br><div id="cac">12h LED: <input name="OM" type="number" min="0"
|
||||||
<option value="8">US-PST/PDT</option>
|
max="255" required><br>Show 5min marks: <input type="checkbox" name="O5"><br>
|
||||||
<option value="9">CST(AWST)</option>
|
</div>Seconds (as trail): <input type="checkbox" name="OS"><br></div><div
|
||||||
<option value="10">JST(KST)</option>
|
id="ccc">Cronixie Display: <input name="CX" maxlength="6"><br>
|
||||||
<option value="11">AEST/AEDT</option>
|
Cronixie Backlight: <input type="checkbox" name="CB"><br></div>Countdown Mode:
|
||||||
<option value="12">NZST/NZDT</option>
|
<input type="checkbox" name="CE"><br>Countdown Goal:<br>Year: 20 <input
|
||||||
<option value="13">North Korea</option>
|
name="CY" type="number" min="0" max="99" required> Month: <input name="CI"
|
||||||
<option value="14">IST (India)</option>
|
type="number" min="1" max="12" required> Day: <input name="CD" type="number"
|
||||||
<option value="15">CA-Saskatchewan</option>
|
min="1" max="31" required><br>Hour: <input name="CH" type="number" min="0"
|
||||||
<option value="16">ACST</option>
|
max="23" required> Minute: <input name="CM" type="number" min="0" max="59"
|
||||||
<option value="17">ACST/ACDT</option>
|
required> Second: <input name="CS" type="number" min="0" max="59" required><br>
|
||||||
</select><br>
|
<h3>Advanced Macros</h3>Define API macros here:<br>1: <input name="M1"
|
||||||
UTC offset: <input name="UO" type="number" min="-65500" max="65500" required> seconds (max. 18 hours)<br>
|
maxlength="64"><br>2: <input name="M2" maxlength="64"><br>3: <input name="M3"
|
||||||
Current local time is <span class="times">unknown</span>.
|
maxlength="64"><br>4: <input name="M4" maxlength="64"><br>5: <input name="M5"
|
||||||
<h3>Clock</h3>
|
maxlength="64"><br>6: <input name="M6" maxlength="64"><br>7: <input name="M7"
|
||||||
Clock Overlay:
|
maxlength="64"><br>8: <input name="M8" maxlength="64"><br>9: <input name="M9"
|
||||||
<select name="OL" onchange="Cs()">
|
maxlength="64"><br>10: <input name="M10" maxlength="64"><br>11: <input
|
||||||
<option value="0" id="cn" selected>None</option>
|
name="M11" maxlength="64"><br>12: <input name="M12" maxlength="64"><br>13:
|
||||||
<option value="1" id="ca">Analog Clock</option>
|
<input name="M13" maxlength="64"><br>14: <input name="M14" maxlength="64"><br>
|
||||||
<option value="2" disabled>-</option>
|
15: <input name="M15" maxlength="64"><br>16: <input name="M16" maxlength="64">
|
||||||
<option value="3" id="cc">Cronixie Clock</option>
|
<br><br><i>Use 0 for the default action instead of a macro</i><br>Boot Macro:
|
||||||
</select><br>
|
<input name="MB" type="number" min="0" max="16" required><br>
|
||||||
<div id="coc">
|
Alexa On/Off Macros: <input name="A0" type="number" min="0" max="16" required>
|
||||||
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>
|
<input name="A1" type="number" min="0" max="16" required><br>Button Macro:
|
||||||
<div id="cac">
|
<input name="MP" type="number" min="0" max="16" required> Long Press: <input
|
||||||
12h LED: <input name="OM" type="number" min="0" max="255" required><br>
|
name="ML" type="number" min="0" max="16" required><br>Countdown-Over Macro:
|
||||||
Show 5min marks: <input type="checkbox" name="O5"><br></div>
|
<input name="MC" type="number" min="0" max="16" required><br>
|
||||||
Seconds (as trail): <input type="checkbox" name="OS"><br>
|
Timed-Light-Over Macro: <input name="MN" type="number" min="0" max="16"
|
||||||
</div>
|
required><br>Time-Controlled Macros:<br><div style="display:inline-block"><table
|
||||||
<div id="ccc">
|
id="TMT"></table></div><hr><button type="button" onclick="B()">Back</button>
|
||||||
Cronixie Display: <input name="CX" maxlength="6"><br>
|
<button type="submit">Save</button></form></body></html>)=====";
|
||||||
Cronixie Backlight: <input type="checkbox" name="CB"><br>
|
|
||||||
</div>
|
|
||||||
Countdown Mode: <input type="checkbox" name="CE"><br>
|
|
||||||
Countdown Goal:<br>
|
|
||||||
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="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>
|
|
||||||
Define API macros here:<br>
|
|
||||||
1: <input name="M1" maxlength="64"><br>
|
|
||||||
2: <input name="M2" maxlength="64"><br>
|
|
||||||
3: <input name="M3" maxlength="64"><br>
|
|
||||||
4: <input name="M4" maxlength="64"><br>
|
|
||||||
5: <input name="M5" maxlength="64"><br>
|
|
||||||
6: <input name="M6" maxlength="64"><br>
|
|
||||||
7: <input name="M7" maxlength="64"><br>
|
|
||||||
8: <input name="M8" maxlength="64"><br>
|
|
||||||
9: <input name="M9" maxlength="64"><br>
|
|
||||||
10: <input name="M10" maxlength="64"><br>
|
|
||||||
11: <input name="M11" maxlength="64"><br>
|
|
||||||
12: <input name="M12" maxlength="64"><br>
|
|
||||||
13: <input name="M13" maxlength="64"><br>
|
|
||||||
14: <input name="M14" maxlength="64"><br>
|
|
||||||
15: <input name="M15" maxlength="64"><br>
|
|
||||||
16: <input name="M16" maxlength="64"><br><br>
|
|
||||||
<i>Use 0 for the default action instead of a macro</i><br>
|
|
||||||
Boot macro: <input name="MB" 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 short press macro: <input name="MP" type="number" min="0" max="16" required><br>
|
|
||||||
Long press: <input name="ML" type="number" min="0" max="16" required> Double press: <input name="MD" 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="MN" type="number" min="0" max="16" required><br>
|
|
||||||
Time-Controlled macros:<br>
|
|
||||||
<div style="display: inline-block">
|
|
||||||
<table id="TMT">
|
|
||||||
</table></div><hr>
|
|
||||||
<button type="button" onclick="B()">Back</button><button type="submit">Save</button>
|
|
||||||
</form>
|
|
||||||
</body>
|
|
||||||
</html>)=====";
|
|
||||||
|
|
||||||
|
|
||||||
//security settings and about
|
// Autogenerated from wled00/data/settings_sec.htm, do not edit!!
|
||||||
const char PAGE_settings_sec[] PROGMEM = R"=====(<!DOCTYPE html>
|
const char PAGE_settings_sec[] PROGMEM = R"=====(<!DOCTYPE html><html><head><meta name="viewport" content="width=500"><title>
|
||||||
<html><head><meta name="viewport" content="width=500"><meta charset="utf-8">
|
Misc Settings</title><script>
|
||||||
<title>Misc Settings</title>
|
function H(){window.open("https://github.com/Aircoookie/WLED/wiki/Settings#security-settings")}function B(){window.open("/settings","_self")}function U(){window.open("/update","_self")}function GetV(){}
|
||||||
<script>function H(){window.open("https://github.com/Aircoookie/WLED/wiki/Settings#security-settings");}function B(){window.open("/settings","_self");}function U(){window.open("/update","_self");}function GetV(){var d=document;
|
</script>%CSS%%SCSS%</head><body onload="GetV()"><form id="form_s" name="Sf" method="post">
|
||||||
%CSS%%SCSS%</head>
|
<div class="helpB"><button type="button" onclick="H()">?</button></div><button
|
||||||
<body onload="GetV()">
|
type="button" onclick="B()">Back</button><button type="submit">Save & Reboot
|
||||||
<form id="form_s" name="Sf" method="post">
|
</button><hr><h2>Security & Update setup</h2>
|
||||||
<div class="helpB"><button type="button" onclick="H()">?</button></div>
|
|
||||||
<button type="button" onclick="B()">Back</button><button type="submit">Save & Reboot</button><hr>
|
|
||||||
<h2>Security & Update setup</h2>
|
|
||||||
Lock wireless (OTA) software update: <input type="checkbox" name="NO"><br>
|
Lock wireless (OTA) software update: <input type="checkbox" name="NO"><br>
|
||||||
Passphrase: <input type="password" name="OP" 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!
|
||||||
The password should be changed when OTA is enabled.<br>
|
<br>The password should be changed when OTA is enabled.<br><b>
|
||||||
<b>Disable OTA when not in use, otherwise an attacker can reflash device software!</b><br>
|
Disable OTA when not in use, otherwise an attacker can reflash device software!
|
||||||
<i>Settings on this page are only changable if OTA lock is disabled!</i><br>
|
</b><br><i>Settings on this page are only changable if OTA lock is disabled!</i>
|
||||||
Deny access to WiFi settings if locked: <input type="checkbox" name="OW"><br><br>
|
<br>Deny access to WiFi settings if locked: <input type="checkbox" name="OW">
|
||||||
Factory reset: <input type="checkbox" name="RS"><br>
|
<br><br>Factory reset: <input type="checkbox" name="RS"><br>
|
||||||
All EEPROM content (settings) will be erased.<br><br>
|
All EEPROM content (settings) will be erased.<br><br>
|
||||||
HTTP traffic is unencrypted. An attacker in the same network can intercept form data!
|
HTTP traffic is unencrypted. An attacker in the same network can intercept form data!
|
||||||
<h3>Software Update</h3>
|
<h3>Software Update</h3><button type="button" onclick="U()">Manual OTA Update
|
||||||
<button type="button" onclick="U()">Manual OTA Update</button><br>
|
</button><br>Enable ArduinoOTA: <input type="checkbox" name="AO"><br><h3>About
|
||||||
Enable ArduinoOTA: <input type="checkbox" name="AO"><br>
|
</h3><a href="https://github.com/Aircoookie/WLED" target="_blank">WLED</a>
|
||||||
<h3>About</h3>
|
version 0.10.0<br><br><a
|
||||||
<a href="https://github.com/Aircoookie/WLED" target="_blank">WLED</a> version 0.10.0<br><br>
|
href="https://github.com/Aircoookie/WLED/wiki/Contributors-&-About"
|
||||||
<a href="https://github.com/Aircoookie/WLED/wiki/Contributors-&-About" target="_blank">Contributors, dependencies and special thanks</a><br>
|
target="_blank">Contributors, dependencies and special thanks</a><br>
|
||||||
A huge thank you to everyone who helped me create WLED!<br><br>
|
A huge thank you to everyone who helped me create WLED!<br><br>
|
||||||
(c) 2016-2020 Christian Schwinne <br>
|
(c) 2016-2019 Christian Schwinne<br><i>Licensed under the MIT license</i><br>
|
||||||
<i>Licensed under the MIT license</i><br><br>
|
<br>Server message: <span class="sip">Response error!</span><hr><button
|
||||||
Server message: <span class="sip"> Response error! </span><hr>
|
type="button" onclick="B()">Back</button><button type="submit">Save & Reboot
|
||||||
<button type="button" onclick="B()">Back</button><button type="submit">Save & Reboot</button>
|
</button></form></body></html>)=====";
|
||||||
</form>
|
|
||||||
</body>
|
|
||||||
</html>)=====";
|
|
||||||
|
3393
wled00/html_ui.h
3393
wled00/html_ui.h
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user