Merge branch 'filesystem' of https://github.com/Aircoookie/WLED into filesystem
This commit is contained in:
commit
2594cb23c4
@ -2,6 +2,11 @@
|
|||||||
|
|
||||||
### Development versions after the 0.10.2 release
|
### Development versions after the 0.10.2 release
|
||||||
|
|
||||||
|
#### Build 2009100
|
||||||
|
|
||||||
|
- Fixed sunrise mode not reinitializing
|
||||||
|
- Fixed passwords not clearable
|
||||||
|
|
||||||
#### Build 2009070
|
#### Build 2009070
|
||||||
|
|
||||||
- New Segments are now initialized with default speed and intensity
|
- New Segments are now initialized with default speed and intensity
|
||||||
|
13
usermods/Temperature/platformio_override.ini
Normal file
13
usermods/Temperature/platformio_override.ini
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
; Options
|
||||||
|
; -------
|
||||||
|
; USERMOD_DALLASTEMPERATURE - define this to have this user mod included wled00\usermods_list.cpp
|
||||||
|
; USERMOD_DALLASTEMPERATURE_CELSIUS - define this to report temperatures in degrees celsius, otherwise fahrenheit will be reported
|
||||||
|
; USERMOD_DALLASTEMPERATURE_MEASUREMENT_INTERVAL - the number of milliseconds between measurements, defaults to 60 seconds
|
||||||
|
; USERMOD_DALLASTEMPERATURE_FIRST_MEASUREMENT_AT - the number of milliseconds after boot to take first measurement, defaults to 20 seconds
|
||||||
|
;
|
||||||
|
[env:d1_mini_usermod_dallas_temperature_C]
|
||||||
|
extends = env:d1_mini
|
||||||
|
build_flags = ${common.build_flags_esp8266} -D USERMOD_DALLASTEMPERATURE -D USERMOD_DALLASTEMPERATURE_CELSIUS
|
||||||
|
lib_deps = ${env.lib_deps}
|
||||||
|
milesburton/DallasTemperature@^3.9.0
|
||||||
|
OneWire@~2.3.5
|
@ -5,11 +5,18 @@ This usermod will read from an attached DS18B20 temperature sensor (as available
|
|||||||
The temperature is displayed both in the Info section of the web UI as well as published to the `/temperature` MQTT topic if enabled.
|
The temperature is displayed both in the Info section of the web UI as well as published to the `/temperature` MQTT topic if enabled.
|
||||||
This usermod will be expanded with support for different sensor types in the future.
|
This usermod will be expanded with support for different sensor types in the future.
|
||||||
|
|
||||||
|
If temperature sensor is not detected during boot, this usermod will be disabled.
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
Copy `usermod_temperature.h` to the wled00 directory.
|
Copy the example `platformio_override.ini` to the root directory. This file should be placed in the same directory as `platformio.ini`.
|
||||||
Uncomment the corresponding lines in `usermods_list.cpp` and compile!
|
|
||||||
If this is the only v2 usermod you plan to use, you can alternatively replace `usermods_list.h` in wled00 with the one in this folder.
|
### Define Your Options
|
||||||
|
|
||||||
|
* `USERMOD_DALLASTEMPERATURE` - define this to have this user mod included wled00\usermods_list.cpp
|
||||||
|
* `USERMOD_DALLASTEMPERATURE_CELSIUS` - define this to report temperatures in degrees celsious, otherwise fahrenheit will be reported
|
||||||
|
* `USERMOD_DALLASTEMPERATURE_MEASUREMENT_INTERVAL` - the number of milliseconds between measurements, defaults to 60 seconds
|
||||||
|
* `USERMOD_DALLASTEMPERATURE_FIRST_MEASUREMENT_AT` - the number of milliseconds after boot to take first measurement, defaults to 20 seconds
|
||||||
|
|
||||||
## Project link
|
## Project link
|
||||||
|
|
||||||
@ -17,7 +24,10 @@ If this is the only v2 usermod you plan to use, you can alternatively replace `u
|
|||||||
|
|
||||||
### PlatformIO requirements
|
### PlatformIO requirements
|
||||||
|
|
||||||
You might have to uncomment `DallasTemperature@~3.8.0`,`OneWire@~2.3.5 under` `[common]` section in `platformio.ini`:
|
If you are using `platformio_override.ini`, you should be able to refresh the task list and see your custom task, for example `env:d1_mini_usermod_dallas_temperature_C`.
|
||||||
|
|
||||||
|
|
||||||
|
If you are not using `platformio_override.ini`, you might have to uncomment `DallasTemperature@~3.8.0`,`OneWire@~2.3.5 under` `[common]` section in `platformio.ini`:
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
# platformio.ini
|
# platformio.ini
|
||||||
@ -38,3 +48,11 @@ lib_deps_external =
|
|||||||
OneWire@~2.3.5
|
OneWire@~2.3.5
|
||||||
...
|
...
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Change Log
|
||||||
|
|
||||||
|
2020-09-12
|
||||||
|
* Changed to use async, non-blocking implementation
|
||||||
|
* Do not report low temperatures that indicate an error to mqtt
|
||||||
|
* Disable plugin if temperature sensor not detected
|
||||||
|
* Report the number of seconds until the first read in the info screen instead of sensor error
|
@ -11,61 +11,156 @@
|
|||||||
#define TEMPERATURE_PIN 14
|
#define TEMPERATURE_PIN 14
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define TEMP_CELSIUS // Comment out for Fahrenheit
|
// the frequency to check temperature, 1 minute
|
||||||
|
#ifndef USERMOD_DALLASTEMPERATURE_MEASUREMENT_INTERVAL
|
||||||
|
#define USERMOD_DALLASTEMPERATURE_MEASUREMENT_INTERVAL 60000
|
||||||
|
#endif
|
||||||
|
|
||||||
#define MEASUREMENT_INTERVAL 60000 //1 Minute
|
// how many seconds after boot to take first measurement, 20 seconds
|
||||||
|
#ifndef USERMOD_DALLASTEMPERATURE_FIRST_MEASUREMENT_AT
|
||||||
|
#define USERMOD_DALLASTEMPERATURE_FIRST_MEASUREMENT_AT 20000
|
||||||
|
#endif
|
||||||
|
|
||||||
OneWire oneWire(TEMPERATURE_PIN);
|
OneWire oneWire(TEMPERATURE_PIN);
|
||||||
DallasTemperature sensor(&oneWire);
|
DallasTemperature sensor(&oneWire);
|
||||||
|
|
||||||
class UsermodTemperature : public Usermod {
|
class UsermodTemperature : public Usermod {
|
||||||
private:
|
private:
|
||||||
|
// The device's unique 64-bit serial code stored in on-board ROM.
|
||||||
|
// Reading directly from the sensor device address is faster than
|
||||||
|
// reading from index. When reading by index, DallasTemperature
|
||||||
|
// must first look up the device address at the specified index.
|
||||||
|
DeviceAddress sensorDeviceAddress;
|
||||||
// set last reading as "40 sec before boot", so first reading is taken after 20 sec
|
// set last reading as "40 sec before boot", so first reading is taken after 20 sec
|
||||||
unsigned long lastMeasurement = UINT32_MAX - 40000;
|
unsigned long lastMeasurement = UINT32_MAX - (USERMOD_DALLASTEMPERATURE_MEASUREMENT_INTERVAL - USERMOD_DALLASTEMPERATURE_FIRST_MEASUREMENT_AT);
|
||||||
float temperature = 0.0f;
|
// last time requestTemperatures was called
|
||||||
public:
|
// used to determine when we can read the sensors temperature
|
||||||
void getReading() {
|
// we have to wait at least 93.75 ms after requestTemperatures() is called
|
||||||
|
unsigned long lastTemperaturesRequest;
|
||||||
|
float temperature = -100; // default to -100, DS18B20 only goes down to -50C
|
||||||
|
// indicates requestTemperatures has been called but the sensor measurement is not complete
|
||||||
|
bool waitingForConversion = false;
|
||||||
|
// flag to indicate we have finished the first getTemperature call
|
||||||
|
// allows this library to report to the user how long until the first
|
||||||
|
// measurement
|
||||||
|
bool getTemperatureComplete = false;
|
||||||
|
// flag set at startup if DS18B20 sensor not found, avoids trying to keep getting
|
||||||
|
// temperature if flashed to a board without a sensor attached
|
||||||
|
bool disabled = false;
|
||||||
|
|
||||||
|
void requestTemperatures() {
|
||||||
|
// there is requestTemperaturesByAddress however it
|
||||||
|
// appears to do more work,
|
||||||
|
// TODO: measure exection time difference
|
||||||
sensor.requestTemperatures();
|
sensor.requestTemperatures();
|
||||||
#ifdef TEMP_CELSIUS
|
lastTemperaturesRequest = millis();
|
||||||
temperature = sensor.getTempCByIndex(0);
|
waitingForConversion = true;
|
||||||
#else
|
|
||||||
temperature = sensor.getTempFByIndex(0);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void getTemperature() {
|
||||||
|
#ifdef USERMOD_DALLASTEMPERATURE_CELSIUS
|
||||||
|
temperature = sensor.getTempC(sensorDeviceAddress);
|
||||||
|
#else
|
||||||
|
temperature = sensor.getTempF(sensorDeviceAddress);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
lastMeasurement = millis();
|
||||||
|
waitingForConversion = false;
|
||||||
|
getTemperatureComplete = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
sensor.begin();
|
sensor.begin();
|
||||||
sensor.setResolution(9);
|
|
||||||
|
// get the unique 64-bit serial code stored in on-board ROM
|
||||||
|
// if getAddress returns false, the sensor was not found
|
||||||
|
disabled = !sensor.getAddress(sensorDeviceAddress, 0);
|
||||||
|
|
||||||
|
if (!disabled) {
|
||||||
|
DEBUG_PRINTLN("Dallas Temperature found");
|
||||||
|
// set the resolution for this specific device
|
||||||
|
sensor.setResolution(sensorDeviceAddress, 9, true);
|
||||||
|
// do not block waiting for reading
|
||||||
|
sensor.setWaitForConversion(false);
|
||||||
|
} else {
|
||||||
|
DEBUG_PRINTLN("Dallas Temperature not found");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop() {
|
void loop() {
|
||||||
if (millis() - lastMeasurement > MEASUREMENT_INTERVAL)
|
if (disabled) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long now = millis();
|
||||||
|
|
||||||
|
// check to see if we are due for taking a measurement
|
||||||
|
// lastMeasurement will not be updated until the conversion
|
||||||
|
// is complete the the reading is finished
|
||||||
|
if (now - lastMeasurement < USERMOD_DALLASTEMPERATURE_MEASUREMENT_INTERVAL)
|
||||||
{
|
{
|
||||||
getReading();
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// we are due for a measurement, if we are not already waiting
|
||||||
|
// for a conversion to complete, then make a new request for temps
|
||||||
|
if (!waitingForConversion)
|
||||||
|
{
|
||||||
|
requestTemperatures();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// we were waiting for a conversion to complete, have we waited log enough?
|
||||||
|
if (now - lastTemperaturesRequest >= 94 /* 93.75ms per the datasheet */)
|
||||||
|
{
|
||||||
|
getTemperature();
|
||||||
|
|
||||||
if (WLED_MQTT_CONNECTED) {
|
if (WLED_MQTT_CONNECTED) {
|
||||||
char subuf[38];
|
char subuf[38];
|
||||||
strcpy(subuf, mqttDeviceTopic);
|
strcpy(subuf, mqttDeviceTopic);
|
||||||
|
if (-100 <= temperature) {
|
||||||
|
// dont publish super low temperature as the graph will get messed up
|
||||||
|
// the DallasTemperature library returns -127C or -196.6F when problem
|
||||||
|
// reading the sensor
|
||||||
strcat(subuf, "/temperature");
|
strcat(subuf, "/temperature");
|
||||||
mqtt->publish(subuf, 0, true, String(temperature).c_str());
|
mqtt->publish(subuf, 0, true, String(temperature).c_str());
|
||||||
|
} else {
|
||||||
|
// publish something else to indicate status?
|
||||||
|
}
|
||||||
}
|
}
|
||||||
lastMeasurement = millis();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void addToJsonInfo(JsonObject& root) {
|
void addToJsonInfo(JsonObject& root) {
|
||||||
|
// dont add temperature to info if we are disabled
|
||||||
|
if (disabled) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
JsonObject user = root["u"];
|
JsonObject user = root["u"];
|
||||||
if (user.isNull()) user = root.createNestedObject("u");
|
if (user.isNull()) user = root.createNestedObject("u");
|
||||||
|
|
||||||
JsonArray temp = user.createNestedArray("Temperature");
|
JsonArray temp = user.createNestedArray("Temperature");
|
||||||
if (temperature == DEVICE_DISCONNECTED_C) {
|
|
||||||
|
if (!getTemperatureComplete) {
|
||||||
|
// if we haven't read the sensor yet, let the user know
|
||||||
|
// that we are still waiting for the first measurement
|
||||||
|
temp.add((USERMOD_DALLASTEMPERATURE_FIRST_MEASUREMENT_AT - millis()) / 1000);
|
||||||
|
temp.add(" sec until read");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (temperature <= -100) {
|
||||||
temp.add(0);
|
temp.add(0);
|
||||||
temp.add(" Sensor Error!");
|
temp.add(" Sensor Error!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
temp.add(temperature);
|
temp.add(temperature);
|
||||||
#ifdef TEMP_CELSIUS
|
#ifdef USERMOD_DALLASTEMPERATURE_CELSIUS
|
||||||
temp.add("°C");
|
temp.add("°C");
|
||||||
#else
|
#else
|
||||||
temp.add("°F");
|
temp.add("°F");
|
||||||
|
@ -9,7 +9,10 @@
|
|||||||
* \/ \/ \/
|
* \/ \/ \/
|
||||||
*/
|
*/
|
||||||
//#include "usermod_v2_example.h"
|
//#include "usermod_v2_example.h"
|
||||||
#include "usermod_temperature.h"
|
#ifdef USERMOD_DALLASTEMPERATURE
|
||||||
|
#include "../usermods/Temperature/usermod_temperature.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
//#include "usermod_v2_empty.h"
|
//#include "usermod_v2_empty.h"
|
||||||
|
|
||||||
void registerUsermods()
|
void registerUsermods()
|
||||||
@ -20,6 +23,9 @@ void registerUsermods()
|
|||||||
* \/ \/ \/
|
* \/ \/ \/
|
||||||
*/
|
*/
|
||||||
//usermods.add(new MyExampleUsermod());
|
//usermods.add(new MyExampleUsermod());
|
||||||
|
#ifdef USERMOD_DALLASTEMPERATURE
|
||||||
usermods.add(new UsermodTemperature());
|
usermods.add(new UsermodTemperature());
|
||||||
|
#endif
|
||||||
|
|
||||||
//usermods.add(new UsermodRenameMe());
|
//usermods.add(new UsermodRenameMe());
|
||||||
}
|
}
|
48
wled00/data/404.html
Normal file
48
wled00/data/404.html
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta content='width=device-width' name='viewport'>
|
||||||
|
<meta name="theme-color" content="#222222">
|
||||||
|
<title>Not found</title>
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
font-family: Verdana, Helvetica, sans-serif;
|
||||||
|
text-align: center;
|
||||||
|
background-color: #222;
|
||||||
|
margin: 0;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
width: 400px;
|
||||||
|
max-width: 50%;
|
||||||
|
image-rendering: pixelated;
|
||||||
|
image-rendering: crisp-edges;
|
||||||
|
margin: 25px 0 -10px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
outline: none;
|
||||||
|
cursor: pointer;
|
||||||
|
padding: 8px;
|
||||||
|
margin: 10px;
|
||||||
|
width: 230px;
|
||||||
|
text-transform: uppercase;
|
||||||
|
font-family: helvetica;
|
||||||
|
font-size: 19px;
|
||||||
|
background-color: #333;
|
||||||
|
color: white;
|
||||||
|
border: 0px solid white;
|
||||||
|
border-radius: 25px;
|
||||||
|
filter: drop-shadow(0px 0px 1px #000);
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<img alt="" src=" data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsEAAA7BAbiRa+0AAAFMSURBVFhH7ZTfbYNADMaPKDNUrJA85CEjdIjOgNQV+sASlZgmI/AIK6AuQfngnDrmjtpHItQ/P+l0juHsz2cH9+fJ/G7nreldfnDnp+ln/ZIlxbIfQmIwJOekCrEJ8FUvASEWEXoBiuSERcTO75uhuwFWff86bi57n3ZC+rW3YLqB5rn11ldCEPNr2LwFJgHHy8G1bTsu3oKYX4N5BrQ8ZAYewSoBGDjr0ElWCUC/rT2X7MqynL7tG4Dc45BwEYM9H5w7DqHMdfNCURR9nue3Iobk55MtOYeLoOQ8vmoG6o+0FaLrOm9FwC3wayLgx5I2WHpGIGYorulfgPYQ3AZLz4hQ9TMBVVVleJGrRUWz2YgQOg8bPjzzrit7vwcRQb5NTiARRPPzMYItoCpoWZITMkao+mRkddpqQ6z6FN+DfwFJrOm55GfewC/CuU/E4tQYg7BPYQAAAABJRU5ErkJggg==">
|
||||||
|
<h1>404 Not Found</h1>
|
||||||
|
<b>Akemi does not know where you are headed...</b><br><br>
|
||||||
|
<button onclick="window.location.href='/sliders'">Back to controls</button>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -60,6 +60,8 @@ body {
|
|||||||
-ms-user-select: none;
|
-ms-user-select: none;
|
||||||
user-select: none;
|
user-select: none;
|
||||||
-webkit-tap-highlight-color: transparent;
|
-webkit-tap-highlight-color: transparent;
|
||||||
|
scrollbar-width: 6px;
|
||||||
|
scrollbar-color: var(--c-sb) transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
html,
|
html,
|
||||||
|
@ -3,13 +3,13 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta content='width=device-width' name='viewport'>
|
<meta content='width=device-width' name='viewport'>
|
||||||
<meta name="theme-color" content="#333333">
|
<meta name="theme-color" content="#222222">
|
||||||
<title>WLED Setup</title>
|
<title>Welcome!</title>
|
||||||
<style>
|
<style>
|
||||||
body {
|
body {
|
||||||
font-family: Verdana, Helvetica, sans-serif;
|
font-family: Verdana, Helvetica, sans-serif;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
background-color: #333;
|
background-color: #222;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
@ -23,32 +23,42 @@
|
|||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
font-family: helvetica;
|
font-family: helvetica;
|
||||||
font-size: 19px;
|
font-size: 19px;
|
||||||
background-color: #222;
|
background-color: #333;
|
||||||
color: white;
|
color: white;
|
||||||
border: 0px solid white;
|
border: 0px solid white;
|
||||||
border-radius: 5px;
|
border-radius: 25px;
|
||||||
|
filter: drop-shadow(0px 0px 1px #000);
|
||||||
}
|
}
|
||||||
|
|
||||||
svg {
|
img {
|
||||||
fill: #fff;
|
width: 999px;
|
||||||
|
max-width: 85%;
|
||||||
|
image-rendering: pixelated;
|
||||||
|
image-rendering: crisp-edges;
|
||||||
|
margin: 25px 0 -10px 0;
|
||||||
|
animation: fi 1s;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes fi {
|
||||||
|
from { opacity: 0; }
|
||||||
|
to { opacity: 1; }
|
||||||
|
}
|
||||||
|
|
||||||
|
.main {
|
||||||
|
animation: fi 1.5s .7s both;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<svg style="position: absolute; width: 0; height: 0; overflow: hidden;" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
<img alt="" src=" data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHEAAAAjCAYAAACjOOUsAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsAAAA7AAWrWiQkAAATfSURBVGhD7ZlPaBVHHMdnS2Ox5iKYGIyYJwQlUTHG6kUwtSAIBsEiBopgKR5i68mbIPgEwZun0uYgouIlobQIKQheIsSLaBSaRFoEc3gtMa9HLaiH7X4n81tn583u/HkTaZ/7gR+zMzvv93bfZ3/777GSkpL/AJFo3Tg/H7OuPtGxY7CTsZnjkd/3lRTi/qMKgfGXt8TAO6KfT2TG1f7u6ROlyBXgI9HaQRW4+JR3ox92Z1p1XO3PLCUVORHHvFMSDDeJBuJvH4mlZdS+C3c7B+Ln3fvivw59w0MMOzP/FYvj75K4PMhDDDszdbM7rk1V4hcPD/MQw858MbEnPvJgf3x29hQPMdwUbqc2qRIhCBVGrQk+Lzm9mq6NkIe2t20N7xOf7NjK2w13rlltM+Sh7VvLu+/YOMib6NyMVR7IQ9u7qY33ibb2bbxd/9mvVnkgD217ZTXvE72fbuHtle1X3VxIuH1QOZ2mmG5yaH4yr0giBKryVCDTJBICG+SpJDJNIiFQlacCmSaREKjKU4FMX5F+p1NIk8OExTwbgeD1b7+zotOrlUBQm2FFp1cbgeDtyzlWdHq1EQie/fMH8z29Br0myiwdr7PkWpSGC2se/8IqtWnRa+y7Ur+Q3FF97/X7ZFjV/4B1Dz1Pw5WrlZ/Y7T330gjFikkE9Xo9jSJ0Vah+Ru7nVWNRFWq3Iacai6qQ9kfOl1eNuirUfZ7wrcbgEqkCOyc6MmEDVdyrXUd5ENR3rUiqwI6LnTx8oQp8M783E66cWjiWCarMZlnRSix5PwSTSBXY0WFXdf9HfK+FKlSBoX6rjEQ8XMutD3nn+1Yg5L755Mrzk0qkh2xMwLOYr0iXa6CJZu9KQ+N7LSSoAuma6EKRn1TiwaUn0bO3r/gy7v42/3nf+cEzxFGq5jD1TYTYJhAqj4pt3iI/mdMpTbQRqD4HhqhA9S40r28L3ZWmz4kUjlAFNvucSNBzomtF5vlJJVarVb53mMgHLMBRRBEaNWez3xFqW5vN0+znyQ/5Ahlho6OjcVdXl+jxiVmhHn8Gq+jendq+cpPRvUO1fuUmo3mHavvKTUb3DtX2lZtM3jtUWRqQ3TRMBrLMjMgVkAiB2waX/1nwgURygTv885BICOzrH+BjPpBICBzo38nHfJBFksDFxUU2NjaWjhMNAwSJ1Ems/n2RDQ0NsQNzn4sVjF1vvyGWGOvp6cmsk+frJLpWISFXo1cVElI1+lQhIVejTxUSajVCYp5AoB0k6AhIRQqJo7OnGRe87gIfxl9N1Y8nlpcTKpUK+/rlSdFLDghpft5fUTho0GJD5WW0RetUWi1PgwMNmbtTFdhXaRBowdj2H3kuVGQeyIkg5GVQtE6mFfPoPMgUSqSjgo4Gdqk/whfxpGeSaqJIxjFGsbCwkF2fBHJh3ZH5RpE2RxtBedJtkmi1PLSMdXwgh0KJAIkBEiLQV5MODw9ndiBvp/I2VIwZd5T4EPJQLvRNGCVSYgr0xSotIyMjYkkPfV7eUFNOHa2cx+X3BkaJAIkoxJAWCBwfHxc9PdhBbFzSRgixzHfahVbNA2x/b8JKoi0QaKpE7KC8cVjGmOha06p5fAgq0aYSS8ITROLk5GRUq9UyAt/XUVgSGNyl0kNrMyBHchCUeSwJejotKSkp+VBh7F9fIy7OdlOyMwAAAABJRU5ErkJggg==">
|
||||||
<defs>
|
<div class="main">
|
||||||
<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>
|
<h1>Welcome to WLED!</h1>
|
||||||
<h3>Thank you for installing my application!</h3>
|
<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>
|
<b>Next steps:</b><br><br>
|
||||||
Connect the module to your local WiFi here!<br>
|
Connect the module to your local WiFi here!<br>
|
||||||
<button onclick="window.location.href='/settings/wifi'">WiFi settings</button><br>
|
<button onclick="window.location.href='/settings/wifi'">WiFi settings</button><br>
|
||||||
<i>Just trying this out in AP mode?</i><br>
|
<i>Just trying this out in AP mode?</i><br>
|
||||||
<button onclick="window.location.href='/sliders'">To the controls!</button>
|
<button onclick="window.location.href='/sliders'">To the controls!</button><br>
|
||||||
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
@ -52,27 +52,17 @@ onclick="B()">Back</button></body></html>)=====";
|
|||||||
// Autogenerated from wled00/data/welcome.htm, do not edit!!
|
// Autogenerated from wled00/data/welcome.htm, do not edit!!
|
||||||
const char PAGE_welcome[] PROGMEM = R"=====(<!DOCTYPE html><html><head><meta charset="utf-8"><meta
|
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="width=device-width" name="viewport"><meta name="theme-color"
|
||||||
content="#333333"><title>WLED Setup</title><style>
|
content="#222222"><title>Welcome!</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}
|
body{font-family:Verdana,Helvetica,sans-serif;text-align:center;background-color:#222;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:#333;color:#fff;border:0 solid #fff;border-radius:25px;filter:drop-shadow(0 0 1px #000)}img{width:999px;max-width:85%;image-rendering:pixelated;image-rendering:crisp-edges;margin:25px 0 -10px 0;animation:fi 1s}@keyframes fi{from{opacity:0}to{opacity:1}}.main{animation:fi 1.5s .7s both}
|
||||||
</style></head><body><svg
|
</style></head><body><img alt=""
|
||||||
style="position:absolute;width:0;height:0;overflow:hidden" version="1.1"
|
src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHEAAAAjCAYAAACjOOUsAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsAAAA7AAWrWiQkAAATfSURBVGhD7ZlPaBVHHMdnS2Ox5iKYGIyYJwQlUTHG6kUwtSAIBsEiBopgKR5i68mbIPgEwZun0uYgouIlobQIKQheIsSLaBSaRFoEc3gtMa9HLaiH7X4n81tn583u/HkTaZ/7gR+zMzvv93bfZ3/777GSkpL/AJFo3Tg/H7OuPtGxY7CTsZnjkd/3lRTi/qMKgfGXt8TAO6KfT2TG1f7u6ROlyBXgI9HaQRW4+JR3ox92Z1p1XO3PLCUVORHHvFMSDDeJBuJvH4mlZdS+C3c7B+Ln3fvivw59w0MMOzP/FYvj75K4PMhDDDszdbM7rk1V4hcPD/MQw858MbEnPvJgf3x29hQPMdwUbqc2qRIhCBVGrQk+Lzm9mq6NkIe2t20N7xOf7NjK2w13rlltM+Sh7VvLu+/YOMib6NyMVR7IQ9u7qY33ibb2bbxd/9mvVnkgD217ZTXvE72fbuHtle1X3VxIuH1QOZ2mmG5yaH4yr0giBKryVCDTJBICG+SpJDJNIiFQlacCmSaREKjKU4FMX5F+p1NIk8OExTwbgeD1b7+zotOrlUBQm2FFp1cbgeDtyzlWdHq1EQie/fMH8z29Br0myiwdr7PkWpSGC2se/8IqtWnRa+y7Ur+Q3FF97/X7ZFjV/4B1Dz1Pw5WrlZ/Y7T330gjFikkE9Xo9jSJ0Vah+Ru7nVWNRFWq3Iacai6qQ9kfOl1eNuirUfZ7wrcbgEqkCOyc6MmEDVdyrXUd5ENR3rUiqwI6LnTx8oQp8M783E66cWjiWCarMZlnRSix5PwSTSBXY0WFXdf9HfK+FKlSBoX6rjEQ8XMutD3nn+1Yg5L755Mrzk0qkh2xMwLOYr0iXa6CJZu9KQ+N7LSSoAuma6EKRn1TiwaUn0bO3r/gy7v42/3nf+cEzxFGq5jD1TYTYJhAqj4pt3iI/mdMpTbQRqD4HhqhA9S40r28L3ZWmz4kUjlAFNvucSNBzomtF5vlJJVarVb53mMgHLMBRRBEaNWez3xFqW5vN0+znyQ/5Ahlho6OjcVdXl+jxiVmhHn8Gq+jendq+cpPRvUO1fuUmo3mHavvKTUb3DtX2lZtM3jtUWRqQ3TRMBrLMjMgVkAiB2waX/1nwgURygTv885BICOzrH+BjPpBICBzo38nHfJBFksDFxUU2NjaWjhMNAwSJ1Ems/n2RDQ0NsQNzn4sVjF1vvyGWGOvp6cmsk+frJLpWISFXo1cVElI1+lQhIVejTxUSajVCYp5AoB0k6AhIRQqJo7OnGRe87gIfxl9N1Y8nlpcTKpUK+/rlSdFLDghpft5fUTho0GJD5WW0RetUWi1PgwMNmbtTFdhXaRBowdj2H3kuVGQeyIkg5GVQtE6mFfPoPMgUSqSjgo4Gdqk/whfxpGeSaqJIxjFGsbCwkF2fBHJh3ZH5RpE2RxtBedJtkmi1PLSMdXwgh0KJAIkBEiLQV5MODw9ndiBvp/I2VIwZd5T4EPJQLvRNGCVSYgr0xSotIyMjYkkPfV7eUFNOHa2cx+X3BkaJAIkoxJAWCBwfHxc9PdhBbFzSRgixzHfahVbNA2x/b8JKoi0QaKpE7KC8cVjGmOha06p5fAgq0aYSS8ITROLk5GRUq9UyAt/XUVgSGNyl0kNrMyBHchCUeSwJejotKSkp+VBh7F9fIy7OdlOyMwAAAABJRU5ErkJggg==">
|
||||||
xmlns="http://www.w3.org/2000/svg"><defs><symbol id="lnr-smile"
|
<div class="main"><h1>Welcome to WLED!</h1><h3>
|
||||||
viewBox="0 0 1024 1024"><path
|
Thank you for installing my application!</h3><b>Next steps:</b><br><br>
|
||||||
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">
|
Connect the module to your local WiFi here!<br><button
|
||||||
</path><path
|
onclick='window.location.href="/settings/wifi"'>WiFi settings</button><br><i>
|
||||||
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">
|
Just trying this out in AP mode?</i><br><button
|
||||||
</path><path
|
onclick='window.location.href="/sliders"'>To the controls!</button><br></div>
|
||||||
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">
|
</body></html>)=====";
|
||||||
</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!!
|
// Autogenerated from wled00/data/liveview.htm, do not edit!!
|
||||||
|
@ -233,6 +233,7 @@ void handleNightlight()
|
|||||||
colNlT[1] = effectSpeed;
|
colNlT[1] = effectSpeed;
|
||||||
colNlT[2] = effectPalette;
|
colNlT[2] = effectPalette;
|
||||||
|
|
||||||
|
strip.setMode(strip.getMainSegmentId(), FX_MODE_STATIC); //make sure seg runtime is reset if left in sunrise mode
|
||||||
effectCurrent = FX_MODE_SUNRISE;
|
effectCurrent = FX_MODE_SUNRISE;
|
||||||
effectSpeed = nightlightDelayMins;
|
effectSpeed = nightlightDelayMins;
|
||||||
effectPalette = 0;
|
effectPalette = 0;
|
||||||
|
@ -22,7 +22,8 @@ bool isAsterisksOnly(const char* str, byte maxLen)
|
|||||||
if (str[i] == 0) break;
|
if (str[i] == 0) break;
|
||||||
if (str[i] != '*') return false;
|
if (str[i] != '*') return false;
|
||||||
}
|
}
|
||||||
return true;
|
//at this point the password contains asterisks only
|
||||||
|
return (str[0] != 0); //false on empty string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,7 +10,9 @@
|
|||||||
* \/ \/ \/
|
* \/ \/ \/
|
||||||
*/
|
*/
|
||||||
//#include "usermod_v2_example.h"
|
//#include "usermod_v2_example.h"
|
||||||
//#include "usermod_temperature.h"
|
#ifdef USERMOD_DALLASTEMPERATURE
|
||||||
|
#include "../usermods/Temperature/usermod_temperature.h"
|
||||||
|
#endif
|
||||||
//#include "usermod_v2_empty.h"
|
//#include "usermod_v2_empty.h"
|
||||||
|
|
||||||
void registerUsermods()
|
void registerUsermods()
|
||||||
@ -21,6 +23,8 @@ void registerUsermods()
|
|||||||
* \/ \/ \/
|
* \/ \/ \/
|
||||||
*/
|
*/
|
||||||
//usermods.add(new MyExampleUsermod());
|
//usermods.add(new MyExampleUsermod());
|
||||||
//usermods.add(new UsermodTemperature());
|
#ifdef USERMOD_DALLASTEMPERATURE
|
||||||
|
usermods.add(new UsermodTemperature());
|
||||||
|
#endif
|
||||||
//usermods.add(new UsermodRenameMe());
|
//usermods.add(new UsermodRenameMe());
|
||||||
}
|
}
|
@ -8,7 +8,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
// version code in format yymmddb (b = daily build)
|
// version code in format yymmddb (b = daily build)
|
||||||
#define VERSION 2009070
|
#define VERSION 2009100
|
||||||
|
|
||||||
// ESP8266-01 (blue) got too little storage space to work with WLED. 0.10.2 is the last release supporting this unit.
|
// ESP8266-01 (blue) got too little storage space to work with WLED. 0.10.2 is the last release supporting this unit.
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user