Fix transposed Normal/Express 60 dishwasher cycle labels (issue #226)

'83' and '86' were swapped in the dishwasher_cycle catalog. Both the
original DW9000F-class fixture this table was built from and the issue
#226 reporter's board share the identical DeviceType_0812, and the
original fixture's own editCourseList puts the two codes back to back
(positions 4-5) -- a plausible adjacent-pair transcription slip. The
reporter's live confirmation (selecting 'Normal' ran the physical Express
60 program and vice versa) settles which way: '86' is Express 60, '83' is
Normal.

The energy-sensor part of the same issue was already resolved per the
issue thread (the device genuinely doesn't report usage, so the sensor's
removal was correct) -- not touched here.
This commit is contained in:
Marc Billow
2026-08-03 19:30:02 +00:00
parent fb5ed32b0f
commit e89aa4bab5
7 changed files with 33 additions and 10 deletions
@@ -48,6 +48,18 @@ DISHWASHER_SETTINGS = Capability(
# boolean-toggle contract washer's bubble-soak/pre-wash/intensive switches
# use). Course display names live in translations under
# entity.select.dishwasher_cycle (see laundry.cycle_select).
#
# '83'/'86' were transposed in that catalog until issue #226: both the
# original DW9000F-class fixture this table was built from and the issue
# #226 reporter's board report the identical DeviceType_0812 (a real
# per-board-generation id also seen on unrelated washer/dryer fixtures, so
# this is one shared course table, not a Table_02/Table_03-style generation
# split), and the original fixture's own live editCourseList
# ('EditCourseList_0E07908683848D808E8F') puts '86' and '83' back to back at
# positions 4-5 -- exactly the kind of adjacent pair a manual screenshot
# transcription slips on. The reporter's live confirmation (selecting
# 'Normal' ran the physical Express 60 program and vice versa) settles
# which way: '86' is Express 60, '83' is Normal.
# ---------------------------------------------------------------------------
CYCLE_OPTIONS = Capability(
@@ -278,9 +278,9 @@
"name": "Cyklus",
"state": {
"80": "Jemné",
"83": "Express 60",
"83": "Normální",
"84": "Intenzivní",
"86": "Normální",
"86": "Express 60",
"90": "Samočištění",
"0e": "AI mytí",
"07": "Předoplach",
@@ -278,9 +278,9 @@
"name": "Cycle",
"state": {
"80": "Delicate",
"83": "Express 60",
"83": "Normal",
"84": "Heavy",
"86": "Normal",
"86": "Express 60",
"90": "Self clean",
"0e": "AI Wash",
"07": "Pre blast",
@@ -392,9 +392,9 @@
"name": "Ciclo",
"state": {
"80": "Delicado",
"83": "Express 60",
"83": "Normal",
"84": "Intenso",
"86": "Normal",
"86": "Express 60",
"90": "Autolimpieza",
"0e": "Lavado IA",
"07": "Prelavado intenso",
@@ -278,9 +278,9 @@
"name": "Ciclo",
"state": {
"80": "Delicato",
"83": "Express 60",
"83": "Normale",
"84": "Intenso",
"86": "Normale",
"86": "Express 60",
"90": "Autopulizia",
"0e": "AI Wash",
"07": "Prelavaggio intenso",
@@ -278,9 +278,9 @@
"name": "Programma",
"state": {
"80": "Delicaat",
"83": "Express 60",
"83": "Normaal",
"84": "Intensief",
"86": "Normaal",
"86": "Express 60",
"90": "Zelfreiniging",
"0e": "AI Wash",
"07": "Voorspoelen",
+11
View File
@@ -33,6 +33,17 @@ class TestCycleOptions:
assert body == {"x.com.samsung.da.options": ["Course_90"]}
def test_normal_and_express_60_labels_are_not_transposed():
"""Issue #226: '83'/'86' were swapped in the shipped catalog -- '86' is
Express 60, '83' is Normal (see dishwasher.py's CYCLE_OPTIONS comment for
how this was confirmed)."""
from custom_components.localthings.catalog import _ENTITY_CATALOG
state = _ENTITY_CATALOG["select"]["dishwasher_cycle"]["state"]
assert state["83"] == "Normal"
assert state["86"] == "Express 60"
class TestDishwasherOptions:
def test_storm_wash_read_and_write(self):
desc = next(