Files
tomatocream e76e78deec Pull WLED state from device; add Sunrise preset and presets docs
- wled_pull: update full.json, state.json, info.json from device
- Add wled_config/presets/sunrise.json (psave payload for preset 1)
- README: document defining and pushing presets

Made-with: Cursor
2026-03-09 01:03:24 +08:00

128 lines
4.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Home Assistant
Scripts and config for managing WLED at `192.168.240.30`.
## WLED scripts
Python 3, no extra deps (stdlib only).
### Pull (read state/config from WLED)
```bash
# Full snapshot (state + info + effects + palettes)
python wled_pull.py
# Just state, info, or config
python wled_pull.py state
python wled_pull.py info
python wled_pull.py cfg
# Save to file
python wled_pull.py --save wled_config/backup.json
python wled_pull.py full -o wled_config/full.json
```
### Push (send commands to WLED)
```bash
python wled_push.py --on
python wled_push.py --off
python wled_push.py --toggle
python wled_push.py --bri 128
python wled_push.py --preset 1
python wled_push.py --file wled_config/state.json
python wled_push.py --file wled_config/sunrise_8am.json
python wled_push.py --file wled_config/presets/sunrise.json # save preset to device (psave)
```
Use `--host` to override the default `192.168.240.30`.
### Brightness and white channel
WLED has three separate level-style controls:
| Control | JSON | Description |
|--------|------|--------------|
| **Global brightness** | `state.bri` | Main dimmer for the whole light (0255). When off, this is the brightness used when you turn on. |
| **Segment brightness** | `state.seg[].bri` | Per-segment brightness (0255). Multiplies with the segments color/effect. |
| **White channel** | `state.seg[].col[0][3]` | The W in RGBW: primary color is `[R, G, B, W]`. White channel 0255 (how much dedicated white is mixed in). |
**CLI:**
- `--bri N` — global brightness.
- `--seg-bri N` — segment 0 brightness.
- `--white N` — segment 0 primary colors white channel (0255). Use with Solid effect for predictable results.
```bash
python wled_push.py --on --bri 200 # global only
python wled_push.py --seg-bri 128 # dim segment 0 only
python wled_push.py --white 255 # full white channel (segment 0)
python wled_push.py --bri 255 --seg-bri 255 --white 255 # all full
```
### White vs warm light (CCT)
Your WLED device (**WLED-Gledopto** at `192.168.240.30`) supports **CCT** (color temperature). This controls the **warm vs cool** blend of the white output; the **white channel** (`--white`) controls how much white is mixed in (e.g. with RGB). In the API, segment `cct` uses a relative scale:
- **`cct: 0`** → warmest (warm white, ~2700 K)
- **`cct: 255`** → coolest (cool white, ~6500 K)
**Current state** (from your last pull): light **on**, brightness **254**, segment **0** with **Solid** effect (`fx: 0`), **CCT 0** (warm), primary color dim gray `[56,56,56,56]`.
**Set cool/white light:**
```bash
python wled_push.py --on --bri 255 --cct 255
# or from a JSON file:
python wled_push.py --file wled_config/white.json
```
**Set warm light:**
```bash
python wled_push.py --on --bri 255 --cct 0
# or:
python wled_push.py --file wled_config/warm.json
```
To only change color temperature and keep current on/off and brightness, use only `--cct`:
```bash
python wled_push.py --cct 255 # switch to cool white
python wled_push.py --cct 0 # switch to warm
```
### Config backup
`wled_config/` holds JSON pulled from the device: `full.json`, `state.json`, `info.json`. Use `wled_push.py --file wled_config/state.json` to restore state.
### Presets (define in JSON, push to device)
Presets are stored on the WLED device; you can **define** them in JSON and **push** once to create/update them. Use the WLED `psave` API: include `psave` (preset slot 1250), optional `n` (name), `ib` (include brightness), and the state you want saved.
**Example — Sunrise preset** (warm white, Solid, for the 8am alarm):
```bash
python wled_push.py --file wled_config/presets/sunrise.json
```
That sends the payload in `wled_config/presets/sunrise.json` to the device. The device saves it as preset ID 1 named "Sunrise". Home Assistant can then use `select.wled_gledopto_preset` with option "Sunrise" in the sunrise alarm script.
- **full.json** is a snapshot from **pull** (state + info + effects + palettes). It does not define presets; use `wled_config/presets/*.json` for that.
- To add more presets: create a new JSON file with `psave`, `n`, and state, then run `wled_push.py --file path/to/preset.json`.
## Sunrise alarm
`wled_config/sunrise_8am.json` starts a 30-minute sunrise that finishes at `08:00`.
```bash
# Test the sunrise payload immediately
python wled_push.py --file wled_config/sunrise_8am.json
# Poll the local clock and trigger the sunrise daily
python sunrise_alarm.py
# Custom alarm time and duration
python sunrise_alarm.py --alarm 08:00 --duration 30
```