Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/ISSUE_TEMPLATE/audio_field_report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
6 changes: 3 additions & 3 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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
4 changes: 2 additions & 2 deletions .github/ISSUE_TEMPLATE/device_request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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
57 changes: 45 additions & 12 deletions .github/release-notes/2.0.0b17.md
Original file line number Diff line number Diff line change
@@ -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)

<!-- DRAFT: paste into the GitHub release body when tagging 2.0.0b17. Recount the pull
requests and add any merged after 2026-10-29 (`git log 2.0.0b16..2.0.0b17
--first-parent`). Delete this file in the commit that tags the release. -->
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
12 changes: 6 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.**

Expand All @@ -174,17 +174,17 @@ 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
```

*(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
```

Expand All @@ -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).
Expand Down Expand Up @@ -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).

---

Expand Down
Loading
Loading