improved structure
program split up in 10 subfiles
This commit is contained in:
parent
2d7ea27fe1
commit
acfdb4ab75
@ -42,14 +42,14 @@ uint8_t bri_n = 100;
|
|||||||
uint8_t nightlightDelayMins = 60;
|
uint8_t nightlightDelayMins = 60;
|
||||||
boolean nightlightFade = true;
|
boolean nightlightFade = true;
|
||||||
|
|
||||||
double transitionResolution = 0.05;
|
double transitionResolution = 0.01;
|
||||||
|
|
||||||
//Internal vars
|
//Internal vars
|
||||||
byte col_old[]{0, 0, 0};
|
byte col_old[]{0, 0, 0};
|
||||||
byte col_t[]{0, 0, 0};
|
byte col_t[]{0, 0, 0};
|
||||||
long transitionStartTime;
|
long transitionStartTime;
|
||||||
long nightlightStartTime;
|
long nightlightStartTime;
|
||||||
float tper_last;
|
float tper_last = 0;
|
||||||
byte bri = 127;
|
byte bri = 127;
|
||||||
byte bri_old = 0;
|
byte bri_old = 0;
|
||||||
byte bri_t = 0;
|
byte bri_t = 0;
|
||||||
@ -84,659 +84,12 @@ void reset()
|
|||||||
ESP.reset();
|
ESP.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
void clearEEPROM()
|
|
||||||
{
|
|
||||||
for (int i = 0; i < 256; i++)
|
|
||||||
{
|
|
||||||
EEPROM.write(i, 0);
|
|
||||||
}
|
|
||||||
EEPROM.commit();
|
|
||||||
}
|
|
||||||
|
|
||||||
void saveSettingsToEEPROM()
|
|
||||||
{
|
|
||||||
if (EEPROM.read(233) != 233) //set no first boot flag
|
|
||||||
{
|
|
||||||
clearEEPROM();
|
|
||||||
EEPROM.write(233, 233);
|
|
||||||
}
|
|
||||||
for (int i = 0; i < 32; ++i)
|
|
||||||
{
|
|
||||||
EEPROM.write(i, clientssid.charAt(i));
|
|
||||||
}
|
|
||||||
for (int i = 32; i < 96; ++i)
|
|
||||||
{
|
|
||||||
EEPROM.write(i, clientpass.charAt(i-32));
|
|
||||||
}
|
|
||||||
for (int i = 96; i < 128; ++i)
|
|
||||||
{
|
|
||||||
EEPROM.write(i, cmdns.charAt(i-96));
|
|
||||||
}
|
|
||||||
for (int i = 128; i < 160; ++i)
|
|
||||||
{
|
|
||||||
EEPROM.write(i, apssid.charAt(i-128));
|
|
||||||
}
|
|
||||||
for (int i = 160; i < 224; ++i)
|
|
||||||
{
|
|
||||||
EEPROM.write(i, appass.charAt(i-160));
|
|
||||||
}
|
|
||||||
EEPROM.write(228, aphide);
|
|
||||||
EEPROM.write(227, apchannel);
|
|
||||||
EEPROM.write(229, led_amount);
|
|
||||||
EEPROM.write(232, buttonEnabled);
|
|
||||||
EEPROM.write(234, staticip[0]);
|
|
||||||
EEPROM.write(235, staticip[1]);
|
|
||||||
EEPROM.write(236, staticip[2]);
|
|
||||||
EEPROM.write(237, staticip[3]);
|
|
||||||
EEPROM.write(238, staticgateway[0]);
|
|
||||||
EEPROM.write(239, staticgateway[1]);
|
|
||||||
EEPROM.write(240, staticgateway[2]);
|
|
||||||
EEPROM.write(241, staticgateway[3]);
|
|
||||||
EEPROM.write(242, staticsubnet[0]);
|
|
||||||
EEPROM.write(243, staticsubnet[1]);
|
|
||||||
EEPROM.write(244, staticsubnet[2]);
|
|
||||||
EEPROM.write(245, staticsubnet[3]);
|
|
||||||
EEPROM.write(246, col[0]);
|
|
||||||
EEPROM.write(247, col[1]);
|
|
||||||
EEPROM.write(248, col[2]);
|
|
||||||
EEPROM.write(249, bri);
|
|
||||||
EEPROM.write(251, fadeTransition);
|
|
||||||
EEPROM.write(253, (transitionDelay >> 0) & 0xFF);
|
|
||||||
EEPROM.write(254, (transitionDelay >> 8) & 0xFF);
|
|
||||||
EEPROM.commit();
|
|
||||||
}
|
|
||||||
|
|
||||||
void loadSettingsFromEEPROM()
|
|
||||||
{
|
|
||||||
if (EEPROM.read(233) != 233) //first boot/reset to default
|
|
||||||
{
|
|
||||||
saveSettingsToEEPROM();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
clientssid = "";
|
|
||||||
for (int i = 0; i < 32; ++i)
|
|
||||||
{
|
|
||||||
if (EEPROM.read(i) == 0) break;
|
|
||||||
clientssid += char(EEPROM.read(i));
|
|
||||||
}
|
|
||||||
clientpass = "";
|
|
||||||
for (int i = 32; i < 96; ++i)
|
|
||||||
{
|
|
||||||
if (EEPROM.read(i) == 0) break;
|
|
||||||
clientpass += char(EEPROM.read(i));
|
|
||||||
}
|
|
||||||
cmdns = "";
|
|
||||||
for (int i = 96; i < 128; ++i)
|
|
||||||
{
|
|
||||||
if (EEPROM.read(i) == 0) break;
|
|
||||||
cmdns += char(EEPROM.read(i));
|
|
||||||
}
|
|
||||||
apssid = "";
|
|
||||||
for (int i = 128; i < 160; ++i)
|
|
||||||
{
|
|
||||||
if (EEPROM.read(i) == 0) break;
|
|
||||||
apssid += char(EEPROM.read(i));
|
|
||||||
}
|
|
||||||
appass = "";
|
|
||||||
for (int i = 160; i < 224; ++i)
|
|
||||||
{
|
|
||||||
if (EEPROM.read(i) == 0) break;
|
|
||||||
appass += char(EEPROM.read(i));
|
|
||||||
}
|
|
||||||
aphide = EEPROM.read(228);
|
|
||||||
if (aphide > 1) aphide = 1;
|
|
||||||
apchannel = EEPROM.read(227);
|
|
||||||
if (apchannel > 13 || apchannel < 1) apchannel = 1;
|
|
||||||
led_amount = EEPROM.read(229);
|
|
||||||
buttonEnabled = EEPROM.read(232);
|
|
||||||
staticip[0] = EEPROM.read(234);
|
|
||||||
staticip[1] = EEPROM.read(235);
|
|
||||||
staticip[2] = EEPROM.read(236);
|
|
||||||
staticip[3] = EEPROM.read(237);
|
|
||||||
staticgateway[0] = EEPROM.read(238);
|
|
||||||
staticgateway[1] = EEPROM.read(239);
|
|
||||||
staticgateway[2] = EEPROM.read(240);
|
|
||||||
staticgateway[3] = EEPROM.read(241);
|
|
||||||
staticsubnet[0] = EEPROM.read(242);
|
|
||||||
staticsubnet[1] = EEPROM.read(243);
|
|
||||||
staticsubnet[2] = EEPROM.read(244);
|
|
||||||
staticsubnet[3] = EEPROM.read(245);
|
|
||||||
col[0] = EEPROM.read(246);
|
|
||||||
col[1] = EEPROM.read(247);
|
|
||||||
col[2] = EEPROM.read(248);
|
|
||||||
bri = EEPROM.read(249);
|
|
||||||
fadeTransition = EEPROM.read(251);
|
|
||||||
transitionDelay = ((EEPROM.read(253) << 0) & 0xFF) + ((EEPROM.read(254) << 8) & 0xFF00);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t bool2int(boolean value)
|
uint8_t bool2int(boolean value)
|
||||||
{
|
{
|
||||||
if (value) return 1;
|
if (value) return 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void XML_response()
|
|
||||||
{
|
|
||||||
String resp;
|
|
||||||
resp = resp + "<?xml version = \"1.0\" ?>";
|
|
||||||
resp = resp + "<vs>";
|
|
||||||
resp = resp + "<act>";
|
|
||||||
resp = resp + bri;
|
|
||||||
resp = resp + "</act>";
|
|
||||||
|
|
||||||
for (int i = 0; i < 3; i++)
|
|
||||||
{
|
|
||||||
resp = resp + "<cl>";
|
|
||||||
resp = resp + col[i];
|
|
||||||
resp = resp + "</cl>";
|
|
||||||
}
|
|
||||||
//enable toolbar here
|
|
||||||
resp = resp + "</vs>";
|
|
||||||
server.send(200, "text/xml", resp);
|
|
||||||
}
|
|
||||||
|
|
||||||
void XML_response_settings()
|
|
||||||
{
|
|
||||||
Serial.println("XML settings response");
|
|
||||||
String resp;
|
|
||||||
resp = resp + "<?xml version = \"1.0\" ?>";
|
|
||||||
resp = resp + "<vs>";
|
|
||||||
resp = resp + "<cssid>";
|
|
||||||
resp = resp + clientssid;
|
|
||||||
resp = resp + "</cssid>";
|
|
||||||
resp = resp + "<cpass>";
|
|
||||||
for (int i = 0; i < clientpass.length(); i++)
|
|
||||||
{
|
|
||||||
resp = resp + "*";
|
|
||||||
}
|
|
||||||
resp = resp + "</cpass>";
|
|
||||||
for (int i = 0; i < 4; i++)
|
|
||||||
{
|
|
||||||
resp = resp + "<csips>";
|
|
||||||
resp = resp + staticip[i];
|
|
||||||
resp = resp + "</csips>";
|
|
||||||
}
|
|
||||||
for (int i = 0; i < 4; i++)
|
|
||||||
{
|
|
||||||
resp = resp + "<csgws>";
|
|
||||||
resp = resp + staticgateway[i];
|
|
||||||
resp = resp + "</csgws>";
|
|
||||||
}
|
|
||||||
for (int i = 0; i < 4; i++)
|
|
||||||
{
|
|
||||||
resp = resp + "<cssns>";
|
|
||||||
resp = resp + staticsubnet[i];
|
|
||||||
resp = resp + "</cssns>";
|
|
||||||
}
|
|
||||||
resp = resp + "<cmdns>";
|
|
||||||
resp = resp + cmdns;
|
|
||||||
resp = resp + "</cmdns>";
|
|
||||||
resp = resp + "<apssid>";
|
|
||||||
resp = resp + apssid;
|
|
||||||
resp = resp + "</apssid>";
|
|
||||||
resp = resp + "<aphssid>";
|
|
||||||
resp = resp + aphide;
|
|
||||||
resp = resp + "</aphssid>";
|
|
||||||
resp = resp + "<appass>";
|
|
||||||
for (int i = 0; i < appass.length(); i++)
|
|
||||||
{
|
|
||||||
resp = resp + "*";
|
|
||||||
}
|
|
||||||
resp = resp + "</appass>";
|
|
||||||
resp = resp + "<apchan>";
|
|
||||||
resp = resp + apchannel;
|
|
||||||
resp = resp + "</apchan>";
|
|
||||||
resp = resp + "<leds>";
|
|
||||||
resp = resp + led_amount;
|
|
||||||
resp = resp + "</leds>";
|
|
||||||
resp = resp + "<btnon>";
|
|
||||||
resp = resp + bool2int(buttonEnabled);
|
|
||||||
resp = resp + "</btnon><tfade>";
|
|
||||||
resp = resp + bool2int(fadeTransition);
|
|
||||||
resp = resp + "</tfade><tdlay>";
|
|
||||||
resp = resp + transitionDelay;
|
|
||||||
resp = resp + "</tdlay>";
|
|
||||||
resp = resp + "<nrcve>";
|
|
||||||
resp = resp + bool2int(receiveNotifications);
|
|
||||||
resp = resp + "</nrcve><nrbri>";
|
|
||||||
resp = resp + bri_n;
|
|
||||||
resp = resp + "</nrbri><nsdir>";
|
|
||||||
resp = resp + bool2int(notifyDirect);
|
|
||||||
resp = resp + "</nsdir><nsbtn>";
|
|
||||||
resp = resp + bool2int(notifyButton);
|
|
||||||
resp = resp + "</nsbtn><nsfwd>";
|
|
||||||
resp = resp + bool2int(notifyForward);
|
|
||||||
resp = resp + "</nsfwd><nsips>";
|
|
||||||
for (int i = 0; i < notifier_ips_count; i++)
|
|
||||||
{
|
|
||||||
resp = resp + notifier_ips[i];
|
|
||||||
resp = resp + "\n";
|
|
||||||
}
|
|
||||||
resp = resp + "</nsips>";
|
|
||||||
resp = resp + "<noota>0</noota>"; //NI
|
|
||||||
resp = resp + "<norap>0</norap>"; //NI
|
|
||||||
resp = resp + "<sip>";
|
|
||||||
if (!WiFi.localIP()[0] == 0)
|
|
||||||
{
|
|
||||||
resp = resp + WiFi.localIP()[0];
|
|
||||||
resp = resp + ".";
|
|
||||||
resp = resp + WiFi.localIP()[1];
|
|
||||||
resp = resp + ".";
|
|
||||||
resp = resp + WiFi.localIP()[2];
|
|
||||||
resp = resp + ".";
|
|
||||||
resp = resp + WiFi.localIP()[3];
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
resp = resp + "Not connected";
|
|
||||||
}
|
|
||||||
resp = resp + "</sip><sip>";
|
|
||||||
if (!WiFi.softAPIP()[0] == 0)
|
|
||||||
{
|
|
||||||
resp = resp + WiFi.softAPIP()[0];
|
|
||||||
resp = resp + ".";
|
|
||||||
resp = resp + WiFi.softAPIP()[1];
|
|
||||||
resp = resp + ".";
|
|
||||||
resp = resp + WiFi.softAPIP()[2];
|
|
||||||
resp = resp + ".";
|
|
||||||
resp = resp + WiFi.softAPIP()[3];
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
resp = resp + "Not active";
|
|
||||||
}
|
|
||||||
resp = resp + "</sip><otastat>Not implemented</otastat>";
|
|
||||||
resp = resp + "<msg>WLED 0.3pd OK</msg>";
|
|
||||||
resp = resp + "</vs>";
|
|
||||||
Serial.println(resp);
|
|
||||||
server.send(200, "text/xml", resp);
|
|
||||||
}
|
|
||||||
|
|
||||||
void handleSettingsSet()
|
|
||||||
{
|
|
||||||
if (server.hasArg("CSSID")) clientssid = server.arg("CSSID");
|
|
||||||
if (server.hasArg("CPASS"))
|
|
||||||
{
|
|
||||||
if (!server.arg("CPASS").indexOf('*') == 0)
|
|
||||||
{
|
|
||||||
Serial.println("Setting pass");
|
|
||||||
clientpass = server.arg("CPASS");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (server.hasArg("CMDNS")) cmdns = server.arg("CMDNS");
|
|
||||||
if (server.hasArg("APSSID")) apssid = server.arg("APSSID");
|
|
||||||
if (server.hasArg("APHSSID"))
|
|
||||||
{
|
|
||||||
aphide = 1;
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
aphide = 0;
|
|
||||||
}
|
|
||||||
if (server.hasArg("APPASS"))
|
|
||||||
{
|
|
||||||
if (!server.arg("APPASS").indexOf('*') == 0) appass = server.arg("APPASS");
|
|
||||||
}
|
|
||||||
if (server.hasArg("APCHAN"))
|
|
||||||
{
|
|
||||||
int chan = server.arg("APCHAN").toInt();
|
|
||||||
if (chan > 0 && chan < 14) apchannel = chan;
|
|
||||||
}
|
|
||||||
if (server.hasArg("RESET")) //might be dangerous in case arg is always sent
|
|
||||||
{
|
|
||||||
clearEEPROM();
|
|
||||||
server.send(200, "text/plain", "Settings erased. Please wait for light to turn back on, then go to main page...");
|
|
||||||
reset();
|
|
||||||
}
|
|
||||||
if (server.hasArg("CSIP0"))
|
|
||||||
{
|
|
||||||
int i = server.arg("CSIP0").toInt();
|
|
||||||
if (i >= 0 && i <= 255) staticip[0] = i;
|
|
||||||
}
|
|
||||||
if (server.hasArg("CSIP1"))
|
|
||||||
{
|
|
||||||
int i = server.arg("CSIP1").toInt();
|
|
||||||
if (i >= 0 && i <= 255) staticip[1] = i;
|
|
||||||
}
|
|
||||||
if (server.hasArg("CSIP2"))
|
|
||||||
{
|
|
||||||
int i = server.arg("CSIP2").toInt();
|
|
||||||
if (i >= 0 && i <= 255) staticip[2] = i;
|
|
||||||
}
|
|
||||||
if (server.hasArg("CSIP3"))
|
|
||||||
{
|
|
||||||
int i = server.arg("CSIP3").toInt();
|
|
||||||
if (i >= 0 && i <= 255) staticip[3] = i;
|
|
||||||
}
|
|
||||||
if (server.hasArg("CSGW0"))
|
|
||||||
{
|
|
||||||
int i = server.arg("CSGW0").toInt();
|
|
||||||
if (i >= 0 && i <= 255) staticgateway[0] = i;
|
|
||||||
}
|
|
||||||
if (server.hasArg("CSGW1"))
|
|
||||||
{
|
|
||||||
int i = server.arg("CSGW1").toInt();
|
|
||||||
if (i >= 0 && i <= 255) staticgateway[1] = i;
|
|
||||||
}
|
|
||||||
if (server.hasArg("CSGW2"))
|
|
||||||
{
|
|
||||||
int i = server.arg("CSGW2").toInt();
|
|
||||||
if (i >= 0 && i <= 255) staticgateway[2] = i;
|
|
||||||
}
|
|
||||||
if (server.hasArg("CSGW3"))
|
|
||||||
{
|
|
||||||
int i = server.arg("CSGW3").toInt();
|
|
||||||
if (i >= 0 && i <= 255) staticgateway[3] = i;
|
|
||||||
}
|
|
||||||
if (server.hasArg("CSSN0"))
|
|
||||||
{
|
|
||||||
int i = server.arg("CSSN0").toInt();
|
|
||||||
if (i >= 0 && i <= 255) staticsubnet[0] = i;
|
|
||||||
}
|
|
||||||
if (server.hasArg("CSSN1"))
|
|
||||||
{
|
|
||||||
int i = server.arg("CSSN1").toInt();
|
|
||||||
if (i >= 0 && i <= 255) staticsubnet[1] = i;
|
|
||||||
}
|
|
||||||
if (server.hasArg("CSSN2"))
|
|
||||||
{
|
|
||||||
int i = server.arg("CSSN2").toInt();
|
|
||||||
if (i >= 0 && i <= 255) staticsubnet[2] = i;
|
|
||||||
}
|
|
||||||
if (server.hasArg("CSSN3"))
|
|
||||||
{
|
|
||||||
int i = server.arg("CSSN3").toInt();
|
|
||||||
if (i >= 0 && i <= 255) staticsubnet[3] = i;
|
|
||||||
}
|
|
||||||
if (server.hasArg("LEDS"))
|
|
||||||
{
|
|
||||||
int i = server.arg("LEDS").toInt();
|
|
||||||
if (i > 0) led_amount = i;
|
|
||||||
}
|
|
||||||
buttonEnabled = server.hasArg("BTNON");
|
|
||||||
fadeTransition = server.hasArg("TFADE");
|
|
||||||
if (server.hasArg("TDLAY"))
|
|
||||||
{
|
|
||||||
int i = server.arg("TDLAY").toInt();
|
|
||||||
if (i > 0) transitionDelay = i;
|
|
||||||
}
|
|
||||||
receiveNotifications = server.hasArg("NRCVE");
|
|
||||||
if (server.hasArg("NRBRI"))
|
|
||||||
{
|
|
||||||
int i = server.arg("NRBRI").toInt();
|
|
||||||
if (i > 0) bri_n = i;
|
|
||||||
}
|
|
||||||
notifyDirect = server.hasArg("NSDIR");
|
|
||||||
notifyButton = server.hasArg("NSBTN");
|
|
||||||
notifyForward = server.hasArg("NSFWD");
|
|
||||||
if (server.hasArg("NSIPS"))
|
|
||||||
{
|
|
||||||
notifier_ips_raw = server.arg("NSIPS");
|
|
||||||
}
|
|
||||||
saveSettingsToEEPROM();
|
|
||||||
}
|
|
||||||
|
|
||||||
boolean handleSet(String req)
|
|
||||||
{
|
|
||||||
if (!(req.indexOf("ajax_in") >= 0)) {
|
|
||||||
if (req.indexOf("get-settings") >= 0)
|
|
||||||
{
|
|
||||||
XML_response_settings();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
int pos = 0;
|
|
||||||
boolean isNotification = false;
|
|
||||||
if (req.indexOf("N=") > 0) isNotification = true;
|
|
||||||
pos = req.indexOf("A=");
|
|
||||||
if (pos > 0) {
|
|
||||||
bri = req.substring(pos + 2).toInt();
|
|
||||||
}
|
|
||||||
pos = req.indexOf("R=");
|
|
||||||
if (pos > 0) {
|
|
||||||
col[0] = req.substring(pos + 2).toInt();
|
|
||||||
}
|
|
||||||
pos = req.indexOf("G=");
|
|
||||||
if (pos > 0) {
|
|
||||||
col[1] = req.substring(pos + 2).toInt();
|
|
||||||
}
|
|
||||||
pos = req.indexOf("B=");
|
|
||||||
if (pos > 0) {
|
|
||||||
col[2] = req.substring(pos + 2).toInt();
|
|
||||||
}
|
|
||||||
if (req.indexOf("NL=") > 0)
|
|
||||||
{
|
|
||||||
if (req.indexOf("NL=0") > 0)
|
|
||||||
{
|
|
||||||
nightlightActive = false;
|
|
||||||
} else {
|
|
||||||
nightlightActive = true;
|
|
||||||
nightlightStartTime = millis();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (isNotification)
|
|
||||||
{
|
|
||||||
if (receiveNotifications)
|
|
||||||
{
|
|
||||||
colorUpdated(3);
|
|
||||||
server.send(200, "text/plain", "");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
server.send(202, "text/plain", "");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
XML_response();
|
|
||||||
colorUpdated(1);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
String formatBytes(size_t bytes){
|
|
||||||
if (bytes < 1024){
|
|
||||||
return String(bytes)+"B";
|
|
||||||
} else if(bytes < (1024 * 1024)){
|
|
||||||
return String(bytes/1024.0)+"KB";
|
|
||||||
} else if(bytes < (1024 * 1024 * 1024)){
|
|
||||||
return String(bytes/1024.0/1024.0)+"MB";
|
|
||||||
} else {
|
|
||||||
return String(bytes/1024.0/1024.0/1024.0)+"GB";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
String getContentType(String filename){
|
|
||||||
if(server.hasArg("download")) return "application/octet-stream";
|
|
||||||
else if(filename.endsWith(".htm")) return "text/html";
|
|
||||||
else if(filename.endsWith(".html")) return "text/html";
|
|
||||||
else if(filename.endsWith(".css")) return "text/css";
|
|
||||||
else if(filename.endsWith(".js")) return "application/javascript";
|
|
||||||
else if(filename.endsWith(".png")) return "image/png";
|
|
||||||
else if(filename.endsWith(".gif")) return "image/gif";
|
|
||||||
else if(filename.endsWith(".jpg")) return "image/jpeg";
|
|
||||||
else if(filename.endsWith(".ico")) return "image/x-icon";
|
|
||||||
else if(filename.endsWith(".xml")) return "text/xml";
|
|
||||||
else if(filename.endsWith(".pdf")) return "application/x-pdf";
|
|
||||||
else if(filename.endsWith(".zip")) return "application/x-zip";
|
|
||||||
else if(filename.endsWith(".gz")) return "application/x-gzip";
|
|
||||||
return "text/plain";
|
|
||||||
}
|
|
||||||
|
|
||||||
bool handleFileRead(String path){
|
|
||||||
Serial.println("handleFileRead: " + path);
|
|
||||||
if(path.endsWith("/")) path += "index.htm";
|
|
||||||
String contentType = getContentType(path);
|
|
||||||
String pathWithGz = path + ".gz";
|
|
||||||
if(SPIFFS.exists(pathWithGz) || SPIFFS.exists(path)){
|
|
||||||
if(SPIFFS.exists(pathWithGz))
|
|
||||||
path += ".gz";
|
|
||||||
File file = SPIFFS.open(path, "r");
|
|
||||||
size_t sent = server.streamFile(file, contentType);
|
|
||||||
file.close();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void handleFileUpload(){
|
|
||||||
if(server.uri() != "/edit") return;
|
|
||||||
HTTPUpload& upload = server.upload();
|
|
||||||
if(upload.status == UPLOAD_FILE_START){
|
|
||||||
String filename = upload.filename;
|
|
||||||
if(!filename.startsWith("/")) filename = "/"+filename;
|
|
||||||
Serial.print("handleFileUpload Name: "); Serial.println(filename);
|
|
||||||
fsUploadFile = SPIFFS.open(filename, "w");
|
|
||||||
filename = String();
|
|
||||||
} else if(upload.status == UPLOAD_FILE_WRITE){
|
|
||||||
//Serial.print("handleFileUpload Data: "); Serial.println(upload.currentSize);
|
|
||||||
if(fsUploadFile)
|
|
||||||
fsUploadFile.write(upload.buf, upload.currentSize);
|
|
||||||
} else if(upload.status == UPLOAD_FILE_END){
|
|
||||||
if(fsUploadFile)
|
|
||||||
fsUploadFile.close();
|
|
||||||
Serial.print("handleFileUpload Size: "); Serial.println(upload.totalSize);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void handleFileDelete(){
|
|
||||||
if(server.args() == 0) return server.send(500, "text/plain", "BAD ARGS");
|
|
||||||
String path = server.arg(0);
|
|
||||||
Serial.println("handleFileDelete: " + path);
|
|
||||||
if(path == "/")
|
|
||||||
return server.send(500, "text/plain", "BAD PATH");
|
|
||||||
if(!SPIFFS.exists(path))
|
|
||||||
return server.send(404, "text/plain", "FileNotFound");
|
|
||||||
SPIFFS.remove(path);
|
|
||||||
server.send(200, "text/plain", "");
|
|
||||||
path = String();
|
|
||||||
}
|
|
||||||
|
|
||||||
void handleFileCreate(){
|
|
||||||
if(server.args() == 0)
|
|
||||||
return server.send(500, "text/plain", "BAD ARGS");
|
|
||||||
String path = server.arg(0);
|
|
||||||
Serial.println("handleFileCreate: " + path);
|
|
||||||
if(path == "/")
|
|
||||||
return server.send(500, "text/plain", "BAD PATH");
|
|
||||||
if(SPIFFS.exists(path))
|
|
||||||
return server.send(500, "text/plain", "FILE EXISTS");
|
|
||||||
File file = SPIFFS.open(path, "w");
|
|
||||||
if(file)
|
|
||||||
file.close();
|
|
||||||
else
|
|
||||||
return server.send(500, "text/plain", "CREATE FAILED");
|
|
||||||
server.send(200, "text/plain", "");
|
|
||||||
path = String();
|
|
||||||
}
|
|
||||||
|
|
||||||
void notify(int callMode)
|
|
||||||
{
|
|
||||||
switch (callMode)
|
|
||||||
{
|
|
||||||
case 1: if (!notifyDirect) return; break;
|
|
||||||
case 2: if (!notifyButton) return; break;
|
|
||||||
case 3: if (!notifyForward) return; break;
|
|
||||||
default: return;
|
|
||||||
}
|
|
||||||
String snd = "/ajax_in&N=1&A=";
|
|
||||||
snd = snd + bri;
|
|
||||||
snd = snd + "&R=";
|
|
||||||
snd = snd + col[0];
|
|
||||||
snd = snd + "&G=";
|
|
||||||
snd = snd + col[1];
|
|
||||||
snd = snd + "&B=";
|
|
||||||
snd = snd + col[2];
|
|
||||||
|
|
||||||
HTTPClient hclient;
|
|
||||||
|
|
||||||
for (int i = 0; i < notifier_ips_count; i++)
|
|
||||||
{
|
|
||||||
String url = "http://";
|
|
||||||
url = url + notifier_ips[i];
|
|
||||||
url = url + snd;
|
|
||||||
|
|
||||||
hclient.begin(url);
|
|
||||||
hclient.GET();
|
|
||||||
hclient.end();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void setAllLeds() {
|
|
||||||
double d = bri_t;
|
|
||||||
double val = d /256;
|
|
||||||
int r = col_t[0]*val;
|
|
||||||
int g = col_t[1]*val;
|
|
||||||
int b = col_t[2]*val;
|
|
||||||
for (int i=0; i < led_amount; i++) {
|
|
||||||
strip.SetPixelColor(i, RgbColor(r, g, b));
|
|
||||||
}
|
|
||||||
strip.Show();
|
|
||||||
}
|
|
||||||
|
|
||||||
void setLedsStandard()
|
|
||||||
{
|
|
||||||
col_old[0] = col[0];
|
|
||||||
col_old[1] = col[1];
|
|
||||||
col_old[2] = col[2];
|
|
||||||
bri_old = bri;
|
|
||||||
col_t[0] = col[0];
|
|
||||||
col_t[1] = col[1];
|
|
||||||
col_t[2] = col[2];
|
|
||||||
bri_t = bri;
|
|
||||||
setAllLeds();
|
|
||||||
}
|
|
||||||
|
|
||||||
void colorUpdated(int callMode)
|
|
||||||
{
|
|
||||||
//call for notifier -> 0: init 1: direct change 2: button 3: notification
|
|
||||||
if (col[0] == col_old[0] && col[1] == col_old[1] && col[2] == col_old[2] && bri == bri_old)
|
|
||||||
{
|
|
||||||
return; //no change
|
|
||||||
}
|
|
||||||
if (bri > 0) bri_last = bri;
|
|
||||||
notify(callMode);
|
|
||||||
if (fadeTransition || seqTransition)
|
|
||||||
{
|
|
||||||
if (transitionActive)
|
|
||||||
{
|
|
||||||
col_old[0] = col_t[0];
|
|
||||||
col_old[1] = col_t[1];
|
|
||||||
col_old[2] = col_t[2];
|
|
||||||
bri_old = bri_t;
|
|
||||||
}
|
|
||||||
transitionActive = true;
|
|
||||||
transitionStartTime = millis();
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
setLedsStandard();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void handleTransitions()
|
|
||||||
{
|
|
||||||
if (transitionActive && transitionDelay > 0)
|
|
||||||
{
|
|
||||||
float tper = (millis() - transitionStartTime)/(float)transitionDelay;
|
|
||||||
if (tper >= 1.0)
|
|
||||||
{
|
|
||||||
transitionActive = false;
|
|
||||||
setLedsStandard();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (tper - tper_last < transitionResolution)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
tper_last = tper;
|
|
||||||
if (fadeTransition)
|
|
||||||
{
|
|
||||||
col_t[0] = col_old[0]+((col[0] - col_old[0])*tper);
|
|
||||||
col_t[1] = col_old[1]+((col[1] - col_old[1])*tper);
|
|
||||||
col_t[2] = col_old[2]+((col[2] - col_old[2])*tper);
|
|
||||||
bri_t = bri_old+((bri - bri_old)*tper);
|
|
||||||
}
|
|
||||||
if (seqTransition)
|
|
||||||
{
|
|
||||||
|
|
||||||
} else setAllLeds();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void handleNightlight()
|
void handleNightlight()
|
||||||
{
|
{
|
||||||
if (nightlightActive)
|
if (nightlightActive)
|
||||||
@ -749,145 +102,8 @@ void handleNightlight()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void handleAnimations(){};
|
|
||||||
|
|
||||||
void handleButton()
|
|
||||||
{
|
|
||||||
if (buttonEnabled)
|
|
||||||
{
|
|
||||||
if (digitalRead(buttonPin) == LOW && !buttonPressedBefore)
|
|
||||||
{
|
|
||||||
buttonPressedBefore = true;
|
|
||||||
if (bri == 0)
|
|
||||||
{
|
|
||||||
bri = bri_last;
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
bri_last = bri;
|
|
||||||
bri = 0;
|
|
||||||
}
|
|
||||||
colorUpdated(2);
|
|
||||||
}
|
|
||||||
else if (digitalRead(buttonPin) == HIGH && buttonPressedBefore)
|
|
||||||
{
|
|
||||||
delay(15);
|
|
||||||
if (digitalRead(buttonPin) == HIGH)
|
|
||||||
{
|
|
||||||
buttonPressedBefore = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
Serial.begin(115200);
|
wledInit();
|
||||||
Serial.println();
|
|
||||||
|
|
||||||
for(uint8_t t = 4; t > 0; t--) {
|
|
||||||
Serial.printf("[SETUP] BOOT WAIT %d...\n", t);
|
|
||||||
Serial.flush();
|
|
||||||
delay(1000);
|
|
||||||
}
|
|
||||||
|
|
||||||
SPIFFS.begin();
|
|
||||||
{
|
|
||||||
Dir dir = SPIFFS.openDir("/");
|
|
||||||
while (dir.next()) {
|
|
||||||
String fileName = dir.fileName();
|
|
||||||
size_t fileSize = dir.fileSize();
|
|
||||||
Serial.printf("FS File: %s, size: %s\n", fileName.c_str(), formatBytes(fileSize).c_str());
|
|
||||||
}
|
|
||||||
Serial.printf("\n");
|
|
||||||
}
|
|
||||||
Serial.println("Init EEPROM");
|
|
||||||
EEPROM.begin(256);
|
|
||||||
loadSettingsFromEEPROM();
|
|
||||||
|
|
||||||
Serial.print("CC: SSID: ");
|
|
||||||
Serial.print(clientssid);
|
|
||||||
|
|
||||||
WiFi.disconnect(); //close old connections
|
|
||||||
|
|
||||||
if (staticip[0] != 0)
|
|
||||||
{
|
|
||||||
WiFi.config(staticip, staticgateway, staticsubnet);
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
WiFi.config(0U, 0U, 0U);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (apssid.length()>0)
|
|
||||||
{
|
|
||||||
Serial.print("USING AP");
|
|
||||||
Serial.println(apssid.length());
|
|
||||||
initAP();
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
Serial.println("NO AP");
|
|
||||||
WiFi.softAPdisconnect(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
initCon();
|
|
||||||
|
|
||||||
Serial.println("");
|
|
||||||
Serial.print("Connected! IP address: ");
|
|
||||||
Serial.println(WiFi.localIP());
|
|
||||||
|
|
||||||
// Set up mDNS responder:
|
|
||||||
if (cmdns != NULL && !only_ap && !MDNS.begin(cmdns.c_str())) {
|
|
||||||
Serial.println("Error setting up MDNS responder!");
|
|
||||||
down();
|
|
||||||
}
|
|
||||||
Serial.println("mDNS responder started");
|
|
||||||
|
|
||||||
//SERVER INIT
|
|
||||||
//settings page
|
|
||||||
server.on("/settings", HTTP_GET, [](){
|
|
||||||
if(!handleFileRead("/settings.htm")) server.send(404, "text/plain", "FileNotFound");
|
|
||||||
});
|
|
||||||
server.on("/button.png", HTTP_GET, [](){
|
|
||||||
if(!handleFileRead("/button.png")) server.send(404, "text/plain", "FileNotFound");
|
|
||||||
});
|
|
||||||
server.on("/favicon.ico", HTTP_GET, [](){
|
|
||||||
if(!handleFileRead("/favicon.ico")) server.send(404, "text/plain", "FileNotFound");
|
|
||||||
});
|
|
||||||
server.on("/", HTTP_GET, [](){
|
|
||||||
if(!handleFileRead("/index.htm")) server.send(404, "text/plain", "FileNotFound");
|
|
||||||
});
|
|
||||||
server.on("/reset", HTTP_GET, reset);
|
|
||||||
server.on("/set-settings", HTTP_POST, [](){
|
|
||||||
handleSettingsSet();
|
|
||||||
server.send(200, "text/plain", "Settings saved. Please wait for light to turn back on, then go to main page...");
|
|
||||||
reset();
|
|
||||||
});
|
|
||||||
if (!ota_lock){
|
|
||||||
server.on("/edit", HTTP_GET, [](){
|
|
||||||
if(!handleFileRead("/edit.htm")) server.send(404, "text/plain", "FileNotFound");
|
|
||||||
});
|
|
||||||
server.on("/edit", HTTP_PUT, handleFileCreate);
|
|
||||||
server.on("/edit", HTTP_DELETE, handleFileDelete);
|
|
||||||
server.on("/edit", HTTP_POST, [](){ server.send(200, "text/plain", ""); }, handleFileUpload);
|
|
||||||
server.on("/down", HTTP_GET, down);
|
|
||||||
server.on("/cleareeprom", HTTP_GET, clearEEPROM);
|
|
||||||
//init ota page
|
|
||||||
httpUpdater.setup(&server);
|
|
||||||
}
|
|
||||||
//called when the url is not defined here, ajax-in; get-settings
|
|
||||||
server.onNotFound([](){
|
|
||||||
if(!handleSet(server.uri())){
|
|
||||||
server.send(404, "text/plain", "FileNotFound");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
server.begin();
|
|
||||||
Serial.println("HTTP server started");
|
|
||||||
|
|
||||||
// Add service to MDNS
|
|
||||||
MDNS.addService("http", "tcp", 80);
|
|
||||||
// Initialize NeoPixel Strip
|
|
||||||
strip.Begin();
|
|
||||||
colorUpdated(0);
|
|
||||||
pinMode(buttonPin, INPUT_PULLUP);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop() {
|
void loop() {
|
||||||
@ -898,31 +114,4 @@ void loop() {
|
|||||||
handleButton();
|
handleButton();
|
||||||
}
|
}
|
||||||
|
|
||||||
void initAP(){
|
|
||||||
WiFi.softAP(apssid.c_str(), appass.c_str(), apchannel, aphide);
|
|
||||||
}
|
|
||||||
|
|
||||||
void initCon()
|
|
||||||
{
|
|
||||||
int fail_count = 0;
|
|
||||||
if (clientssid.length() <1) fail_count = 33;
|
|
||||||
WiFi.begin(clientssid.c_str(), clientpass.c_str());
|
|
||||||
while(WiFi.status() != WL_CONNECTED) {
|
|
||||||
delay(500);
|
|
||||||
Serial.println("C_NC");
|
|
||||||
fail_count++;
|
|
||||||
if (fail_count > 32)
|
|
||||||
{
|
|
||||||
WiFi.disconnect();
|
|
||||||
Serial.println("Can't connect to network. Opening AP...");
|
|
||||||
String save = apssid;
|
|
||||||
only_ap = true;
|
|
||||||
if (apssid.length() <1) apssid = "WLED-AP";
|
|
||||||
initAP();
|
|
||||||
apssid = save;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
124
wled00/wled01_eeprom.ino
Normal file
124
wled00/wled01_eeprom.ino
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
void clearEEPROM()
|
||||||
|
{
|
||||||
|
for (int i = 0; i < 256; i++)
|
||||||
|
{
|
||||||
|
EEPROM.write(i, 0);
|
||||||
|
}
|
||||||
|
EEPROM.commit();
|
||||||
|
}
|
||||||
|
|
||||||
|
void saveSettingsToEEPROM()
|
||||||
|
{
|
||||||
|
if (EEPROM.read(233) != 233) //set no first boot flag
|
||||||
|
{
|
||||||
|
clearEEPROM();
|
||||||
|
EEPROM.write(233, 233);
|
||||||
|
}
|
||||||
|
for (int i = 0; i < 32; ++i)
|
||||||
|
{
|
||||||
|
EEPROM.write(i, clientssid.charAt(i));
|
||||||
|
}
|
||||||
|
for (int i = 32; i < 96; ++i)
|
||||||
|
{
|
||||||
|
EEPROM.write(i, clientpass.charAt(i-32));
|
||||||
|
}
|
||||||
|
for (int i = 96; i < 128; ++i)
|
||||||
|
{
|
||||||
|
EEPROM.write(i, cmdns.charAt(i-96));
|
||||||
|
}
|
||||||
|
for (int i = 128; i < 160; ++i)
|
||||||
|
{
|
||||||
|
EEPROM.write(i, apssid.charAt(i-128));
|
||||||
|
}
|
||||||
|
for (int i = 160; i < 224; ++i)
|
||||||
|
{
|
||||||
|
EEPROM.write(i, appass.charAt(i-160));
|
||||||
|
}
|
||||||
|
EEPROM.write(228, aphide);
|
||||||
|
EEPROM.write(227, apchannel);
|
||||||
|
EEPROM.write(229, led_amount);
|
||||||
|
EEPROM.write(232, buttonEnabled);
|
||||||
|
EEPROM.write(234, staticip[0]);
|
||||||
|
EEPROM.write(235, staticip[1]);
|
||||||
|
EEPROM.write(236, staticip[2]);
|
||||||
|
EEPROM.write(237, staticip[3]);
|
||||||
|
EEPROM.write(238, staticgateway[0]);
|
||||||
|
EEPROM.write(239, staticgateway[1]);
|
||||||
|
EEPROM.write(240, staticgateway[2]);
|
||||||
|
EEPROM.write(241, staticgateway[3]);
|
||||||
|
EEPROM.write(242, staticsubnet[0]);
|
||||||
|
EEPROM.write(243, staticsubnet[1]);
|
||||||
|
EEPROM.write(244, staticsubnet[2]);
|
||||||
|
EEPROM.write(245, staticsubnet[3]);
|
||||||
|
EEPROM.write(246, col[0]);
|
||||||
|
EEPROM.write(247, col[1]);
|
||||||
|
EEPROM.write(248, col[2]);
|
||||||
|
EEPROM.write(249, bri);
|
||||||
|
EEPROM.write(251, fadeTransition);
|
||||||
|
EEPROM.write(253, (transitionDelay >> 0) & 0xFF);
|
||||||
|
EEPROM.write(254, (transitionDelay >> 8) & 0xFF);
|
||||||
|
EEPROM.commit();
|
||||||
|
}
|
||||||
|
|
||||||
|
void loadSettingsFromEEPROM()
|
||||||
|
{
|
||||||
|
if (EEPROM.read(233) != 233) //first boot/reset to default
|
||||||
|
{
|
||||||
|
saveSettingsToEEPROM();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
clientssid = "";
|
||||||
|
for (int i = 0; i < 32; ++i)
|
||||||
|
{
|
||||||
|
if (EEPROM.read(i) == 0) break;
|
||||||
|
clientssid += char(EEPROM.read(i));
|
||||||
|
}
|
||||||
|
clientpass = "";
|
||||||
|
for (int i = 32; i < 96; ++i)
|
||||||
|
{
|
||||||
|
if (EEPROM.read(i) == 0) break;
|
||||||
|
clientpass += char(EEPROM.read(i));
|
||||||
|
}
|
||||||
|
cmdns = "";
|
||||||
|
for (int i = 96; i < 128; ++i)
|
||||||
|
{
|
||||||
|
if (EEPROM.read(i) == 0) break;
|
||||||
|
cmdns += char(EEPROM.read(i));
|
||||||
|
}
|
||||||
|
apssid = "";
|
||||||
|
for (int i = 128; i < 160; ++i)
|
||||||
|
{
|
||||||
|
if (EEPROM.read(i) == 0) break;
|
||||||
|
apssid += char(EEPROM.read(i));
|
||||||
|
}
|
||||||
|
appass = "";
|
||||||
|
for (int i = 160; i < 224; ++i)
|
||||||
|
{
|
||||||
|
if (EEPROM.read(i) == 0) break;
|
||||||
|
appass += char(EEPROM.read(i));
|
||||||
|
}
|
||||||
|
aphide = EEPROM.read(228);
|
||||||
|
if (aphide > 1) aphide = 1;
|
||||||
|
apchannel = EEPROM.read(227);
|
||||||
|
if (apchannel > 13 || apchannel < 1) apchannel = 1;
|
||||||
|
led_amount = EEPROM.read(229);
|
||||||
|
buttonEnabled = EEPROM.read(232);
|
||||||
|
staticip[0] = EEPROM.read(234);
|
||||||
|
staticip[1] = EEPROM.read(235);
|
||||||
|
staticip[2] = EEPROM.read(236);
|
||||||
|
staticip[3] = EEPROM.read(237);
|
||||||
|
staticgateway[0] = EEPROM.read(238);
|
||||||
|
staticgateway[1] = EEPROM.read(239);
|
||||||
|
staticgateway[2] = EEPROM.read(240);
|
||||||
|
staticgateway[3] = EEPROM.read(241);
|
||||||
|
staticsubnet[0] = EEPROM.read(242);
|
||||||
|
staticsubnet[1] = EEPROM.read(243);
|
||||||
|
staticsubnet[2] = EEPROM.read(244);
|
||||||
|
staticsubnet[3] = EEPROM.read(245);
|
||||||
|
col[0] = EEPROM.read(246);
|
||||||
|
col[1] = EEPROM.read(247);
|
||||||
|
col[2] = EEPROM.read(248);
|
||||||
|
bri = EEPROM.read(249);
|
||||||
|
fadeTransition = EEPROM.read(251);
|
||||||
|
transitionDelay = ((EEPROM.read(253) << 0) & 0xFF) + ((EEPROM.read(254) << 8) & 0xFF00);
|
||||||
|
}
|
134
wled00/wled02_xml.ino
Normal file
134
wled00/wled02_xml.ino
Normal file
@ -0,0 +1,134 @@
|
|||||||
|
void XML_response()
|
||||||
|
{
|
||||||
|
String resp;
|
||||||
|
resp = resp + "<?xml version = \"1.0\" ?>";
|
||||||
|
resp = resp + "<vs>";
|
||||||
|
resp = resp + "<act>";
|
||||||
|
resp = resp + bri;
|
||||||
|
resp = resp + "</act>";
|
||||||
|
|
||||||
|
for (int i = 0; i < 3; i++)
|
||||||
|
{
|
||||||
|
resp = resp + "<cl>";
|
||||||
|
resp = resp + col[i];
|
||||||
|
resp = resp + "</cl>";
|
||||||
|
}
|
||||||
|
//enable toolbar here
|
||||||
|
resp = resp + "</vs>";
|
||||||
|
server.send(200, "text/xml", resp);
|
||||||
|
}
|
||||||
|
|
||||||
|
void XML_response_settings()
|
||||||
|
{
|
||||||
|
Serial.println("XML settings response");
|
||||||
|
String resp;
|
||||||
|
resp = resp + "<?xml version = \"1.0\" ?>";
|
||||||
|
resp = resp + "<vs>";
|
||||||
|
resp = resp + "<cssid>";
|
||||||
|
resp = resp + clientssid;
|
||||||
|
resp = resp + "</cssid>";
|
||||||
|
resp = resp + "<cpass>";
|
||||||
|
for (int i = 0; i < clientpass.length(); i++)
|
||||||
|
{
|
||||||
|
resp = resp + "*";
|
||||||
|
}
|
||||||
|
resp = resp + "</cpass>";
|
||||||
|
for (int i = 0; i < 4; i++)
|
||||||
|
{
|
||||||
|
resp = resp + "<csips>";
|
||||||
|
resp = resp + staticip[i];
|
||||||
|
resp = resp + "</csips>";
|
||||||
|
}
|
||||||
|
for (int i = 0; i < 4; i++)
|
||||||
|
{
|
||||||
|
resp = resp + "<csgws>";
|
||||||
|
resp = resp + staticgateway[i];
|
||||||
|
resp = resp + "</csgws>";
|
||||||
|
}
|
||||||
|
for (int i = 0; i < 4; i++)
|
||||||
|
{
|
||||||
|
resp = resp + "<cssns>";
|
||||||
|
resp = resp + staticsubnet[i];
|
||||||
|
resp = resp + "</cssns>";
|
||||||
|
}
|
||||||
|
resp = resp + "<cmdns>";
|
||||||
|
resp = resp + cmdns;
|
||||||
|
resp = resp + "</cmdns>";
|
||||||
|
resp = resp + "<apssid>";
|
||||||
|
resp = resp + apssid;
|
||||||
|
resp = resp + "</apssid>";
|
||||||
|
resp = resp + "<aphssid>";
|
||||||
|
resp = resp + aphide;
|
||||||
|
resp = resp + "</aphssid>";
|
||||||
|
resp = resp + "<appass>";
|
||||||
|
for (int i = 0; i < appass.length(); i++)
|
||||||
|
{
|
||||||
|
resp = resp + "*";
|
||||||
|
}
|
||||||
|
resp = resp + "</appass>";
|
||||||
|
resp = resp + "<apchan>";
|
||||||
|
resp = resp + apchannel;
|
||||||
|
resp = resp + "</apchan>";
|
||||||
|
resp = resp + "<leds>";
|
||||||
|
resp = resp + led_amount;
|
||||||
|
resp = resp + "</leds>";
|
||||||
|
resp = resp + "<btnon>";
|
||||||
|
resp = resp + bool2int(buttonEnabled);
|
||||||
|
resp = resp + "</btnon><tfade>";
|
||||||
|
resp = resp + bool2int(fadeTransition);
|
||||||
|
resp = resp + "</tfade><tdlay>";
|
||||||
|
resp = resp + transitionDelay;
|
||||||
|
resp = resp + "</tdlay>";
|
||||||
|
resp = resp + "<nrcve>";
|
||||||
|
resp = resp + bool2int(receiveNotifications);
|
||||||
|
resp = resp + "</nrcve><nrbri>";
|
||||||
|
resp = resp + bri_n;
|
||||||
|
resp = resp + "</nrbri><nsdir>";
|
||||||
|
resp = resp + bool2int(notifyDirect);
|
||||||
|
resp = resp + "</nsdir><nsbtn>";
|
||||||
|
resp = resp + bool2int(notifyButton);
|
||||||
|
resp = resp + "</nsbtn><nsfwd>";
|
||||||
|
resp = resp + bool2int(notifyForward);
|
||||||
|
resp = resp + "</nsfwd><nsips>";
|
||||||
|
for (int i = 0; i < notifier_ips_count; i++)
|
||||||
|
{
|
||||||
|
resp = resp + notifier_ips[i];
|
||||||
|
resp = resp + "\n";
|
||||||
|
}
|
||||||
|
resp = resp + "</nsips>";
|
||||||
|
resp = resp + "<noota>0</noota>"; //NI
|
||||||
|
resp = resp + "<norap>0</norap>"; //NI
|
||||||
|
resp = resp + "<sip>";
|
||||||
|
if (!WiFi.localIP()[0] == 0)
|
||||||
|
{
|
||||||
|
resp = resp + WiFi.localIP()[0];
|
||||||
|
resp = resp + ".";
|
||||||
|
resp = resp + WiFi.localIP()[1];
|
||||||
|
resp = resp + ".";
|
||||||
|
resp = resp + WiFi.localIP()[2];
|
||||||
|
resp = resp + ".";
|
||||||
|
resp = resp + WiFi.localIP()[3];
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
resp = resp + "Not connected";
|
||||||
|
}
|
||||||
|
resp = resp + "</sip><sip>";
|
||||||
|
if (!WiFi.softAPIP()[0] == 0)
|
||||||
|
{
|
||||||
|
resp = resp + WiFi.softAPIP()[0];
|
||||||
|
resp = resp + ".";
|
||||||
|
resp = resp + WiFi.softAPIP()[1];
|
||||||
|
resp = resp + ".";
|
||||||
|
resp = resp + WiFi.softAPIP()[2];
|
||||||
|
resp = resp + ".";
|
||||||
|
resp = resp + WiFi.softAPIP()[3];
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
resp = resp + "Not active";
|
||||||
|
}
|
||||||
|
resp = resp + "</sip><otastat>Not implemented</otastat>";
|
||||||
|
resp = resp + "<msg>WLED 0.3pd OK</msg>";
|
||||||
|
resp = resp + "</vs>";
|
||||||
|
Serial.println(resp);
|
||||||
|
server.send(200, "text/xml", resp);
|
||||||
|
}
|
177
wled00/wled03_set.ino
Normal file
177
wled00/wled03_set.ino
Normal file
@ -0,0 +1,177 @@
|
|||||||
|
void handleSettingsSet()
|
||||||
|
{
|
||||||
|
if (server.hasArg("CSSID")) clientssid = server.arg("CSSID");
|
||||||
|
if (server.hasArg("CPASS"))
|
||||||
|
{
|
||||||
|
if (!server.arg("CPASS").indexOf('*') == 0)
|
||||||
|
{
|
||||||
|
Serial.println("Setting pass");
|
||||||
|
clientpass = server.arg("CPASS");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (server.hasArg("CMDNS")) cmdns = server.arg("CMDNS");
|
||||||
|
if (server.hasArg("APSSID")) apssid = server.arg("APSSID");
|
||||||
|
if (server.hasArg("APHSSID"))
|
||||||
|
{
|
||||||
|
aphide = 1;
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
aphide = 0;
|
||||||
|
}
|
||||||
|
if (server.hasArg("APPASS"))
|
||||||
|
{
|
||||||
|
if (!server.arg("APPASS").indexOf('*') == 0) appass = server.arg("APPASS");
|
||||||
|
}
|
||||||
|
if (server.hasArg("APCHAN"))
|
||||||
|
{
|
||||||
|
int chan = server.arg("APCHAN").toInt();
|
||||||
|
if (chan > 0 && chan < 14) apchannel = chan;
|
||||||
|
}
|
||||||
|
if (server.hasArg("RESET")) //might be dangerous in case arg is always sent
|
||||||
|
{
|
||||||
|
clearEEPROM();
|
||||||
|
server.send(200, "text/plain", "Settings erased. Please wait for light to turn back on, then go to main page...");
|
||||||
|
reset();
|
||||||
|
}
|
||||||
|
if (server.hasArg("CSIP0"))
|
||||||
|
{
|
||||||
|
int i = server.arg("CSIP0").toInt();
|
||||||
|
if (i >= 0 && i <= 255) staticip[0] = i;
|
||||||
|
}
|
||||||
|
if (server.hasArg("CSIP1"))
|
||||||
|
{
|
||||||
|
int i = server.arg("CSIP1").toInt();
|
||||||
|
if (i >= 0 && i <= 255) staticip[1] = i;
|
||||||
|
}
|
||||||
|
if (server.hasArg("CSIP2"))
|
||||||
|
{
|
||||||
|
int i = server.arg("CSIP2").toInt();
|
||||||
|
if (i >= 0 && i <= 255) staticip[2] = i;
|
||||||
|
}
|
||||||
|
if (server.hasArg("CSIP3"))
|
||||||
|
{
|
||||||
|
int i = server.arg("CSIP3").toInt();
|
||||||
|
if (i >= 0 && i <= 255) staticip[3] = i;
|
||||||
|
}
|
||||||
|
if (server.hasArg("CSGW0"))
|
||||||
|
{
|
||||||
|
int i = server.arg("CSGW0").toInt();
|
||||||
|
if (i >= 0 && i <= 255) staticgateway[0] = i;
|
||||||
|
}
|
||||||
|
if (server.hasArg("CSGW1"))
|
||||||
|
{
|
||||||
|
int i = server.arg("CSGW1").toInt();
|
||||||
|
if (i >= 0 && i <= 255) staticgateway[1] = i;
|
||||||
|
}
|
||||||
|
if (server.hasArg("CSGW2"))
|
||||||
|
{
|
||||||
|
int i = server.arg("CSGW2").toInt();
|
||||||
|
if (i >= 0 && i <= 255) staticgateway[2] = i;
|
||||||
|
}
|
||||||
|
if (server.hasArg("CSGW3"))
|
||||||
|
{
|
||||||
|
int i = server.arg("CSGW3").toInt();
|
||||||
|
if (i >= 0 && i <= 255) staticgateway[3] = i;
|
||||||
|
}
|
||||||
|
if (server.hasArg("CSSN0"))
|
||||||
|
{
|
||||||
|
int i = server.arg("CSSN0").toInt();
|
||||||
|
if (i >= 0 && i <= 255) staticsubnet[0] = i;
|
||||||
|
}
|
||||||
|
if (server.hasArg("CSSN1"))
|
||||||
|
{
|
||||||
|
int i = server.arg("CSSN1").toInt();
|
||||||
|
if (i >= 0 && i <= 255) staticsubnet[1] = i;
|
||||||
|
}
|
||||||
|
if (server.hasArg("CSSN2"))
|
||||||
|
{
|
||||||
|
int i = server.arg("CSSN2").toInt();
|
||||||
|
if (i >= 0 && i <= 255) staticsubnet[2] = i;
|
||||||
|
}
|
||||||
|
if (server.hasArg("CSSN3"))
|
||||||
|
{
|
||||||
|
int i = server.arg("CSSN3").toInt();
|
||||||
|
if (i >= 0 && i <= 255) staticsubnet[3] = i;
|
||||||
|
}
|
||||||
|
if (server.hasArg("LEDS"))
|
||||||
|
{
|
||||||
|
int i = server.arg("LEDS").toInt();
|
||||||
|
if (i > 0) led_amount = i;
|
||||||
|
}
|
||||||
|
buttonEnabled = server.hasArg("BTNON");
|
||||||
|
fadeTransition = server.hasArg("TFADE");
|
||||||
|
if (server.hasArg("TDLAY"))
|
||||||
|
{
|
||||||
|
int i = server.arg("TDLAY").toInt();
|
||||||
|
if (i > 0) transitionDelay = i;
|
||||||
|
}
|
||||||
|
receiveNotifications = server.hasArg("NRCVE");
|
||||||
|
if (server.hasArg("NRBRI"))
|
||||||
|
{
|
||||||
|
int i = server.arg("NRBRI").toInt();
|
||||||
|
if (i > 0) bri_n = i;
|
||||||
|
}
|
||||||
|
notifyDirect = server.hasArg("NSDIR");
|
||||||
|
notifyButton = server.hasArg("NSBTN");
|
||||||
|
notifyForward = server.hasArg("NSFWD");
|
||||||
|
if (server.hasArg("NSIPS"))
|
||||||
|
{
|
||||||
|
notifier_ips_raw = server.arg("NSIPS");
|
||||||
|
}
|
||||||
|
saveSettingsToEEPROM();
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean handleSet(String req)
|
||||||
|
{
|
||||||
|
if (!(req.indexOf("ajax_in") >= 0)) {
|
||||||
|
if (req.indexOf("get-settings") >= 0)
|
||||||
|
{
|
||||||
|
XML_response_settings();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
int pos = 0;
|
||||||
|
boolean isNotification = false;
|
||||||
|
if (req.indexOf("N=") > 0) isNotification = true;
|
||||||
|
pos = req.indexOf("A=");
|
||||||
|
if (pos > 0) {
|
||||||
|
bri = req.substring(pos + 2).toInt();
|
||||||
|
}
|
||||||
|
pos = req.indexOf("R=");
|
||||||
|
if (pos > 0) {
|
||||||
|
col[0] = req.substring(pos + 2).toInt();
|
||||||
|
}
|
||||||
|
pos = req.indexOf("G=");
|
||||||
|
if (pos > 0) {
|
||||||
|
col[1] = req.substring(pos + 2).toInt();
|
||||||
|
}
|
||||||
|
pos = req.indexOf("B=");
|
||||||
|
if (pos > 0) {
|
||||||
|
col[2] = req.substring(pos + 2).toInt();
|
||||||
|
}
|
||||||
|
if (req.indexOf("NL=") > 0)
|
||||||
|
{
|
||||||
|
if (req.indexOf("NL=0") > 0)
|
||||||
|
{
|
||||||
|
nightlightActive = false;
|
||||||
|
} else {
|
||||||
|
nightlightActive = true;
|
||||||
|
nightlightStartTime = millis();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (isNotification)
|
||||||
|
{
|
||||||
|
if (receiveNotifications)
|
||||||
|
{
|
||||||
|
colorUpdated(3);
|
||||||
|
server.send(200, "text/plain", "");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
server.send(202, "text/plain", "");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
XML_response();
|
||||||
|
colorUpdated(1);
|
||||||
|
return true;
|
||||||
|
}
|
95
wled00/wled04_file.ino
Normal file
95
wled00/wled04_file.ino
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
String formatBytes(size_t bytes){
|
||||||
|
if (bytes < 1024){
|
||||||
|
return String(bytes)+"B";
|
||||||
|
} else if(bytes < (1024 * 1024)){
|
||||||
|
return String(bytes/1024.0)+"KB";
|
||||||
|
} else if(bytes < (1024 * 1024 * 1024)){
|
||||||
|
return String(bytes/1024.0/1024.0)+"MB";
|
||||||
|
} else {
|
||||||
|
return String(bytes/1024.0/1024.0/1024.0)+"GB";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String getContentType(String filename){
|
||||||
|
if(server.hasArg("download")) return "application/octet-stream";
|
||||||
|
else if(filename.endsWith(".htm")) return "text/html";
|
||||||
|
else if(filename.endsWith(".html")) return "text/html";
|
||||||
|
else if(filename.endsWith(".css")) return "text/css";
|
||||||
|
else if(filename.endsWith(".js")) return "application/javascript";
|
||||||
|
else if(filename.endsWith(".png")) return "image/png";
|
||||||
|
else if(filename.endsWith(".gif")) return "image/gif";
|
||||||
|
else if(filename.endsWith(".jpg")) return "image/jpeg";
|
||||||
|
else if(filename.endsWith(".ico")) return "image/x-icon";
|
||||||
|
else if(filename.endsWith(".xml")) return "text/xml";
|
||||||
|
else if(filename.endsWith(".pdf")) return "application/x-pdf";
|
||||||
|
else if(filename.endsWith(".zip")) return "application/x-zip";
|
||||||
|
else if(filename.endsWith(".gz")) return "application/x-gzip";
|
||||||
|
return "text/plain";
|
||||||
|
}
|
||||||
|
|
||||||
|
bool handleFileRead(String path){
|
||||||
|
Serial.println("handleFileRead: " + path);
|
||||||
|
if(path.endsWith("/")) path += "index.htm";
|
||||||
|
String contentType = getContentType(path);
|
||||||
|
String pathWithGz = path + ".gz";
|
||||||
|
if(SPIFFS.exists(pathWithGz) || SPIFFS.exists(path)){
|
||||||
|
if(SPIFFS.exists(pathWithGz))
|
||||||
|
path += ".gz";
|
||||||
|
File file = SPIFFS.open(path, "r");
|
||||||
|
size_t sent = server.streamFile(file, contentType);
|
||||||
|
file.close();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void handleFileUpload(){
|
||||||
|
if(server.uri() != "/edit") return;
|
||||||
|
HTTPUpload& upload = server.upload();
|
||||||
|
if(upload.status == UPLOAD_FILE_START){
|
||||||
|
String filename = upload.filename;
|
||||||
|
if(!filename.startsWith("/")) filename = "/"+filename;
|
||||||
|
Serial.print("handleFileUpload Name: "); Serial.println(filename);
|
||||||
|
fsUploadFile = SPIFFS.open(filename, "w");
|
||||||
|
filename = String();
|
||||||
|
} else if(upload.status == UPLOAD_FILE_WRITE){
|
||||||
|
//Serial.print("handleFileUpload Data: "); Serial.println(upload.currentSize);
|
||||||
|
if(fsUploadFile)
|
||||||
|
fsUploadFile.write(upload.buf, upload.currentSize);
|
||||||
|
} else if(upload.status == UPLOAD_FILE_END){
|
||||||
|
if(fsUploadFile)
|
||||||
|
fsUploadFile.close();
|
||||||
|
Serial.print("handleFileUpload Size: "); Serial.println(upload.totalSize);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void handleFileDelete(){
|
||||||
|
if(server.args() == 0) return server.send(500, "text/plain", "BAD ARGS");
|
||||||
|
String path = server.arg(0);
|
||||||
|
Serial.println("handleFileDelete: " + path);
|
||||||
|
if(path == "/")
|
||||||
|
return server.send(500, "text/plain", "BAD PATH");
|
||||||
|
if(!SPIFFS.exists(path))
|
||||||
|
return server.send(404, "text/plain", "FileNotFound");
|
||||||
|
SPIFFS.remove(path);
|
||||||
|
server.send(200, "text/plain", "");
|
||||||
|
path = String();
|
||||||
|
}
|
||||||
|
|
||||||
|
void handleFileCreate(){
|
||||||
|
if(server.args() == 0)
|
||||||
|
return server.send(500, "text/plain", "BAD ARGS");
|
||||||
|
String path = server.arg(0);
|
||||||
|
Serial.println("handleFileCreate: " + path);
|
||||||
|
if(path == "/")
|
||||||
|
return server.send(500, "text/plain", "BAD PATH");
|
||||||
|
if(SPIFFS.exists(path))
|
||||||
|
return server.send(500, "text/plain", "FILE EXISTS");
|
||||||
|
File file = SPIFFS.open(path, "w");
|
||||||
|
if(file)
|
||||||
|
file.close();
|
||||||
|
else
|
||||||
|
return server.send(500, "text/plain", "CREATE FAILED");
|
||||||
|
server.send(200, "text/plain", "");
|
||||||
|
path = String();
|
||||||
|
}
|
139
wled00/wled05_init.ino
Normal file
139
wled00/wled05_init.ino
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
void wledInit()
|
||||||
|
{
|
||||||
|
Serial.begin(115200);
|
||||||
|
Serial.println();
|
||||||
|
|
||||||
|
for(uint8_t t = 4; t > 0; t--) {
|
||||||
|
Serial.printf("[SETUP] BOOT WAIT %d...\n", t);
|
||||||
|
Serial.flush();
|
||||||
|
delay(1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
SPIFFS.begin();
|
||||||
|
{
|
||||||
|
Dir dir = SPIFFS.openDir("/");
|
||||||
|
while (dir.next()) {
|
||||||
|
String fileName = dir.fileName();
|
||||||
|
size_t fileSize = dir.fileSize();
|
||||||
|
Serial.printf("FS File: %s, size: %s\n", fileName.c_str(), formatBytes(fileSize).c_str());
|
||||||
|
}
|
||||||
|
Serial.printf("\n");
|
||||||
|
}
|
||||||
|
Serial.println("Init EEPROM");
|
||||||
|
EEPROM.begin(256);
|
||||||
|
loadSettingsFromEEPROM();
|
||||||
|
|
||||||
|
Serial.print("CC: SSID: ");
|
||||||
|
Serial.print(clientssid);
|
||||||
|
|
||||||
|
WiFi.disconnect(); //close old connections
|
||||||
|
|
||||||
|
if (staticip[0] != 0)
|
||||||
|
{
|
||||||
|
WiFi.config(staticip, staticgateway, staticsubnet);
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
WiFi.config(0U, 0U, 0U);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (apssid.length()>0)
|
||||||
|
{
|
||||||
|
Serial.print("USING AP");
|
||||||
|
Serial.println(apssid.length());
|
||||||
|
initAP();
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
Serial.println("NO AP");
|
||||||
|
WiFi.softAPdisconnect(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
initCon();
|
||||||
|
|
||||||
|
Serial.println("");
|
||||||
|
Serial.print("Connected! IP address: ");
|
||||||
|
Serial.println(WiFi.localIP());
|
||||||
|
|
||||||
|
// Set up mDNS responder:
|
||||||
|
if (cmdns != NULL && !only_ap && !MDNS.begin(cmdns.c_str())) {
|
||||||
|
Serial.println("Error setting up MDNS responder!");
|
||||||
|
down();
|
||||||
|
}
|
||||||
|
Serial.println("mDNS responder started");
|
||||||
|
|
||||||
|
//SERVER INIT
|
||||||
|
//settings page
|
||||||
|
server.on("/settings", HTTP_GET, [](){
|
||||||
|
if(!handleFileRead("/settings.htm")) server.send(404, "text/plain", "FileNotFound");
|
||||||
|
});
|
||||||
|
server.on("/button.png", HTTP_GET, [](){
|
||||||
|
if(!handleFileRead("/button.png")) server.send(404, "text/plain", "FileNotFound");
|
||||||
|
});
|
||||||
|
server.on("/favicon.ico", HTTP_GET, [](){
|
||||||
|
if(!handleFileRead("/favicon.ico")) server.send(404, "text/plain", "FileNotFound");
|
||||||
|
});
|
||||||
|
server.on("/", HTTP_GET, [](){
|
||||||
|
if(!handleFileRead("/index.htm")) server.send(404, "text/plain", "FileNotFound");
|
||||||
|
});
|
||||||
|
server.on("/reset", HTTP_GET, reset);
|
||||||
|
server.on("/set-settings", HTTP_POST, [](){
|
||||||
|
handleSettingsSet();
|
||||||
|
server.send(200, "text/plain", "Settings saved. Please wait for light to turn back on, then go to main page...");
|
||||||
|
reset();
|
||||||
|
});
|
||||||
|
if (!ota_lock){
|
||||||
|
server.on("/edit", HTTP_GET, [](){
|
||||||
|
if(!handleFileRead("/edit.htm")) server.send(404, "text/plain", "FileNotFound");
|
||||||
|
});
|
||||||
|
server.on("/edit", HTTP_PUT, handleFileCreate);
|
||||||
|
server.on("/edit", HTTP_DELETE, handleFileDelete);
|
||||||
|
server.on("/edit", HTTP_POST, [](){ server.send(200, "text/plain", ""); }, handleFileUpload);
|
||||||
|
server.on("/down", HTTP_GET, down);
|
||||||
|
server.on("/cleareeprom", HTTP_GET, clearEEPROM);
|
||||||
|
//init ota page
|
||||||
|
httpUpdater.setup(&server);
|
||||||
|
}
|
||||||
|
//called when the url is not defined here, ajax-in; get-settings
|
||||||
|
server.onNotFound([](){
|
||||||
|
if(!handleSet(server.uri())){
|
||||||
|
server.send(404, "text/plain", "FileNotFound");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
server.begin();
|
||||||
|
Serial.println("HTTP server started");
|
||||||
|
|
||||||
|
// Add service to MDNS
|
||||||
|
MDNS.addService("http", "tcp", 80);
|
||||||
|
// Initialize NeoPixel Strip
|
||||||
|
strip.Begin();
|
||||||
|
colorUpdated(0);
|
||||||
|
pinMode(buttonPin, INPUT_PULLUP);
|
||||||
|
}
|
||||||
|
|
||||||
|
void initAP(){
|
||||||
|
WiFi.softAP(apssid.c_str(), appass.c_str(), apchannel, aphide);
|
||||||
|
}
|
||||||
|
|
||||||
|
void initCon()
|
||||||
|
{
|
||||||
|
int fail_count = 0;
|
||||||
|
if (clientssid.length() <1) fail_count = 33;
|
||||||
|
WiFi.begin(clientssid.c_str(), clientpass.c_str());
|
||||||
|
while(WiFi.status() != WL_CONNECTED) {
|
||||||
|
delay(500);
|
||||||
|
Serial.println("C_NC");
|
||||||
|
fail_count++;
|
||||||
|
if (fail_count > 32)
|
||||||
|
{
|
||||||
|
WiFi.disconnect();
|
||||||
|
Serial.println("Can't connect to network. Opening AP...");
|
||||||
|
String save = apssid;
|
||||||
|
only_ap = true;
|
||||||
|
if (apssid.length() <1) apssid = "WLED-AP";
|
||||||
|
initAP();
|
||||||
|
apssid = save;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
2
wled00/wled06_stringfiles.ino
Normal file
2
wled00/wled06_stringfiles.ino
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
String readFromFS(String filename){return "NI";};
|
||||||
|
void writeToFS(String filename, String file) {};
|
31
wled00/wled07_notify.ino
Normal file
31
wled00/wled07_notify.ino
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
void notify(int callMode)
|
||||||
|
{
|
||||||
|
switch (callMode)
|
||||||
|
{
|
||||||
|
case 1: if (!notifyDirect) return; break;
|
||||||
|
case 2: if (!notifyButton) return; break;
|
||||||
|
case 3: if (!notifyForward) return; break;
|
||||||
|
default: return;
|
||||||
|
}
|
||||||
|
String snd = "/ajax_in&N=1&A=";
|
||||||
|
snd = snd + bri;
|
||||||
|
snd = snd + "&R=";
|
||||||
|
snd = snd + col[0];
|
||||||
|
snd = snd + "&G=";
|
||||||
|
snd = snd + col[1];
|
||||||
|
snd = snd + "&B=";
|
||||||
|
snd = snd + col[2];
|
||||||
|
|
||||||
|
HTTPClient hclient;
|
||||||
|
|
||||||
|
for (int i = 0; i < notifier_ips_count; i++)
|
||||||
|
{
|
||||||
|
String url = "http://";
|
||||||
|
url = url + notifier_ips[i];
|
||||||
|
url = url + snd;
|
||||||
|
|
||||||
|
hclient.begin(url);
|
||||||
|
hclient.GET();
|
||||||
|
hclient.end();
|
||||||
|
}
|
||||||
|
}
|
83
wled00/wled08_led.ino
Normal file
83
wled00/wled08_led.ino
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
void setAllLeds() {
|
||||||
|
double d = bri_t;
|
||||||
|
double val = d /256;
|
||||||
|
int r = col_t[0]*val;
|
||||||
|
int g = col_t[1]*val;
|
||||||
|
int b = col_t[2]*val;
|
||||||
|
for (int i=0; i < led_amount; i++) {
|
||||||
|
strip.SetPixelColor(i, RgbColor(r, g, b));
|
||||||
|
}
|
||||||
|
strip.Show();
|
||||||
|
}
|
||||||
|
|
||||||
|
void setLedsStandard()
|
||||||
|
{
|
||||||
|
col_old[0] = col[0];
|
||||||
|
col_old[1] = col[1];
|
||||||
|
col_old[2] = col[2];
|
||||||
|
bri_old = bri;
|
||||||
|
col_t[0] = col[0];
|
||||||
|
col_t[1] = col[1];
|
||||||
|
col_t[2] = col[2];
|
||||||
|
bri_t = bri;
|
||||||
|
setAllLeds();
|
||||||
|
}
|
||||||
|
|
||||||
|
void colorUpdated(int callMode)
|
||||||
|
{
|
||||||
|
//call for notifier -> 0: init 1: direct change 2: button 3: notification
|
||||||
|
if (col[0] == col_old[0] && col[1] == col_old[1] && col[2] == col_old[2] && bri == bri_old)
|
||||||
|
{
|
||||||
|
return; //no change
|
||||||
|
}
|
||||||
|
if (bri > 0) bri_last = bri;
|
||||||
|
notify(callMode);
|
||||||
|
if (fadeTransition || seqTransition)
|
||||||
|
{
|
||||||
|
if (transitionActive)
|
||||||
|
{
|
||||||
|
col_old[0] = col_t[0];
|
||||||
|
col_old[1] = col_t[1];
|
||||||
|
col_old[2] = col_t[2];
|
||||||
|
bri_old = bri_t;
|
||||||
|
}
|
||||||
|
transitionActive = true;
|
||||||
|
transitionStartTime = millis();
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
setLedsStandard();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void handleTransitions()
|
||||||
|
{
|
||||||
|
if (transitionActive && transitionDelay > 0)
|
||||||
|
{
|
||||||
|
float tper = (millis() - transitionStartTime)/(float)transitionDelay;
|
||||||
|
if (tper >= 1.0)
|
||||||
|
{
|
||||||
|
transitionActive = false;
|
||||||
|
tper_last = 0;
|
||||||
|
setLedsStandard();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (tper - tper_last < transitionResolution)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
tper_last = tper;
|
||||||
|
if (fadeTransition)
|
||||||
|
{
|
||||||
|
col_t[0] = col_old[0]+((col[0] - col_old[0])*tper);
|
||||||
|
col_t[1] = col_old[1]+((col[1] - col_old[1])*tper);
|
||||||
|
col_t[2] = col_old[2]+((col[2] - col_old[2])*tper);
|
||||||
|
bri_t = bri_old+((bri - bri_old)*tper);
|
||||||
|
}
|
||||||
|
if (seqTransition)
|
||||||
|
{
|
||||||
|
|
||||||
|
} else setAllLeds();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void handleAnimations(){};
|
27
wled00/wled09_button.ino
Normal file
27
wled00/wled09_button.ino
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
void handleButton()
|
||||||
|
{
|
||||||
|
if (buttonEnabled)
|
||||||
|
{
|
||||||
|
if (digitalRead(buttonPin) == LOW && !buttonPressedBefore)
|
||||||
|
{
|
||||||
|
buttonPressedBefore = true;
|
||||||
|
if (bri == 0)
|
||||||
|
{
|
||||||
|
bri = bri_last;
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
bri_last = bri;
|
||||||
|
bri = 0;
|
||||||
|
}
|
||||||
|
colorUpdated(2);
|
||||||
|
}
|
||||||
|
else if (digitalRead(buttonPin) == HIGH && buttonPressedBefore)
|
||||||
|
{
|
||||||
|
delay(15);
|
||||||
|
if (digitalRead(buttonPin) == HIGH)
|
||||||
|
{
|
||||||
|
buttonPressedBefore = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user