feat(hass): smart-plug lamps as lights (switch_as_x) + free wake-word choice #99

Merged
kblack0610 merged 1 commit from feat/hass-plugs-as-lights into master 2026-07-08 03:51:07 +00:00
Owner

What (from live Binks testing on the M9)

Two fixes:

  1. "Turn off the lights" missed lamps on smart plugs. A smart plug is a switch, not a light, so Binks (correctly) saw no lights on. Wrap the three general-purpose plugs (Athom 613888, Shelly Plug 1, Shelly Plug 2 (Lamp)) as light entities via the built-in Switch as X helper → "lights" commands (Binks + built-in intents + lights cards) now control them. Appliance switches (cat litter, printer camera) left as switches.
  2. Wake word was stuck on ok_nabu — the startup automation re-pinned it on every browser reconnect. Stop pinning the wake word (Pipeline=Binks + on-device microWakeWord stay pinned); it is now user-selectable until the custom hey_binks model ships (Stage 4B re-adds the pin).

Changes

  • seed-switch-as-x-lights init container — seeds switch_as_x config entries (config in entry.options, VERSION 1/MINOR 3). Idempotent on options.entity_id. Wrapped lights register in core.entity_registryseed-binks-expose exposes them to Binks on the next boot (a 2nd rollout is done post-merge so they expose immediately).
  • voice_satellite_binks.yaml — stop forcing wake_word_1.

Verification

  • kustomize build OK; package YAML parses; switch_as_x seed dry-runs twice against live .storage → 3 entries, correct + idempotent.
  • Post-merge: the 3 light.* entities exist, source switches hidden, exposed to Binks; wake-word dropdown is freely selectable.

Note

Binks is not blind — it gets a live exposed-entity + state snapshot each turn; this was a switch-vs-light domain modeling gap.

Areas: 3 of 4 (Living Room/Kitchen/Bedroom) already exist; Office is a 10-sec Settings → Areas add (areas/room-assignment are UI/registry ops I keep out of automation per the repo safety rule). Room→device mapping + the fuller structured-device/RF model deserve their own plan.

## What (from live Binks testing on the M9) Two fixes: 1. **"Turn off the lights" missed lamps on smart plugs.** A smart plug is a `switch`, not a `light`, so Binks (correctly) saw no lights on. Wrap the three general-purpose plugs (**Athom 613888, Shelly Plug 1, Shelly Plug 2 (Lamp)**) as `light` entities via the built-in **Switch as X** helper → "lights" commands (Binks + built-in intents + lights cards) now control them. Appliance switches (cat litter, printer camera) left as switches. 2. **Wake word was stuck on `ok_nabu`** — the startup automation re-pinned it on every browser reconnect. Stop pinning the wake word (Pipeline=Binks + on-device microWakeWord stay pinned); it is now user-selectable until the custom `hey_binks` model ships (Stage 4B re-adds the pin). ## Changes - `seed-switch-as-x-lights` init container — seeds `switch_as_x` config entries (config in `entry.options`, VERSION 1/MINOR 3). Idempotent on `options.entity_id`. Wrapped lights register in `core.entity_registry` → `seed-binks-expose` exposes them to Binks on the next boot (a 2nd rollout is done post-merge so they expose immediately). - `voice_satellite_binks.yaml` — stop forcing `wake_word_1`. ## Verification - kustomize build OK; package YAML parses; switch_as_x seed **dry-runs twice against live `.storage`** → 3 entries, correct + idempotent. - Post-merge: the 3 `light.*` entities exist, source switches hidden, exposed to Binks; wake-word dropdown is freely selectable. ## Note Binks is **not** blind — it gets a live exposed-entity + state snapshot each turn; this was a switch-vs-light **domain modeling** gap. _Areas: 3 of 4 (Living Room/Kitchen/Bedroom) already exist; **Office** is a 10-sec Settings → Areas add (areas/room-assignment are UI/registry ops I keep out of automation per the repo safety rule). Room→device mapping + the fuller structured-device/RF model deserve their own plan._
Two fixes from live Binks testing:

1. 'Turn off the lights' missed lamps on smart plugs because a plug is a
   `switch`, not a `light` — Binks (correctly) saw no lights on. Wrap the three
   general-purpose plugs (Athom 613888, Shelly Plug 1, Shelly Plug 2 (Lamp)) as
   `light` entities via the built-in Switch as X helper, so 'lights' commands
   (Binks + built-in intents + lights cards) control them. Appliance switches
   (cat litter, printer camera) are left as switches.
   - seed-switch-as-x-lights init container: seeds switch_as_x config entries
     (config in entry.options, VERSION 1/MINOR 3). Idempotent on options.entity_id.
     The wrapped lights register in core.entity_registry → seed-binks-expose
     exposes them to Binks on the next boot.

2. The startup automation re-pinned the wake WORD on every browser reconnect,
   which blocked picking a word in the UI. Stop pinning wake_word_1 (Pipeline=
   Binks + on-device microWakeWord stay pinned); it becomes user-selectable
   until the custom hey_binks model ships (Stage 4B re-adds the pin).

Verified: kustomize build OK, package YAML parses, switch_as_x seed dry-runs
twice against live .storage (3 entries, correct + idempotent). Note: Binks is
NOT blind — it gets a live exposed-entity+state snapshot each turn; this was a
switch-vs-light domain modeling gap, now fixed.
kblack0610 deleted branch feat/hass-plugs-as-lights 2026-07-08 03:51:07 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
kblack0610/home-config!99
No description provided.