Skip to content

Read the LCD_OV_WALL 8888 wall oven family (#572) - #573

Merged
mbillow merged 6 commits into
mainfrom
claude/issue-572-wall-oven-legacy
Oct 5, 2026
Merged

mbillow merged 6 commits into
mainfrom
claude/issue-572-wall-oven-legacy

Conversation

@mbillow

@mbillow mbillow commented Oct 3, 2026 •

Copy link
Copy Markdown
Owner

Closes #572.

The NV51K777OS Flex Duo connects over 8888 and answers with its full body, but LCD_OV_WALL_16K had no family table (family_mapped: false). It was read with the identity-only table, so it came up as device_type: unknown with no entities.

Family table

  • New LCD_OV_WALL table in legacy_http.py. The appliance uses the same field names the TP2X_DA-KS-WALLOVEN (NW9000KD) uses over CoAP, so each resource lands on that board's href.
    • Operation goes to /operational/state/vs/0, with power and the child lock fanned out to their own hrefs as on the washer.
    • The other resources are Mode, Oven, Temperatures, Doors, Configuration (/remotectrl/vs/0), Information, Diagnosis and Alarms.
  • With that table, the existing for_device_by_resources signature (/oven/vs/0 plus Bake) types it as an oven, and it binds with nothing unbound.
  • This firmware packs supportedModes into one comma-joined string, with NoOperation and Drain listed twice. A Resource can now name fields to split, via the new joined field. They're split, trimmed and deduplicated on read.

Diagnostics

  • The 8888 transport's diagnostics now include unmapped_resources: the sections of the appliance's response that its family's table has no row for. Previously these were dropped without a trace.
    • Unmapped family: everything except identity.
    • Mapped family: anything new, e.g. EnergyConsumption on the washer.
  • Nothing is read from them or guessed about them. The list just shows what a new row would need to cover.

Mode labels

  • Added labels for SteamBake, SteamRoast, UpperSteamBake, Descale and Drain in all nine languages. The Samsung TP2X_DA-KS-WALLOVEN-000002 not responding to commands #300 wall oven shares the first four of these.
  • Healthycook1–6, UpperHealthycook1–4, Autocook and PyroFree still show as raw codes, because the dump doesn't say what they are.

History

This branch briefly carried a rework of the 8888 transport. It chose tables by the appliance's type and read unnamed sections onto /<name>/vs/0. A code review found that the guessed resources could get controls that silently did nothing. We decided the 8888 path shouldn't guess at all, so both rework commits are reverted here.

Open questions for the reporter

  • Writes are unconfirmed. Mode, setpoint and cook time follow the washer's aggregate PUT /devices/0, the same as the TP6X_RAC table. I'll ask the reporter to try them.
  • Cavities. The dump has a single Temperatures entry, and the upper-cavity modes are mixed into one mode list. Nothing tells the lower or combined cavity apart, so the entities cover whichever cavity the oven reports. A dump taken with the divider out, or while a lower-cavity cook is running, would show whether there's more to read.
  • Token. The reporter only got a token by doing it by hand. This PR doesn't touch the token exchange.

Other

  • Updated the README's list of 8888 appliances. It still said only the WW6500 washer.

Tests

  • Added tests/fixtures/oven_lcd_ov_wall_16k_8888.json: the verbatim transport.bodies block from the dump, with no serial or uuid.
  • New TestLcdOvWall in test_legacy_http.py covers:
    • mapping at any capacity
    • the href set
    • splitting the joined mode string
    • typing as an oven with nothing unbound
    • a cook reading through this firmware's float temperatures
    • mode, setpoint and cook-time writes reaching the right wrappers
    • no washer power flag on an oven
  • unmapped_resources is covered for an unmapped family (everything but identity) and for the mapped washer (only EnergyConsumption).
  • ruff format --check, ruff check, ty check and pytest all pass locally (2632 passed).

🤖 Generated with Claude Code

https://claude.ai/code/session_016Zb8NJJgcZfhsT4KNQ51ab

The NV51K777OS Flex Duo serves its state over 8888 with the field names
the TP2X_DA-KS-WALLOVEN uses over CoAP, so a family table that puts each
resource on that board's href is all it needs: it then types as an oven
from its /oven/vs/0 and Bake mode, and binds with nothing unbound.

This firmware packs supportedModes into one comma-joined string with
duplicates, so a table row can now name fields to split.

Also labels the steam, descale and drain oven modes, which the #300 wall
oven shares, and updates the README's list of 8888 appliances.

Writes follow the washer's aggregate PUT and are unconfirmed on this
family.
Every 8888 appliance on record states its own `type` in the aggregate
(Washer, Air_Conditioner, Oven), so the envelope table is now chosen by
it rather than by a family string per model line. The transport learns
it from the first sweep, or with one aggregate read before any sweep.

A resource no table row names now lands on /<name>/vs/0 instead of
being dropped, which is the right href for eight of the eleven rows the
tables carry. An unknown type therefore reads its real resources rather
than identity alone, and anything no capability binds reaches the
coverage repair like on a CoAP board. Those resources are read-only:
writes still need a row someone has written. EnergyConsumption, a
pointer to the usage file, is ignored by name.

With every 8888 entry presenting real resources, the config flow probe
is one pass and the translates_resources gate is gone. The washer's
course table and remote-power flag stay keyed by family.
@mbillow mbillow changed the title Read the LCD_OV_WALL 8888 wall oven family (#572) Read the LCD_OV_WALL wall oven, and pick 8888 tables by appliance type (#572) Oct 3, 2026
An unknown 8888 type now routes on its real resources, so a model string
can bind controls to resources only the mechanical rule placed. The
transport refuses those writes, but the coordinator ignored the 4.04 and
the control did nothing, silently.

The transport now raises WriteUnsupported instead. A control's write
turns it into a "can't be controlled over its local connection yet"
error without reconnecting, since nothing was sent; a debug write still
reports it as the 4.04 it is.
A resource the table has no row for is dropped without a trace, so a
reporter's download now names them: everything but identity for an
unmapped family, and anything new on a mapped one. Nothing is guessed
or read from them.
@mbillow mbillow changed the title Read the LCD_OV_WALL wall oven, and pick 8888 tables by appliance type (#572) Read the LCD_OV_WALL 8888 wall oven family (#572) Oct 3, 2026
@mbillow
mbillow merged commit 12bbb52 into main Oct 5, 2026
4 checks passed
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.

Unmapped Oven NV51K777OS Flex Duo wall oven.

1 participant