substitutions: device_name: led-controller-jordyn-a1 friendly_name: "Jordyn'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.80 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: 60 name: "${friendly_name}" id: led_strip # Default color on boot restore_mode: RESTORE_DEFAULT_OFF # Color correction for more accurate colors (optional) # Uncomment and adjust if your LEDs look too blue/green # color_correct: [100%, 100%, 100%] # 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();'