py-bose-csp
Async Python library for controlling Bose CSP (Commercial Sound Processor) audio devices over TCP.
Installation
pip install py-bose-csp
Quick Start
import asyncio
from pybosecsp import BoseCSPDevice, ZoneState
async def main():
device = BoseCSPDevice("192.168.1.100", ["Zone1", "Zone2"])
await device.connect()
# Get current state
state: ZoneState = device.get_zone_state("Zone1")
print(f"Volume: {state.volume}, Muted: {state.is_muted}, Source: {state.current_source}")
# Control the device
await device.set_volume("Zone1", -20.0)
await device.set_mute("Zone1", True)
await device.set_source("Zone1", 2)
# Subscribe to state changes
def on_update(zone_name: str) -> None:
new_state = device.get_zone_state(zone_name)
print(f"{zone_name} updated: {new_state}")
device.subscribe_updates(on_update)
# Subscribe to availability changes
def on_availability(is_available: bool) -> None:
print(f"Device available: {is_available}")
device.subscribe_availability(on_availability)
# ... keep running ...
await device.disconnect()
asyncio.run(main())
API Reference
BoseCSPDevice(host, zones, port=10055)
Main device class. Creates a TCP connection to a Bose CSP device.
Parameters:
host— IP address or hostname of the devicezones— List of zone (listening area) names configured on the deviceport— TCP port (default:10055)reconnect_delay— Seconds between reconnection attempts (default:5)volume_interval— Seconds between volume polls (default:5)other_interval— Seconds between mute/source polls (default:30)
Methods:
await device.connect()— Connect and start pollingawait device.disconnect()— Disconnect and clean updevice.get_all_states() -> dict[str, ZoneState]— Get a copy of all zone statesdevice.get_zone_state(zone_name) -> ZoneState— Get a copy of a single zone's stateawait device.set_volume(zone_name, volume_db)— Set zone volume in dBawait device.set_mute(zone_name, mute_on)— Set zone mute stateawait device.set_source(zone_name, source_index)— Set zone input sourcedevice.subscribe_updates(callback)— Register for zone state change callbacksdevice.unsubscribe_updates(callback)— Unregister a state change callbackdevice.subscribe_availability(callback)— Register for connection status callbacksdevice.unsubscribe_availability(callback)— Unregister a connection status callback
Properties:
device.host: str— Device hostname/IPdevice.is_connected: bool— Current connection status
ZoneState
Dataclass representing a zone's state:
volume: float— Current volume in dB (default:0.0)is_muted: bool— Mute state (default:False)current_source: int— Active source index (default:0)
Exceptions
BoseCSPError— Base exceptionBoseCSPConnectionError— Connection failuresBoseCSPCommandError— Command failures
Protocol
This library implements the Bose CSP serial control protocol over TCP (default port 10055). See the Bose CSP Serial Control Guide for full protocol documentation.
License
MIT
Release files for py-bose-csp 0.3.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| py_bose_csp-0.3.5.tar.gz | 19.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| py_bose_csp-0.3.5-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 38.7 kB
Release files / py_bose_csp-0.3.5.tar.gz
| Download URL | py_bose_csp-0.3.5.tar.gz |
|---|---|
| Size | 19.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5f505798ea037abadf46283ca42b755f704b314e09b89fc889544f6e803203d5
|
|
BLAKE2b-256 checksum How to use checksums |
4d910cc7043fe356ced739be8b063dea5bfa8e28a86bcf988dd1c740f05850a5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 30, 2026.
Transparency logRelease files / py_bose_csp-0.3.5-py3-none-any.whl
| Download URL | py_bose_csp-0.3.5-py3-none-any.whl |
|---|---|
| Size | 19.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9ca9827e7069c64e3ddfe3077a4d4cda3e7b1e79c64026bc2e63647305c4aeed
|
|
BLAKE2b-256 checksum How to use checksums |
d8673d45d9ee7646f242fcd11c26aa523f601449a5c2b6152726107532e35cf0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 30, 2026.
Transparency log