mirror of
https://github.com/wled/WLED.git
synced 2025-04-23 14:27:18 +00:00
commit
73faa13811
@ -5,7 +5,7 @@
|
||||
src_dir = ./wled00
|
||||
data_dir = ./wled00/data
|
||||
lib_extra_dirs = ./wled00/src
|
||||
env_default = nodemcuv2
|
||||
; env_default = nodemcuv2
|
||||
; env_default = esp01
|
||||
; env_default = esp01_1m
|
||||
; env_default = d1_mini
|
||||
@ -16,8 +16,10 @@ env_default = nodemcuv2
|
||||
framework = arduino
|
||||
monitor_speed = 115200
|
||||
board_build.flash_mode = dout
|
||||
upload_speed = 921600
|
||||
upload_speed = 115200
|
||||
upload_speed_fast = 921600
|
||||
build_flags =
|
||||
-w ; supresses all C/C++ warnings
|
||||
; -D VERSION=0.8.4
|
||||
; -D DEBUG
|
||||
# TODO replace libs in /lib with managed libs in here if possible.
|
||||
@ -36,9 +38,41 @@ lib_deps_external =
|
||||
#Timezone@1.2.1
|
||||
|
||||
[common:esp8266]
|
||||
platform = espressif8266@2.0.4
|
||||
# ------------------------------------------------------------------------------
|
||||
# PLATFORM:
|
||||
# !! DO NOT confuse platformio's ESP8266 development platform with Arduino core for ESP8266
|
||||
# We use Arduino Core 2.5.0 (platformIO 2.0.4) as default
|
||||
#
|
||||
# arduino core 2.3.0 = platformIO 1.5.0
|
||||
# arduino core 2.4.0 = platformIO 1.6.0
|
||||
# arduino core 2.4.1 = platformIO 1.7.3
|
||||
# arduino core 2.4.2 = platformIO 1.8.0
|
||||
# arduino core 2.5.0 = platformIO 2.0.4
|
||||
# arduino core stage = platformIO feature#stage
|
||||
# ------------------------------------------------------------------------------
|
||||
arduino_core_2_3_0 = espressif8266@1.5.0
|
||||
arduino_core_2_4_0 = espressif8266@1.6.0
|
||||
arduino_core_2_4_1 = espressif8266@1.7.3
|
||||
arduino_core_2_4_2 = espressif8266@1.8.0
|
||||
arduino_core_2_5_0 = espressif8266@2.0.4
|
||||
arduino_core_stage = https://github.com/platformio/platform-espressif8266.git#feature/stage
|
||||
platform = ${common:esp8266.arduino_core_2_5_0}
|
||||
build_flags =
|
||||
-D PIO_FRAMEWORK_ARDUINO_LWIP_HIGHER_BANDWIDTH
|
||||
-Wl,-Teagle.flash.4m3m.ld ;;;; Required for core > v2.5.0 or staging version 4MB Flash 3MB SPIFFs
|
||||
|
||||
[common:esp8266_1M]
|
||||
platform = ${common:esp8266.platform}
|
||||
build_flags =
|
||||
-D PIO_FRAMEWORK_ARDUINO_LWIP2_HIGHER_BANDWIDTH_LOW_FLASH
|
||||
-Wl,-Teagle.flash.1m512.ld ;;;; Required for core > v2.5.0 or staging version 1MB Flash 512kB SPIFFs
|
||||
; -D WLED_DISABLE_MOBILE_UI
|
||||
-D WLED_DISABLE_OTA
|
||||
; -D WLED_DISABLE_ALEXA
|
||||
-D WLED_DISABLE_BLYNK
|
||||
-D WLED_DISABLE_CRONIXIE
|
||||
-D WLED_DISABLE_HUESYNC
|
||||
-D WLED_DISABLE_INFRARED
|
||||
|
||||
[common:esp8266_512k]
|
||||
platform = espressif8266@1.7.0
|
||||
@ -53,7 +87,7 @@ build_flags =
|
||||
-D WLED_DISABLE_INFRARED
|
||||
|
||||
[common:esp32]
|
||||
platform = espressif32@1.5.0
|
||||
platform = espressif32@1.7.0
|
||||
build_flags =
|
||||
-D PIO_FRAMEWORK_ARDUINO_LWIP2_HIGHER_BANDWIDTH
|
||||
-D ARDUINO_ARCH_ESP32
|
||||
@ -86,13 +120,13 @@ lib_deps =
|
||||
|
||||
[env:esp01_1m]
|
||||
board = esp01_1m
|
||||
platform = ${common:esp8266.platform}
|
||||
platform = ${common:esp8266_1M.platform}
|
||||
monitor_speed = ${common.monitor_speed}
|
||||
upload_speed = ${common.upload_speed}
|
||||
framework = ${common.framework}
|
||||
build_flags =
|
||||
${common.build_flags}
|
||||
${common:esp8266.build_flags}
|
||||
${common:esp8266_1M.build_flags}
|
||||
# disable IR because there is no pin for it
|
||||
-D WLED_DISABLE_INFRARED
|
||||
lib_deps =
|
||||
@ -115,11 +149,13 @@ lib_deps =
|
||||
board = esp32dev
|
||||
platform = ${common:esp32.platform}
|
||||
monitor_speed = ${common.monitor_speed}
|
||||
upload_speed = ${common.upload_speed}
|
||||
upload_speed = ${common.upload_speed_fast}
|
||||
framework = ${common.framework}
|
||||
build_flags =
|
||||
${common.build_flags}
|
||||
${common:esp32.build_flags}
|
||||
lib_deps =
|
||||
${common.lib_deps_external}
|
||||
lib_ignore =
|
||||
IRremoteESP8266
|
||||
|
@ -24,6 +24,8 @@
|
||||
//#define WLED_DISABLE_INFRARED //there is no pin left for this on ESP8266-01
|
||||
//#define WLED_DISABLE_MOBILE_UI
|
||||
|
||||
//#define WLED_ENABLE_HOMEASSISTANT_AUTODISCOVERY
|
||||
|
||||
#define WLED_DISABLE_FILESYSTEM //SPIFFS is not used by any WLED feature yet
|
||||
//#define WLED_ENABLE_FS_SERVING //Enable sending html file from SPIFFS before serving progmem version
|
||||
//#define WLED_ENABLE_FS_EDITOR //enable /edit page for editing SPIFFS content. Will also be disabled with OTA lock
|
||||
|
@ -44,6 +44,10 @@ void onMqttConnect(bool sessionPresent)
|
||||
strcat(subuf, "/api");
|
||||
mqtt->subscribe(subuf, 0);
|
||||
}
|
||||
|
||||
#ifdef WLED_ENABLE_HOMEASSISTANT_AUTODISCOVERY
|
||||
sendHADiscoveryMQTT();
|
||||
#endif
|
||||
publishMqtt();
|
||||
}
|
||||
|
||||
@ -95,6 +99,247 @@ void publishMqtt()
|
||||
mqtt->publish(subuf, 0, true, apires);
|
||||
}
|
||||
|
||||
#ifdef WLED_ENABLE_HOMEASSISTANT_AUTODISCOVERY
|
||||
void sendHADiscoveryMQTT(){
|
||||
/*
|
||||
|
||||
YYYY is discovery tipic
|
||||
XXXX is device name
|
||||
|
||||
Send out HA MQTT Discovery message on MQTT connect (~2.4kB):
|
||||
{
|
||||
"name": "XXXX",
|
||||
"stat_t":"YYYY/c",
|
||||
"cmd_t":"YYYY",
|
||||
"rgb_stat_t":"YYYY/c",
|
||||
"rgb_cmd_t":"YYYY/col",
|
||||
"bri_cmd_t":"YYYY",
|
||||
"bri_stat_t":"YYYY/g",
|
||||
"bri_val_tpl":"{{value}}",
|
||||
"rgb_cmd_tpl":"{{'#%02x%02x%02x' | format(red, green, blue)}}",
|
||||
"rgb_val_tpl":"{{value[1:3]|int(base=16)}},{{value[3:5]|int(base=16)}},{{value[5:7]|int(base=16)}}",
|
||||
"qos": 0,
|
||||
"opt":true,
|
||||
"pl_on": "ON",
|
||||
"pl_off": "OFF",
|
||||
"fx_cmd_t":"YYYY/api",
|
||||
"fx_stat_t":"YYYY/api",
|
||||
"fx_val_tpl":"{{value}}",
|
||||
"fx_list":[
|
||||
"[FX=00] STATIC",
|
||||
"[FX=01] BLINK",
|
||||
"[FX=02] BREATH",
|
||||
"[FX=03] COLOR_WIPE",
|
||||
"[FX=04] COLOR_WIPE_RANDOM",
|
||||
"[FX=05] RANDOM_COLOR",
|
||||
"[FX=06] COLOR_SWEEP",
|
||||
"[FX=07] DYNAMIC",
|
||||
"[FX=08] RAINBOW",
|
||||
"[FX=09] RAINBOW_CYCLE",
|
||||
"[FX=10] SCAN",
|
||||
"[FX=11] DUAL_SCAN",
|
||||
"[FX=12] FADE",
|
||||
"[FX=13] THEATER_CHASE",
|
||||
"[FX=14] THEATER_C_RAINBOW",
|
||||
"[FX=15] RUNNING_LIGHTS",
|
||||
"[FX=16] SAW",
|
||||
"[FX=17] TWINKLE",
|
||||
"[FX=18] DISSOLVE",
|
||||
"[FX=19] DISSOLVE_RANDOM",
|
||||
"[FX=20] SPARKLE",
|
||||
"[FX=21] FLASH_SPARKLE",
|
||||
"[FX=22] HYPER_SPARKLE",
|
||||
"[FX=23] STROBE",
|
||||
"[FX=24] STROBE_RAINBOW",
|
||||
"[FX=25] MULTI_STROBE",
|
||||
"[FX=26] BLINK_RAINBOW",
|
||||
"[FX=27] ANDROID",
|
||||
"[FX=28] CHASE_COLOR",
|
||||
"[FX=29] CHASE_RANDOM",
|
||||
"[FX=30] CHASE_RAINBOW",
|
||||
"[FX=31] CHASE_FLASH",
|
||||
"[FX=32] CHASE_FLASH_RANDOM",
|
||||
"[FX=33] CHASE_RAINBOW_WHITE",
|
||||
"[FX=34] COLORFUL",
|
||||
"[FX=35] TRAFFIC_LIGHT",
|
||||
"[FX=36] COLOR_SWEEP_RANDOM",
|
||||
"[FX=37] RUNNING_COLOR",
|
||||
"[FX=38] RUNNING_RED_BLUE",
|
||||
"[FX=39] RUNNING_RANDOM",
|
||||
"[FX=40] LARSON_SCANNER",
|
||||
"[FX=41] COMET",
|
||||
"[FX=42] FIREWORKS",
|
||||
"[FX=43] RAIN",
|
||||
"[FX=44] MERRY_CHRISTMAS",
|
||||
"[FX=45] FIRE_FLICKER",
|
||||
"[FX=46] GRADIENT",
|
||||
"[FX=47] LOADING",
|
||||
"[FX=48] DUAL_COLOR_WIPE_IN_OUT",
|
||||
"[FX=49] DUAL_COLOR_WIPE_IN_IN",
|
||||
"[FX=50] DUAL_COLOR_WIPE_OUT_OUT",
|
||||
"[FX=51] DUAL_COLOR_WIPE_OUT_IN",
|
||||
"[FX=52] CIRCUS_COMBUSTUS",
|
||||
"[FX=53] HALLOWEEN",
|
||||
"[FX=54] TRICOLOR_CHASE",
|
||||
"[FX=55] TRICOLOR_WIPE",
|
||||
"[FX=56] TRICOLOR_FADE",
|
||||
"[FX=57] LIGHTNING",
|
||||
"[FX=58] ICU",
|
||||
"[FX=59] MULTI_COMET",
|
||||
"[FX=60] DUAL_LARSON_SCANNER",
|
||||
"[FX=61] RANDOM_CHASE",
|
||||
"[FX=62] OSCILLATE",
|
||||
"[FX=63] PRIDE_2015",
|
||||
"[FX=64] JUGGLE",
|
||||
"[FX=65] PALETTE",
|
||||
"[FX=66] FIRE_2012",
|
||||
"[FX=67] COLORWAVES",
|
||||
"[FX=68] BPM",
|
||||
"[FX=69] FILLNOISE8",
|
||||
"[FX=70] NOISE16_1",
|
||||
"[FX=71] NOISE16_2",
|
||||
"[FX=72] NOISE16_3",
|
||||
"[FX=73] NOISE16_4",
|
||||
"[FX=74] COLORTWINKLE",
|
||||
"[FX=75] LAKE",
|
||||
"[FX=76] METEOR",
|
||||
"[FX=77] METEOR_SMOOTH",
|
||||
"[FX=78] RAILWAY",
|
||||
"[FX=79] RIPPLE"
|
||||
]
|
||||
|
||||
}
|
||||
|
||||
*/
|
||||
char bufc[38], bufcol[38], bufg[38], bufapi[38];
|
||||
|
||||
strcpy(bufc, mqttDeviceTopic);
|
||||
strcpy(bufcol, mqttDeviceTopic);
|
||||
strcpy(bufg, mqttDeviceTopic);
|
||||
strcpy(bufapi, mqttDeviceTopic);
|
||||
|
||||
strcat(bufc, "/c");
|
||||
strcat(bufcol, "/col");
|
||||
strcat(bufg, "/g");
|
||||
strcat(bufapi, "/api");
|
||||
|
||||
|
||||
DynamicJsonBuffer jsonBuffer(JSON_ARRAY_SIZE(80) + JSON_OBJECT_SIZE(18) + 3000);
|
||||
JsonObject& root = jsonBuffer.createObject();
|
||||
root["name"] = serverDescription;
|
||||
root["stat_t"] = bufc;
|
||||
root["cmd_t"] = mqttDeviceTopic;
|
||||
root["rgb_stat_t"] = bufc;
|
||||
root["rgb_cmd_t"] = bufcol;
|
||||
root["bri_cmd_t"] = mqttDeviceTopic;
|
||||
root["bri_stat_t"] = bufg;
|
||||
root["bri_val_tpl"] = "{{value}}";
|
||||
root["rgb_cmd_tpl"] = "{{'#%02x%02x%02x' | format(red, green, blue)}}";
|
||||
root["rgb_val_tpl"] = "{{value[1:3]|int(base=16)}},{{value[3:5]|int(base=16)}},{{value[5:7]|int(base=16)}}";
|
||||
root["qos"] = 0;
|
||||
root["opt"] = true;
|
||||
root["pl_on"] = "ON";
|
||||
root["pl_off"] = "OFF";
|
||||
root["fx_cmd_t"] = bufapi;
|
||||
root["fx_stat_t"] = bufapi;
|
||||
root["fx_val_tpl"] = "{{value}}";
|
||||
|
||||
JsonArray& fx_list = root.createNestedArray("fx_list");
|
||||
// There should be a better way to do this like a for loop but there is no WS2812FX::getModeCount() or WS2812FX::getModeName(), instead there is "JSON_mode_names"
|
||||
fx_list.add("[FX=00] STATIC");
|
||||
fx_list.add("[FX=01] BLINK");
|
||||
fx_list.add("[FX=02] BREATH");
|
||||
fx_list.add("[FX=03] COLOR_WIPE");
|
||||
fx_list.add("[FX=04] COLOR_WIPE_RANDOM");
|
||||
fx_list.add("[FX=05] RANDOM_COLOR");
|
||||
fx_list.add("[FX=06] COLOR_SWEEP");
|
||||
fx_list.add("[FX=07] DYNAMIC");
|
||||
fx_list.add("[FX=08] RAINBOW");
|
||||
fx_list.add("[FX=09] RAINBOW_CYCLE");
|
||||
fx_list.add("[FX=10] SCAN");
|
||||
fx_list.add("[FX=11] DUAL_SCAN");
|
||||
fx_list.add("[FX=12] FADE");
|
||||
fx_list.add("[FX=13] THEATER_CHASE");
|
||||
fx_list.add("[FX=14] THEATER_C_RAINBOW");
|
||||
fx_list.add("[FX=15] RUNNING_LIGHTS");
|
||||
fx_list.add("[FX=16] SAW");
|
||||
fx_list.add("[FX=17] TWINKLE");
|
||||
fx_list.add("[FX=18] DISSOLVE");
|
||||
fx_list.add("[FX=19] DISSOLVE_RANDOM");
|
||||
fx_list.add("[FX=20] SPARKLE");
|
||||
fx_list.add("[FX=21] FLASH_SPARKLE");
|
||||
fx_list.add("[FX=22] HYPER_SPARKLE");
|
||||
fx_list.add("[FX=23] STROBE");
|
||||
fx_list.add("[FX=24] STROBE_RAINBOW");
|
||||
fx_list.add("[FX=25] MULTI_STROBE");
|
||||
fx_list.add("[FX=26] BLINK_RAINBOW");
|
||||
fx_list.add("[FX=27] ANDROID");
|
||||
fx_list.add("[FX=28] CHASE_COLOR");
|
||||
fx_list.add("[FX=29] CHASE_RANDOM");
|
||||
fx_list.add("[FX=30] CHASE_RAINBOW");
|
||||
fx_list.add("[FX=31] CHASE_FLASH");
|
||||
fx_list.add("[FX=32] CHASE_FLASH_RANDOM");
|
||||
fx_list.add("[FX=33] CHASE_RAINBOW_WHITE");
|
||||
fx_list.add("[FX=34] COLORFUL");
|
||||
fx_list.add("[FX=35] TRAFFIC_LIGHT");
|
||||
fx_list.add("[FX=36] COLOR_SWEEP_RANDOM");
|
||||
fx_list.add("[FX=37] RUNNING_COLOR");
|
||||
fx_list.add("[FX=38] RUNNING_RED_BLUE");
|
||||
fx_list.add("[FX=39] RUNNING_RANDOM");
|
||||
fx_list.add("[FX=40] LARSON_SCANNER");
|
||||
fx_list.add("[FX=41] COMET");
|
||||
fx_list.add("[FX=42] FIREWORKS");
|
||||
fx_list.add("[FX=43] RAIN");
|
||||
fx_list.add("[FX=44] MERRY_CHRISTMAS");
|
||||
fx_list.add("[FX=45] FIRE_FLICKER");
|
||||
fx_list.add("[FX=46] GRADIENT");
|
||||
fx_list.add("[FX=47] LOADING");
|
||||
fx_list.add("[FX=48] DUAL_COLOR_WIPE_IN_OUT");
|
||||
fx_list.add("[FX=49] DUAL_COLOR_WIPE_IN_IN");
|
||||
fx_list.add("[FX=50] DUAL_COLOR_WIPE_OUT_OUT");
|
||||
fx_list.add("[FX=51] DUAL_COLOR_WIPE_OUT_IN");
|
||||
fx_list.add("[FX=52] CIRCUS_COMBUSTUS");
|
||||
fx_list.add("[FX=53] HALLOWEEN");
|
||||
fx_list.add("[FX=54] TRICOLOR_CHASE");
|
||||
fx_list.add("[FX=55] TRICOLOR_WIPE");
|
||||
fx_list.add("[FX=56] TRICOLOR_FADE");
|
||||
fx_list.add("[FX=57] LIGHTNING");
|
||||
fx_list.add("[FX=58] ICU");
|
||||
fx_list.add("[FX=59] MULTI_COMET");
|
||||
fx_list.add("[FX=60] DUAL_LARSON_SCANNER");
|
||||
fx_list.add("[FX=61] RANDOM_CHASE");
|
||||
fx_list.add("[FX=62] OSCILLATE");
|
||||
fx_list.add("[FX=63] PRIDE_2015");
|
||||
fx_list.add("[FX=64] JUGGLE");
|
||||
fx_list.add("[FX=65] PALETTE");
|
||||
fx_list.add("[FX=66] FIRE_2012");
|
||||
fx_list.add("[FX=67] COLORWAVES");
|
||||
fx_list.add("[FX=68] BPM");
|
||||
fx_list.add("[FX=69] FILLNOISE8");
|
||||
fx_list.add("[FX=70] NOISE16_1");
|
||||
fx_list.add("[FX=71] NOISE16_2");
|
||||
fx_list.add("[FX=72] NOISE16_3");
|
||||
fx_list.add("[FX=73] NOISE16_4");
|
||||
fx_list.add("[FX=74] COLORTWINKLE");
|
||||
fx_list.add("[FX=75] LAKE");
|
||||
fx_list.add("[FX=76] METEOR");
|
||||
fx_list.add("[FX=77] METEOR_SMOOTH");
|
||||
fx_list.add("[FX=78] RAILWAY");
|
||||
fx_list.add("[FX=79] RIPPLE");
|
||||
|
||||
size_t jlen = root.measureLength() + 1;
|
||||
char buffer[jlen], pubt[21 + sizeof(serverDescription) + 8];
|
||||
root.printTo(buffer, jlen);
|
||||
|
||||
DEBUG_PRINT("HA Discovery Sending >>");
|
||||
DEBUG_PRINTLN(buffer);
|
||||
|
||||
strcpy(pubt, "homeassistant/light/");
|
||||
strcat(pubt, serverDescription);
|
||||
strcat(pubt, "/config");
|
||||
mqtt->publish(pubt, 0, true, buffer);
|
||||
}
|
||||
#endif
|
||||
|
||||
bool initMqtt()
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user