{"id":51836198,"url":"https://github.com/prospectore/weber-connect-unofficial","last_synced_at":"2026-07-22T22:01:09.978Z","repository":{"id":366585270,"uuid":"1266919248","full_name":"ProspectOre/weber-connect-unofficial","owner":"ProspectOre","description":"Unofficial native Home Assistant integration for the Weber Connect Smart Grilling Hub","archived":false,"fork":false,"pushed_at":"2026-07-21T19:54:24.000Z","size":450,"stargazers_count":4,"open_issues_count":1,"forks_count":2,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-21T21:23:06.581Z","etag":null,"topics":["ble","bluetooth","grilling","home-assistant","home-assistant-addon","mqtt","thermometer","weber","weber-connect"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ProspectOre.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-12T04:18:34.000Z","updated_at":"2026-07-21T19:31:31.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/ProspectOre/weber-connect-unofficial","commit_stats":null,"previous_names":["prospectore/weber-connect-home-assistant-addon","prospectore/weber-connect-unofficial"],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/ProspectOre/weber-connect-unofficial","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ProspectOre%2Fweber-connect-unofficial","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ProspectOre%2Fweber-connect-unofficial/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ProspectOre%2Fweber-connect-unofficial/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ProspectOre%2Fweber-connect-unofficial/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ProspectOre","download_url":"https://codeload.github.com/ProspectOre/weber-connect-unofficial/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ProspectOre%2Fweber-connect-unofficial/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35778989,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-07-22T02:00:06.236Z","response_time":124,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ble","bluetooth","grilling","home-assistant","home-assistant-addon","mqtt","thermometer","weber","weber-connect"],"created_at":"2026-07-22T22:00:47.452Z","updated_at":"2026-07-22T22:01:09.969Z","avatar_url":"https://github.com/ProspectOre.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Weber Connect Unofficial\n\nNative Home Assistant support for the Weber Connect Smart Grilling Hub.\n\nVersion 3.0 is one native Home Assistant integration:\n\n- automatic Bluetooth discovery through local adapters and active ESPHome proxies;\n- one physically confirmed setup with no Weber email, password, phone secret, or packet capture;\n- native devices and entities—no MQTT broker or separate control panel;\n- exactly four stable probe temperature entities—one for each physical slot—\n  plus clear connection and last-update context;\n- phone + Home Assistant by default: the Weber app may own Bluetooth while\n  Home Assistant follows probe temperatures through its own Weber Cloud\n  connection;\n- an optional Home Assistant-only mode that owns one local Bluetooth connection\n  through Home Assistant's adapter or active ESPHome proxy selection.\n\nThis project is not affiliated with, endorsed by, or supported by Weber.\n\n\u003e [!IMPORTANT]\n\u003e On the equipment below, a clean 3.0 installation generated its own private\n\u003e companion, paired through an ESPHome\n\u003e proxy, appeared in Weber Cloud in about 12 seconds, and immediately delivered\n\u003e native probe entities while the Weber app was open. The 70-minute app/cloud\n\u003e session, one-hour proxy-only session, proxy reboot, and proxy-only Home\n\u003e Assistant restart also passed. A second proxy was not available, so\n\u003e multi-proxy failover remains explicitly unverified.\n\n## Install\n\n3.0 is installed as a HACS custom integration:\n\n1. Open **HACS → Integrations → ⋮ → Custom repositories**.\n2. Add this repository as category **Integration**:\n\n   ```text\n   https://github.com/ProspectOre/weber-connect-unofficial\n   ```\n\n3. Download **Weber Connect Unofficial** and restart Home Assistant.\n4. Open **Settings → Devices \u0026 services**. Select the discovered Weber hub, or\n   choose **Add integration → Weber Connect Unofficial**.\n5. Before closing the Weber app, turn off Bluetooth on that phone or tablet and\n   confirm the hub still appears online through Wi-Fi. Leave Bluetooth off.\n   Initial setup always needs Home Assistant internet access and a working\n   hub-to-Weber Cloud connection, including when you intend to select **Home\n   Assistant only** after setup.\n6. Fully close the Weber app on every phone or tablet that uses it, and turn off\n   Bluetooth on any other one. This prevents a phone from reclaiming the hub\n   while Home Assistant pairs.\n7. Wake the hub, continue setup, and approve Home Assistant on the hub display.\n8. Home Assistant checks Weber Cloud for up to five minutes. After setup\n   completes, turn Bluetooth back on and reopen the Weber app.\n\nThe intended setup creates and stores a private Home Assistant companion\nwithout asking for a Weber account password. The documented clean-install path\nhas been validated end to end on the equipment below.\n\n### Replacing the 2.1 add-on\n\n3.0 is a clean native integration, not an in-place add-on upgrade. In the 2.1\npanel, use **Forget This Hub**, then stop and uninstall the add-on before\ninstalling 3.0. The native integration creates a new device, four probe\ntemperature entities, and two connection-context entities; it does not import\nthe add-on's MQTT entities or settings. If\nan old unavailable MQTT device remains, remove its retained discovery records\nfrom the broker and delete that MQTT device from Home Assistant. The add-on and\nits MQTT broker are not needed by 3.0.\n\n## Everyday behavior\n\nAfter cloud association succeeds, the default mode is **Phone + Home\nAssistant**. Home Assistant keeps one Weber Cloud companion socket open and\nrequests fresh status on a 10-second cadence, leaving the hub's single\nBluetooth connection available to the Weber app. Recipes continue to be\nstarted and managed in the Weber app while Home Assistant monitors the four\nprobe temperature slots.\n\n**Home Assistant only** instead keeps one local GATT connection open through\nHome Assistant's selected adapter or active ESPHome proxy. It reconnects only\nafter a real link loss. This mode cannot share the hub's Bluetooth connection\nwith the Weber app. There is no automatic fallback between cloud and Bluetooth:\nchanging modes closes one transport before starting the other.\n\nProbe entities retain stable slot IDs such as `probe_2_temperature`. Optional\nnicknames keep the physical number visible—for example, **Brisket · Probe 2**—\nwithout changing the entity's identity.\n\nThe device page has exactly one permanent temperature entity for each physical\nslot: **Probe 1** through **Probe 4**. A connected probe shows its temperature;\nan empty slot—or a sleeping or powered-off hub with no current reading—reads\n**Unknown** with the probe-off icon. That is the normal idle state, not a sign\nthat the integration or Home Assistant is offline. Routine disconnects recover\nquietly without raising a Home Assistant repair. Battery level, probe type, and\nprobe state remain attributes on that same entity instead of creating\nredundant entities.\n\nTwo additional context entities are enabled by default. **Connection** reports\n**Connected** or **Disconnected** and identifies whether Home Assistant is\nusing **Weber Cloud** or **Bluetooth**. **Last successful update** preserves the\ntime fresh hub data most recently arrived, including while the hub is sleeping\nor powered off.\n\n3.0 is deliberately read-only. Recipe text, instructions, cook controls,\ncavities, and timers are not exposed.\n\n## Requirements\n\n- Home Assistant 2026.7.0 or newer.\n- HACS for installation until the integration is accepted into Home Assistant.\n- A connectable Home Assistant Bluetooth adapter or active ESPHome Bluetooth\n  proxy in range during setup.\n- Home Assistant internet access and a hub that is already online in Weber\n  Cloud for every initial installation. **Home Assistant only** avoids cloud\n  traffic after setup, not during setup.\n\nFor an ESPHome proxy, `bluetooth_proxy.active` must be enabled and a connection\nslot must be available. No proxy address or encryption key is entered into this\nintegration; Home Assistant owns adapter selection and credentials.\n\n## Compatibility and validation\n\nTesting uses a Weber Connect Hub running `2.0.3_7398`, Home Assistant Yellow on\nHome Assistant `2026.7.2`, Weber app `2.10.0.2439` on a Samsung Galaxy Tab A9+\n(`SM-X210`, Android 16), and one ESPHome Bluetooth proxy running ESPHome\n`2026.7.0`. This equipment has demonstrated physical-confirmation pairing,\nclean-install cloud association for a newly generated companion, matching phone\nand Home Assistant temperatures, proxy discovery, direct proxy reads, and\nrecovery after a deliberate proxy reboot.\n\nThe final 3.0 physical setup and endurance tests used the ESPHome proxy path.\nA host-adapter-only pairing and endurance run has not been completed, so direct\nadapter compatibility is implemented through Home Assistant's standard\nBluetooth manager but is not claimed as physically verified for this release.\n\nThe final candidate was also restarted into **Home Assistant only** with the\nESPHome proxy as the sole Bluetooth source. After a deliberate proxy power\ncycle, native diagnostics advanced from 10 to 17 successful updates without\nanother failed update, retained the live `23.1 °C` probe reading, and reported\nno current error. Returning to **Phone + Home Assistant** then produced six\ncloud updates with zero failures while the official app was open.\n\nThe current greenfield transport implementation is held to at least 95%\ncombined statement/branch coverage. Import, config flow, transient\nidentity generation, entity contracts, protocol frames, persistent-session\nreuse, reconnect behavior, proxy service-cache recovery, diagnostics redaction,\nand transport ownership are covered. Live smoke and config-entry reload tests\nnow cover both the persistent WebSocket and persistent proxy-GATT lifecycles.\nThe final persistent cloud test ran for more than 70 minutes with the Weber app\nopen and an active cook. The proxy-only test ran for more than one hour and was\nfollowed by a successful Home Assistant restart without re-pairing. See\n[Production readiness](PRODUCTION_READINESS.md) for the measurements and\nremaining unverified scenarios. The corresponding\n[redacted machine-readable evidence](docs/validation/3.0.0-rc-physical.json)\ncontains no device identifiers. Multi-proxy failover is explicitly unverified.\n\nThat is a test matrix, not a claim that every Weber model, firmware, account\nregion, or proxy has been certified. Compatibility reports and pull requests\nare welcome; see [Contributing](CONTRIBUTING.md) for the safe details to include.\n\n## Privacy\n\nThe integration generates a random companion ID, cloud device password, and\ntransient pairing value. Only the approved companion identity and cloud\ncredential are stored in the config entry; the pairing value is discarded.\nDiagnostics redact stored credentials and all hub/companion identifiers. The\nintegration never asks for the user's Weber account password and does not copy\nsecrets from the official app.\n\nWeber Cloud is private and undocumented. The default mode sends Home\nAssistant's generated identity and read-only current-status requests to Weber.\n**Home Assistant only** mode avoids those requests but cannot share the hub's\nsingle Bluetooth connection with the phone.\n\nRegistering the private companion happens before physical approval. If setup is\nabandoned after registration, Weber may retain an unused server-side companion\nrecord; it contains no Weber account password, and Weber provides no supported\nrevocation endpoint. Removing the Home Assistant entry always deletes the local\ncredential.\n\n## Project documents\n\n- [Architecture](ARCHITECTURE.md)\n- [ADR 0001: superseded proxy relay](docs/adr/0001-home-assistant-bluetooth-proxy-transport.md)\n- [ADR 0002: native transport lifecycle](docs/adr/0002-native-transport-lifecycle.md)\n- [Production readiness](PRODUCTION_READINESS.md)\n- [Security policy](SECURITY.md)\n- [Contributing](CONTRIBUTING.md)\n- [Changelog](CHANGELOG.md)\n- [GitHub wiki](https://github.com/ProspectOre/weber-connect-unofficial/wiki)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprospectore%2Fweber-connect-unofficial","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fprospectore%2Fweber-connect-unofficial","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprospectore%2Fweber-connect-unofficial/lists"}