Skip to content

Stairs lights (WLED)

Approved operating setup — 2026-10-31

All13 seasonal/holiday looks were visually reviewed and approved by the owner. The review is complete and the temporary preview override has been removed. Normal calendar restored: Halloween18 purple/orange/lime today; Harvest19 tomorrow. Directional entrance (updated after walking feedback: first3 steps together, remaining steps alternating0.1/0.2s), preserving already-lit stairs on retrigger, and180sec hold then Off remain installed. Red White Blue uses crisp five-stair red/white/blue bands, not gradients. Single-color looks remain single-color after entrance; other multicolor looks keep the approved moving gradients.

Reproducible approved snapshots in this directory: presets-approved-2026-10-31.json, stairs-season-approved-2026-10-31.py, and sensor-bindings-approved-2026-10-31.json (only button configuration, no WiFi credentials or HA tokens). Read-back matches canonical source for all13 themes and both directional playlists. Calendar coverage checked for every date in2026 and2027. Native preset3 remains the boot initialization/full-light hold; a physical power cycle was not performed.

A theme is assigned every day. Raleigh-local nonholiday dates (updated2026-10-31) use Winter Ice (Jan2–Feb28/29), Spring (Mar1–May14), Summer (May15–Sep20), or Early Fall (fromSep21), with higher-priority holiday intervals below. Christmas and Harvest cover late fall/winter. Lights remain motion-controlled and time out; a calendar theme does not mean continuously-on lighting.

2026 override calendar:

Dates Approved look
Jan1; Dec27–31 New Year: single champagne gold
Feb7–14 Valentine: moving red/pink
Mar11–17 St Patrick: single green
Mar30–Apr5 Easter: moving pastel pink/blue/yellow
May22–25; Jun28–Jul5; Sep4–7 Red White Blue: crisp five-stair bands
Oct1–30 Pumpkin Glow: single orange
Oct31 Halloween: moving purple/orange/lime
Nov1–26 Harvest: moving red-orange/gold
Nov27–Dec26 Christmas: moving red/green

Easter, Memorial Day, Labor Day, and Thanksgiving windows are computed each year. All older investigation/preview entries below are historical; this approved setup supersedes their pending-review states.

  • Controller: WLED 16.0.1, 105 LEDs on GPIO16, relay GPIO12, at http://192.168.4.47 (DHCP; reserve it in the router). No auth on the LAN; JSON API /json/state, /json/cfg, /presets.json.
  • Sensors (visually verified 2026-10-31): bottom GPIO33 → preset 60 Stairs Up; top GPIO2 → preset 61 Stairs Down. Fifteen equal stairs, seven addressable pixels each, bottom-to-top. Native playlists add a step every 0.3 s, then hold the animated seasonal gradient for 180 s and finish at preset 1 All Off. Preset 3 remains the full-light timed hold / boot action.
  • Presets: 1 All Off · 2 All On (white) · 3 On (sensor playlist) · 4 Valentines · 5 Pr · 6 Easter · 7 Fall · 8 Pumpkin Glow (Colorwaves fx67, palette "* Color 1" 2, single color 255,140,0, speed 60, bri 90 — owner wants one color, slow). These strips render orange as red unless green is high (~100–190); Orangery palette and Candle Multi looked red — added 2026-10-01.
  • Seasonal swap = change which preset the playlist in preset 3 plays. Save a playlist with {"psave":3,"n":"On","on":true,"o":true,"playlist":{...}} — without "o":true WLED saves the current lights instead of the playlist (bit us 2026-10-01).
  • Backups (2026-10-01, SSID stripped): presets-backup-2026-10-01.json, cfg-backup-2026-10-01.json.

Seasonal schedule (2026-10-01)

~/.local/bin/stairs-season runs hourly at :05 and after boot (cron-run), selecting the look used by timed hold preset 3 and directional playlists 60/61. Looks are presets 8 and 10–21, defined in the script (LOOKS), created on the controller if missing. Holidays are computed every year (Easter, Memorial Day, Labor Day, Thanksgiving). See the whole year: stairs-season --year 2027. Change a look: edit LOOKS, delete that preset in the WLED app (or rename it), run stairs-season once.

