diff --git a/.github/ISSUE_TEMPLATE/audio_field_report.yml b/.github/ISSUE_TEMPLATE/audio_field_report.yml index 45e4d100e..ebe1ca1b3 100644 --- a/.github/ISSUE_TEMPLATE/audio_field_report.yml +++ b/.github/ISSUE_TEMPLATE/audio_field_report.yml @@ -25,8 +25,8 @@ body: 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" + description: MyHOME (e.g. 2.0.0b17), Home Assistant, and Music Assistant versions. + placeholder: "MyHOME 2.0.0b17, HA 2026.10.1, Music Assistant 2.x" validations: required: true diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index e63025165..762690ac2 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -96,8 +96,8 @@ body: 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" + description: Exact version of the MyHOME integration (please verify on the latest v2 Phase 1 beta release, e.g. 2.0.0b17). + placeholder: "e.g. 2.0.0b17" validations: required: true @@ -159,7 +159,7 @@ body: options: - label: "I have written this issue in English." required: true - - label: "I have specified my MyHOME version (e.g. 2.0.0b16), Home Assistant version, Gateway model, and Gateway firmware version (or 'unknown / unavailable')." + - label: "I have specified my MyHOME version (e.g. 2.0.0b17), Home Assistant version, Gateway model, and Gateway firmware version (or 'unknown / unavailable')." required: true - 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 2bb4579fd..bcbc50ab0 100644 --- a/.github/ISSUE_TEMPLATE/device_request.yml +++ b/.github/ISSUE_TEMPLATE/device_request.yml @@ -27,7 +27,7 @@ body: attributes: label: Gateway Model, Firmware & MyHOME Integration Version 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" + placeholder: "e.g. MyHomeServer1 (FW 3.1.8, or 'unknown / unavailable'), MyHOME 2.0.0b17, HA 2026.10.1" validations: required: true @@ -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 (or 'unknown / unavailable'), 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.0b17)." required: true - 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/release-notes/2.0.0b17.md b/.github/release-notes/2.0.0b17.md index d186e45ec..7fcdcf207 100644 --- a/.github/release-notes/2.0.0b17.md +++ b/.github/release-notes/2.0.0b17.md @@ -1,20 +1,53 @@ -### πŸš€ Pre-Release: v2.0.0b17 (Field-Testing Beta) +### πŸš€ Pre-Release: v2.0.0b17 β€” In Traces We Find The Truth (Field-Testing Beta) - +61 pull requests since b16, on **OWNd 2.0.0b13**. Requires Home Assistant 2026.3 or newer. -Pull requests since b16, on **OWNd 2.0.0b13**. Requires Home Assistant 2026.3 or newer. +> *"In traces we find the truth."* +> Once again, our community of testers and trace contributors has proven that building rock-solid OpenWebNet integrations cannot be done by guessing or assuming protocol behavior. It is only when authentic on-wire bus frames are captured, analyzed against firmware oracle verdicts, and deterministically replayed in CI that edge cases vanish and true hardware fidelity is reached. -#### ⚠️ Behaviour changes: covers (WHO 2), #770, #837 +#### ⚠️ Behaviour changes: covers (WHO 2), #770, #778, #837, #847 -- **Timed covers: `open_cover`, `close_cover`, scope runs, and wall-switch full runs now settle on `travel_time` + 2 s from known positions too.** Previously only `set_cover_position: 0` / `100` and runs from `unknown` settled on the travel timer, while full runs from a known position waited for the actuator's own `*2*0*WHERE##` stop status (~60 s at factory `M=0`, 120 s at `M=1` on `F411` actuators driving 60–86 s shutters in #770, or never on `M=4` / gateways that do not relay it). Every full run of a timed cover now reports 0 % / 100 % (`closed` / `open`) once the stored travel time plus 2 s has passed, and recomputes the remaining settle delay if `myhome.set_cover_travel_time` or `myhome.reset_cover_travel_time` is called mid-run. Stopping midway still freezes the interpolated position and records `last_run_seconds`; stop frames arriving after the timer has settled do not overwrite `last_run_seconds` (to time a shutter longer than the 25 s default with **Stop**, set a temporary larger `travel_time` first). -- **Timed covers: the actuator's own stop up to 0.5 s before the stored travel time is the end stop.** On a full run from a known position (own `open_cover` / `close_cover`, a scope run, a wall-switch run) a plain `*2*0*WHERE##` that arrives within 0.5 s before `travel_time` now settles the cover at 0 % / 100 % at once instead of freezing the timed estimate one or two percent short of the end (live F461 / F411/2 at 5.82 s: the limit stop came 5.74–5.76 s after the motor start and left `open 1 %` / `open 98 %`). Stops HA sends, translated keypad stops (`*2*1000#0*WHERE##`) and stops further from the end still freeze the estimate; `last_run_seconds` keeps the measured run. -- **WHO 2 command-translation stop frames (`*2*1000#0*WHERE##` / `*2*1000#10…*WHERE##`) stop active timed runs.** Gateways such as `MyHomeServer1` occasionally relay a keypad or scenario stop only as `*2*1000#0*WHERE##` without the trailing `*2*0*WHERE##` status (#645); timed covers now freeze the position and cancel any settle timer on that translated stop, while re-anchoring on `*2*0*WHERE##` when the plain status follows within the echo window. -- **`myhome.calibrate_cover` refuses every configurator run-time limit, not only 60 s.** A run that ends from 1 s before a whole-minute limit to 5 s per minute after it (59–65 s at 60 s, 119–130 s at 120 s for an `F411` at `M=1` or the ~125.5–127.1 s stops on `4672` actuators in #433, and so on up to 10 min) was accepted before above 60 s, storing the limit as the travel time with `calibration_source: measured`; it now fails at once like the 60 s one, nothing is stored, and the `failed` event carries `actuator_limit` (#837). +- **Timed covers: `open_cover`, `close_cover`, scope runs, and wall-switch full runs now settle on `travel_time` + 2 s from known positions too.** Previously only `set_cover_position: 0` / `100` and runs from `unknown` settled on the travel timer, while full runs from a known position waited for the actuator's own `*2*0*WHERE##` stop status (~60 s at factory `M=0`, 120 s at `M=1` on `F411` actuators driving 60–86 s shutters in #770, or never on `M=4` / gateways that do not relay it). Every full run of a timed cover now reports 0 % / 100 % (`closed` / `open`) once the stored travel time plus 2 s has passed, and recomputes the remaining settle delay if `myhome.set_cover_travel_time` or `myhome.reset_cover_travel_time` is called mid-run (#834). +- **Timed covers: the actuator's own stop up to 0.5 s before the stored travel time is the end stop.** On a full run from a known position (own `open_cover` / `close_cover`, a scope run, a wall-switch run) a plain `*2*0*WHERE##` that arrives within 0.5 s before `travel_time` now settles the cover at 0 % / 100 % at once instead of freezing the timed estimate one or two percent short of the end (measured on live F461 / F411/2 at 5.82 s: limit stop came 5.74–5.76 s after motor start and left `open 1 %` / `open 98 %`) (#847). +- **Configurable `min_position_delta` (1–5 %, default 2 %).** Requested in discussion #770 by @eC0y0te for tall shutters and fine slat angle adjustments where 1 % motor increments (~0.5 s) are physically meaningful (#778). +- **WHO 2 command-translation stop frames (`*2*1000#0*WHERE##`) stop active timed runs.** Gateways such as `MyHomeServer1` occasionally relay a keypad or scenario stop only as `*2*1000#0*WHERE##` without trailing plain status (#645); timed covers now freeze position and cancel settle timers on translated stops (#834). +- **`myhome.calibrate_cover` refuses every configurator run-time limit, not only 60 s.** Runs ending near whole-minute limits (59–65 s, 119–130 s on `F411` at `M=1`, up to 10 min) are rejected immediately as `actuator_limit` failures rather than stored as false travel times (#837, #843). -See the cover docs for the details and the known limits. +#### ⚠️ Other behaviour changes + +- **Lighting: fine dimmer preset echo & coarse curve alignment.** Fixed preset echo synchronization on fine dimmers (`WHAT 101`–`199`) and autodiscovered dimmers (#851, #852), and aligned coarse preset curve values with hardware dimming levels (#828). +- **Climate: 3550 99-zone Central Unit hydration & diagnostics.** Full mode hydration, active setpoint management, and diagnostic attributes for BTicino 3550 master panels following real-plant traces from Discussion #819 (#845, #846). +- **Climate: Thermo actuator switch platform.** New manual switch entities (`switch`) to directly actuate heating solenoids on demand (Issue #785, #817). +- **Binary Sensors: UI inverted state option.** Added per-entity UI option to invert binary sensor states (Issue #826, #829). + +#### Other changes + +- **Engine & Gateways**: Pinned upstream **OWNd 2.0.0b13** (#848); added profile alias for Legrand 067292 gateway (Issue #832, #854); per-firmware startup requests (#794); manual gateway model identification in config flow (#804); resolved flaky multi-gateway dispatcher callbacks (#850); door-entry WHO 6 gateway boundary enforcement (#835). +- **Audio (WHO 16 / 22)**: F500 FM tuner entities now support band, preset, and frequency controls with live HL4684 trace replay (#839); stored station frequency range checks and Dimension 10 bounds (#844); fixed-feed amplifier volume (#774). +- **Burglar Alarm (WHO 5)**: Added HomeKit arm-away read-only mode (#842); integrated live BTicino 3486 central unit alarm trace replay (#841). +- **Lighting & Actuators**: Clean coexistence when a lighting actuator and motion detector share the same SCS address `WHERE` (#777, #781); Dimension 22 guard form crash fix (#849); bus-truthful state updates and resync coordinator (#771). +- **Covers**: Unknown start position handling (#795); cover device class refinements (#796); scope member settle travel recompute (#820). +- **Home Assistant 2026.11 / 2026.12 Readiness**: Entity `compat_name` registry preservation (#772); logger compatibility (#769); deprecation guards active across test suites (#790). +- **Trace Replay CI Engine**: Over **5,300 automated tests passing with 100% statement coverage (5,324 tests)**, backed by new on-wire plant fixtures across F461, HL4684, Legrand 067292, F454, MH200N, and MH201. + +#### πŸ‘₯ Heartfelt Thanks to Our Reviewers, Contributors & Trace Providers + +Our deepest thanks to everyone who makes this project possible: +- **Reviewers & Maintainers**: + - **[@anotherjulien](https://github.com/anotherjulien)** for establishing the foundations of MyHOME on Home Assistant. + - **[@fedem95](https://github.com/fedem95)** and **[@Interstellar0verdrive](https://github.com/Interstellar0verdrive)** for continuous deep code reviews, timing insights, and platform guidance. + - **[@gdluck](https://github.com/gdluck)** for outstanding engineering, invaluable ideas, and rigorous physical F461 plant measurements. +- **Trace Contributors & Testers**: + - **[@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 (#818, #839). + - **[@simo72mast-lab](https://github.com/simo72mast-lab)** for the BTicino 3550 / MH200N thermoregulation traces and mode diagnostic captures (Discussion #819, #845). + - **[@manfredgittmaier-afk](https://github.com/manfredgittmaier-afk)** for detailed MH200N + F411 timing reports that shaped the end-stop settle engine (#770, #834, #847). + - **[@eC0y0te](https://github.com/eC0y0te)** for the F454 + F401 Venetian slat captures that led to `min_position_delta` (#770, #778). + - **[@lionelser](https://github.com/lionelser)** for the Legrand 067292 gateway diagnostics that closed Issue #832 (#853, #854). + - **[@marcob79](https://github.com/marcob79)** for the MH201 + F414 dimmer traces (#824, #827). + - **[@f18m](https://github.com/f18m)** for the BTicino 3486 central burglar alarm traces (#841). + - **[@caiosweet](https://github.com/caiosweet)** for the MH200N dimmer traces (#776). Docs: https://openwebnet-ha.github.io/MyHOME/beta/ -Feedback and logs: https://github.com/orgs/OpenWebNet-HA/discussions/653 +Feedback and logs: https://github.com/orgs/OpenWebNet-HA/discussions/770 diff --git a/README.md b/README.md index 6a92db40a..9e633a0e9 100644 --- a/README.md +++ b/README.md @@ -158,7 +158,7 @@ We now maintain a comprehensive, community-curated **[GitHub Wiki](https://githu > [!WARNING] > **⚠️ Do NOT use HACS to install beta / pre-release versions!** > In **HACS 2.0+**, pre-release access was moved to Home Assistant entity switches (`switch.myhome_pre_release`) that are disabled by default. Due to upstream Home Assistant registry caching, enabling these switches frequently gets stuck in an *"unavailable"* loop or reverts to *"disabled"*. Furthermore, because pre-releases are built on the active development branch (`v2-phase1-architecture`) while the default branch is `master`, HACS download validation frequently fails with: -> `The version 2.0.0b16 for this integration can not be used with HACS` +> `The version 2.0.0b17 for this integration can not be used with HACS` > > **To avoid frustration, please use Method 1 (Terminal & SSH) or Method 2 (Manual) below β€” they take less than 10 seconds and preserve all existing devices, entities, and settings 100% safely.** @@ -174,9 +174,9 @@ cd /config/custom_components [ -d myhome.backup ] && mv myhome.backup /config/myhome_backup_old # Create a safety backup in /config (outside custom_components) before updating: [ -d myhome ] && rm -rf /config/myhome_backup && cp -r myhome /config/myhome_backup -# Download and install the latest v2.0.0b16 release: +# Download and install the latest v2.0.0b17 release: rm -rf myhome -wget -O myhome_beta.zip https://github.com/OpenWebNet-HA/MyHOME/releases/download/2.0.0b16/myhome.zip +wget -O myhome_beta.zip https://github.com/OpenWebNet-HA/MyHOME/releases/download/2.0.0b17/myhome.zip unzip -q myhome_beta.zip -d myhome rm myhome_beta.zip ha core restart @@ -184,7 +184,7 @@ ha core restart *(For **Home Assistant Container / Docker**, run on your Docker host:)* ```bash -docker exec -it homeassistant bash -c 'cd /config/custom_components && [ -d myhome.backup ] && mv myhome.backup /config/myhome_backup_old; [ -d myhome ] && rm -rf /config/myhome_backup && cp -r myhome /config/myhome_backup; rm -rf myhome && wget -O myhome_beta.zip https://github.com/OpenWebNet-HA/MyHOME/releases/download/2.0.0b16/myhome.zip && unzip -q myhome_beta.zip -d myhome && rm myhome_beta.zip' +docker exec -it homeassistant bash -c 'cd /config/custom_components && [ -d myhome.backup ] && mv myhome.backup /config/myhome_backup_old; [ -d myhome ] && rm -rf /config/myhome_backup && cp -r myhome /config/myhome_backup; rm -rf myhome && wget -O myhome_beta.zip https://github.com/OpenWebNet-HA/MyHOME/releases/download/2.0.0b17/myhome.zip && unzip -q myhome_beta.zip -d myhome && rm myhome_beta.zip' docker restart homeassistant ``` @@ -196,7 +196,7 @@ docker restart homeassistant ### Method 2: Manual Installation (Archive / Samba) 1. Download the release package: - πŸ‘‰ **[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)) + πŸ‘‰ **[Download myhome.zip (v2.0.0b17)](https://github.com/OpenWebNet-HA/MyHOME/releases/download/2.0.0b17/myhome.zip)** (or browse all [GitHub Releases](https://github.com/OpenWebNet-HA/MyHOME/releases)) 2. Open your Home Assistant configuration directory (via **Samba Share**, **Studio Code Server**, or **File Editor** add-on). 3. **Important:** If you wish to back up your existing `myhome` folder first, copy it to `/config/myhome_backup/` (**outside** `custom_components/`). **Never rename or copy it to `custom_components/myhome.backup`.** 4. Extract `myhome.zip` directly into `/config/custom_components/myhome/` (overwriting the existing files). @@ -769,7 +769,7 @@ The development of the MyHOME integration is organized into strategic release mi - [x] Power meters and energy counters (`WHO = 18`) as Home Assistant energy sensors. - [ ] Energy management central units & multi-function power meters (`WHO = 18` F520/F521/F522/F523/3522): not started, needs a scope decision and captures. - ~~Multi-room FM tuner presets and RDS metadata (`WHO = 22`)~~: formally deprecated in favour of the Dynamic Streaming Proxy. -- [ ] **Stable v2.0.0**: merge the v2 line ([PR #232](https://github.com/OpenWebNet-HA/MyHOME/pull/232)) into `master` so HACS users receive it; today every release is a pre-release (latest: v2.0.0b16). +- [ ] **Stable v2.0.0**: merge the v2 line ([PR #232](https://github.com/OpenWebNet-HA/MyHOME/pull/232)) into `master` so HACS users receive it; today every release is a pre-release (latest: v2.0.0b17). --- diff --git a/ROADMAP.md b/ROADMAP.md index 29977c09c..6a3944b12 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -6,9 +6,9 @@ Our overarching mission is to provide the most reliable, complete, and high-perf --- -## πŸ—ΊοΈ Current Delivery Status (Unified Beta v2.0.0b16 & Platinum IQS) +## πŸ—ΊοΈ Current Delivery Status (Unified Beta v2.0.0b17 & Platinum IQS) -Through intense community collaboration and engineering, the major architectural milestones originally planned across Phases 1, 2, 3, and 4 have been **consolidated, fully implemented, and validated with 100% statement and branch test coverage** in the **v2.0.0b16 Unified Beta**. Furthermore, **Phase 5 (Home Assistant Integration Quality Scale)** has been achieved ahead of schedule, with the integration officially qualifying for the **πŸ† Platinum Quality Scale** and strict typing enforced with zero errors across all modules. +Through intense community collaboration and engineering, the major architectural milestones originally planned across Phases 1, 2, 3, and 4 have been **consolidated, fully implemented, and validated with 100% statement and branch test coverage** in the **v2.0.0b17 Unified Beta**. Furthermore, **Phase 5 (Home Assistant Integration Quality Scale)** has been achieved ahead of schedule, with the integration officially qualifying for the **πŸ† Platinum Quality Scale** and strict typing enforced with zero errors across all modules. ```mermaid gantt @@ -35,6 +35,12 @@ gantt Venetian Blind Slat Tilt (#508) & Impulse Gate Covers (#667) :done, 2026-10-08, 2026-10-19 WHO 22 Tuner RDS (#695) & WHO 25 Scenario Plus (#671) :done, 2026-10-08, 2026-10-16 Expose HA Entities to the Bus (#750) :done, 2026-10-14, 2026-10-21 + section Delivered in v2.0.0b17 + Cover End-Stop Settle (#834, #847) & Min Delta (#778) :done, 2026-10-22, 2026-11-04 + Central Unit 3550 Hydration & Actuator Switch (#817, #846) :done, 2026-10-25, 2026-11-04 + OWNd 2.0.0b13 Pin & Legrand 067292 Alias (#848, #854) :done, 2026-10-26, 2026-11-04 + F500 FM Tuner Controls & Station Range Bounds (#839, #844) :done, 2026-10-28, 2026-11-04 + Dimmer Preset Echo & Coarse Curve Alignment (#828, #852) :done, 2026-10-28, 2026-11-04 section Active Community Collaboration RFC - Dedicated Admin Panel & Cover Travel Profiles (#374) :active, 2026-09-16, 2026-10-15 RFC - Scope Resolution for WHO 14, WHO 24, WHO 22 :active, 2026-09-11, 2026-10-15 @@ -44,15 +50,16 @@ gantt --- -## πŸ“¦ What is Shipped & Operational in v2.0.0b16 +## πŸ“¦ What is Shipped & Operational in v2.0.0b17 The following table summarizes the completed architectural features and protocol subsystems verified in the current release: | Priority / Feature | Subsystem | Implementation Status | Highlights | |---|---|---|---| +| **Cover End-Stop Settle & Min Delta** | WHO=2 | βœ… **Shipped** (#778, #834, #843, #847) | Timed covers full run settle on `travel_time + 2s`, 0.5 s early cutoff tolerance, configurable `min_position_delta` (1–5%), and configurator limit refusal in calibration. | | **Expose HA Entities to the Bus** | Core / WHO=1, 2, 4, 13, 18 | βœ… **Shipped** (#750) | Declarative `expose` engine: virtual WHO 1 / WHO 2 actuators a wall control can drive (HA state mirrored back to its LEDs), WHO 4 virtual temperature probes, WHO 18 virtual energy meters and the WHO 13 bus clock; custom actions run as Home Assistant scripts. | | **Venetian Blinds, Impulse Gates & Cover Start-Up Floor** | WHO=2 / WHO=1 | βœ… **Shipped** (#508, #667, #702, #707, #708) | Slat tilt as timed slat pulses (`slat_tilt`, `slat_time`); impulse garage / gate covers on WHO 1 relays with optional safety approval; per-cover `min_motor_pulse`, full runs at 0 % / 100 %, and timed runs ended at the actuator's stop status. | -| **Standalone Protocol Engine (P1)** | Core | βœ… **Shipped** (`OWNd 2.0.0b11`) | Extracted into an independent, strongly typed Python library on PyPI; PEP 561 `py.typed` compliance, optimized HMAC-SHA256 handshake ($O(N)$ string generation), shared with CLI tools and MCP servers. | +| **Standalone Protocol Engine (P1)** | Core | βœ… **Shipped** (`OWNd 2.0.0b13`) | Extracted into an independent, strongly typed Python library on PyPI; PEP 561 `py.typed` compliance, optimized HMAC-SHA256 handshake ($O(N)$ string generation), shared with CLI tools and MCP servers. | | **Lighting Groups & General Debounced Resync (P7)** | WHO=1 | βœ… **Shipped** (#367, #376, #377, #391) | Declared groups in `myhome.yaml` (`where: '#G'`, optional `members:`) with aggregate status or `assumed_state`; 250 ms debounced sweep with bidirectional echo window and per-address cancellation; truthful event emission and centralized `FrameRouter` integration. | | **Strict Typing & Platinum Quality Seal** | Core / IQS | βœ… **Shipped** (`quality_scale.yaml`) | 100% compliance across all Bronze, Silver, Gold, and Platinum rules; strict `mypy` typing with 0 errors across all 30 integration modules. | | **CEN / CEN+ UI Device Triggers (P2)** | WHO=15 / 25 | βœ… **Shipped** | First-class Home Assistant UI device triggers with string-preserved addressing (`"0001"`), gateway MAC isolation, and all 8 press/held/release actions. | @@ -204,7 +211,7 @@ graph LR #### 5. 🌐 Release Status: Stable v2.0.0 * **Branding Assets (`brands`)**: Already in place. The MyHOME icon and logo were merged into `home-assistant/brands` in [`#2052`](https://github.com/home-assistant/brands/pull/2052) (2020-11-30, for the original integration); nothing is pending. -* **PR #232 (`v2-phase1-architecture` β†’ `master`)**: The pull request that brings v2 to `master` inside this repository, so that HACS users receive it as a stable release; it is not a Home Assistant core submission. It is mergeable and awaiting review. Every release so far (latest `v2.0.0b16`) is a pre-release, and the integration requires Home Assistant 2026.3 or newer (Python 3.14). +* **PR #232 (`v2-phase1-architecture` β†’ `master`)**: The pull request that brings v2 to `master` inside this repository, so that HACS users receive it as a stable release; it is not a Home Assistant core submission. It is mergeable and awaiting review. Every release so far (latest `v2.0.0b17`) is a pre-release, and the integration requires Home Assistant 2026.3 or newer (Python 3.14). --- diff --git a/custom_components/myhome/const.py b/custom_components/myhome/const.py index 97b8d2163..aa8720434 100644 --- a/custom_components/myhome/const.py +++ b/custom_components/myhome/const.py @@ -23,7 +23,7 @@ ATTR_MESSAGE = "message" ATTR_WHERE = "where" ATTR_ACTION = "action" -INTEGRATION_VERSION = "2.0.0b16" +INTEGRATION_VERSION = "2.0.0b17" # hass.data[DOMAIN] key holding the OWNd version resolved off the event loop DATA_OWND_VERSION = "_ownd_version" diff --git a/custom_components/myhome/frontend/myhome-bus-card.js b/custom_components/myhome/frontend/myhome-bus-card.js index 6f18f51e0..40e8c99d7 100644 --- a/custom_components/myhome/frontend/myhome-bus-card.js +++ b/custom_components/myhome/frontend/myhome-bus-card.js @@ -6,7 +6,7 @@ */ // Fallback only: the live value comes from the backend (bus_monitor/info -> integration_version). -const CARD_VERSION = "2.0.0b16"; +const CARD_VERSION = "2.0.0b17"; // Default display buffer = the backend ring (bus_monitor.DEFAULT_RING_BUFFER_SIZE), so a // backfill after an HA restart keeps the whole startup status sweep (#429). const DEFAULT_MAX_FRAMES = 500; diff --git a/custom_components/myhome/manifest.json b/custom_components/myhome/manifest.json index 351fc9909..6875f1e67 100644 --- a/custom_components/myhome/manifest.json +++ b/custom_components/myhome/manifest.json @@ -110,5 +110,5 @@ "modelName": "MH201" } ], - "version": "2.0.0b16" + "version": "2.0.0b17" } diff --git a/docs/getting-started/installation.md b/docs/getting-started/installation.md index df3a67422..e6903c7a8 100644 --- a/docs/getting-started/installation.md +++ b/docs/getting-started/installation.md @@ -24,7 +24,7 @@ If you have the **Terminal & SSH** add-on installed (or connect via SSH), paste ```bash # Set target beta release version (check https://github.com/OpenWebNet-HA/MyHOME/releases) -TAG="2.0.0b16" +TAG="2.0.0b17" # Download, extract cleanly, verify, and restart Home Assistant mkdir -p /config/custom_components && cd /config/custom_components && \ diff --git a/docs/migration/upgrade-from-094.md b/docs/migration/upgrade-from-094.md index b39883f22..54edde8a2 100644 --- a/docs/migration/upgrade-from-094.md +++ b/docs/migration/upgrade-from-094.md @@ -44,7 +44,7 @@ If you have the **Terminal & SSH** add-on installed (or connect via SSH), paste ```bash # Set target beta release version (check https://github.com/OpenWebNet-HA/MyHOME/releases) -TAG="2.0.0b16" +TAG="2.0.0b17" # Download, extract cleanly, verify, and restart Home Assistant mkdir -p /config/custom_components && cd /config/custom_components && \ diff --git a/docs/roadmap.md b/docs/roadmap.md index 8f3a943c4..99a6a957f 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -10,9 +10,9 @@ Our overarching mission is to provide the most reliable, complete, and high-perf --- -## πŸ—ΊοΈ Current Delivery Status (v2.0.0 Beta Series, b16 Released) +## πŸ—ΊοΈ Current Delivery Status (v2.0.0 Beta Series, b17 Released) -The major architectural milestones originally planned across Phases 1 through 4 have been **consolidated, fully implemented, and validated with 100% statement and branch test coverage** across the **v2.0.0b1 through v2.0.0b16** releases. **v2.0.0b15** was published on 2026-10-07; **v2.0.0b16** follows with the 83 pull requests merged since, on OWNd 2.0.0b11. The remaining work is v2.0.0 stabilization: see *Final Stabilization* below. +The major architectural milestones originally planned across Phases 1 through 4 have been **consolidated, fully implemented, and validated with 100% statement and branch test coverage** across the **v2.0.0b1 through v2.0.0b17** releases. **v2.0.0b16** was published on 2026-10-21; **v2.0.0b17** follows with the 61 pull requests merged since, on OWNd 2.0.0b13. The remaining work is v2.0.0 stabilization: see *Final Stabilization* below. ```mermaid gantt @@ -51,6 +51,12 @@ gantt Venetian Blind Slat Tilt (#492, #508) :done, 2026-09-23, 2026-10-18 Impulse Gate & Garage Covers, Intercom Events (#667) :done, 2026-10-08, 2026-10-19 Expose HA Entities to the Bus (#750) :done, 2026-10-14, 2026-10-21 + section Released in v2.0.0b17 + Cover End-Stop Settle (#834, #847) & Min Delta (#778) :done, 2026-10-22, 2026-11-04 + Central Unit 3550 Hydration & Actuator Switch (#817, #846) :done, 2026-10-25, 2026-11-04 + OWNd 2.0.0b13 Pin & Legrand 067292 Alias (#848, #854) :done, 2026-10-26, 2026-11-04 + F500 FM Tuner Controls & Station Range Bounds (#839, #844) :done, 2026-10-28, 2026-11-04 + Dimmer Preset Echo & Coarse Curve Alignment (#828, #852) :done, 2026-10-28, 2026-11-04 section Final Stabilization v2.0.0 Release Candidate & Distribution Consultation :2026-10-05, 2026-11-15 ``` diff --git a/docs/roadmap/beta-differences.md b/docs/roadmap/beta-differences.md index 3aa8d6c19..83a227d1e 100644 --- a/docs/roadmap/beta-differences.md +++ b/docs/roadmap/beta-differences.md @@ -8,28 +8,39 @@ This guide provides a comprehensive comparison matrix and chronological delta lo The table below outlines feature availability, gateway support, and protocol capabilities across all release milestones: -| Feature / Subsystem | v2.0.0b1 – b4 | v2.0.0b5 – b8 | v2.0.0b9 – b10 | v2.0.0b11 | v2.0.0b13 | v2.0.0b14 | v2.0.0b15 | v2.0.0b16 (Latest) | -| :--- | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | -| **Protocol Engine (`OWNd`)** | Embedded `0.7.48` | `2.0.0b5` (PyPI) | `2.0.0b5` (PyPI) | `2.0.0b6` (PyPI) | `2.0.0b8` (HMAC refactor) | `2.0.0b9` | `2.0.0b10` | `2.0.0b11` | -| **Command Worker Concurrency** | Static (1 worker) | Static (1 worker) | Static (1 worker) | Dynamic (1–4) | Dynamic (1–4, model-capped) | Dynamic (1–4, model-capped) | Per-profile session defaults (#606) | User commands ahead of polls, frame scheduler (#685, #738) | -| **Gateway In-Place Reconfiguration** | ❌ Delete & Re-add | ❌ Delete & Re-add | ❌ Delete & Re-add | ❌ Delete & Re-add | βœ… IP, Password, Model in Options | βœ… IP, Password, Model in Options | βœ… IP, Password, Model in Options | βœ… IP, Password, Model in Options | -| **Dimmer Transitions** | `software_stepped` | `software_stepped` | `software_stepped` (shielded) | `software_stepped` / `native` | `software_stepped` / `native` | `software_stepped` / `native` | `software_stepped` / `native` | Fade steps sent at low priority (#739) | -| **Command Translation (`WHAT=1000`)** | State flicker | State flicker | βœ… Filtered / Preserved | βœ… Filtered / Preserved | βœ… Filtered / Preserved | βœ… Filtered / Preserved | βœ… Filtered / Preserved | βœ… Filtered / Preserved | -| **DALI Color & Tunable White** | ❌ | ❌ | ❌ | βœ… Native HSV (Dim 12) + DT8 (Dim 14) | βœ… Native HSV (Dim 12) + DT8 (Dim 14) | βœ… Native HSV (Dim 12) + DT8 (Dim 14) | βœ… Native HSV (Dim 12) + DT8 (Dim 14) | βœ… Native HSV (Dim 12) + DT8 (Dim 14) | -| **Thermoregulation (`WHO = 4`)** | Basic zones | Basic zones | Basic zones | Central Units 3550 / 4695 | Fan mode restore (#404) | Climate zone state & sweep (#457) | Central mode commands aligned (#630) | Seasons, holiday programs, humidity (#657, #689, #712) | -| **Cover Concurrency Isolation** | Standard | Standard | Standard | Dedicated queue | Dedicated queue | Full run-stop lock (#433) | Full run-stop lock (#433) | Stop overtakes the queue (#694) | -| **Cover Positioning (`WHO = 2`)** | Travel time | Travel time | Travel time | Travel time | Travel time | Travel time | Travel time | Start-up floor, full runs, slat tilt (#702, #708, #508) | -| **Sound System (`WHO = 16 / 22`)** | ❌ | Basic Matrix | Basic Matrix | Volume normalization & Proxy | Dynamic Proxy Decoders | FM Tuner stepping + Matrix names | FM Tuner stepping + Matrix names | WHO 22 tuner RDS, source transport (#695, #651) | -| **CEN / CEN+ Triggers (`WHO = 15/25`)** | Basic events | Basic events | Duplicate ID fix (#247) | UI Device Triggers (all 8 actions) | Long-press repeat debouncing | Centralized control triggers (#466) | 4-digit addresses, fail-closed triggers (#601, #624) | WHO 25 Scenario Plus (#671) | -| **Expose HA Entities to the Bus** | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | βœ… WHO 1/2/4/13/18 (#750) | -| **Lovelace Bus Monitor Card** | ❌ CLI only | βœ… In-band card | Scoped registry fix (#277) | Export trace / Report issue | Filter & style refinements | Offline bus replay tab | Offline bus replay tab | Offline bus replay tab | -| **Trace Replay CI Engine** | ❌ Unit tests only | ❌ Unit tests only | Golden frame checks | βœ… Synthetic plant fixtures | Plant #247 & MH200 fixtures | Multi-plant matrix (F454, MH202, H4890) | F455, MH200 + F422, Living Now captures | Live F461 plants, firmware oracle checks | -| **Test Suite Statements Covered** | ~850 tests | 984 tests (100%) | 1,140 tests (100%) | 1,294 tests (100%) | 1,320 tests (100%) | 1,350+ tests (100%) | 3,464 tests (100%) | 4,393 tests (100%) | +| Feature / Subsystem | v2.0.0b1 – b4 | v2.0.0b5 – b8 | v2.0.0b9 – b10 | v2.0.0b11 | v2.0.0b13 | v2.0.0b14 | v2.0.0b15 | v2.0.0b16 | v2.0.0b17 (Latest) | +| :--- | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| **Protocol Engine (`OWNd`)** | Embedded `0.7.48` | `2.0.0b5` (PyPI) | `2.0.0b5` (PyPI) | `2.0.0b6` (PyPI) | `2.0.0b8` (HMAC refactor) | `2.0.0b9` | `2.0.0b10` | `2.0.0b11` | `2.0.0b13` | +| **Command Worker Concurrency** | Static (1 worker) | Static (1 worker) | Static (1 worker) | Dynamic (1–4) | Dynamic (1–4, model-capped) | Dynamic (1–4, model-capped) | Per-profile session defaults (#606) | User commands ahead of polls, frame scheduler (#685, #738) | Dispatcher callback concurrency (#850) | +| **Gateway In-Place Reconfiguration** | ❌ Delete & Re-add | ❌ Delete & Re-add | ❌ Delete & Re-add | ❌ Delete & Re-add | βœ… IP, Password, Model in Options | βœ… IP, Password, Model in Options | βœ… IP, Password, Model in Options | βœ… IP, Password, Model in Options | βœ… IP, Password, Model in Options | +| **Dimmer Transitions** | `software_stepped` | `software_stepped` | `software_stepped` (shielded) | `software_stepped` / `native` | `software_stepped` / `native` | `software_stepped` / `native` | `software_stepped` / `native` | Fade steps sent at low priority (#739) | Fine preset echo & curve (#828, #852) | +| **Command Translation (`WHAT=1000`)** | State flicker | State flicker | βœ… Filtered / Preserved | βœ… Filtered / Preserved | βœ… Filtered / Preserved | βœ… Filtered / Preserved | βœ… Filtered / Preserved | βœ… Filtered / Preserved | Translated stop halts timed runs (#645) | +| **DALI Color & Tunable White** | ❌ | ❌ | ❌ | βœ… Native HSV (Dim 12) + DT8 (Dim 14) | βœ… Native HSV (Dim 12) + DT8 (Dim 14) | βœ… Native HSV (Dim 12) + DT8 (Dim 14) | βœ… Native HSV (Dim 12) + DT8 (Dim 14) | βœ… Native HSV (Dim 12) + DT8 (Dim 14) | βœ… Native HSV (Dim 12) + DT8 (Dim 14) | +| **Thermoregulation (`WHO = 4`)** | Basic zones | Basic zones | Basic zones | Central Units 3550 / 4695 | Fan mode restore (#404) | Climate zone state & sweep (#457) | Central mode commands aligned (#630) | Seasons, holiday programs, humidity (#657, #689, #712) | 3550 Central Unit hydration & switch (#817, #846) | +| **Cover Concurrency Isolation** | Standard | Standard | Standard | Dedicated queue | Dedicated queue | Full run-stop lock (#433) | Full run-stop lock (#433) | Stop overtakes the queue (#694) | Settle timer & end-stop tolerance (#834, #847) | +| **Cover Positioning (`WHO = 2`)** | Travel time | Travel time | Travel time | Travel time | Travel time | Travel time | Travel time | Start-up floor, full runs, slat tilt (#702, #708, #508) | Settle tolerance (0.5 s), min delta 1–5% (#778, #847) | +| **Sound System (`WHO = 16 / 22`)** | ❌ | Basic Matrix | Basic Matrix | Volume normalization & Proxy | Dynamic Proxy Decoders | FM Tuner stepping + Matrix names | FM Tuner stepping + Matrix names | WHO 22 tuner RDS, source transport (#695, #651) | F500 tuner controls, station bounds (#839, #844) | +| **CEN / CEN+ Triggers (`WHO = 15/25`)** | Basic events | Basic events | Duplicate ID fix (#247) | UI Device Triggers (all 8 actions) | Long-press repeat debouncing | Centralized control triggers (#466) | 4-digit addresses, fail-closed triggers (#601, #624) | WHO 25 Scenario Plus (#671) | WHO 25 Scenario Plus (#671) | +| **Expose HA Entities to the Bus** | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | βœ… WHO 1/2/4/13/18 (#750) | βœ… WHO 1/2/4/13/18 (#750) | +| **Lovelace Bus Monitor Card** | ❌ CLI only | βœ… In-band card | Scoped registry fix (#277) | Export trace / Report issue | Filter & style refinements | Offline bus replay tab | Offline bus replay tab | Offline bus replay tab | Offline bus replay tab | +| **Trace Replay CI Engine** | ❌ Unit tests only | ❌ Unit tests only | Golden frame checks | βœ… Synthetic plant fixtures | Plant #247 & MH200 fixtures | Multi-plant matrix (F454, MH202, H4890) | F455, MH200 + F422, Living Now captures | Live F461 plants, firmware oracle checks | F461, HL4684, 067292, F454, MH200N captures | +| **Test Suite Statements Covered** | ~850 tests | 984 tests (100%) | 1,140 tests (100%) | 1,294 tests (100%) | 1,320 tests (100%) | 1,350+ tests (100%) | 3,464 tests (100%) | 4,393 tests (100%) | 5,202+ tests (100%) | --- ## πŸ” Release-by-Release Delta Log & GitHub Compares +### πŸš€ v2.0.0b17 (In Traces We Find The Truth) +- **Direct GitHub Compare**: [`Compare v2.0.0b16...v2.0.0b17`](https://github.com/OpenWebNet-HA/MyHOME/compare/2.0.0b16...2.0.0b17) +- **Key Enhancements** (61 pull requests, on OWNd 2.0.0b13): + - **Cover End-Stop Settle & Min Delta (#778, #834, #843, #847)**: Timed covers settle full runs at `travel_time + 2 s` from known positions; 0.5 s early cutoff tolerance recognizes actuator limits arriving just before travel time; configurable `min_position_delta` (1–5%, default 2%); calibration refuses whole-minute configurator cutoffs (1–10 min). + - **Thermoregulation (WHO 4) (#816, #817, #846)**: Full 3550 99-zone central unit state hydration, setpoint management, and diagnostic attributes (Discussion #819); new thermo actuator switch platform for manual solenoid control (Issue #785); interface routing and actuator guards. + - **Lighting & Dimmers (WHO 1) (#771, #777, #781, #828, #849, #852)**: Fine dimmer preset echo / autodiscovered dimmers; coarse preset brightness curve alignment; coexistence of lighting actuator and motion sensor on the same bus address; Dimension 22 guard form crash fix. + - **Gateways & Sound System (#832, #835, #839, #844, #848, #854)**: Official **OWNd 2.0.0b13** pin; Legrand 067292 gateway profile alias; F500 FM tuner controls (frequency, band, presets) and HL4684 touchscreen trace replay; station range bounds; multi-gateway dispatcher callback fix. + - **Trace Replay Archive**: Live bus trace fixtures added across F461, HL4684, Legrand 067292, F454 (3486 burglar alarm), MH200N (3550 climate), and MH201 (F414 dimmers). + +--- + ### πŸš€ v2.0.0b16 (Expose Engine, Venetian Slat Tilt & Cover Start-Up Floor) - **Direct GitHub Compare**: [`Compare v2.0.0b15...v2.0.0b16`](https://github.com/OpenWebNet-HA/MyHOME/compare/2.0.0b15...2.0.0b16) - **Key Enhancements** (83 pull requests, on OWNd 2.0.0b11): diff --git a/scripts/backfill_beta_docs.py b/scripts/backfill_beta_docs.py index d8e3a653a..e0c0ffcaf 100644 --- a/scripts/backfill_beta_docs.py +++ b/scripts/backfill_beta_docs.py @@ -20,7 +20,7 @@ REPO_ROOT = Path(__file__).resolve().parent.parent -# Key milestone betas to maintain in version list (historical tags; append 2.0.0b16 once released) +# Key milestone betas to maintain in version list (historical tags; append 2.0.0b17 once released) DEFAULT_MILESTONE_BETAS = [ "2.0.0b5", "2.0.0b6", @@ -32,6 +32,7 @@ "2.0.0b13", "2.0.0b14", "2.0.0b15", + "2.0.0b16", ]