Repository navigation
Conversation
OWNd logged *4*30*#0## and *4*31*#0## as "mode is unknown". The Legrand WHO 4 specification v2.0.0 lists them as central unit status reports (p. 5, p. 24, p. 64): 22 at least one probe OFF, 23 at least one probe in protection, 24 at least one probe in manual, 30 failure discovered, 31 central unit battery KO. libqtdevices TS10_1_0_23 names 30 and 31 (thermal_device.cpp:47-48, MALFUNCTIONING_FOUND and BATTERY_KO) and ignores them for the mode (:214-217). No behaviour change: mode stays None, only the log text is specific. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018oHp1P4vxxoFnaLUUZpbpZ
|
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
Contributor
Author
|
Superseded by #97, which carries this change verbatim together with the other WHO 4 heating fixes. Closing as agreed in OpenWebNet-HA/MyHOME#649. |
GreenGrassBlueOcean
added a commit
that referenced
this pull request
Oct 16, 2026
…#88, #89, #94) Consolidate the four domain-focused WHO 4 heating improvements into a single cohesive branch: 1. WHAT 1 / 0 decoded as season (MESSAGE_TYPE_SEASON: hvac_season) with typed .season attribute (heating / conditioning), leaving .mode as None so season updates do not flip active AUTO/manual operating modes (OWNd#94). 2. WHAT 115#/215#/315# parameter read as weekly program (1..16), not negative temperature, exposing .program and .scenario properties on OWNHeatingEvent (OWNd#87). 3. WHAT 13xxx (heating) and 23xxx (conditioning) holiday days assigned to respective seasonal modes rather than generic auto, exposing .holiday_days (OWNd#88). 4. WHATs 22, 23, 24, 30, and 31 recognized as central unit system status frames with descriptive telemetry logs, leaving mode as None (OWNd#89). Co-authored-by: gdluck <9041273+gdluck@users.noreply.github.com>
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 · project thread
Before:
*4*30*#0##and*4*31*#0##logged "Zone #0's mode is unknown".After: they log "central unit reports a failure was discovered" / "the central unit battery is KO";
22,23,24log the probe status.modestaysNoneand the message type is unchanged, so no consumer behaviour changes; only the log text is specific.Evidence
Spec. p. 5, p. 24 and p. 64, WHAT table:
22at least one probe OFF,23at least one probe in protection,24at least one probe in manual,30failure discovered,31central unit battery KO. All five are status frames the central unit sends.libqtdevices TS10_1_0_23.
thermal_device.cpp:The client knows 30 and 31 by name and deliberately leaves the mode untouched for them, which is what OWNd does.
Firmware. Not a command: none of these WHATs is in the bt_termo command set (
REPORT.md2.1 lists every accepted zone / central command), and the emitted corpus (reference/hex2own_corpus.tsv, 26,810 lines) contains none of them, so this slice is spec-backed only. It changes no parsing result.How
OWNd/message/heating.py: oneelif self._mode in (22, 23, 24, 30, 31)branch before the "unknown" fallback. Tests:tests/test_who4_central_status_whats.py.pytest: 1243 passed, 1 skipped.How to check.
libqtdevicesquotes are from tagTS10_1_0_23of OpenWebNet-HA/libqtdevices (BTicino's 2010 touch-screen client, used only as a second client, not as the reference). Firmware rows are replays of the exact frame on the original gateway translator binaries (ARM, from the MyHomeServer1, F454, F459, F461 and F450 images) under QEMU on a fake SCS bus:ACK=*#*1##,NACK=*#*0##, the bus body is what the program put on the SCS bus (hex, without the A8 / checksum / A3 framing). Spec = Legrand/BTicino "Open Web Net Language, WHO = 4" v2.0.0 (2013-11-27). Raw logs, command lists, the harness and the report are in firmware_validation.zip (results/<program>[_<image>].tsv,results/*.cl/*.stub/*.mon,REPORT.md). The firmware images themselves are not included.Split out of #86 so each change can be checked on its own; the eight slices (#87-#94) merge together in any order without conflicts, and the merged union passes 1285 tests with 100 % coverage of
OWNd/message(checked locally on 2026-10-07 after the review rework of #94).🤖 Generated with Claude Code
https://claude.ai/code/session_018oHp1P4vxxoFnaLUUZpbpZ