Add missing oven cook modes for NE63A6511SS/AA range (issue #138)

The range/oven-combo device in issue #138 (NE63A6511SS/AA, no
/information/vs/0) already resolves cleanly to the range registry via the
issue #74 for_device_by_resources fallback, with zero unbound hrefs -- the
reporter was just on an older release (0.11.1) predating that fix.

However its /mode/vs/0 supportedModes advertises ConvectionRoast, KeepWarm,
BreadProof, AirFryer, Dehydrate, SelfClean, and SteamClean, none of which
were in oven._OVEN_MODES. Since range.py reuses oven.OVEN_MODE's SelectDesc
wholesale, those modes were silently rejected by the mode select's write
validation and missing from its options. Extend the confirmed mode list and
lock in a scrubbed fixture, golden, and test for this dump.
This commit is contained in:
Marc Billow
2026-07-28 13:12:40 +00:00
parent f5be651430
commit 123455a873
5 changed files with 321 additions and 0 deletions
@@ -51,6 +51,15 @@ SETPOINT_STEP_F = 5
# Mode options seen on NV7000BS-class. No dump exists so this list is inferred
# from Samsung documentation and firmware observations. The firmware will
# reject unknown modes; missing entries here are a coverage gap, not a bug.
#
# ConvectionRoast/KeepWarm/BreadProof/AirFryer/Dehydrate/SelfClean/SteamClean
# are confirmed against issue #138's range dump (NE63A6511SS/AA) -- its
# /mode/vs/0 supportedModes lists all of them, and the range family shares
# this select via range.py reusing oven.OVEN_MODE wholesale. 'AirFryer' is
# kept alongside 'AirFry' rather than replacing it -- the NV7000BS-class
# dump this list was originally inferred from spells it without the
# trailing 'er', and neither model's actual token is independently
# confirmed, so both are treated as real device-reported spellings.
_OVEN_MODES = (
'NoOperation',
'Bake',
@@ -58,10 +67,17 @@ _OVEN_MODES = (
'Convection',
'ConvectionBake',
'ConvectionBroil',
'ConvectionRoast',
'FrozenPizzaPlus',
'SlowCook',
'PlateWarm',
'AirFry',
'AirFryer',
'KeepWarm',
'BreadProof',
'Dehydrate',
'SelfClean',
'SteamClean',
)
_SAMSUNG_STATE_TO_OCF = {