diff --git a/docs/ha-setup.md b/docs/ha-setup.md index 1974685..e0272aa 100644 --- a/docs/ha-setup.md +++ b/docs/ha-setup.md @@ -1,73 +1,67 @@ -# HA + Google Home setup — POS Briefing button +# HA + Google Home setup — POS Briefing button (DEPLOYED 2026-06-07) -The MQTT bridge (`pos-briefing-mqtt.service` on steel141) auto-creates an HA -button via MQTT discovery. Google's `google_assistant` integration does not -support `button` entities, so we wrap the button in a `script` (scripts expose to -Google as a **Scene** = a tappable button in the Home app). +Status: **deployed and verified end-to-end** on VM HA (`192.168.0.146`, HAOS 2026.2.3), +except the final Google-app tap (yours to try). -Chain: **Google Home tap → HA script → `button.press` → MQTT `posbriefing/button/press` -→ bridge runs `pos_briefing.py` → prints on the TM-m30.** +Chain: **Google Home tap → HA `script.print_daily_briefing` → `button.press` → +MQTT `posbriefing/button/press` (broker CT 301) → `pos-briefing-mqtt.service` on +steel141 → `pos_briefing.py` → printer (by MAC) → TM-m30.** -## 0. Confirm the entity exists -Settings → Devices & Services → **MQTT** → device **POS Briefing**. You should see -button **Print Daily Briefing** (entity `button.print_daily_briefing`). Pressing it -in HA should print a receipt. (Status is published on `posbriefing/status`: -`idle`/`printing`/`ok`/`error:`; availability on `posbriefing/availability`.) +Google's `google_assistant` integration doesn't support `button` entities, so the +MQTT-discovery button is wrapped in a `script`, which Google exposes as a **Scene** +(a tappable button in the Home app). -If the entity id differs, use whatever HA shows in the script below. +## What was deployed (VM HA `/config`, backed up to `/config/.backup/`) -## 1. Add the script -Settings → Automations & Scenes → **Scripts** → (top-right) Edit in YAML, or paste -into `scripts.yaml`: -```yaml -print_daily_briefing: - alias: Print Daily Briefing - sequence: - - service: button.press - target: - entity_id: button.print_daily_briefing - mode: single -``` +1. **`scripts.yaml`** — the script (note the real discovery entity id, which HA + prefixed with the device name): + ```yaml + print_daily_briefing: + alias: Print Daily Briefing + sequence: + - action: button.press + target: + entity_id: button.pos_briefing_print_daily_briefing + mode: single + ``` +2. **`configuration.yaml`** — `script.print_daily_briefing` added to the existing + `google_assistant.entity_config` (alongside the LG TV + projector; nothing else + touched): + ```yaml + google_assistant: + # ...existing project_id / service_account / report_state / expose_by_default... + entity_config: + script.print_daily_briefing: + name: Print Daily Briefing + expose: true + # switch.big_tv_lg_tv ... media_player.mitsubishi_projector ... (unchanged) + ``` +3. `ha core check` passed → `ha core restart` → `google_assistant.request_sync` (HTTP 200). -## 2. Expose the script to Google -Add to the SAME `google_assistant:` block that already exposes the LG TV switch -(keep your existing `project_id` / `service_account` lines): -```yaml -google_assistant: - project_id: - service_account: !include - report_state: true - exposed_domains: - - switch - entity_config: - script.print_daily_briefing: - name: Print Daily Briefing - expose: true -``` -Reload (Developer Tools → YAML → "Google Assistant" or restart HA). +## Verified +- `script.print_daily_briefing` loaded in HA (state `off`, "Print Daily Briefing"). +- Firing the script via HA API → bridge logged `Received: PRESS` → `Running briefing...` + → `Briefing printed OK` → **physical receipt printed**. +- MQTT discovery button is `button.pos_briefing_print_daily_briefing` (Settings → + Devices → MQTT → **POS Briefing**). -Reminders from the lgtv 2026-06-06 linking (already satisfied for your setup): -manual `google_assistant` integration (not Nabu Casa); account-linking scopes must -include `email` + `name`; the **"HTTP basic auth header" checkbox must be OFF**; the -Google **Test** must be activated by the same account used in the Home app -(slingshooter08). The GCP OAuth consent screen is unrelated to smart-home linking — -don't touch it. - -## 3. Sync to Google Home -Say "Hey Google, sync my devices" (or re-run device setup in the Home app). The -button appears as **Print Daily Briefing**; tapping it prints the receipt. - -## Optional: surface print status in HA -Add an MQTT sensor (configuration.yaml) if you want to see the last result: -```yaml -mqtt: - sensor: - - name: "POS Briefing Status" - state_topic: "posbriefing/status" - availability_topic: "posbriefing/availability" -``` +## Your only remaining step +Open the Google Home app (account `slingshooter08`). **Print Daily Briefing** should +appear as a control (after the request_sync; if not, say "Hey Google, sync my +devices"). Tap it → receipt prints. Optionally assign it a room / rename. ## Notes -- A print takes ~1–2 min (gemma4:26b summarization). The button returns immediately; - watch `posbriefing/status` go `printing` → `ok`. -- A second press while one is in flight is ignored (debounced) — no double prints. +- A print takes ~1–2 min (gemma4:26b summarization). The button/scene returns + immediately; `posbriefing/status` goes `printing` → `ok`. A second press while one + is in flight is ignored (debounced) — no double prints. +- Google-linking invariants (from lgtv 2026-06-06, already satisfied — don't re-fix): + manual `google_assistant` integration; account-linking scopes include `email`+`name`; + "HTTP basic auth header" checkbox OFF; the GCP OAuth consent screen is unrelated. +- Optional MQTT status sensor (configuration.yaml) if you want last-result visibility: + ```yaml + mqtt: + sensor: + - name: "POS Briefing Status" + state_topic: "posbriefing/status" + availability_topic: "posbriefing/availability" + ```