Document Vino Nest and HA recovery
This commit is contained in:
@@ -1,18 +1,40 @@
|
||||
# Home Assistant (app layer)
|
||||
|
||||
<scope>Dashboards (Lovelace), the Great Room AV stack, and household automations on `home.vino.network`. Access/SSH/API/Z-Wave infra is owned by the **fritzlab** skill [[home-assistant]] (`reference/home-assistant.md`). Token: `HA_ACCESS_TOKEN` in `~/code/git/code.fritzlab.net/fritzlab/k8s-manager/.env`.</scope>
|
||||
<scope>Dashboards (Lovelace), the Great Room AV stack, and household automations on `home.vino.network`. Access/SSH/API/Z-Wave infra is owned by the **fritzlab** skill [[home-assistant]] (`reference/home-assistant.md`). Token: `VINO_HA_TOKEN` in `~/.env`.</scope>
|
||||
|
||||
<config-repo>
|
||||
Config is version-controlled at **`dfritz/home-assistant`** (code.fritzlab.net; clone `~/code/git/code.fritzlab.net/dfritz/home-assistant`): a manual mirror of the safe parts of HAOS `/config` — YAML config + includes, blueprints, `custom_components/frame_art`, `www/` cards, and a `dashboards/` snapshot of the storage-mode Lovelace (export, not live-sync). Gitignored: `secrets.yaml`, `.storage/`, the DB, `*.pem`, logs, deps/venv. Externally-managed components stay in their own repos: celebright → `dfritz/celebright`, hdmi_matrix → `dfritz/haas-hdmi-matrix-custom-component`. No CI auto-deploy — sync via `rsync -e "ssh -4"` to/from `home-assistant.vino.network:/config/`.
|
||||
Config is version-controlled at **`dfritz/home-assistant`** (code.fritzlab.net; clone `~/code/git/code.fritzlab.net/dfritz/home-assistant`): a manual mirror of the safe parts of HAOS `/config` — YAML config + includes, blueprints, `custom_components/frame_art`, `www/` cards, and a `dashboards/` snapshot of the storage-mode Lovelace (export, not live-sync). Gitignored: `secrets.yaml`, `.storage/`, the DB, `*.pem`, logs, deps/venv. Externally-managed components stay in their own repos: celebright → `dfritz/celebright`, hdmi_matrix → `dfritz/haas-hdmi-matrix-custom-component`. No CI auto-deploy — sync via `rsync -e "ssh -6"` to/from `home-assistant.vino.network:/config/`.
|
||||
</config-repo>
|
||||
|
||||
<nest-matter>
|
||||
## Nest thermostats
|
||||
|
||||
Matter Server 9.1.0 and the `matter` integration provide local control for three
|
||||
Nest Learning Thermostat 4th gen nodes plus their bridged sensors. Primary devices
|
||||
are `Entryway Nest`, `Master Bedroom Nest`, and `Sport Court Nest`; climates are
|
||||
`climate.entryway_nest`, `climate.master_bedroom_nest`, and
|
||||
`climate.sport_court_nest`. Thermostats carry `Matter Nest` + `Matter HVAC` labels;
|
||||
child devices are `<Location> Sensor Nest` and unlabeled. All three are forced-air
|
||||
`heat_cool` zones.
|
||||
|
||||
The cloud `nest` fallback integration is not configured. It requires a dedicated
|
||||
Vino Web OAuth client in Google Cloud project `home-assistant-471823` (redirect
|
||||
`https://my.home-assistant.io/redirect/oauth`) and a separate Device Access project;
|
||||
do not reuse Lodge OAuth credentials, Device Access project, or Pub/Sub subscription.
|
||||
Target cloud naming is `<Zone> Google Nest` and `climate.<zone>_google_nest`, labels
|
||||
`Google Nest` + `HVAC`.
|
||||
|
||||
Recovery backup `pre-nest-normalization-2026-07-18` (`a7b09a9b`) contains HA
|
||||
registry/dashboard state without the database.
|
||||
</nest-matter>
|
||||
|
||||
<lovelace>
|
||||
## Editing dashboards (Lovelace)
|
||||
Both dashboards (`Overview` url_path `lovelace`, `Map`) are **storage mode** (UI-managed), not YAML — no file to edit. Drive over the WS API:
|
||||
- Read: `{"type":"lovelace/config"}` (no `url_path` = default `Overview`) → full config (`views[]`).
|
||||
- Write: `{"type":"lovelace/config/save","config":<whole config>}` — **whole-config read-modify-write**, not per-view. Always back up the fetched config first; a bad save replaces every view.
|
||||
- Views use `subview: true` for the per-device remotes (reached by nav, not the top tab bar). Card commands: copy a *proven* button from a working view rather than guessing service/command strings.
|
||||
- No HACS, no custom themes (`frontend/get_themes` empty). Custom Lovelace cards: drop the JS in `/config/www/` (root-owned → `ssh -4 … sudo tee`), register via `{"type":"lovelace/resources/create","res_type":"module","url":"/local/<file>.js?v=N"}`. Served at `https://home.vino.network/local/<file>.js`. Browser caches resources — bump `?v=` and hard-refresh (mobile app: restart) to pick up changes.
|
||||
- No HACS, no custom themes (`frontend/get_themes` empty). Custom Lovelace cards: drop the JS in `/config/www/` (root-owned → `ssh -6 … sudo tee`), register via `{"type":"lovelace/resources/create","res_type":"module","url":"/local/<file>.js?v=N"}`. Served at `https://home.vino.network/local/<file>.js`. Browser caches resources — bump `?v=` and hard-refresh (mobile app: restart) to pick up changes.
|
||||
</lovelace>
|
||||
|
||||
<great-room-av>
|
||||
@@ -28,6 +50,12 @@ Source switching = `script.set_mode_great_room_*`:
|
||||
- Each sets both matrix outputs then runs `script.building_block_set_great_room_to_hdmi_matrix` (TV→HDMI, AVR zones on, vol 0.55, ALL ZONE STEREO).
|
||||
|
||||
Source devices: Roku (`remote.roku_ultra`/`roku_3`, commands **lowercase** `home/back/up/down/left/right/select/info`); Fire TV (`remote.fire_tv_stick`, commands **UPPERCASE** `HOME/BACK/UP/DOWN/LEFT/RIGHT/CENTER/INFO/MENU`). App shortcuts via `media_player.select_source` (Roku Plex source = `Plex - Free Movies & TV`).
|
||||
|
||||
Great Room AVR = Denon AVR-X2700H. `setup_error` plus a timeout on
|
||||
`:8080/goform/Deviceinfo.xml` is a wedged receiver network stack; the narrow repair
|
||||
is Denon telnet command `NSRBT`, wait for Deviceinfo HTTP 200, then reload the
|
||||
`Great Room` config entry. This preserves power/mute state and restores
|
||||
`media_player.great_room` + `media_player.kitchen`.
|
||||
</great-room-av>
|
||||
|
||||
<remotes>
|
||||
@@ -44,6 +72,6 @@ Source-of-truth: `dfritz/home-assistant` repo → `www/great-room-remote-card.js
|
||||
- *TV*: forces `remote.the_frame_tv`. One-tap fallback if a source device (asleep Roku → "Error communicating with Roku API") doesn't respond. **Samsung `samsungtv` integration needs `KEY_*` codes** (`KEY_UP/DOWN/LEFT/RIGHT/ENTER/RETURN/HOME/INFO`, `KEY_VOLUP/VOLDOWN`) — lowercase words return HTTP 200 but the TV silently ignores them (this is why the original lowercase remote never actually drove the TV).
|
||||
- Tapping a source pill switches the matrix (`set_mode` script) and snaps target back to Follow source.
|
||||
**Volume/mute are context-aware too** (per-profile `volume` entity): TV target → `media_player.the_frame_tv` (Samsung supports `volume_set`); source target → `media_player.great_room` (Denon AVR zone, the audio path for matrix sources). The slider uses a timestamp guard (not `activeElement`) so frequent `hass` updates don't snap the thumb back mid-drag on iOS. Frame TV can't launch apps via `select_source` (source_list only `['TV','HDMI']`), so apps only show for Roku/Fire. All entities/commands live in `DEFAULTS` (config-overridable).
|
||||
**Deploy after edit:** `node --check` then `cat www/great-room-remote-card.js | ssh -4 home-assistant.vino.network 'sudo tee /config/www/great-room-remote-card.js'`, bump resource `?v=` (WS `lovelace/resources/update`, resource_id `7ee4fcac14ea4a3b9ef76c0625a89721`), hard-refresh.
|
||||
**Deploy after edit:** `node --check` then `cat www/great-room-remote-card.js | ssh -6 home-assistant.vino.network 'sudo tee /config/www/great-room-remote-card.js'`, bump resource `?v=` (WS `lovelace/resources/update`, resource_id `7ee4fcac14ea4a3b9ef76c0625a89721`), hard-refresh.
|
||||
</great-room-remote-card>
|
||||
</remotes>
|
||||
|
||||
Reference in New Issue
Block a user