Repository navigation
fix(climate): eliminate 10s command session timeouts on F455 and add authentic trace fixture (#674) - #675
Merged
GreenGrassBlueOcean merged 1 commit intoOct 9, 2026
Conversation
Closed
GreenGrassBlueOcean
force-pushed
the
test/issue-674-f455-climate-trace
branch
from
October 9, 2026 18:19
d8ea9be to
31adc99
Compare
…ical gateways (#674) In OpenWebNet WHO=4, dimension-less status requests (*#4*Z##) are only supported on MyHomeServer1 (which caches state in software). On physical SCS gateways (F455, F454, MH200N, MH202, etc.), *#4*Z## is forwarded directly to the SCS bus, where physical thermostats have no handler for it, causing a 10.08-second command session timeout per zone (accumulating over 160 seconds of queue lockup across 16 zones). - Skip *#4*Z## polls on physical gateways in MyHOMEClimate.async_update() - Disable _poll_on_add for physical gateways during startup/discovery - Avoid firing *#4*Z## status requests upon receiving dimension 14 frames on physical gateways - Add authentic F455 16-zone trace fixture and replay conformance test suite Co-authored-by: gdluck <16568285+gdluck@users.noreply.github.com>
GreenGrassBlueOcean
force-pushed
the
test/issue-674-f455-climate-trace
branch
from
October 9, 2026 18:37
31adc99 to
ec1bd8b
Compare
|
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
This was referenced Oct 10, 2026
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.
Summary
Eliminates 10-second command session timeouts and queue lockups on physical SCS gateways (Legrand F455, F454, MH200N, MH202, etc.) during climate entity startup/polling, and locks in the authentic 16-zone F455 physical plant trace fixture and replay test suite contributed by @gdluck on #674.
1. What is the problem?
When installing or starting up MyHOME v2 on plants connected through physical SCS gateways (such as the Legrand F455 in #674), Home Assistant experiences severe startup stalls and command session timeouts every few seconds (~161 seconds of total lockup for a 16-zone plant):
*#4*Z##):WHO_4 2.pdf), dimension-less status requests*#4*WHERE##are only defined forWHERE = 0(general plant sweep) andWHERE = #0(99-zone central unit).*#4*Z##(zones 1..99) are not part of the standard SCS bus protocol. Physical thermostats (LN4691, 3550, etc.) on the SCS bus have no telegram handler for dimension-less*#4*Z##.bt_lucisoftware daemon which intercepts*#4*Z##in software and replies directly from its internal SQLite/RAM cache.message_has_state()unconditionally marked climate entities as requiring polling (_poll_on_add = True), causing all 16 zones to issue*#4*Z##queries sequentially viaasync_update().OWNdcommand session waitedCOMMAND_TIMEOUT = 10seconds per request before timing out:WARNING (MainThread) [custom_components.myhome] [F455 gateway - 192.168.1.136] Timed out awaiting the complete response for '*#4*35##'; command session closed.*#4*0##already caused physical thermostats to spontaneously broadcast their full state (dimensions 0, 12, 13, 14, 19, 20) on the monitor session. The point-to-point queries were completely redundant.2. How is it solved?
custom_components/myhome/gateway.py):supports_zone_statusproperty onMyHOMEGatewayHandler.Falsefor physical SCS bridge gateways (F455,F454,MH200,MH201,MH202,F452,F453,F458,F459,F461,H4684).TrueforMyHomeServer1(which provides software cache synthesis) and mock gateways.custom_components/myhome/climate.py):__init__, setsself._poll_on_add = Falseifnot self._central and not self._gateway_supports_zone_status.async_update(), returns immediately without querying*#4*Z##when connected to physical gateways.custom_components/myhome/discovery.py: Inmessage_has_state(), marks climate entities as having received state ifnot entity._gateway_supports_zone_status, preventing forced poll-on-add.custom_components/myhome/gateway_events.py: GuardsOWNHCmd.status(where)on dimension 14 withsupports_zone_statuscheck.3. How is it tested?
tests/test_issue_674_f455_climate_trace.py):test_f455_climate_trace_replay_without_exceptions: Replays all 67 on-wire frames through the gateway dispatcher into Home Assistant without errors or unhandled exceptions.test_f455_climate_entities_state_derived: Verifies all 16 climate zones are correctly populated from spontaneous monitor frames (temperatures, setpoints, offsets, HVAC modes, actuator states).test_gateway_supports_zone_status_capability: Verifies physical gateways returnsupports_zone_status == Falseand MyHomeServer1 / mock returnTrue.test_climate_skips_zone_status_poll_on_physical_gateways: Verifies_poll_on_add = Falseandasync_update()does not dispatch unanswerable*#4*Z##commands on physical gateways.tests/test_fixture_privacy.py: PASSED (0 LAN address leaks; sanitized to RFC 5737 documentation prefix192.0.2.136).tests/test_device_health_corpus.py: PASSED (conforms to float epoch timestamps and trace schema).~/.venvs/myhome314/bin/python).ruff check custom_components tests scripts).scripts/verify_ha_standards.py): 54/54 rules satisfied (Bronze, Silver, Gold, Platinum).scripts/sync_documentation.py --check): Clean documentation sync.4. Where are the traces?
tests/fixtures/traces/issue_674/home-assistant_2026-10-09T17-34-15.609Z.log: Verbatim 315-line Home Assistant log contributed by @gdluck on #674.tests/fixtures/traces/issue_674/myhome_trace_f455_climate_timeouts_2026-10-09.json: Structured archive containing all 67 RX OpenWebNet frames and 16 timeout records with float epoch timestamps, ISO timestamps, and parsed message types.tests/fixtures/traces/issue_674/README.md: Complete hardware profile (Legrand F455, FW 1.1.2, 16 heating zones, no central unit#0), chronology of 16 timeouts, side-by-side comparison with MyHomeServer1, and root cause breakdown.Co-authored-by: gdluck 9041273+gdluck@users.noreply.github.com