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_intervallonger 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, keepupdate_intervalat roughly twice thetransition_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.