A research prototype that runs a Chrome-Dino-style game on the LCD of a Control4 SR-260 remote. The remote's own buttons drive the game, and the display is updated through Home Assistant/ZHA over the SR-260's Zigbee link. The verified bench did not use a Control4 controller.
Watch the 9.3-second hardware demo excerpt
Important
This is an independent interoperability and reverse-engineering project for hardware owned by the researcher. It is not an official Control4 product, driver, installer, or supported integration.
The game is the visible result; the research result is a bidirectional path:
- SR-260 button events arrive in Home Assistant through ZHA.
- Home Assistant can write text and list content back to the SR-260 LCD.
- A sleeping, battery-powered remote can host an event-driven game when its button repeat interval becomes the game clock.
- The game logic remains deterministic and testable without Zigbee hardware.
The hardware measurements behind the design are documented in the SR-260 display notes.
The recommended --twoline mode uses the remote's list display:
| SR-260 input | Action |
|---|---|
| Hold Play | Run; every hold event advances the world |
| Release Play | Jump and advance one step |
| OFF | Clear the display and stop the game |
| Hold Play after game over | Start a new run |
The measured hold event repeats about every 487 ms, so the game runs at roughly 2.05 frames per second. That limit comes from the remote's wake/receive behavior, not from Python or the local network.
The simulator needs only Python 3.11 or newer. It does not require Home Assistant, a Zigbee radio, or an SR-260.
git clone https://github.com/SergioMazo/SR260-Dino.git
cd SR260-Dino
./run.sh --sim --twolineLive use requires a preconfigured Home Assistant/ZHA lab with the compatible Control4 custom quirks. Those quirks are an external Apache-2.0 project and are not bundled here.
git clone https://github.com/SergioMazo/SR260-Dino.git
cd SR260-Dino
./setup.sh
mkdir -p ~/.config/sr260-dino
printf '%s' 'YOUR_HOME_ASSISTANT_TOKEN' \
> ~/.config/sr260-dino/ha_token
chmod 600 ~/.config/sr260-dino/ha_token
export SR260_IEEE='aa:bb:cc:dd:ee:ff:00:11'
./run.sh --twolineReplace the example IEEE address with your own paired SR-260 address. Never publish the real value or a Home Assistant token. See the complete installation guide before using hardware.
| Command | Purpose |
|---|---|
./run.sh --twoline |
Recommended game using the list display and Play button |
./run.sh |
One-line game using the red Control4 button |
./run.sh --sim --twoline |
Offline terminal simulation |
./run.sh --message "HELLO" |
Write one display message and exit |
./run.sh --clear |
Clear the display |
./run.sh --glyphs |
Probe the remote's character table |
./run.sh --icons |
Probe the 256 display_icon values |
SR-260 buttons
│ Zigbee events
▼
Home Assistant + ZHA + Control4 quirks
│ WebSocket API
▼
HAClient ── DinoRunner ── DinoGame
│ │
│ display writes └─ pure deterministic logic
▼
SR-260 LCD
| Component | Responsibility | Network-aware |
|---|---|---|
DinoGame |
Obstacles, jumps, collisions, score, rendering | No |
HAClient |
Home Assistant WebSocket and ZHA service calls | Yes |
DinoRunner |
Maps remote events to game steps and LCD frames | Yes |
Verified directly on the research bench and in the supplied videos:
- Control4 SR-260 LCD rendering in one-line and list modes
- Play hold/release input, OFF shutdown, score, collision, restart, and game over
- Approximately 487 ms between repeated hold events
- 31 offline tests for deterministic game behavior and publication safety
The SR-260 model is verified; its exact firmware version, the Home Assistant host platform, Zigbee coordinator model, and other Control4 remotes are not claimed compatible by this repository. See compatibility.
./setup.sh
./.venv/bin/python -m pip install -r requirements-dev.txt
make checkTests do not contact Home Assistant or a radio. Hardware changes need separate bench validation and must record the exact versions used.
| Document | Contents |
|---|---|
| Installation | Clone, environment, secrets, external quirks, and launch |
| Compatibility | Verified, inferred, and untested combinations |
| Display research | Measured LCD behavior and protocol observations (Spanish) |
| Commented code | Guided source walkthrough (Spanish) |
| Research notes | Evidence, constraints, and limits |
| v0.1.0 release notes | Initial source-only research release |
| Contributing | Tests, privacy, and hardware evidence rules |
| Security policy | Private reporting and credential handling |
This release is source-only. There is no DMG or native desktop application: the project is a Python research tool that talks to an existing Home Assistant/ZHA environment.
The compatible ZHA quirks derive from
pvanbaren/zha-device-handlers, branch control4,
licensed under Apache-2.0. They are required at runtime but are not copied into
this repository. See CREDITS.md.
Control4 and SR-260 are used only to identify the independently tested product. This project is not affiliated with or endorsed by Control4 or Snap One.
SR260 Dino is available under the MIT License.