Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

home-disconnect

Talk to Home Connect appliances (Bosch, Siemens, Thermador, Neff, Gaggenau and the other BSH brands) directly over your local network, without the Home Connect cloud. It's the library behind the Home Connect Local Home Assistant integration.

The name is the point: once you have an appliance's profile, everything runs locally, and you can even tell the appliance to stop talking to BSH's servers altogether (see Disconnecting from the cloud).

What it does

  • Connects to an appliance over its local encrypted WebSocket, in both schemes appliances use: TLS-PSK (port 443) and AES (port 80).
  • Keeps the connection up: handshake, heartbeat, automatic reconnect with backoff, and a full re-read of the appliance's state after every reconnect, so values never go stale.
  • Reads the appliance's profile (the DeviceDescription and FeatureMapping files) from a ZIP, uploaded bytes, a folder, or straight from your Home Connect account.
  • Turns every feature into an entity with a typed value, live access and availability, callbacks on change, and checked writes.
  • Selects and starts programs with the right options, following the rules different appliances need.
  • Toggles the appliance's cloud connection.

Installation

pip install home-disconnect

Python 3.13 or newer (TLS-PSK needs the standard library support added in 3.13).

Quick start

import asyncio

import aiohttp

from home_disconnect import Appliance, load_profiles


async def main() -> None:
    # A profile from the Home Connect Profile Downloader (ZIP or folder).
    loaded = load_profiles("THERMADOR-DWHD660WFP-68A40E0FC8F1.zip")[0]
    connection = loaded.connection  # key, IV and connection type from the profile's JSON

    async with aiohttp.ClientSession() as session:
        appliance = Appliance(
            session,
            "192.168.1.130",  # the appliance's address
            loaded.profile,
            connection.psk64,
            connection.iv64,
            app_name="My app",
            app_id="my-app-1",
        )
        await appliance.connect()
        try:
            print(appliance.status["BSH.Common.Status.DoorState"].value)  # "Closed"
            print(appliance.selected_program.name if appliance.selected_program else None)
        finally:
            await appliance.close()


asyncio.run(main())

More in the usage guide: getting a profile, reading and writing values, callbacks, programs, connection states, errors and exporting profiles.

Disconnecting from the cloud

Most Home Connect appliances have a setting, BSH.Common.Setting.AllowBackendConnection, that decides whether they connect to BSH's servers at all. With it off, the appliance stays reachable on your network through this library, but stops reporting to, and taking commands from, the Home Connect cloud.

print(appliance.cloud_connection_allowed)  # True
print(appliance.cloud_connected)  # True: connected to BSH's servers right now

await appliance.set_cloud_connection(allowed=False)  # disconnect from the cloud
await appliance.set_cloud_connection(allowed=True)  # and back

Things to know before you turn it off:

  • The official Home Connect app and anything else that goes through the cloud (voice assistants, the cloud Home Assistant integration, other partner services) stop reaching the appliance.
  • Software updates come from BSH's servers, so turn it back on now and then to get them.
  • Pairing a new appliance still needs the cloud: the app pairs it, and the profile with its local key comes from your Home Connect account. Get the profile first, then disconnect.
  • You can always turn it back on, from this library or from the appliance's own settings menu.

Appliances without the setting raise AccessError from set_cloud_connection(), and both properties return None for them.

Contributing and licensing

The code is MIT-licensed (LICENSE). Parts are based on the MIT-licensed hcpy and on code moved from Home Connect Local; their notices are in THIRD_PARTY_NOTICES.md, and PROVENANCE.md lists where each module comes from. Code from homeconnect_websocket (and so from home-disconnect 1.x) must not be copied here, including its tests and protocol document.

uv sync
uv run pytest
uv run ruff check
uv run mypy

Metadata

Release files for home-disconnect 2.0.0b0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for home-disconnect 2.0.0b0
File Size Uploaded
home_disconnect-2.0.0b0.tar.gz 156.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for home-disconnect 2.0.0b0
File Interpreter ABI Platform
home_disconnect-2.0.0b0-py3-none-any.whl Python 3 none any Details

Total release size: 205.0 kB

Release files / home_disconnect-2.0.0b0.tar.gz

Download URL home_disconnect-2.0.0b0.tar.gz
Size 156.0 kB
Tags Source
SHA-256 checksum
How to use checksums
47b1d69442272c30c93aa134274b7f7cc97f15cc74e559b940cf37e2f07e70cd
BLAKE2b-256 checksum
How to use checksums
77abf7c4be61730ce335d1c65318b3df3c653b650bc90f0e5d51565caae1adf8
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 Oct 11, 2026.

Transparency log

Release files / home_disconnect-2.0.0b0-py3-none-any.whl

Download URL home_disconnect-2.0.0b0-py3-none-any.whl
Size 48.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b900ca1c00a3809e8964b9ec570e247153d13c121a80c9d3286e67745b2b5462
BLAKE2b-256 checksum
How to use checksums
b28ffd486da06e1214cc19bb0be8f3382b99ab4831e9fa603266df72ae2de54e
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 Oct 11, 2026.

Transparency log
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