Repository navigation
Conversation
GetApplianceOverview returns ErrorCode and WarningCode as integers (0 when the appliance is healthy), but ApplianceStatus types them as str, so model_validate raised a ValidationError for every status poll. Coerce ints to str in a before-validator so the public type is unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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>
7 of 11 tasks
This branch has not been deployed
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.
Summary
Support for air-source heat pump hot water cylinders (
ASHW Cylinder), from a live EDL200UK-630RF compared against the official app at the same moment.fix(capabilities): a cylinder is not room climate. The cylinder reports its water target (45 °C) inActiveSetPointTemperature, socapabilities_forcalled it room climate and kept every room-heater feature. A client then shows a thermostat with a 7–30 °C range plus room temperature, open window, EcoStart and setback. Now only aRoomTemperaturemakes a hot-water appliance room climate. Without one, the room-heater features default to off unless the status reports them (this cylinder sendsnullfor all of them), and so dosetpoint_write/setback_write. Room heaters are unchanged, andtest_status_marks_features_and_hot_waterstill holds.feat(hot-water):ApplianceStatusdeclares the cylinder fields the overview already carries:Capacity,HeatingUp,IsGreenEnergyActive,HygieneFrequency,HygieneTemperature,HolidayNumOfDays, plus the always-null rest.AvailableHotWaterturns out to be litres, since the app shows "336 L Hot water" for 336.get_heat_pump_hot_water_schedulenow returns a newHeatPumpHwcSchedule. The real reply is{HubId, ApplianceId, TimerPeriods: [{DayOfWeek, StartTime: 0, Mode: 2}]}: noTimerMode, integer start times, a mode per period. Parsing it asTimerModeSettingsraised on real hardware.set_hot_water_holiday(hub_id, appliance_ids, until, *, enable, heat_pump). Verified live:SetApplianceModeHeatPumpHwcwithApplianceModes=8, Status=1moved the status 8192 → 8200 withHolidayNumOfDaysset and heating stopped, andStatus=0restored 8192. The cylinder counts whole days, sountilis also sent as a rounded-upNumberOfDays.set_heat_pump_hot_water_scheduleis unchanged but now documents thatUpdateHeatPumpHwcSchedulePeriodsanswered 403 to every body tried: wrapped inTimerModeSettingsorSettings, with or withoutTimerMode, integer orHH:MM:SStimes,app_versionup to 3.0.0. Unwrapped bodies got 400. The app's own request hasn't been captured.docs: the decompiled API reference, OpenAPI summaries and README now say what was validated on the cylinder and what still wasn't (temperature, boost and hygiene writes).Still unknown: what the schedule's
Modevalues mean (only2seen), whetherStartTimeis minutes after midnight, and how the app derives the fill percentage it shows.Testing
ApplianceStatuswith every cylinder field, the schedule read, and the holiday request bodies (on, off, non-heat-pump endpoint, missing end).ruff check,ruff format --check,mypy,pytest(207 passed) andpre-commit run --all-filespass.🤖 Generated with Claude Code