From Look
Jan 1 New Year
Jan 2 Winter Ice
Feb 7–14 Valentine
Mar 11–17 St Patrick
~Mar 20 Spring
Easter week (computed) Easter
Memorial Day weekend Red White Blue
Jun 21 Summer
Jun 28–Jul 5 Red White Blue
Sep 1 Early Fall
Labor Day weekend Red White Blue
Oct 1–30 Pumpkin Glow
Oct 31 Halloween Eyes
Nov 1–Thanksgiving Harvest
Day after Thanksgiving–Dec 26 Christmas
Dec 27–31 New Year

Lesson: WLED drops preset saves sent back to back — wait ~2 s and re-read. Reserve 192.168.4.47 in the router or the job fails (cron-run will page).

Full-strip Halloween lighting (2026-10-31)

Owner reported only about one step illuminated and wants every stair LED lit whenever triggered. Halloween Eyes fx82 was a sparse effect. Preset 18 now uses Solid fx0, RGB (255,150,0), brightness 160/255, across all 105 LEDs (segment 0–105, no grouping gaps). Saved on the controller and reflected in ~/.local/bin/stairs-season LOOKS[18]. Legacy preset name “Halloween Eyes” is retained for the HA halloween_eyes theme key and hourly job compatibility. Sensor preset 3 still plays preset 18 for 180 seconds then preset 1 All Off. No unattended permanent-on change. Future looks must maintain full-strip illumination while active; avoid sparse eyes/chase/twinkle effects that leave steps dark.

Directional effects investigation (2026-10-31)

Owner confirms 15 stair light strips (not 15 individual addressable pixels). Photo shows the current RGB (255,150,0) as yellow-orange/amber; owner wants a richer orange and is interested in bottom-to-top / top-to-bottom entry animations, per-step colors and gradients, and left/right effects. Live configuration has 105 addressable pixels on GPIO16, two distinct switch-type inputs on GPIO33 and GPIO2, both assigned macros [0,3,0]. This confirms separate configured inputs, not physical sensor presence, operation, or which is top/bottom. Seven addressable pixels per stair is plausible (105/15), but requires physical mapping; no step or left/right mapping has been verified. Current firmware exposes AudioReactive only in usermods; Animated_Staircase is not exposed. Official WLED Animated_Staircase supports two sensors, one segment per stair, directional activation and retriggering; using it requires a firmware build including the usermod. Existing presets could also provide a simpler finite entry sequence using separate sensor actions. No sensor assignments or firmware changed during this investigation.

Mapping confirmed visually (2026-10-31)

Owner watched a temporary three-zone test and confirmed exactly one cyan bottom stair (pixels 0–6), 13 orange middle stairs (7–97), and one purple top stair (98–104). Thus all 15 stairs have seven addressable pixels each; stair index n from bottom, zero-based, spans [7n,7(n+1)). Sensor end identity is undergoing a separate temporary color test; do not infer it from GPIO numbering.

Top sensor confirmed by owner during temporary input-color test (2026-10-31): triggering at the top turned the whole staircase purple, assigned to GPIO2. GPIO33 is the remaining input, presumed bottom pending a separate physical trigger. Temporary presets 22/23 and button macro substitutions are automatically removed/restored at test completion.

Bottom sensor confirmed visually by owner during isolated cyan test (2026-10-31): approaching first step from bottom turned all stairs cyan, assigned exclusively to GPIO33. Direction mapping is now verified: bottom GPIO33 → ascending sequence, top GPIO2 → descending sequence. All 15 equal stairs span seven pixels each, lowest stair pixels 0–6, highest 98–104. This confirms operation at both ends, not sensor hardware type or cooldown duration. Directional animation has not yet been implemented.

Seasonal visual review in progress (2026-10-31)

Owner requested trying all 13 seasonal/holiday looks one at a time, starting with Halloween, approving colors and effects by watching the stairs. Owner likes cyan and purple from sensor tests and wants Halloween purple/orange/neon colors.

