Documentation

WLED + Tevyr

Drive a WLED-flashed LED controller from any Tevyr macro — set a solid color on session start, flash red on timer overrun, switch to a saved preset for the keynote, dim brightness for the fireside chat. WLED runs on your local network; Tevyr reaches it via a public tunnel.

What's WLED?

WLED is open-source firmware for ESP8266 / ESP32 boards driving addressable LED strips and matrices. It exposes a JSON HTTP API that's the de facto standard for controlling indie LED installations. Learn more at kno.wled.ge.

Network requirements

Tevyr runs in the cloud. To control a WLED device on your local network, you must expose it via a Cloudflare Tunnel, Tailscale Funnel, ngrok, or your firewall's reverse proxy. Plain LAN-only setups will not work — the device URL you paste below must resolve from any internet host.

What you can do

Flash red on timer overrun

When the session timer goes over, set the venue LEDs to solid red. Speaker sees it, audience sees it, no one needs to ring a bell.

Cue a saved preset on session start

Each session gets its own LED preset — sponsor logo colors for sponsored segments, a calm blue for keynotes, party mode for after-hours. One macro per session, fired on session-start lifecycle.

Brightness ramp for fireside chats

Drop venue brightness to 10% when an intimate session starts, ramp back to 100% on session end. House lights without a real lighting board.

Walk-in music effects

Cycle through WLED's built-in effect library during pre-show walk-in. Switch to a steady color once the first session starts.

Prerequisites

  • Tevyr Starter plan or above — Free plan ships 0 integration connections
  • A WLED-flashed controller running on your local network (ESP8266 or ESP32 board, follow the WLED install guide)
  • A public tunnel exposing the device URL — Cloudflare Tunnel and Tailscale Funnel both work well, and both are free for personal use

One-time setup

1. Expose your WLED device publicly

Pick whichever tunnel tool your team uses. The end goal: a public HTTPS URL like https://your-wled.example.com that maps to http://192.168.x.y on your LAN.

Verify it works by opening https://your-wled.example.com/json/info from a non-LAN device (e.g. your phone on cellular data). You should see JSON with the firmware version, LED count, and device name. If that page doesn't load, the tunnel is the problem — fix it before touching Tevyr.

2. Add the connection in Tevyr

  1. Settings → Integrations → Add new → WLED
  2. Paste the public URL into WLED device URL (e.g. https://your-wled.example.com)
  3. Name the connection (e.g. "WLED — stage strip"), click Save
  4. Click Test — Tevyr calls /json/info and shows a green toast with the firmware version on success

Recipes

Drag flow.http_request, pick your WLED connection.

Recipe 1 — Flash red on timer overrun

Trigger: lifecycle event on_timer_overrun. Action: Set solid color.

FieldValue
Red255
Green0
Blue0

For a more visible alert, chain two steps: red for 5 seconds via flow.wait_ms, then a follow-up step back to your normal preset.

Recipe 2 — Cue a preset on session start

Trigger: lifecycle event on_session_start. Action: Play preset.

FieldValue
Preset slot5 (whatever slot you saved the preset to in WLED's UI)

Save the preset first in WLED's web UI: pick the color/effect, scroll to Presets, click Save current state, note the slot number.

Recipe 3 — Dim during a fireside chat

Trigger: a custom lifecycle event you fire when the keynote ends. Action: Set brightness.

FieldValue
Brightness30 (out of 255 — about 12%)

Recipe 4 — Cycle effects for walk-in

Multiple flow.http_request steps chained with flow.wait_ms in between, each calling Set effect with a different effect ID. See the WLED effect list for IDs.

Troubleshooting

Test returns a 502 / connection error

The tunnel is down or the URL is wrong. Hit https://your-wled.example.com/json/info from a non-LAN device first — if that fails, fix the tunnel before re-testing the Tevyr connection.

Preset doesn't apply

The preset slot is empty. Open the WLED web UI, save the current state to that slot, then re-fire. WLED returns 200 OK on play-preset even when the slot is empty — it just plays "nothing".

Colors look wrong (red comes out blue, etc.)

WLED can be configured with different RGB orders depending on your LED chipset (WS2812 = GRB, WS2811 = RGB, etc.). Either fix the order in the WLED web UI under Config → LED Settings, or swap your R/G/B values in the macro field to compensate.

Effect or brightness change doesn't persist after a power cycle

WLED's "default boot state" is configured separately in Config → LED Preferences → Default Settings. The macro-driven changes are runtime-only; if you want a different boot state, set it manually in the WLED UI.

Context variables

WLED's action fields are mostly numeric (color values, brightness, effect IDs) and aren't typically interpolated. The device URL and any custom path fields do support {{ctx.*}} placeholders if you need them. See the full context-variable reference in the Macros guide.

Triggered by webhook events

WLED can be fired automatically from any webhook event — e.g. flash red on timer.critical. When creating a webhook, pick Integration mode and select your WLED connection.

  • Macros — chain WLED color changes with timer warnings and display effects
  • Integrations overview — other tools you can wire alongside WLED
  • Philips Hue guide — cloud-friendly alternative if you don't want to run a tunnel
  • Webhooks — Tevyr → WLED via your own bridge (gives you more flexibility but more moving parts)