Driver Type
Categories
- Recent Updates
- Access Control
- Amplifier
- A/V Receiver
- Climate and Pool Control
- Disc Player / Changer
- Display
- DSP
- DVR
- Irrigation / Sprinklers
- Lighting Control
- Matrix Switch
- Media Server and Player
- Multi-Room A/V
- Networking
- Power and Rack Management
- Security
- Surveillance
- Teleconferencing
- Training
- Tuner
- Utility
- Video Projector
Driver Type
Categories
- Recent Updates
- Access Control
- Amplifier
- A/V Receiver
- Climate and Pool Control
- Disc Player / Changer
- Display
- DSP
- DVR
- Irrigation / Sprinklers
- Lighting Control
- Matrix Switch
- Media Server and Player
- Multi-Room A/V
- Networking
- Power and Rack Management
- Security
- Surveillance
- Teleconferencing
- Training
- Tuner
- Utility
- Video Projector
Roku Universal
By: Joe Liggero
Updated: May 18, 2026
Version: 2.0
Local LAN driver for every Roku in the house — streamers and Roku TVs. Polls the on-Roku ECP API on port 8060 for live state (current app + icon, playback position, current input, power) and adds the Roku-TV-specific keys the stock community drivers miss: discrete Power On / Off, Volume Up / Down / Mute, Channel Up / Down, and HDMI / Tuner / AV input switching. 32 app slots and 32 channel slots drive tile pages; a live boolean matrix for the top 19 streaming services lights up state-aware tiles with no macro work.
What's included:
• Discrete Power On/Off, Volume, Channel, and HDMI/Tuner/AV keys
• 19 top-streamer booleans + foreground app + playback state
• 32 app slots and 32 channel slots for tile pages
• Smart commands: Launch by Name / ID / Deep Link, Send Text, Sequence
• Auto-bind keyboard page with live KP_BUFFER text feedback
• Local LAN only — no cloud, no pairing, no Roku account
Licensing: 120-minute free trial built into the driver. Per-processor MAC-bound license for $49 USD one-time, available at https://customcontroldrivers.com/drivers/roku-universal
Roku Universal
v2.0.1 - Custom Control Drivers LLC
One driver for every Roku in the house. Works on streamers (Roku Ultra, Streaming Stick, Express) and Roku TVs (TCL, Insignia, Hisense, ONN). Adds the Roku-TV-specific keys the stock RTI Roku driver is missing: Power On / Power Off, Volume Up / Down / Mute, Channel Up / Down, and HDMI / Tuner / AV input switching. Live state feedback (current app, app icon, playing state, channel, playback position) updates every 1-10 seconds via Roku's local ECP HTTP API on port 8060. No cloud account, no pairing - just the Roku's LAN IP.
What v2.0 adds over v1.0 and stock community drivers:
· Boolean state matrix - one paired boolean per state (PowerOn / PowerOff, IsPlaying / IsPaused / IsStopped / IsBuffering, OnHomeScreen / OnTVInput, IsHDMI1 / IsHDMI2 / IsHDMI3 / IsHDMI4 / IsTuner / IsAV1). Bind a panel button graphic directly to the state without macro logic.
Top-streamer detection booleans - OnNetflix, OnYouTube, OnPrime, OnDisneyPlus, OnHulu, OnAppleTV, OnMax, OnPeacock, OnParamount, OnSpotify, OnPandora, OnPlex, OnESPN, OnPlutoTV, OnTubi, OnFubo, OnSling, OnTheRokuChannel, OnYouTubeTV. State-aware logos and brand-themed pages without writing a single macro.
HDMI input labels (Roku TV) - the driver learns the user-named labels ("Apple TV", "Game Console") as inputs are visited, caches them, and exposes them as bindable sysvars per port.
Smart Commands - Go Home, Power Toggle, Launch App By Name, Launch App By ID, Launch App With Deep Link (open Netflix to a specific show), Launch Input By Name, Send Text (type into search boxes), Send Command Sequence (chain keys + delays).
Media position + duration + percent - bind a progress bar straight to MediaProgressPercent for apps that report it (most TVs, Sonos, Music Assistant).
Per-slot active flag - app_N_active and chan_N_active are true exactly when that slot is the foreground app/channel. Bind tile highlight states without string comparisons.
Last-command observability - LastCommandSent / LastCommandResult / LastCommandTimestamp sysvars let you debug from the panel itself, no Trace Viewer needed.
Idle timer - IdleSeconds counter for screensaver / auto-off logic.
Device-info detail - ModelNumber, SerialNumber, IsTV, SoftwareVersion, WiFiSignal sysvars.
Requirements
· Roku OS 7.5 or later (released 2017). All currently sold Rokus are well past this.
"Control by mobile apps" enabled on the Roku: Settings > System > Advanced system settings > Control by mobile apps > Network access > Permissive (the default). If you set this to Disabled the driver cannot reach the Roku.
RTI processor and the Roku on the same LAN subnet.
Static IP recommended for each Roku - set a DHCP reservation in your router so the IP doesn't change.
One driver instance per Roku device. Drag the driver in for each Roku you want to control.
Driver Configuration
Connection
· Roku IP Address - IPv4 address of the Roku, e.g. `192.168.1.50`. On the Roku, navigate to Settings > Network > About to find it.
Poll Interval - how often to refresh live state. 3 seconds is the recommended default. Choose 1 or 2 seconds on Roku Ultra for snappy app-switch feedback. Choose 5 or 10 seconds on slower first-generation Roku TVs that take longer to respond.
Auto-Populate Apps - when True (default), blank App slots fill in from the apps installed on this Roku, in the order the Roku reports them. Set to False if you want the slot list to be exclusively what you typed.
App Names (slots 1 to 32)
For each slot, type either:
· The app name (e.g. `Netflix`, `Disney Plus`, `YouTube`) - case-insensitive, exact match first, then "contains" match.
The numeric Roku app ID (e.g. `12` for Netflix). App IDs are stable per app; look them up at developer.roku.com.
Leave a slot blank to auto-fill from the Roku's installed app list (when Auto-Populate Apps is on). Slot 2 only appears once slot 1 is filled, slot 3 appears once slot 2 is filled, and so on - the configuration page reveals slots progressively to avoid clutter.
Each configured slot exposes the following sysvars (one set per slot, N = 1..32):
· `app_N_name` (string) - the human-readable app name as the Roku reports it
`app_N_icon` (image) - the live app icon URL fetched from the Roku
`app_N_id` (string) - the resolved numeric Roku app ID
`app_N_installed` (boolean) - true when the resolved app exists on this specific Roku
`app_N_active` (boolean) - true when this slot is the currently foreground app
Bind tile buttons on your Apps page:
· Button graphic = `App N Icon`
Button text = `App N Name`
Button highlight = `App N Active` (lights up the tile of whatever's currently running)
Button macro = `Commands > App Launch > [N] - <app name>`
Tuner Channels (slots 1 to 32) - Roku TVs only
For each channel slot, type:
· Channel N Name - display label (e.g. `ABC`, `CBS`, `KSDK`).
Channel N Number - the over-the-air digital channel number from the Roku Live TV guide (e.g. `2.1`, `5.1`).
Per-slot sysvars:
· `chan_N_name` (string)
`chan_N_number` (string)
`chan_N_configured` (boolean) - true when both name and number are filled
`chan_N_active` (boolean) - true when this slot is the currently tuned channel
Bind the tile macro to `Commands > Channel Launch > [N] - <channel name>`. Roku streamers (Ultra, Stick, Express) ignore Channel Launch - they have no tuner.
Licensing
· Licence Key - leave blank during the 120-minute trial. After purchase, paste the licence key from your purchase email here. The key is bound to this processor's MAC address.
Debug (advanced)
· Debug Level - Off / Low / Medium / High. Defaults to Low. Higher levels write more to the processor system log.
Debug Console Enabled - exposes a telnet debug console (see below). Defaults to True.
Debug Console Port - 12506-12510. Defaults to 12509. Pick a different port if you run multiple drivers that all enable a debug console.
Commands
The driver exposes the following commands through the macro editor under Commands.
Transport (picker)
A single dropdown covers every Roku ECP key the driver supports. Use this for one-off bindings on navigation, transport, volume, channel, keypad, and power keys.
Choices: Up, Down, Left, Right, Select, Home, Rev, Fwd, Back, Play, InstantReplay, Info (*), Volume Down, Volume Up, Mute Toggle, Power Off, Power On, Channel Up, Channel Down, Keypad 0 through Keypad 9.
Source (picker)
Switches the active input on a Roku TV. Choices: Tuner, HDMI 1, HDMI 2, HDMI 3, HDMI 4, AV 1. Streamers ignore.
App Launch
Picker (1 to 32). Launches the app pinned to that slot.
Channel Launch
Picker (1 to 32). Tunes the Roku TV to the OTA channel pinned to that slot.
Volume
Top-level Volume Up and Volume Down commands with a 150 ms repeat rate (so holding the button ramps volume smoothly). Roku TVs only.
Smart Commands (v2.0)
· Go Home - top-level shortcut equivalent to pressing the Home key. Discoverable as its own function rather than a Transport picker choice.
Power Toggle - reads the current power state and dispatches the opposite power key. Single-button power.
Launch App By Name (string parameter) - launches an app by its human name. Case-insensitive exact match preferred, then substring match. Use this when you want to launch an app that isn't pinned to a configured slot.
Launch App By ID (string parameter) - launches an app by its numeric Roku app ID, bypassing the slot/name resolution.
Launch App With Deep Link (slot integer + content ID string) - opens an app to a specific piece of content. Pass the slot of the app and the content ID (e.g. Netflix title ID). Per Roku's ECP, `?contentId=` is the universal contract.
Launch Input By Name (string parameter) - resolves a friendly input name to its HDMI / Tuner / AV port. Matches user-given labels first (learned over time as inputs are visited), falls back to slug match (`HDMI1`, `Tuner`, `AV1`). Lets your "Apple TV" button work regardless of which HDMI port the customer plugged the Apple TV into.
Send Text (string parameter) - splits the input into characters and sends each one as a `Lit_<char>` keypress with an 80 ms gap. Useful for search bars and password fields.
Send Command Sequence (comma-separated string) - chain ECP keys and inline millisecond delays. Numeric tokens are delays. Example: `Home,800,Up,Up,Select,1500,Lit_n,Lit_e,Lit_t,Lit_f,Lit_l,Lit_i,Lit_x` launches Home, waits 800 ms, navigates up twice, selects, waits 1500 ms, then types "netflix" into the search box. Default gap between non-delay tokens is 80 ms; explicit numeric tokens override per-step.
Keyboard (v2.0)
A dedicated picker (the Keyboard function) with 52 choices: A through Z, comma, period, slash, backslash, at sign, underscore, hyphen, apostrophe, colon, semicolon, question mark, exclamation, plus the three special keys Space, Backspace, and Enter. Each choice carries a `KP_<char>` buttontag that matches the standard ID11 keyboard-page template convention.
Auto-bind workflow - drop a keyboard template page into a Roku Universal source, run ID11's Auto-Program wizard on it, and every `KP_A` / `KP_B` / `KP_,` / `KP_BACK` / `KP_SPACE` / `KP_Enter` / etc. button binds to the right keypress automatically. Zero per-button macro dragging.
Live text feedback - the driver maintains a `KeyboardBuffer` sysvar (carrying buttontag `KP_BUFFER`) that updates in real time as the user types. Letters append, Backspace pops the last character, Enter and Search clear the buffer. Drop the standard `<KP_BUFFER>` text element on your keyboard page and it auto-binds via the same Auto-Program pass.
Shift / case mode - default sends UPPERCASE letters (matching the panel's button labels). The `Toggle Shift` command (auto-bound to any `KP_SHIFT`-tagged button) flips the case mode; letters typed afterward come out lowercase until toggled back. The `KeyboardShifted` boolean sysvar exposes the current state for binding to an optional shift-indicator graphic. Punctuation, digits, and special keys (Backspace / Enter / Space) pass through unchanged regardless of shift state.
Clear Keyboard Buffer - explicit buffer-wipe command for "Cancel Search" or page-leave macros. The buffer also auto-clears on Enter and Search keypresses; this command is for the cases where neither has fired and you want a clean field anyway.
KP_CTR and KP_ALT - intentionally unbound. Roku ECP has no concept of control or alt modifiers; those buttons can stay decorative or be removed from your keyboard page.
Driver System Commands
· Force Reconnect - drops and re-establishes the polling connection. Useful if the Roku was offline and you want to rediscover it without waiting for the backoff window to elapse.
Refresh State - forces an immediate poll of all four ECP endpoints.
Refresh Apps - re-queries the installed-apps list.
Refresh Icons - re-fetches app icon URLs (queues an `apps` poll cycle).
Clear Cache - wipes the persistent cache (saved app list, last-seen device info, learned HDMI labels).
Live State Feedback
The driver polls four Roku ECP endpoints in rotation:
| Endpoint | Refreshes |
|---|---|
| `/query/device-info` | Power state, model, serial, software version, WiFi signal |
| `/query/apps` | Installed apps list (drives slot resolution and icons) |
| `/query/active-app` | Current foreground app + TV input label |
| `/query/media-player` | Playback state + position / duration / progress |
The sysvars below populate at runtime and are ready for direct UI binding.
Driver Status
· `ConnectionState` (boolean) - true when the driver is talking to the Roku.
`LastError` (string) - last error text, or empty when healthy.
`DriverVersion` (string) - driver version.
`LastPollText` (string) - clock time of the last successful poll, e.g. `9:42:17 AM`.
`IdleSeconds` (integer) - seconds since the last observed activity. Resets on any command send, power change, app change, or playback state change. Useful for screensaver / auto-off logic.
Licensing
· `LicenseValid` (boolean) - true when a valid licence is loaded OR the trial timer hasn't expired.
`LicenseStatusText` (string) - human-readable status, e.g. `Trial: 87 min remaining` or `Licensed`.
`TrialMinutesRemaining` (integer) - minutes left in the trial period.
Roku Identity + Power
· `modelName` (string) - e.g. `Streaming Stick 4K`.
`ModelNumber` (string) - Roku internal model number.
`SerialNumber` (string) - hardware serial number.
`userGivenName` (string) - the name the customer gave the Roku in the Roku app.
`deviceLocation` (string) - the room/location the customer set.
`IsTV` (boolean) - true when this Roku is a Roku TV (vs a streamer).
`SoftwareVersion` (string) - e.g. `13.0.0 build 1234`.
`WiFiSignal` (string) - signal strength category, e.g. `ExcellentSignal`, `GoodSignal`. May be blank on older Roku models.
`powerState` (boolean) - true when the Roku is on.
`PowerOn` (boolean) - paired with `powerState`. Bind directly to a "powered" indicator.
`PowerOff` (boolean) - inverse of `PowerOn`. Bind directly to a "standby" indicator.
Playback
· `playingState` (string) - `Playing`, `Paused`, `Buffering`, `Stopped`, or empty.
`IsPlaying` (boolean)
`IsPaused` (boolean)
`IsStopped` (boolean)
`IsBuffering` (boolean)
`MediaPositionSeconds` (integer) - current playback position. Many AVRs / Pandora / DLNA sources do not report this.
`MediaDurationSeconds` (integer) - total duration of the current track / show.
`MediaProgressPercent` (integer 0-100) - derived. Bind to a progress bar slider.
Active App
· `currAppName` (string) - name of the current foreground app.
`currAppIcon` (image) - live URL for the current app's icon.
`CurrentAppSlot` (integer) - which configured app slot is active right now (0 if none).
`OnHomeScreen` (boolean) - true when the user is on the Roku home screen.
`OnTVInput` (boolean) - true when the foreground is a TV input (Tuner / HDMI / AV).
Top streamer booleans (set true when the foreground app's name contains the listed match, case-insensitive). One can be true at a time, or none for home / TV input / lesser-known app:
· `OnNetflix`, `OnYouTube`, `OnYouTubeTV`, `OnPrime`, `OnDisneyPlus`, `OnHulu`, `OnAppleTV`, `OnMax`, `OnPeacock`, `OnParamount`, `OnSpotify`, `OnPandora`, `OnPlex`, `OnESPN`, `OnPlutoTV`, `OnTubi`, `OnFubo`, `OnSling`, `OnTheRokuChannel`.
Inputs (Roku TV)
· `IsTuner`, `IsHDMI1`, `IsHDMI2`, `IsHDMI3`, `IsHDMI4`, `IsAV1` (boolean each) - true when that input is the foreground.
`Tuner_Label`, `HDMI1_Label`, `HDMI2_Label`, `HDMI3_Label`, `HDMI4_Label`, `AV1_Label` (string each) - user-friendly labels the customer set on the Roku TV ("Apple TV", "Game Console"). Populated as the integrator or customer visits each input - the driver learns the label and caches it across restarts.
OTA Channel
· `currChanName` (string) - current OTA channel name when on the tuner input.
`currChanProgram` (string) - reserved for future Roku firmware. Currently blank.
`CurrentChannelSlot` (integer) - which configured channel slot is currently tuned (0 if none).
Last Command Observability
· `LastCommandSent` (string) - the most recent ECP command the driver dispatched (e.g. `keypress Home`, `launch 12?contentId=80049832`).
`LastCommandResult` (string) - the HTTP status of that command (e.g. `ok: HTTP/1.1 200 OK`, `error: HTTP/1.1 503 Service Unavailable`). Shows `pending` between dispatch and response.
`LastCommandTimestamp` (string) - clock time when the command was sent.
Keyboard
· `KeyboardBuffer` (string, `buttontag="KP_BUFFER"`) - running text of what the user has typed via the on-panel keyboard. Letters append, Backspace pops, Enter / Search clear. Auto-binds to the standard `<KP_BUFFER>` text element on ID11 keyboard-page templates.
`KeyboardShifted` (boolean) - current case mode. False (default) = letters typed are UPPERCASE. True = lowercase. Toggle via the `Toggle Shift` command (auto-bound to `KP_SHIFT` buttons). Bind to an indicator graphic if you want a visual shift-state cue.
Events
The driver signals the following events. Hook macros to any of them under the System Events tab.
Connection
· `OnConnected` - polling has resumed (or first-time connect).
`OnDisconnected` - lost contact with the Roku.
`OnConnectFailed` - first connection attempt failed (Roku unreachable at startup).
`OnAPIError` - non-2xx response from the Roku.
Licensing
· `OnLicenseValid` - licence verified successfully (or trial unlocked).
`OnLicenseInvalid` - licence missing, malformed, or expired.
`OnTrialExpiring` - trial has under 10 minutes remaining.
`OnTrialExpired` - trial counter hit zero. Driver gates all commands until a real licence is pasted.
Power
· `OnPowerOn` - Roku transitioned from off to on.
`OnPowerOff` - Roku transitioned from on to off.
App
· `OnAppChanged` - foreground app changed.
`OnReturnedHome` - foreground returned to the Home screen.
`OnEnteredTVInput` - active app is a TV input (Tuner / HDMI / AV).
Playback
· `OnPlay` - media started playing.
`OnPause` - media paused.
`OnStop` - media stopped or nothing is loaded.
`OnBuffering` - media is buffering.
Auto-Reconnect
The driver recovers automatically from network outages, Roku reboots, and gateway resets. No manual intervention is needed; reconnection happens once the Roku is reachable again. Exponential backoff (3 s -> 10 s -> 30 s -> 60 s, capped) prevents flooding an unresponsive Roku. `OnDisconnected` fires when contact is lost and `OnConnected` fires when it resumes.
Debug Console
When Debug Console Enabled is True, the driver opens a telnet listener on the configured port (default 12509). Connect from a terminal:
```
telnet <processor-ip> 12509
```
Available commands:
· `help` - list commands
`state` - full driver state snapshot (IP, connected, power, app + slot, input, playing state, idle, last command + result)
`apps` - installed apps + their Roku IDs, then configured slot resolution
`key <KeyName>` - send any ECP key by name (e.g. `key Home`, `key Lit_a`)
`launch <appid>` - launch an app by numeric Roku ID
`text <string>` - type a string via the Lit_<char> chain
`seq <a,250,b,c>` - run a comma-separated key/delay sequence (same parser as Send Command Sequence)
`poll` / `force-reconnect` - force a full reconnect and reinit
`refresh-apps` - re-query installed apps (refreshes icons and `app_N_installed` flags)
`clear-cache` - wipe the persistent cache (saved apps, learned HDMI labels)
`license` - print license / trial state and processor MAC
`config` - print active config dump (licence key is masked)
`log <off|low|med|high>` - set runtime debug log level
`quit` / `exit` - close the debug session
Licensing
· Trial: every driver instance runs for 120 cumulative minutes of real runtime without a licence key. The trial counter only advances while the driver is actively running on a processor.
Per-Processor Licence: each licence key is bound to one RTI XP processor's MAC address. One licence per processor.
Purchase: buy a licence at `https://customcontroldrivers.com/drivers/roku-universal/`. After payment, the licence key is emailed to you; paste it into the Licence Key configuration field. The driver re-evaluates licence state immediately - no restart required.
Migration: if you replace the processor, contact `support@customcontroldrivers.com` for a free licence reset (up to two per year per customer).
Refund window: see the storefront EULA. Refund requests must be submitted within 14 days of purchase.
Support and Feature Requests
· Storefront and account: `https://customcontroldrivers.com/account`
Email: `support@customcontroldrivers.com`
Driver suggestions / new device requests: `https://customcontroldrivers.com/suggest`
Terms of Service
All drivers are provided as is without warranty of any kind. A 120-minute trial is included so you can verify compatibility with your hardware before purchasing. Do not purchase a licence if you have not tested the driver on your hardware. Full End User License Agreement, including warranty disclaimer, limitation of liability, and refund policy:
`https://customcontroldrivers.com/terms`
Copyright 2026 Custom Control Drivers LLC. All rights reserved.
120-minute free trial is built into the driver — no signup required. The driver runs unlocked for 120 cumulative minutes of operation; after that, a valid licence key bound to your processor's MAC address is required to continue use.
Licences are $49 USD, one-time fee, per RTI XP processor. Purchase and instant licence-key delivery at https://customcontroldrivers.com/drivers/roku-universal
After purchase, paste the licence key into the driver's "Licence Key" configuration field. The driver verifies offline and unlocks immediately — no restart required.