Skip to content

Repository files navigation

Green pixel-art dinosaur beside a geometric Z and radio waves

SR260 Dino

CI License: MIT Python 3.11+ Status: research

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.

SR-260 LCD running the Dino prototype at score 42
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.

What the project demonstrates

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.

Controls

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.

Quick start: simulator

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 --twoline

Hardware setup

Live 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 --twoline

Replace 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.

Modes

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

Architecture

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 scope

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.

Development

./setup.sh
./.venv/bin/python -m pip install -r requirements-dev.txt
make check

Tests do not contact Home Assistant or a radio. Hardware changes need separate bench validation and must record the exact versions used.

Documentation

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

Distribution

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.

Credits and trademarks

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.

License

SR260 Dino is available under the MIT License.

About

Chrome-Dino-style research game for the Control4 SR-260 LCD over Zigbee via Home Assistant/ZHA.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages