CSRmesh BLE protocol and async client for Holiday Show Home LED Balls
Project description
lightball-ble
Async BLE protocol and client for Holiday Show Home "Show Home" LED Balls — the
battery-powered RGB orbs sold under the Holiday Showtime / Show Home brands. They
speak Qualcomm/CSR's CSRmesh over a GATT bridge; this library reimplements that
framing so you can control a ball from Python (and powers the Home Assistant
lightball integration).
Install
pip install lightball-ble
Usage
You provide a bleak BLEDevice (the ball rotates its BLE address, so re-resolve
it by the stable local name — e.g. LAB00001CEB11 — before each use):
from bleak import BleakScanner
from lightball_ble import LightBall
device = await BleakScanner.find_device_by_name("LAB00001CEB11")
ball = LightBall(device, "LAB00001CEB11")
await ball.set_state(mode=1, color=0, level=2) # steady, red, mid brightness
await ball.set_show(6) # MultiColor animated show
await ball.turn_off()
# Re-resolve the address later, then reuse the client:
ball.set_ble_device(await BleakScanner.find_device_by_name("LAB00001CEB11"))
Command reference
set_state(mode, color, level, *, turn_on=True)—commonMode: animationmode(0=off, 1=steady, 2=blink, 5=fade, 7=waves …), palettecolorindex (0=red … 28=MultiColor), brightnesslevel0–4.set_show(show_sel, *, turn_on=True)—showViewanimated preset (0=Christmas … 6=MultiColor).turn_off().
Protocol
lightball_ble.protocol exposes the low-level framing if you need it:
- Network key:
reverse(SHA-256(b"686868\x00MCP"))[:16](a fixed, product-line shared key —derive_key()). - Packet: AES-128 counter-mode payload + an 8-byte byte-reversed HMAC-SHA256 MIC
- a trailing
0xFF(make_packet).
- a trailing
- Transport: packets > 20 bytes split across two GATT control points
(
split_writes).
This was reverse-engineered from the official "Show Home" Android app; see the lightball project for the full writeup.
Develop
pip install -e ".[test]"
pytest --cov=lightball_ble --cov-report=term-missing
ruff check . && ruff format --check .
License
Apache-2.0.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file lightball_ble-0.1.1.tar.gz.
File metadata
- Download URL: lightball_ble-0.1.1.tar.gz
- Upload date:
- Size: 10.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4558a3b93fa308c657cb9660f97d1a443906afda1200ec19b5f600de6527129d
|
|
| MD5 |
004c1b46fb80ad026b80d0f5565485db
|
|
| BLAKE2b-256 |
adec574fc8308f86367ae9367ef3e6adbb6eaf1863e1224420532dfb30fb0d33
|
Provenance
The following attestation bundles were made for lightball_ble-0.1.1.tar.gz:
Publisher:
publish.yml on dallanwagz/lightball-ble
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
lightball_ble-0.1.1.tar.gz -
Subject digest:
4558a3b93fa308c657cb9660f97d1a443906afda1200ec19b5f600de6527129d - Sigstore transparency entry: 1821028760
- Sigstore integration time:
-
Permalink:
dallanwagz/lightball-ble@2e3cb54222da1f10bb449a929bf77f3f4a7c2ec2 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/dallanwagz
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@2e3cb54222da1f10bb449a929bf77f3f4a7c2ec2 -
Trigger Event:
release
-
Statement type:
File details
Details for the file lightball_ble-0.1.1-py3-none-any.whl.
File metadata
- Download URL: lightball_ble-0.1.1-py3-none-any.whl
- Upload date:
- Size: 10.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e4ab619d6aa2b8beea951362dcd97179b47748578c2e610c5d2ac4d025742438
|
|
| MD5 |
ac81076d870724de815f4df05da4cbd3
|
|
| BLAKE2b-256 |
03e512ac3cf67fa222279af9053b0d8bb0dfd333c346af23f9ae818e67fcc3cf
|
Provenance
The following attestation bundles were made for lightball_ble-0.1.1-py3-none-any.whl:
Publisher:
publish.yml on dallanwagz/lightball-ble
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
lightball_ble-0.1.1-py3-none-any.whl -
Subject digest:
e4ab619d6aa2b8beea951362dcd97179b47748578c2e610c5d2ac4d025742438 - Sigstore transparency entry: 1821028784
- Sigstore integration time:
-
Permalink:
dallanwagz/lightball-ble@2e3cb54222da1f10bb449a929bf77f3f4a7c2ec2 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/dallanwagz
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@2e3cb54222da1f10bb449a929bf77f3f4a7c2ec2 -
Trigger Event:
release
-
Statement type: