From e76e78deecb7977df9e45a95ea7238311cacd430 Mon Sep 17 00:00:00 2001 From: Wong Ding Feng Date: Mon, 9 Mar 2026 01:03:24 +0800 Subject: [PATCH] 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 --- README.md | 41 +++++++++++++++++++++++++++++++- wled_config/full.json | 22 ++++++++--------- wled_config/info.json | 18 +++++++------- wled_config/presets/sunrise.json | 8 +++++++ wled_config/state.json | 4 ++-- 5 files changed, 70 insertions(+), 23 deletions(-) create mode 100644 wled_config/presets/sunrise.json diff --git a/README.md b/README.md index b74f21a..40f8ffa 100644 --- a/README.md +++ b/README.md @@ -32,13 +32,37 @@ 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 (0–255). When off, this is the brightness used when you turn on. | +| **Segment brightness** | `state.seg[].bri` | Per-segment brightness (0–255). Multiplies with the segment’s color/effect. | +| **White channel** | `state.seg[].col[0][3]` | The W in RGBW: primary color is `[R, G, B, W]`. White channel 0–255 (how much dedicated white is mixed in). | + +**CLI:** + +- `--bri N` — global brightness. +- `--seg-bri N` — segment 0 brightness. +- `--white N` — segment 0 primary color’s white channel (0–255). 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). In the API, segment `cct` uses a relative scale: +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) @@ -72,6 +96,21 @@ python wled_push.py --cct 0 # switch to warm `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 1–250), 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`. diff --git a/wled_config/full.json b/wled_config/full.json index 73e3c8f..7ddd6af 100644 --- a/wled_config/full.json +++ b/wled_config/full.json @@ -1,9 +1,9 @@ { "state": { "on": true, - "bri": 128, + "bri": 255, "transition": 0, - "ps": -1, + "ps": 1, "pl": -1, "ledmap": 0, "AudioReactive": { @@ -104,7 +104,7 @@ "liveseg": -1, "lm": "", "lip": "", - "ws": 3, + "ws": 4, "fxcount": 187, "palcount": 71, "cpalcount": 0, @@ -115,15 +115,15 @@ ], "wifi": { "bssid": "A4:A9:30:F9:4D:96", - "rssi": -42, + "rssi": -41, "signal": 100, "channel": 1, "ap": false }, "fs": { - "u": 8, + "u": 12, "t": 983, - "pmt": 1772891797 + "pmt": 1772989317 }, "ndc": 0, "arch": "esp32", @@ -131,9 +131,9 @@ "clock": 240, "flash": 4, "lwip": 0, - "freeheap": 166196, - "uptime": 97381, - "time": "2026-3-8, 16:54:44", + "freeheap": 165576, + "uptime": 97889, + "time": "2026-3-8, 17:03:11", "u": { "AudioReactive": [ "" @@ -143,13 +143,13 @@ ], "Audio Source": [ "I2S digital", - " - quiet" + " - peak 99%" ], "Sound Processing": [ "running" ], "AGC Gain": [ - 12.87, + 9.9, "x" ], "UDP Sound Sync": [ diff --git a/wled_config/info.json b/wled_config/info.json index d427c45..214f220 100644 --- a/wled_config/info.json +++ b/wled_config/info.json @@ -26,7 +26,7 @@ "liveseg": -1, "lm": "", "lip": "", - "ws": 3, + "ws": 4, "fxcount": 187, "palcount": 71, "cpalcount": 0, @@ -37,15 +37,15 @@ ], "wifi": { "bssid": "A4:A9:30:F9:4D:96", - "rssi": -42, + "rssi": -41, "signal": 100, "channel": 1, "ap": false }, "fs": { - "u": 8, + "u": 12, "t": 983, - "pmt": 1772891797 + "pmt": 1772989317 }, "ndc": 0, "arch": "esp32", @@ -53,9 +53,9 @@ "clock": 240, "flash": 4, "lwip": 0, - "freeheap": 166200, - "uptime": 97383, - "time": "2026-3-8, 16:54:46", + "freeheap": 164096, + "uptime": 97889, + "time": "2026-3-8, 17:03:12", "u": { "AudioReactive": [ "" @@ -65,13 +65,13 @@ ], "Audio Source": [ "I2S digital", - " - quiet" + " - peak 99%" ], "Sound Processing": [ "running" ], "AGC Gain": [ - 12.87, + 9.83, "x" ], "UDP Sound Sync": [ diff --git a/wled_config/presets/sunrise.json b/wled_config/presets/sunrise.json new file mode 100644 index 0000000..bf52ced --- /dev/null +++ b/wled_config/presets/sunrise.json @@ -0,0 +1,8 @@ +{ + "psave": 1, + "n": "Sunrise", + "ib": true, + "on": true, + "bri": 255, + "seg": [{ "id": 0, "fx": 0, "cct": 0 }] +} diff --git a/wled_config/state.json b/wled_config/state.json index 9e5961b..529f210 100644 --- a/wled_config/state.json +++ b/wled_config/state.json @@ -1,8 +1,8 @@ { "on": true, - "bri": 128, + "bri": 255, "transition": 0, - "ps": -1, + "ps": 1, "pl": -1, "ledmap": 0, "AudioReactive": {