Current preview 1/13: preset 18 (legacy name Halloween Eyes / HA key halloween_eyes) temporarily saved as Palette fx65, palette 4 Color Gradient, RGB anchors (180,0,255), (0,255,255), (255,90,0), grouping 7, spacing 0, speed 24, intensity 128, c1=0, o1=true, o2=false, o3=true, global brightness 160. Native animated palette moves colors across whole-stair groups. Verified 130 WebSocket live frames over six seconds: all 105 pixels illuminated (each max RGB channel >=60), every seven-pixel stair group uniform, frames change. Preset 3 still invokes 18 for 180 seconds then Off. Both sensor actions remain preset 3; direction-sensitive entry is not implemented. Backup: ~/.local/state/stairs-halloween-preview-20261031-140238.json. This preview is awaiting owner visual feedback; stairs-season LOOKS[18] still defines the previous solid-orange recipe until approved. Existing same-name preset means hourly job retains preview.

Review order: Halloween → Harvest → Christmas → New Year → Winter Ice → Valentine → St Patrick → Spring → Easter → Summer → Red White Blue → Early Fall → Pumpkin Glow. Red White Blue is shared by several holidays. Pause for feedback on each; do not automatically cycle before owner assesses.

Halloween review revision 2 (2026-10-31): owner likes the slow full-stair animation, especially purple, and likes purple/orange together; cyan feels uncertain for Halloween and owner wants more colors. Replaced cyan with electric lime green: anchors now purple (180,0,255), orange (255,90,0), lime (80,255,0). Other Palette/grouping/brightness/timer settings retained. Verified 63 live frames, every stair lit and seven-pixel groups uniform. Revision 2 awaits owner comparison; original cyan preview is backed up under ~/.local/state/stairs-halloween-colors-*.json. Do not advance to Harvest until Halloween colors are approved.

Directional entrance installed; Harvest review active (2026-10-31)

Halloween purple/orange/lime approved by owner (pink intermediate blends acceptable). Canonical LOOKS[18] now matches approved anchors. Current preview 2/13 is Harvest: (255,110,0), (255,45,0), (255,170,30), native Palette65, palette4, speed24, intensity128, global brightness160. Awaiting owner visual feedback on Harvest and entrance timing.

stairs-season now builds 15 mapped segments per seasonal preset. All seasonal hold effects use native Palette65 with grouping7, c1=128 (vertical/segment-row gradient), o1=true, o2=false, o3=true. Distinct stair colors and temporal animation verified on the actual device. Helper presets30–44 only set their stair's on:true (and global on/brightness); they never turn another stair off. Off1 defines every stair's range and sets all segment on flags false while retaining effect/colors. Playlists60/61 visit those helpers in opposite orders, durations3 tenths each, then the selected seasonal preset for1800 tenths, repeat1, end1. Sensor macros now GPIO33 [0,60,0], GPIO2 [0,61,0]; switch types/pins unchanged. No firmware change or new daemon/schedule. Existing boot3 initializes all segment effects and the normal full-light timer.

Live evidence: upward and downward WebSocket frames each showed stair counts1 through15 in order, first-to-last roughly4.3 seconds, with no previously lit step going dark. Retigger during full hold retained all15 lit; mid-sequence reversal retained already-lit stairs and filled the remainder. Native short-duration playlist completed at Off1 with globaloff and all15 segmentsonfalse. Harvest hold:59 live frames verified all105 pixels lit, seven-pixel groups uniform, animated colors. Read-back confirmed both sensor bindings and production hold180sec. Unchanged hourly reconciliation is a no-op and does not interrupt the current countdown. Calendar changes while off preserve global and segment off state. Real power cycle not performed; existing boot preset3 retained. Physical sensors were mapped earlier; the new entrance sequences were exercised by invoking the exact assigned native presets through the API.

