Skip to main content

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 device
  • zones — List of zone (listening area) names configured on the device
  • port — 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 polling
  • await device.disconnect() — Disconnect and clean up
  • device.get_all_states() -> dict[str, ZoneState] — Get a copy of all zone states
  • device.get_zone_state(zone_name) -> ZoneState — Get a copy of a single zone's state
  • await device.set_volume(zone_name, volume_db) — Set zone volume in dB
  • await device.set_mute(zone_name, mute_on) — Set zone mute state
  • await device.set_source(zone_name, source_index) — Set zone input source
  • device.subscribe_updates(callback) — Register for zone state change callbacks
  • device.unsubscribe_updates(callback) — Unregister a state change callback
  • device.subscribe_availability(callback) — Register for connection status callbacks
  • device.unsubscribe_availability(callback) — Unregister a connection status callback

Properties:

  • device.host: str — Device hostname/IP
  • device.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 exception
  • BoseCSPConnectionError — Connection failures
  • BoseCSPCommandError — 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)

Source distribution for py-bose-csp 0.3.5
File Size Uploaded
py_bose_csp-0.3.5.tar.gz 19.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for py-bose-csp 0.3.5
File Interpreter ABI Platform
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 log

Release 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

Release history Release notifications | RSS feed

This release

0.3.5 This release

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page