Skip to content

feat(hot-water): ASHW cylinder support validated on an EDL200UK-630RF - #130

Merged
KRoperUK merged 3 commits into
mainfrom
feat/ashw-cylinder-rebased
Oct 17, 2026
Merged

KRoperUK merged 3 commits into
mainfrom
feat/ashw-cylinder-rebased

Conversation

@KRoperUK

Copy link
Copy Markdown
Owner

Summary

Same change as #128, reconstructed on top of main — authored by @Mista-P, whose three commits are carried over unchanged via cherry-pick.

Why a new PR

gh pr update-branch on #128 merged main (which now contains #127's squashed _coerce_code validator) into a branch that already carried its own copy of #127's commit. The result defined _coerce_code twice in dimplex_controller/models.py, and mypy correctly refused it:

dimplex_controller/models.py:330: error: Name "_coerce_code" already defined [no-redef]

That is a merge artefact of landing a stacked PR by squash, not a defect in the work — but it needs a commit on the branch to remove the duplicate, and the branch lives in a fork. So the three cylinder commits are cherry-picked onto current main here, dropping only the duplicated #127 commit that main already has.

Verified on this branch:

  • pytest — 207 passed. The single failure is test_repo_scripts.py::test_check_md_alerts_passes, pre-existing on macOS (bash 3.2 has no mapfile); it passes on CI's bash 5.
  • ruff check, ruff format --check, mypy — clean.
  • _coerce_code is defined once.

The change itself

Unchanged from #128 — see that PR for the detail, which is validated against a live EDL200UK-630RF ASHW cylinder and compared with the official app at the same moment:

  • fix(capabilities): a hot-water cylinder is not room climate — only a RoomTemperature makes a hot-water appliance room climate, so a cylinder no longer gets a 7–30 °C thermostat.
  • feat(hot-water): the cylinder status fields the overview already carries; get_heat_pump_hot_water_schedule returning a HeatPumpHwcSchedule; set_hot_water_holiday(...); and the documentation of what was validated and what still was not.

Still unverified after this lands: the temperature, boost and hygiene writes, and UpdateHeatPumpHwcSchedulePeriods, which answered 403 to every body shape tried.

Stacking

#127 is already merged, so this needs no predecessor. The Home Assistant side is #258, which is merged and does not depend on these model additions (it tolerates them with extra="allow").

🤖 Generated with Claude Code

Mista-P and others added 3 commits October 17, 2026 23:44
A live ASHW cylinder (EDL200UK-630RF) reports its water target, 45 °C, in
ActiveSetPointTemperature, which made capabilities_for call it room
climate and keep every room-heater feature. Clients then gave it a
thermostat with a 7-30 °C range, room temperature, open window, EcoStart
and setback.

Only a room temperature now makes a hot-water appliance room climate.
Without one, the room-heater features default to off unless its status
reports them (the live cylinder sends null for all of them), and so do the
room setpoint and setback writes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
From a live ASHW cylinder (EDL200UK-630RF):

- ApplianceStatus declares the cylinder fields the overview carries:
  Capacity, HeatingUp, IsGreenEnergyActive, HygieneFrequency,
  HygieneTemperature, HolidayNumOfDays and the always-null rest.
- get_heat_pump_hot_water_schedule returns HeatPumpHwcSchedule. The reply
  has no TimerMode and one {DayOfWeek, StartTime, Mode} per period, so the
  TimerModeSettings parse failed on real hardware.
- set_hot_water_holiday engages or clears Holiday. Verified: status 8192 ->
  8200 with HolidayNumOfDays set and heating stopped, then back to 8192.
- set_heat_pump_hot_water_schedule documents that the endpoint answers
  403 to every body tried.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Mark the heat-pump cylinder endpoints with what was validated live on an
EDL200UK-630RF (holiday, schedule read) and what was not (schedule write
answers 403; the temperature, boost and hygiene writes are untested).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@KRoperUK
KRoperUK merged commit f631e2f into main Oct 17, 2026
10 checks passed
@KRoperUK
KRoperUK deleted the feat/ashw-cylinder-rebased branch October 17, 2026 22:49
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.

2 participants