Files
localthings/tests/fixtures/golden/dishwasher.json
T
Marc Billow 9264b912f9 feat: full dryer support + consistent laundry capability surface
First full dryer dump (issue #14, DV90BB5245AES1) surfaced 5 unbound
hrefs and an "incomplete capability coverage" repair. Handle them and,
while here, make the washer/dryer/dishwasher families consistent instead
of each carrying a bespoke variant of the same controls.

Dryer coverage:
- /power/0, /kidslock/0, /remotectrl/0: bind via the OCF-native + vendor
  fallback pairs (prefer the standard OCF resource, fall back to -vs).
- /buzzersound/vs/0: new Buzzer sound select.
- /course/vs/0: cycle select shared with washer/dishwasher; ignore the
  /st/dryercourse/vs/0 re-encoding (mirror of /st/washercourse/vs/0).

Consistency / de-duplication:
- Move generic OCF controls (power/kids-lock/remote-control fallback
  pairs, energy meter) into common.py; every registry uses them.
- Move shared laundry controls (buzzer, job-beginning-status, and the
  /course/vs/0 cycle-select machinery) into laundry.py; washer and
  dishwasher stop hand-rolling their own copies.
- Energy meter is now sentinel-aware everywhere: the dead '-500'
  instantaneousPower reading no longer shows a misleading 0 W (fixes it
  on dryers and dishwashers, matching the earlier washer fix).
- Job-beginning-status reads x.com.samsung.da.currentStatus, the field
  every dump actually carries; the dryer sensor was previously blank.

Adds a scrubbed dryer fixture, golden, and capability tests, plus an
.claude/skills/adding-device-support skill capturing the dump-reading,
OCF-vs-vendor, entity-taxonomy, and coverage workflow. Bumps to 0.6.0.
2026-07-21 01:15:12 +00:00

67 lines
1.9 KiB
JSON

{
"state_keys": [
"alarm_code",
"auto_release_dry",
"child_lock",
"cycle",
"cycle_active",
"delay_start_hours",
"diagnosis_status",
"energy_kwh",
"finish_time",
"firmware_update",
"heated_dry",
"job_beginning_status",
"led_brightness",
"led_night_brightness",
"led_night_end",
"led_night_light",
"led_night_start",
"machine_state",
"operation_origin",
"power_switch",
"progress",
"progress_percentage",
"remote_control",
"sanitize",
"sound_mode",
"sound_volume",
"storm_wash",
"water_liters"
],
"discovery_unique_ids": [
"samsung_dishwasher_alarm_code",
"samsung_dishwasher_auto_release_dry",
"samsung_dishwasher_child_lock",
"samsung_dishwasher_cycle",
"samsung_dishwasher_cycle_active",
"samsung_dishwasher_delay_start_hours",
"samsung_dishwasher_diagnosis_start",
"samsung_dishwasher_diagnosis_status",
"samsung_dishwasher_energy_kwh",
"samsung_dishwasher_finish_time",
"samsung_dishwasher_firmware_update",
"samsung_dishwasher_heated_dry",
"samsung_dishwasher_job_beginning_status",
"samsung_dishwasher_led_brightness",
"samsung_dishwasher_led_night_brightness",
"samsung_dishwasher_led_night_end",
"samsung_dishwasher_led_night_light",
"samsung_dishwasher_led_night_start",
"samsung_dishwasher_machine_state",
"samsung_dishwasher_operation_origin",
"samsung_dishwasher_pause",
"samsung_dishwasher_power_switch",
"samsung_dishwasher_progress",
"samsung_dishwasher_progress_percentage",
"samsung_dishwasher_remote_control",
"samsung_dishwasher_sanitize",
"samsung_dishwasher_sound_mode",
"samsung_dishwasher_sound_volume",
"samsung_dishwasher_start",
"samsung_dishwasher_stop",
"samsung_dishwasher_storm_wash",
"samsung_dishwasher_water_liters"
]
}