Skip to main content

HA-agnostic Sony BRAVIA Connect ControlDeviceService client

Project description

pybravia-connect

HA-agnostic Python client for Sony BRAVIA Connect local gRPC (ControlDeviceService).

This is a protocol library, not a Home Assistant integration. Integrations that speak BRAVIA Connect (for example bravia-quad-homeassistant and bravia-tv-grpc-homeassistant) can depend on this package once cut over.

Protocol code was extracted from those integrations (MIT). Thanks to @steamEngineer and @braviafanboy.

Status

0.1.0a3 — connect/handshake, StartNotifyStates, GetCapabilities, get_states, ExecCommandWithAuth (fresh GetSessionRandom per write), and nonce-gated TV read_application_list / read_resource (AES-GCM; needs session_key + [crypto]).

Install

pip install pybravia-connect==0.1.0a3

For local development:

pip install -e ".[dev]"

For TV app-list and icon reads (AES-GCM decrypt):

pip install "pybravia-connect[crypto]"

Public API (sketch)

from pybravia_connect import (
    BraviaConnectClient,
    DEFAULT_THEATRE_PORT,
    async_complete_oauth_flow,
    start_oauth_login,
    select_device,
    discover_grpc_port,
)

Sync gRPC client (run in an executor from asyncio). Async credentials use aiohttp.ClientSession.

Live smoke

export BRAVIA_HOST=192.168.x.x
export BRAVIA_PORT=55051          # Theatre default; TVs may need discovery
export BRAVIA_CREDENTIALS=/path/to/keys.json
python tools/live_smoke.py

Validated on HT-A9M2: connect/handshake, GetCapabilities, StartNotifyStates, get_states, and volume writes via exec_command while powered on. Volume/mute writes are no-ops when the control unit is off — live smoke wakes power first. Stop any Home Assistant bravia_quad session on the same device before smoke (dual key_id sessions flake).

Regenerating protobuf stubs

python -m grpc_tools.protoc -Isrc/pybravia_connect/proto \
  --python_out=src/pybravia_connect/proto \
  --grpc_python_out=src/pybravia_connect/proto \
  src/pybravia_connect/proto/bravia_control.proto

Then re-apply two manual patches:

  1. Make the pb2_grpc import relative: from . import bravia_control_pb2.
  2. Register the descriptor in a private pool, not the global Default() one (_pool = DescriptorPool() / DESCRIPTOR = _pool.AddSerializedFile(...)). This avoids symbol collisions when co-installed with integrations that still vendor their own stubs.

Development

python3 -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
ruff check . && ruff format --check .
pytest -q

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pybravia_connect-0.1.0a3.tar.gz (34.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pybravia_connect-0.1.0a3-py3-none-any.whl (35.4 kB view details)

Uploaded Python 3

File details

Details for the file pybravia_connect-0.1.0a3.tar.gz.

File metadata

  • Download URL: pybravia_connect-0.1.0a3.tar.gz
  • Upload date:
  • Size: 34.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for pybravia_connect-0.1.0a3.tar.gz
Algorithm Hash digest
SHA256 e198945edbf06d9a43f0a2eac513079a8be6a0bbbed88d39eabbd85c8e79e66f
MD5 4bdbc62b4de602b1e7ff9bc7bf1e9075
BLAKE2b-256 bbd04b5130c8a5587429ece803d934b6b0c2efd6d99dcfecacdc1d1d5a55f4d1

See more details on using hashes here.

Provenance

The following attestation bundles were made for pybravia_connect-0.1.0a3.tar.gz:

Publisher: publish.yml on steamEngineer/pybravia-connect

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pybravia_connect-0.1.0a3-py3-none-any.whl.

File metadata

File hashes

Hashes for pybravia_connect-0.1.0a3-py3-none-any.whl
Algorithm Hash digest
SHA256 097277de1451d1316b4914f9d29167ff633950e52278d24c35ae26b3fb633f6b
MD5 66fdb385fc977dcb2e0237f01509651f
BLAKE2b-256 b78df74f1de4d2eac8f7eb193afbca7eb2e622812baf0a4e6425fc1d06a01844

See more details on using hashes here.

Provenance

The following attestation bundles were made for pybravia_connect-0.1.0a3-py3-none-any.whl:

Publisher: publish.yml on steamEngineer/pybravia-connect

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page