From 2710eb0e87ddc2a633a2785bffaac73a875e5793 Mon Sep 17 00:00:00 2001 From: GreenGrassBlueOcean <43173895+GreenGrassBlueOcean@users.noreply.github.com> Date: Sat, 10 Oct 2026 16:45:15 +0200 Subject: [PATCH 1/9] docs(readme): modernize master landing page with side-by-side feature & test comparisons (#687) docs(readme): modernize master landing page with side-by-side feature & test comparisons (#687) - Side-by-side feature & architecture comparison table between legacy stable (v0.9.4) and modern beta (v2.0.0b15 / v2-phase1-architecture) - Automated testing & quality comparison table (3,464 tests in release, 100% statement coverage, golden frame corpus, syrupy snapshots) - Safe dual installation tracks (temporary directory download/extraction verification, failure abort, recovery file preservation) - Hardware profiles, entity domains, bus monitor Lovelace card, and documentation links - Comprehensive community credits recognizing core integration architects, UI contributors, and physical bus trace submitters --- README.md | 322 ++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 286 insertions(+), 36 deletions(-) diff --git a/README.md b/README.md index dd17eba32..22eb8300a 100644 --- a/README.md +++ b/README.md @@ -1,63 +1,313 @@ # MyHOME — OpenWebNet Integration for Home Assistant +[![Current Stable](https://img.shields.io/badge/stable-v0.9.4-blue.svg)](https://github.com/OpenWebNet-HA/MyHOME/releases/tag/0.9.4) +[![Active Beta](https://img.shields.io/badge/beta-v2.0.0b15-orange.svg)](https://github.com/OpenWebNet-HA/MyHOME/releases/tag/2.0.0b15) [![Validate with hassfest](https://github.com/OpenWebNet-HA/MyHOME/actions/workflows/hassfest.yml/badge.svg)](https://github.com/OpenWebNet-HA/MyHOME/actions/workflows/hassfest.yml) [![HACS Validation](https://github.com/OpenWebNet-HA/MyHOME/actions/workflows/validate.yml/badge.svg)](https://github.com/OpenWebNet-HA/MyHOME/actions/workflows/validate.yml) [![HACS Custom](https://img.shields.io/badge/HACS-Custom-orange.svg)](https://hacs.xyz) -[![License: GPL-3.0-or-later](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0) +[![Python 3.14](https://img.shields.io/badge/python-3.14-blue.svg)](https://www.python.org/) +[![Quality Scale](https://img.shields.io/badge/Quality%20Scale-Platinum%20(54%2F54%20Self--Assessed)-brightgreen.svg)](https://openwebnet-ha.github.io/MyHOME/beta/) +[![Tests](https://img.shields.io/badge/tests-3%2C464%20passing-brightgreen.svg)](https://github.com/OpenWebNet-HA/MyHOME/actions/workflows/test-coverage.yaml) +[![Coverage](https://img.shields.io/badge/coverage-100.0%25-brightgreen.svg)](https://app.codecov.io/gh/OpenWebNet-HA/MyHOME/tree/v2-phase1-architecture) +[![Documentation](https://img.shields.io/badge/Docs-openwebnet--ha.github.io%2FMyHOME-blue.svg)](https://openwebnet-ha.github.io/MyHOME/beta/) +[![Discussions](https://img.shields.io/badge/Discussions-Join-blue?logo=github)](https://github.com/OpenWebNet-HA/MyHOME/discussions) +[![License: AGPL-3.0](https://img.shields.io/badge/License-AGPL_3.0-blue.svg)](LICENSE) -Integration for **BTicino / Legrand MyHOME** SCS bus systems connected via OpenWebNet IP gateways. +Modern, async-native Home Assistant integration for **BTicino / Legrand MyHOME** SCS bus systems connected via OpenWebNet IP & Serial gateways. -Now maintained by the **[OpenWebNet-HA](https://github.com/OpenWebNet-HA)** community organisation. +Maintained by the **[OpenWebNet-HA](https://github.com/OpenWebNet-HA)** community organisation. + +[⚖️ Version Comparison](#️-version-comparison-legacy-stable-vs-modern-beta) • [🧪 Testing & Reliability](#-testing--quality-comparison) • [📦 Installation](#-installation) • [🏛️ Supported Hardware](#️-supported-hardware--gateways) • [🌟 Key Features](#-modern-v2-features) • [📚 Full Documentation](https://openwebnet-ha.github.io/MyHOME/beta/) • [🗺️ Stable v2.0.0 PR #232](https://github.com/OpenWebNet-HA/MyHOME/pull/232) --- > [!IMPORTANT] -> ### 🛡️ Current Stable Status & Community Testing -> -> - **`master` Branch (Current Stable)**: This branch remains the **current stable release** for day-to-day production use. -> - **`v2-phase1-architecture` Branch (Testing & Modernization)**: A complete modernization and architectural overhaul is underway in **[PR #232](https://github.com/OpenWebNet-HA/MyHOME/pull/232)** and the [`v2-phase1-architecture`](https://github.com/OpenWebNet-HA/MyHOME/tree/v2-phase1-architecture) branch. -> - **Stability First**: To ensure zero disruption, the new architecture will remain in its dedicated branch until it has been thoroughly tested across diverse hardware gateways (`MH200`, `MH200N`, `MH202`, `F454`, `MyHomeServer1`, etc.) and proven completely reliable. Only once verified will it be merged into `master`. +> ### 🛡️ Current Stable Status vs. Active V2 Beta > -> **👉 Help us test the new architecture:** -> 1. In HACS, redownload the MyHOME integration and select the **`v2-phase1-architecture`** branch (or grab it from [PR #232](https://github.com/OpenWebNet-HA/MyHOME/pull/232)). -> 2. Restart Home Assistant. All your existing entity IDs and friendly names are strictly preserved. -> 3. Share your feedback, gateway model, and test results in our community hub: **[Issue #229](https://github.com/OpenWebNet-HA/MyHOME/issues/229)** or directly on **[PR #232](https://github.com/OpenWebNet-HA/MyHOME/pull/232)**. +> - **Current Stable Release ([v0.9.4](https://github.com/OpenWebNet-HA/MyHOME/releases/tag/0.9.4))**: The baseline release on `master` for users seeking proven production stability. Fully compatible with Home Assistant 2026.9 and earlier. HACS installs this version by default when pre-releases are not enabled. +> - **Active Field-Testing Beta ([v2.0.0b15](https://github.com/OpenWebNet-HA/MyHOME/releases/tag/2.0.0b15))**: Modernized async-native architecture, declarative gateway profiles, hardware timers, audio streaming proxy, central climate coordination, and 100% test statement coverage (3,464 tests in release). Built for Home Assistant ≥ 2026.3 (Python 3.14). +> - **Roadmap to Stable v2.0.0**: Once community field-testing on the beta line is concluded, **[PR #232](https://github.com/OpenWebNet-HA/MyHOME/pull/232)** will merge the V2 architecture directly into `master`, making it the official stable default for all users. +> - **Zero-Friction Migration**: Upgrading to V2 safely preserves all existing device names, custom entity IDs (`light.living_room`), and gateway configurations. Unique IDs migrate automatically (`MAC-WHERE` → `MAC-WHO-WHERE`). + +--- + +## ⚖️ Version Comparison: Legacy Stable vs. Modern Beta + +Understanding the technical differences between **Legacy Stable (v0.9.4)** and **Modern Beta (v2.0.0b15)**: + +| Feature / Architecture | Legacy Stable (`v0.9.4` on `master`) | Modern Beta (`v2.0.0b15` published release / `v2-phase1-architecture` dev branch) | +| :--- | :--- | :--- | +| **Home Assistant Core** | Compatible with HA 2026.9 and earlier | **Core ≥ 2026.3** (leveraging modern Python 3.14 async-native architecture) | +| **IoT Class** | `local_polling` | **`local_push`** (real-time bus event stream push) | +| **Protocol Engine** | `OWNd==0.7.48` | **`OWNd==2.0.0b10`** (`v2.0.0b15` release; `2.0.0b11+` in development branch; typed PEP 561, HMAC-SHA256) | +| **Quality Scale** | Unranked legacy structure | **🏆 Platinum Tier (54/54 self-assessed rules satisfied/exempt in `quality_scale.yaml`)** — formal tier awarded upon upstream core review | +| **Type Safety** | Untyped | **100% `mypy --strict` compliance** across all 42 modules | +| **State Storage** | Global `hass.data[DOMAIN]` dictionaries | Strongly-typed **`entry.runtime_data`** (`MyHOMERuntimeData`) | +| **Device Discovery** | Requires manual YAML (`myhome.yaml`) | **Zero-config Dynamic Bus Auto-Discovery** (with optional YAML support) | +| **Gateway Profiles** | Fixed, hardcoded socket pacing | **12 Declarative Profiles** (tuned workers, inter-frame delays & queue pacing) | +| **Supported Transports** | TCP Network Gateways only | **TCP IP + USB/Serial (Legrand 3578 / OpenZigBee)** | +| **Multi-Gateway Plants** | ❌ Single gateway only (cross-talk on multi-GW) | **Namespaced routing, plant isolation & warm-standby failover** | +| **Command Queue** | FIFO queue (user commands blocked behind sweeps) | **Multi-tier Priority Queue** (user actions prioritized over polls) | +| **Lighting (`WHO=1`)** | Basic On/Off relays & stepped dimming | **Hardware staircase bus timers**, smooth software fades, **DALI DT8 Tunable White (2000K–6535K)**, DALI feature locks, declared groups | +| **Covers (`WHO=2`)** | Basic Open / Close / Stop | State tracking, position-reporting actuators, **interactive travel-time calibration engine**, centralized shutter buttons | +| **Climate (`WHO=4`)** | Basic zone thermostats | **Central Unit 3550 (`#0`) & 4695 (`#0#1`) master coordination**, fancoil 3-speed modes, probe (`PZZ`) & pump (`0#N`) separation | +| **Sound System (`WHO=16`)** | ❌ Not supported | **Full audio matrix (F441/F441M)**, multi-room grouping, **Dynamic Streaming Proxy** (Music Assistant / Spotify Connect), tuner entities (F500), anti-hiss auto-off | +| **Burglar Alarm (`WHO=5`)** | ❌ Not supported | **Dedicated `alarm_control_panel`** (3485/3486 central units), partition states, broadcast sync | +| **CEN / CEN+ Scenarios** | Raw event listeners; required external blueprints | **8 native UI device triggers** with string-preserved addressing (`"0001"`), MAC isolation, Living Now wire-address tolerance | +| **Diagnostics & Health** | Raw logs only | **Self-clearing HA Repair issues (`repairs.py`)**, native HA Diagnostics (`diagnostics.py`) with automatic redaction | +| **Lovelace Frontend** | ❌ None | **Built-in `` card** with live streaming feed and syntax-validated frame injector | +| **License** | **AGPL-3.0** (per `master` repository [`LICENSE`](LICENSE)) | **Apache-2.0** (per published `2.0.0b15` release / [`LICENSE`](https://github.com/OpenWebNet-HA/MyHOME/blob/v2-phase1-architecture/LICENSE), aligning with Home Assistant Core) | + +--- + +## 🧪 Testing & Quality Comparison + +The modernization from legacy to V2 established an extensive automated testing and verification foundation (real-world validation across diverse physical gateways remains an ongoing community effort): + +| Testing Dimension | Legacy Stable (`v0.9.4` on `master`) | Modern Beta (`v2.0.0b15` published release / `v2-phase1-architecture` dev branch) | +| :--- | :--- | :--- | +| **Automated Tests** | **0 tests** (no pytest suite or test files in repository) | **3,464 automated tests** in `v2.0.0b15` (3,600+ on active development branch) | +| **Statement Coverage** | **0%** tracked | **Strict 100.0% statement coverage** across all modules | +| **Branch Coverage** | Untracked | Enforced via automated zero-tolerance coverage gates in CI | +| **Trace Replay Engine** | ❌ None (testing required live physical hardware) | **Automated CI replay of authentic on-wire traces** from real European installations (F454, F455, F461, MH200, MH200N, MH201, MH202, MyHomeServer1, H4890, Living Now controls) | +| **Golden Frame Corpus** | ❌ None | **OpenWebNet Golden Corpus** with hundreds of multi-authority calibrated frame test fixtures across 11 subsystems | +| **Snapshot Testing** | ❌ None | **5 Syrupy snapshot suites** verifying diagnostics exports, entity registry schemas, and state trees | +| **CI Automation** | 2 workflows (`hassfest`, basic `validate`) | **10 comprehensive CI workflows** (unit tests, coverage, type checking, Ruff linting, PyPI packaging, HA standards validator, anti-drift sentinel) | +| **Anti-Drift Sentinels** | ❌ None | **Automated sentinel (`scripts/sync_documentation.py`)** continuously validating documentation, tables, and code alignment | + +--- + +## 📦 Installation + +> [!CAUTION] +> **⚠️ Never store backup copies inside `/config/custom_components/` (e.g. `myhome.backup`)!** +> Home Assistant automatically discovers **all** subdirectories containing `manifest.json` under `custom_components`. Backups inside this folder cause startup crashes (`Unable to import component: No module named 'custom_components.myhome.backup'`). Always keep backups **outside** in `/config/myhome_backup/`. + +### 🚀 Installing the Active Beta (v2.0.0b15 — Recommended for HA ≥ 2026.3) + +> [!TIP] +> **Recommended Beta Install Method**: In **HACS 2.0+**, pre-release toggle switches can get stuck in an *"unavailable"* loop due to upstream registry caching, or show validation warnings before PR #232 merges. Using **Method 1 (Terminal & SSH)** below provides a direct, verified installation that safely preserves your configuration and entity IDs. + +#### Method 1: Verified Script via Terminal & SSH Add-on (⭐ Recommended) + +Open the **Terminal** in your Home Assistant sidebar and paste: + +```bash +if cd /config/custom_components; then + # Move any legacy in-place backup out of custom_components to prevent loader crashes: + [ -d myhome.backup ] && mv myhome.backup /config/myhome_backup_old + + # Download and extract into a temporary directory first to verify archive integrity: + TMP_DIR=$(mktemp -d) + if wget -O "$TMP_DIR/myhome.zip" https://github.com/OpenWebNet-HA/MyHOME/releases/download/2.0.0b15/myhome.zip && \ + unzip -q "$TMP_DIR/myhome.zip" -d "$TMP_DIR/myhome" && \ + [ -f "$TMP_DIR/myhome/manifest.json" ]; then + BACKUP_OK=1 + if [ -d myhome ]; then + rm -rf /config/myhome_backup && cp -r myhome /config/myhome_backup || BACKUP_OK=0 + fi + + if [ "$BACKUP_OK" -eq 1 ]; then + if rm -rf myhome && mv "$TMP_DIR/myhome" myhome; then + rm -rf "$TMP_DIR" + echo "Installation verified. Restarting Home Assistant..." + ha core restart + else + echo "Error: Replacement failed. Recovery files preserved in $TMP_DIR and /config/myhome_backup." + fi + else + echo "Error: Backup failed. Existing installation left intact. Recovery files preserved in $TMP_DIR." + fi + else + echo "Error: Download or extraction verification failed. Existing installation left intact." + rm -rf "$TMP_DIR" + fi +else + echo "Error: Failed to navigate to /config/custom_components. Directory does not exist." +fi +``` + +*(For **Home Assistant Container / Docker**, run on your Docker host:)* +```bash +docker exec -it homeassistant bash -c 'cd /config/custom_components || { echo "Error: /config/custom_components not found."; exit 1; }; [ -d myhome.backup ] && mv myhome.backup /config/myhome_backup_old; TMP_DIR=$(mktemp -d); if ! wget -O "$TMP_DIR/myhome.zip" https://github.com/OpenWebNet-HA/MyHOME/releases/download/2.0.0b15/myhome.zip || ! unzip -q "$TMP_DIR/myhome.zip" -d "$TMP_DIR/myhome" || [ ! -f "$TMP_DIR/myhome/manifest.json" ]; then echo "Error: Download or extraction verification failed. Existing installation left intact."; rm -rf "$TMP_DIR"; exit 1; fi; if [ -d myhome ]; then rm -rf /config/myhome_backup && cp -r myhome /config/myhome_backup || { echo "Error: Backup failed. Existing installation left intact. Recovery files preserved in $TMP_DIR."; exit 1; }; fi; if ! (rm -rf myhome && mv "$TMP_DIR/myhome" myhome); then echo "Error: Replacement failed. Recovery files preserved in $TMP_DIR and /config/myhome_backup."; exit 1; fi; rm -rf "$TMP_DIR" && echo "Installation verified. Restarting container..."' && docker restart homeassistant +``` + +#### Method 2: Manual Installation (Archive / Samba) + +1. Download the release package: + 👉 **[Download myhome.zip (v2.0.0b15)](https://github.com/OpenWebNet-HA/MyHOME/releases/download/2.0.0b15/myhome.zip)** (or browse all [GitHub Releases](https://github.com/OpenWebNet-HA/MyHOME/releases)) +2. Open your configuration directory via Samba Share, Studio Code Server, or File Editor. +3. Extract `myhome.zip` directly into `/config/custom_components/myhome/` (overwriting existing files). +4. Restart Home Assistant (**Settings → System → Restart**). + +#### Method 3: HACS (Custom Repository) + +1. In Home Assistant, open **HACS → Integrations**. +2. Click the top-right menu (`⋮`) → **Custom repositories**. +3. Add repository URL: `https://github.com/OpenWebNet-HA/MyHOME` with type **Integration**. +4. Open the **MyHOME** card in HACS, click `⋮` → **Redownload**, ensure **Show beta versions** is toggled ON, select **`2.0.0b15`**, and click **Download**. +5. Restart Home Assistant. --- -## 🚀 What's Coming in V2 (On Branch `v2-phase1-architecture`) +### 🛡️ Installing or Staying on Current Stable (v0.9.4) -The upcoming v2 release includes: -- **Declarative Hardware Profiles**: Auto-detects and paces queues specifically for `MH200`, `MH200N`, `MH202`, `F454`, and `MyHomeServer1` to prevent buffer overflows and dropped commands. -- **Zero-Friction Upgrade**: Strictly preserves all existing entity IDs (`light.keuken`) and names (`MAC-WHERE` → `MAC-WHO-WHERE` migration). -- **Sound System 2.0 & Streaming Proxy**: Multi-room audio matrix (F441/F441M) with dynamic streaming from Music Assistant or Spotify Connect to wired BTicino zones. -- **Comprehensive Quality Standards**: 500+ unit tests, strict async stream lifecycles, and 100% green CI. +If you prefer proven production stability or wish to wait for the final `v2.0.0` stable merge: -📖 [Read the full v2 architecture documentation and technical specs →](https://github.com/OpenWebNet-HA/MyHOME/tree/v2-phase1-architecture) +* **Via HACS (Default)**: Search for **MyHOME** in HACS and click **Download** (keep *Show beta versions* disabled). HACS will automatically install **v0.9.4**. +* **Via Terminal & SSH**: + ```bash + if cd /config/custom_components; then + # Move any legacy in-place backup out of custom_components to prevent loader crashes: + [ -d myhome.backup ] && mv myhome.backup /config/myhome_backup_old + + # Download and extract into a temporary directory first to verify archive integrity: + TMP_DIR=$(mktemp -d) + if wget -O "$TMP_DIR/myhome.zip" https://github.com/OpenWebNet-HA/MyHOME/releases/download/0.9.4/myhome.zip && \ + unzip -q "$TMP_DIR/myhome.zip" -d "$TMP_DIR/myhome" && \ + [ -f "$TMP_DIR/myhome/manifest.json" ]; then + BACKUP_OK=1 + if [ -d myhome ]; then + rm -rf /config/myhome_backup && cp -r myhome /config/myhome_backup || BACKUP_OK=0 + fi + + if [ "$BACKUP_OK" -eq 1 ]; then + if rm -rf myhome && mv "$TMP_DIR/myhome" myhome; then + rm -rf "$TMP_DIR" + echo "Installation verified. Restarting Home Assistant..." + ha core restart + else + echo "Error: Replacement failed. Recovery files preserved in $TMP_DIR and /config/myhome_backup." + fi + else + echo "Error: Backup failed. Existing installation left intact. Recovery files preserved in $TMP_DIR." + fi + else + echo "Error: Download or extraction verification failed. Existing installation left intact." + rm -rf "$TMP_DIR" + fi + else + echo "Error: Failed to navigate to /config/custom_components. Directory does not exist." + fi + ``` +* **Configuration Guide for v0.9.4**: Entity definitions on legacy 0.9.4 use manual YAML configuration. Refer to the [Legacy v0.9.4 Configuration Guide](https://github.com/anotherjulien/MyHOME/wiki/Configuration). + +--- + +## 🏛️ Supported Hardware & Gateways + +The integration features declarative hardware profiles that automatically calibrate connection concurrency, inter-frame bus pacing, and query throttles specifically for your gateway model: + +| Gateway Model | Protocol Support | Max Command Workers | Inter-Frame Delay | Discovery | Notes | +|---|---|---|---|---|---| +| **F454** | OpenWebNet / HMAC | 4 workers | 50 ms | ✅ UPnP / Port 49153 | Full high-speed multi-session IP gateway | +| **F455** | OpenWebNet / HMAC | 4 workers | 50 ms | ✅ UPnP / Port 49153 | Basic gateway (single SCS bus) | +| **F461** | OpenWebNet / HMAC | 4 workers | 50 ms | ❌ Manual | Compact DIN Ethernet Web Server | +| **MH202** | OpenWebNet / HMAC | 2 workers | 100 ms | ✅ UPnP / Port 49153 | Modern scenario programmer gateway | +| **MH201** | OpenWebNet | 1 worker | 100 ms | ✅ UPnP / Port 49153 | Second-generation scenario programmer | +| **MyHomeServer1** | OpenWebNet / HMAC | 4 workers | 20 ms | ✅ SSDP | Modern cloud/local hybrid gateway | +| **MH200N** | OpenWebNet | 1 worker | 150 ms | ✅ SSDP | Second-generation scenario programmer | +| **MH200** *(Legacy)* | OpenWebNet | 1 worker | 150 ms | ✅ SSDP | Strict single-session pacing; watchdog hardened | +| **H4890 / AM4890** | OpenWebNet | 1 worker | 50 ms | ✅ SSDP | 3.5" Touch screen display IP gateway | +| **F452 / F453AV** | OpenWebNet | 1 worker | 50 ms | ✅ UPnP / Port 49153 | Audio/video & web server gateway | +| **HL4684** | OpenWebNet | 1 worker | 50 ms | ✅ SSDP | 10" Touch screen display IP gateway | +| **Legrand 3578** | OpenWebNet (Serial) | 1 worker | 50 ms | ❌ Manual (Serial) | USB / Serial gateway & OpenZigBee interface | + +📖 [Read the full Hardware Gateway Profiles Guide →](https://openwebnet-ha.github.io/MyHOME/beta/configuration/gateways/) + +--- + +## 🌟 Modern V2 Features + +### Supported Entity Domains & Automations + +| Domain | WHO | Capabilities | +|---|---|---| +| **`light`** | WHO=1 | On/Off, dimmers with smooth software-stepped curves, DALI DT8 Tunable White (2000K–6535K), HS/RGB colour, and hardware-offloaded bus staircase timers (`myhome.turn_on_timed`). | +| **`switch`** | WHO=1 | Relay actuators, auxiliary switches, socket actuators (switch/outlet device classes), and hardware-offloaded bus timers. | +| **`cover`** | WHO=2 | Motorized shutters and roll-ups with state tracking, position-reporting actuators, virtual travel-time positioning, and centralized shutter button triggers. | +| **`climate`** | WHO=4 | Heating, cooling, 4-pipe systems, thermostats, setpoints, fancoil 3-speed modes, offset tracking, and Central Unit 3550 (`#0`) & 4695 (`#0#1`) master coordination. | +| **`alarm_control_panel`** | WHO=5 | Central units (3485/3486), partition states (disarmed / armed away / triggered), and zone 0 broadcast sync. | +| **`binary_sensor`** | WHO=1 / 9 / 25 | Magnetic contacts, door/window sensors, PIR motion, AUX channels (1–9), and dry contact interfaces (F482/3477). | +| **`sensor`** | WHO=1 / 4 / 18 | Power meters, energy counters (total/daily/monthly), temperature probes (3475), and illuminance / lux sensors. | +| **`button`** | WHO=14 / 2 | Hardware actuator lock/unlock for maintenance (WHO=14), and cover travel-time calibration buttons (WHO=2). | +| **`media_player`** | WHO=16 | F441/F441M audio matrix zones, source routing, volume normalization, software mute, and Dynamic Streaming Proxy. | +| **`device_trigger`** | WHO=15 / 25 | Stateless CEN & CEN+ scenario pushbuttons with string-preserved addressing (`"0001"`), MAC isolation, and 8 native UI trigger types. | + +### Architectural Highlights + +* **Native Hardware Bus Light & Switch Timers (`WHO=1`)**: Offload countdown timers directly onto physical Legrand DIN actuators via `myhome.turn_on_timed` or standard `timer` parameters. The lights turn off automatically even if Home Assistant restarts. +* **Sound System 2.0 & Dynamic Streaming Proxy**: Stream from **Music Assistant**, **Spotify Connect**, or any HA media player to wired BTicino audio zones using an intelligent `DecoderPool` with analog gain-staging and anti-hiss auto-off. +* **Thermoregulation Central Unit Coordination (3550 / 4695)**: Master climate coordination for 99-zone (`#0`) and 4-zone (`#0#1`) central units automatically propagates whole-home heating/cooling modes across all subordinate zones. +* **Multi-Gateway Routing & Plant Isolation**: Namespaced dispatchers eliminate cross-talk across plants combining multiple gateways (e.g. F454 + MH200N). +* **Multi-Tier Priority Command Queue**: High-priority user commands (toggling lights, adjusting shutters) execute ahead of background status polling queries. +* **Self-Healing Diagnostics & Repairs**: Hardware anomalies surface as self-clearing Home Assistant repair issues (`device_health.py`). + +--- + +## 📡 Built-In Bus Monitor Lovelace Card + +The integration includes an in-band real-time bus monitor operating over the existing gateway event stream with zero extra sockets: + +

+ MyHOME OpenWebNet Bus Monitor Lovelace Card +

+ +* **Visual Card Picker**: Add directly from Home Assistant's dashboard editor by searching for **"MyHOME OpenWebNet Bus Monitor"** (`custom:myhome-openwebnet-bus-monitor`). +* **Live Feed & Frame Injector**: Color-coded badges for subsystems, ACK/NACK highlighting, pause/resume, buffer filtering, and manual frame injection with syntax validation. + +📖 [Read the Bus Monitor Card Guide →](https://openwebnet-ha.github.io/MyHOME/beta/configuration/bus_monitor/) --- -## 📦 Current Version Installation & Configuration +## 📚 Documentation & Protocol Specifications + +Comprehensive guides, specifications, and tutorials are available on our documentation site and wiki: + +* 📖 **[Official Documentation Site](https://openwebnet-ha.github.io/MyHOME/beta/)** + * [Getting Started & Installation](https://openwebnet-ha.github.io/MyHOME/beta/getting-started/installation/) + * [Hardware Gateway Profiles](https://openwebnet-ha.github.io/MyHOME/beta/configuration/gateways/) + * [Supported Functions & Subsystems](https://openwebnet-ha.github.io/MyHOME/beta/configuration/supported_functions/) + * [Sound System & Dynamic Proxy](https://openwebnet-ha.github.io/MyHOME/beta/configuration/media_player/) + * [CEN & CEN+ Scenario Automations](https://openwebnet-ha.github.io/MyHOME/beta/configuration/cen_cenplus/) + * [Troubleshooting & Diagnostics](https://openwebnet-ha.github.io/MyHOME/beta/configuration/troubleshooting/) +* 🏛️ **[OpenWebNet Protocol & WHO Specifications Wiki](https://github.com/OpenWebNet-HA/MyHOME/wiki/OpenWebNet-Protocol-&-WHO-Specifications)** +* 🗺️ **[Development Roadmap](https://openwebnet-ha.github.io/MyHOME/beta/roadmap/)** and **[Stable v2.0.0 Pull Request #232](https://github.com/OpenWebNet-HA/MyHOME/pull/232)** + +--- + +## 👥 Community & Credits + +This integration is developed and maintained by the **[OpenWebNet-HA](https://github.com/OpenWebNet-HA)** community organization. -### Installation via HACS -1. Open **HACS** in Home Assistant. -2. Search for **MyHOME** (or add this repository as a Custom Repository if not yet listed). -3. Click **Download** and restart Home Assistant. +- **Community Hub & Discussions**: [GitHub Discussions](https://github.com/OpenWebNet-HA/MyHOME/discussions) +- **Issue Tracker & Traces**: [GitHub Issues](https://github.com/OpenWebNet-HA/MyHOME/issues) +- **Phase 1 & 2 Pull Request**: [PR #232](https://github.com/OpenWebNet-HA/MyHOME/pull/232) -### Adding the Gateway -- Go to **Settings** → **Devices & Services** → **Add Integration** → **MyHOME**. -- The gateway IP address and port (default: `20000`) will be auto-discovered via UPnP/SSDP if supported, or can be entered manually. -- If your gateway requires OpenWebNet authentication, enter your 9-digit HMAC password. +### Core Integration & Architecture +* **[@anotherjulien](https://github.com/anotherjulien)** for creating the original MyHOME integration and laying the protocol foundations. +* **[@GreenGrassBlueOcean](https://github.com/GreenGrassBlueOcean)** for the modernized v2 architecture, declarative gateway profiles, streaming proxy, and automated test suite. +* **[@GianlucaCh](https://github.com/GianlucaCh)** for preserving and contributing the comprehensive 15-manual BTicino/Legrand specification archive (`OWN DOC.zip`) and WHO 24 specs. +* **[@xtimmy86x](https://github.com/xtimmy86x)** for the frontend administration panel, hardware diagnostics, and passive heating schedule traces. +* **[@Interstellar0verdrive](https://github.com/Interstellar0verdrive)** for frontend panel enhancements, cover calibration UI, badges, and visual polish. +* **[@fedem95](https://github.com/fedem95)** for MH201 reliability, idle session reconnects, CEN+ hold logic, Italian translations, and physical plant fixtures. +* **[@mantovanellimatteo](https://github.com/mantovanellimatteo)**, **[@lyubomirtraykov](https://github.com/lyubomirtraykov)**, and **Cedric Rohou** for key bugfixes, DALI DT8 ballasts, and platform extensions. -### Device Configuration (Current Version) -In this current stable version on `master`, entity definitions and device options can also be configured via YAML. -Please refer to the [Project Wiki & Configuration Guide](https://github.com/anotherjulien/MyHOME/wiki/Configuration) for legacy entity syntax and examples. +### Hardware Traces & Real-World Validation +Special gratitude to the community members whose authentic on-wire bus captures ground our 3,464+ CI tests in real hardware: +* **[@TheDarkWizard](https://github.com/TheDarkWizard)** for MyHomeServer1 automation command-translation echoes and WHO 4 heating/cooling Home+Control traces ([#378](https://github.com/OpenWebNet-HA/MyHOME/issues/378), [#429](https://github.com/OpenWebNet-HA/MyHOME/issues/429)). +* **[@f18m](https://github.com/f18m)** (Francesco Montorsi) for MyHomeServer1 & LN-4660M2 centralized shutter and advanced automation traces ([#445](https://github.com/OpenWebNet-HA/MyHOME/issues/445)). +* **[@lionelser](https://github.com/lionelser)** for Legrand F455 Basic Gateway full bus sweep, modular dimmers, and pushbutton captures ([#466](https://github.com/OpenWebNet-HA/MyHOME/issues/466)). +* **[@gdluck](https://github.com/gdluck)** for MyHomeServer1 live climate heating/cooling season switching, timed relays, and probe traces ([#649](https://github.com/OpenWebNet-HA/MyHOME/pull/649)). +* **[@ricdijk](https://github.com/ricdijk)** for BTicino F454 WHO 4 99-zone central unit (`#0`) status captures ([#629](https://github.com/OpenWebNet-HA/MyHOME/issues/629)). +* **[@wave68runner](https://github.com/wave68runner)** for MH200N + MyHomeServer1 dual-gateway 4-digit CEN scenario traces ([#624](https://github.com/OpenWebNet-HA/MyHOME/issues/624)). +* **[@caiosweet](https://github.com/caiosweet)** for BTicino MH200N full bus sweep and climate probe knob offset cycle captures ([#466](https://github.com/OpenWebNet-HA/MyHOME/issues/466)). +* **[@nicolacavallo84](https://github.com/nicolacavallo84)** for shared-bus dual gateway captures (MHS1 + H4890) and H4890 WHO 25 dry contacts ([#453](https://github.com/OpenWebNet-HA/MyHOME/issues/453), [#466](https://github.com/OpenWebNet-HA/MyHOME/issues/466)). +* **[@gimprota76](https://github.com/gimprota76)** (Giovanni) for BTicino F454 burglar alarm (WHO 5) and auxiliary channel (WHO 9) traces ([#311](https://github.com/OpenWebNet-HA/MyHOME/issues/311)). --- -## 👥 Organization & Community -This project has transitioned from the original repository by [@anotherjulien](https://github.com/anotherjulien) to the **[OpenWebNet-HA](https://github.com/OpenWebNet-HA)** community organisation. +## 📄 License -- **Community Hub & Discussion**: [#229](https://github.com/OpenWebNet-HA/MyHOME/issues/229) -- **Phase 1 Pull Request & Testing**: [#232](https://github.com/OpenWebNet-HA/MyHOME/pull/232) -- **Roadmap & Feature Requests**: [Issue Tracker](https://github.com/OpenWebNet-HA/MyHOME/issues) +* **Current `master` & Stable Releases (v0.9.4)**: Licensed under the [GNU Affero General Public License v3.0 (AGPL-3.0)](LICENSE). +* **Modern Beta Releases (v2.0.0b15) & V2 Architecture**: Licensed under the [Apache License 2.0](https://github.com/OpenWebNet-HA/MyHOME/blob/v2-phase1-architecture/LICENSE) (aligning with Home Assistant Core). From 51a186ea62fd2f01c93a46eb602b1a87ec6961d4 Mon Sep 17 00:00:00 2001 From: Laurens <43173895+GreenGrassBlueOcean@users.noreply.github.com> Date: Wed, 21 Oct 2026 21:36:16 +0200 Subject: [PATCH 2/9] docs(readme): update master landing page comparison for v2.0.0b15 and v2.0.0b16 vs v0.9.4 --- README.md | 138 ++++++++++++++++++++++++++++++------------------------ 1 file changed, 77 insertions(+), 61 deletions(-) diff --git a/README.md b/README.md index 22eb8300a..edf514263 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,13 @@ # MyHOME — OpenWebNet Integration for Home Assistant [![Current Stable](https://img.shields.io/badge/stable-v0.9.4-blue.svg)](https://github.com/OpenWebNet-HA/MyHOME/releases/tag/0.9.4) -[![Active Beta](https://img.shields.io/badge/beta-v2.0.0b15-orange.svg)](https://github.com/OpenWebNet-HA/MyHOME/releases/tag/2.0.0b15) +[![Active Beta](https://img.shields.io/badge/beta-v2.0.0b16-orange.svg)](https://github.com/OpenWebNet-HA/MyHOME/releases/tag/2.0.0b16) [![Validate with hassfest](https://github.com/OpenWebNet-HA/MyHOME/actions/workflows/hassfest.yml/badge.svg)](https://github.com/OpenWebNet-HA/MyHOME/actions/workflows/hassfest.yml) [![HACS Validation](https://github.com/OpenWebNet-HA/MyHOME/actions/workflows/validate.yml/badge.svg)](https://github.com/OpenWebNet-HA/MyHOME/actions/workflows/validate.yml) [![HACS Custom](https://img.shields.io/badge/HACS-Custom-orange.svg)](https://hacs.xyz) [![Python 3.14](https://img.shields.io/badge/python-3.14-blue.svg)](https://www.python.org/) [![Quality Scale](https://img.shields.io/badge/Quality%20Scale-Platinum%20(54%2F54%20Self--Assessed)-brightgreen.svg)](https://openwebnet-ha.github.io/MyHOME/beta/) -[![Tests](https://img.shields.io/badge/tests-3%2C464%20passing-brightgreen.svg)](https://github.com/OpenWebNet-HA/MyHOME/actions/workflows/test-coverage.yaml) +[![Tests](https://img.shields.io/badge/tests-4%2C393%20passing-brightgreen.svg)](https://github.com/OpenWebNet-HA/MyHOME/actions/workflows/test-coverage.yaml) [![Coverage](https://img.shields.io/badge/coverage-100.0%25-brightgreen.svg)](https://app.codecov.io/gh/OpenWebNet-HA/MyHOME/tree/v2-phase1-architecture) [![Documentation](https://img.shields.io/badge/Docs-openwebnet--ha.github.io%2FMyHOME-blue.svg)](https://openwebnet-ha.github.io/MyHOME/beta/) [![Discussions](https://img.shields.io/badge/Discussions-Join-blue?logo=github)](https://github.com/OpenWebNet-HA/MyHOME/discussions) @@ -25,38 +25,45 @@ Maintained by the **[OpenWebNet-HA](https://github.com/OpenWebNet-HA)** communit > ### 🛡️ Current Stable Status vs. Active V2 Beta > > - **Current Stable Release ([v0.9.4](https://github.com/OpenWebNet-HA/MyHOME/releases/tag/0.9.4))**: The baseline release on `master` for users seeking proven production stability. Fully compatible with Home Assistant 2026.9 and earlier. HACS installs this version by default when pre-releases are not enabled. -> - **Active Field-Testing Beta ([v2.0.0b15](https://github.com/OpenWebNet-HA/MyHOME/releases/tag/2.0.0b15))**: Modernized async-native architecture, declarative gateway profiles, hardware timers, audio streaming proxy, central climate coordination, and 100% test statement coverage (3,464 tests in release). Built for Home Assistant ≥ 2026.3 (Python 3.14). +> - **Active Field-Testing Beta ([v2.0.0b16](https://github.com/OpenWebNet-HA/MyHOME/releases/tag/2.0.0b16), succeeding [v2.0.0b15](https://github.com/OpenWebNet-HA/MyHOME/releases/tag/2.0.0b15))**: Modernized async-native architecture (`OWNd 2.0.0b11`), declarative HA-to-SCS bus `expose` engine (`WHO 1/2/4/13/18`), Venetian blind slat tilt, impulse gate/garage covers & door-entry locks (`WHO 1/2/6/8`), cover motor start-up floor & endpoint full runs, device fault repairs & ignored addresses, hardware timers, audio streaming proxy & `WHO 22` RDS tuner, central climate coordination, and 100.0% test statement coverage (**4,393 tests** in `v2.0.0b16`, up from 3,464 in `v2.0.0b15`). Built for Home Assistant ≥ 2026.3 (Python 3.14). > - **Roadmap to Stable v2.0.0**: Once community field-testing on the beta line is concluded, **[PR #232](https://github.com/OpenWebNet-HA/MyHOME/pull/232)** will merge the V2 architecture directly into `master`, making it the official stable default for all users. -> - **Zero-Friction Migration**: Upgrading to V2 safely preserves all existing device names, custom entity IDs (`light.living_room`), and gateway configurations. Unique IDs migrate automatically (`MAC-WHERE` → `MAC-WHO-WHERE`). +> - **Zero-Friction Migration**: Upgrading to V2 safely preserves all existing device names, custom entity IDs (`light.living_room`), and gateway configurations. Unique IDs migrate automatically (`MAC-WHERE` → `MAC-WHO-WHERE`), and legacy `myhome.yaml` settings (`travel_time`, `lock_features`) are automatically persisted into the config entry ([#742](https://github.com/OpenWebNet-HA/MyHOME/pull/742)). --- ## ⚖️ Version Comparison: Legacy Stable vs. Modern Beta -Understanding the technical differences between **Legacy Stable (v0.9.4)** and **Modern Beta (v2.0.0b15)**: - -| Feature / Architecture | Legacy Stable (`v0.9.4` on `master`) | Modern Beta (`v2.0.0b15` published release / `v2-phase1-architecture` dev branch) | -| :--- | :--- | :--- | -| **Home Assistant Core** | Compatible with HA 2026.9 and earlier | **Core ≥ 2026.3** (leveraging modern Python 3.14 async-native architecture) | -| **IoT Class** | `local_polling` | **`local_push`** (real-time bus event stream push) | -| **Protocol Engine** | `OWNd==0.7.48` | **`OWNd==2.0.0b10`** (`v2.0.0b15` release; `2.0.0b11+` in development branch; typed PEP 561, HMAC-SHA256) | -| **Quality Scale** | Unranked legacy structure | **🏆 Platinum Tier (54/54 self-assessed rules satisfied/exempt in `quality_scale.yaml`)** — formal tier awarded upon upstream core review | -| **Type Safety** | Untyped | **100% `mypy --strict` compliance** across all 42 modules | -| **State Storage** | Global `hass.data[DOMAIN]` dictionaries | Strongly-typed **`entry.runtime_data`** (`MyHOMERuntimeData`) | -| **Device Discovery** | Requires manual YAML (`myhome.yaml`) | **Zero-config Dynamic Bus Auto-Discovery** (with optional YAML support) | -| **Gateway Profiles** | Fixed, hardcoded socket pacing | **12 Declarative Profiles** (tuned workers, inter-frame delays & queue pacing) | -| **Supported Transports** | TCP Network Gateways only | **TCP IP + USB/Serial (Legrand 3578 / OpenZigBee)** | -| **Multi-Gateway Plants** | ❌ Single gateway only (cross-talk on multi-GW) | **Namespaced routing, plant isolation & warm-standby failover** | -| **Command Queue** | FIFO queue (user commands blocked behind sweeps) | **Multi-tier Priority Queue** (user actions prioritized over polls) | -| **Lighting (`WHO=1`)** | Basic On/Off relays & stepped dimming | **Hardware staircase bus timers**, smooth software fades, **DALI DT8 Tunable White (2000K–6535K)**, DALI feature locks, declared groups | -| **Covers (`WHO=2`)** | Basic Open / Close / Stop | State tracking, position-reporting actuators, **interactive travel-time calibration engine**, centralized shutter buttons | -| **Climate (`WHO=4`)** | Basic zone thermostats | **Central Unit 3550 (`#0`) & 4695 (`#0#1`) master coordination**, fancoil 3-speed modes, probe (`PZZ`) & pump (`0#N`) separation | -| **Sound System (`WHO=16`)** | ❌ Not supported | **Full audio matrix (F441/F441M)**, multi-room grouping, **Dynamic Streaming Proxy** (Music Assistant / Spotify Connect), tuner entities (F500), anti-hiss auto-off | -| **Burglar Alarm (`WHO=5`)** | ❌ Not supported | **Dedicated `alarm_control_panel`** (3485/3486 central units), partition states, broadcast sync | -| **CEN / CEN+ Scenarios** | Raw event listeners; required external blueprints | **8 native UI device triggers** with string-preserved addressing (`"0001"`), MAC isolation, Living Now wire-address tolerance | -| **Diagnostics & Health** | Raw logs only | **Self-clearing HA Repair issues (`repairs.py`)**, native HA Diagnostics (`diagnostics.py`) with automatic redaction | -| **Lovelace Frontend** | ❌ None | **Built-in `` card** with live streaming feed and syntax-validated frame injector | -| **License** | **AGPL-3.0** (per `master` repository [`LICENSE`](LICENSE)) | **Apache-2.0** (per published `2.0.0b15` release / [`LICENSE`](https://github.com/OpenWebNet-HA/MyHOME/blob/v2-phase1-architecture/LICENSE), aligning with Home Assistant Core) | +Understanding the technical differences between **Legacy Stable (`v0.9.4`)**, **Previous Beta (`v2.0.0b15`)**, and **Latest Beta (`v2.0.0b16`)**: + +| Feature / Architecture | Legacy Stable (`v0.9.4` on `master`) | Beta `v2.0.0b15` *(7 Oct 2026)* | Latest Beta `v2.0.0b16` *(21 Oct 2026)* | +| :--- | :--- | :--- | :--- | +| **Home Assistant Core** | Compatible with HA 2026.9 and earlier | **Core ≥ 2026.3** (Python 3.14 async-native) | **Core ≥ 2026.3** (Python 3.14 async-native; HA 2026.11 registry migration ready) | +| **IoT Class** | `local_polling` | **`local_push`** (real-time bus event stream push) | **`local_push`** (real-time bus event stream push) | +| **Protocol Engine** | `OWNd==0.7.48` | **`OWNd==2.0.0b10`** (typed PEP 561, HMAC-SHA256, firmware-aware profiles) | **`OWNd==2.0.0b11`** (zero private symbols/shims, strict builder validation, whole-hour TZ guard) | +| **Quality Scale** | Unranked legacy structure | **🏆 Platinum Tier (54/54 self-assessed rules satisfied/exempt in `quality_scale.yaml`)** | **🏆 Platinum Tier (54/54 self-assessed rules)** + bundled brand icons ([#741](https://github.com/OpenWebNet-HA/MyHOME/pull/741)) — formal tier awarded upon upstream core review | +| **Type Safety** | Untyped | **100% `mypy --strict` compliance** across all 42 modules | **100% `mypy --strict` compliance** across all **73 modules** (verified against pinned `OWNd==2.0.0b11`) | +| **State Storage & Config** | Global `hass.data[DOMAIN]` dictionaries | Strongly-typed **`entry.runtime_data`** (`MyHOMERuntimeData`); UI Config/Options Flow + `ignored_addresses` ([#621](https://github.com/OpenWebNet-HA/MyHOME/pull/621)) | **`entry.runtime_data`** + automatic persistence of `myhome.yaml` device settings (`travel_time`, `lock_features`) into config entry ([#742](https://github.com/OpenWebNet-HA/MyHOME/pull/742)) | +| **Device Discovery** | Requires manual YAML (`myhome.yaml`) | **Zero-config Dynamic Bus Auto-Discovery** + blank-start discovery ([#578](https://github.com/OpenWebNet-HA/MyHOME/pull/578)) | **Zero-config Dynamic Bus Auto-Discovery** + phantom-entity suppression on blank start ([#686](https://github.com/OpenWebNet-HA/MyHOME/pull/686)) & ON-dimmer brightness probing ([#742](https://github.com/OpenWebNet-HA/MyHOME/pull/742)) | +| **Expose HA to SCS Bus** | ❌ Not supported | ❌ Not supported | **✅ Declarative `expose` engine ([#750](https://github.com/OpenWebNet-HA/MyHOME/pull/750))**: virtual `WHO 1/2` actuators (with wall LED feedback), `WHO 4` temperature probes, `WHO 18` energy meters, and `WHO 13` bus clock | +| **Gateway Profiles** | Fixed, hardcoded socket pacing | **12 Declarative Profiles** (tuned workers, inter-frame delays, per-profile session defaults [#606](https://github.com/OpenWebNet-HA/MyHOME/pull/606) & quiet-plant keepalive [#637](https://github.com/OpenWebNet-HA/MyHOME/pull/637)) | **12 Declarative Profiles** verified against empirical **Firmware Oracle** ([#745](https://github.com/OpenWebNet-HA/MyHOME/pull/745)), plus `H4684`/`LGRH4684` & `MH201` auto-ID ([#652](https://github.com/OpenWebNet-HA/MyHOME/pull/652), [#722](https://github.com/OpenWebNet-HA/MyHOME/pull/722)) | +| **Supported Transports** | TCP Network Gateways only | **TCP IP + USB/Serial (Legrand 3578 / OpenZigBee)** | **TCP IP + USB/Serial (Legrand 3578 / OpenZigBee)** + shared HA websession discovery ([#757](https://github.com/OpenWebNet-HA/MyHOME/pull/757)) | +| **Multi-Gateway Plants** | ❌ Single gateway only (cross-talk on multi-GW) | **Namespaced routing, plant isolation & warm-standby failover ([#453](https://github.com/OpenWebNet-HA/MyHOME/issues/453))** | **Namespaced routing, plant isolation & warm-standby failover** | +| **Command Scheduling** | FIFO queue (user commands blocked behind sweeps) | **Multi-tier Priority Queue** (user actions prioritized over polls) | **Unified `FrameScheduler` ([#738](https://github.com/OpenWebNet-HA/MyHOME/pull/738))** with per-target (`WHO`, `WHERE`) serialization, cover `STOP` overtaking queued frames ([#694](https://github.com/OpenWebNet-HA/MyHOME/pull/694)), and low-priority fade steps ([#739](https://github.com/OpenWebNet-HA/MyHOME/pull/739)) | +| **Lighting (`WHO=1`)** | Basic On/Off relays & stepped dimming | **Hardware staircase bus timers**, smooth software fades, **DALI DT8 Tunable White (2000K–6535K)**, DALI feature locks, declared groups, dimmer no-load (`WHAT 19`, [#622](https://github.com/OpenWebNet-HA/MyHOME/pull/622)), 0% → `switch_off` ([#635](https://github.com/OpenWebNet-HA/MyHOME/pull/635)) | Adds **2-digit Area 0 point addresses (`01`–`09`, [#713](https://github.com/OpenWebNet-HA/MyHOME/pull/713))**, startup-sweep poll deduplication ([#701](https://github.com/OpenWebNet-HA/MyHOME/pull/701)), and strict per-member echo counting for group/area re-syncs ([#740](https://github.com/OpenWebNet-HA/MyHOME/pull/740), [#749](https://github.com/OpenWebNet-HA/MyHOME/pull/749)) | +| **Covers (`WHO=2` & `WHO=1`)** | Basic Open / Close / Stop | State tracking, position-reporting actuators, **interactive travel-time calibration engine**, centralized shutter buttons | Adds **Venetian blind slat tilt (`slat_tilt`, `slat_time`, [#508](https://github.com/OpenWebNet-HA/MyHOME/pull/508))**, **impulse gate/garage covers on `WHO=1` with optional safety approval ([#667](https://github.com/OpenWebNet-HA/MyHOME/pull/667))**, **per-cover `min_motor_pulse` floor & endpoint full runs ([#702](https://github.com/OpenWebNet-HA/MyHOME/pull/702), [#708](https://github.com/OpenWebNet-HA/MyHOME/pull/708))**, stop-status position re-anchoring ([#707](https://github.com/OpenWebNet-HA/MyHOME/pull/707)), and pluggable `CoverKinematicsStrategy` ([#739](https://github.com/OpenWebNet-HA/MyHOME/pull/739)) | +| **Locks & Door Entry (`WHO=6` / `WHO=8`)** | ❌ Not supported | `WHO=14` actuator maintenance lock/unlock buttons ([#353](https://github.com/OpenWebNet-HA/MyHOME/issues/353)) | Adds **native `lock` platform for `WHO=6` door-entry strikes** with constant-time PIN verification, auto-relock, and `WHO=8` intercom call events ([#667](https://github.com/OpenWebNet-HA/MyHOME/pull/667)) | +| **Climate (`WHO=4`)** | Basic zone thermostats | **Central Unit 3550 (`#0`) & 4695 (`#0#1`) master coordination**, fancoil 3-speed modes, probe (`PZZ`) & pump (`0#N`) separation, `libqtdevices` mode alignment ([#630](https://github.com/OpenWebNet-HA/MyHOME/pull/630)) | Adds **season frames & generic setpoint mode ([#657](https://github.com/OpenWebNet-HA/MyHOME/pull/657), [#725](https://github.com/OpenWebNet-HA/MyHOME/pull/725))**, **holiday/vacation programs ([#689](https://github.com/OpenWebNet-HA/MyHOME/pull/689))**, **zone humidity sensors ([#712](https://github.com/OpenWebNet-HA/MyHOME/pull/712))**, F461 zone polling, standalone `AUTO`, and season-persisted `hvac_action` ([#714](https://github.com/OpenWebNet-HA/MyHOME/pull/714), [#715](https://github.com/OpenWebNet-HA/MyHOME/pull/715), [#721](https://github.com/OpenWebNet-HA/MyHOME/pull/721)) | +| **Sound System (`WHO=16` / `WHO=22`)** | ❌ Not supported | **Full audio matrix (F441/F441M)**, multi-room grouping, **Dynamic Streaming Proxy** (Music Assistant / Spotify Connect), F500 tuner stepping, anti-hiss auto-off | Adds **full `WHO=22` FM tuner frequency, preset & RDS station decoding with optional station artwork ([#695](https://github.com/OpenWebNet-HA/MyHOME/pull/695))**, wall source transport steps ([#651](https://github.com/OpenWebNet-HA/MyHOME/pull/651)), unified amplifier power engine ([#683](https://github.com/OpenWebNet-HA/MyHOME/pull/683)), and idle decoder claiming from parked groups ([#723](https://github.com/OpenWebNet-HA/MyHOME/pull/723)) | +| **Burglar Alarm (`WHO=5`)** | ❌ Not supported | **Dedicated `alarm_control_panel`** (3485/3486 central units), empty-`WHERE` routing ([#609](https://github.com/OpenWebNet-HA/MyHOME/pull/609)), read-only auxiliary panel mode with AUX arm/disarm ([#564](https://github.com/OpenWebNet-HA/MyHOME/issues/564), [#616](https://github.com/OpenWebNet-HA/MyHOME/pull/616)) | Full partition state tracking, zone 0 broadcast sync, and AUX arm/disarm workflows | +| **CEN / CEN+ & Scenarios (`WHO=15/17/25`)** | Raw event listeners; required external blueprints | **8 native UI device triggers** with 4-digit string-preserved addressing (`"0001"`, [#624](https://github.com/OpenWebNet-HA/MyHOME/issues/624)), MAC isolation, Living Now wire-address tolerance, fail-closed triggers ([#601](https://github.com/OpenWebNet-HA/MyHOME/pull/601)) | Adds **`WHO=25` Scenario Plus command/event support ([#671](https://github.com/OpenWebNet-HA/MyHOME/pull/671))** and **`WHO=17` scenario programmer lifecycle events (`myhome_scene_event`, [#656](https://github.com/OpenWebNet-HA/MyHOME/pull/656))** | +| **Diagnostics & Health** | Raw logs only | **Self-clearing HA Repair issues (`actuator_fault`, [#593](https://github.com/OpenWebNet-HA/MyHOME/pull/593))**, `ignored_addresses` ([#621](https://github.com/OpenWebNet-HA/MyHOME/pull/621)), native HA Diagnostics (`diagnostics.py`) with automatic redaction | Adds **gateway kernel/distribution sweep telemetry ([#711](https://github.com/OpenWebNet-HA/MyHOME/pull/711))**, F411 `advanced: true` misconfiguration warning ([#762](https://github.com/OpenWebNet-HA/MyHOME/pull/762)), and clearable `ignored_addresses` ([#666](https://github.com/OpenWebNet-HA/MyHOME/pull/666)) | +| **Lovelace Frontend** | ❌ None | **Built-in `` card** with live streaming feed, offline replay tab, and syntax-validated frame injector | **Built-in `` card** with stricter WebSocket input bounds ([#747](https://github.com/OpenWebNet-HA/MyHOME/pull/747)) and 1-click sanitized diagnostic report export | +| **License** | **AGPL-3.0** (per `master` repository [`LICENSE`](LICENSE)) | **Apache-2.0** (per published `2.0.0b15` release, aligning with Home Assistant Core) | **Apache-2.0** (per published `2.0.0b16` release / [`LICENSE`](https://github.com/OpenWebNet-HA/MyHOME/blob/v2-phase1-architecture/LICENSE), aligning with Home Assistant Core) | + +> 🔗 **Release Changelogs & GitHub Compares**: +> - [`v2.0.0b16` Release Notes & Assets](https://github.com/OpenWebNet-HA/MyHOME/releases/tag/2.0.0b16) • [`Compare 2.0.0b15...2.0.0b16` (83 PRs)](https://github.com/OpenWebNet-HA/MyHOME/compare/2.0.0b15...2.0.0b16) +> - [`v2.0.0b15` Release Notes & Assets](https://github.com/OpenWebNet-HA/MyHOME/releases/tag/2.0.0b15) • [`Compare 2.0.0b14...2.0.0b15` (41 PRs)](https://github.com/OpenWebNet-HA/MyHOME/compare/2.0.0b14...2.0.0b15) +> - [Full Cross-Beta Capability Matrix (`v2.0.0b1` → `v2.0.0b16`)](https://openwebnet-ha.github.io/MyHOME/beta/roadmap/beta-differences/) --- @@ -64,16 +71,17 @@ Understanding the technical differences between **Legacy Stable (v0.9.4)** and * The modernization from legacy to V2 established an extensive automated testing and verification foundation (real-world validation across diverse physical gateways remains an ongoing community effort): -| Testing Dimension | Legacy Stable (`v0.9.4` on `master`) | Modern Beta (`v2.0.0b15` published release / `v2-phase1-architecture` dev branch) | -| :--- | :--- | :--- | -| **Automated Tests** | **0 tests** (no pytest suite or test files in repository) | **3,464 automated tests** in `v2.0.0b15` (3,600+ on active development branch) | -| **Statement Coverage** | **0%** tracked | **Strict 100.0% statement coverage** across all modules | -| **Branch Coverage** | Untracked | Enforced via automated zero-tolerance coverage gates in CI | -| **Trace Replay Engine** | ❌ None (testing required live physical hardware) | **Automated CI replay of authentic on-wire traces** from real European installations (F454, F455, F461, MH200, MH200N, MH201, MH202, MyHomeServer1, H4890, Living Now controls) | -| **Golden Frame Corpus** | ❌ None | **OpenWebNet Golden Corpus** with hundreds of multi-authority calibrated frame test fixtures across 11 subsystems | -| **Snapshot Testing** | ❌ None | **5 Syrupy snapshot suites** verifying diagnostics exports, entity registry schemas, and state trees | -| **CI Automation** | 2 workflows (`hassfest`, basic `validate`) | **10 comprehensive CI workflows** (unit tests, coverage, type checking, Ruff linting, PyPI packaging, HA standards validator, anti-drift sentinel) | -| **Anti-Drift Sentinels** | ❌ None | **Automated sentinel (`scripts/sync_documentation.py`)** continuously validating documentation, tables, and code alignment | +| Testing Dimension | Legacy Stable (`v0.9.4` on `master`) | Beta `v2.0.0b15` *(7 Oct 2026)* | Latest Beta `v2.0.0b16` *(21 Oct 2026)* | +| :--- | :--- | :--- | :--- | +| **Automated Tests** | **0 tests** (no pytest suite or test files in repository) | **3,464 automated tests** passing | **4,393 automated tests** passing (+929 new regression & conformance tests) | +| **Statement Coverage** | **0%** tracked | **Strict 100.0% statement coverage** across all 42 modules | **Strict 100.0% statement coverage** across all **73 modules** | +| **Branch Coverage** | Untracked | Enforced via automated zero-tolerance coverage gates in CI | Enforced via automated zero-tolerance coverage gates in CI | +| **Trace Replay Engine** | ❌ None (testing required live physical hardware) | **Automated CI replay of authentic on-wire traces** from real European installations (F454, F455, F461, MH200, MH200N, MH201, MH202, MyHomeServer1, H4890, Living Now controls) | Expanded with **live F461 + F411/4 `WHO=14` lock traces, F453AV, H4684, `WHO=22` RDS tuner, Venetian tilt, and multi-gateway captures** | +| **Firmware Oracle Conformance** | ❌ None | ❌ Manual profile tuning | **Automated Firmware Oracle Verification (`test_firmware_oracle_conformance.py`, [#745](https://github.com/OpenWebNet-HA/MyHOME/pull/745))** cross-checking frames and gateway profiles against hash-pinned emulated firmware verdicts | +| **Golden Frame Corpus** | ❌ None | **OpenWebNet Golden Corpus** with hundreds of multi-authority calibrated frame test fixtures across 11 subsystems | **Expanded OpenWebNet Golden Corpus** (`WHO 0–25, 1001–1022`) + zero-deprecation enforcement ([#728](https://github.com/OpenWebNet-HA/MyHOME/pull/728), [#729](https://github.com/OpenWebNet-HA/MyHOME/pull/729)) | +| **Snapshot Testing** | ❌ None | **5 Syrupy snapshot suites** verifying diagnostics exports, entity registry schemas, and state trees | **Syrupy snapshot suites** verifying diagnostics exports, entity registry schemas, and state trees | +| **CI Automation** | 2 workflows (`hassfest`, basic `validate`) | **10 comprehensive CI workflows** (unit tests, coverage, type checking, Ruff linting, PyPI packaging, HA standards validator, anti-drift sentinel) | **10 comprehensive CI workflows** + containerized HA smoke (`stable`/`beta`/`dev`) & `OWNd` lockstep smoke gates | +| **Anti-Drift Sentinels** | ❌ None | **Automated sentinel (`scripts/sync_documentation.py`)** continuously validating documentation, tables, and code alignment | **Automated sentinel (`scripts/sync_documentation.py`)** + gateway profile oracle verification | --- @@ -83,10 +91,10 @@ The modernization from legacy to V2 established an extensive automated testing a > **⚠️ Never store backup copies inside `/config/custom_components/` (e.g. `myhome.backup`)!** > Home Assistant automatically discovers **all** subdirectories containing `manifest.json` under `custom_components`. Backups inside this folder cause startup crashes (`Unable to import component: No module named 'custom_components.myhome.backup'`). Always keep backups **outside** in `/config/myhome_backup/`. -### 🚀 Installing the Active Beta (v2.0.0b15 — Recommended for HA ≥ 2026.3) +### 🚀 Installing the Active Beta (v2.0.0b16 — Recommended for HA ≥ 2026.3) > [!TIP] -> **Recommended Beta Install Method**: In **HACS 2.0+**, pre-release toggle switches can get stuck in an *"unavailable"* loop due to upstream registry caching, or show validation warnings before PR #232 merges. Using **Method 1 (Terminal & SSH)** below provides a direct, verified installation that safely preserves your configuration and entity IDs. +> **Recommended Beta Install Method**: In **HACS 2.0+**, pre-release toggle switches can get stuck in an *"unavailable"* loop due to upstream registry caching, or show validation warnings before PR #232 merges. Using **Method 1 (Terminal & SSH)** below provides a direct, verified installation that safely preserves your configuration and entity IDs. *(To install the previous `2.0.0b15` milestone instead, replace `2.0.0b16` with `2.0.0b15` in the download URL.)* #### Method 1: Verified Script via Terminal & SSH Add-on (⭐ Recommended) @@ -99,7 +107,7 @@ if cd /config/custom_components; then # Download and extract into a temporary directory first to verify archive integrity: TMP_DIR=$(mktemp -d) - if wget -O "$TMP_DIR/myhome.zip" https://github.com/OpenWebNet-HA/MyHOME/releases/download/2.0.0b15/myhome.zip && \ + if wget -O "$TMP_DIR/myhome.zip" https://github.com/OpenWebNet-HA/MyHOME/releases/download/2.0.0b16/myhome.zip && \ unzip -q "$TMP_DIR/myhome.zip" -d "$TMP_DIR/myhome" && \ [ -f "$TMP_DIR/myhome/manifest.json" ]; then BACKUP_OK=1 @@ -129,13 +137,13 @@ fi *(For **Home Assistant Container / Docker**, run on your Docker host:)* ```bash -docker exec -it homeassistant bash -c 'cd /config/custom_components || { echo "Error: /config/custom_components not found."; exit 1; }; [ -d myhome.backup ] && mv myhome.backup /config/myhome_backup_old; TMP_DIR=$(mktemp -d); if ! wget -O "$TMP_DIR/myhome.zip" https://github.com/OpenWebNet-HA/MyHOME/releases/download/2.0.0b15/myhome.zip || ! unzip -q "$TMP_DIR/myhome.zip" -d "$TMP_DIR/myhome" || [ ! -f "$TMP_DIR/myhome/manifest.json" ]; then echo "Error: Download or extraction verification failed. Existing installation left intact."; rm -rf "$TMP_DIR"; exit 1; fi; if [ -d myhome ]; then rm -rf /config/myhome_backup && cp -r myhome /config/myhome_backup || { echo "Error: Backup failed. Existing installation left intact. Recovery files preserved in $TMP_DIR."; exit 1; }; fi; if ! (rm -rf myhome && mv "$TMP_DIR/myhome" myhome); then echo "Error: Replacement failed. Recovery files preserved in $TMP_DIR and /config/myhome_backup."; exit 1; fi; rm -rf "$TMP_DIR" && echo "Installation verified. Restarting container..."' && docker restart homeassistant +docker exec -it homeassistant bash -c 'cd /config/custom_components || { echo "Error: /config/custom_components not found."; exit 1; }; [ -d myhome.backup ] && mv myhome.backup /config/myhome_backup_old; TMP_DIR=$(mktemp -d); if ! wget -O "$TMP_DIR/myhome.zip" https://github.com/OpenWebNet-HA/MyHOME/releases/download/2.0.0b16/myhome.zip || ! unzip -q "$TMP_DIR/myhome.zip" -d "$TMP_DIR/myhome" || [ ! -f "$TMP_DIR/myhome/manifest.json" ]; then echo "Error: Download or extraction verification failed. Existing installation left intact."; rm -rf "$TMP_DIR"; exit 1; fi; if [ -d myhome ]; then rm -rf /config/myhome_backup && cp -r myhome /config/myhome_backup || { echo "Error: Backup failed. Existing installation left intact. Recovery files preserved in $TMP_DIR."; exit 1; }; fi; if ! (rm -rf myhome && mv "$TMP_DIR/myhome" myhome); then echo "Error: Replacement failed. Recovery files preserved in $TMP_DIR and /config/myhome_backup."; exit 1; fi; rm -rf "$TMP_DIR" && echo "Installation verified. Restarting container..."' && docker restart homeassistant ``` #### Method 2: Manual Installation (Archive / Samba) 1. Download the release package: - 👉 **[Download myhome.zip (v2.0.0b15)](https://github.com/OpenWebNet-HA/MyHOME/releases/download/2.0.0b15/myhome.zip)** (or browse all [GitHub Releases](https://github.com/OpenWebNet-HA/MyHOME/releases)) + 👉 **[Download myhome.zip (v2.0.0b16 — Latest Beta)](https://github.com/OpenWebNet-HA/MyHOME/releases/download/2.0.0b16/myhome.zip)** • **[Download myhome.zip (v2.0.0b15)](https://github.com/OpenWebNet-HA/MyHOME/releases/download/2.0.0b15/myhome.zip)** (or browse all [GitHub Releases](https://github.com/OpenWebNet-HA/MyHOME/releases)) 2. Open your configuration directory via Samba Share, Studio Code Server, or File Editor. 3. Extract `myhome.zip` directly into `/config/custom_components/myhome/` (overwriting existing files). 4. Restart Home Assistant (**Settings → System → Restart**). @@ -145,7 +153,7 @@ docker exec -it homeassistant bash -c 'cd /config/custom_components || { echo "E 1. In Home Assistant, open **HACS → Integrations**. 2. Click the top-right menu (`⋮`) → **Custom repositories**. 3. Add repository URL: `https://github.com/OpenWebNet-HA/MyHOME` with type **Integration**. -4. Open the **MyHOME** card in HACS, click `⋮` → **Redownload**, ensure **Show beta versions** is toggled ON, select **`2.0.0b15`**, and click **Download**. +4. Open the **MyHOME** card in HACS, click `⋮` → **Redownload**, ensure **Show beta versions** is toggled ON, select **`2.0.0b16`** (or **`2.0.0b15`**), and click **Download**. 5. Restart Home Assistant. --- @@ -190,7 +198,7 @@ If you prefer proven production stability or wish to wait for the final `v2.0.0` echo "Error: Failed to navigate to /config/custom_components. Directory does not exist." fi ``` -* **Configuration Guide for v0.9.4**: Entity definitions on legacy 0.9.4 use manual YAML configuration. Refer to the [Legacy v0.9.4 Configuration Guide](https://github.com/anotherjulien/MyHOME/wiki/Configuration). +* **Configuration Guide for v0.9.4**: Entity definitions on legacy 0.9.4 use manual YAML configuration. Refer to the [Legacy v0.9.4 Documentation](https://openwebnet-ha.github.io/MyHOME/legacy/) or [Legacy Configuration Wiki](https://github.com/anotherjulien/MyHOME/wiki/Configuration). --- @@ -209,7 +217,7 @@ The integration features declarative hardware profiles that automatically calibr | **MH200N** | OpenWebNet | 1 worker | 150 ms | ✅ SSDP | Second-generation scenario programmer | | **MH200** *(Legacy)* | OpenWebNet | 1 worker | 150 ms | ✅ SSDP | Strict single-session pacing; watchdog hardened | | **H4890 / AM4890** | OpenWebNet | 1 worker | 50 ms | ✅ SSDP | 3.5" Touch screen display IP gateway | -| **F452 / F453AV** | OpenWebNet | 1 worker | 50 ms | ✅ UPnP / Port 49153 | Audio/video & web server gateway | +| **F452 / F453AV** | OpenWebNet | 1 worker | 150 ms | ✅ UPnP / Port 49153 | Audio/video & web server gateway | | **HL4684** | OpenWebNet | 1 worker | 50 ms | ✅ SSDP | 10" Touch screen display IP gateway | | **Legrand 3578** | OpenWebNet (Serial) | 1 worker | 50 ms | ❌ Manual (Serial) | USB / Serial gateway & OpenZigBee interface | @@ -223,25 +231,29 @@ The integration features declarative hardware profiles that automatically calibr | Domain | WHO | Capabilities | |---|---|---| -| **`light`** | WHO=1 | On/Off, dimmers with smooth software-stepped curves, DALI DT8 Tunable White (2000K–6535K), HS/RGB colour, and hardware-offloaded bus staircase timers (`myhome.turn_on_timed`). | +| **`light`** | WHO=1 | On/Off, dimmers with smooth software-stepped curves, DALI DT8 Tunable White (2000K–6535K), HS/RGB colour, 2-digit Area 0 (`01`–`09`) addressing, and hardware-offloaded bus staircase timers (`myhome.turn_on_timed`). | | **`switch`** | WHO=1 | Relay actuators, auxiliary switches, socket actuators (switch/outlet device classes), and hardware-offloaded bus timers. | -| **`cover`** | WHO=2 | Motorized shutters and roll-ups with state tracking, position-reporting actuators, virtual travel-time positioning, and centralized shutter button triggers. | -| **`climate`** | WHO=4 | Heating, cooling, 4-pipe systems, thermostats, setpoints, fancoil 3-speed modes, offset tracking, and Central Unit 3550 (`#0`) & 4695 (`#0#1`) master coordination. | -| **`alarm_control_panel`** | WHO=5 | Central units (3485/3486), partition states (disarmed / armed away / triggered), and zone 0 broadcast sync. | +| **`cover`** | WHO=1 / WHO=2 | Motorized shutters, Venetian blinds with slat tilt (`slat_tilt`, `slat_time`), position-reporting actuators, virtual travel-time positioning with `min_motor_pulse` start-up floors & endpoint full runs, impulse gates & garage doors (`WHO=1`) with optional multi-factor approval, and centralized shutter triggers. | +| **`lock`** | WHO=6 | Native video door-entry strikes (`WHO=6`, configured in `myhome.yaml`) with constant-time PIN authentication, auto-relock, and `WHO=8` intercom call events. | +| **`climate`** | WHO=4 | Heating, cooling, 4-pipe systems, thermostats, setpoints, fancoil 3-speed modes, offset tracking, season frames, holiday/vacation programs, zone humidity sensors, and Central Unit 3550 (`#0`) & 4695 (`#0#1`) master coordination. | +| **`alarm_control_panel`** | WHO=5 | Central units (3485/3486), partition states (disarmed / armed away / triggered), zone 0 broadcast sync, and AUX arm/disarm workflows. | | **`binary_sensor`** | WHO=1 / 9 / 25 | Magnetic contacts, door/window sensors, PIR motion, AUX channels (1–9), and dry contact interfaces (F482/3477). | -| **`sensor`** | WHO=1 / 4 / 18 | Power meters, energy counters (total/daily/monthly), temperature probes (3475), and illuminance / lux sensors. | -| **`button`** | WHO=14 / 2 | Hardware actuator lock/unlock for maintenance (WHO=14), and cover travel-time calibration buttons (WHO=2). | -| **`media_player`** | WHO=16 | F441/F441M audio matrix zones, source routing, volume normalization, software mute, and Dynamic Streaming Proxy. | -| **`device_trigger`** | WHO=15 / 25 | Stateless CEN & CEN+ scenario pushbuttons with string-preserved addressing (`"0001"`), MAC isolation, and 8 native UI trigger types. | +| **`sensor`** | WHO=1 / 4 / 18 | Power meters, energy counters (total/daily/monthly), temperature & humidity probes (3475), and illuminance / lux sensors. | +| **`button`** | WHO=14 / 2 | Hardware actuator lock/unlock for maintenance (`WHO=14`), and cover travel-time calibration buttons (`WHO=2`). | +| **`media_player`** | WHO=16 / 22 | F441/F441M audio matrix zones, source routing, `WHO=22` FM tuner frequency/preset/RDS station decoding with optional station artwork, volume normalization, software mute, and Dynamic Streaming Proxy. | +| **`device_trigger`** | WHO=15 / 17 / 25 | Stateless CEN & CEN+ scenario pushbuttons with 4-digit string-preserved addressing (`"0001"`), MAC isolation, 8 native UI trigger types, `WHO=25` Scenario Plus, and `WHO=17` scene lifecycle events. | +| **`expose`** *(Bus Projection)* | WHO=1 / 2 / 4 / 13 / 18 | Declarative HA-to-SCS bus projection: virtual `WHO 1/2` actuators (driven by physical wall buttons with LED feedback), `WHO 4` virtual temperature probes, `WHO 18` virtual energy meters, and `WHO 13` bus clock sync. | ### Architectural Highlights +* **Declarative HA-to-SCS Bus Expose Engine (`#750`)**: Project Home Assistant lights, switches, covers, temperature sensors, power meters, and the system clock onto unused OpenWebNet addresses (`WHO 1, 2, 4, 13, 18`). Physical wall controls can drive exposed virtual actuators with real-time LED state mirroring or execute Home Assistant scripts. +* **Venetian Blind Slat Tilt, Impulse Gates & Cover Kinematics (`#508`, `#667`, `#702`, `#707`, `#708`, `#739`)**: Timed slat tilt pulses (`slat_tilt`, `slat_time`), impulse garage/gate covers on `WHO=1` relays with optional safety approval, native `WHO=6` door-entry locks, per-cover `min_motor_pulse` start-up floors, endpoint full runs (`0%` / `100%`), and stop-status position re-anchoring. * **Native Hardware Bus Light & Switch Timers (`WHO=1`)**: Offload countdown timers directly onto physical Legrand DIN actuators via `myhome.turn_on_timed` or standard `timer` parameters. The lights turn off automatically even if Home Assistant restarts. -* **Sound System 2.0 & Dynamic Streaming Proxy**: Stream from **Music Assistant**, **Spotify Connect**, or any HA media player to wired BTicino audio zones using an intelligent `DecoderPool` with analog gain-staging and anti-hiss auto-off. -* **Thermoregulation Central Unit Coordination (3550 / 4695)**: Master climate coordination for 99-zone (`#0`) and 4-zone (`#0#1`) central units automatically propagates whole-home heating/cooling modes across all subordinate zones. -* **Multi-Gateway Routing & Plant Isolation**: Namespaced dispatchers eliminate cross-talk across plants combining multiple gateways (e.g. F454 + MH200N). -* **Multi-Tier Priority Command Queue**: High-priority user commands (toggling lights, adjusting shutters) execute ahead of background status polling queries. -* **Self-Healing Diagnostics & Repairs**: Hardware anomalies surface as self-clearing Home Assistant repair issues (`device_health.py`). +* **Sound System 2.0, `WHO=22` RDS Tuner & Dynamic Streaming Proxy (`#695`)**: Stream from **Music Assistant**, **Spotify Connect**, or any HA media player to wired BTicino audio zones using an intelligent `DecoderPool` with analog gain-staging and anti-hiss auto-off, plus full `WHO=22` FM tuner RDS metadata. +* **Thermoregulation Central Unit Coordination, Seasons & Humidity (`3550` / `4695`, `#657`, `#689`, `#712`)**: Master climate coordination for 99-zone (`#0`) and 4-zone (`#0#1`) central units automatically propagates whole-home heating/cooling modes, seasons, and holiday programs across subordinate zones. +* **Multi-Gateway Routing & Plant Isolation (`#453`)**: Namespaced dispatchers eliminate cross-talk across plants combining multiple gateways (e.g. F454 + MH200N). +* **Unified Per-Target FrameScheduler (`#738`)**: Serializes commands per target (`WHO`, `WHERE`) while allowing cover `STOP` commands to overtake queued frames (`#694`) and user actions to execute ahead of background status polls (`#685`). +* **Self-Healing Diagnostics, Fault Repairs & Ignored Addresses (`#593`, `#621`, `#666`)**: Hardware anomalies surface as self-clearing Home Assistant repair issues (`actuator_fault`), with configurable `ignored_addresses` in Options Flow. --- @@ -266,6 +278,8 @@ Comprehensive guides, specifications, and tutorials are available on our documen * 📖 **[Official Documentation Site](https://openwebnet-ha.github.io/MyHOME/beta/)** * [Getting Started & Installation](https://openwebnet-ha.github.io/MyHOME/beta/getting-started/installation/) + * [Upgrade from v0.9.4 to v2.0](https://openwebnet-ha.github.io/MyHOME/beta/migration/upgrade-from-094/) + * [Beta Releases & Delta Explorer (`b1` → `b16`)](https://openwebnet-ha.github.io/MyHOME/beta/roadmap/beta-differences/) * [Hardware Gateway Profiles](https://openwebnet-ha.github.io/MyHOME/beta/configuration/gateways/) * [Supported Functions & Subsystems](https://openwebnet-ha.github.io/MyHOME/beta/configuration/supported_functions/) * [Sound System & Dynamic Proxy](https://openwebnet-ha.github.io/MyHOME/beta/configuration/media_player/) @@ -294,7 +308,7 @@ This integration is developed and maintained by the **[OpenWebNet-HA](https://gi * **[@mantovanellimatteo](https://github.com/mantovanellimatteo)**, **[@lyubomirtraykov](https://github.com/lyubomirtraykov)**, and **Cedric Rohou** for key bugfixes, DALI DT8 ballasts, and platform extensions. ### Hardware Traces & Real-World Validation -Special gratitude to the community members whose authentic on-wire bus captures ground our 3,464+ CI tests in real hardware: +Special gratitude to the community members whose authentic on-wire bus captures ground our 4,393+ CI tests in real hardware: * **[@TheDarkWizard](https://github.com/TheDarkWizard)** for MyHomeServer1 automation command-translation echoes and WHO 4 heating/cooling Home+Control traces ([#378](https://github.com/OpenWebNet-HA/MyHOME/issues/378), [#429](https://github.com/OpenWebNet-HA/MyHOME/issues/429)). * **[@f18m](https://github.com/f18m)** (Francesco Montorsi) for MyHomeServer1 & LN-4660M2 centralized shutter and advanced automation traces ([#445](https://github.com/OpenWebNet-HA/MyHOME/issues/445)). * **[@lionelser](https://github.com/lionelser)** for Legrand F455 Basic Gateway full bus sweep, modular dimmers, and pushbutton captures ([#466](https://github.com/OpenWebNet-HA/MyHOME/issues/466)). @@ -304,10 +318,12 @@ Special gratitude to the community members whose authentic on-wire bus captures * **[@caiosweet](https://github.com/caiosweet)** for BTicino MH200N full bus sweep and climate probe knob offset cycle captures ([#466](https://github.com/OpenWebNet-HA/MyHOME/issues/466)). * **[@nicolacavallo84](https://github.com/nicolacavallo84)** for shared-bus dual gateway captures (MHS1 + H4890) and H4890 WHO 25 dry contacts ([#453](https://github.com/OpenWebNet-HA/MyHOME/issues/453), [#466](https://github.com/OpenWebNet-HA/MyHOME/issues/466)). * **[@gimprota76](https://github.com/gimprota76)** (Giovanni) for BTicino F454 burglar alarm (WHO 5) and auxiliary channel (WHO 9) traces ([#311](https://github.com/OpenWebNet-HA/MyHOME/issues/311)). +* **[@paoloboatto](https://github.com/paoloboatto)** for MyHomeServer1 + F500 + H4562 `WHO=22` FM tuner RDS and preset traces ([#695](https://github.com/OpenWebNet-HA/MyHOME/pull/695)). +* **[@cricri72](https://github.com/cricri72)** for BTicino F454 + F411U2 cover calibration and diagnostic captures ([#730](https://github.com/OpenWebNet-HA/MyHOME/issues/730)). --- ## 📄 License * **Current `master` & Stable Releases (v0.9.4)**: Licensed under the [GNU Affero General Public License v3.0 (AGPL-3.0)](LICENSE). -* **Modern Beta Releases (v2.0.0b15) & V2 Architecture**: Licensed under the [Apache License 2.0](https://github.com/OpenWebNet-HA/MyHOME/blob/v2-phase1-architecture/LICENSE) (aligning with Home Assistant Core). +* **Modern Beta Releases (v2.0.0b15 / v2.0.0b16) & V2 Architecture**: Licensed under the [Apache License 2.0](https://github.com/OpenWebNet-HA/MyHOME/blob/v2-phase1-architecture/LICENSE) (aligning with Home Assistant Core). From e4c56c84b26ac9b4a42d5ee70e41b307784bf169 Mon Sep 17 00:00:00 2001 From: Laurens <43173895+GreenGrassBlueOcean@users.noreply.github.com> Date: Sat, 24 Oct 2026 13:33:56 +0200 Subject: [PATCH 3/9] chore(github): add issue form templates with required trace checklist and anonymous Bus Monitor notice --- .github/ISSUE_TEMPLATE/audio_field_report.yml | 62 +++++++ .github/ISSUE_TEMPLATE/bug_report.yml | 162 ++++++++++++++++++ .github/ISSUE_TEMPLATE/config.yml | 14 ++ .github/ISSUE_TEMPLATE/device_request.yml | 110 ++++++++++++ 4 files changed, 348 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/audio_field_report.yml create mode 100644 .github/ISSUE_TEMPLATE/bug_report.yml create mode 100644 .github/ISSUE_TEMPLATE/config.yml create mode 100644 .github/ISSUE_TEMPLATE/device_request.yml diff --git a/.github/ISSUE_TEMPLATE/audio_field_report.yml b/.github/ISSUE_TEMPLATE/audio_field_report.yml new file mode 100644 index 000000000..f96925013 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/audio_field_report.yml @@ -0,0 +1,62 @@ +name: "🔊 Audio field report (Music Assistant / F441)" +description: "Report how multi-room audio behaves on your plant. Passing runs count too." +title: "[Audio]: " +labels: ["audio", "field-report"] +body: + - type: markdown + attributes: + value: | + ## Audio field report + + Grouping is where Music Assistant and the analog matrix meet, and each plant behaves a little differently. + The four checks below are the ones we replay as tests. Please write in **English** and attach the **diagnostics file** + (*Settings → Devices & services → MyHOME → ⋮ → Download diagnostics*) or an **anonymous MyHOME Bus Monitor trace** (`💾 Export Trace` / `📋 Copy Trace`). + + - type: input + id: plant + attributes: + label: Plant (Gateway model, Firmware, Matrix & Decoders) + description: Gateway model & firmware, matrix (F441 / F441M), number of zones, decoder(s). + placeholder: "MH200 (FW 2.1.2) + F441M, 6 zones, Squeezelite + Cambridge CXN" + validations: + required: true + + - type: input + id: versions + attributes: + label: Versions + description: MyHOME (e.g. 2.0.0b16), Home Assistant, and Music Assistant versions. + placeholder: "MyHOME 2.0.0b16, HA 2026.10.1, Music Assistant 2.x" + validations: + required: true + + - type: checkboxes + id: checks + attributes: + label: Which checks passed? + description: Tick what worked. Leave unticked what did not, and describe it below. + options: + - label: "Played to the Music Assistant Sync Group, added a third room, dropped the leader: matrix and queue stayed in step" + - label: "Volume of one member set to 0 and raised again: the slider did not lock" + - label: "After the anti-hiss auto-off silenced the house, play brought the parked members back as a group" + - label: "Cambridge decoder only: diagnostics show the DLNA/UPnP renderer as companion, not a Music Assistant clone" + + - type: textarea + id: what_happened + attributes: + label: What you did, and when (plus attached Diagnostics / Anonymous Bus Trace) + description: | + Describe what happened and drag & drop your **Diagnostics JSON** or **MyHOME Bus Monitor** trace export here. + + > 🔒 **Privacy note:** Both the **MyHOME Bus Monitor** trace export (`💾 Export Trace` / `📋 Copy Trace`) and the **Download diagnostics** JSON produce **anonymous traces** that automatically strip all private/household fields (passwords, PINs, tokens, IP addresses, full MAC addresses, SSDP UDNs, and local file paths) — only your gateway model, firmware version, and raw OpenWebNet bus frames are included. + placeholder: "For example: 21:48, pressed play on the Huis group, Bureau's slider would not move. (Drag & drop myhome_diagnostics.json or myhome_trace_*.json here)" + validations: + required: true + + - type: checkboxes + id: preflight_checklist + attributes: + label: "🛑 Before Submitting — Did You Check?" + options: + - label: "I have written this report in English and attached the anonymous MyHOME Diagnostics JSON or Bus Monitor trace." + required: true diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 000000000..32654d1af --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,162 @@ +name: "🐛 Bug Report" +description: "File a bug report or defect with the MyHOME integration." +title: "[Bug]: " +labels: ["bug"] +body: + - type: markdown + attributes: + value: | + ## Thank you for helping improve MyHOME! + + Before submitting, please keep these three rules in mind: + 1. **🇬🇧 English Only**: Please write your issue in **English** so everyone in the community can follow along. + 2. **🔬 Trace-Driven v2 Phase 1 Rewrite**: The v2 Phase 1 rewrite is built on **real OpenWebNet bus traces** from actual hardware rather than guessing protocol behavior. To diagnose an issue, we need your exact MyHOME beta version, gateway model & firmware, and a trace showing what happens on the bus (especially if a command works from a physical switch / BTicino Home Touch / MyHOME_Up app). + 3. **🔒 Privacy note**: Both the **MyHOME Bus Monitor** trace export (`💾 Export Trace` / `📋 Copy Trace`) and the **Download diagnostics** JSON produce **anonymous traces** that automatically strip all private/household fields (passwords, PINs, tokens, IP addresses, full MAC addresses, SSDP UDNs, and local file paths) — only your gateway model, firmware version, and raw OpenWebNet bus frames are included. + + --- + + ### ⚡ How to capture an anonymous bus trace & diagnostics: + 1. **MyHOME Bus Monitor Trace** *(Fastest & Anonymous)*: + Open the **MyHOME Bus Monitor** card/panel (``), click **Start Trace** (or **Clear**), reproduce the action (both from the physical BTicino control/Home Touch and from Home Assistant), then click **"💾 Export Trace"** (to download a `.json` file) or **"📋 Copy Trace"** (to copy to clipboard). + 2. **Home Assistant Diagnostics JSON** *(Anonymous)*: + Go to **Settings ➔ Devices & Services ➔ MyHOME ➔ ⋮ (3 dots) ➔ Download diagnostics** and drag & drop the JSON file into the attachment box below. + 3. **Home Assistant Debug Log**: + Go to **Settings ➔ Devices & Services ➔ MyHOME ➔ Enable debug logging**, reproduce the issue, click **Disable debug logging**, and drag & drop the downloaded `.log` file below. + + --- + + - type: textarea + id: description + attributes: + label: Bug Description (in English) + description: A clear and concise description of what went wrong, what you observed, and what you expected. + placeholder: What went wrong? Does the device work from a physical wall switch or BTicino Home Touch, and what happens in Home Assistant? + validations: + required: true + + - type: dropdown + id: gateway_model + attributes: + label: Gateway Model + description: Select your BTicino / Legrand OpenWebNet gateway hardware model. + options: + - "MyHomeServer1 (MHS1)" + - "F454 (Audio/Video Web Server)" + - "F455 (Basic Gateway)" + - "F460 (MyHOME Server)" + - "F461 (Third-Party Integration Server)" + - "MH200N (Scenario Programmer)" + - "MH202 (Scenario Programmer)" + - "MH200 (Scenario Programmer)" + - "MH201 (IP Gateway)" + - "H4684 / AM4890 / LN4890 (Touch Screen Gateway)" + - "F452 / F453 / F453AV (Web Server)" + - "F459 (Integration Gateway)" + - "Legrand 3578 USB/Serial (Serial Interface)" + - "Other / Custom OpenWebNet Server" + validations: + required: true + + - type: input + id: gateway_firmware + attributes: + label: Gateway Firmware Version + description: The firmware version of your OpenWebNet gateway (shown on the gateway device page in HA or in your Diagnostics / Bus Monitor export). + placeholder: "e.g. 2.0.51, 3.1.8, 1.0.24 (or 'See attached Diagnostics/Trace')" + validations: + required: true + + - type: dropdown + id: connection_type + attributes: + label: Connection Type + description: How is Home Assistant communicating with your OpenWebNet gateway? + options: + - "Ethernet / IP (TCP port 20000, HMAC-SHA2 / SHA1 / OPEN password)" + - "Ethernet / IP (TCP port 20000, unencrypted / IP range whitelist)" + - "USB / Serial (RS-232 / USB-to-serial adapter, e.g. Legrand 3578)" + - "Virtual / TCP Tunnel" + - "Other" + validations: + required: true + + - type: input + id: ha_version + attributes: + label: Home Assistant Version + description: Find this under Settings -> About (e.g. 2026.10.1). + placeholder: "e.g. 2026.10.1" + validations: + required: true + + - type: input + id: integration_version + attributes: + label: MyHOME Integration Version + description: Exact version of the MyHOME integration (please verify on the latest v2 Phase 1 beta release, e.g. 2.0.0b16). + placeholder: "e.g. 2.0.0b16" + validations: + required: true + + - type: textarea + id: reproduction_steps + attributes: + label: Steps to Reproduce + description: Step-by-step instructions to reproduce the issue (and what actions you performed during your bus trace capture). + placeholder: | + 1. Start trace in MyHOME Bus Monitor (or enable debug logging) + 2. Toggle the device from the physical wall switch / BTicino Home Touch -> works + 3. Toggle the entity 'climate.climate_zone_7' in Home Assistant -> nothing happens on the bus... + validations: + required: true + + - type: textarea + id: diagnostic_attachment + attributes: + label: "📎 Anonymous Bus Trace / Diagnostics JSON / Debug Log Attachment" + description: | + **Drag & drop files directly into this box** (GitHub supports `.json`, `.log`, `.txt`, `.zip`, `.tar.gz`): + - 📡 **MyHOME Bus Monitor Trace JSON**: Click **💾 Export Trace** in `` + - 📦 **MyHOME Diagnostics JSON**: *Settings ➔ Devices & Services ➔ MyHOME ➔ ⋮ (3 dots) ➔ Download diagnostics* + - 📋 **Debug Log File**: *Settings ➔ Devices & Services ➔ MyHOME ➔ Enable/Disable debug logging* + + > 🔒 **Privacy note:** Both the **MyHOME Bus Monitor** trace export (`💾 Export Trace` / `📋 Copy Trace`) and the **Download diagnostics** JSON produce **anonymous traces** that automatically strip all private/household fields (passwords, PINs, tokens, IP addresses, full MAC addresses, SSDP UDNs, and local file paths) — only your gateway model, firmware version, and raw OpenWebNet bus frames are included. + placeholder: "Drag and drop your myhome_trace_*.json, myhome_diagnostics.json, or home-assistant.log file here..." + validations: + required: false + + - type: textarea + id: diagnostic_payload + attributes: + label: Bus Monitor Diagnostic Payload / Bus Trace + description: | + Or paste the clipboard bundle generated by clicking **"📋 Copy Trace"** in `` here. + + > 🔒 **Privacy note:** Both the **MyHOME Bus Monitor** trace export (`💾 Export Trace` / `📋 Copy Trace`) and the **Download diagnostics** JSON produce **anonymous traces** that automatically strip all private/household fields (passwords, PINs, tokens, IP addresses, full MAC addresses, SSDP UDNs, and local file paths) — only your gateway model, firmware version, and raw OpenWebNet bus frames are included. + render: markdown + placeholder: "Paste clipboard contents here (starts with ### MyHOME Diagnostic Bundle)..." + validations: + required: false + + - type: textarea + id: logs + attributes: + label: Log Snippets / Python Tracebacks + description: Relevant log entries or traceback snippets from Settings -> System -> Logs. + render: text + placeholder: "Paste relevant traceback or custom_components.myhome / OWNd debug log lines here..." + validations: + required: false + + - type: checkboxes + id: diagnostics_checklist + attributes: + label: "🛑 Before Submitting — Did You Check?" + description: All items below are required so we have the real bus evidence needed to reproduce and fix your issue reliably. + options: + - label: "I have written this issue in English." + required: true + - label: "I have specified my exact MyHOME version (e.g. 2.0.0b16), Home Assistant version, Gateway model, and Gateway firmware version." + required: true + - label: "I have attached or pasted an anonymous MyHOME Bus Monitor trace (Export/Copy Trace), MyHOME Diagnostics JSON, or Debug Log showing the OpenWebNet frames on the bus." + required: true diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 000000000..30f7b70f1 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,14 @@ +blank_issues_enabled: false +contact_links: + - name: 📖 MyHOME v2 Documentation & Guides + url: https://openwebnet-ha.github.io/MyHOME/beta/ + about: Read the official configuration guides, Bus Monitor instructions, and troubleshooting documentation. + - name: 💬 Community Discussions & Questions + url: https://github.com/OpenWebNet-HA/MyHOME/discussions + about: Ask questions, get help, or share your MyHOME automation setups with the community (please write in English). + - name: 🧪 v2 Architecture Testing Thread (#229) + url: https://github.com/OpenWebNet-HA/MyHOME/issues/229 + about: Join community testing feedback for the Phase 1 v2 architecture rewrite. + - name: 🔀 v2 Architecture Pull Request (#232) + url: https://github.com/OpenWebNet-HA/MyHOME/pull/232 + about: Review code changes, architecture specs, and development progress in PR #232. diff --git a/.github/ISSUE_TEMPLATE/device_request.yml b/.github/ISSUE_TEMPLATE/device_request.yml new file mode 100644 index 000000000..e4a0acc86 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/device_request.yml @@ -0,0 +1,110 @@ +name: "💡 New Device Request" +description: "Request support for a new or currently unsupported BTicino / Legrand device or configuration." +title: "[Device Request]: " +labels: ["enhancement", "device-support"] +body: + - type: markdown + attributes: + value: | + ## Request Support for BTicino / Legrand Hardware + + Thank you for requesting support for a BTicino / Legrand device or plant configuration! + The **v2 Phase 1 rewrite** is built on **real OpenWebNet bus traces** from physical hardware so every supported device works reliably without guesswork. + + > 🔒 **Privacy note:** Both the **MyHOME Bus Monitor** trace export (`💾 Export Trace` / `📋 Copy Trace`) and the **Download diagnostics** JSON produce **anonymous traces** that automatically strip all private/household fields (passwords, PINs, tokens, IP addresses, full MAC addresses, SSDP UDNs, and local file paths) — only your gateway model, firmware version, and raw OpenWebNet bus frames are included. + + - type: input + id: device_model + attributes: + label: Device Model / Commercial Catalog Code + description: The exact BTicino or Legrand catalog reference (e.g. F430/2, F411/4, LN4652, 3456, F420, HOMETOUCH 3488). + placeholder: "e.g. F430/2" + validations: + required: true + + - type: input + id: gateway_and_versions + attributes: + label: Gateway Model, Firmware & MyHOME Integration Version + description: Which gateway model, firmware version, and MyHOME integration version (e.g. 2.0.0b16) are you running? + placeholder: "e.g. MyHomeServer1 (FW 3.1.8), MyHOME 2.0.0b16, HA 2026.10.1" + validations: + required: true + + - type: dropdown + id: who_system + attributes: + label: OpenWebNet WHO System Domain + description: Which OpenWebNet subsystem (WHO) does this device belong to? + options: + - "WHO=1 (Lighting / Relays / Actuators / Switches)" + - "WHO=2 (Automation / Shutters / Blinds / Motorized actuators)" + - "WHO=4 (Heating / Thermoregulation / Thermostats / Zones / Actuators)" + - "WHO=14 (Special Commands / Locks)" + - "WHO=15 (CEN Pushbuttons / Scenario Control)" + - "WHO=16 / WHO=22 (Sound System / Audio Distribution)" + - "WHO=18 (Energy Management / Power Meters / Actuators)" + - "WHO=25 (CEN+ / Advanced Scenario Pushbuttons / Dry Contacts)" + - "WHO=13 (Gateway & System Diagnostics)" + - "Other / Unknown WHO" + validations: + required: true + + - type: textarea + id: configuration + attributes: + label: Physical Configurators or Virtual Configuration (in English) + description: Describe the configuration plugs inserted in the physical sockets (e.g. A=1, PL=2, ZA=0, ZB=7, M=MOD) or virtual parameters set via MyHOME_Suite / MyHOME_Up. + placeholder: "e.g. F430/2 configured with ZA=0, ZB1=7, ZB2=8 without temperature probe, controlled via BTicino Home Touch" + validations: + required: true + + - type: textarea + id: sample_bus_frames + attributes: + label: Sample OpenWebNet Bus Trace / Anonymous Export + description: | + **Drag & drop** your **MyHOME Bus Monitor** export (`💾 Export Trace`) or **Diagnostics JSON**, or paste the frames captured via **📋 Copy Trace** / debug logs when operating the device from a physical switch, BTicino Home Touch, or MyHOME_Up app. + + > 🔒 **Privacy note:** Both the **MyHOME Bus Monitor** trace export (`💾 Export Trace` / `📋 Copy Trace`) and the **Download diagnostics** JSON produce **anonymous traces** that automatically strip all private/household fields (passwords, PINs, tokens, IP addresses, full MAC addresses, SSDP UDNs, and local file paths) — only your gateway model, firmware version, and raw OpenWebNet bus frames are included. + render: markdown + placeholder: | + Drag & drop myhome_trace_*.json here, or paste frames: + ``` + *1*1*23## + *#1*23*1*0## + *1*0*23## + ``` + validations: + required: true + + - type: textarea + id: expected_behavior + attributes: + label: Expected Home Assistant Behavior + description: What Home Assistant entity type and controls should this device map to (e.g. Light, Switch, Cover, Climate, Sensor, Event)? + placeholder: "e.g. Should be controllable as an ON/OFF switch or climate zone..." + validations: + required: false + + - type: textarea + id: documentation_links + attributes: + label: Documentation / Technical Datasheets + description: Links to BTicino / Legrand product manuals, datasheets, or OpenWebNet protocol specifications. + placeholder: "https://..." + validations: + required: false + + - type: checkboxes + id: preflight_checklist + attributes: + label: "🛑 Before Submitting — Did You Check?" + description: Please confirm the following before opening the request. + options: + - label: "I have written this request in English." + required: true + - label: "I have specified my Gateway model, Gateway firmware version, and MyHOME integration version (e.g. 2.0.0b16)." + required: true + - label: "I have included a real OpenWebNet bus trace (via the anonymous MyHOME Bus Monitor export/copy or debug log) showing how the device behaves on the bus." + required: true From 50375cdf3cf796e14d5e2357a537ab2f42b9c81b Mon Sep 17 00:00:00 2001 From: Laurens <43173895+GreenGrassBlueOcean@users.noreply.github.com> Date: Sat, 24 Oct 2026 13:42:32 +0200 Subject: [PATCH 4/9] chore(github): add structured pull_request_template.md to master --- .github/pull_request_template.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 .github/pull_request_template.md diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 000000000..0c1731b6f --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,23 @@ +## Summary + + + +Fixes # + +## Changes + +- + +## Protocol & Bus Trace Evidence (if applicable) + + + +- **Gateway / Firmware:** +- **Frames / Fixtures verified:** + +## Checklist + +- [ ] **PR Description:** This pull request has a clear title and summary explaining the change. +- [ ] **Trace-Backed (if protocol/device change):** Behavior is verified against real OpenWebNet bus traces or gateway firmware fixtures rather than guessed. +- [ ] **V2 Architecture:** New or modified entities implement `handle_event()` and do not manually subscribe via `async_dispatcher_connect`. +- [ ] **Tests & Linters:** `pytest`, `ruff`, and `scripts/verify_ha_standards.py` pass. From a34556d787a52954518af4818415c6ef856c38b3 Mon Sep 17 00:00:00 2001 From: Laurens <43173895+GreenGrassBlueOcean@users.noreply.github.com> Date: Sat, 24 Oct 2026 16:35:26 +0200 Subject: [PATCH 5/9] chore(github): clarify export redaction scope and allow non-trace bug reports --- .github/ISSUE_TEMPLATE/audio_field_report.yml | 16 +++---- .github/ISSUE_TEMPLATE/bug_report.yml | 47 ++++++++++--------- .github/ISSUE_TEMPLATE/device_request.yml | 18 +++---- .github/pull_request_template.md | 2 +- 4 files changed, 43 insertions(+), 40 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/audio_field_report.yml b/.github/ISSUE_TEMPLATE/audio_field_report.yml index f96925013..45e4d100e 100644 --- a/.github/ISSUE_TEMPLATE/audio_field_report.yml +++ b/.github/ISSUE_TEMPLATE/audio_field_report.yml @@ -10,14 +10,14 @@ body: Grouping is where Music Assistant and the analog matrix meet, and each plant behaves a little differently. The four checks below are the ones we replay as tests. Please write in **English** and attach the **diagnostics file** - (*Settings → Devices & services → MyHOME → ⋮ → Download diagnostics*) or an **anonymous MyHOME Bus Monitor trace** (`💾 Export Trace` / `📋 Copy Trace`). + (*Settings → Devices & services → MyHOME → ⋮ → Download diagnostics*), a **MyHOME Bus Monitor trace** (`💾 Export Trace` / `📋 Copy Trace`), or relevant logs/screenshots (or explain if a trace cannot be collected). - type: input id: plant attributes: label: Plant (Gateway model, Firmware, Matrix & Decoders) - description: Gateway model & firmware, matrix (F441 / F441M), number of zones, decoder(s). - placeholder: "MH200 (FW 2.1.2) + F441M, 6 zones, Squeezelite + Cambridge CXN" + description: Gateway model & firmware (or "unknown / unavailable"), matrix (F441 / F441M), number of zones, decoder(s). + placeholder: "MH200 (FW 2.1.2, or 'unknown / unavailable') + F441M, 6 zones, Squeezelite + Cambridge CXN" validations: required: true @@ -44,12 +44,12 @@ body: - type: textarea id: what_happened attributes: - label: What you did, and when (plus attached Diagnostics / Anonymous Bus Trace) + label: What you did, and when (plus attached Diagnostics / Bus Trace / Logs) description: | - Describe what happened and drag & drop your **Diagnostics JSON** or **MyHOME Bus Monitor** trace export here. + Describe what happened and drag & drop your **Diagnostics JSON**, **MyHOME Bus Monitor** trace export, or relevant logs/screenshots here (or explain why a trace cannot be collected). - > 🔒 **Privacy note:** Both the **MyHOME Bus Monitor** trace export (`💾 Export Trace` / `📋 Copy Trace`) and the **Download diagnostics** JSON produce **anonymous traces** that automatically strip all private/household fields (passwords, PINs, tokens, IP addresses, full MAC addresses, SSDP UDNs, and local file paths) — only your gateway model, firmware version, and raw OpenWebNet bus frames are included. - placeholder: "For example: 21:48, pressed play on the Huis group, Bureau's slider would not move. (Drag & drop myhome_diagnostics.json or myhome_trace_*.json here)" + > 🔒 **Privacy note:** **Bus Monitor** exports (`💾 Export Trace` / `📋 Copy Trace`) omit passwords, LAN IPs/ports, serial paths, and full MAC addresses (keeping the 3-byte OUI prefix) while including environment/gateway metadata, telemetry, and raw frames. **Download diagnostics** JSON redacts config-entry secrets and network/hardware identifiers (`password`, `pin`, `token`, `secret`, `host`, full `mac`/`id`, `UDN`, `ssdp_location`, `friendly_name`, `file_path`, and peer MACs) and aliases audio zones/decoders (`zone_`, `decoder_`), but retains metadata/telemetry and—for configured `expose` bindings—`entity_id` (which may contain personal or room names) and `current_ha_state`. **Ordinary Home Assistant or Music Assistant debug logs do not carry the same redaction guarantees.** Please review attachments before posting. + placeholder: "For example: 21:48, pressed play on the Huis group, Bureau's slider would not move. (Drag & drop myhome_diagnostics.json, myhome_trace_*.json, or logs here)" validations: required: true @@ -58,5 +58,5 @@ body: attributes: label: "🛑 Before Submitting — Did You Check?" options: - - label: "I have written this report in English and attached the anonymous MyHOME Diagnostics JSON or Bus Monitor trace." + - label: "I have written this report in English and attached a MyHOME Diagnostics JSON, Bus Monitor trace, or relevant log/screenshot (or explained why a trace cannot be collected)." required: true diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 32654d1af..e63025165 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -10,18 +10,21 @@ body: Before submitting, please keep these three rules in mind: 1. **🇬🇧 English Only**: Please write your issue in **English** so everyone in the community can follow along. - 2. **🔬 Trace-Driven v2 Phase 1 Rewrite**: The v2 Phase 1 rewrite is built on **real OpenWebNet bus traces** from actual hardware rather than guessing protocol behavior. To diagnose an issue, we need your exact MyHOME beta version, gateway model & firmware, and a trace showing what happens on the bus (especially if a command works from a physical switch / BTicino Home Touch / MyHOME_Up app). - 3. **🔒 Privacy note**: Both the **MyHOME Bus Monitor** trace export (`💾 Export Trace` / `📋 Copy Trace`) and the **Download diagnostics** JSON produce **anonymous traces** that automatically strip all private/household fields (passwords, PINs, tokens, IP addresses, full MAC addresses, SSDP UDNs, and local file paths) — only your gateway model, firmware version, and raw OpenWebNet bus frames are included. + 2. **🔬 Trace & Diagnostic Evidence**: The v2 Phase 1 rewrite is built on **real OpenWebNet bus traces** from actual hardware rather than guessing protocol behavior. For bus or device issues, please provide your MyHOME version, gateway model & firmware (or `"unknown / unavailable"`), and a Bus Monitor trace, Diagnostics JSON, or debug log. For setup failures, startup exceptions, or frontend/UI issues where bus frames are unavailable or irrelevant, please attach the relevant logs, Python tracebacks, or screenshots (or explain why a trace cannot be collected). + 3. **🔒 Privacy & Redaction Note**: + - **MyHOME Bus Monitor** trace exports (`💾 Export Trace` / `📋 Copy Trace`) omit passwords, PINs, tokens, LAN IP addresses/ports, serial device paths, and full MAC addresses (keeping only the 3-byte OUI prefix), while including environment versions, capture/filter metadata, gateway model/firmware/identification, buffer/queue telemetry, and raw OpenWebNet bus frames. + - **Download diagnostics** JSON redacts config-entry secrets and network/hardware identifiers (`password`, `pin`, `token`, `secret`, `host`, full `mac`/`id`, `UDN`, `ssdp_location`, `friendly_name`, `file_path`, and peer gateway MACs) and aliases audio zones/decoders (`zone_`, `decoder_`). It also includes gateway/profile/queue/topology metadata, platform device counts, recent bus frames, and—if `expose` bindings are configured—the exposed `entity_id` (which may contain user-defined room or personal names) and its `current_ha_state`. + - **Ordinary Home Assistant debug logs (`.log` / `.zip`)** do **not** carry the same redaction guarantees and may contain IP addresses, entity IDs, or other household details. Always review your attachments and pasted snippets before posting publicly. --- - ### ⚡ How to capture an anonymous bus trace & diagnostics: - 1. **MyHOME Bus Monitor Trace** *(Fastest & Anonymous)*: + ### ⚡ How to capture bus traces, diagnostics, or logs: + 1. **MyHOME Bus Monitor Trace** *(Recommended for bus/device issues)*: Open the **MyHOME Bus Monitor** card/panel (``), click **Start Trace** (or **Clear**), reproduce the action (both from the physical BTicino control/Home Touch and from Home Assistant), then click **"💾 Export Trace"** (to download a `.json` file) or **"📋 Copy Trace"** (to copy to clipboard). - 2. **Home Assistant Diagnostics JSON** *(Anonymous)*: + 2. **Home Assistant Diagnostics JSON** *(Redacted config & runtime snapshot)*: Go to **Settings ➔ Devices & Services ➔ MyHOME ➔ ⋮ (3 dots) ➔ Download diagnostics** and drag & drop the JSON file into the attachment box below. - 3. **Home Assistant Debug Log**: - Go to **Settings ➔ Devices & Services ➔ MyHOME ➔ Enable debug logging**, reproduce the issue, click **Disable debug logging**, and drag & drop the downloaded `.log` file below. + 3. **Home Assistant Debug Log / Tracebacks / Screenshots** *(For setup failures, startup crashes, or UI issues)*: + Go to **Settings ➔ Devices & Services ➔ MyHOME ➔ Enable debug logging** (or **Settings ➔ System ➔ Logs**), reproduce the issue, and drag & drop the `.log` file, traceback, or screenshot below. *(Note: ordinary debug logs are not automatically redacted.)* --- @@ -61,8 +64,8 @@ body: id: gateway_firmware attributes: label: Gateway Firmware Version - description: The firmware version of your OpenWebNet gateway (shown on the gateway device page in HA or in your Diagnostics / Bus Monitor export). - placeholder: "e.g. 2.0.51, 3.1.8, 1.0.24 (or 'See attached Diagnostics/Trace')" + description: The firmware version of your OpenWebNet gateway (shown on the gateway device page in HA or in your Diagnostics / Bus Monitor export). Enter "unknown" or "unavailable" if setup fails before identification or you cannot access it. + placeholder: "e.g. 2.0.51, 3.1.8, 1.0.24, or 'unknown / unavailable'" validations: required: true @@ -102,7 +105,7 @@ body: id: reproduction_steps attributes: label: Steps to Reproduce - description: Step-by-step instructions to reproduce the issue (and what actions you performed during your bus trace capture). + description: Step-by-step instructions to reproduce the issue (and what actions you performed during your bus trace capture, if applicable). placeholder: | 1. Start trace in MyHOME Bus Monitor (or enable debug logging) 2. Toggle the device from the physical wall switch / BTicino Home Touch -> works @@ -113,15 +116,15 @@ body: - type: textarea id: diagnostic_attachment attributes: - label: "📎 Anonymous Bus Trace / Diagnostics JSON / Debug Log Attachment" + label: "📎 Bus Trace / Diagnostics JSON / Debug Log / Screenshot Attachment" description: | - **Drag & drop files directly into this box** (GitHub supports `.json`, `.log`, `.txt`, `.zip`, `.tar.gz`): + **Drag & drop files directly into this box** (GitHub supports `.json`, `.log`, `.txt`, `.zip`, `.tar.gz`, `.png`, `.jpg`): - 📡 **MyHOME Bus Monitor Trace JSON**: Click **💾 Export Trace** in `` - 📦 **MyHOME Diagnostics JSON**: *Settings ➔ Devices & Services ➔ MyHOME ➔ ⋮ (3 dots) ➔ Download diagnostics* - - 📋 **Debug Log File**: *Settings ➔ Devices & Services ➔ MyHOME ➔ Enable/Disable debug logging* + - 📋 **Debug Log / Screenshot**: *Settings ➔ Devices & Services ➔ MyHOME ➔ Enable/Disable debug logging* (or *Settings ➔ System ➔ Logs*) - > 🔒 **Privacy note:** Both the **MyHOME Bus Monitor** trace export (`💾 Export Trace` / `📋 Copy Trace`) and the **Download diagnostics** JSON produce **anonymous traces** that automatically strip all private/household fields (passwords, PINs, tokens, IP addresses, full MAC addresses, SSDP UDNs, and local file paths) — only your gateway model, firmware version, and raw OpenWebNet bus frames are included. - placeholder: "Drag and drop your myhome_trace_*.json, myhome_diagnostics.json, or home-assistant.log file here..." + > 🔒 **Privacy note:** **Bus Monitor** exports omit passwords, LAN IPs/ports, serial paths, and full MAC addresses (keeping the 3-byte OUI prefix) while including environment/gateway metadata, telemetry, and raw frames. **Diagnostics JSON** redacts config-entry secrets and network/hardware identifiers (`password`, `pin`, `token`, `secret`, `host`, full `mac`/`id`, `UDN`, `ssdp_location`, `friendly_name`, `file_path`, and peer MACs) and aliases audio zones/decoders, but retains metadata/telemetry and—for configured `expose` bindings—`entity_id` (which may contain personal or room names) and `current_ha_state`. **Ordinary debug logs do not carry the same redaction guarantees.** Please review attachments before posting. + placeholder: "Drag and drop your myhome_trace_*.json, myhome_diagnostics.json, home-assistant.log, or screenshot here..." validations: required: false @@ -132,7 +135,7 @@ body: description: | Or paste the clipboard bundle generated by clicking **"📋 Copy Trace"** in `` here. - > 🔒 **Privacy note:** Both the **MyHOME Bus Monitor** trace export (`💾 Export Trace` / `📋 Copy Trace`) and the **Download diagnostics** JSON produce **anonymous traces** that automatically strip all private/household fields (passwords, PINs, tokens, IP addresses, full MAC addresses, SSDP UDNs, and local file paths) — only your gateway model, firmware version, and raw OpenWebNet bus frames are included. + > 🔒 **Privacy note:** The Bus Monitor bundle omits passwords, LAN IPs/ports, serial device paths, and full MAC addresses (retaining only the 3-byte OUI prefix), and includes environment/gateway metadata, queue/buffer telemetry, and raw OpenWebNet frames. Please review the pasted text before posting. render: markdown placeholder: "Paste clipboard contents here (starts with ### MyHOME Diagnostic Bundle)..." validations: @@ -141,10 +144,10 @@ body: - type: textarea id: logs attributes: - label: Log Snippets / Python Tracebacks - description: Relevant log entries or traceback snippets from Settings -> System -> Logs. + label: Log Snippets / Python Tracebacks / Why a Trace Is Unavailable + description: Relevant log entries, startup tracebacks (from Settings -> System -> Logs), or an explanation if a bus trace cannot be collected (e.g. setup failure, startup exception, or frontend issue). Note that ordinary debug logs are not automatically redacted — please review before posting. render: text - placeholder: "Paste relevant traceback or custom_components.myhome / OWNd debug log lines here..." + placeholder: "Paste relevant traceback or custom_components.myhome / OWNd debug log lines here (or explain why a bus trace is unavailable / not applicable)..." validations: required: false @@ -152,11 +155,11 @@ body: id: diagnostics_checklist attributes: label: "🛑 Before Submitting — Did You Check?" - description: All items below are required so we have the real bus evidence needed to reproduce and fix your issue reliably. + description: Please confirm all items below so we have the context and evidence needed to investigate and fix your issue. options: - label: "I have written this issue in English." required: true - - label: "I have specified my exact MyHOME version (e.g. 2.0.0b16), Home Assistant version, Gateway model, and Gateway firmware version." + - label: "I have specified my MyHOME version (e.g. 2.0.0b16), Home Assistant version, Gateway model, and Gateway firmware version (or 'unknown / unavailable')." required: true - - label: "I have attached or pasted an anonymous MyHOME Bus Monitor trace (Export/Copy Trace), MyHOME Diagnostics JSON, or Debug Log showing the OpenWebNet frames on the bus." + - label: "I have attached or pasted a MyHOME Bus Monitor trace, Diagnostics JSON, or relevant debug log / Python traceback / screenshot (or explained why a bus trace cannot be collected)." required: true diff --git a/.github/ISSUE_TEMPLATE/device_request.yml b/.github/ISSUE_TEMPLATE/device_request.yml index e4a0acc86..2bb4579fd 100644 --- a/.github/ISSUE_TEMPLATE/device_request.yml +++ b/.github/ISSUE_TEMPLATE/device_request.yml @@ -11,7 +11,7 @@ body: Thank you for requesting support for a BTicino / Legrand device or plant configuration! The **v2 Phase 1 rewrite** is built on **real OpenWebNet bus traces** from physical hardware so every supported device works reliably without guesswork. - > 🔒 **Privacy note:** Both the **MyHOME Bus Monitor** trace export (`💾 Export Trace` / `📋 Copy Trace`) and the **Download diagnostics** JSON produce **anonymous traces** that automatically strip all private/household fields (passwords, PINs, tokens, IP addresses, full MAC addresses, SSDP UDNs, and local file paths) — only your gateway model, firmware version, and raw OpenWebNet bus frames are included. + > 🔒 **Privacy note:** **Bus Monitor** exports (`💾 Export Trace` / `📋 Copy Trace`) omit passwords, LAN IPs/ports, serial paths, and full MAC addresses (keeping the 3-byte OUI prefix) while including environment/gateway metadata, telemetry, and raw frames. **Download diagnostics** JSON redacts config-entry secrets and network/hardware identifiers (`password`, `pin`, `token`, `secret`, `host`, full `mac`/`id`, `UDN`, `ssdp_location`, `friendly_name`, `file_path`, and peer MACs) and aliases audio zones/decoders, but retains metadata/telemetry and—for configured `expose` bindings—`entity_id` (which may contain personal or room names) and `current_ha_state`. **Ordinary debug logs do not carry the same redaction guarantees.** Please review all attachments and snippets before posting. - type: input id: device_model @@ -26,8 +26,8 @@ body: id: gateway_and_versions attributes: label: Gateway Model, Firmware & MyHOME Integration Version - description: Which gateway model, firmware version, and MyHOME integration version (e.g. 2.0.0b16) are you running? - placeholder: "e.g. MyHomeServer1 (FW 3.1.8), MyHOME 2.0.0b16, HA 2026.10.1" + description: Which gateway model, firmware version (or "unknown / unavailable"), and MyHOME integration version (e.g. 2.0.0b16) are you running? + placeholder: "e.g. MyHomeServer1 (FW 3.1.8, or 'unknown / unavailable'), MyHOME 2.0.0b16, HA 2026.10.1" validations: required: true @@ -62,14 +62,14 @@ body: - type: textarea id: sample_bus_frames attributes: - label: Sample OpenWebNet Bus Trace / Anonymous Export + label: Sample OpenWebNet Bus Trace / Diagnostic Evidence description: | - **Drag & drop** your **MyHOME Bus Monitor** export (`💾 Export Trace`) or **Diagnostics JSON**, or paste the frames captured via **📋 Copy Trace** / debug logs when operating the device from a physical switch, BTicino Home Touch, or MyHOME_Up app. + **Drag & drop** your **MyHOME Bus Monitor** export (`💾 Export Trace`), **Diagnostics JSON**, or debug log/screenshots, or paste the frames captured via **📋 Copy Trace** when operating the device from a physical switch, BTicino Home Touch, or MyHOME_Up app. If a bus trace cannot be collected, please explain why and provide relevant logs or protocol documentation. - > 🔒 **Privacy note:** Both the **MyHOME Bus Monitor** trace export (`💾 Export Trace` / `📋 Copy Trace`) and the **Download diagnostics** JSON produce **anonymous traces** that automatically strip all private/household fields (passwords, PINs, tokens, IP addresses, full MAC addresses, SSDP UDNs, and local file paths) — only your gateway model, firmware version, and raw OpenWebNet bus frames are included. + > 🔒 **Privacy note:** **Bus Monitor** exports omit passwords, LAN IPs/ports, serial paths, and full MAC addresses (keeping the 3-byte OUI prefix) while including environment/gateway metadata, telemetry, and raw frames. **Diagnostics JSON** redacts config-entry secrets and network/hardware identifiers (`password`, `pin`, `token`, `secret`, `host`, full `mac`/`id`, `UDN`, `ssdp_location`, `friendly_name`, `file_path`, and peer MACs) and aliases audio zones/decoders, but retains metadata/telemetry and—for configured `expose` bindings—`entity_id` (which may contain personal or room names) and `current_ha_state`. **Ordinary debug logs do not carry the same redaction guarantees.** Please review before posting. render: markdown placeholder: | - Drag & drop myhome_trace_*.json here, or paste frames: + Drag & drop myhome_trace_*.json here, paste captured frames, or explain why a bus trace is unavailable: ``` *1*1*23## *#1*23*1*0## @@ -104,7 +104,7 @@ body: options: - label: "I have written this request in English." required: true - - label: "I have specified my Gateway model, Gateway firmware version, and MyHOME integration version (e.g. 2.0.0b16)." + - label: "I have specified my Gateway model, Gateway firmware version (or 'unknown / unavailable'), and MyHOME integration version (e.g. 2.0.0b16)." required: true - - label: "I have included a real OpenWebNet bus trace (via the anonymous MyHOME Bus Monitor export/copy or debug log) showing how the device behaves on the bus." + - label: "I have included an OpenWebNet bus trace, Diagnostics JSON, or relevant log/protocol documentation (or explained why a bus trace cannot be collected)." required: true diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 0c1731b6f..556d18eae 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -10,7 +10,7 @@ Fixes # ## Protocol & Bus Trace Evidence (if applicable) - + - **Gateway / Firmware:** - **Frames / Fixtures verified:** From 6fc50eabbb13ad182036501c98bab3c12a1d29e3 Mon Sep 17 00:00:00 2001 From: Laurens <43173895+GreenGrassBlueOcean@users.noreply.github.com> Date: Sat, 24 Oct 2026 16:38:44 +0200 Subject: [PATCH 6/9] chore(github): align pull_request_template.md with PR #778 structure --- .github/pull_request_template.md | 63 ++++++++++++++++++++++++++++---- 1 file changed, 55 insertions(+), 8 deletions(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 556d18eae..225ae98b9 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,23 +1,70 @@ -## Summary +## What is the problem - + Fixes # -## Changes +--- + +## What is the solution + +1. **...**: + - +2. **...**: + - + +--- + +## State Diagram + + + +```mermaid +stateDiagram-v2 + [*] --> Idle +``` + +--- + +## Hardware Verification + + + +- + +--- + +## How is it tested + + + +- `tests/test_...py::test_...`: + - + +--- + +## Where are the traces + + - -## Protocol & Bus Trace Evidence (if applicable) +--- + +## What does the Firmware Oracle / Encyclopedia say + + - +1. **OpenWebNet Encyclopedia (`WHO = ...`)**: + - +2. **Firmware Oracle**: + - -- **Gateway / Firmware:** -- **Frames / Fixtures verified:** +--- ## Checklist -- [ ] **PR Description:** This pull request has a clear title and summary explaining the change. +- [ ] **PR Description:** Follows the structured sections above (`What is the problem`, `What is the solution`, `State Diagram`, `How is it tested`, `Where are the traces`, `What does the Firmware Oracle / Encyclopedia say`). - [ ] **Trace-Backed (if protocol/device change):** Behavior is verified against real OpenWebNet bus traces or gateway firmware fixtures rather than guessed. - [ ] **V2 Architecture:** New or modified entities implement `handle_event()` and do not manually subscribe via `async_dispatcher_connect`. - [ ] **Tests & Linters:** `pytest`, `ruff`, and `scripts/verify_ha_standards.py` pass. From 1e0ef0387e11d3a2cf1238d86125991c078e12c1 Mon Sep 17 00:00:00 2001 From: Laurens <43173895+GreenGrassBlueOcean@users.noreply.github.com> Date: Wed, 4 Nov 2026 00:58:53 +0100 Subject: [PATCH 7/9] docs: align master README with v2.0.0b17 beta release and expanded community credits --- README.md | 167 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 88 insertions(+), 79 deletions(-) diff --git a/README.md b/README.md index edf514263..60ea25066 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,15 @@ # MyHOME — OpenWebNet Integration for Home Assistant [![Current Stable](https://img.shields.io/badge/stable-v0.9.4-blue.svg)](https://github.com/OpenWebNet-HA/MyHOME/releases/tag/0.9.4) -[![Active Beta](https://img.shields.io/badge/beta-v2.0.0b16-orange.svg)](https://github.com/OpenWebNet-HA/MyHOME/releases/tag/2.0.0b16) +[![Active Beta](https://img.shields.io/badge/beta-v2.0.0b17-orange.svg)](https://github.com/OpenWebNet-HA/MyHOME/releases/tag/2.0.0b17) [![Validate with hassfest](https://github.com/OpenWebNet-HA/MyHOME/actions/workflows/hassfest.yml/badge.svg)](https://github.com/OpenWebNet-HA/MyHOME/actions/workflows/hassfest.yml) [![HACS Validation](https://github.com/OpenWebNet-HA/MyHOME/actions/workflows/validate.yml/badge.svg)](https://github.com/OpenWebNet-HA/MyHOME/actions/workflows/validate.yml) [![HACS Custom](https://img.shields.io/badge/HACS-Custom-orange.svg)](https://hacs.xyz) [![Python 3.14](https://img.shields.io/badge/python-3.14-blue.svg)](https://www.python.org/) -[![Quality Scale](https://img.shields.io/badge/Quality%20Scale-Platinum%20(54%2F54%20Self--Assessed)-brightgreen.svg)](https://openwebnet-ha.github.io/MyHOME/beta/) -[![Tests](https://img.shields.io/badge/tests-4%2C393%20passing-brightgreen.svg)](https://github.com/OpenWebNet-HA/MyHOME/actions/workflows/test-coverage.yaml) +[![Quality Scale](https://img.shields.io/badge/Quality%20Scale-Platinum%20(54%2F54%20Self--Assessed)-brightgreen.svg)](https://openwebnet-ha.github.io/MyHOME/latest/) +[![Tests](https://img.shields.io/badge/tests-5%2C324%20passing-brightgreen.svg)](https://github.com/OpenWebNet-HA/MyHOME/actions/workflows/test-coverage.yaml) [![Coverage](https://img.shields.io/badge/coverage-100.0%25-brightgreen.svg)](https://app.codecov.io/gh/OpenWebNet-HA/MyHOME/tree/v2-phase1-architecture) -[![Documentation](https://img.shields.io/badge/Docs-openwebnet--ha.github.io%2FMyHOME-blue.svg)](https://openwebnet-ha.github.io/MyHOME/beta/) +[![Documentation](https://img.shields.io/badge/Docs-openwebnet--ha.github.io%2FMyHOME-blue.svg)](https://openwebnet-ha.github.io/MyHOME/latest/) [![Discussions](https://img.shields.io/badge/Discussions-Join-blue?logo=github)](https://github.com/OpenWebNet-HA/MyHOME/discussions) [![License: AGPL-3.0](https://img.shields.io/badge/License-AGPL_3.0-blue.svg)](LICENSE) @@ -17,7 +17,7 @@ Modern, async-native Home Assistant integration for **BTicino / Legrand MyHOME** Maintained by the **[OpenWebNet-HA](https://github.com/OpenWebNet-HA)** community organisation. -[⚖️ Version Comparison](#️-version-comparison-legacy-stable-vs-modern-beta) • [🧪 Testing & Reliability](#-testing--quality-comparison) • [📦 Installation](#-installation) • [🏛️ Supported Hardware](#️-supported-hardware--gateways) • [🌟 Key Features](#-modern-v2-features) • [📚 Full Documentation](https://openwebnet-ha.github.io/MyHOME/beta/) • [🗺️ Stable v2.0.0 PR #232](https://github.com/OpenWebNet-HA/MyHOME/pull/232) +[⚖️ Version Comparison](#️-version-comparison-legacy-stable-vs-modern-beta) • [🧪 Testing & Reliability](#-testing--quality-comparison) • [📦 Installation](#-installation) • [🏛️ Supported Hardware](#️-supported-hardware--gateways) • [🌟 Key Features](#-modern-v2-features) • [📚 Full Documentation](https://openwebnet-ha.github.io/MyHOME/latest/) • [🗺️ Stable v2.0.0 PR #232](https://github.com/OpenWebNet-HA/MyHOME/pull/232) --- @@ -25,7 +25,7 @@ Maintained by the **[OpenWebNet-HA](https://github.com/OpenWebNet-HA)** communit > ### 🛡️ Current Stable Status vs. Active V2 Beta > > - **Current Stable Release ([v0.9.4](https://github.com/OpenWebNet-HA/MyHOME/releases/tag/0.9.4))**: The baseline release on `master` for users seeking proven production stability. Fully compatible with Home Assistant 2026.9 and earlier. HACS installs this version by default when pre-releases are not enabled. -> - **Active Field-Testing Beta ([v2.0.0b16](https://github.com/OpenWebNet-HA/MyHOME/releases/tag/2.0.0b16), succeeding [v2.0.0b15](https://github.com/OpenWebNet-HA/MyHOME/releases/tag/2.0.0b15))**: Modernized async-native architecture (`OWNd 2.0.0b11`), declarative HA-to-SCS bus `expose` engine (`WHO 1/2/4/13/18`), Venetian blind slat tilt, impulse gate/garage covers & door-entry locks (`WHO 1/2/6/8`), cover motor start-up floor & endpoint full runs, device fault repairs & ignored addresses, hardware timers, audio streaming proxy & `WHO 22` RDS tuner, central climate coordination, and 100.0% test statement coverage (**4,393 tests** in `v2.0.0b16`, up from 3,464 in `v2.0.0b15`). Built for Home Assistant ≥ 2026.3 (Python 3.14). +> - **Active Field-Testing Beta ([v2.0.0b17](https://github.com/OpenWebNet-HA/MyHOME/releases/tag/2.0.0b17), succeeding [v2.0.0b16](https://github.com/OpenWebNet-HA/MyHOME/releases/tag/2.0.0b16))**: Modernized async-native architecture (`OWNd 2.0.0b13`), cover end-stop settle recomputation & 0.5 s limit-stop cutoff, configurable `min_position_delta` (1–5 %), BTicino 3550 Central Unit hydration & diagnostics, native FM tuner platform controls (`WHO=22` / `WHO=16`), Burglar alarm HomeKit arm-away, Legrand 067292 gateway profile alias, declarative HA-to-SCS bus `expose` engine (`WHO 1/2/4/13/18`), Venetian blind slat tilt, impulse gate/garage covers & door-entry locks (`WHO 1/2/6/8`), and 100.0% test statement coverage (**5,324 tests** in `v2.0.0b17`, up from 4,393 in `v2.0.0b16`). Built for Home Assistant ≥ 2026.3 (Python 3.14). > - **Roadmap to Stable v2.0.0**: Once community field-testing on the beta line is concluded, **[PR #232](https://github.com/OpenWebNet-HA/MyHOME/pull/232)** will merge the V2 architecture directly into `master`, making it the official stable default for all users. > - **Zero-Friction Migration**: Upgrading to V2 safely preserves all existing device names, custom entity IDs (`light.living_room`), and gateway configurations. Unique IDs migrate automatically (`MAC-WHERE` → `MAC-WHO-WHERE`), and legacy `myhome.yaml` settings (`travel_time`, `lock_features`) are automatically persisted into the config entry ([#742](https://github.com/OpenWebNet-HA/MyHOME/pull/742)). @@ -33,37 +33,38 @@ Maintained by the **[OpenWebNet-HA](https://github.com/OpenWebNet-HA)** communit ## ⚖️ Version Comparison: Legacy Stable vs. Modern Beta -Understanding the technical differences between **Legacy Stable (`v0.9.4`)**, **Previous Beta (`v2.0.0b15`)**, and **Latest Beta (`v2.0.0b16`)**: +Understanding the technical differences between **Legacy Stable (`v0.9.4`)**, **Previous Beta (`v2.0.0b16`)**, and **Latest Beta (`v2.0.0b17`)**: -| Feature / Architecture | Legacy Stable (`v0.9.4` on `master`) | Beta `v2.0.0b15` *(7 Oct 2026)* | Latest Beta `v2.0.0b16` *(21 Oct 2026)* | +| Feature / Architecture | Legacy Stable (`v0.9.4` on `master`) | Beta `v2.0.0b16` *(21 Oct 2026)* | Latest Beta `v2.0.0b17` *(4 Nov 2026)* | | :--- | :--- | :--- | :--- | -| **Home Assistant Core** | Compatible with HA 2026.9 and earlier | **Core ≥ 2026.3** (Python 3.14 async-native) | **Core ≥ 2026.3** (Python 3.14 async-native; HA 2026.11 registry migration ready) | +| **Home Assistant Core** | Compatible with HA 2026.9 and earlier | **Core ≥ 2026.3** (Python 3.14 async-native; HA 2026.11 registry migration ready) | **Core ≥ 2026.3** (Python 3.14 async-native; HA 2026.11 logger, media player & registry migration verified) | | **IoT Class** | `local_polling` | **`local_push`** (real-time bus event stream push) | **`local_push`** (real-time bus event stream push) | -| **Protocol Engine** | `OWNd==0.7.48` | **`OWNd==2.0.0b10`** (typed PEP 561, HMAC-SHA256, firmware-aware profiles) | **`OWNd==2.0.0b11`** (zero private symbols/shims, strict builder validation, whole-hour TZ guard) | -| **Quality Scale** | Unranked legacy structure | **🏆 Platinum Tier (54/54 self-assessed rules satisfied/exempt in `quality_scale.yaml`)** | **🏆 Platinum Tier (54/54 self-assessed rules)** + bundled brand icons ([#741](https://github.com/OpenWebNet-HA/MyHOME/pull/741)) — formal tier awarded upon upstream core review | -| **Type Safety** | Untyped | **100% `mypy --strict` compliance** across all 42 modules | **100% `mypy --strict` compliance** across all **73 modules** (verified against pinned `OWNd==2.0.0b11`) | -| **State Storage & Config** | Global `hass.data[DOMAIN]` dictionaries | Strongly-typed **`entry.runtime_data`** (`MyHOMERuntimeData`); UI Config/Options Flow + `ignored_addresses` ([#621](https://github.com/OpenWebNet-HA/MyHOME/pull/621)) | **`entry.runtime_data`** + automatic persistence of `myhome.yaml` device settings (`travel_time`, `lock_features`) into config entry ([#742](https://github.com/OpenWebNet-HA/MyHOME/pull/742)) | -| **Device Discovery** | Requires manual YAML (`myhome.yaml`) | **Zero-config Dynamic Bus Auto-Discovery** + blank-start discovery ([#578](https://github.com/OpenWebNet-HA/MyHOME/pull/578)) | **Zero-config Dynamic Bus Auto-Discovery** + phantom-entity suppression on blank start ([#686](https://github.com/OpenWebNet-HA/MyHOME/pull/686)) & ON-dimmer brightness probing ([#742](https://github.com/OpenWebNet-HA/MyHOME/pull/742)) | -| **Expose HA to SCS Bus** | ❌ Not supported | ❌ Not supported | **✅ Declarative `expose` engine ([#750](https://github.com/OpenWebNet-HA/MyHOME/pull/750))**: virtual `WHO 1/2` actuators (with wall LED feedback), `WHO 4` temperature probes, `WHO 18` energy meters, and `WHO 13` bus clock | -| **Gateway Profiles** | Fixed, hardcoded socket pacing | **12 Declarative Profiles** (tuned workers, inter-frame delays, per-profile session defaults [#606](https://github.com/OpenWebNet-HA/MyHOME/pull/606) & quiet-plant keepalive [#637](https://github.com/OpenWebNet-HA/MyHOME/pull/637)) | **12 Declarative Profiles** verified against empirical **Firmware Oracle** ([#745](https://github.com/OpenWebNet-HA/MyHOME/pull/745)), plus `H4684`/`LGRH4684` & `MH201` auto-ID ([#652](https://github.com/OpenWebNet-HA/MyHOME/pull/652), [#722](https://github.com/OpenWebNet-HA/MyHOME/pull/722)) | -| **Supported Transports** | TCP Network Gateways only | **TCP IP + USB/Serial (Legrand 3578 / OpenZigBee)** | **TCP IP + USB/Serial (Legrand 3578 / OpenZigBee)** + shared HA websession discovery ([#757](https://github.com/OpenWebNet-HA/MyHOME/pull/757)) | -| **Multi-Gateway Plants** | ❌ Single gateway only (cross-talk on multi-GW) | **Namespaced routing, plant isolation & warm-standby failover ([#453](https://github.com/OpenWebNet-HA/MyHOME/issues/453))** | **Namespaced routing, plant isolation & warm-standby failover** | -| **Command Scheduling** | FIFO queue (user commands blocked behind sweeps) | **Multi-tier Priority Queue** (user actions prioritized over polls) | **Unified `FrameScheduler` ([#738](https://github.com/OpenWebNet-HA/MyHOME/pull/738))** with per-target (`WHO`, `WHERE`) serialization, cover `STOP` overtaking queued frames ([#694](https://github.com/OpenWebNet-HA/MyHOME/pull/694)), and low-priority fade steps ([#739](https://github.com/OpenWebNet-HA/MyHOME/pull/739)) | -| **Lighting (`WHO=1`)** | Basic On/Off relays & stepped dimming | **Hardware staircase bus timers**, smooth software fades, **DALI DT8 Tunable White (2000K–6535K)**, DALI feature locks, declared groups, dimmer no-load (`WHAT 19`, [#622](https://github.com/OpenWebNet-HA/MyHOME/pull/622)), 0% → `switch_off` ([#635](https://github.com/OpenWebNet-HA/MyHOME/pull/635)) | Adds **2-digit Area 0 point addresses (`01`–`09`, [#713](https://github.com/OpenWebNet-HA/MyHOME/pull/713))**, startup-sweep poll deduplication ([#701](https://github.com/OpenWebNet-HA/MyHOME/pull/701)), and strict per-member echo counting for group/area re-syncs ([#740](https://github.com/OpenWebNet-HA/MyHOME/pull/740), [#749](https://github.com/OpenWebNet-HA/MyHOME/pull/749)) | -| **Covers (`WHO=2` & `WHO=1`)** | Basic Open / Close / Stop | State tracking, position-reporting actuators, **interactive travel-time calibration engine**, centralized shutter buttons | Adds **Venetian blind slat tilt (`slat_tilt`, `slat_time`, [#508](https://github.com/OpenWebNet-HA/MyHOME/pull/508))**, **impulse gate/garage covers on `WHO=1` with optional safety approval ([#667](https://github.com/OpenWebNet-HA/MyHOME/pull/667))**, **per-cover `min_motor_pulse` floor & endpoint full runs ([#702](https://github.com/OpenWebNet-HA/MyHOME/pull/702), [#708](https://github.com/OpenWebNet-HA/MyHOME/pull/708))**, stop-status position re-anchoring ([#707](https://github.com/OpenWebNet-HA/MyHOME/pull/707)), and pluggable `CoverKinematicsStrategy` ([#739](https://github.com/OpenWebNet-HA/MyHOME/pull/739)) | -| **Locks & Door Entry (`WHO=6` / `WHO=8`)** | ❌ Not supported | `WHO=14` actuator maintenance lock/unlock buttons ([#353](https://github.com/OpenWebNet-HA/MyHOME/issues/353)) | Adds **native `lock` platform for `WHO=6` door-entry strikes** with constant-time PIN verification, auto-relock, and `WHO=8` intercom call events ([#667](https://github.com/OpenWebNet-HA/MyHOME/pull/667)) | -| **Climate (`WHO=4`)** | Basic zone thermostats | **Central Unit 3550 (`#0`) & 4695 (`#0#1`) master coordination**, fancoil 3-speed modes, probe (`PZZ`) & pump (`0#N`) separation, `libqtdevices` mode alignment ([#630](https://github.com/OpenWebNet-HA/MyHOME/pull/630)) | Adds **season frames & generic setpoint mode ([#657](https://github.com/OpenWebNet-HA/MyHOME/pull/657), [#725](https://github.com/OpenWebNet-HA/MyHOME/pull/725))**, **holiday/vacation programs ([#689](https://github.com/OpenWebNet-HA/MyHOME/pull/689))**, **zone humidity sensors ([#712](https://github.com/OpenWebNet-HA/MyHOME/pull/712))**, F461 zone polling, standalone `AUTO`, and season-persisted `hvac_action` ([#714](https://github.com/OpenWebNet-HA/MyHOME/pull/714), [#715](https://github.com/OpenWebNet-HA/MyHOME/pull/715), [#721](https://github.com/OpenWebNet-HA/MyHOME/pull/721)) | -| **Sound System (`WHO=16` / `WHO=22`)** | ❌ Not supported | **Full audio matrix (F441/F441M)**, multi-room grouping, **Dynamic Streaming Proxy** (Music Assistant / Spotify Connect), F500 tuner stepping, anti-hiss auto-off | Adds **full `WHO=22` FM tuner frequency, preset & RDS station decoding with optional station artwork ([#695](https://github.com/OpenWebNet-HA/MyHOME/pull/695))**, wall source transport steps ([#651](https://github.com/OpenWebNet-HA/MyHOME/pull/651)), unified amplifier power engine ([#683](https://github.com/OpenWebNet-HA/MyHOME/pull/683)), and idle decoder claiming from parked groups ([#723](https://github.com/OpenWebNet-HA/MyHOME/pull/723)) | -| **Burglar Alarm (`WHO=5`)** | ❌ Not supported | **Dedicated `alarm_control_panel`** (3485/3486 central units), empty-`WHERE` routing ([#609](https://github.com/OpenWebNet-HA/MyHOME/pull/609)), read-only auxiliary panel mode with AUX arm/disarm ([#564](https://github.com/OpenWebNet-HA/MyHOME/issues/564), [#616](https://github.com/OpenWebNet-HA/MyHOME/pull/616)) | Full partition state tracking, zone 0 broadcast sync, and AUX arm/disarm workflows | -| **CEN / CEN+ & Scenarios (`WHO=15/17/25`)** | Raw event listeners; required external blueprints | **8 native UI device triggers** with 4-digit string-preserved addressing (`"0001"`, [#624](https://github.com/OpenWebNet-HA/MyHOME/issues/624)), MAC isolation, Living Now wire-address tolerance, fail-closed triggers ([#601](https://github.com/OpenWebNet-HA/MyHOME/pull/601)) | Adds **`WHO=25` Scenario Plus command/event support ([#671](https://github.com/OpenWebNet-HA/MyHOME/pull/671))** and **`WHO=17` scenario programmer lifecycle events (`myhome_scene_event`, [#656](https://github.com/OpenWebNet-HA/MyHOME/pull/656))** | -| **Diagnostics & Health** | Raw logs only | **Self-clearing HA Repair issues (`actuator_fault`, [#593](https://github.com/OpenWebNet-HA/MyHOME/pull/593))**, `ignored_addresses` ([#621](https://github.com/OpenWebNet-HA/MyHOME/pull/621)), native HA Diagnostics (`diagnostics.py`) with automatic redaction | Adds **gateway kernel/distribution sweep telemetry ([#711](https://github.com/OpenWebNet-HA/MyHOME/pull/711))**, F411 `advanced: true` misconfiguration warning ([#762](https://github.com/OpenWebNet-HA/MyHOME/pull/762)), and clearable `ignored_addresses` ([#666](https://github.com/OpenWebNet-HA/MyHOME/pull/666)) | -| **Lovelace Frontend** | ❌ None | **Built-in `` card** with live streaming feed, offline replay tab, and syntax-validated frame injector | **Built-in `` card** with stricter WebSocket input bounds ([#747](https://github.com/OpenWebNet-HA/MyHOME/pull/747)) and 1-click sanitized diagnostic report export | -| **License** | **AGPL-3.0** (per `master` repository [`LICENSE`](LICENSE)) | **Apache-2.0** (per published `2.0.0b15` release, aligning with Home Assistant Core) | **Apache-2.0** (per published `2.0.0b16` release / [`LICENSE`](https://github.com/OpenWebNet-HA/MyHOME/blob/v2-phase1-architecture/LICENSE), aligning with Home Assistant Core) | +| **Protocol Engine** | `OWNd==0.7.48` | **`OWNd==2.0.0b11`** (zero private symbols/shims, strict builder validation, whole-hour TZ guard) | **`OWNd==2.0.0b13`** (hardened WHO 4 setpoints, vacation program parser, WHO 6 gateway boundaries, WHO 16 station range validation, clean profile aliases) | +| **Quality Scale** | Unranked legacy structure | **🏆 Platinum Tier (54/54 self-assessed rules)** + bundled brand icons ([#741](https://github.com/OpenWebNet-HA/MyHOME/pull/741)) — formal tier awarded upon upstream core review | **🏆 Platinum Tier (54/54 self-assessed rules satisfied/exempt in `quality_scale.yaml`)** | +| **Type Safety** | Untyped | **100% `mypy --strict` compliance** across all **73 modules** (verified against pinned `OWNd==2.0.0b11`) | **100% `mypy --strict` compliance** across all **73 modules** (verified against pinned `OWNd==2.0.0b13`) | +| **State Storage & Config** | Global `hass.data[DOMAIN]` dictionaries | Strongly-typed **`entry.runtime_data`** + automatic persistence of `myhome.yaml` device settings (`travel_time`, `lock_features`) into config entry ([#742](https://github.com/OpenWebNet-HA/MyHOME/pull/742)) | Strongly-typed **`entry.runtime_data`** (`MyHOMERuntimeData`), UI Config/Options Flow with configurable `min_position_delta` ([#842](https://github.com/OpenWebNet-HA/MyHOME/pull/842)) & `ignored_addresses` | +| **Device Discovery** | Requires manual YAML (`myhome.yaml`) | **Zero-config Dynamic Bus Auto-Discovery** + phantom-entity suppression on blank start ([#686](https://github.com/OpenWebNet-HA/MyHOME/pull/686)) & ON-dimmer brightness probing ([#742](https://github.com/OpenWebNet-HA/MyHOME/pull/742)) | **Zero-config Dynamic Bus Auto-Discovery** with startup-sweep deduplication and subentry entity persistence | +| **Expose HA to SCS Bus** | ❌ Not supported | **✅ Declarative `expose` engine ([#750](https://github.com/OpenWebNet-HA/MyHOME/pull/750))**: virtual `WHO 1/2` actuators (with wall LED feedback), `WHO 4` temperature probes, `WHO 18` energy meters, and `WHO 13` bus clock | **✅ Declarative `expose` engine**: virtual `WHO 1/2` actuators (with physical wall LED feedback), `WHO 4` temperature probes, `WHO 18` energy meters, and `WHO 13` bus clock sync | +| **Gateway Profiles** | Fixed, hardcoded socket pacing | **12 Declarative Profiles** verified against empirical **Firmware Oracle** ([#745](https://github.com/OpenWebNet-HA/MyHOME/pull/745)), plus `H4684`/`LGRH4684` & `MH201` auto-ID ([#652](https://github.com/OpenWebNet-HA/MyHOME/pull/652), [#722](https://github.com/OpenWebNet-HA/MyHOME/pull/722)) | **13 Declarative Profiles & Aliases** with **Legrand 067292 alias ([#832](https://github.com/OpenWebNet-HA/MyHOME/pull/832))**, F454, F455, F461, MH202, MH201, MHS1, MH200N, MH200, H4890, HL4684, F452/F453AV, 3578 | +| **Supported Transports** | TCP Network Gateways only | **TCP IP + USB/Serial (Legrand 3578 / OpenZigBee)** + shared HA websession discovery ([#757](https://github.com/OpenWebNet-HA/MyHOME/pull/757)) | **TCP IP + USB/Serial (Legrand 3578 / OpenZigBee)** | +| **Multi-Gateway Plants** | ❌ Single gateway only (cross-talk on multi-GW) | **Namespaced routing, plant isolation & warm-standby failover** | **Namespaced routing, plant isolation & warm-standby failover ([#453](https://github.com/OpenWebNet-HA/MyHOME/issues/453))** | +| **Command Scheduling** | FIFO queue (user commands blocked behind sweeps) | **Unified `FrameScheduler` ([#738](https://github.com/OpenWebNet-HA/MyHOME/pull/738))** with per-target (`WHO`, `WHERE`) serialization, cover `STOP` overtaking queued frames ([#694](https://github.com/OpenWebNet-HA/MyHOME/pull/694)), and low-priority fade steps ([#739](https://github.com/OpenWebNet-HA/MyHOME/pull/739)) | **Unified `FrameScheduler`** with per-target queue serialization, priority user frames over background polls, and immediate cover stop-overtake | +| **Lighting (`WHO=1`)** | Basic On/Off relays & stepped dimming | Hardware staircase bus timers, smooth software fades, **DALI DT8 Tunable White (2000K–6535K)**, DALI feature locks, 2-digit Area 0 point addresses (`01`–`09`, [#713](https://github.com/OpenWebNet-HA/MyHOME/pull/713)) | Adds **coarse preset brightness curve correction ([#828](https://github.com/OpenWebNet-HA/MyHOME/pull/828))**, startup-sweep poll deduplication, and strict echo counting for group/area re-syncs | +| **Covers (`WHO=2` & `WHO=1`)** | Basic Open / Close / Stop | State tracking, position-reporting actuators, Venetian blind slat tilt ([#508](https://github.com/OpenWebNet-HA/MyHOME/pull/508)), impulse gate/garage covers on `WHO=1` ([#667](https://github.com/OpenWebNet-HA/MyHOME/pull/667)), `min_motor_pulse` floor & endpoint full runs ([#702](https://github.com/OpenWebNet-HA/MyHOME/pull/702), [#708](https://github.com/OpenWebNet-HA/MyHOME/pull/708)) | Adds **cover end-stop settle recomputation & 0.5 s limit-stop cutoff from known positions ([#834](https://github.com/OpenWebNet-HA/MyHOME/pull/834), [#847](https://github.com/OpenWebNet-HA/MyHOME/pull/847))**, **configurable `min_position_delta` ([#842](https://github.com/OpenWebNet-HA/MyHOME/pull/842))**, and cover calibration configurator cutoffs ([#837](https://github.com/OpenWebNet-HA/MyHOME/pull/837)) | +| **Locks & Door Entry (`WHO=6` / `WHO=8`)** | ❌ Not supported | Native `lock` platform for `WHO=6` door-entry strikes with constant-time PIN verification, auto-relock, and `WHO=8` intercom call events ([#667](https://github.com/OpenWebNet-HA/MyHOME/pull/667)) | Native `lock` platform with **WHO 6 gateway boundary containment ([#840](https://github.com/OpenWebNet-HA/MyHOME/pull/840))** preventing cross-gateway broadcast leaks | +| **Climate (`WHO=4`)** | Basic zone thermostats | Central Unit 3550 (`#0`) & 4695 (`#0#1`) master coordination, season frames, holiday/vacation programs, zone humidity sensors ([#712](https://github.com/OpenWebNet-HA/MyHOME/pull/712)), F461 zone polling | Adds **BTicino 3550 Central Unit startup hydration, mode translation & diagnostics ([#819](https://github.com/OpenWebNet-HA/MyHOME/pull/819))**, **thermo actuator switch & ghost pump suppression ([#785](https://github.com/OpenWebNet-HA/MyHOME/pull/785))**, and snapshot temperature unit robustness ([#803](https://github.com/OpenWebNet-HA/MyHOME/pull/803)) | +| **Sound System (`WHO=16` / `WHO=22`)** | ❌ Not supported | Full audio matrix (F441/F441M), Dynamic Streaming Proxy, `WHO=22` FM tuner frequency/preset/RDS decoding | Adds **native FM tuner controls (`media_player.myhome_tuner_*`) with frequency stepping, preset selection, band switching, and store station range validation ([#839](https://github.com/OpenWebNet-HA/MyHOME/pull/839), [#844](https://github.com/OpenWebNet-HA/MyHOME/pull/844))** | +| **Burglar Alarm (`WHO=5`)** | ❌ Not supported | Dedicated `alarm_control_panel` (3485/3486), partition states, AUX arm/disarm workflows | Dedicated `alarm_control_panel` + **HomeKit-compatible arm-away read-only auxiliary panel mode ([#830](https://github.com/OpenWebNet-HA/MyHOME/pull/830))** | +| **CEN / CEN+ & Scenarios (`WHO=15/17/25`)** | Raw event listeners; required external blueprints | 8 native UI device triggers with 4-digit string-preserved addressing (`"0001"`), `WHO=25` Scenario Plus, `WHO=17` scene events | 8 native UI device triggers, `WHO=25` Scenario Plus, and **deterministic event sequence ordering ([#843](https://github.com/OpenWebNet-HA/MyHOME/pull/843))** | +| **Diagnostics & Health** | Raw logs only | Self-clearing HA Repair issues (`actuator_fault`), `ignored_addresses`, gateway kernel distribution sweep telemetry | Self-clearing HA Repair issues, configurable `ignored_addresses`, and **3550 Central Unit diagnostic hydration state tracking ([#819](https://github.com/OpenWebNet-HA/MyHOME/pull/819))** | +| **Lovelace Frontend** | ❌ None | Built-in `` card with stricter WebSocket input bounds ([#747](https://github.com/OpenWebNet-HA/MyHOME/pull/747)) and 1-click sanitized diagnostic report export | Built-in `` card with live streaming feed, offline replay tab, syntax-validated frame injector, and sanitized diagnostics | +| **License** | **AGPL-3.0** (per `master` repository [`LICENSE`](LICENSE)) | **Apache-2.0** (per published `2.0.0b16` release / [`LICENSE`](https://github.com/OpenWebNet-HA/MyHOME/blob/v2-phase1-architecture/LICENSE), aligning with Home Assistant Core) | **Apache-2.0** (per published `2.0.0b17` release / [`LICENSE`](https://github.com/OpenWebNet-HA/MyHOME/blob/v2-phase1-architecture/LICENSE), aligning with Home Assistant Core) | > 🔗 **Release Changelogs & GitHub Compares**: +> - [`v2.0.0b17` Release Notes & Assets](https://github.com/OpenWebNet-HA/MyHOME/releases/tag/2.0.0b17) • [`Compare 2.0.0b16...2.0.0b17` (23 PRs)](https://github.com/OpenWebNet-HA/MyHOME/compare/2.0.0b16...2.0.0b17) > - [`v2.0.0b16` Release Notes & Assets](https://github.com/OpenWebNet-HA/MyHOME/releases/tag/2.0.0b16) • [`Compare 2.0.0b15...2.0.0b16` (83 PRs)](https://github.com/OpenWebNet-HA/MyHOME/compare/2.0.0b15...2.0.0b16) > - [`v2.0.0b15` Release Notes & Assets](https://github.com/OpenWebNet-HA/MyHOME/releases/tag/2.0.0b15) • [`Compare 2.0.0b14...2.0.0b15` (41 PRs)](https://github.com/OpenWebNet-HA/MyHOME/compare/2.0.0b14...2.0.0b15) -> - [Full Cross-Beta Capability Matrix (`v2.0.0b1` → `v2.0.0b16`)](https://openwebnet-ha.github.io/MyHOME/beta/roadmap/beta-differences/) +> - [Full Cross-Beta Capability Matrix (`v2.0.0b1` → `v2.0.0b17`)](https://openwebnet-ha.github.io/MyHOME/latest/roadmap/beta-differences/) --- @@ -71,17 +72,17 @@ Understanding the technical differences between **Legacy Stable (`v0.9.4`)**, ** The modernization from legacy to V2 established an extensive automated testing and verification foundation (real-world validation across diverse physical gateways remains an ongoing community effort): -| Testing Dimension | Legacy Stable (`v0.9.4` on `master`) | Beta `v2.0.0b15` *(7 Oct 2026)* | Latest Beta `v2.0.0b16` *(21 Oct 2026)* | +| Testing Dimension | Legacy Stable (`v0.9.4` on `master`) | Beta `v2.0.0b16` *(21 Oct 2026)* | Latest Beta `v2.0.0b17` *(4 Nov 2026)* | | :--- | :--- | :--- | :--- | -| **Automated Tests** | **0 tests** (no pytest suite or test files in repository) | **3,464 automated tests** passing | **4,393 automated tests** passing (+929 new regression & conformance tests) | -| **Statement Coverage** | **0%** tracked | **Strict 100.0% statement coverage** across all 42 modules | **Strict 100.0% statement coverage** across all **73 modules** | +| **Automated Tests** | **0 tests** (no pytest suite or test files in repository) | **4,393 automated tests** passing | **5,324 automated tests** passing (+931 new regression & conformance tests) | +| **Statement Coverage** | **0%** tracked | **Strict 100.0% statement coverage** across all 73 modules | **Strict 100.0% statement coverage** across all **73 modules** | | **Branch Coverage** | Untracked | Enforced via automated zero-tolerance coverage gates in CI | Enforced via automated zero-tolerance coverage gates in CI | -| **Trace Replay Engine** | ❌ None (testing required live physical hardware) | **Automated CI replay of authentic on-wire traces** from real European installations (F454, F455, F461, MH200, MH200N, MH201, MH202, MyHomeServer1, H4890, Living Now controls) | Expanded with **live F461 + F411/4 `WHO=14` lock traces, F453AV, H4684, `WHO=22` RDS tuner, Venetian tilt, and multi-gateway captures** | -| **Firmware Oracle Conformance** | ❌ None | ❌ Manual profile tuning | **Automated Firmware Oracle Verification (`test_firmware_oracle_conformance.py`, [#745](https://github.com/OpenWebNet-HA/MyHOME/pull/745))** cross-checking frames and gateway profiles against hash-pinned emulated firmware verdicts | -| **Golden Frame Corpus** | ❌ None | **OpenWebNet Golden Corpus** with hundreds of multi-authority calibrated frame test fixtures across 11 subsystems | **Expanded OpenWebNet Golden Corpus** (`WHO 0–25, 1001–1022`) + zero-deprecation enforcement ([#728](https://github.com/OpenWebNet-HA/MyHOME/pull/728), [#729](https://github.com/OpenWebNet-HA/MyHOME/pull/729)) | -| **Snapshot Testing** | ❌ None | **5 Syrupy snapshot suites** verifying diagnostics exports, entity registry schemas, and state trees | **Syrupy snapshot suites** verifying diagnostics exports, entity registry schemas, and state trees | -| **CI Automation** | 2 workflows (`hassfest`, basic `validate`) | **10 comprehensive CI workflows** (unit tests, coverage, type checking, Ruff linting, PyPI packaging, HA standards validator, anti-drift sentinel) | **10 comprehensive CI workflows** + containerized HA smoke (`stable`/`beta`/`dev`) & `OWNd` lockstep smoke gates | -| **Anti-Drift Sentinels** | ❌ None | **Automated sentinel (`scripts/sync_documentation.py`)** continuously validating documentation, tables, and code alignment | **Automated sentinel (`scripts/sync_documentation.py`)** + gateway profile oracle verification | +| **Trace Replay Engine** | ❌ None (testing required live physical hardware) | Automated CI replay of authentic on-wire traces from real European installations (F454, F455, F461, MH200, MH200N, MH201, MH202, MyHomeServer1, H4890, HL4684, Living Now controls) | Expanded with **live BTicino 3550 Central Unit captures, HL4684 touchscreen sweeps, Legrand 067292 traces, F454 burglar alarm (3486), and F461 physical plant fixtures** | +| **Firmware Oracle Conformance** | ❌ None | Automated Firmware Oracle Verification (`test_firmware_oracle_conformance.py`, [#745](https://github.com/OpenWebNet-HA/MyHOME/pull/745)) | Automated Firmware Oracle Verification cross-checking frames and gateway profiles against hash-pinned emulated firmware verdicts | +| **Golden Frame Corpus** | ❌ None | Expanded OpenWebNet Golden Corpus (`WHO 0–25, 1001–1022`) + zero-deprecation enforcement | **OpenWebNet Golden Corpus** with multi-authority calibrated frame fixtures across 11 subsystems (`WHO 0–25, 1001–1022`) | +| **Snapshot Testing** | ❌ None | Syrupy snapshot suites verifying diagnostics exports, entity registry schemas, and state trees | **Syrupy snapshot suites** verifying diagnostics exports, entity registry schemas, and state trees | +| **CI Automation** | 2 workflows (`hassfest`, basic `validate`) | 10 comprehensive CI workflows + containerized HA smoke (`stable`/`beta`/`dev`) & `OWNd` lockstep smoke gates | **10 comprehensive CI workflows** + containerized HA smoke (`stable`/`beta`/`dev`) & `OWNd` lockstep smoke gates | +| **Anti-Drift Sentinels** | ❌ None | Automated sentinel (`scripts/sync_documentation.py`) + gateway profile oracle verification | **Automated sentinel (`scripts/sync_documentation.py`)** continuously validating documentation, tables, and code alignment | --- @@ -91,10 +92,10 @@ The modernization from legacy to V2 established an extensive automated testing a > **⚠️ Never store backup copies inside `/config/custom_components/` (e.g. `myhome.backup`)!** > Home Assistant automatically discovers **all** subdirectories containing `manifest.json` under `custom_components`. Backups inside this folder cause startup crashes (`Unable to import component: No module named 'custom_components.myhome.backup'`). Always keep backups **outside** in `/config/myhome_backup/`. -### 🚀 Installing the Active Beta (v2.0.0b16 — Recommended for HA ≥ 2026.3) +### 🚀 Installing the Active Beta (v2.0.0b17 — Recommended for HA ≥ 2026.3) > [!TIP] -> **Recommended Beta Install Method**: In **HACS 2.0+**, pre-release toggle switches can get stuck in an *"unavailable"* loop due to upstream registry caching, or show validation warnings before PR #232 merges. Using **Method 1 (Terminal & SSH)** below provides a direct, verified installation that safely preserves your configuration and entity IDs. *(To install the previous `2.0.0b15` milestone instead, replace `2.0.0b16` with `2.0.0b15` in the download URL.)* +> **Recommended Beta Install Method**: In **HACS 2.0+**, pre-release toggle switches can get stuck in an *"unavailable"* loop due to upstream registry caching, or show validation warnings before PR #232 merges. Using **Method 1 (Terminal & SSH)** below provides a direct, verified installation that safely preserves your configuration and entity IDs. *(To install the previous `2.0.0b16` milestone instead, replace `2.0.0b17` with `2.0.0b16` in the download URL.)* #### Method 1: Verified Script via Terminal & SSH Add-on (⭐ Recommended) @@ -107,7 +108,7 @@ if cd /config/custom_components; then # Download and extract into a temporary directory first to verify archive integrity: TMP_DIR=$(mktemp -d) - if wget -O "$TMP_DIR/myhome.zip" https://github.com/OpenWebNet-HA/MyHOME/releases/download/2.0.0b16/myhome.zip && \ + if wget -O "$TMP_DIR/myhome.zip" https://github.com/OpenWebNet-HA/MyHOME/releases/download/2.0.0b17/myhome.zip && \ unzip -q "$TMP_DIR/myhome.zip" -d "$TMP_DIR/myhome" && \ [ -f "$TMP_DIR/myhome/manifest.json" ]; then BACKUP_OK=1 @@ -137,13 +138,13 @@ fi *(For **Home Assistant Container / Docker**, run on your Docker host:)* ```bash -docker exec -it homeassistant bash -c 'cd /config/custom_components || { echo "Error: /config/custom_components not found."; exit 1; }; [ -d myhome.backup ] && mv myhome.backup /config/myhome_backup_old; TMP_DIR=$(mktemp -d); if ! wget -O "$TMP_DIR/myhome.zip" https://github.com/OpenWebNet-HA/MyHOME/releases/download/2.0.0b16/myhome.zip || ! unzip -q "$TMP_DIR/myhome.zip" -d "$TMP_DIR/myhome" || [ ! -f "$TMP_DIR/myhome/manifest.json" ]; then echo "Error: Download or extraction verification failed. Existing installation left intact."; rm -rf "$TMP_DIR"; exit 1; fi; if [ -d myhome ]; then rm -rf /config/myhome_backup && cp -r myhome /config/myhome_backup || { echo "Error: Backup failed. Existing installation left intact. Recovery files preserved in $TMP_DIR."; exit 1; }; fi; if ! (rm -rf myhome && mv "$TMP_DIR/myhome" myhome); then echo "Error: Replacement failed. Recovery files preserved in $TMP_DIR and /config/myhome_backup."; exit 1; fi; rm -rf "$TMP_DIR" && echo "Installation verified. Restarting container..."' && docker restart homeassistant +docker exec -it homeassistant bash -c 'cd /config/custom_components || { echo "Error: /config/custom_components not found."; exit 1; }; [ -d myhome.backup ] && mv myhome.backup /config/myhome_backup_old; TMP_DIR=$(mktemp -d); if ! wget -O "$TMP_DIR/myhome.zip" https://github.com/OpenWebNet-HA/MyHOME/releases/download/2.0.0b17/myhome.zip || ! unzip -q "$TMP_DIR/myhome.zip" -d "$TMP_DIR/myhome" || [ ! -f "$TMP_DIR/myhome/manifest.json" ]; then echo "Error: Download or extraction verification failed. Existing installation left intact."; rm -rf "$TMP_DIR"; exit 1; fi; if [ -d myhome ]; then rm -rf /config/myhome_backup && cp -r myhome /config/myhome_backup || { echo "Error: Backup failed. Existing installation left intact. Recovery files preserved in $TMP_DIR."; exit 1; }; fi; if ! (rm -rf myhome && mv "$TMP_DIR/myhome" myhome); then echo "Error: Replacement failed. Recovery files preserved in $TMP_DIR and /config/myhome_backup."; exit 1; fi; rm -rf "$TMP_DIR" && echo "Installation verified. Restarting container..."' && docker restart homeassistant ``` #### Method 2: Manual Installation (Archive / Samba) 1. Download the release package: - 👉 **[Download myhome.zip (v2.0.0b16 — Latest Beta)](https://github.com/OpenWebNet-HA/MyHOME/releases/download/2.0.0b16/myhome.zip)** • **[Download myhome.zip (v2.0.0b15)](https://github.com/OpenWebNet-HA/MyHOME/releases/download/2.0.0b15/myhome.zip)** (or browse all [GitHub Releases](https://github.com/OpenWebNet-HA/MyHOME/releases)) + 👉 **[Download myhome.zip (v2.0.0b17 — Latest Beta)](https://github.com/OpenWebNet-HA/MyHOME/releases/download/2.0.0b17/myhome.zip)** • **[Download myhome.zip (v2.0.0b16)](https://github.com/OpenWebNet-HA/MyHOME/releases/download/2.0.0b16/myhome.zip)** (or browse all [GitHub Releases](https://github.com/OpenWebNet-HA/MyHOME/releases)) 2. Open your configuration directory via Samba Share, Studio Code Server, or File Editor. 3. Extract `myhome.zip` directly into `/config/custom_components/myhome/` (overwriting existing files). 4. Restart Home Assistant (**Settings → System → Restart**). @@ -153,7 +154,7 @@ docker exec -it homeassistant bash -c 'cd /config/custom_components || { echo "E 1. In Home Assistant, open **HACS → Integrations**. 2. Click the top-right menu (`⋮`) → **Custom repositories**. 3. Add repository URL: `https://github.com/OpenWebNet-HA/MyHOME` with type **Integration**. -4. Open the **MyHOME** card in HACS, click `⋮` → **Redownload**, ensure **Show beta versions** is toggled ON, select **`2.0.0b16`** (or **`2.0.0b15`**), and click **Download**. +4. Open the **MyHOME** card in HACS, click `⋮` → **Redownload**, ensure **Show beta versions** is toggled ON, select **`2.0.0b17`** (or **`2.0.0b16`**), and click **Download**. 5. Restart Home Assistant. --- @@ -219,9 +220,10 @@ The integration features declarative hardware profiles that automatically calibr | **H4890 / AM4890** | OpenWebNet | 1 worker | 50 ms | ✅ SSDP | 3.5" Touch screen display IP gateway | | **F452 / F453AV** | OpenWebNet | 1 worker | 150 ms | ✅ UPnP / Port 49153 | Audio/video & web server gateway | | **HL4684** | OpenWebNet | 1 worker | 50 ms | ✅ SSDP | 10" Touch screen display IP gateway | +| **Legrand 067292** | OpenWebNet / HMAC | 4 workers | 50 ms | ✅ UPnP / Port 49153 | Flush-mount IP gateway (profile alias) | | **Legrand 3578** | OpenWebNet (Serial) | 1 worker | 50 ms | ❌ Manual (Serial) | USB / Serial gateway & OpenZigBee interface | -📖 [Read the full Hardware Gateway Profiles Guide →](https://openwebnet-ha.github.io/MyHOME/beta/configuration/gateways/) +📖 [Read the full Hardware Gateway Profiles Guide →](https://openwebnet-ha.github.io/MyHOME/latest/configuration/gateways/) --- @@ -231,26 +233,26 @@ The integration features declarative hardware profiles that automatically calibr | Domain | WHO | Capabilities | |---|---|---| -| **`light`** | WHO=1 | On/Off, dimmers with smooth software-stepped curves, DALI DT8 Tunable White (2000K–6535K), HS/RGB colour, 2-digit Area 0 (`01`–`09`) addressing, and hardware-offloaded bus staircase timers (`myhome.turn_on_timed`). | +| **`light`** | WHO=1 | On/Off, dimmers with smooth software-stepped curves, coarse preset brightness curve correction, DALI DT8 Tunable White (2000K–6535K), HS/RGB colour, 2-digit Area 0 (`01`–`09`) addressing, and hardware-offloaded bus staircase timers (`myhome.turn_on_timed`). | | **`switch`** | WHO=1 | Relay actuators, auxiliary switches, socket actuators (switch/outlet device classes), and hardware-offloaded bus timers. | -| **`cover`** | WHO=1 / WHO=2 | Motorized shutters, Venetian blinds with slat tilt (`slat_tilt`, `slat_time`), position-reporting actuators, virtual travel-time positioning with `min_motor_pulse` start-up floors & endpoint full runs, impulse gates & garage doors (`WHO=1`) with optional multi-factor approval, and centralized shutter triggers. | -| **`lock`** | WHO=6 | Native video door-entry strikes (`WHO=6`, configured in `myhome.yaml`) with constant-time PIN authentication, auto-relock, and `WHO=8` intercom call events. | -| **`climate`** | WHO=4 | Heating, cooling, 4-pipe systems, thermostats, setpoints, fancoil 3-speed modes, offset tracking, season frames, holiday/vacation programs, zone humidity sensors, and Central Unit 3550 (`#0`) & 4695 (`#0#1`) master coordination. | -| **`alarm_control_panel`** | WHO=5 | Central units (3485/3486), partition states (disarmed / armed away / triggered), zone 0 broadcast sync, and AUX arm/disarm workflows. | +| **`cover`** | WHO=1 / WHO=2 | Motorized shutters, Venetian blinds with slat tilt (`slat_tilt`, `slat_time`), position-reporting actuators, virtual travel-time positioning with end-stop settle recomputation & 0.5 s limit-stop cutoff from known positions, configurable `min_position_delta` (1–5 %), `min_motor_pulse` start-up floors & endpoint full runs, impulse gates & garage doors (`WHO=1`) with optional multi-factor approval, and centralized shutter triggers. | +| **`lock`** | WHO=6 | Native video door-entry strikes (`WHO=6`, configured in `myhome.yaml`) with constant-time PIN authentication, auto-relock, `WHO=8` intercom call events, and gateway boundary containment. | +| **`climate`** | WHO=4 | Heating, cooling, 4-pipe systems, thermostats, setpoints, fancoil 3-speed modes, offset tracking, season frames, holiday/vacation programs, zone humidity sensors, thermo actuator switches & ghost pump suppression, and Central Unit 3550 (`#0`) & 4695 (`#0#1`) master coordination with startup hydration and diagnostics. | +| **`alarm_control_panel`** | WHO=5 | Central units (3485/3486), partition states (disarmed / armed away / triggered), zone 0 broadcast sync, AUX arm/disarm workflows, and HomeKit-compatible arm-away read-only auxiliary panel mode. | | **`binary_sensor`** | WHO=1 / 9 / 25 | Magnetic contacts, door/window sensors, PIR motion, AUX channels (1–9), and dry contact interfaces (F482/3477). | | **`sensor`** | WHO=1 / 4 / 18 | Power meters, energy counters (total/daily/monthly), temperature & humidity probes (3475), and illuminance / lux sensors. | | **`button`** | WHO=14 / 2 | Hardware actuator lock/unlock for maintenance (`WHO=14`), and cover travel-time calibration buttons (`WHO=2`). | -| **`media_player`** | WHO=16 / 22 | F441/F441M audio matrix zones, source routing, `WHO=22` FM tuner frequency/preset/RDS station decoding with optional station artwork, volume normalization, software mute, and Dynamic Streaming Proxy. | -| **`device_trigger`** | WHO=15 / 17 / 25 | Stateless CEN & CEN+ scenario pushbuttons with 4-digit string-preserved addressing (`"0001"`), MAC isolation, 8 native UI trigger types, `WHO=25` Scenario Plus, and `WHO=17` scene lifecycle events. | +| **`media_player`** | WHO=16 / 22 | F441/F441M audio matrix zones, source routing, native `WHO=22` FM tuner controls (`media_player.myhome_tuner_*`) with frequency stepping, preset selection, band switching, live RDS station decoding with optional station artwork, volume normalization, software mute, and Dynamic Streaming Proxy. | +| **`device_trigger`** | WHO=15 / 17 / 25 | Stateless CEN & CEN+ scenario pushbuttons with 4-digit string-preserved addressing (`"0001"`), MAC isolation, 8 native UI trigger types, deterministic event sequence ordering, `WHO=25` Scenario Plus, and `WHO=17` scene lifecycle events. | | **`expose`** *(Bus Projection)* | WHO=1 / 2 / 4 / 13 / 18 | Declarative HA-to-SCS bus projection: virtual `WHO 1/2` actuators (driven by physical wall buttons with LED feedback), `WHO 4` virtual temperature probes, `WHO 18` virtual energy meters, and `WHO 13` bus clock sync. | ### Architectural Highlights * **Declarative HA-to-SCS Bus Expose Engine (`#750`)**: Project Home Assistant lights, switches, covers, temperature sensors, power meters, and the system clock onto unused OpenWebNet addresses (`WHO 1, 2, 4, 13, 18`). Physical wall controls can drive exposed virtual actuators with real-time LED state mirroring or execute Home Assistant scripts. -* **Venetian Blind Slat Tilt, Impulse Gates & Cover Kinematics (`#508`, `#667`, `#702`, `#707`, `#708`, `#739`)**: Timed slat tilt pulses (`slat_tilt`, `slat_time`), impulse garage/gate covers on `WHO=1` relays with optional safety approval, native `WHO=6` door-entry locks, per-cover `min_motor_pulse` start-up floors, endpoint full runs (`0%` / `100%`), and stop-status position re-anchoring. +* **Cover Kinematics, End-Stop Settling & Min Delta (`#508`, `#667`, `#702`, `#707`, `#708`, `#739`, `#834`, `#837`, `#842`, `#847`)**: Configurable `min_position_delta` (1–5 %, default 2 %) for tall shutters and fine slat adjustments, automatic end-stop settle recomputation on `travel_time + 2 s` from known positions, 0.5 s early cutoff recognition preventing fractional frozen positions short of limit stops, timed slat tilt pulses (`slat_tilt`, `slat_time`), impulse garage/gate covers on `WHO=1` relays with optional safety approval, native `WHO=6` door-entry locks, per-cover `min_motor_pulse` start-up floors, endpoint full runs (`0%` / `100%`), and stop-status position re-anchoring. * **Native Hardware Bus Light & Switch Timers (`WHO=1`)**: Offload countdown timers directly onto physical Legrand DIN actuators via `myhome.turn_on_timed` or standard `timer` parameters. The lights turn off automatically even if Home Assistant restarts. -* **Sound System 2.0, `WHO=22` RDS Tuner & Dynamic Streaming Proxy (`#695`)**: Stream from **Music Assistant**, **Spotify Connect**, or any HA media player to wired BTicino audio zones using an intelligent `DecoderPool` with analog gain-staging and anti-hiss auto-off, plus full `WHO=22` FM tuner RDS metadata. -* **Thermoregulation Central Unit Coordination, Seasons & Humidity (`3550` / `4695`, `#657`, `#689`, `#712`)**: Master climate coordination for 99-zone (`#0`) and 4-zone (`#0#1`) central units automatically propagates whole-home heating/cooling modes, seasons, and holiday programs across subordinate zones. +* **Sound System 2.0, Native Tuner Platform & Streaming Proxy (`#695`, `#839`, `#844`)**: Stream from **Music Assistant**, **Spotify Connect**, or any HA media player to wired BTicino audio zones using an intelligent `DecoderPool` with analog gain-staging and anti-hiss auto-off, plus full native `media_player` tuner platform controls (`WHO=22` / `WHO=16`) for frequency, band, preset selection, and live RDS metadata. +* **Thermoregulation Central Unit Coordination, Seasons & Hydration (`3550` / `4695`, `#657`, `#689`, `#712`, `#785`, `#819`)**: Master climate coordination for 99-zone (`#0`) and 4-zone (`#0#1`) central units automatically propagates whole-home heating/cooling modes, seasons, and holiday programs across subordinate zones, with active 3550 Central Unit hydration, diagnostic state tracking, thermo actuator switches, and ghost pump suppression. * **Multi-Gateway Routing & Plant Isolation (`#453`)**: Namespaced dispatchers eliminate cross-talk across plants combining multiple gateways (e.g. F454 + MH200N). * **Unified Per-Target FrameScheduler (`#738`)**: Serializes commands per target (`WHO`, `WHERE`) while allowing cover `STOP` commands to overtake queued frames (`#694`) and user actions to execute ahead of background status polls (`#685`). * **Self-Healing Diagnostics, Fault Repairs & Ignored Addresses (`#593`, `#621`, `#666`)**: Hardware anomalies surface as self-clearing Home Assistant repair issues (`actuator_fault`), with configurable `ignored_addresses` in Options Flow. @@ -268,7 +270,7 @@ The integration includes an in-band real-time bus monitor operating over the exi * **Visual Card Picker**: Add directly from Home Assistant's dashboard editor by searching for **"MyHOME OpenWebNet Bus Monitor"** (`custom:myhome-openwebnet-bus-monitor`). * **Live Feed & Frame Injector**: Color-coded badges for subsystems, ACK/NACK highlighting, pause/resume, buffer filtering, and manual frame injection with syntax validation. -📖 [Read the Bus Monitor Card Guide →](https://openwebnet-ha.github.io/MyHOME/beta/configuration/bus_monitor/) +📖 [Read the Bus Monitor Card Guide →](https://openwebnet-ha.github.io/MyHOME/latest/configuration/bus_monitor/) --- @@ -276,17 +278,17 @@ The integration includes an in-band real-time bus monitor operating over the exi Comprehensive guides, specifications, and tutorials are available on our documentation site and wiki: -* 📖 **[Official Documentation Site](https://openwebnet-ha.github.io/MyHOME/beta/)** - * [Getting Started & Installation](https://openwebnet-ha.github.io/MyHOME/beta/getting-started/installation/) - * [Upgrade from v0.9.4 to v2.0](https://openwebnet-ha.github.io/MyHOME/beta/migration/upgrade-from-094/) - * [Beta Releases & Delta Explorer (`b1` → `b16`)](https://openwebnet-ha.github.io/MyHOME/beta/roadmap/beta-differences/) - * [Hardware Gateway Profiles](https://openwebnet-ha.github.io/MyHOME/beta/configuration/gateways/) - * [Supported Functions & Subsystems](https://openwebnet-ha.github.io/MyHOME/beta/configuration/supported_functions/) - * [Sound System & Dynamic Proxy](https://openwebnet-ha.github.io/MyHOME/beta/configuration/media_player/) - * [CEN & CEN+ Scenario Automations](https://openwebnet-ha.github.io/MyHOME/beta/configuration/cen_cenplus/) - * [Troubleshooting & Diagnostics](https://openwebnet-ha.github.io/MyHOME/beta/configuration/troubleshooting/) +* 📖 **[Official Documentation Site](https://openwebnet-ha.github.io/MyHOME/latest/)** + * [Getting Started & Installation](https://openwebnet-ha.github.io/MyHOME/latest/getting-started/installation/) + * [Upgrade from v0.9.4 to v2.0](https://openwebnet-ha.github.io/MyHOME/latest/migration/upgrade-from-094/) + * [Beta Releases & Delta Explorer (`b1` → `b17`)](https://openwebnet-ha.github.io/MyHOME/latest/roadmap/beta-differences/) + * [Hardware Gateway Profiles](https://openwebnet-ha.github.io/MyHOME/latest/configuration/gateways/) + * [Supported Functions & Subsystems](https://openwebnet-ha.github.io/MyHOME/latest/configuration/supported_functions/) + * [Sound System & Dynamic Proxy](https://openwebnet-ha.github.io/MyHOME/latest/configuration/media_player/) + * [CEN & CEN+ Scenario Automations](https://openwebnet-ha.github.io/MyHOME/latest/configuration/cen_cenplus/) + * [Troubleshooting & Diagnostics](https://openwebnet-ha.github.io/MyHOME/latest/configuration/troubleshooting/) * 🏛️ **[OpenWebNet Protocol & WHO Specifications Wiki](https://github.com/OpenWebNet-HA/MyHOME/wiki/OpenWebNet-Protocol-&-WHO-Specifications)** -* 🗺️ **[Development Roadmap](https://openwebnet-ha.github.io/MyHOME/beta/roadmap/)** and **[Stable v2.0.0 Pull Request #232](https://github.com/OpenWebNet-HA/MyHOME/pull/232)** +* 🗺️ **[Development Roadmap](https://openwebnet-ha.github.io/MyHOME/latest/roadmap/)** and **[Stable v2.0.0 Pull Request #232](https://github.com/OpenWebNet-HA/MyHOME/pull/232)** --- @@ -301,29 +303,36 @@ This integration is developed and maintained by the **[OpenWebNet-HA](https://gi ### Core Integration & Architecture * **[@anotherjulien](https://github.com/anotherjulien)** for creating the original MyHOME integration and laying the protocol foundations. * **[@GreenGrassBlueOcean](https://github.com/GreenGrassBlueOcean)** for the modernized v2 architecture, declarative gateway profiles, streaming proxy, and automated test suite. -* **[@GianlucaCh](https://github.com/GianlucaCh)** for preserving and contributing the comprehensive 15-manual BTicino/Legrand specification archive (`OWN DOC.zip`) and WHO 24 specs. -* **[@xtimmy86x](https://github.com/xtimmy86x)** for the frontend administration panel, hardware diagnostics, and passive heating schedule traces. -* **[@Interstellar0verdrive](https://github.com/Interstellar0verdrive)** for frontend panel enhancements, cover calibration UI, badges, and visual polish. -* **[@fedem95](https://github.com/fedem95)** for MH201 reliability, idle session reconnects, CEN+ hold logic, Italian translations, and physical plant fixtures. -* **[@mantovanellimatteo](https://github.com/mantovanellimatteo)**, **[@lyubomirtraykov](https://github.com/lyubomirtraykov)**, and **Cedric Rohou** for key bugfixes, DALI DT8 ballasts, and platform extensions. +* **[@xtimmy86x](https://github.com/xtimmy86x)** for crafting the frontend user experience, administration panel, cover calibration interfaces, and hardware diagnostics. +* **[@gdluck](https://github.com/gdluck)** for outstanding engineering, invaluable ideas, and rigorous physical F461 plant measurements. +* **[@TheDarkWizard](https://github.com/TheDarkWizard)** for crucial CEN+ wire address captures (KW8011), WHO 1001 diagnostics, and tireless real-world hardware testing across Living Now controls and MyHomeServer1 setups. +* **[@wave68runner](https://github.com/wave68runner)** for the authentic HL4684 touchscreen captures, BTicino 3550 thermoregulation sweeps, and tuner diagnostics. +* **[@Interstellar0verdrive](https://github.com/Interstellar0verdrive)** for deep hardware actuator analysis, cover timing/concurrency mechanics, and platform extensions. +* **[@fedem95](https://github.com/fedem95)**, **[@mantovanellimatteo](https://github.com/mantovanellimatteo)**, **[@lyubomirtraykov](https://github.com/lyubomirtraykov)**, and **Cedric Rohou** for key bugfixes, platform extensions, and community testing. +* **[@GianlucaCh](https://github.com/GianlucaCh)** for preserving and contributing the comprehensive 15-manual BTicino/Legrand specification archive (`OWN DOC.zip`), the official `WHO_24.pdf` Lighting Management specification, and CEN+ community automation references. +* **[@nicolacavallo84](https://github.com/nicolacavallo84)** for the iconic 70+ device plant captures and H4890 touchscreen multi-gateway traces that form our foundational CI replay fixtures. ### Hardware Traces & Real-World Validation -Special gratitude to the community members whose authentic on-wire bus captures ground our 4,393+ CI tests in real hardware: +Special gratitude to all community testers and trace providers whose real-world bus captures keep our 5,324+ CI tests grounded in real hardware: *"In traces we find the truth"* — their traces prove again and again that we can only build reliable stuff when we get authentic user traces: * **[@TheDarkWizard](https://github.com/TheDarkWizard)** for MyHomeServer1 automation command-translation echoes and WHO 4 heating/cooling Home+Control traces ([#378](https://github.com/OpenWebNet-HA/MyHOME/issues/378), [#429](https://github.com/OpenWebNet-HA/MyHOME/issues/429)). -* **[@f18m](https://github.com/f18m)** (Francesco Montorsi) for MyHomeServer1 & LN-4660M2 centralized shutter and advanced automation traces ([#445](https://github.com/OpenWebNet-HA/MyHOME/issues/445)). +* **[@wave68runner](https://github.com/wave68runner)** for MH200N + MyHomeServer1 dual-gateway 4-digit CEN scenario traces ([#624](https://github.com/OpenWebNet-HA/MyHOME/issues/624)), HL4684 touchscreen sweeps, and tuner diagnostics. +* **[@gdluck](https://github.com/gdluck)** for MyHomeServer1 live climate heating/cooling season switching, timed relays, and F461 plant traces ([#649](https://github.com/OpenWebNet-HA/MyHOME/pull/649)). +* **[@nicolacavallo84](https://github.com/nicolacavallo84)** for shared-bus dual gateway captures (MHS1 + H4890) and H4890 WHO 25 dry contacts ([#453](https://github.com/OpenWebNet-HA/MyHOME/issues/453), [#466](https://github.com/OpenWebNet-HA/MyHOME/issues/466)). * **[@lionelser](https://github.com/lionelser)** for Legrand F455 Basic Gateway full bus sweep, modular dimmers, and pushbutton captures ([#466](https://github.com/OpenWebNet-HA/MyHOME/issues/466)). -* **[@gdluck](https://github.com/gdluck)** for MyHomeServer1 live climate heating/cooling season switching, timed relays, and probe traces ([#649](https://github.com/OpenWebNet-HA/MyHOME/pull/649)). -* **[@ricdijk](https://github.com/ricdijk)** for BTicino F454 WHO 4 99-zone central unit (`#0`) status captures ([#629](https://github.com/OpenWebNet-HA/MyHOME/issues/629)). -* **[@wave68runner](https://github.com/wave68runner)** for MH200N + MyHomeServer1 dual-gateway 4-digit CEN scenario traces ([#624](https://github.com/OpenWebNet-HA/MyHOME/issues/624)). +* **[@f18m](https://github.com/f18m)** (Francesco Montorsi) for MyHomeServer1 & LN-4660M2 centralized shutter and advanced automation traces ([#445](https://github.com/OpenWebNet-HA/MyHOME/issues/445)). * **[@caiosweet](https://github.com/caiosweet)** for BTicino MH200N full bus sweep and climate probe knob offset cycle captures ([#466](https://github.com/OpenWebNet-HA/MyHOME/issues/466)). -* **[@nicolacavallo84](https://github.com/nicolacavallo84)** for shared-bus dual gateway captures (MHS1 + H4890) and H4890 WHO 25 dry contacts ([#453](https://github.com/OpenWebNet-HA/MyHOME/issues/453), [#466](https://github.com/OpenWebNet-HA/MyHOME/issues/466)). * **[@gimprota76](https://github.com/gimprota76)** (Giovanni) for BTicino F454 burglar alarm (WHO 5) and auxiliary channel (WHO 9) traces ([#311](https://github.com/OpenWebNet-HA/MyHOME/issues/311)). * **[@paoloboatto](https://github.com/paoloboatto)** for MyHomeServer1 + F500 + H4562 `WHO=22` FM tuner RDS and preset traces ([#695](https://github.com/OpenWebNet-HA/MyHOME/pull/695)). * **[@cricri72](https://github.com/cricri72)** for BTicino F454 + F411U2 cover calibration and diagnostic captures ([#730](https://github.com/OpenWebNet-HA/MyHOME/issues/730)). +* **[@ricdijk](https://github.com/ricdijk)** for BTicino F454 WHO 4 99-zone central unit (`#0`) status captures ([#629](https://github.com/OpenWebNet-HA/MyHOME/issues/629)). +* **[@manfredgittmaier-afk](https://github.com/manfredgittmaier-afk)** for live shutter end-stop settle travel timer and limit stop captures ([#834](https://github.com/OpenWebNet-HA/MyHOME/issues/834)). +* **[@eC0y0te](https://github.com/eC0y0te)** for BTicino 3550 central thermoregulation mode change & probe hydration traces ([#819](https://github.com/OpenWebNet-HA/MyHOME/discussions/819)). +* **[@simo72mast-lab](https://github.com/simo72mast-lab)** for Legrand 067292 flush-mount IP gateway identification & diagnostics captures ([#832](https://github.com/OpenWebNet-HA/MyHOME/issues/832)). +* **[@marcob79](https://github.com/marcob79)**, **[@xduss](https://github.com/xduss)**, **[@pakob81](https://github.com/pakob81)**, **[@Depechie](https://github.com/Depechie)**, **[@nce2704](https://github.com/nce2704)**, **[@imfreddie](https://github.com/imfreddie)**, **[@theveninjeremy](https://github.com/theveninjeremy)**, and **[@Yvan13120](https://github.com/Yvan13120)** for essential real-world verification traces across diverse European SCS plants. --- ## 📄 License * **Current `master` & Stable Releases (v0.9.4)**: Licensed under the [GNU Affero General Public License v3.0 (AGPL-3.0)](LICENSE). -* **Modern Beta Releases (v2.0.0b15 / v2.0.0b16) & V2 Architecture**: Licensed under the [Apache License 2.0](https://github.com/OpenWebNet-HA/MyHOME/blob/v2-phase1-architecture/LICENSE) (aligning with Home Assistant Core). +* **Modern Beta Releases (v2.0.0b15 / v2.0.0b16 / v2.0.0b17) & V2 Architecture**: Licensed under the [Apache License 2.0](https://github.com/OpenWebNet-HA/MyHOME/blob/v2-phase1-architecture/LICENSE) (aligning with Home Assistant Core). From d914c48d27baf3897456eac1d7a44a87cb54bd17 Mon Sep 17 00:00:00 2001 From: Laurens <43173895+GreenGrassBlueOcean@users.noreply.github.com> Date: Sun, 8 Nov 2026 00:19:35 +0100 Subject: [PATCH 8/9] docs: fix cover calibration #843 and CEN event sequence #784 references --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 60ea25066..b104cbf54 100644 --- a/README.md +++ b/README.md @@ -50,12 +50,12 @@ Understanding the technical differences between **Legacy Stable (`v0.9.4`)**, ** | **Multi-Gateway Plants** | ❌ Single gateway only (cross-talk on multi-GW) | **Namespaced routing, plant isolation & warm-standby failover** | **Namespaced routing, plant isolation & warm-standby failover ([#453](https://github.com/OpenWebNet-HA/MyHOME/issues/453))** | | **Command Scheduling** | FIFO queue (user commands blocked behind sweeps) | **Unified `FrameScheduler` ([#738](https://github.com/OpenWebNet-HA/MyHOME/pull/738))** with per-target (`WHO`, `WHERE`) serialization, cover `STOP` overtaking queued frames ([#694](https://github.com/OpenWebNet-HA/MyHOME/pull/694)), and low-priority fade steps ([#739](https://github.com/OpenWebNet-HA/MyHOME/pull/739)) | **Unified `FrameScheduler`** with per-target queue serialization, priority user frames over background polls, and immediate cover stop-overtake | | **Lighting (`WHO=1`)** | Basic On/Off relays & stepped dimming | Hardware staircase bus timers, smooth software fades, **DALI DT8 Tunable White (2000K–6535K)**, DALI feature locks, 2-digit Area 0 point addresses (`01`–`09`, [#713](https://github.com/OpenWebNet-HA/MyHOME/pull/713)) | Adds **coarse preset brightness curve correction ([#828](https://github.com/OpenWebNet-HA/MyHOME/pull/828))**, startup-sweep poll deduplication, and strict echo counting for group/area re-syncs | -| **Covers (`WHO=2` & `WHO=1`)** | Basic Open / Close / Stop | State tracking, position-reporting actuators, Venetian blind slat tilt ([#508](https://github.com/OpenWebNet-HA/MyHOME/pull/508)), impulse gate/garage covers on `WHO=1` ([#667](https://github.com/OpenWebNet-HA/MyHOME/pull/667)), `min_motor_pulse` floor & endpoint full runs ([#702](https://github.com/OpenWebNet-HA/MyHOME/pull/702), [#708](https://github.com/OpenWebNet-HA/MyHOME/pull/708)) | Adds **cover end-stop settle recomputation & 0.5 s limit-stop cutoff from known positions ([#834](https://github.com/OpenWebNet-HA/MyHOME/pull/834), [#847](https://github.com/OpenWebNet-HA/MyHOME/pull/847))**, **configurable `min_position_delta` ([#842](https://github.com/OpenWebNet-HA/MyHOME/pull/842))**, and cover calibration configurator cutoffs ([#837](https://github.com/OpenWebNet-HA/MyHOME/pull/837)) | +| **Covers (`WHO=2` & `WHO=1`)** | Basic Open / Close / Stop | State tracking, position-reporting actuators, Venetian blind slat tilt ([#508](https://github.com/OpenWebNet-HA/MyHOME/pull/508)), impulse gate/garage covers on `WHO=1` ([#667](https://github.com/OpenWebNet-HA/MyHOME/pull/667)), `min_motor_pulse` floor & endpoint full runs ([#702](https://github.com/OpenWebNet-HA/MyHOME/pull/702), [#708](https://github.com/OpenWebNet-HA/MyHOME/pull/708)) | Adds **cover end-stop settle recomputation & 0.5 s limit-stop cutoff from known positions ([#834](https://github.com/OpenWebNet-HA/MyHOME/pull/834), [#847](https://github.com/OpenWebNet-HA/MyHOME/pull/847))**, **configurable `min_position_delta` ([#842](https://github.com/OpenWebNet-HA/MyHOME/pull/842))**, and cover calibration configurator cutoffs ([#843](https://github.com/OpenWebNet-HA/MyHOME/pull/843)) | | **Locks & Door Entry (`WHO=6` / `WHO=8`)** | ❌ Not supported | Native `lock` platform for `WHO=6` door-entry strikes with constant-time PIN verification, auto-relock, and `WHO=8` intercom call events ([#667](https://github.com/OpenWebNet-HA/MyHOME/pull/667)) | Native `lock` platform with **WHO 6 gateway boundary containment ([#840](https://github.com/OpenWebNet-HA/MyHOME/pull/840))** preventing cross-gateway broadcast leaks | | **Climate (`WHO=4`)** | Basic zone thermostats | Central Unit 3550 (`#0`) & 4695 (`#0#1`) master coordination, season frames, holiday/vacation programs, zone humidity sensors ([#712](https://github.com/OpenWebNet-HA/MyHOME/pull/712)), F461 zone polling | Adds **BTicino 3550 Central Unit startup hydration, mode translation & diagnostics ([#819](https://github.com/OpenWebNet-HA/MyHOME/pull/819))**, **thermo actuator switch & ghost pump suppression ([#785](https://github.com/OpenWebNet-HA/MyHOME/pull/785))**, and snapshot temperature unit robustness ([#803](https://github.com/OpenWebNet-HA/MyHOME/pull/803)) | | **Sound System (`WHO=16` / `WHO=22`)** | ❌ Not supported | Full audio matrix (F441/F441M), Dynamic Streaming Proxy, `WHO=22` FM tuner frequency/preset/RDS decoding | Adds **native FM tuner controls (`media_player.myhome_tuner_*`) with frequency stepping, preset selection, band switching, and store station range validation ([#839](https://github.com/OpenWebNet-HA/MyHOME/pull/839), [#844](https://github.com/OpenWebNet-HA/MyHOME/pull/844))** | | **Burglar Alarm (`WHO=5`)** | ❌ Not supported | Dedicated `alarm_control_panel` (3485/3486), partition states, AUX arm/disarm workflows | Dedicated `alarm_control_panel` + **HomeKit-compatible arm-away read-only auxiliary panel mode ([#830](https://github.com/OpenWebNet-HA/MyHOME/pull/830))** | -| **CEN / CEN+ & Scenarios (`WHO=15/17/25`)** | Raw event listeners; required external blueprints | 8 native UI device triggers with 4-digit string-preserved addressing (`"0001"`), `WHO=25` Scenario Plus, `WHO=17` scene events | 8 native UI device triggers, `WHO=25` Scenario Plus, and **deterministic event sequence ordering ([#843](https://github.com/OpenWebNet-HA/MyHOME/pull/843))** | +| **CEN / CEN+ & Scenarios (`WHO=15/17/25`)** | Raw event listeners; required external blueprints | 8 native UI device triggers with 4-digit string-preserved addressing (`"0001"`), `WHO=25` Scenario Plus, `WHO=17` scene events | 8 native UI device triggers, `WHO=25` Scenario Plus, and **deterministic event sequence ordering ([#784](https://github.com/OpenWebNet-HA/MyHOME/pull/784))** | | **Diagnostics & Health** | Raw logs only | Self-clearing HA Repair issues (`actuator_fault`), `ignored_addresses`, gateway kernel distribution sweep telemetry | Self-clearing HA Repair issues, configurable `ignored_addresses`, and **3550 Central Unit diagnostic hydration state tracking ([#819](https://github.com/OpenWebNet-HA/MyHOME/pull/819))** | | **Lovelace Frontend** | ❌ None | Built-in `` card with stricter WebSocket input bounds ([#747](https://github.com/OpenWebNet-HA/MyHOME/pull/747)) and 1-click sanitized diagnostic report export | Built-in `` card with live streaming feed, offline replay tab, syntax-validated frame injector, and sanitized diagnostics | | **License** | **AGPL-3.0** (per `master` repository [`LICENSE`](LICENSE)) | **Apache-2.0** (per published `2.0.0b16` release / [`LICENSE`](https://github.com/OpenWebNet-HA/MyHOME/blob/v2-phase1-architecture/LICENSE), aligning with Home Assistant Core) | **Apache-2.0** (per published `2.0.0b17` release / [`LICENSE`](https://github.com/OpenWebNet-HA/MyHOME/blob/v2-phase1-architecture/LICENSE), aligning with Home Assistant Core) | @@ -249,7 +249,7 @@ The integration features declarative hardware profiles that automatically calibr ### Architectural Highlights * **Declarative HA-to-SCS Bus Expose Engine (`#750`)**: Project Home Assistant lights, switches, covers, temperature sensors, power meters, and the system clock onto unused OpenWebNet addresses (`WHO 1, 2, 4, 13, 18`). Physical wall controls can drive exposed virtual actuators with real-time LED state mirroring or execute Home Assistant scripts. -* **Cover Kinematics, End-Stop Settling & Min Delta (`#508`, `#667`, `#702`, `#707`, `#708`, `#739`, `#834`, `#837`, `#842`, `#847`)**: Configurable `min_position_delta` (1–5 %, default 2 %) for tall shutters and fine slat adjustments, automatic end-stop settle recomputation on `travel_time + 2 s` from known positions, 0.5 s early cutoff recognition preventing fractional frozen positions short of limit stops, timed slat tilt pulses (`slat_tilt`, `slat_time`), impulse garage/gate covers on `WHO=1` relays with optional safety approval, native `WHO=6` door-entry locks, per-cover `min_motor_pulse` start-up floors, endpoint full runs (`0%` / `100%`), and stop-status position re-anchoring. +* **Cover Kinematics, End-Stop Settling & Min Delta (`#508`, `#667`, `#702`, `#707`, `#708`, `#739`, `#834`, `#843`, `#842`, `#847`)**: Configurable `min_position_delta` (1–5 %, default 2 %) for tall shutters and fine slat adjustments, automatic end-stop settle recomputation on `travel_time + 2 s` from known positions, 0.5 s early cutoff recognition preventing fractional frozen positions short of limit stops, timed slat tilt pulses (`slat_tilt`, `slat_time`), impulse garage/gate covers on `WHO=1` relays with optional safety approval, native `WHO=6` door-entry locks, per-cover `min_motor_pulse` start-up floors, endpoint full runs (`0%` / `100%`), and stop-status position re-anchoring. * **Native Hardware Bus Light & Switch Timers (`WHO=1`)**: Offload countdown timers directly onto physical Legrand DIN actuators via `myhome.turn_on_timed` or standard `timer` parameters. The lights turn off automatically even if Home Assistant restarts. * **Sound System 2.0, Native Tuner Platform & Streaming Proxy (`#695`, `#839`, `#844`)**: Stream from **Music Assistant**, **Spotify Connect**, or any HA media player to wired BTicino audio zones using an intelligent `DecoderPool` with analog gain-staging and anti-hiss auto-off, plus full native `media_player` tuner platform controls (`WHO=22` / `WHO=16`) for frequency, band, preset selection, and live RDS metadata. * **Thermoregulation Central Unit Coordination, Seasons & Hydration (`3550` / `4695`, `#657`, `#689`, `#712`, `#785`, `#819`)**: Master climate coordination for 99-zone (`#0`) and 4-zone (`#0#1`) central units automatically propagates whole-home heating/cooling modes, seasons, and holiday programs across subordinate zones, with active 3550 Central Unit hydration, diagnostic state tracking, thermo actuator switches, and ghost pump suppression. From 7a7850d40f6733992a54079e779c4a5ef79e1e61 Mon Sep 17 00:00:00 2001 From: Laurens <43173895+GreenGrassBlueOcean@users.noreply.github.com> Date: Sun, 8 Nov 2026 12:19:58 +0100 Subject: [PATCH 9/9] docs(readme): drop non-product #784 CEN claim and align b17 PR/docs links --- README.md | 93 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 48 insertions(+), 45 deletions(-) diff --git a/README.md b/README.md index b104cbf54..0d37024b9 100644 --- a/README.md +++ b/README.md @@ -6,10 +6,10 @@ [![HACS Validation](https://github.com/OpenWebNet-HA/MyHOME/actions/workflows/validate.yml/badge.svg)](https://github.com/OpenWebNet-HA/MyHOME/actions/workflows/validate.yml) [![HACS Custom](https://img.shields.io/badge/HACS-Custom-orange.svg)](https://hacs.xyz) [![Python 3.14](https://img.shields.io/badge/python-3.14-blue.svg)](https://www.python.org/) -[![Quality Scale](https://img.shields.io/badge/Quality%20Scale-Platinum%20(54%2F54%20Self--Assessed)-brightgreen.svg)](https://openwebnet-ha.github.io/MyHOME/latest/) +[![Quality Scale](https://img.shields.io/badge/Quality%20Scale-Platinum%20(54%2F54%20Self--Assessed)-brightgreen.svg)](https://openwebnet-ha.github.io/MyHOME/beta/) [![Tests](https://img.shields.io/badge/tests-5%2C324%20passing-brightgreen.svg)](https://github.com/OpenWebNet-HA/MyHOME/actions/workflows/test-coverage.yaml) [![Coverage](https://img.shields.io/badge/coverage-100.0%25-brightgreen.svg)](https://app.codecov.io/gh/OpenWebNet-HA/MyHOME/tree/v2-phase1-architecture) -[![Documentation](https://img.shields.io/badge/Docs-openwebnet--ha.github.io%2FMyHOME-blue.svg)](https://openwebnet-ha.github.io/MyHOME/latest/) +[![Documentation](https://img.shields.io/badge/Docs-openwebnet--ha.github.io%2FMyHOME-blue.svg)](https://openwebnet-ha.github.io/MyHOME/beta/) [![Discussions](https://img.shields.io/badge/Discussions-Join-blue?logo=github)](https://github.com/OpenWebNet-HA/MyHOME/discussions) [![License: AGPL-3.0](https://img.shields.io/badge/License-AGPL_3.0-blue.svg)](LICENSE) @@ -17,7 +17,7 @@ Modern, async-native Home Assistant integration for **BTicino / Legrand MyHOME** Maintained by the **[OpenWebNet-HA](https://github.com/OpenWebNet-HA)** community organisation. -[⚖️ Version Comparison](#️-version-comparison-legacy-stable-vs-modern-beta) • [🧪 Testing & Reliability](#-testing--quality-comparison) • [📦 Installation](#-installation) • [🏛️ Supported Hardware](#️-supported-hardware--gateways) • [🌟 Key Features](#-modern-v2-features) • [📚 Full Documentation](https://openwebnet-ha.github.io/MyHOME/latest/) • [🗺️ Stable v2.0.0 PR #232](https://github.com/OpenWebNet-HA/MyHOME/pull/232) +[⚖️ Version Comparison](#️-version-comparison-legacy-stable-vs-modern-beta) • [🧪 Testing & Reliability](#-testing--quality-comparison) • [📦 Installation](#-installation) • [🏛️ Supported Hardware](#️-supported-hardware--gateways) • [🌟 Key Features](#-modern-v2-features) • [📚 Full Documentation](https://openwebnet-ha.github.io/MyHOME/beta/) • [🗺️ Stable v2.0.0 PR #232](https://github.com/OpenWebNet-HA/MyHOME/pull/232) --- @@ -25,7 +25,7 @@ Maintained by the **[OpenWebNet-HA](https://github.com/OpenWebNet-HA)** communit > ### 🛡️ Current Stable Status vs. Active V2 Beta > > - **Current Stable Release ([v0.9.4](https://github.com/OpenWebNet-HA/MyHOME/releases/tag/0.9.4))**: The baseline release on `master` for users seeking proven production stability. Fully compatible with Home Assistant 2026.9 and earlier. HACS installs this version by default when pre-releases are not enabled. -> - **Active Field-Testing Beta ([v2.0.0b17](https://github.com/OpenWebNet-HA/MyHOME/releases/tag/2.0.0b17), succeeding [v2.0.0b16](https://github.com/OpenWebNet-HA/MyHOME/releases/tag/2.0.0b16))**: Modernized async-native architecture (`OWNd 2.0.0b13`), cover end-stop settle recomputation & 0.5 s limit-stop cutoff, configurable `min_position_delta` (1–5 %), BTicino 3550 Central Unit hydration & diagnostics, native FM tuner platform controls (`WHO=22` / `WHO=16`), Burglar alarm HomeKit arm-away, Legrand 067292 gateway profile alias, declarative HA-to-SCS bus `expose` engine (`WHO 1/2/4/13/18`), Venetian blind slat tilt, impulse gate/garage covers & door-entry locks (`WHO 1/2/6/8`), and 100.0% test statement coverage (**5,324 tests** in `v2.0.0b17`, up from 4,393 in `v2.0.0b16`). Built for Home Assistant ≥ 2026.3 (Python 3.14). +> - **Active Field-Testing Beta ([v2.0.0b17](https://github.com/OpenWebNet-HA/MyHOME/releases/tag/2.0.0b17), succeeding [v2.0.0b16](https://github.com/OpenWebNet-HA/MyHOME/releases/tag/2.0.0b16))**: Modernized async-native architecture (`OWNd 2.0.0b13`), cover end-stop settle recomputation & 0.5 s limit-stop cutoff, configurable `min_position_delta` (1–5 %), BTicino 3550 Central Unit hydration & diagnostics, F500/F500N FM tuner frequency, seek & preset controls (`WHO=16` / `WHO=22`), Burglar alarm HomeKit arm-away, Legrand 067292 touchscreen gateway alias, declarative HA-to-SCS bus `expose` engine (`WHO 1/2/4/13/18`), Venetian blind slat tilt, impulse gate/garage covers & door-entry locks (`WHO 1/2/6/8`), and 100.0% test statement coverage (**5,324 tests** in `v2.0.0b17`, up from 4,393 in `v2.0.0b16`). Built for Home Assistant ≥ 2026.3 (Python 3.14). > - **Roadmap to Stable v2.0.0**: Once community field-testing on the beta line is concluded, **[PR #232](https://github.com/OpenWebNet-HA/MyHOME/pull/232)** will merge the V2 architecture directly into `master`, making it the official stable default for all users. > - **Zero-Friction Migration**: Upgrading to V2 safely preserves all existing device names, custom entity IDs (`light.living_room`), and gateway configurations. Unique IDs migrate automatically (`MAC-WHERE` → `MAC-WHO-WHERE`), and legacy `myhome.yaml` settings (`travel_time`, `lock_features`) are automatically persisted into the config entry ([#742](https://github.com/OpenWebNet-HA/MyHOME/pull/742)). @@ -42,29 +42,29 @@ Understanding the technical differences between **Legacy Stable (`v0.9.4`)**, ** | **Protocol Engine** | `OWNd==0.7.48` | **`OWNd==2.0.0b11`** (zero private symbols/shims, strict builder validation, whole-hour TZ guard) | **`OWNd==2.0.0b13`** (hardened WHO 4 setpoints, vacation program parser, WHO 6 gateway boundaries, WHO 16 station range validation, clean profile aliases) | | **Quality Scale** | Unranked legacy structure | **🏆 Platinum Tier (54/54 self-assessed rules)** + bundled brand icons ([#741](https://github.com/OpenWebNet-HA/MyHOME/pull/741)) — formal tier awarded upon upstream core review | **🏆 Platinum Tier (54/54 self-assessed rules satisfied/exempt in `quality_scale.yaml`)** | | **Type Safety** | Untyped | **100% `mypy --strict` compliance** across all **73 modules** (verified against pinned `OWNd==2.0.0b11`) | **100% `mypy --strict` compliance** across all **73 modules** (verified against pinned `OWNd==2.0.0b13`) | -| **State Storage & Config** | Global `hass.data[DOMAIN]` dictionaries | Strongly-typed **`entry.runtime_data`** + automatic persistence of `myhome.yaml` device settings (`travel_time`, `lock_features`) into config entry ([#742](https://github.com/OpenWebNet-HA/MyHOME/pull/742)) | Strongly-typed **`entry.runtime_data`** (`MyHOMERuntimeData`), UI Config/Options Flow with configurable `min_position_delta` ([#842](https://github.com/OpenWebNet-HA/MyHOME/pull/842)) & `ignored_addresses` | -| **Device Discovery** | Requires manual YAML (`myhome.yaml`) | **Zero-config Dynamic Bus Auto-Discovery** + phantom-entity suppression on blank start ([#686](https://github.com/OpenWebNet-HA/MyHOME/pull/686)) & ON-dimmer brightness probing ([#742](https://github.com/OpenWebNet-HA/MyHOME/pull/742)) | **Zero-config Dynamic Bus Auto-Discovery** with startup-sweep deduplication and subentry entity persistence | +| **State Storage & Config** | Global `hass.data[DOMAIN]` dictionaries | Strongly-typed **`entry.runtime_data`** + automatic persistence of `myhome.yaml` device settings (`travel_time`, `lock_features`) into config entry ([#742](https://github.com/OpenWebNet-HA/MyHOME/pull/742)) | Strongly-typed **`entry.runtime_data`** (`MyHOMERuntimeData`), UI Config/Options/Subentry Flows with manual gateway model ID ([#804](https://github.com/OpenWebNet-HA/MyHOME/pull/804)), `WHO=4` thermo switch subentries ([#817](https://github.com/OpenWebNet-HA/MyHOME/pull/817)), UI binary sensor inversion ([#829](https://github.com/OpenWebNet-HA/MyHOME/pull/829)) & `ignored_addresses` | +| **Device Discovery** | Requires manual YAML (`myhome.yaml`) | **Zero-config Dynamic Bus Auto-Discovery** + phantom-entity suppression on blank start ([#686](https://github.com/OpenWebNet-HA/MyHOME/pull/686)) & ON-dimmer brightness probing ([#742](https://github.com/OpenWebNet-HA/MyHOME/pull/742)) | **Zero-config Dynamic Bus Auto-Discovery** with per-firmware startup sweep filtering ([#794](https://github.com/OpenWebNet-HA/MyHOME/pull/794)) and subentry entity persistence | | **Expose HA to SCS Bus** | ❌ Not supported | **✅ Declarative `expose` engine ([#750](https://github.com/OpenWebNet-HA/MyHOME/pull/750))**: virtual `WHO 1/2` actuators (with wall LED feedback), `WHO 4` temperature probes, `WHO 18` energy meters, and `WHO 13` bus clock | **✅ Declarative `expose` engine**: virtual `WHO 1/2` actuators (with physical wall LED feedback), `WHO 4` temperature probes, `WHO 18` energy meters, and `WHO 13` bus clock sync | -| **Gateway Profiles** | Fixed, hardcoded socket pacing | **12 Declarative Profiles** verified against empirical **Firmware Oracle** ([#745](https://github.com/OpenWebNet-HA/MyHOME/pull/745)), plus `H4684`/`LGRH4684` & `MH201` auto-ID ([#652](https://github.com/OpenWebNet-HA/MyHOME/pull/652), [#722](https://github.com/OpenWebNet-HA/MyHOME/pull/722)) | **13 Declarative Profiles & Aliases** with **Legrand 067292 alias ([#832](https://github.com/OpenWebNet-HA/MyHOME/pull/832))**, F454, F455, F461, MH202, MH201, MHS1, MH200N, MH200, H4890, HL4684, F452/F453AV, 3578 | +| **Gateway Profiles** | Fixed, hardcoded socket pacing | **12 Declarative Profiles** verified against empirical **Firmware Oracle** ([#745](https://github.com/OpenWebNet-HA/MyHOME/pull/745)), plus `H4684`/`LGRH4684` & `MH201` auto-ID ([#652](https://github.com/OpenWebNet-HA/MyHOME/pull/652), [#722](https://github.com/OpenWebNet-HA/MyHOME/pull/722)) | **12 Declarative Profiles** + **Legrand `067292` / `573958` / `078479` touchscreen aliases ([#854](https://github.com/OpenWebNet-HA/MyHOME/pull/854))** (F454, F455, F461, MH202, MH201, MHS1, MH200N, MH200, H4890, HL4684, F452/F453AV, 3578) | | **Supported Transports** | TCP Network Gateways only | **TCP IP + USB/Serial (Legrand 3578 / OpenZigBee)** + shared HA websession discovery ([#757](https://github.com/OpenWebNet-HA/MyHOME/pull/757)) | **TCP IP + USB/Serial (Legrand 3578 / OpenZigBee)** | | **Multi-Gateway Plants** | ❌ Single gateway only (cross-talk on multi-GW) | **Namespaced routing, plant isolation & warm-standby failover** | **Namespaced routing, plant isolation & warm-standby failover ([#453](https://github.com/OpenWebNet-HA/MyHOME/issues/453))** | | **Command Scheduling** | FIFO queue (user commands blocked behind sweeps) | **Unified `FrameScheduler` ([#738](https://github.com/OpenWebNet-HA/MyHOME/pull/738))** with per-target (`WHO`, `WHERE`) serialization, cover `STOP` overtaking queued frames ([#694](https://github.com/OpenWebNet-HA/MyHOME/pull/694)), and low-priority fade steps ([#739](https://github.com/OpenWebNet-HA/MyHOME/pull/739)) | **Unified `FrameScheduler`** with per-target queue serialization, priority user frames over background polls, and immediate cover stop-overtake | -| **Lighting (`WHO=1`)** | Basic On/Off relays & stepped dimming | Hardware staircase bus timers, smooth software fades, **DALI DT8 Tunable White (2000K–6535K)**, DALI feature locks, 2-digit Area 0 point addresses (`01`–`09`, [#713](https://github.com/OpenWebNet-HA/MyHOME/pull/713)) | Adds **coarse preset brightness curve correction ([#828](https://github.com/OpenWebNet-HA/MyHOME/pull/828))**, startup-sweep poll deduplication, and strict echo counting for group/area re-syncs | -| **Covers (`WHO=2` & `WHO=1`)** | Basic Open / Close / Stop | State tracking, position-reporting actuators, Venetian blind slat tilt ([#508](https://github.com/OpenWebNet-HA/MyHOME/pull/508)), impulse gate/garage covers on `WHO=1` ([#667](https://github.com/OpenWebNet-HA/MyHOME/pull/667)), `min_motor_pulse` floor & endpoint full runs ([#702](https://github.com/OpenWebNet-HA/MyHOME/pull/702), [#708](https://github.com/OpenWebNet-HA/MyHOME/pull/708)) | Adds **cover end-stop settle recomputation & 0.5 s limit-stop cutoff from known positions ([#834](https://github.com/OpenWebNet-HA/MyHOME/pull/834), [#847](https://github.com/OpenWebNet-HA/MyHOME/pull/847))**, **configurable `min_position_delta` ([#842](https://github.com/OpenWebNet-HA/MyHOME/pull/842))**, and cover calibration configurator cutoffs ([#843](https://github.com/OpenWebNet-HA/MyHOME/pull/843)) | -| **Locks & Door Entry (`WHO=6` / `WHO=8`)** | ❌ Not supported | Native `lock` platform for `WHO=6` door-entry strikes with constant-time PIN verification, auto-relock, and `WHO=8` intercom call events ([#667](https://github.com/OpenWebNet-HA/MyHOME/pull/667)) | Native `lock` platform with **WHO 6 gateway boundary containment ([#840](https://github.com/OpenWebNet-HA/MyHOME/pull/840))** preventing cross-gateway broadcast leaks | -| **Climate (`WHO=4`)** | Basic zone thermostats | Central Unit 3550 (`#0`) & 4695 (`#0#1`) master coordination, season frames, holiday/vacation programs, zone humidity sensors ([#712](https://github.com/OpenWebNet-HA/MyHOME/pull/712)), F461 zone polling | Adds **BTicino 3550 Central Unit startup hydration, mode translation & diagnostics ([#819](https://github.com/OpenWebNet-HA/MyHOME/pull/819))**, **thermo actuator switch & ghost pump suppression ([#785](https://github.com/OpenWebNet-HA/MyHOME/pull/785))**, and snapshot temperature unit robustness ([#803](https://github.com/OpenWebNet-HA/MyHOME/pull/803)) | -| **Sound System (`WHO=16` / `WHO=22`)** | ❌ Not supported | Full audio matrix (F441/F441M), Dynamic Streaming Proxy, `WHO=22` FM tuner frequency/preset/RDS decoding | Adds **native FM tuner controls (`media_player.myhome_tuner_*`) with frequency stepping, preset selection, band switching, and store station range validation ([#839](https://github.com/OpenWebNet-HA/MyHOME/pull/839), [#844](https://github.com/OpenWebNet-HA/MyHOME/pull/844))** | -| **Burglar Alarm (`WHO=5`)** | ❌ Not supported | Dedicated `alarm_control_panel` (3485/3486), partition states, AUX arm/disarm workflows | Dedicated `alarm_control_panel` + **HomeKit-compatible arm-away read-only auxiliary panel mode ([#830](https://github.com/OpenWebNet-HA/MyHOME/pull/830))** | -| **CEN / CEN+ & Scenarios (`WHO=15/17/25`)** | Raw event listeners; required external blueprints | 8 native UI device triggers with 4-digit string-preserved addressing (`"0001"`), `WHO=25` Scenario Plus, `WHO=17` scene events | 8 native UI device triggers, `WHO=25` Scenario Plus, and **deterministic event sequence ordering ([#784](https://github.com/OpenWebNet-HA/MyHOME/pull/784))** | -| **Diagnostics & Health** | Raw logs only | Self-clearing HA Repair issues (`actuator_fault`), `ignored_addresses`, gateway kernel distribution sweep telemetry | Self-clearing HA Repair issues, configurable `ignored_addresses`, and **3550 Central Unit diagnostic hydration state tracking ([#819](https://github.com/OpenWebNet-HA/MyHOME/pull/819))** | +| **Lighting (`WHO=1`)** | Basic On/Off relays & stepped dimming | Hardware staircase bus timers, smooth software fades, **DALI DT8 Tunable White (2000K–6535K)**, DALI feature locks, 2-digit Area 0 point addresses (`01`–`09`, [#713](https://github.com/OpenWebNet-HA/MyHOME/pull/713)) | Adds **coarse preset brightness curve correction ([#828](https://github.com/OpenWebNet-HA/MyHOME/pull/828))**, **fine dimmer preset echo Dimension 1 refresh ([#852](https://github.com/OpenWebNet-HA/MyHOME/pull/852))**, and **shared-address light + motion sensor coexistence ([#781](https://github.com/OpenWebNet-HA/MyHOME/pull/781))** | +| **Covers (`WHO=2` & `WHO=1`)** | Basic Open / Close / Stop | State tracking, position-reporting actuators, Venetian blind slat tilt ([#508](https://github.com/OpenWebNet-HA/MyHOME/pull/508)), impulse gate/garage covers on `WHO=1` ([#667](https://github.com/OpenWebNet-HA/MyHOME/pull/667)), `min_motor_pulse` floor & endpoint full runs ([#702](https://github.com/OpenWebNet-HA/MyHOME/pull/702), [#708](https://github.com/OpenWebNet-HA/MyHOME/pull/708)) | Adds **cover end-stop settle recomputation & 0.5 s limit-stop cutoff from known positions ([#834](https://github.com/OpenWebNet-HA/MyHOME/pull/834), [#847](https://github.com/OpenWebNet-HA/MyHOME/pull/847))**, **configurable `min_position_delta` ([#778](https://github.com/OpenWebNet-HA/MyHOME/pull/778))**, and cover calibration configurator cutoffs ([#843](https://github.com/OpenWebNet-HA/MyHOME/pull/843)) | +| **Locks & Door Entry (`WHO=6` / `WHO=8`)** | ❌ Not supported | Native `lock` platform for `WHO=6` door-entry strikes with constant-time PIN verification, auto-relock, and `WHO=8` intercom call events ([#667](https://github.com/OpenWebNet-HA/MyHOME/pull/667)) | Native `lock` platform with **WHO 6 gateway boundary containment ([#835](https://github.com/OpenWebNet-HA/MyHOME/pull/835))** preventing cross-gateway broadcast leaks | +| **Climate (`WHO=4`)** | Basic zone thermostats | Central Unit 3550 (`#0`) & 4695 (`#0#1`) master coordination, season frames, holiday/vacation programs, zone humidity sensors ([#712](https://github.com/OpenWebNet-HA/MyHOME/pull/712)), F461 zone polling | Adds **BTicino 3550 Central Unit startup hydration, diagnostic flags & repair alerts ([#846](https://github.com/OpenWebNet-HA/MyHOME/pull/846))**, **probe-less thermo actuator switches & ghost pump suppression ([#817](https://github.com/OpenWebNet-HA/MyHOME/pull/817), [#825](https://github.com/OpenWebNet-HA/MyHOME/pull/825))**, and Dimension 22 crash-form & interface routing guards ([#816](https://github.com/OpenWebNet-HA/MyHOME/pull/816), [#849](https://github.com/OpenWebNet-HA/MyHOME/pull/849)) | +| **Sound System (`WHO=16` / `WHO=22`)** | ❌ Not supported | Full audio matrix (F441/F441M), Dynamic Streaming Proxy, `WHO=22` FM tuner frequency/preset/RDS decoding | Adds **F500/F500N FM tuner manual frequency `number` input, seek `button` entities, Media Browser, preset storage & `WHO=22` command parity ([#839](https://github.com/OpenWebNet-HA/MyHOME/pull/839))** and **`WHO=16` station range validation ([#844](https://github.com/OpenWebNet-HA/MyHOME/pull/844))** | +| **Burglar Alarm (`WHO=5`)** | ❌ Not supported | Dedicated `alarm_control_panel` (3485/3486), partition states, AUX arm/disarm workflows | Dedicated `alarm_control_panel` + **HomeKit-compatible arm-away read-only auxiliary panel mode ([#842](https://github.com/OpenWebNet-HA/MyHOME/pull/842))** | +| **CEN / CEN+ & Scenarios (`WHO=15/17/25`)** | Raw event listeners; required external blueprints | 8 native UI device triggers with 4-digit string-preserved addressing (`"0001"`), `WHO=25` Scenario Plus, `WHO=17` scene events | 8 native UI device triggers with 4-digit string-preserved addressing (`"0001"`), `WHO=25` Scenario Plus, `WHO=17` scene events | +| **Diagnostics & Health** | Raw logs only | Self-clearing HA Repair issues (`actuator_fault`), `ignored_addresses`, gateway kernel distribution sweep telemetry | Self-clearing HA Repair issues, configurable `ignored_addresses`, and **3550 Central Unit diagnostic flags & actionable repair alerts ([#846](https://github.com/OpenWebNet-HA/MyHOME/pull/846))** | | **Lovelace Frontend** | ❌ None | Built-in `` card with stricter WebSocket input bounds ([#747](https://github.com/OpenWebNet-HA/MyHOME/pull/747)) and 1-click sanitized diagnostic report export | Built-in `` card with live streaming feed, offline replay tab, syntax-validated frame injector, and sanitized diagnostics | | **License** | **AGPL-3.0** (per `master` repository [`LICENSE`](LICENSE)) | **Apache-2.0** (per published `2.0.0b16` release / [`LICENSE`](https://github.com/OpenWebNet-HA/MyHOME/blob/v2-phase1-architecture/LICENSE), aligning with Home Assistant Core) | **Apache-2.0** (per published `2.0.0b17` release / [`LICENSE`](https://github.com/OpenWebNet-HA/MyHOME/blob/v2-phase1-architecture/LICENSE), aligning with Home Assistant Core) | > 🔗 **Release Changelogs & GitHub Compares**: -> - [`v2.0.0b17` Release Notes & Assets](https://github.com/OpenWebNet-HA/MyHOME/releases/tag/2.0.0b17) • [`Compare 2.0.0b16...2.0.0b17` (23 PRs)](https://github.com/OpenWebNet-HA/MyHOME/compare/2.0.0b16...2.0.0b17) +> - [`v2.0.0b17` Release Notes & Assets](https://github.com/OpenWebNet-HA/MyHOME/releases/tag/2.0.0b17) • [`Compare 2.0.0b16...2.0.0b17` (61 PRs)](https://github.com/OpenWebNet-HA/MyHOME/compare/2.0.0b16...2.0.0b17) > - [`v2.0.0b16` Release Notes & Assets](https://github.com/OpenWebNet-HA/MyHOME/releases/tag/2.0.0b16) • [`Compare 2.0.0b15...2.0.0b16` (83 PRs)](https://github.com/OpenWebNet-HA/MyHOME/compare/2.0.0b15...2.0.0b16) > - [`v2.0.0b15` Release Notes & Assets](https://github.com/OpenWebNet-HA/MyHOME/releases/tag/2.0.0b15) • [`Compare 2.0.0b14...2.0.0b15` (41 PRs)](https://github.com/OpenWebNet-HA/MyHOME/compare/2.0.0b14...2.0.0b15) -> - [Full Cross-Beta Capability Matrix (`v2.0.0b1` → `v2.0.0b17`)](https://openwebnet-ha.github.io/MyHOME/latest/roadmap/beta-differences/) +> - [Full Cross-Beta Capability Matrix (`v2.0.0b1` → `v2.0.0b17`)](https://openwebnet-ha.github.io/MyHOME/beta/roadmap/beta-differences/) --- @@ -220,10 +220,10 @@ The integration features declarative hardware profiles that automatically calibr | **H4890 / AM4890** | OpenWebNet | 1 worker | 50 ms | ✅ SSDP | 3.5" Touch screen display IP gateway | | **F452 / F453AV** | OpenWebNet | 1 worker | 150 ms | ✅ UPnP / Port 49153 | Audio/video & web server gateway | | **HL4684** | OpenWebNet | 1 worker | 50 ms | ✅ SSDP | 10" Touch screen display IP gateway | -| **Legrand 067292** | OpenWebNet / HMAC | 4 workers | 50 ms | ✅ UPnP / Port 49153 | Flush-mount IP gateway (profile alias) | +| **Legrand 067292** | OpenWebNet | 1 worker | 50 ms | ✅ SSDP | 3.5" Touch screen display IP gateway (Céliane, `H4890` profile alias) | | **Legrand 3578** | OpenWebNet (Serial) | 1 worker | 50 ms | ❌ Manual (Serial) | USB / Serial gateway & OpenZigBee interface | -📖 [Read the full Hardware Gateway Profiles Guide →](https://openwebnet-ha.github.io/MyHOME/latest/configuration/gateways/) +📖 [Read the full Hardware Gateway Profiles Guide →](https://openwebnet-ha.github.io/MyHOME/beta/configuration/gateways/) --- @@ -234,25 +234,26 @@ The integration features declarative hardware profiles that automatically calibr | Domain | WHO | Capabilities | |---|---|---| | **`light`** | WHO=1 | On/Off, dimmers with smooth software-stepped curves, coarse preset brightness curve correction, DALI DT8 Tunable White (2000K–6535K), HS/RGB colour, 2-digit Area 0 (`01`–`09`) addressing, and hardware-offloaded bus staircase timers (`myhome.turn_on_timed`). | -| **`switch`** | WHO=1 | Relay actuators, auxiliary switches, socket actuators (switch/outlet device classes), and hardware-offloaded bus timers. | +| **`switch`** | WHO=1 / 4 | Relay actuators, auxiliary switches, socket actuators (switch/outlet device classes), probe-less `WHO=4` thermo actuator switches, and hardware-offloaded bus timers. | | **`cover`** | WHO=1 / WHO=2 | Motorized shutters, Venetian blinds with slat tilt (`slat_tilt`, `slat_time`), position-reporting actuators, virtual travel-time positioning with end-stop settle recomputation & 0.5 s limit-stop cutoff from known positions, configurable `min_position_delta` (1–5 %), `min_motor_pulse` start-up floors & endpoint full runs, impulse gates & garage doors (`WHO=1`) with optional multi-factor approval, and centralized shutter triggers. | | **`lock`** | WHO=6 | Native video door-entry strikes (`WHO=6`, configured in `myhome.yaml`) with constant-time PIN authentication, auto-relock, `WHO=8` intercom call events, and gateway boundary containment. | | **`climate`** | WHO=4 | Heating, cooling, 4-pipe systems, thermostats, setpoints, fancoil 3-speed modes, offset tracking, season frames, holiday/vacation programs, zone humidity sensors, thermo actuator switches & ghost pump suppression, and Central Unit 3550 (`#0`) & 4695 (`#0#1`) master coordination with startup hydration and diagnostics. | | **`alarm_control_panel`** | WHO=5 | Central units (3485/3486), partition states (disarmed / armed away / triggered), zone 0 broadcast sync, AUX arm/disarm workflows, and HomeKit-compatible arm-away read-only auxiliary panel mode. | -| **`binary_sensor`** | WHO=1 / 9 / 25 | Magnetic contacts, door/window sensors, PIR motion, AUX channels (1–9), and dry contact interfaces (F482/3477). | +| **`binary_sensor`** | WHO=1 / 9 / 25 | Magnetic contacts, door/window sensors, PIR motion, AUX channels (1–9), and dry contact interfaces (F482/3477) with per-entity UI state inversion. | | **`sensor`** | WHO=1 / 4 / 18 | Power meters, energy counters (total/daily/monthly), temperature & humidity probes (3475), and illuminance / lux sensors. | -| **`button`** | WHO=14 / 2 | Hardware actuator lock/unlock for maintenance (`WHO=14`), and cover travel-time calibration buttons (`WHO=2`). | -| **`media_player`** | WHO=16 / 22 | F441/F441M audio matrix zones, source routing, native `WHO=22` FM tuner controls (`media_player.myhome_tuner_*`) with frequency stepping, preset selection, band switching, live RDS station decoding with optional station artwork, volume normalization, software mute, and Dynamic Streaming Proxy. | -| **`device_trigger`** | WHO=15 / 17 / 25 | Stateless CEN & CEN+ scenario pushbuttons with 4-digit string-preserved addressing (`"0001"`), MAC isolation, 8 native UI trigger types, deterministic event sequence ordering, `WHO=25` Scenario Plus, and `WHO=17` scene lifecycle events. | +| **`button`** | WHO=14 / 2 / 16 / 22 | Hardware actuator lock/unlock for maintenance (`WHO=14`), cover travel-time calibration buttons (`WHO=2`), and F500/F500N FM tuner Seek up / Seek down buttons (`WHO=16` / `22`). | +| **`number`** | WHO=16 / 22 | Direct manual FM radio frequency input & stepping (`87.50–108.00 MHz`, `0.05 MHz` step) for declared F500/F500N tuner sources. | +| **`media_player`** | WHO=16 / 22 | F441/F441M audio matrix zones, source routing, F500/F500N FM radio tuners (presets, live RDS station decoding with optional station artwork, Media Browser, manual frequency & preset storage on `WHO=16` & `WHO=22`), volume normalization, software mute, and Dynamic Streaming Proxy. | +| **`device_trigger`** | WHO=15 / 17 / 25 | Stateless CEN & CEN+ scenario pushbuttons with 4-digit string-preserved addressing (`"0001"`), MAC isolation, 8 native UI trigger types, `WHO=25` Scenario Plus, and `WHO=17` scene lifecycle events. | | **`expose`** *(Bus Projection)* | WHO=1 / 2 / 4 / 13 / 18 | Declarative HA-to-SCS bus projection: virtual `WHO 1/2` actuators (driven by physical wall buttons with LED feedback), `WHO 4` virtual temperature probes, `WHO 18` virtual energy meters, and `WHO 13` bus clock sync. | ### Architectural Highlights * **Declarative HA-to-SCS Bus Expose Engine (`#750`)**: Project Home Assistant lights, switches, covers, temperature sensors, power meters, and the system clock onto unused OpenWebNet addresses (`WHO 1, 2, 4, 13, 18`). Physical wall controls can drive exposed virtual actuators with real-time LED state mirroring or execute Home Assistant scripts. -* **Cover Kinematics, End-Stop Settling & Min Delta (`#508`, `#667`, `#702`, `#707`, `#708`, `#739`, `#834`, `#843`, `#842`, `#847`)**: Configurable `min_position_delta` (1–5 %, default 2 %) for tall shutters and fine slat adjustments, automatic end-stop settle recomputation on `travel_time + 2 s` from known positions, 0.5 s early cutoff recognition preventing fractional frozen positions short of limit stops, timed slat tilt pulses (`slat_tilt`, `slat_time`), impulse garage/gate covers on `WHO=1` relays with optional safety approval, native `WHO=6` door-entry locks, per-cover `min_motor_pulse` start-up floors, endpoint full runs (`0%` / `100%`), and stop-status position re-anchoring. +* **Cover Kinematics, End-Stop Settling & Min Delta (`#508`, `#667`, `#702`, `#707`, `#708`, `#739`, `#778`, `#834`, `#843`, `#847`)**: Configurable `min_position_delta` (1–5 %, default 2 %) for tall shutters and fine slat adjustments, automatic end-stop settle recomputation on `travel_time + 2 s` from known positions, 0.5 s early cutoff recognition preventing fractional frozen positions short of limit stops, timed slat tilt pulses (`slat_tilt`, `slat_time`), impulse garage/gate covers on `WHO=1` relays with optional safety approval, native `WHO=6` door-entry locks, per-cover `min_motor_pulse` start-up floors, endpoint full runs (`0%` / `100%`), and stop-status position re-anchoring. * **Native Hardware Bus Light & Switch Timers (`WHO=1`)**: Offload countdown timers directly onto physical Legrand DIN actuators via `myhome.turn_on_timed` or standard `timer` parameters. The lights turn off automatically even if Home Assistant restarts. -* **Sound System 2.0, Native Tuner Platform & Streaming Proxy (`#695`, `#839`, `#844`)**: Stream from **Music Assistant**, **Spotify Connect**, or any HA media player to wired BTicino audio zones using an intelligent `DecoderPool` with analog gain-staging and anti-hiss auto-off, plus full native `media_player` tuner platform controls (`WHO=22` / `WHO=16`) for frequency, band, preset selection, and live RDS metadata. -* **Thermoregulation Central Unit Coordination, Seasons & Hydration (`3550` / `4695`, `#657`, `#689`, `#712`, `#785`, `#819`)**: Master climate coordination for 99-zone (`#0`) and 4-zone (`#0#1`) central units automatically propagates whole-home heating/cooling modes, seasons, and holiday programs across subordinate zones, with active 3550 Central Unit hydration, diagnostic state tracking, thermo actuator switches, and ghost pump suppression. +* **Sound System 2.0, Native Tuner Controls & Streaming Proxy (`#695`, `#839`, `#844`)**: Stream from **Music Assistant**, **Spotify Connect**, or any HA media player to wired BTicino audio zones using an intelligent `DecoderPool` with analog gain-staging and anti-hiss auto-off, plus F500/F500N FM tuner `number`, `button`, and `media_player` controls (`WHO=16` / `WHO=22`) for manual frequency input, seek, Media Browser presets, station storage, and live RDS metadata. +* **Thermoregulation Central Unit Coordination, Seasons & Hydration (`3550` / `4695`, `#657`, `#689`, `#712`, `#817`, `#825`, `#846`)**: Master climate coordination for 99-zone (`#0`) and 4-zone (`#0#1`) central units automatically propagates whole-home heating/cooling modes, seasons, and holiday programs across subordinate zones, with active 3550 Central Unit hydration, diagnostic flags & repair alerts, thermo actuator switches, and ghost pump suppression. * **Multi-Gateway Routing & Plant Isolation (`#453`)**: Namespaced dispatchers eliminate cross-talk across plants combining multiple gateways (e.g. F454 + MH200N). * **Unified Per-Target FrameScheduler (`#738`)**: Serializes commands per target (`WHO`, `WHERE`) while allowing cover `STOP` commands to overtake queued frames (`#694`) and user actions to execute ahead of background status polls (`#685`). * **Self-Healing Diagnostics, Fault Repairs & Ignored Addresses (`#593`, `#621`, `#666`)**: Hardware anomalies surface as self-clearing Home Assistant repair issues (`actuator_fault`), with configurable `ignored_addresses` in Options Flow. @@ -270,7 +271,7 @@ The integration includes an in-band real-time bus monitor operating over the exi * **Visual Card Picker**: Add directly from Home Assistant's dashboard editor by searching for **"MyHOME OpenWebNet Bus Monitor"** (`custom:myhome-openwebnet-bus-monitor`). * **Live Feed & Frame Injector**: Color-coded badges for subsystems, ACK/NACK highlighting, pause/resume, buffer filtering, and manual frame injection with syntax validation. -📖 [Read the Bus Monitor Card Guide →](https://openwebnet-ha.github.io/MyHOME/latest/configuration/bus_monitor/) +📖 [Read the Bus Monitor Card Guide →](https://openwebnet-ha.github.io/MyHOME/beta/configuration/bus_monitor/) --- @@ -278,17 +279,17 @@ The integration includes an in-band real-time bus monitor operating over the exi Comprehensive guides, specifications, and tutorials are available on our documentation site and wiki: -* 📖 **[Official Documentation Site](https://openwebnet-ha.github.io/MyHOME/latest/)** - * [Getting Started & Installation](https://openwebnet-ha.github.io/MyHOME/latest/getting-started/installation/) - * [Upgrade from v0.9.4 to v2.0](https://openwebnet-ha.github.io/MyHOME/latest/migration/upgrade-from-094/) - * [Beta Releases & Delta Explorer (`b1` → `b17`)](https://openwebnet-ha.github.io/MyHOME/latest/roadmap/beta-differences/) - * [Hardware Gateway Profiles](https://openwebnet-ha.github.io/MyHOME/latest/configuration/gateways/) - * [Supported Functions & Subsystems](https://openwebnet-ha.github.io/MyHOME/latest/configuration/supported_functions/) - * [Sound System & Dynamic Proxy](https://openwebnet-ha.github.io/MyHOME/latest/configuration/media_player/) - * [CEN & CEN+ Scenario Automations](https://openwebnet-ha.github.io/MyHOME/latest/configuration/cen_cenplus/) - * [Troubleshooting & Diagnostics](https://openwebnet-ha.github.io/MyHOME/latest/configuration/troubleshooting/) +* 📖 **[Official Documentation Site](https://openwebnet-ha.github.io/MyHOME/beta/)** + * [Getting Started & Installation](https://openwebnet-ha.github.io/MyHOME/beta/getting-started/installation/) + * [Upgrade from v0.9.4 to v2.0](https://openwebnet-ha.github.io/MyHOME/beta/migration/upgrade-from-094/) + * [Beta Releases & Delta Explorer (`b1` → `b17`)](https://openwebnet-ha.github.io/MyHOME/beta/roadmap/beta-differences/) + * [Hardware Gateway Profiles](https://openwebnet-ha.github.io/MyHOME/beta/configuration/gateways/) + * [Supported Functions & Subsystems](https://openwebnet-ha.github.io/MyHOME/beta/configuration/supported_functions/) + * [Sound System & Dynamic Proxy](https://openwebnet-ha.github.io/MyHOME/beta/configuration/media_player/) + * [CEN & CEN+ Scenario Automations](https://openwebnet-ha.github.io/MyHOME/beta/configuration/cen_cenplus/) + * [Troubleshooting & Diagnostics](https://openwebnet-ha.github.io/MyHOME/beta/configuration/troubleshooting/) * 🏛️ **[OpenWebNet Protocol & WHO Specifications Wiki](https://github.com/OpenWebNet-HA/MyHOME/wiki/OpenWebNet-Protocol-&-WHO-Specifications)** -* 🗺️ **[Development Roadmap](https://openwebnet-ha.github.io/MyHOME/latest/roadmap/)** and **[Stable v2.0.0 Pull Request #232](https://github.com/OpenWebNet-HA/MyHOME/pull/232)** +* 🗺️ **[Development Roadmap](https://openwebnet-ha.github.io/MyHOME/beta/roadmap/)** and **[Stable v2.0.0 Pull Request #232](https://github.com/OpenWebNet-HA/MyHOME/pull/232)** --- @@ -306,7 +307,7 @@ This integration is developed and maintained by the **[OpenWebNet-HA](https://gi * **[@xtimmy86x](https://github.com/xtimmy86x)** for crafting the frontend user experience, administration panel, cover calibration interfaces, and hardware diagnostics. * **[@gdluck](https://github.com/gdluck)** for outstanding engineering, invaluable ideas, and rigorous physical F461 plant measurements. * **[@TheDarkWizard](https://github.com/TheDarkWizard)** for crucial CEN+ wire address captures (KW8011), WHO 1001 diagnostics, and tireless real-world hardware testing across Living Now controls and MyHomeServer1 setups. -* **[@wave68runner](https://github.com/wave68runner)** for the authentic HL4684 touchscreen captures, BTicino 3550 thermoregulation sweeps, and tuner diagnostics. +* **[@wave68runner](https://github.com/wave68runner)** for authentic MH200N + MyHomeServer1 dual-gateway captures and BTicino 3550 central thermoregulation sweeps. * **[@Interstellar0verdrive](https://github.com/Interstellar0verdrive)** for deep hardware actuator analysis, cover timing/concurrency mechanics, and platform extensions. * **[@fedem95](https://github.com/fedem95)**, **[@mantovanellimatteo](https://github.com/mantovanellimatteo)**, **[@lyubomirtraykov](https://github.com/lyubomirtraykov)**, and **Cedric Rohou** for key bugfixes, platform extensions, and community testing. * **[@GianlucaCh](https://github.com/GianlucaCh)** for preserving and contributing the comprehensive 15-manual BTicino/Legrand specification archive (`OWN DOC.zip`), the official `WHO_24.pdf` Lighting Management specification, and CEN+ community automation references. @@ -315,20 +316,22 @@ This integration is developed and maintained by the **[OpenWebNet-HA](https://gi ### Hardware Traces & Real-World Validation Special gratitude to all community testers and trace providers whose real-world bus captures keep our 5,324+ CI tests grounded in real hardware: *"In traces we find the truth"* — their traces prove again and again that we can only build reliable stuff when we get authentic user traces: * **[@TheDarkWizard](https://github.com/TheDarkWizard)** for MyHomeServer1 automation command-translation echoes and WHO 4 heating/cooling Home+Control traces ([#378](https://github.com/OpenWebNet-HA/MyHOME/issues/378), [#429](https://github.com/OpenWebNet-HA/MyHOME/issues/429)). -* **[@wave68runner](https://github.com/wave68runner)** for MH200N + MyHomeServer1 dual-gateway 4-digit CEN scenario traces ([#624](https://github.com/OpenWebNet-HA/MyHOME/issues/624)), HL4684 touchscreen sweeps, and tuner diagnostics. +* **[@wave68runner](https://github.com/wave68runner)** for MH200N + MyHomeServer1 dual-gateway 4-digit CEN scenario traces ([#624](https://github.com/OpenWebNet-HA/MyHOME/issues/624)) and BTicino 3550 Central Unit sweep & WHO 4 diagnostic captures ([Discussion #819](https://github.com/orgs/OpenWebNet-HA/discussions/819), [#845](https://github.com/OpenWebNet-HA/MyHOME/pull/845)). * **[@gdluck](https://github.com/gdluck)** for MyHomeServer1 live climate heating/cooling season switching, timed relays, and F461 plant traces ([#649](https://github.com/OpenWebNet-HA/MyHOME/pull/649)). * **[@nicolacavallo84](https://github.com/nicolacavallo84)** for shared-bus dual gateway captures (MHS1 + H4890) and H4890 WHO 25 dry contacts ([#453](https://github.com/OpenWebNet-HA/MyHOME/issues/453), [#466](https://github.com/OpenWebNet-HA/MyHOME/issues/466)). * **[@lionelser](https://github.com/lionelser)** for Legrand F455 Basic Gateway full bus sweep, modular dimmers, and pushbutton captures ([#466](https://github.com/OpenWebNet-HA/MyHOME/issues/466)). * **[@f18m](https://github.com/f18m)** (Francesco Montorsi) for MyHomeServer1 & LN-4660M2 centralized shutter and advanced automation traces ([#445](https://github.com/OpenWebNet-HA/MyHOME/issues/445)). * **[@caiosweet](https://github.com/caiosweet)** for BTicino MH200N full bus sweep and climate probe knob offset cycle captures ([#466](https://github.com/OpenWebNet-HA/MyHOME/issues/466)). -* **[@gimprota76](https://github.com/gimprota76)** (Giovanni) for BTicino F454 burglar alarm (WHO 5) and auxiliary channel (WHO 9) traces ([#311](https://github.com/OpenWebNet-HA/MyHOME/issues/311)). +* **[@gimprota76](https://github.com/gimprota76)** (Giovanni) for BTicino F454 burglar alarm (3486, WHO 5) and auxiliary channel (WHO 9) traces ([#311](https://github.com/OpenWebNet-HA/MyHOME/issues/311), [#841](https://github.com/OpenWebNet-HA/MyHOME/pull/841)). * **[@paoloboatto](https://github.com/paoloboatto)** for MyHomeServer1 + F500 + H4562 `WHO=22` FM tuner RDS and preset traces ([#695](https://github.com/OpenWebNet-HA/MyHOME/pull/695)). +* **[@andrea-mag](https://github.com/andrea-mag)** for BTicino H/L4684 colour touchscreen (`FW 6.0.11`) full bus sweeps, F500 FM tuner, and WHO 3/4/16/22/1004 traces ([#466](https://github.com/OpenWebNet-HA/MyHOME/issues/466), [#818](https://github.com/OpenWebNet-HA/MyHOME/pull/818), [#839](https://github.com/OpenWebNet-HA/MyHOME/pull/839)). * **[@cricri72](https://github.com/cricri72)** for BTicino F454 + F411U2 cover calibration and diagnostic captures ([#730](https://github.com/OpenWebNet-HA/MyHOME/issues/730)). * **[@ricdijk](https://github.com/ricdijk)** for BTicino F454 WHO 4 99-zone central unit (`#0`) status captures ([#629](https://github.com/OpenWebNet-HA/MyHOME/issues/629)). -* **[@manfredgittmaier-afk](https://github.com/manfredgittmaier-afk)** for live shutter end-stop settle travel timer and limit stop captures ([#834](https://github.com/OpenWebNet-HA/MyHOME/issues/834)). -* **[@eC0y0te](https://github.com/eC0y0te)** for BTicino 3550 central thermoregulation mode change & probe hydration traces ([#819](https://github.com/OpenWebNet-HA/MyHOME/discussions/819)). -* **[@simo72mast-lab](https://github.com/simo72mast-lab)** for Legrand 067292 flush-mount IP gateway identification & diagnostics captures ([#832](https://github.com/OpenWebNet-HA/MyHOME/issues/832)). -* **[@marcob79](https://github.com/marcob79)**, **[@xduss](https://github.com/xduss)**, **[@pakob81](https://github.com/pakob81)**, **[@Depechie](https://github.com/Depechie)**, **[@nce2704](https://github.com/nce2704)**, **[@imfreddie](https://github.com/imfreddie)**, **[@theveninjeremy](https://github.com/theveninjeremy)**, and **[@Yvan13120](https://github.com/Yvan13120)** for essential real-world verification traces across diverse European SCS plants. +* **[@eC0y0te](https://github.com/eC0y0te)** for BTicino F454 + F401 tall Venetian shutter, mechanical slat-tilt, and 1 % position-step captures ([Discussion #770](https://github.com/orgs/OpenWebNet-HA/discussions/770), [#779](https://github.com/OpenWebNet-HA/MyHOME/pull/779), [#783](https://github.com/OpenWebNet-HA/MyHOME/pull/783)). +* **[@manfredgittmaier-afk](https://github.com/manfredgittmaier-afk)** for live shutter end-stop settle travel timer and limit-stop captures ([Discussion #770](https://github.com/orgs/OpenWebNet-HA/discussions/770), [#834](https://github.com/OpenWebNet-HA/MyHOME/pull/834), [#847](https://github.com/OpenWebNet-HA/MyHOME/pull/847)). +* **[@Yvan13120](https://github.com/Yvan13120)** for Legrand 067292 (Céliane 3.5" touchscreen) IP gateway identification & 500-frame bus diagnostics ([#832](https://github.com/OpenWebNet-HA/MyHOME/issues/832), [#853](https://github.com/OpenWebNet-HA/MyHOME/pull/853)). +* **[@emil-d](https://github.com/emil-d)** for BTicino MH201 (`FW 3.6.43`) + F414 dimmer sweep & WHO 1013 identity captures ([#466](https://github.com/OpenWebNet-HA/MyHOME/issues/466), [#824](https://github.com/OpenWebNet-HA/MyHOME/pull/824), [#827](https://github.com/OpenWebNet-HA/MyHOME/pull/827)). +* **[@marcob79](https://github.com/marcob79)**, **[@xduss](https://github.com/xduss)**, **[@pakob81](https://github.com/pakob81)**, **[@Depechie](https://github.com/Depechie)**, **[@nce2704](https://github.com/nce2704)**, **[@imfreddie](https://github.com/imfreddie)**, **[@theveninjeremy](https://github.com/theveninjeremy)**, and **[@simo72mast-lab](https://github.com/simo72mast-lab)** for essential real-world verification traces across diverse European SCS plants. ---