Review controls: stairs-season --preview 19 selects Harvest, starts the full-light timed preview, and records a two-hour override in ~/.local/state/stairs-season-preview.json so hourly cron does not reset the review to Halloween. Expiry is enforced at the next hourly reconciliation. --preview <id> advances to the next chosen look; --resume-season clears the override and restores today's calendar. To demonstrate entrance remotely, preset1 Off then60 Up or61 Down; no sensor cooldown wait is needed for an API demo. Do not advance previews without owner feedback. Still to review: Harvest, Christmas, New Year, Winter Ice, Valentine, St Patrick, Spring, Easter, Summer, Red White Blue, Early Fall, Pumpkin Glow.

Backups: source ~/.local/state/stairs-season-before-directional-20261031-140826.py; first pre-install presets/buttons/state ~/.local/state/stairs-direction-backup-20261031-140909.json; later backups are incremental. Native firmware16.0.1 serves file uploads at POST /upload (multipart fieldfile), not POST /edit; detected from the live editor and upstream server source. Full preset JSON is read back exactly after each upload. Source catches deployment failures, restores buttons and previous preset file, then restores a timed hold/off state. Preserve backups when changing partial-state presets.

Bounded independent design review: selected Sonnet medium with built-in tools disabled and MCP servers empty; actual model claude-sonnet-5-5. Review findings were checked against live output and WLED source (including direct-API playlist nesting versus saved-preset replacement). CLI reported cost estimate 0.07420689999999999 USD; this is a subscription usage estimate, not separately billed API spend. Review artifact ~/.local/state/stairs-direction-review-result.json. Native Claude allowance refreshed before review; Codex allowance was fresh and ordinary usage permitted.

Seasonal review update (2026-10-31): Harvest approved by owner; observed red at one extreme, orange in middle, yellow-gold at other. Preview3/13 Christmas20 is now active, red/green, using the same verified directional entrance and animated Palette hold. Awaiting Christmas visual feedback; next New Year21. Two-hour review override refreshed.

Seasonal review update (2026-10-31): Christmas approved. Preview4/13 New Year21 active, single-color warm gold (255,200,80), palette2. Although it uses the shared Palette engine, a one-color palette has no visible gradient motion; directional entrance remains. All105 live pixels and both playlist targets verified. Awaiting owner feedback; next Winter Ice10.

Seasonal review update (2026-10-31): New Year approved as observed white-yellow single color. Preview5/13 Winter Ice10 now active: pale icy blue (150,200,255), single-color palette2, directional entrance unchanged. All105 live pixels and both playlist targets verified. Awaiting Winter Ice feedback; next Valentine11.

Seasonal review update (2026-10-31): Winter Ice approved as all-blue single color. Preview6/13 Valentine11 now active: red (255,20,60) and pink (255,80,160), palette3, animated hold and directional entrance unchanged. Awaiting Valentine feedback; next St Patrick12.

Seasonal review update (2026-10-31): Valentine approved as red/pink. Preview7/13 St Patrick12 now active: bright green (0,255,40), single-color palette2, directional entrance unchanged. All105 live pixels and both playlist targets verified. Awaiting St Patrick feedback; next Spring13.

Seasonal review update (2026-10-31): St Patrick approved as single green. Preview8/13 Spring13 now active: pastel green (120,255,120), pink (255,170,220), soft yellow (255,230,120), animated palette4; directional entrance unchanged. Awaiting Spring feedback; next Easter14.

Seasonal review update (2026-10-31): Spring approved. Preview9/13 Easter14 now active: pastel pink (255,150,220), icy blue (150,210,255), pale yellow (255,240,130), animated palette4; directional entrance unchanged. Awaiting Easter feedback; next Summer15.

Seasonal review update (2026-10-31): Easter approved. Preview10/13 Summer15 now active: warm golden-yellow (255,210,80), single-color palette2, directional entrance unchanged. All105 live pixels and both playlist targets verified. Awaiting Summer feedback; next Red White Blue16.

