Skip to content

fix: align WHO 0/1/4/18/25 parsing and builders with gateway firmware - #86

Closed
gdluck wants to merge 1 commit into
OpenWebNet-HA:masterfrom
gdluck:fix/firmware-validated-who4-who0-who25
Closed

gdluck wants to merge 1 commit into
OpenWebNet-HA:masterfrom
gdluck:fix/firmware-validated-who4-who0-who25

Conversation

@gdluck

@gdluck gdluck commented Oct 7, 2026 •

Copy link
Copy Markdown
Contributor

Requested by A · project thread

Before: OWNd read *4*115#1102*#0## as "heat at -10.2 °C", read holiday WHATs 13xxx/23xxx as "auto", logged WHO 0 WHAT 40-46 as "scenario 40 launched", returned a bare event for WHO 25 WHAT 11-15, left the WHO 18 1200 auto-update reply untyped, and had no builders for WHO 1 presets, step commands or timers.

After: 115#/215#/315# carry the program to resume (program), 13xxx/23xxx are heating/cooling holiday days (holiday_days), 11xx/12xx/31xx/32xx expose program/scenario, WHAT 22/23/24/30/31 are named, WHO 0 40-46 decode as scenario-module programming/lock states, WHO 25 11-15 parse and build as scenario plus, the 1200 reply is auto_update_interval, and WHO 1 gains set_brightness_preset, step_up/step_down, switch_on_timed, set_variable_timer, get_variable_timer. OWNMessage.what exposes the raw WHAT.

Every change was checked by replaying the frames on the original gateway translator binaries (MyHomeServer1, F454, F459, F461, F450) under QEMU on a fake SCS bus, plus the Legrand WHO 4 specification v2.0.0.

How: parser and builder changes in OWNd/message/{heating,scenario,cen,energy,lighting,base}.py; two tests in tests/test_issue_77_firmware_findings.py and tests/test_message_edges.py updated where they encoded the old readings, new tests added. pytest: 1239 passed, 2 skipped; test_metadata.py::test_runtime_version_matches_installed_package fails the same way on master when the package is not pip-installed.

Validation data: firmware_validation.zip (326 KB): the report (section 1 is the summary table), the replayed frames and the firmware's answer to each on the five images, the raw client/bus/monitor logs, the harness scripts and the emitted-frame corpus. The firmware images themselves are not included.

Not covered: WHO 22 sound (frames listed in the report, new module needed), WHO 5 arming (no mhs1 program handles WHO 5).

🤖 Generated with Claude Code
https://claude.ai/code/session_018oHp1P4vxxoFnaLUUZpbpZ

Validated by replaying each frame on the original MyHomeServer1, F454,
F459, F461 and F450 translator binaries under QEMU. Data set (report, replays,
harness): https://github.com/gdluck/OWNd/raw/firmware-validation-data/firmware_validation.zip

- WHO 4: 115#/215#/315# parameter is the program to resume, not a
  temperature; 13xxx/23xxx are heating/cooling holiday days; program,
  scenario and holiday_days exposed; WHAT 22/23/24/30/31 named.
- WHO 0: WHAT 40-46 decoded as scenario-module programming/lock states.
- WHO 25: WHAT 11-15 parsed and built as scenario-plus frames.
- WHO 18: dimension 1200 auto-update reply parsed.
- WHO 1: builders for presets 2-10, step 30/31 (with delta#speed),
  fixed timers 11-18 and the dimension 2 variable timer.
- OWNMessage.what exposes the raw WHAT.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@gdluck

gdluck commented Oct 7, 2026

Copy link
Copy Markdown
Contributor Author

Closed in favour of the split pull requests #87 to #94, one fix per PR, each with its own evidence and tests.


Generated by Claude Code

@gdluck gdluck closed this Oct 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant