Google renders SCENE devices (HA scripts/scenes) as voice/Routine-only, not as tappable tiles -> the button was invisible. Switched the Google exposure to a template switch (tiles like the TV). Documents the broken HomeGraph SA key (invalid_grant) that disables requestSync/reportState until regenerated. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
3.6 KiB
HA + Google Home setup — POS Briefing button (DEPLOYED 2026-06-07)
Status: deployed on VM HA (192.168.0.146, HAOS 2026.2.3) and verified end-to-end
through HA. Final Google-app surfacing is yours (see "Your steps").
Chain: Google Home tile → HA switch.print_daily_briefing → button.press on
button.pos_briefing_print_daily_briefing → MQTT posbriefing/button/press
(broker CT 301) → pos-briefing-mqtt.service on steel141 → pos_briefing.py →
printer (by MAC) → TM-m30.
Why a switch, not a scene
A script/scene exposed to Google gets the Scene trait, which Google Home
does not render as a tappable tile (it's voice/Routine-only). A switch
renders as a tile (like the LG TV). So the action is exposed as a template switch.
Because HomeGraph state reporting is currently broken (see below), the switch is forced always-off and both on and off fire the print, so a tap always prints regardless of Google's cached state. The bridge debounce prevents any double-print. (Once the SA key is fixed, this can be simplified to on-only.)
What is deployed on VM HA /config (backups in /config/.backup/)
scripts.yaml—script.print_daily_briefing(presses the button). Kept as an alternate trigger; not exposed to Google.configuration.yaml:switch:templateprint_daily_briefing(the tile; entityswitch.print_daily_briefing).google_assistant.entity_configexposesswitch.print_daily_briefing(alongside the LG TV + projector; nothing else changed).
ha core checkpassed →ha core restart. Local SYNC webhook confirms the entity is reported to Google asaction.devices.types.SWITCH.
Verified
- Local Google SYNC (the manual integration's local-fulfillment webhook) returns 3 devices: Print Daily Briefing (SWITCH), Big TV (SWITCH), Projector (SETTOP).
switch.turn_on switch.print_daily_briefing→ bridgeBriefing printed OK→ physical receipt. (Same for the earlierscriptpath.)
Known issue — HomeGraph auth broken (pre-existing, not from this work)
HA's SERVICE_ACCOUNT.json (project seth-freiberg, SA claude@seth-freiberg.iam)
has an invalid private key (invalid_grant: Invalid JWT Signature) — the key was
rotated/deleted during the lgtv 2026-06-06 security cleanup but the HA copy was never
refreshed. Effects:
devices:requestSync400 → HA can't proactively push device-list changes; you must re-sync from the Google side ("Hey Google, sync my devices").devices:reportStateAndNotification400 → device states (incl. the TV/projector) don't push to Google in real time. Fix (GCP, your call): create a new JSON key forclaude@seth-freiberg.iam(HomeGraph API enabled), deploy to/config/SERVICE_ACCOUNT.json(chmod 600), restart HA. Thenrequest_syncand live state work for all devices, and this switch can drop the both-directions-fire hack.
Your steps (Google Home app, account slingshooter08)
- Say "Hey Google, sync my devices" (linking-based sync; works despite the SA-key issue). Print Daily Briefing should appear as a tile.
- Remove any stale/phantom device — HA only sends 3 devices; if Google shows 4, the extra is leftover from a prior link. (Settings → the duplicate → Remove.)
- Tap Print Daily Briefing → receipt prints in ~1–2 min.
Notes
- A print takes ~1–2 min (gemma4:26b).
posbriefing/statusgoesprinting→ok. - Google-linking invariants (lgtv 2026-06-06, satisfied — don't re-fix): manual
google_assistant, scopesemail+name, "HTTP basic auth header" OFF, GCP consent screen untouched (shared project).