{"id":49944596,"url":"https://github.com/fistacho/ha-netatmo-bubendorff","last_synced_at":"2026-05-17T14:08:26.191Z","repository":{"id":352933186,"uuid":"1217262527","full_name":"Fistacho/ha-netatmo-bubendorff","owner":"Fistacho","description":"Home Assistant custom integration for Netatmo Smart Door Lock \u0026 Bubendorff smart roller shutters — covers, climate, cameras and lights via Netatmo API","archived":false,"fork":false,"pushed_at":"2026-04-28T19:02:51.000Z","size":378,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-28T20:29:45.456Z","etag":null,"topics":["bubendorff","cover","hacs","hacs-integration","home-assistant","homeassistant","netatmo","shutter","smart-home"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Fistacho.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":"SUPPORT.md","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-04-21T17:55:53.000Z","updated_at":"2026-04-28T19:02:53.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Fistacho/ha-netatmo-bubendorff","commit_stats":null,"previous_names":["fistacho/ha-netatmo-bubendorff"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/Fistacho/ha-netatmo-bubendorff","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Fistacho%2Fha-netatmo-bubendorff","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Fistacho%2Fha-netatmo-bubendorff/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Fistacho%2Fha-netatmo-bubendorff/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Fistacho%2Fha-netatmo-bubendorff/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Fistacho","download_url":"https://codeload.github.com/Fistacho/ha-netatmo-bubendorff/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Fistacho%2Fha-netatmo-bubendorff/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33141446,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-17T09:28:26.183Z","status":"ssl_error","status_checked_at":"2026-05-17T09:27:52.702Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["bubendorff","cover","hacs","hacs-integration","home-assistant","homeassistant","netatmo","shutter","smart-home"],"created_at":"2026-05-17T14:08:25.120Z","updated_at":"2026-05-17T14:08:26.173Z","avatar_url":"https://github.com/Fistacho.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Netatmo (Bubendorff Fistacho) — Home Assistant integration\n\n[![HACS Custom](https://img.shields.io/badge/HACS-Custom-orange.svg)](https://github.com/hacs/integration)\n[![Release](https://img.shields.io/github/v/release/Fistacho/ha-netatmo-bubendorff?sort=semver)](https://github.com/Fistacho/ha-netatmo-bubendorff/releases)\n[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE)\n[![GitHub issues](https://img.shields.io/github/issues/Fistacho/ha-netatmo-bubendorff)](https://github.com/Fistacho/ha-netatmo-bubendorff/issues)\n[![Home Assistant](https://img.shields.io/badge/Home%20Assistant-2024.1%2B-41BDF5.svg)](https://www.home-assistant.io/)\n\nA patched fork of the official [Home Assistant Netatmo](https://www.home-assistant.io/integrations/netatmo) integration that adds **jalousie / tilted slats control** for Bubendorff roller shutters (iDiamant with Netatmo).\n\nThe official integration only exposes `open / close / stop`. Bubendorff shutters with adjustable slats also support a **jalousie position** (slats tilted so light passes through), mapped in Netatmo's API to `target_position: -2`. This integration exposes it via the standard HA cover `OPEN_TILT` / `CLOSE_TILT` commands.\n\n---\n\n## What's different from the official integration\n\n| Feature | Official `netatmo` | This fork |\n| --- | --- | --- |\n| Open / close / stop | ✅ | ✅ |\n| Position 0-100 slider | ✅ (but hardware ignores it) | ❌ (removed — misleading) |\n| Open tilt (jalousie) | ❌ | ✅ |\n| Close tilt (slats flat) | ❌ | ✅ |\n| Other Netatmo devices (camera, thermostat, lights, etc.) | ✅ | ✅ |\n\n### Why no 0-100 slider?\n\nBubendorff shutters only honour **4 discrete `target_position` values**:\n\n- `100` — fully open\n- `0` — fully closed\n- `-1` — stop current movement (write-only)\n- `-2` — jalousie / preferred slat position\n\nValues like `30%` or `75%` are rejected by the hardware. Exposing a 0-100 slider in HA created a false UX — users moved it and nothing happened. This fork removes the slider entirely.\n\n---\n\n## Installation\n\n### Via HACS (recommended)\n\n1. HACS → Integrations → ⋮ → **Custom repositories**\n2. Add `https://github.com/Fistacho/ha-netatmo-bubendorff` as type **Integration**\n3. Install **Netatmo (Bubendorff Fistacho)**\n4. Restart Home Assistant\n\n### Manual\n\n1. Copy `custom_components/netatmo_bubendorff/` into your `/config/custom_components/`\n2. Restart Home Assistant\n\n### Configure\n\nOAuth flow is identical to the official Netatmo integration. The full steps:\n\n#### 1. Create (or reuse) a Netatmo developer app\n\n1. Go to **\u003chttps://dev.netatmo.com/apps\u003e** and sign in with your normal\n   Netatmo account (same one as in the mobile app).\n2. If you already created an app for the official Netatmo / iDiamant\n   integration — reuse it. **The same Client ID / Secret works here.**\n3. Otherwise click **Create** and fill:\n   - **App name:** anything, e.g. `Home Assistant`\n   - **Description:** anything\n   - **Data Protection Officer name + email:** your own\n   - **Company:** Private\n4. On the app page, verify the **Redirect URI** contains:\n\n   ```text\n   https://my.home-assistant.io/redirect/oauth\n   ```\n\n   Add it if missing — OAuth will fail with \"invalid redirect\" otherwise.\n   Click **Save**.\n5. Note your **Client ID** and **Client Secret** (click the 👁 icon to\n   reveal the secret) — you'll paste them into HA in a moment.\n\n#### 2. Add credentials to Home Assistant\n\nTwo entry points, same result:\n\n**Option A — via the \"Enter application credentials\" dialog** (shown\nautomatically when you first add the integration):\n\n- **Name:** anything, e.g. `Netatmo Bubendorff`\n- **OAuth Client ID:** *(paste from dev.netatmo.com)*\n- **OAuth Client Secret:** *(paste from dev.netatmo.com)*\n- Click **Add**\n\n**Option B — pre-configure via Settings:**\n\n- **Settings → Devices \u0026 Services → ⋮ (top right) → Application Credentials**\n- **Add application credential**\n- Choose integration: **Netatmo (Bubendorff Fistacho)**\n- Fill the same fields as above\n\n#### 3. Add the integration\n\n1. **Settings → Devices \u0026 Services → Add integration** → search\n   **Netatmo (Bubendorff Fistacho)**\n2. HA opens Netatmo's OAuth login page → click **YES, I ACCEPT**\n3. You're redirected back to HA → integration loads → devices appear\n   (shutters, cameras, thermostats, lights — all your Netatmo devices)\n\n#### Troubleshooting\n\n| Symptom | Cause | Fix |\n| --- | --- | --- |\n| \"Invalid redirect URI\" | Redirect URI missing in Netatmo app | Step 1.4 — add the URI and Save |\n| Loops back to login | Netatmo session cache | Log out at dev.netatmo.com, retry |\n| \"Integration not found\" | HACS not restarted | Restart HA after HACS install |\n| No shutters visible | Devices not in the Netatmo home | Check Netatmo mobile app — confirm Bubendorff is paired |\n| `update.*_update` shows version but no entities | Config entry needs reload | **Settings → Devices \u0026 Services → Netatmo (Bubendorff Fistacho) → ⋮ → Reload** |\n\n---\n\n## ⚠️ Coexistence with the official Netatmo integration\n\nThis uses a **different domain** (`netatmo_bubendorff`) so Home Assistant will load both if you also have the official `netatmo` integration configured. **Don't.**\n\n- Both register the **same webhook URL** with Netatmo's cloud — the last one wins and the other stops receiving push updates\n- Both pull state for the same home — double API calls, possible rate-limit hits\n\n**Recommended:** remove the official Netatmo integration *before* configuring this one. All your devices (cameras, thermostats, lights, switches, shutters) will show up under the new integration.\n\n---\n\n## Services\n\n### `netatmo_bubendorff.set_shutters_batch`\n\nMove multiple shutters in a **single Netatmo API call**. Much faster than\nfiring N separate `cover.*` services — and friendlier to the account-level\nrate limit (important for \"close all\" automations at sunset).\n\n```yaml\nservice: netatmo_bubendorff.set_shutters_batch\ndata:\n  entity_id:\n    - cover.roleta\n    - cover.roleta_2\n    - cover.roleta_3\n    - cover.roleta_4\n  target_position: \"0\"   # 100=open, 0=closed, -1=stop, -2=jalousie\n```\n\nMixed targets (different positions per shutter) are not supported in one\ncall — call the service once per target group.\n\n---\n\n## Physical button / app events\n\nEvery webhook push from Netatmo cloud fires the `netatmo_event` event on the\nHA bus, including shutter state changes triggered by the **physical wall\nswitch** or the official Netatmo mobile app. You can trigger automations\ndirectly from those events.\n\nDebug what your home sends:\n\n```yaml\n# Dev Tools → Events → listen to: netatmo_event\n```\n\nExample automation — react when someone opens roleta manually:\n\n```yaml\n- alias: \"Roleta salon opened manually — turn on lamp\"\n  trigger:\n    platform: event\n    event_type: netatmo_event\n  condition:\n    - \"{{ trigger.event.data.device_id == '\u003cdevice_id_of_your_shutter\u003e' }}\"\n    - \"{{ trigger.event.data.data.push_type is defined }}\"\n  action:\n    - service: light.turn_on\n      target:\n        entity_id: light.salon\n```\n\n---\n\n## Lovelace example\n\n```yaml\ntype: tile\nentity: cover.roleta\nname: Roleta salon\nicon: mdi:blinds\nfeatures:\n  - type: cover-open-close     # open / stop / close\n  - type: cover-tilt           # open tilt / close tilt (jalousie)\n```\n\nOr the original button-card pattern still works — it calls `cover.open_cover_tilt` which this integration maps to `target_position: -2`.\n\n---\n\n## How the jalousie integration works internally\n\n```text\nHA command                 pyatmo method         Netatmo API target_position\n-----------                -------------         ---------------------------\ncover.open_cover           async_open()          100\ncover.close_cover          async_close()           0\ncover.stop_cover           async_stop()           -1\ncover.open_cover_tilt      async_open_tilt()      -2   ← added by this fork\ncover.close_cover_tilt     async_close_tilt()      0\n```\n\nThe vendored copy of pyatmo 7.5.0 (in `custom_components/netatmo_bubendorff/pyatmo/`) has the added `async_open_tilt` / `async_close_tilt` methods on `ShutterMixin`. The integration's `__init__.py` registers that vendored copy in `sys.modules['pyatmo']` before anything else imports it, so the same `import pyatmo` statements that the rest of the integration uses resolve to the patched version.\n\n---\n\n## Roadmap\n\n- **Faza 3** — submit upstream PRs:\n  - [cgtobi/pyatmo](https://github.com/cgtobi/pyatmo) — add tilt methods to `ShutterMixin` (small, focused change)\n  - [home-assistant/core](https://github.com/home-assistant/core) — expose `OPEN_TILT`/`CLOSE_TILT` on `netatmo/cover.py` (requires upstream pyatmo merge first)\n- Migrate from vendored `pyatmo 7.5.0` to `pyatmo 9.x` (current HA core version)\n- Separate the pyatmo fork into its own repo `pyatmo-bubendorff` on PyPI\n\n---\n\n## Credits\n\n- Upstream [home-assistant/core](https://github.com/home-assistant/core) Netatmo integration (Apache 2.0)\n- Upstream [cgtobi/pyatmo](https://github.com/cgtobi/pyatmo) (MIT)\n- Bubendorff jalousie behaviour discovered and documented by the HA community:\n  [WTH: update netatmo integration for use with bubendorff shutters](https://community.home-assistant.io/t/wth-update-netatmo-integration-for-use-with-bubendorff-shutters/814580)\n\n## License\n\nMIT — see [LICENSE](LICENSE). Upstream portions remain under their original Apache 2.0.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffistacho%2Fha-netatmo-bubendorff","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffistacho%2Fha-netatmo-bubendorff","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffistacho%2Fha-netatmo-bubendorff/lists"}