Seasonal review update (2026-10-31): Summer approved. Preview11/13 Red White Blue16 now active: red (255,0,0), white (255,255,255), blue (0,40,255), animated palette4; directional entrance unchanged. Shared by Memorial Day, Fourth of July, Labor Day. Awaiting feedback; next Early Fall17.

Red White Blue revision (2026-10-31): owner rejected the red/white gradient because intermediate pink weakens the patriotic look. Updated canonical build_presets for preset16 to Solid fx0, five stairs per crisp band: bottom5 red (255,0,0), middle5 white (255,255,255), top5 blue (0,40,255). No palette blending or moving hold for this theme; native directional entrance and180sec hold unchanged. Exact105-pixel live output verified as35 red +35 white +35 blue. Preview11/13 remains active awaiting approval; next Early Fall17.

Seasonal review update (2026-10-31): Red White Blue crisp five-stair bands approved. Preview12/13 Early Fall17 now active: orange (255,150,0), gold (255,200,40), yellow-green (200,255,40), moving palette4; directional entrance unchanged. Awaiting Early Fall feedback; final preview Pumpkin Glow8.

Seasonal review update (2026-10-31): Early Fall approved. Preview13/13 Pumpkin Glow8 now active: single orange (255,140,0), palette2; directional entrance unchanged. All105 live pixels and both playlist targets verified. Awaiting final Pumpkin Glow feedback. Once approved, run stairs-season --resume-season to clear review override and restore approved Halloween18 purple/orange/lime for today; tomorrow calendar selects Harvest19. All other12 looks already approved.

Raleigh seasonal timing (2026-10-31)

Owner lives in Raleigh, North Carolina, and requested seasons reflect local climate, especially a shorter winter. Changed only seasonal fallback dates in stairs-season.look_for: Winter until March1, Spring March1–May14, Summer May15–September20, Early Fall fromSeptember21. Existing holiday windows take priority, so actual Early Fall appears September21–30, October uses Pumpkin/Halloween, November Harvest/Christmas, and December Christmas/New Year. All13 visually approved colors/effects, sensor bindings, entrance pacing and timers preserved.

Basis: NOAA/NWS Raleigh-Durham1991–2020 daily climate normals: high near60°F in early March,80°F in mid-May, remaining around81°F September20–22. Source: https://www.weather.gov/media/rah/climate/RDU_DailyClimateNormals.pdf . March1/May15/September21 are practical display-calendar choices informed by these normals; they are not claimed as official season dates and do not change with live daily weather.

Verified boundary selections, leap day, full2026–2028 coverage, unchanged holiday selections on every date, and unchanged LOOKS definitions. Normal reconciliation reports Halloween already configured; no device preset changes were needed today. Updated source snapshot stairs-season-raleigh-2026-10-31.py; earlier approved source snapshot retains the historical pre-Raleigh timing.

Walking feedback: faster entrance with a head start (2026-10-31)

Owner walked bottom-to-top and found himself ahead of the light for the first three steps before the sequence caught up. Updated both directions: first3 entry stairs turn on together via partial-state presets62 Up head start /63 Down head start, remaining12 add individually at alternating0.1/0.2s (native playlists use integer tenths, average0.15s), then approved seasonal hold180sec and Off. Native playlists60/61 include np:true for prompt first-entry advance. Both sensor mappings unchanged. Helpers only add light, preserving previously lit stairs on a repeat trigger. All13 approved colors and Raleigh calendar retained.

Live verification: helper62 lit exactly bottom stairs0,1,2; helper63 exactly top stairs12,13,14. Up frames showed3 stairs at0.09s and all15 by1.90s; Down3 at0.10s and all15 by1.94s, compared with roughly4.3s for the old one-at-a-time0.3s entrance. Neither sequence darkened earlier stairs; retrigger during full hold kept all15 lit. Source/device preset read-back matched exactly. Snapshot stairs-season-headstart-2026-10-31.py and presets-headstart-2026-10-31.json supersede earlier timing snapshots. Walking comfort after the new timing remains for owner to assess, especially top-to-bottom; do not claim physical walking test done. Sensor hardware cooldown/sensitivity is a separate optional follow-up.