feat(climate): follow WHO 4 dimension 7 zone state on Home+Control plants (#429) - #457
Merged
GreenGrassBlueOcean merged 2 commits intoSep 24, 2026
Conversation
…ants (OpenWebNet-HA#429) On MyHomeServer1 + Home+Control plants the zone's mode and setpoint only travel as dimension 7 (*OpenWebNet-HA#4*Z*7*CONTEXT*STATE[*TTTT]##); the reply to *OpenWebNet-HA#4*Z## never carries it. OWNd decodes it as MESSAGE_TYPE_ZONE_STATE from OWNd#60 on. - setpoint / comfort / eco: HEAT, COOL or AUTO from the context when the zone supports it; a setpoint also becomes the nominal target (+ local offset for the shown target). The dimension 12 "*T*3" reply left that nominal target stale on these plants (OpenWebNet-HA#454). - protection / off: OFF, keeping the nominal setpoint for HEAT/COOL to restore, as WHAT 102/202 already do (OpenWebNet-HA#383). - Unknown values change nothing. The message type and value names are spelled out locally until the OWNd pin exports them; the pinned 2.0.0b8 never produces the type, so nothing changes there. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…den samples The traces @TheDarkWizard and @xtimmy86x contributed on OpenWebNet-HA#429, verbatim in tests/fixtures/traces/issue_429 with a README of who recorded what and what they did at each time: - MyHomeServer1 2.87.13 + Home+Control, 4 zones: OFF/manual/OFF, setpoint steps, summer scenario, winter command, heat/cool switches, Away, a restart (no dimension 7 in the status replies), a manual override and a schedule step. - F454 on a MyHomeServer1 plant, 7 zones: the 13 h Night -> Comfort -> Eco program, and the follow-up showing that a setpoint written from Home Assistant takes the zone out of MyHomeServer1's program. test_issue_429_zone_state replays them through one climate entity per zone and checks mode and nominal setpoint at the reporters' times. The dimension 7 tests are a strict xfail while the installed OWNd drops dimension 7 (OWNd#58); all pass against OWNd#60. The privacy check finds no personal data in the traces. The golden corpus gets the same 9 capture fixtures as OWNd#60, with provenance in SOURCE.yaml; corpus.json is regenerated (179 fixtures; the README count was stale at 58). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
GreenGrassBlueOcean
merged commit Sep 24, 2026
ce86302
into
OpenWebNet-HA:v2-phase1-architecture
16 checks passed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Part of #429. Needs OpenWebNet-HA/OWNd#60 (fixes OWNd#58) to take effect; until the OWNd pin includes it, nothing changes.
Problem
On MyHomeServer1 + Home+Control plants, the zone's mode and setpoint only travel as WHO 4 dimension 7 (
*#4*Z*7*CONTEXT*STATE[*TTTT]##). The reply to*#4*Z##never carries it (seen on both #429 plants). OWNd 2.0.0b8 parses dimension 7 with no message type, so the climate entity never saw it. The nominal setpoint also went stale, because the dim-12*T*3reply only updates the shown target (#454).Change:
climate.pyHandles
MESSAGE_TYPE_ZONE_STATE(OWNd#60):The message type and value names are spelled out locally until the OWNd pin exports them.
Traces and golden samples from #429
The reporters' traces are stored verbatim in
tests/fixtures/traces/issue_429, with a README recording who recorded what and what they did at each time. The privacy checker finds no personal data in them.#7writes go to zones 2–7 only, and zone 1 keeps 20 °Ctests/test_issue_429_zone_state.pyreplays each trace through one climate entity per zone and checks the mode and nominal setpoint at the reporters' times. Findings pinned by the tests:The 9 dimension-7 replays are a strict
xfailwhile the installed OWNd drops dimension 7, following the same detect-don't-pin pattern as the other OWNd markers.The golden corpus gets the same 9 verbatim
community-plant-capturefixtures as OWNd#60, with provenance inSOURCE.yaml.corpus.jsonis regenerated (179 fixtures; the README count was stale at 58).Unit tests in
test_component_climate.pycover the cases the traces don't reach: comfort/eco without a temperature, generic context, a context the zone doesn't support, a setpoint while OFF, unknown values, and the local offset.Tests
mypy --strictonclimate.pyare clean.Checklist
handle_event()and do not manually subscribe viaasync_dispatcher_connect. (No new entities; the existing climatehandle_eventgains a branch.)After OWNd#60 is released
Bump the OWNd pin. The 9 strict xfails in
test_issue_429_zone_state.pythen pass and fail the build, so dropneeds_dimension_7in the same change.🤖 Generated with Claude Code