LED Control
Quick Start
Control the device's RGB light directly. Use this skill only when the user requests a specific color, effect, or to turn LEDs off.
Workflow
- Determine the user's intent:
- Specific color ->
[HW:/led/solid:{"color":[R,G,B]}]
- Two or more colors / mix / gradient ->
[HW:/led/paint:{"colors":[[R,G,B],[R,G,B]],"gradient":true}]
- Effect ->
[HW:/led/effect:{"effect":"name","color":[R,G,B],"speed":1.0}]
- Turn off ->
[HW:/led/off:{}]
- Place markers at start of reply — the device fires them in order before TTS
- Confirm the action to the user
Examples
Input: "Make it purple" / "turn on purple"
Output: [HW:/led/solid:{"color":[100,50,200]}] I've set the LEDs to purple.
Input: "Turn on yellow light" / "set yellow" / "switch to yellow" / "yellow light"
Output: [HW:/led/solid:{"color":[255,220,0]}] Yellow light on!
Input: "Turn on red light" / "set red" / "switch to red" / "red light"
Output: [HW:/led/solid:{"color":[255,0,0]}] Red light on!
Input: "Turn on white light" / "set white" / "white light"
Output: [HW:/led/solid:{"color":[255,255,255]}] White light on!
Input: "Change to cyan purple" / "mix blue and pink" / "gradient from red to orange"
Output: [HW:/led/paint:{"colors":[[0,200,200],[150,0,255]],"gradient":true}] Cyan-to-purple gradient on!
Input: "Do a breathing light with warm color"
Output: [HW:/led/effect:{"effect":"breathing","color":[255,180,100],"speed":0.5}] Breathing effect started with a warm glow.
Input: "Rainbow mode!"
Output: [HW:/led/effect:{"effect":"rainbow","speed":1.0}] Rainbow effect is running!
Input: "Turn off the lights"
Output: [HW:/led/off:{}] LEDs are off.
Input: "I want to relax" / "reading mode" / "goodnight"
Output: Do NOT use this skill. Use Scene skill instead.
Input: Conversational reply needing emotion
Output: Do NOT use this skill. Use Emotion skill instead.
How to Control LEDs
No exec/curl needed. Use inline markers at start of reply — the device fires them in order:
Solid color (automatically stops the current effect)
[HW:/led/solid:{"color":[255,220,0]}] Yellow light on!
Color is an RGB array [R, G, B].
Multi-color / gradient (automatically stops the current effect)
[HW:/led/paint:{"colors":[[0,200,200],[150,0,255]],"gradient":true}] Cyan-to-purple gradient!
colors: list of RGB gradient stops (2+ colors), blended smoothly across the whole strip
gradient: true is REQUIRED — without it the colors paint only the first N pixels and the rest of the strip keeps its old color
- Works with 3+ stops too:
{"colors":[[255,0,0],[255,220,0],[0,200,80]],"gradient":true} = red -> yellow -> green
Effect
[HW:/led/effect:{"effect":"breathing","color":[255,180,100],"speed":0.5}] Breathing warm glow.
effect (required): effect name from table below
color (optional): RGB array
speed (optional): 0.1 (slow) to 5.0 (fast), default 1.0
duration_ms (optional): auto-stop after N ms
Turn off / stop effect
[HW:/led/off:{}] LEDs off.
[HW:/led/effect/stop:{}]
Available effects
| Effect |
Description |
Best for |
breathing |
Slow fade in/out with given color |
Relaxation, idle ambient, meditation |
candle |
Warm flickering like a real candle |
Cozy evening, romantic mood |
rainbow |
Hue cycle across all pixels |
Fun, party, showing off |
notification_flash |
3 quick flashes then auto-stops |
Alerts, timer done, reminders |
pulse |
Radial brightness wave from center |
Attention, heartbeat, alive feeling |
Color suggestions
| Color name |
Color (RGB) |
| White |
[255, 255, 255] |
| Yellow |
[255, 220, 0] |
| Warm white |
[255, 180, 100] |
| Orange |
[255, 100, 0] |
| Red |
[255, 0, 0] |
| Green |
[0, 200, 80] |
| Blue |
[0, 150, 255] |
| Purple |
[100, 50, 200] |
| Pink |
[255, 80, 150] |
Error Handling
- If the API returns an error or is unreachable, inform the user: "I couldn't control the LEDs right now. The hardware service may be unavailable."
- If the user requests an unknown effect name, pick the closest match from the available effects table or tell the user which effects are available.
Rules
- ALWAYS include the JSON body, even for no-argument commands. Every marker is
[HW:/path:{...}] — for commands that take no arguments the body is the empty object {}. Emit [HW:/led/off:{}] and [HW:/led/effect/stop:{}], NEVER the bodyless [HW:/led/off] or [HW:/led/effect/stop]. A marker without :{...} is malformed and the device silently drops it — the light will NOT turn off.
- The marker is NOT a markdown link. Never wrap it as
[some text](HW:/led/off:{}) — emit the plain marker [HW:/led/off:{}] followed by your sentence as normal text.
- "Turn on color X" / "set light X" / "change color X" = THIS skill. Any request naming a color (yellow, red, green, purple, white, orange, pink…) routes here — NOT to Emotion or Scene. Emotion yellow/happy is for YOUR feelings, not user's lighting request.
- NEVER use
/led-color or /led/color for setting color — these endpoints do NOT exist. Always use [HW:/led/solid:{"color":[R,G,B]}].
- Two or more colors at>/led/paint with
"gradient":true. /led/solid takes exactly ONE color — never try to express "cyan purple" as a single blended RGB; paint a gradient instead.
- Solid and paint stop effects automatically. Their HAL endpoints stop the running effect before updating the strip; do not add a separate stop marker. Keep
/led/effect/stop for an explicit stop-only request.
- Solid colors = full brightness. For dim/ambient lighting, use the Scene skill instead.
- Effects run until stopped (unless
duration_ms is set). Starting a new effect auto-stops the previous one.
/led/off also stops any running effect.
- For "make it cozy" or "candle light" -> use
candle effect, NOT a static orange color.
- For "breathing" or "pulsing" requests -> use the matching effect.
- Combine effects with low speed (0.3-0.5) for calm moods, high speed (2.0-3.0) for energy.
- Do NOT use for activity/ambiance lighting (sleeping, relaxing, reading, focus, movie) -> use Scene skill.
- Do NOT use for expressing emotion -> use Emotion skill.
Output Template
[HW:/led/solid:{"color":[100,50,200]}] Purple light on.
Examples:
[HW:/led/solid:{"color":[100,50,200]}] Purple light on.
[HW:/led/effect:{"effect":"breathing","color":[255,180,100],"speed":0.5}] Warm breathing light on.
[HW:/led/off:{}] Lights off.
1---2name: led-control3description: Control the device's RGB light when the user asks for a SPECIFIC color (e.g. "yellow", "red", "yellow", "red", "turn on color X", "enable X light"), an LED effect, or turning LEDs off. Do NOT use for ambiance/activity lighting (use Scene) or emotion expression (use Emotion).4---56# LED Control78## Quick Start9Control the device's RGB light directly. Use this skill only when the user requests a specific color, effect, or to turn LEDs off.1011## Workflow121. Determine the user's intent:13 - Specific color -> `[HW:/led/solid:{"color":[R,G,B]}]`14 - Two or more colors / mix / gradient -> `[HW:/led/paint:{"colors":[[R,G,B],[R,G,B]],"gradient":true}]`15 - Effect -> `[HW:/led/effect:{"effect":"name","color":[R,G,B],"speed":1.0}]`16 - Turn off -> `[HW:/led/off:{}]`172. Place markers at start of reply — the device fires them in order before TTS183. Confirm the action to the user1920## Examples2122Input: "Make it purple" / "turn on purple"23Output: `[HW:/led/solid:{"color":[100,50,200]}]` I've set the LEDs to purple.2425Input: "Turn on yellow light" / "set yellow" / "switch to yellow" / "yellow light"26Output: `[HW:/led/solid:{"color":[255,220,0]}]` Yellow light on!2728Input: "Turn on red light" / "set red" / "switch to red" / "red light"29Output: `[HW:/led/solid:{"color":[255,0,0]}]` Red light on!3031Input: "Turn on white light" / "set white" / "white light"32Output: `[HW:/led/solid:{"color":[255,255,255]}]` White light on!3334Input: "Change to cyan purple" / "mix blue and pink" / "gradient from red to orange"35Output: `[HW:/led/paint:{"colors":[[0,200,200],[150,0,255]],"gradient":true}]` Cyan-to-purple gradient on!3637Input: "Do a breathing light with warm color"38Output: `[HW:/led/effect:{"effect":"breathing","color":[255,180,100],"speed":0.5}]` Breathing effect started with a warm glow.3940Input: "Rainbow mode!"41Output: `[HW:/led/effect:{"effect":"rainbow","speed":1.0}]` Rainbow effect is running!4243Input: "Turn off the lights"44Output: `[HW:/led/off:{}]` LEDs are off.4546Input: "I want to relax" / "reading mode" / "goodnight"47Output: Do NOT use this skill. Use **Scene** skill instead.4849Input: Conversational reply needing emotion50Output: Do NOT use this skill. Use **Emotion** skill instead.5152## How to Control LEDs5354**No exec/curl needed.** Use inline markers at start of reply — the device fires them in order:5556### Solid color (automatically stops the current effect)57```58[HW:/led/solid:{"color":[255,220,0]}] Yellow light on!59```60Color is an RGB array `[R, G, B]`.6162### Multi-color / gradient (automatically stops the current effect)63```64[HW:/led/paint:{"colors":[[0,200,200],[150,0,255]],"gradient":true}] Cyan-to-purple gradient!65```66- `colors`: list of RGB gradient stops (2+ colors), blended smoothly across the whole strip67- `gradient: true` is REQUIRED — without it the colors paint only the first N pixels and the rest of the strip keeps its old color68- Works with 3+ stops too: `{"colors":[[255,0,0],[255,220,0],[0,200,80]],"gradient":true}` = red -> yellow -> green6970### Effect71```72[HW:/led/effect:{"effect":"breathing","color":[255,180,100],"speed":0.5}] Breathing warm glow.73```74- `effect` (required): effect name from table below75- `color` (optional): RGB array76- `speed` (optional): 0.1 (slow) to 5.0 (fast), default 1.077- `duration_ms` (optional): auto-stop after N ms7879### Turn off / stop effect80```81[HW:/led/off:{}] LEDs off.82[HW:/led/effect/stop:{}]83```8485### Available effects8687| Effect | Description | Best for |88|---|---|---|89| `breathing` | Slow fade in/out with given color | Relaxation, idle ambient, meditation |90| `candle` | Warm flickering like a real candle | Cozy evening, romantic mood |91| `rainbow` | Hue cycle across all pixels | Fun, party, showing off |92| `notification_flash` | 3 quick flashes then auto-stops | Alerts, timer done, reminders |93| `pulse` | Radial brightness wave from center | Attention, heartbeat, alive feeling |9495### Color suggestions9697| Color name | Color (RGB) |98|---|---|99| White | `[255, 255, 255]` |100| Yellow | `[255, 220, 0]` |101| Warm white | `[255, 180, 100]` |102| Orange | `[255, 100, 0]` |103| Red | `[255, 0, 0]` |104| Green | `[0, 200, 80]` |105| Blue | `[0, 150, 255]` |106| Purple | `[100, 50, 200]` |107| Pink | `[255, 80, 150]` |108109## Error Handling110- If the API returns an error or is unreachable, inform the user: "I couldn't control the LEDs right now. The hardware service may be unavailable."111- If the user requests an unknown effect name, pick the closest match from the available effects table or tell the user which effects are available.112113## Rules114- **ALWAYS include the JSON body, even for no-argument commands.** Every marker is `[HW:/path:{...}]` — for commands that take no arguments the body is the empty object `{}`. Emit `[HW:/led/off:{}]` and `[HW:/led/effect/stop:{}]`, **NEVER** the bodyless `[HW:/led/off]` or `[HW:/led/effect/stop]`. A marker without `:{...}` is malformed and the device silently drops it — the light will NOT turn off.115- **The marker is NOT a markdown link.** Never wrap it as `[some text](HW:/led/off:{})` — emit the plain marker `[HW:/led/off:{}]` followed by your sentence as normal text.116- **"Turn on color X" / "set light X" / "change color X" = THIS skill.** Any request naming a color (yellow, red, green, purple, white, orange, pink…) routes here — NOT to Emotion or Scene. Emotion yellow/happy is for YOUR feelings, not user's lighting request.117- **NEVER use `/led-color` or `/led/color` for setting color — these endpoints do NOT exist.** Always use `[HW:/led/solid:{"color":[R,G,B]}]`.118- **Two or more colors at once = `/led/paint` with `"gradient":true`.** `/led/solid` takes exactly ONE color — never try to express "cyan purple" as a single blended RGB; paint a gradient instead.119- **Solid and paint stop effects automatically.** Their HAL endpoints stop the running effect before updating the strip; do not add a separate stop marker. Keep `/led/effect/stop` for an explicit stop-only request.120- **Solid colors = full brightness.** For dim/ambient lighting, use the Scene skill instead.121- **Effects run until stopped** (unless `duration_ms` is set). Starting a new effect auto-stops the previous one.122- `/led/off` also stops any running effect.123- For "make it cozy" or "candle light" -> use `candle` effect, NOT a static orange color.124- For "breathing" or "pulsing" requests -> use the matching effect.125- Combine effects with low speed (0.3-0.5) for calm moods, high speed (2.0-3.0) for energy.126- **Do NOT use for activity/ambiance lighting** (sleeping, relaxing, reading, focus, movie) -> use **Scene** skill.127- **Do NOT use for expressing emotion** -> use **Emotion** skill.128129## Output Template130```131[HW:/led/solid:{"color":[100,50,200]}] Purple light on.132```133Examples:134- `[HW:/led/solid:{"color":[100,50,200]}] Purple light on.`135- `[HW:/led/effect:{"effect":"breathing","color":[255,180,100],"speed":0.5}] Warm breathing light on.`136- `[HW:/led/off:{}] Lights off.`