Read the LCD_OV_WALL 8888 wall oven family (#572) - #573
Merged
Merged
Conversation
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.
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.
This reverts commit 0fee7b1.
…chanically" This reverts commit 9c7056d.
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.
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.
Closes #572.
The NV51K777OS Flex Duo connects over 8888 and answers with its full body, but
LCD_OV_WALL_16Khad no family table (family_mapped: false). It was read with the identity-only table, so it came up asdevice_type: unknownwith no entities.Family table
LCD_OV_WALLtable inlegacy_http.py. The appliance uses the same field names theTP2X_DA-KS-WALLOVEN(NW9000KD) uses over CoAP, so each resource lands on that board's href./operational/state/vs/0, with power and the child lock fanned out to their own hrefs as on the washer./remotectrl/vs/0), Information, Diagnosis and Alarms.for_device_by_resourcessignature (/oven/vs/0plusBake) types it as an oven, and it binds with nothing unbound.supportedModesinto one comma-joined string, withNoOperationandDrainlisted twice. AResourcecan now name fields to split, via the newjoinedfield. They're split, trimmed and deduplicated on read.Diagnostics
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.EnergyConsumptionon the washer.Mode labels
SteamBake,SteamRoast,UpperSteamBake,DescaleandDrainin 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,AutocookandPyroFreestill 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
typeand 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
PUT /devices/0, the same as the TP6X_RAC table. I'll ask the reporter to try them.Temperaturesentry, 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.Other
Tests
tests/fixtures/oven_lcd_ov_wall_16k_8888.json: the verbatimtransport.bodiesblock from the dump, with no serial or uuid.TestLcdOvWallintest_legacy_http.pycovers:unmapped_resourcesis covered for an unmapped family (everything but identity) and for the mapped washer (onlyEnergyConsumption).ruff format --check,ruff check,ty checkandpytestall pass locally (2632 passed).🤖 Generated with Claude Code
https://claude.ai/code/session_016Zb8NJJgcZfhsT4KNQ51ab