Repository navigation
Conversation
|
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
A live F461 2.0.11 answers `*OpenWebNet-HA#13**27##` with `*OpenWebNet-HA#13**27*70#52#54#49##` ("F461" as '#'-separated ASCII codes) and a live MyHomeServer1 3.87.13 with `*OpenWebNet-HA#13**27*77#121#…OpenWebNet-HA#49##` ("MyHomeServer1"); both are in the MyHOME#799 trace fixtures. The dimension-reply regex accepts digits only, so OWNMessage.parse returned None and MyHOME logged "Data received is not a message". A narrow allowlist (_HASH_VALUE_REPLIES, WHO 13 dimension 27 only) routes the single '#'-separated value to OWNGatewayEvent, whose model_name decodes it when every code is printable ASCII. The general '*'-separated form (`*OpenWebNet-HA#13**27*70*52*54*49##`) and a single code without '#' are not decoded (model_name None). `*OpenWebNet-HA#13**27##` stays a dimension request. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
gdluck
force-pushed
the
feat/who13-model-name-and-who1001-diagnostic
branch
from
October 24, 2026 15:49
0bf88b6 to
d51cf77
Compare
Closed
3 of 4 tasks
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
The physical F461 2.0.11 answers
*#13**27##with*#13**27*70#52#54#49##: its model name as#-separated ASCII codes (70 52 54 49= "F461"). A physical MyHomeServer1 3.87.13 answers*#13**27*77#121#72#111#109#101#83#101#114#118#101#114#49##("MyHomeServer1"). The dimension-reply regex accepts only digits in values, soOWNMessage.parsereturnedNone, the event session handed the rawstron and MyHOME logged "Data received is not a message". It was the only one of the 69 events captured on 2026-10-23 (68 typed, 1 raw) that did not come back as a typed class.Refs
OpenWebNet-HA/MyHOME#799(both captures). The WHO 1001 diagnostic event that this PR carried at first is now its own PR (see Companion): different evidence, different reviewers.Changes
OWNd/message/base.py:_HASH_VALUE_REPLIES, a narrow allowlist of reply shapes that carry a#inside a value, limited here to WHO 13 Dimension 27 with a single#-separated value (*#13**27*C1#C2#...##). It is tried after the general reply regex, which is unchanged. The new branch fills the same fields as the general one, including_dimension_param.OWNd/message/gateway.py:OWNGatewayEvent.model_namedecodes Dimension 27 only when the reply has exactly one value that contains#and every code is printable ASCII (32..126);human_readable_logreads "Gateway's model name is: F461.". The general*-separated form (*#13**27*70*52*54*49##) and a single code without#(*#13**27*70##) are not a model name:model_namestaysNone(fail closed; the first version of this PR would have decoded the former as "F").*#13**27##is still anOWNGatewayCommanddimension request.CHANGELOG.md: entry under[Unreleased]/Added.State Diagram
stateDiagram-v2 direction TB state "OWNMessage.parse(*#13**27*...##)" as Parse { [*] --> General General --> Plain : *#13**27*70*52*54*49## , *-separated, general regex\nOWNGatewayEvent, model_name None , fail closed General --> HashAllowlist : # inside the value - general regex does not match HashAllowlist --> Name : *#13**27*70#52#54#49## , one value, #-separated, printable ASCII\nOWNGatewayEvent, model_name F461 , new - before - None, Data received is not a message HashAllowlist --> NoName : *#13**27*70#7#300## , non-printable code\nOWNGatewayEvent, model_name None HashAllowlist --> NoneResult : *#13**27*70#52#54#49*1##, *#13**12*70#52##, *#1*11*1*#5##\nNone , unchanged }Where are the traces
OpenWebNet-HA/MyHOME#799(merged),f461_live_2026-10-23run 1 (run1_oracle_replay_readonly); the frame is inpending_decoder_rxoftests/test_trace_oracle_validation.pythere, citing this PR*#13**16*2*0*11##)*#13**27##->*#13**27*70#52#54#49##("F461"), returned on the command session and delivered on the event sessionOpenWebNet-HA/MyHOME#799(merged),myhomeserver1_live_2026-10-24run 1 (run1_identify)*#13**16*3*87*13##)*#13**27##->*#13**27*77#121#72#111#109#101#83#101#114#118#101#114#49##("MyHomeServer1")What does the Oracle say
No oracle stimulus exists for this frame: no suite sends
*#13**27##. The two physical captures above are the evidence.Testing
tests/test_who13_model_name.py(new, 10 cases): the F461 and MyHomeServer1 replies parse asOWNGatewayEventwith the rawdimension_value,dimension_param == [], the decodedmodel_name, the log line andstr(message)unchanged; non-printable codes leavemodel_nameNone; the*-separated form and a single code without#leave itNone;*#13**27##is a dimension request; a second value after the codes, another dimension with a#value and a WHO 1#value still do not parse.master5 fail, 5 pass (OWNMessage.parse('*#13**27*70#52#54#49##')has nomodel_name; the request shape and the negative cases already pass); on this branch all 10 pass. Re-verified 2026-10-24 on both plants with plain OWNd master as the sender:*#13**27##->*#13**27*70#52#54#49##(F461 2.0.11, 14 ms) and*#13**27*77#121#72#111#109#101#83#101#114#118#101#114#49##(MyHomeServer1 3.87.13, 21 ms); this head decodes them toF461/MyHomeServer1, master toNone.1917 passed, 1 skipped(master:1907 passed, 1 skipped); 100 % statement coverage,mypyclean,ruffclean,scripts/sync_documentation.py --checkandscripts/verify_library_standards.pypass.Live retest (2026-10-24)
Confirmed, narrowly: on the F461 2.0.11 with this decoder,
*#13**27##->*#13**27*70#52#54#49##and the HA log readsGateway's model name is: F461.instead of "Data received is not a message". It is not wired into MyHOME's diagnostics (identification.who13_modelstaysnull); that is a separate MyHOME change.Companion
MyHOME: none required (
OpenWebNet-HA/MyHOME#802rate-limits the warning meanwhile;OpenWebNet-HA/MyHOME#799carries the traces). Related OWNd PR (split from this one):feat(lighting): WHO 1001 dimension 11 diagnostic event: #145.CI note (expected red check)
The
MyHOME test suitejob runs MyHOME against this branch. MyHOME'stests/test_trace_oracle_validation.pylists the two dimension-27 frames of the merged trace PR OpenWebNet-HA/MyHOME#799 inpending_decoder_rxand, by the maintainers' request on that PR, asserts loudly that they still parse toNoneuntil the OWNd pin is bumped. This decoder makes them parse, so that single job is red by construction (remove … from pending_decoder_rx: the OWNd pin now decodes it). The cleanup is a one-line MyHOME change that belongs with the pin bump; every other check is green.🤖 Generated with Claude Code