Repository navigation
Conversation
…t mode - *4*0*Z## / *4*1*Z## is the zone's season (Legrand WHO 4 p. 13/16/19/63); bt_termo emits it with every dimension 12 report, so an AUTO zone no longer flips to HEAT/COOL on it. - Setpoint writes use mode digit 3 (generic), as BTicino's own client does; the firmware forwards 1/2/3 as three different bus codes. Evidence: OpenWebNet-HA/OWNd docs/firmware_validation (emulator replays on MyHomeServer1, F454, F459, F461, F450). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
cd75af1 to
10edda3
Compare
|
Thanks for the firmware work. CI is red on this PR, and I think the approach should change before it lands. Why CI fails
Why I'd rewrite rather than patch
I'll prepare a replacement for this change, and OWNd#94, that keeps your findings and adds the tests. Happy to credit you as co-author. 🤖 Generated with Claude Code |
…r zones OWNd's set_central_temperature only knows digits 1 and 2, so the central unit write keeps the season-specific digit; zone writes use 3. The climate tests that asserted digit 1/2 for zone writes now expect 3. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@gdluck check also here https://github.com/OpenWebNet-HA/own-firmware-oracle/blob/main/findings/MyHomeServer1/thermo-ts10.md the firmware oracle tests among all major gateways of which we have firmware and I am also now adding devices with firmware like e.g. L4561N and the 8 inch color screens to have an up to date picture of gateway and device behaviour accros the entire plant (device and gateway) More than happy to add also the thermo device as well. Please let me know which device you are using |
|
Read it. That document is an independent replay of the same TS10 frames on the same MyHomeServer1 firmware (028206) with a different harness, and it agrees with mine byte for byte everywhere the two overlap: compound zone commands ( What it adds that I had not replayed:
Nothing in it contradicts the nine PRs or asks for a code change. The compound-address and plain-zone fan-coil rules it verifies are the PR 82/83 work already merged in OWNd; my PRs build on that. I'd suggest replying to the commenter that the results match and asking whether their oracle can also run the WHO 0 / 25 / 18 lists from |
8dc5e8d to
eeb9a49
Compare
OpenWebNet-HA/OWNd#94 decodes *4*1*Z## / *4*0*Z## as hvac_season with a season attribute. A zone that is AUTO, HEAT or COOL keeps its mode on it; a zone that was OFF or unknown takes the season's mode; a central unit shows the season as its mode. No WHAT is read anywhere. With the pinned OWNd 2.0.0b10 the frame still arrives as hvac_mode and takes the old path. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@gdluck, do you happen to have a physical trace from a bus monitor? That would be incredibly helpful. As we saw with the venetian covers, one of the main takeaways from this project is that official documentation doesn't always reflect reality, and the firmware only tells half the story. Having an actual physical trace would give me much more confidence than relying on the firmware alone. |
Live frame test on the real MyHomeServer1 (192.168.0.218), 2026-10-07 20:06-20:13 UTCUser-authorised. 37 frames were sent on a COMMAND session from the minsky box ( The maintainer's doubt (MyHOME#649 comment): "the firmware only tells half the story", a physical trace would be 1. Live versus emulator, frame by frameReply column:
24 of the 28 frames that have an emulator row match it exactly; 3 "silent" emulator rows are ACK live because a 2. What the live plant adds2.1
|
|
@gdluck, thank you for capturing this! Having an authentic live trace from a physical MyHomeServer1 on an actual plant is invaluable. The side-by-side comparison with the emulator is fantastic work—especially confirming that In MyHOME, we treat physical traces as immutable facts and preserve them in-tree with their own test fixtures. To land this cleanly and keep each step reviewable, here is the roadmap I propose:
How does that workflow sound to you? |
|
Thanks, the roadmap sounds right to me, and I'd rather you stage the restructuring since you know how you want the tree and the releases laid out. Please go ahead and refactor the PRs the way you propose.
I'll close the single-fix OWNd PRs as soon as the consolidated branches that replace them are up, so nothing is lost in between. |
…es, and raw log parity (OpenWebNet-HA#649) - Accept live_test_monitor_2026-10-07.log as authentic ground truth - Clarify JSON archive as derived fixture under proposed OWNd season decoding - Mark 37-command comparison table and F520 frames as comment evidence - Document unmentioned zone 39, zone 50, and dimensions 40/48/59 traffic - Clarify actuator 2 vs fan speed semantics on zone 60 - Add test_myhomeserver1_live_trace_log_to_json_raw_equality for 1:1 parity
…eserver1-live-trace test(trace): add authentic MyHomeServer1 physical plant trace and replay test (#649)
CI Failure & Architectural Audit SummaryThe CI failure on commit from unittest.mock import AsyncMock, MagicMock, patch
import pytest
from homeassistant.components.climate.const import HVACMode
import OWNd.message as own_message # <--- Unsorted import
from OWNd.message import OWNEventThis triggers an immediate failure in Additionally, our code audit identified key protocol and compatibility items:
All fixes, rebased cleanly on |
…penWebNet-HA#649) - Decode WHO 4 *4*1*Z## and *4*0*Z## season frames without altering running zone HVAC mode - Write generic mode 3 in async_set_temperature to preserve active plant season - Retain explicit mode 1 (heat) and 2 (cool) in async_set_hvac_mode - Maintain dual backward compatibility with released OWNd 2.0.0b10 and dev OWNd - Ensure 100% test coverage across both pinned OWNd 2.0.0b10 and newer OWNd releases Co-authored-by: gdluck <9041273+gdluck@users.noreply.github.com>
Requested by A · project thread
Depends on OpenWebNet-HA/OWNd#94, which decodes
*4*1*Z##/*4*0*Z##ashvac_seasonwith a typedseasonattribute; this change reads that attribute and touches no WHAT. With the pinned OWNd 2.0.0b10 the frame still arrives ashvac_modeand takes the unchanged path, so the two can merge in either order. The other OWNd firmware-validated fixes are in OpenWebNet-HA/OWNd#87 to #93.Before: a zone in AUTO (or in manual HEAT / COOL) switched to the season's mode whenever the gateway reported
*4*1*Z##/*4*0*Z##, and setpoint writes sent mode digit 1 (heat) or 2 (cool).After: on the season frame a zone that is AUTO, HEAT or COOL keeps its mode and records
seasonas an attribute; a zone that was OFF or not yet known takes the season's mode (it is running again); a central unit shows the season as its mode, as before. Zone setpoint writes use mode digit 3 (generic), as BTicino's own client does. The central-unit write keeps digits 1/2, because OWNd'sset_central_temperaturehas no generic digit.Legrand WHO 4 v2.0.0 (p. 13, 16, 19, 63) lists
*4*0/1*Z##as the zone's operation-mode (season) frame, and bt_termo emits it next to the dimension 12 setpoint report (512 of the 534 dimension-12 reports in the emitted corpus carry one). The firmware forwards mode digits 1/2/3 as three different bus codes. Checked live on a MyHomeServer1 (3.87.13) plant on 2026-10-07:*#4*60*#14*0230*3##(digit 3, the zone's current setpoint) was ACKed and the zone kept reporting*4*1*60##with its setpoint and actuators unchanged, so the generic digit is accepted and leaves the season alone, which is the behaviour this change wants; BTicino's own client writes 3 as well.Validation data: firmware_validation_climate.zip (17 KB): the report and the WHO 4, energy and sound replays this change relies on; the full set with raw logs and harness is linked from OpenWebNet-HA/OWNd#87 to #94. The firmware images themselves are not included.
How:
custom_components/myhome/climate.py(aMESSAGE_TYPE_SEASONbranch, no WHAT read; the central-unit write keeps digits 1/2 because OWNd'sset_central_temperaturehas no generic digit), the six assertions intests/test_component_climate.pythat encoded digit 1/2 for zone writes (now 3), andtests/test_climate_season_frame.py(skipped on the pinned OWNd). Works with the pinned OWNd 2.0.0b10 (falls back to_what).climate.pycompiles; the Home Assistant test suite was not run locally.🤖 Generated with Claude Code
https://claude.ai/code/session_018oHp1P4vxxoFnaLUUZpbpZ