Repository navigation
feat(heating,profiles): add WHO 4 .actuator, #4#IF disambiguation, and profile capability flags - #168
Conversation
…ation, and profile flags (cherry picked from commit cc7a97b)
(cherry picked from commit e377470)
…ed models Oracle rows in trace-corpus.tsv show F453, F453AV, and MH200N emit the 4 SCS telegrams for *michnovka#4*1## identically to F454 rather than remaining silent, while F455 has no WHO 4 oracle rows. Leave supports_heating_zone_status as None (unverified) on F453, F453AV, F455, and MH200N so caller pacing policy continues to decide until live traces exist. (cherry picked from commit 124c32e)
|
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
GreenGrassBlueOcean
left a comment
There was a problem hiding this comment.
Thanks for the clean rebase of #164 onto current master.The heating.py conflict resolution is correct: master’s #156 ASCII/wildcard zone guard is preserved, and the new where_params extraction is applied before it so #0#4#IF still reads as #0 on interface IF. The _interface_and_where_params() logic properly disambiguates actuator #4 from F422 #4#IF (and leaves Dimension 22 split addresses unrouted). Public .actuator on events and commands is a welcome addition.Profile flags are conservatively set from oracle + live traces; unverified models stay None so caller policy continues to decide. Tests cover the capability matrix. CI is fully green across the board (including the MyHOME suite).Ready to merge.
|
I have few more findings to commit from the test plant and I think i'm done with PR's 😅 |
Requested by A · project thread
Supersedes #164 (asked for in #164 (comment)). The three commits are the maintainer's own (@GreenGrassBlueOcean:
cc7a97b,e377470,124c32e), cherry-picked unchanged ontomaster5cb9f2d(#157, #159, #160, #161 landed since the PR was opened) with their authorship kept; the only change is the resolution of theOWNd/message/heating.pyconflict described below. Nothing else was edited.What changed in the rebase
Only
OWNd/message/heating.pyconflicted (OWNHeatingEvent.__init__, the zone line):mastercarries the #156 guard (self._zone = _ascii_int(zone_digits) or 0, wildcard / non-ASCII WHERE gives zone 0 instead ofValueError), the PR replaced the same lines with_, where_params = self._interface_and_where_params()plusint(where). Resolution: keep master's guard and add the PR'swhere_paramsline before it, so#0#4#IFis still read as#0behind interfaceIFand the #156 cases still parse.CHANGELOG.mdandbase.pymerged automatically. Everything else is the PR as reviewed on 2026-11-08 (supports_heating_zone_statusleftNoneon F453 / F453AV / F455 / MH200N).Checks on the rebased head
ruff check,mypy OWNd tests/typing,verify_library_standards.py,sync_documentation.py --check,update_readme_profiles.py --check,tools/golden/validate_corpus.py: all pass.pytest --cov: 3388 passed,verify_coverage.py100.0 % (7137 / 7137 statements, 28 modules). The twotests/test_sync_documentation.pylive-README tests fail onmastertoo once a freshcoverage.xmlexists (README row forOWNd/exceptions.py, added by fix(connection): reopen an idle-closed command session before writing; name dropped 513 samples #167) — unrelated to this branch.v2-phase1-architecturetest suite with this OWNd onPYTHONPATH: 5606 passed (the same run themyhome-conformance.ymljob does).Probes
The 13 WHO 4 frames of the earlier review (actuator
Z#N,Z#4#IF,Z#N#4#IF,#0#4#IF,#0#C, Dimension 223#Z#N, fullwidth zone digits) decode identically to the proof merge posted on #164:*#4*1#4#01*20*1##gives zone 0 (guard), interface01, actuator1, no raise.🤖 Generated with Claude Code
https://claude.ai/code/session_01TwNCwMGK7zfvvGh4ctGaKW