bosch-shc-camera-client
Async Python client library for Bosch Smart Home Camera cloud + local (RCP) APIs.
Extracted from the Bosch Smart Home Camera Tool integration family (Home Assistant, ioBroker, Python CLI, MCP, Node-RED, NiceGUI frontend) so every consumer shares one maintained implementation instead of duplicating the client logic per platform.
Status: early extraction in progress. Not yet feature-complete versus the inline modules it's replacing.
Scope
- Local RCP protocol read access over
/rcp.xml(Gen2 camera on-device control plane), read-only (local_rcpmodule — synchronous, used from an executor thread). - HTTP Digest authentication (RFC 7616/2617) —
auth_utils.async_digest_request. - RCP (Remote Configuration Protocol) via cloud proxy and direct LOCAL (
rcpmodule): session management with TTL caching, binary protocol reads, direct-LOCAL Gen2 reads/writes (privacy mode, front-light brightness), response parsers (alarm catalog, motion zones/coords, TLS cert info, network services, IVA analytics catalog), andfetch_rcp_camera_data()— a pure per-camera orchestrator that reads all of the above in one call and returns anRcpCameraDatadataclass (only fields whose reads succeeded are populated; the rest stayNone, meaning "not read this round"). All session/SSL-context objects are caller-injected — this module never builds or caches HA-specific process-wide state itself, and never touches any coordinator/cache-dict state. - Bosch cloud API (
residential.cbs.boschsecurity.com) write mechanics (cloudmodule):cloud_put_json()— Bearer-auth PUT with a timeout, HTTP-status classification, optional JSON response parsing. This is the one shared piece extracted from the source integration's 5 cloud-setter functions (privacy/light/light_component/notifications/pan); deliberately narrow — see "Out of scope" below. - Local TCP→TLS proxy for camera RTSPS streams (
tls_proxymodule): an asyncio-native (asyncio.start_server()) proxy that lets a plain RTSP client (FFmpeg/go2rtc) connect tortsp://127.0.0.1:<port>instead of dealing with the camera's self-signed TLS cert directly. Server/state ownership lives entirely on caller-suppliedport_cache/server_cachedicts — no module-level listener state. Also includesrtsp_keepalive/pre_warm_rtsp/confirm_encoder_ready, authenticated RTSP OPTIONS/DESCRIBE helpers used to keep a session alive and warm up the camera's encoder before the real client connects. Callingstart_tls_proxy/stop_tls_proxyneeds a Python 3.13+ interpreter (asyncio.Server.close_clients()); importing the package on older Pythons is unaffected as long as those functions aren't called.
Out of scope (stays integration-specific, not extracted here, by deliberate "clean boundary" decision —
see knowledge-base/ha-core-submission-plan.md in the source repo): the cloud setters' actual
multi-tier fallback orchestration (cloud → local RCP → SHC local API), coordinator cache writes, and
notification side effects — genuine coordinator business logic, not wire protocol, and threading the
~15 coordinator attributes it touches through a "pure" interface would obscure the boundary rather than
clarify it. Also out of scope: FCM push-notification plumbing tied to Home Assistant's
recorder/snapshot-store internals, anything HA-entity-shaped, and the SMB/FTP export helpers (smb.py)
— those reach into the HA integration's coordinator object directly (coordinator.hass,
coordinator.options, private state) rather than being a standalone API client.
Install
pip install bosch-shc-camera-client
License
MIT, see LICENSE.
Release files for bosch-shc-camera-client 0.5.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 | |
|---|---|---|---|
| bosch_shc_camera_client-0.5.5.tar.gz | 79.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| bosch_shc_camera_client-0.5.5-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 112.7 kB
Release files / bosch_shc_camera_client-0.5.5.tar.gz
| Download URL | bosch_shc_camera_client-0.5.5.tar.gz |
|---|---|
| Size | 79.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
438e765f0ab6bd1dcaad7a38481f0f430523a421822b60465ecf56f593ea18d4
|
|
BLAKE2b-256 checksum How to use checksums |
7987510e2b0937d22e1d8ccb4adaf4b4e77b06d305a772909e61b19c77a35e4b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Aug 4, 2026.
Transparency logRelease files / bosch_shc_camera_client-0.5.5-py3-none-any.whl
| Download URL | bosch_shc_camera_client-0.5.5-py3-none-any.whl |
|---|---|
| Size | 33.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b24b26e2b27b1b21dd114cbc9aa3263d2d28a2ca33d81c9cd6133814b87b1eca
|
|
BLAKE2b-256 checksum How to use checksums |
aa58f76bf7f58c05241cbfc12ce052a59701736fe878334345a33f133c0d388d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Aug 4, 2026.
Transparency log