From 29b9e36699411badf5a83d089a3743fc0b73ae08 Mon Sep 17 00:00:00 2001 From: Marc Billow Date: Sat, 11 Jul 2026 13:30:00 -0500 Subject: [PATCH] fix(washer): ignore remaining unbound hrefs (cycleinterface, drlc, operational/state OCF-native) discover() flagged /cycleinterface/vs/0, /drlc/0, and /operational/state/0 as unbound on real washer dumps, which would surface a spurious device coverage gap for washer owners. All three are noise: cycleinterface is empty on every dump seen, drlc/0 is an OCF-native duplicate of the already-ignored /drlc/vs/0, and operational/state/0 is a read-only OCF-native duplicate of /operational/state/vs/0 (already modeled by the richer, write-capable operational.OPERATIONAL_STATE). --- .../localthings/registry/capabilities/ignored.py | 14 ++++++++++++++ tests/test_registry_ignored.py | 3 +++ 2 files changed, 17 insertions(+) diff --git a/custom_components/localthings/registry/capabilities/ignored.py b/custom_components/localthings/registry/capabilities/ignored.py index 7161d7f..6a46698 100644 --- a/custom_components/localthings/registry/capabilities/ignored.py +++ b/custom_components/localthings/registry/capabilities/ignored.py @@ -109,4 +109,18 @@ IGNORED: list[Capability] = [ # data -- common.ENERGY_METER on /energy/consumption/vs/0 is the only # real source for this control. Capability(href='/energy/consumption/0'), + # Empty ({}) on every washer dump seen so far -- nothing to expose. + Capability(href='/cycleinterface/vs/0'), + # OCF-native duplicate of /drlc/vs/0 above -- same utility-program + # dependency this integration doesn't support locally. + Capability(href='/drlc/0'), + # OCF-native duplicate of /operational/state/vs/0, which is already + # modeled by operational.OPERATIONAL_STATE (a richer, write-capable + # capability with start/pause/stop buttons and a delay-start control) + # used by washer, dishwasher, dryer, and oven. This generic href only + # carries read-only overlapping data (current job state, remaining + # time, progress percentage) with no write path -- not worth building a + # parallel write-capable capability around an unverified generic OCF + # write contract. + Capability(href='/operational/state/0'), ] diff --git a/tests/test_registry_ignored.py b/tests/test_registry_ignored.py index cfb8733..b66d80c 100644 --- a/tests/test_registry_ignored.py +++ b/tests/test_registry_ignored.py @@ -68,5 +68,8 @@ class TestWasherIgnoredHrefs: '/wm/welcomemsg/vs/0', '/wm/personalcourse/vs/0', '/energy/consumption/0', + '/cycleinterface/vs/0', + '/drlc/0', + '/operational/state/0', ): assert href in ignored_hrefs, f"{href} should be in ignored.IGNORED"