199 lines
4.3 KiB
YAML
199 lines
4.3 KiB
YAML
substitutions:
|
|
device_name: led-controller-polly-a1m
|
|
friendly_name: "Polly's LED Controller"
|
|
|
|
esphome:
|
|
name: ${device_name}
|
|
friendly_name: ${friendly_name}
|
|
|
|
esp32:
|
|
board: esp32-c3-devkitm-1
|
|
framework:
|
|
type: esp-idf
|
|
|
|
# Enable logging
|
|
logger:
|
|
|
|
# Enable Home Assistant API
|
|
api:
|
|
encryption:
|
|
key: !secret api_encryption_key
|
|
|
|
# Enable over-the-air updates
|
|
ota:
|
|
- platform: esphome
|
|
password: !secret ota_password
|
|
|
|
wifi:
|
|
ssid: !secret wifi_iot_ssid
|
|
password: !secret wifi_password
|
|
manual_ip:
|
|
static_ip: 192.168.69.181
|
|
gateway: 192.168.69.1
|
|
subnet: 255.255.255.0
|
|
# Enable fallback hotspot (captive portal) in case wifi connection fails
|
|
ap:
|
|
ssid: "${friendly_name} Fallback"
|
|
password: !secret fallback_password
|
|
|
|
# Prevents aggressive reconnection attempts
|
|
power_save_mode: none # Use 'light' for battery devices
|
|
|
|
# Slower but more reliable connection
|
|
fast_connect: true
|
|
|
|
# Handle connection failures gracefully
|
|
on_connect:
|
|
- logger.log: "Wi-Fi connected!"
|
|
on_disconnect:
|
|
- logger.log: "Wi-Fi disconnected!"
|
|
|
|
# Reduce mDNS traffic
|
|
mdns:
|
|
disabled: false # Set to true if you use static IPs and don't need discovery
|
|
|
|
#captive_portal:
|
|
web_server:
|
|
port: 80
|
|
|
|
# LED Light configuration
|
|
light:
|
|
- platform: esp32_rmt_led_strip
|
|
rgb_order: GRB
|
|
chipset: WS2812
|
|
pin: GPIO7
|
|
num_leds: 10
|
|
name: "${friendly_name}"
|
|
id: led_strip
|
|
|
|
# Default color on boot
|
|
restore_mode: RESTORE_DEFAULT_OFF
|
|
|
|
|
|
# Effects - you can enable these for more features!
|
|
effects:
|
|
# Basic effects
|
|
- random:
|
|
name: "Random"
|
|
transition_length: 5s
|
|
update_interval: 7s
|
|
|
|
- strobe:
|
|
name: "Strobe"
|
|
colors:
|
|
- state: true
|
|
brightness: 100%
|
|
red: 100%
|
|
green: 100%
|
|
blue: 100%
|
|
duration: 500ms
|
|
- state: false
|
|
duration: 250ms
|
|
|
|
- flicker:
|
|
name: "Flicker"
|
|
alpha: 95%
|
|
intensity: 1.5%
|
|
|
|
# Rainbow effects
|
|
- addressable_rainbow:
|
|
name: "Rainbow"
|
|
speed: 10
|
|
width: 50
|
|
|
|
- addressable_color_wipe:
|
|
name: "Color Wipe"
|
|
colors:
|
|
- red: 100%
|
|
green: 0%
|
|
blue: 0%
|
|
num_leds: 1
|
|
- red: 0%
|
|
green: 100%
|
|
blue: 0%
|
|
num_leds: 1
|
|
- red: 0%
|
|
green: 0%
|
|
blue: 100%
|
|
num_leds: 1
|
|
add_led_interval: 100ms
|
|
reverse: false
|
|
|
|
- addressable_scan:
|
|
name: "Scan"
|
|
move_interval: 100ms
|
|
scan_width: 3
|
|
|
|
- addressable_twinkle:
|
|
name: "Twinkle"
|
|
twinkle_probability: 5%
|
|
progress_interval: 4ms
|
|
|
|
- addressable_fireworks:
|
|
name: "Fireworks"
|
|
update_interval: 32ms
|
|
spark_probability: 10%
|
|
use_random_color: true
|
|
fade_out_rate: 120
|
|
|
|
# Pulse effect
|
|
- pulse:
|
|
name: "Pulse"
|
|
transition_length: 1s
|
|
update_interval: 1s
|
|
|
|
# Sensors for monitoring
|
|
sensor:
|
|
# WiFi Signal Strength
|
|
- platform: wifi_signal
|
|
name: "${friendly_name} WiFi Signal"
|
|
update_interval: 60s
|
|
|
|
# Uptime
|
|
- platform: uptime
|
|
name: "${friendly_name} Uptime"
|
|
|
|
# Diagnostic sensors
|
|
- platform: wifi_signal
|
|
name: "${device_name} WiFi Signal"
|
|
update_interval: 60s
|
|
|
|
- platform: uptime
|
|
name: "${device_name} Uptime"
|
|
update_interval: 60s
|
|
|
|
# Text sensors
|
|
text_sensor:
|
|
# ESPHome version
|
|
- platform: version
|
|
name: "${friendly_name} ESPHome Version"
|
|
|
|
# WiFi info
|
|
- platform: wifi_info
|
|
ip_address:
|
|
name: "${device_name} IP Address"
|
|
ssid:
|
|
name: "${device_name} Connected SSID"
|
|
bssid:
|
|
name: "${device_name} BSSID"
|
|
|
|
# Button to restart ESP32
|
|
button:
|
|
- platform: restart
|
|
name: "${friendly_name} Restart"
|
|
|
|
# Watchdog to auto-reboot if things go wrong
|
|
interval:
|
|
- interval: 5min
|
|
then:
|
|
- if:
|
|
condition:
|
|
and:
|
|
- lambda: 'return millis() > 300000;' # >5 min uptime
|
|
- not:
|
|
wifi.connected:
|
|
then:
|
|
- logger.log: "Wi-Fi not connected for 5 min, rebooting..."
|
|
- delay: 10s
|
|
- lambda: 'App.safe_reboot();'
|