Repository navigation
Conversation
…ing mode OWNd put the 13001-13255 and 23001-23255 WHATs in the AUTO range. The Legrand WHO 4 specification v2.0.0 (p. 5 and p. 64) defines 13xxx as "holiday days, heating mode" and 23xxx as "holiday days, conditioning mode", next to 33xxx for the generic mode. libqtdevices TS10_1_0_23 has WIN_HOLIDAY = 13000 and SUM_HOLIDAY = 23000 (thermal_device.cpp:68, :58) and sets the season to winter / summer for them (:303-307, :258-262). On the gateway firmware these WHATs are monitor-only: bt_termo answers NACK with no bus frame to *4*13004*#0## and *4*23004*#0## on all five images, while the holiday *commands* *4*33002#3115*#0## and *4*33005#3102*#0## are forwarded with the day count in byte 7 (02, 05). 13xxx now reads as heat, 23xxx as cool, and all three ranges expose the day count as holiday_days. 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
Depends on OpenWebNet-HA/MyHOME#650: MyHOME's copy of the OWNd edge tests (
tests/test_message_edges.py) asserts the oldautoreading for*4*13001*1##/*4*23001*1##, so this PR's downstream "MyHOME test suite" job (which runs MyHOMEv2-phase1-architectureagainst this checkout,.github/workflows/myhome-conformance.yml:70-86) stays red until #650 is merged. OWNd's own checks are green.Before:
*4*13001*1##and*4*23001*1##were read as AUTO (both ranges sat in the generic-mode list next to33xxx).After:
13xxxreads as HEAT and23xxxas COOL, and all three ranges expose the day count asholiday_days(*4*23001*1##→mode = cool,holiday_days = 1;*4*33004*#0##→auto,4).Evidence
Spec. p. 5 and p. 64, WHAT table:
13xxx= holiday days, heating mode;23xxx= holiday days, conditioning mode;33xxx= holiday days, generic mode; xxx = 1..255 days.libqtdevices TS10_1_0_23.
thermal_device.cpp:23xxxsets the summer season,13xxxthe winter season; the client never maps either to automatic.Firmware. bt_termo, identical on MyHomeServer1, F454, F459, F461, F450 (
results/termo*.tsv):*4*13004*#0##*4*23004*#0##*4*33002#3115*#0##D1 00 03 02 C1 05 02 0E02days, byte 8 = program 15*4*33005#3102*#0##D1 00 03 02 C1 05 05 01So the firmware carries the day count of the holiday WHATs as a real value (byte 7), and the heating / conditioning variants are status reports the central unit sends, which is what OWNd parses here.
How
OWNd/message/heating.py:23001-23255moves to the COOL range,13001-13255to the HEAT range,33xxxstays AUTO; each setsholiday_days = mode % 1000. Newholiday_daysproperty. Tests: the twotest_mode_auto_weekly_*cases intests/test_message_edges.pyencoded the old reading and are replaced bytest_mode_holiday_*.pytest: 1239 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