forked from Aircoookie/WLED
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
a4e0931
commit 696e438
Showing
18 changed files
with
443 additions
and
38 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
# Usermods API v2 example usermod | ||
|
||
In this usermod file you can find the documentation on how to take advantage of the new version 2 usermods! | ||
|
||
## Installation | ||
|
||
Copy `usermod_v2_example.h` to the wled00 directory. | ||
Uncomment the corresponding lines in `usermods_list.h` and compile! | ||
_(You shouldn't need to actually install this, it does nothing useful)_ | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,119 @@ | ||
#pragma once | ||
|
||
#include "wled.h" | ||
|
||
/* | ||
* Usermods allow you to add own functionality to WLED more easily | ||
* See: https://github.com/Aircoookie/WLED/wiki/Add-own-functionality | ||
* | ||
* This is an example for a v2 usermod. | ||
* v2 usermods are class inheritance based and can (but don't have to) implement more functions, each of them is shown in this example. | ||
* Multiple v2 usermods can be added to one compilation easily. | ||
* | ||
* Creating a usermod: | ||
* This file serves as an example. If you want to create a usermod, it is recommended to use usermod_v2_empty.h from the usermods folder as a template. | ||
* Please remember to rename the class and file to a descriptive name. | ||
* You may also use multiple .h and .cpp files. | ||
* | ||
* Using a usermod: | ||
* 1. Copy the usermod into the sketch folder (same folder as wled00.ino) | ||
* 2. Register the usermod by adding #include "usermod_filename.h" in the top and registerUsermod(new MyUsermodClass()) in the bottom of usermods_list.cpp | ||
*/ | ||
|
||
//class name. Use something descriptive and leave the ": public Usermod" part :) | ||
class MyExampleUsermod : public Usermod { | ||
private: | ||
//Private class members. You can declare variables and functions only accessible to your usermod here | ||
unsigned long lastTime = 0; | ||
public: | ||
//Functions called by WLED | ||
|
||
/* | ||
* setup() is called once at boot. WiFi is not yet connected at this point. | ||
* You can use it to initialize variables, sensors or similar. | ||
*/ | ||
void setup() { | ||
//Serial.println("Hello from my usermod!"); | ||
} | ||
|
||
|
||
/* | ||
* connected() is called every time the WiFi is (re)connected | ||
* Use it to initialize network interfaces | ||
*/ | ||
void connected() { | ||
//Serial.println("Connected to WiFi!"); | ||
} | ||
|
||
|
||
/* | ||
* loop() is called continuously. Here you can check for events, read sensors, etc. | ||
* | ||
* Tips: | ||
* 1. You can use "if (WLED_CONNECTED)" to check for a successful network connection. | ||
* Additionally, "if (WLED_MQTT_CONNECTED)" is available to check for a connection to an MQTT broker. | ||
* | ||
* 2. Try to avoid using the delay() function. NEVER use delays longer than 10 milliseconds. | ||
* Instead, use a timer check as shown here. | ||
*/ | ||
void loop() { | ||
if (millis() - lastTime > 1000) { | ||
//Serial.println("I'm alive!"); | ||
lastTime = millis(); | ||
} | ||
} | ||
|
||
|
||
/* | ||
* addToJsonInfo() can be used to add custom entries to the /json/info part of the JSON API. | ||
* Creating an "u" object allows you to add custom key/value pairs to the Info section of the WLED web UI. | ||
* Below it is shown how this could be used for e.g. a light sensor | ||
*/ | ||
/* | ||
void addToJsonInfo(JsonObject& root) | ||
{ | ||
int reading = 20; | ||
//this code adds "u":{"Light":[20," lux"]} to the info object | ||
JsonObject user = root["u"]; | ||
if (user.isNull()) user = root.createNestedObject("u"); | ||
JsonArray lightArr = user.createNestedArray("Light"); //name | ||
lightArr.add(reading); //value | ||
lightArr.add(" lux"); //unit | ||
} | ||
*/ | ||
|
||
|
||
/* | ||
* addToJsonState() can be used to add custom entries to the /json/state part of the JSON API (state object). | ||
* Values in the state object may be modified by connected clients | ||
*/ | ||
void addToJsonState(JsonObject& root) | ||
{ | ||
//root["user0"] = userVar0; | ||
} | ||
|
||
|
||
/* | ||
* readFromJsonState() can be used to receive data clients send to the /json/state part of the JSON API (state object). | ||
* Values in the state object may be modified by connected clients | ||
*/ | ||
void readFromJsonState(JsonObject& root) | ||
{ | ||
userVar0 = root["user0"] | userVar0; //if "user0" key exists in JSON, update, else keep old value | ||
//if (root["bri"] == 255) Serial.println(F("Don't burn down your garage!")); | ||
} | ||
|
||
|
||
/* | ||
* getId() allows you to optionally give your V2 usermod an unique ID (please define it in const.h!). | ||
* This could be used in the future for the system to determine whether your usermod is installed. | ||
*/ | ||
uint16_t getId() | ||
{ | ||
return USERMOD_ID_EXAMPLE; | ||
} | ||
|
||
//More methods can be added in the future, this example will then be extended. | ||
//Your usermod will remain compatible as it does not need to implement all methods from the Usermod base class! | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
# Temperature usermod | ||
|
||
Based on the excellent `QuinLED_Dig_Uno_Temp_MQTT` by srg74! | ||
This usermod will read from an attached DS18B20 temperature sensor (as available on the QuinLED Dig-Uno) | ||
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. | ||
|
||
## Installation | ||
|
||
Copy `usermod_temperature.h` to the wled00 directory. | ||
Uncomment the corresponding lines in `usermods_list.h` 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. | ||
|
||
## Project link | ||
|
||
* [QuinLED-Dig-Uno](https://quinled.info/2018/09/15/quinled-dig-uno/) - Project link | ||
|
||
### PlatformIO requirements | ||
|
||
You might have to uncomment `DallasTemperature@~3.8.0`,`OneWire@~2.3.5 under` `[common]` section in `platformio.ini`: | ||
|
||
```ini | ||
# platformio.ini | ||
... | ||
[platformio] | ||
... | ||
; default_envs = esp07 | ||
default_envs = d1_mini | ||
... | ||
[common] | ||
... | ||
lib_deps_external = | ||
... | ||
#For use SSD1306 OLED display uncomment following | ||
U8g2@~2.27.3 | ||
#For Dallas sensor uncomment following 2 lines | ||
DallasTemperature@~3.8.0 | ||
OneWire@~2.3.5 | ||
... | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
#pragma once | ||
|
||
#include "wled.h" | ||
|
||
#include <DallasTemperature.h> //DS18B20 | ||
|
||
//Pin defaults for QuinLed Dig-Uno | ||
#ifdef ARDUINO_ARCH_ESP32 | ||
#define TEMPERATURE_PIN 18 | ||
#else //ESP8266 boards | ||
#define TEMPERATURE_PIN 14 | ||
#endif | ||
|
||
#define TEMP_CELSIUS // Comment out for Fahrenheit | ||
|
||
#define MEASUREMENT_INTERVAL 60000 //1 Minute | ||
|
||
OneWire oneWire(TEMPERATURE_PIN); | ||
DallasTemperature sensor(&oneWire); | ||
|
||
class UsermodTemperature : public Usermod { | ||
private: | ||
//set last reading as "40 sec before boot", so first reading is taken after 20 sec | ||
unsigned long lastMeasurement = UINT32_MAX - 40000; | ||
float temperature = 0.0f; | ||
public: | ||
void getReading() { | ||
sensor.requestTemperatures(); | ||
#ifdef TEMP_CELSIUS | ||
temperature = sensor.getTempCByIndex(0); | ||
#else | ||
temperature = sensor.getTempFByIndex(0); | ||
#endif | ||
} | ||
|
||
void setup() { | ||
sensor.begin(); | ||
sensor.setResolution(9); | ||
} | ||
|
||
void loop() { | ||
if (millis() - lastMeasurement > MEASUREMENT_INTERVAL) | ||
{ | ||
getReading(); | ||
|
||
if (WLED_MQTT_CONNECTED) { | ||
char subuf[38]; | ||
strcpy(subuf, mqttDeviceTopic); | ||
strcat(subuf, "/temperature"); | ||
mqtt->publish(subuf, 0, true, String(temperature).c_str()); | ||
} | ||
lastMeasurement = millis(); | ||
} | ||
} | ||
|
||
void addToJsonInfo(JsonObject& root) { | ||
JsonObject user = root["u"]; | ||
if (user.isNull()) user = root.createNestedObject("u"); | ||
|
||
JsonArray temp = user.createNestedArray("Temperature"); | ||
if (temperature == DEVICE_DISCONNECTED_C) { | ||
temp.add(0); | ||
temp.add(" Sensor Error!"); | ||
return; | ||
} | ||
|
||
temp.add(temperature); | ||
#ifdef TEMP_CELSIUS | ||
temp.add("°C"); | ||
#else | ||
temp.add("°F"); | ||
#endif | ||
} | ||
|
||
uint16_t getId() | ||
{ | ||
return USERMOD_ID_TEMPERATURE; | ||
} | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
#include "wled.h" | ||
/* | ||
* Register your v2 usermods here! | ||
*/ | ||
|
||
/* | ||
* Add/uncomment your usermod filename here (and once more below) | ||
* || || || | ||
* \/ \/ \/ | ||
*/ | ||
//#include "usermod_v2_example.h" | ||
#include "usermod_temperature.h" | ||
//#include "usermod_v2_empty.h" | ||
|
||
void registerUsermods() | ||
{ | ||
/* | ||
* Add your usermod class name here | ||
* || || || | ||
* \/ \/ \/ | ||
*/ | ||
//usermods.add(new MyExampleUsermod()); | ||
usermods.add(new UsermodTemperature()); | ||
//usermods.add(new UsermodRenameMe()); | ||
} |
Oops, something went wrong.