Repository navigation
Conversation
Both profiles advertised WHO 16 (Sound System), so MyHOME's startup sweep sent `*OpenWebNet-HA#16*0*5##` and configured WHO 16 media players only ever produced refused frames on these gateways. own-firmware-oracle: all 86 WHO 16 frames of the suites (77 of them in sound-who16-source) are nack/silent on F461 020011 and MyHomeServer1 028206, i.e. no translator forwards them; the firmware table shows both images ship bt_multi (WHO 22) and no bt_difson (WHO 16), and the F461 openserver Stackopen lists no WHO 16 client. Live: the F461 2.0.11 NACKs `*OpenWebNet-HA#16*0*5##` within 5 ms (2026-10-23) and a MyHomeServer1 NACKs it in the MyHOME issue_466 trace fixture; MyHOME#459 already notes the MyHomeServer1 "firmware discards 5, 16, 22". WHO 22 stays listed and supports_audio is unchanged: sound-who22 is forwarded by both. No new flag: supported_who already carries the meaning. MH202 keeps WHO 16 although its oracle refuses WHO 16 commands, because a live MH202 relays WHO 16 state from an F441M (MyHOME#669) and supported_who also decides which gateway owns those events. F459 and F460 resolve to GenericGatewayProfile and are not changed. scripts/sync_documentation.py --update reports the README already in sync (the profile table does not list WHOs). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
4 tasks done
|
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
gdluck
marked this pull request as draft
October 24, 2026 13:39
gdluck
pushed a commit
to gdluck/HomeAssistant-MyHOME
that referenced
this pull request
Oct 24, 2026
…tical with and without OWNd (CI follow-up)
The quality-scale, test-coverage and docs CI jobs run scripts/verify_ha_standards.py and
scripts/sync_documentation.py --check without OWNd installed ("[OWND] Client library
verification skipped (OWNd not in path: No module named 'OWNd')"). The first push derived
the startup discovery rows from the installed OWNd profile only and printed
"unknown (OWNd profile not available)" otherwise, so those jobs regenerated a table that
differed from the committed docs/getting-started/hardware-compatibility.md:
"[RULE_DOCS_ANTI_DRIFT] Gateway Discovery table out of sync".
Each discovery row now carries pinned_whos, the row the pinned OWNd 2.0.0b11 yields; it is
used only when OWNd is not importable, so the generated table is byte-identical with and
without OWNd. With OWNd importable the row is still derived from profile.supports_who over
STARTUP_DISCOVERY_WHOS, as the startup gate does, and notes_without_who16 applies whenever
the row does not carry WHO 16. verify_profiles_against_oracle() flags a row whose
profile_name resolves to the generic profile (get_gateway_profile() never returns None).
Tests: without OWNd every row carries exactly its pinned_whos and the generated block equals
the committed one; with OWNd the derived block equals the committed one (installed profile ==
committed table == pinned_whos); pinned_whos is ignored when OWNd is importable. Fail-before
on the first-push script: 3 of 18 fail; all pass after. sync_documentation.py --check passes
in a venv without OWNd and with OWNd master (f04d8aa) on PYTHONPATH. Against the OWNd OpenWebNet-HA#142
branch (95dc8a5) the two docs-equality tests report the drift that the pin bump resolves
with --update together with pinned_whos.
Oracle re-check at own-firmware-oracle main 72759e8 (results/mcp_index.json, schema 1.2.0,
529 inputs): F461 020011 and MyHomeServer1 028206 still answer nack/silent to all 86 WHO 16
inputs (*OpenWebNet-HA#16*0*5## sound-who16-source.tsv line 16, *OpenWebNet-HA#16*101*5## line 28), unchanged from
53f9514.
Refs OpenWebNet-HA/OWNd#142.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This branch has not been deployed
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.
Requested by A
Summary
F461ProfileandMyHomeServer1Profilelist WHO 16 (Sound System) insupported_who. Neither gateway has a WHO 16 translator: all 86 WHO 16 inputs of the oracle suites are refused on both (and the four status requests re-sent live on 2026-10-24,*#16*0*5##,*#16*0*1##,*#16*1*5##,*#16*0*12##, NACK in 3-9 ms on F461 2.0.11 and MyHomeServer1 3.87.13), so MyHOME's startup sweep sends a*#16*0*5##that is always NACKed, a standby F461 / MyHomeServer1 claims WHO 16 events it has no translator for, and a configured WHO 16 media player produces nothing but refused frames (OpenWebNet-HA/MyHOME#424describes the plants that speak only WHO 22). Their sound system is WHO 22, which both forward.Refs
OpenWebNet-HA/MyHOME#424,OpenWebNet-HA/MyHOME#459,OpenWebNet-HA/MyHOME#794(the gate that reads the profile),OpenWebNet-HA/MyHOME#799(the live NACKs).Changes
OWNd/profiles.py:_WITHOUT_WHO16 = (WHO_SOUND,); the F461 and MyHomeServer1supported_whodrop it (next to the existingWHO_LOAD_CONTROLexclusion). WHO 22 stays listed andsupports_audiois unchanged, sofeatures_summaryand the README profile table do not change. No new flag:supported_whoalready carries the meaning, andsupports_who(16)is what MyHOME's sweep,sweep_busservice, standby ownership and topology delegation read.*#16*41*1*1##,*#16*41*1*6##;OpenWebNet-HA/MyHOME#669trace), andsupported_whoalso decides which gateway owns those events on a shared bus. The docstring records this. One inference, stated as such: whether an F461 / MyHomeServer1 would relay WHO 16 events from an F441M on its bus is untested (no such plant is available); the removal rests on the missingbt_difsontranslator, the refused inputs and theOpenWebNet-HA/MyHOME#459statement. If the maintainers prefer to keep event ownership, a tri-state flag is the alternative.GenericGatewayProfile, whose default keeps WHO 16 for the F454 / MH200N class.python scripts/sync_documentation.py --updatereports the README already in sync (the profile table lists features, not WHOs).CHANGELOG.md: entry under[Unreleased]/Fixed.Topology side effect in MyHOME (from the review of the MyHOME uses of
supported_who):topology.pyalready strips 16 / 22 for a MyHomeServer1; with this change an F461 primary lets a WHO-16-capable follower own WHO 16 (and 22) events, which is correct, and a same-tier F454 / F461 pair now picks the F454 by WHO count instead of by MAC. The standby failover (gateway_events.py) no longer lets a standby F461 / MyHomeServer1 claim WHO 16 events it cannot relay. One cost: a WHO 16 media player configured against one of these gateways polls*#16*ZONE*5##per zone at startup (media_player.py) instead of one refused sweep frame; such a player cannot work on these gateways anyway, and the MyHOME side gates that poll.Alternative considered and not chosen: keep WHO 16 in
supported_whoand add a tri-statesupports_who16_status_request = Falseflag thatOpenWebNet-HA/MyHOME#794reads for the*#16*0*5##gate. That would keep this repository's CI green today, but it would leavesupported_whoadvertising a WHO that no capture or published source supports (the #100 rule:supported_wholists only what a capture or a published spec supports), and it would leave the standby / topology ownership of WHO 16 events on these gateways in place. The removal rests on: 86 of 86 WHO 16 oracle inputs refused on both images, nobt_difsonin either firmware image, and two live NACKs on two models.State Diagram
stateDiagram-v2 direction TB state "1. MyHOME startup sweep per WHO in profile.supported_who (gateway.py)" as Sweep { [*] --> Who16 Who16 --> Sent : before - 16 in F461Profile / MyHomeServer1Profile\n*#16*0*5## sent, NACK in 3-5 ms , F461 2.0.11, MyHomeServer1 3.87.13 Who16 --> Skipped : after - 16 not in supported_who\nlog Skipping WHO=16 discovery - not supported by F461 profile. - nothing sent [*] --> Who22 Who22 --> SentOk : unchanged - WHO 22 stays listed, supports_audio True } state "2. Standby / topology ownership of WHO 16 events on a shared bus (gateway_events.py, topology.py)" as Own { [*] --> F461primary F461primary --> Follower : after - a WHO-16-capable follower , F454, MH200N, MH202, ... owns WHO 16 + 22 F461primary --> Itself : before - the F461 claimed WHO 16 events it cannot relay }Where are the traces
OpenWebNet-HA/MyHOME#799(open),f461_live_2026-10-23run 1 (run1_oracle_replay_readonly)*#16*0*5##NACK within 5 ms; all 18 WHO 16 requests of the run NACK in under 10 msOpenWebNet-HA/MyHOME#799(open),myhomeserver1_live_2026-10-24run 2 (run2_reads_thermo_sound_alarm_lights)*#16*0*5##and*#16*101*5##NACK in 3 ms (immediate refusal, no bus timeout)tests/fixtures/traces/issue_466/MyHomeServer1_dead_zone_nacks_2026-09-29T22-45.txt("Gateway rejected status request*#16*0*5##(NACK, 0 response(s))")*#16*0*5##tests/fixtures/traces/mh202_sound_intercom_ducking(OpenWebNet-HA/MyHOME#669)*#16*41*1*1##,*#16*41*1*6##What does the Oracle say
Every WHO 16 frame in the suites,
results/F461/020011/oracle/full/*.tsvandresults/MyHomeServer1/028206/oracle/full/*.tsv: 86 distinct WHO 16 inputs per gateway (77 of them insound-who16-source, the rest intrace-corpusand the other suites), allnack/silent, i.e. the translator never puts them on the bus. First rows ofsound-who16-source.tsvon both:020011028206*#16*0*5##nack/silentnack/silent*#16*100*5##nack/silentnack/silent*#16*101*#10*1##nack/silentnack/silent*#16*101*#6*0*107000##nack/silentnack/silentnack/silentnack/silentFirmware images (own-firmware-oracle
README.md, firmware table): F461020011shipsbt_luci,bt_device,bt_termo,bt_multi,bt_supervisione,coso(plusbt_daemon,openserver,scsserver); MyHomeServer1028206the same set; neither shipsbt_difson(the WHO 16 translator that F453, F453AV, F454, MH200 and MH200N do ship). The F461openserver[Stackopen]section inoracle/targets/F461/020011.yamlregistersbt_multifor WHO 22 and no client for WHO 16.WHO 22 (
sound-who22, 63 inputs per gateway): put on the bus by both for 60 of the 63 inputs (44ack/out, 16nack/out; 1ack/silent, 2nack/silent; identical on F461 020011 and MyHomeServer1 028206), which is why WHO 22 andsupports_audiostay. On theOpenWebNet-HA/MyHOME#459quote: the maintainer wrote there that the MyHomeServer1 firmware "discards 5, 16, 22"; this PR uses it for 16 (and 5 is handled byOpenWebNet-HA/MyHOME#794/OpenWebNet-HA/MyHOME#803), while for 22 the publishedsound-who22rows show the frames forwarded, so WHO 22 is kept. No WHO 22 frame was sent to the live MyHomeServer1 (a real home), so that disagreement is settled by the oracle rows only.Testing
tests/test_profiles.py: newtest_who16_is_not_advertised_where_the_oracle_refuses_it(F461,MyHomeServer1,MHS1,MyHome Server 1: no WHO 16, WHO 22 kept,supports_audio is True) andtest_who16_stays_on_gateways_that_forward_it(F454,MH200N,MH200,H4684,F453,F453AV,H4890,MH202);test_profile_lookup_accepts_common_name_variantsupdated for the MyHomeServer1 alias.master5 of the module's 70 tests fail (the fournot supports_who(WHO_SOUND)cases and the alias test); on this branch all 70 pass.tests/test_firmware_oracle_conformance.py(26) still passes.1919 passed, 1 skipped(master:1907 passed, 1 skipped); 100 % statement coverage,mypyclean,ruffclean,scripts/sync_documentation.py --checkandscripts/verify_library_standards.pypass.tests/test_firmware_oracle_conformance.py::test_gateway_profiles_match_oracle_verdicts: "Discovery row F461 queried_whos=[1, 2, 4, 16, 18] disagrees with F461 profile [1, 2, 4, 18]" (and MyHomeServer1).test_gateway_profiles.py::test_generate_gateway_discovery_table_and_verify_oracle(expects| **F461** | WHO 1, 2, 4, 16, 18 |),test_oracle_check_rejects_patched_profile_instance,test_sync_documentation.py::test_sync_gateway_profiles_detects_driftandtest_check_all_documentation_real_tree("Gateway Discovery table out of sync in docs/getting-started/hardware-compatibility.md").scripts/update_gateway_profiles.pyhard-codes[1, 2, 4, 16, 18]for both models. The MyHOME companion changes those rows, regeneratesdocs/getting-started/hardware-compatibility.mdand the test expectations; with it and this OWNd the MyHOME suite passes (4410 passed, 1 skipped in the combined build of 2026-10-24).Live retest (2026-10-24)
Confirmed for this startup configuration: with this profile, four starts of the integration sent no
*#16*0*5##(HA bus-monitor history) and loggedSkipping WHO=16 discovery: not supported by F461 profile; the zone and humidity requests were still sent. Other gateway models were not tested live.Companion
MyHOME companion: OpenWebNet-HA/MyHOME#808 (
chore(profiles): derive the discovery rows from the OWNd profile (prep for OpenWebNet-HA/OWNd#142), draft):scripts/update_gateway_profiles.pyandtests/test_gateway_profiles.pyderive the F461 / MyHomeServer1 discovery rows fromprofile.supports_whoinstead of a static list, so it is green against the pinned OWNd 2.0.0b11 and against this branch;hardware-compatibility.mdregenerates toWHO 1, 2, 4, 18at the pin bump that includes this PR (sequencing: #808 → this PR → OWNd release → pin bump).OpenWebNet-HA/MyHOME#794gates the startup*#16*0*5##request onprofile.supports_who(16)with a MyHOME fallback table until this lands.🤖 Generated with Claude Code