3
LED ring
Michal Zaniewicz edited this page 2026-07-22 22:26:25 +02:00

LED ring

The 7-LED WS2812 ring is driven by a single state machine (the control_leds script in base/core.yaml). Nothing paints the ring directly; every state change calls that one script, so the ring always reflects the true device state.

What each state looks like

State Colour Effect
Booting (no Wi-Fi yet) red Rainbow Slow
Booting (Wi-Fi up) violet Rainbow Slow
BLE provisioning warm white Pulse Medium
No Wi-Fi or no Home Assistant red Pulse Medium
Awake, waiting for speech violet solid
Listening magenta Listening effect (default Comet)
Thinking violet Thinking effect (default Pulse Fast)
Replying violet Replying effect (default Wipe)
Timer counting down violet Pulse Slow
Timer or alarm ringing violet Pulse Fast
Pipeline error red Pulse Fast
Volume changed green brief Pulse Fast, then back to state
Idle off off

The three bold rows are the phases you can restyle from Home Assistant. The phase colour is fixed (so the ring still reads as listening / thinking / replying); only the animation changes.

Picking effects from Home Assistant

Three select entities choose the animation for each phase:

  • Listening effect
  • Thinking effect
  • Replying effect

Each offers the full effect list below. Changing one takes effect immediately, and the choice is remembered across reboots. LED Ring Brightness sets the ring brightness that every effect uses.

The effect list: solid plus 14 animations

Effect Kind
solid steady colour
Pulse Slow / Pulse Medium / Pulse Fast brightness pulse, three speeds
Breathe smooth sine fade (custom)
Wipe colour wipe around the ring
Scan a dot sweeping back and forth
Spinner a bright dot with a dim trailing pixel (custom)
Comet a head with an exponential fading tail (custom)
Twinkle random pixels twinkle
Random Twinkle twinkle in random colours
Fireworks sparks that burst and fade
Fire a flickering fire pattern (custom)
Rainbow Slow / Rainbow Fast a rotating rainbow, two speeds

The four marked custom are addressable_lambda effects written for this project; the rest are ESPHome built-ins. Effects that follow the phase colour (solid, pulses, Breathe, Wipe, Scan, Spinner, Comet) keep reading as the current phase; the rainbows, Fire and the twinkles use their own colours.

Notes

  • The Pulse effects need an update_interval longer than their transition, or they look like a steady colour instead of pulsing. The bundled ones are already tuned this way. If you add your own pulse, keep update_interval at roughly twice the transition_length.
  • The ring boots dark on purpose: the amplifier is gated off until the first playback, which also keeps the ring silent at boot. See Audio architecture.