home-assistant: record completed Matter recovery

This commit is contained in:
Donavan Fritz
2026-07-15 17:13:59 -05:00
parent 024764206e
commit 06c246f021
2 changed files with 55 additions and 62 deletions
+2 -2
View File
@@ -39,7 +39,7 @@ user-invocable: true
<references> <references>
<reference file="reference/home-assistant.md" <reference file="reference/home-assistant.md"
summary="Home Assistant: access/WS+Supervisor API, dual Nest integration, matter.js 9.0.4 new fabric + re-commissioning (1/8 done, blocked on on-network code generation, addon-restart gotcha), first backup taken, main Lovelace dashboard" summary="Home Assistant: public API access, dual Nest paths, Matter Server 9.1.0 fabric 2 with all 8 nodes local, Matter-first scripts and Overview, cloud fallback, backups"
categories=["home-automation"] categories=["home-automation"]
keywords=["home assistant", "HA", "home.thelonglakelodge.com", "matter", "nest", "thermostat", "climate", "dashboard", "lovelace", "HVAC", "in floor heating", "environmentals", "core_matter_server", "172.24.24.50"] /> keywords=["home assistant", "HA", "home.thelonglakelodge.com", "matter", "nest", "thermostat", "climate", "dashboard", "lovelace", "HVAC", "in floor heating", "environmentals", "core_matter_server", "172.24.24.50"] />
</references> </references>
@@ -56,4 +56,4 @@ user-invocable: true
summary="Lodge website: Latchkey managed-website service (latchkey-sites bucket, sites anycast edge, auto-TLS), Manage-files editing, /welcome PDF stub" summary="Lodge website: Latchkey managed-website service (latchkey-sites bucket, sites anycast edge, auto-TLS), Manage-files editing, /welcome PDF stub"
categories=["website"] categories=["website"]
keywords=["website", "thelonglakelodge.com", "welcome packet", "PDF", "welcome.pdf", "/welcome", "Latchkey", "managed-website", "Manage files", "custom_domains", "cd-tll0001"] /> keywords=["website", "thelonglakelodge.com", "welcome packet", "PDF", "welcome.pdf", "/welcome", "Latchkey", "managed-website", "Manage files", "custom_domains", "cd-tll0001"] />
</references> </references>
+53 -60
View File
@@ -2,13 +2,15 @@
<overview> <overview>
HA OS at `home.thelonglakelodge.com`, proxied via fritzlab sjc001 remote-proxy HA OS at `home.thelonglakelodge.com`, proxied via fritzlab sjc001 remote-proxy
to `172.24.24.50:8123` (also directly reachable on the lab network). Supervisor to the lodge LAN. Use the public HTTPS/WSS path; direct `172.24.24.50:8123` is
Observer on `:4357` (read-only health, no auth). API token in `~/.env` as unapproved IPv4 inventory, not an operational path. API token in `~/.env` as
`HA_TOKEN` (long-lived admin token — core API + service calls + Supervisor: `HA_TOKEN` (long-lived admin token — core API + service calls + Supervisor:
WS `{"type":"supervisor/api","endpoint":...}` for JSON endpoints, REST WS `{"type":"supervisor/api","endpoint":...}` for JSON endpoints, REST
`/api/hassio/addons/<slug>/logs` for text logs; `/api/error_log` is 404 — `/api/hassio/addons/<slug>/logs` for text logs; `/api/error_log` is 404 —
use WS `system_log/list`). No SSH (`:22` closed, no terminal addon). use WS `system_log/list`). No SSH (`:22` closed, no terminal addon).
No automatic backups configured (`backup/info` → 0 backups). No automatic Supervisor full-backup schedule. Local recovery backups include
`pre-matter-recommission 2026-07-05` and
`post-matter-recommission-2026-07-15`.
Local control via WebSocket: `wss://home.thelonglakelodge.com/api/websocket`, Local control via WebSocket: `wss://home.thelonglakelodge.com/api/websocket`,
auth with `{"type":"auth","access_token":HA_TOKEN}`. Useful WS cmds: auth with `{"type":"auth","access_token":HA_TOKEN}`. Useful WS cmds:
@@ -24,25 +26,24 @@ auth with `{"type":"auth","access_token":HA_TOKEN}`. Useful WS cmds:
The 8 Nest thermostats appear via two independent paths: The 8 Nest thermostats appear via two independent paths:
- **Cloud (Google Nest)** — `nest` integration, entities `climate.*_google_nest` - **Cloud (Google Nest)** — `nest` integration, entities `climate.*_google_nest`
(+ `climate.lodge_basement` = Basement Living Room) and per-zone (+ `climate.lodge_basement` = Basement Living Room) and per-zone
`sensor.*_temperature` / `sensor.*_humidity`. Reliable; cloud-dependent. `sensor.*_temperature` / `sensor.*_humidity`. Retained as fallback.
- **Matter (local)** — `matter` integration via the `core_matter_server` addon, - **Matter (local)** — `matter` integration via the `core_matter_server` addon,
entities `climate.*_nest`. Local control, but see incident below. entities `climate.*_nest`. Primary control path.
8 zones: Office, Kitchen, Bunkhouse Kitchen (forced-air "HVAC"); Eat-in Kitchen, 8 zones: Office, Kitchen, Bunkhouse Kitchen (forced-air "HVAC"); Eat-in Kitchen,
Primary Bathroom, Basement Living Room, Basement Bedroom, Tub Room (in-floor heat). Primary Bathroom, Basement Living Room, Basement Bedroom, Tub Room (in-floor heat).
Matter fabric id `1E5211CA4C7B5275`, node ids 15,7,8,9 (temp sensors are bridged
endpoint-101 sub-devices of their thermostat node).
`script.set_away_temperatures` (HVAC 5578 / in-floor 55) and `script.set_away_temperatures` (HVAC `heat_cool` low/high 5578 / in-floor 55)
`script.set_occupied_temperatures` (HVAC 6876 / in-floor 67) set all zones, and `script.set_occupied_temperatures` (HVAC `heat_cool` low/high 6876 /
targeting by **label**: `hvac` (3 forced-air) and `in_floor_heat` (5 in-floor), in-floor 67) set all zones,
both applied to the cloud `*_google_nest` devices (resolved in-script via targeting Matter device labels `matter_hvac` (3 forced-air) and
`matter_in_floor_heat` (5 in-floor). Both run with no delays and resolve device
labels to climate entities via
`label_devices(..) | map('device_entities') | ... | select('match','climate')` `label_devices(..) | map('device_entities') | ... | select('match','climate')`
since the labels are on devices, not entities). Commands are **serialized one because labels are on devices. Verified 8/8 for both profiles on 2026-07-15.
zone at a time with an 8 s delay** — firing all 8 at once trips the Google Nest Cloud devices retain `google_nest` plus `hvac` / `in_floor_heat` labels; any
SDM per-user `ExecuteDeviceCommand` rate limit (429 RESOURCE_EXHAUSTED). (Matter copies carry parallel cloud fallback script must serialize commands with an 8 s delay to avoid the
`matter_hvac` / `matter_in_floor_heat` labels — used by the scripts before the Google SDM `ExecuteDeviceCommand` 429 limit.
2026-06-15 repoint to cloud.) `google_nest` labels all 8 cloud devices.
</thermostats> </thermostats>
<matter-outage> <matter-outage>
@@ -55,56 +56,49 @@ Matter devices report `node_not_found`, all 59 `climate.*_nest` etc. entities
simply has zero nodes. Addon restart + config-entry reload do NOT restore them simply has zero nodes. Addon restart + config-entry reload do NOT restore them
(storage lost, not transient), and there is no backup to restore from. (storage lost, not transient), and there is no backup to restore from.
Cloud Nest is unaffected → thermostat control intact via `*_google_nest`. The 9.0.0 Python→matter.js migration created fabric 2; the old compressed fabric
`1E5211CA4C7B5275` is gone. Recovery completed 2026-07-15 by recommissioning all
Recovery = re-commission each thermostat on-site (non-destructive, no factory 8 thermostats through Nest multi-admin. Cloud Nest remained available throughout.
reset needed — Nest supports Matter multi-admin):
1. On lodge WiFi, Google Home app (lodge account) → tap thermostat → Settings →
"Linked Matter apps & services" → "Link apps & services" → generate a Matter
setup code (11-digit / QR). Code is single-use, ~5 min TTL.
2. HA → Settings → Devices & Services → Matter → Add device → enter the code.
Wait ~12 min; node appears (bridged temp sensor comes with it).
3. Repeat per thermostat (one code at a time). Rename to match.
4. Delete the stale unavailable Matter devices afterward.
Then re-point dashboard climate tiles back to `climate.*_nest` if local control
is wanted (see dashboard note).
</matter-outage> </matter-outage>
<matter-recommission> <matter-recommission>
## Matter re-commissioning (2026-07-05, in progress) ## Matter fabric 2 (complete)
Addon `core_matter_server` 9.0.4 = matter.js server (schema 11). The 9.0.0 `core_matter_server` 9.1.0 runs matter.js. All nodes are available:
migration from the Python server lost the fabric — new fabric_id 2; the old
fabric `1E5211CA4C7B5275` is gone. All 8 Nest thermostats need re-commissioning
onto the new fabric. DONE: Lodge Kitchen (node 16, `climate.lodge_kitchen_nest`,
device labeled `matter_nest`+`matter_hvac`, bridged temp sensor "Kitchen").
REMAINING (blocked until someone is on the lodge network to generate codes):
Office, Primary Bathroom, Bunkhouse Kitchen, Eat-in Kitchen, Basement Bedroom,
Tub Room, Basement Living Room. All stale old-fabric devices
deleted from the registry.
Procedure (requires phone ON the lodge network — Google Home refuses to | Node | Device | Climate entity | Category | Child sensor |
generate a Matter code off-network, verified 2026-07-05; commissioning itself |---:|---|---|---|---|
is then drivable remotely via WS): | 16 | Lodge Kitchen Nest | `climate.lodge_kitchen_nest` | `matter_hvac` | Lodge Kitchen Sensor Nest |
| 17 | Lodge Office Nest | `climate.lodge_office_nest` | `matter_hvac` | Lodge Office Sensor Nest |
| 18 | Bunkhouse Kitchen Nest | `climate.bunkhouse_kitchen_nest` | `matter_hvac` | Bunkhouse Kitchen Sensor Nest |
| 19 | Lodge Primary Bathroom Nest | `climate.lodge_primary_bathroom_nest` | `matter_in_floor_heat` | — |
| 20 | Lodge Eat-in Kitchen Nest | `climate.lodge_eat_in_kitchen_nest` | `matter_in_floor_heat` | — |
| 21 | Lodge Basement Bedroom Nest | `climate.lodge_basement_bedroom_nest` | `matter_in_floor_heat` | — |
| 22 | Lodge Tub Room Nest | `climate.lodge_tub_room_nest` | `matter_in_floor_heat` | — |
| 23 | Lodge Basement Living Room Nest | `climate.lodge_basement_living_room_nest` | `matter_in_floor_heat` | — |
Every thermostat also has `matter_nest`. Eight thermostat nodes plus the three
bridged sensors equal 11 HA Matter devices. All stale fabric-1 registry devices
are deleted.
Recommissioning requires a phone on lodge WiFi; Google Home refuses to generate
a Matter code off-network:
1. Google Home app (lodge account) → thermostat → Settings → Linked Matter 1. Google Home app (lodge account) → thermostat → Settings → Linked Matter
apps & services → Link apps & services → 11-digit code (single-use, ~5 min). apps & services → Link apps & services → 11-digit code (single-use, ~5 min).
2. WS `{"type":"matter/commission","code":"<code>"}` (or HA UI Add device). 2. WS `{"type":"matter/commission","code":"<code>","network_only":true}`
(or HA UI Add device).
3. Rename device to "<Zone> Nest", label `matter_nest` + `matter_hvac` 3. Rename device to "<Zone> Nest", label `matter_nest` + `matter_hvac`
(Office, Kitchen, Bunkhouse Kitchen) or `matter_in_floor_heat` (the 5 (Office, Kitchen, Bunkhouse Kitchen) or `matter_in_floor_heat` (the 5
in-floor zones), rename climate entity to `climate.<zone>_nest`. in-floor zones), rename climate entity to `climate.<zone>_nest`.
GOTCHA — "Address unreachable" / commission timeout: the matter.js server's GOTCHA — `Address unreachable` / commission timeout after host boot can be a
sockets can wedge when the addon starts at host boot (observed: fe80 dial to wedged matter.js socket (`1 of 1 attempt(s) failed, 1 discovered`). Restart
the Nest unreachable for hours, `1 of 1 attempt(s) failed, 1 discovered`). `core_matter_server`, then retry. Do not treat add-on restart as lost-fabric
FIX: restart the Matter Server addon, then retry — same address connects fine. recovery.
Restart the addon BEFORE a commissioning session if the host rebooted since
the addon last restarted. Network is NOT the issue (Nests + HA share the flat
`vino` 172.24.24.0/24; vino has no IPv6 RA so everything is fe80 + IPv4).
Backups: first-ever backup taken 2026-07-05 ("pre-matter-recommission", `post-matter-recommission-2026-07-15` (backup id `2e0efde0`) includes HA,
hassio.local, unprotected). Automatic backups still NOT configured — set up database, and `core_matter_server` data on `hassio.local`. The nightly Git export
Settings → System → Backups automatic schedule (the June fabric loss was does NOT contain Matter fabric storage. Automatic Supervisor backups remain off.
unrecoverable because there were zero backups).
</matter-recommission> </matter-recommission>
<dashboard> <dashboard>
@@ -117,10 +111,9 @@ grids — **Lodge HVAC** (office, kitchen), **In-Floor Heat** (5 in-floor zones)
`Environmentals` (history page), and `Lock Management`. Edit via `Environmentals` (history page), and `Lock Management`. Edit via
`lovelace/config` / `lovelace/config/save` (WS). `lovelace/config` / `lovelace/config/save` (WS).
HVAC climate tiles point at the **cloud** `*_google_nest` entities (repointed Overview thermostat cards point at all 8 local Matter `climate.*_nest` entities.
off the dead Matter `*_nest` during the 2026-06-15 outage). The `Environmentals` The `Environmentals` page remains cloud-backed: three per-category
page is three per-category vertical-stacks (Lodge HVAC / In-Floor Heat / vertical-stacks (Lodge HVAC / In-Floor Heat / Bunkhouse), each with Temperature,
Bunkhouse), each with Temperature, Humidity, and Heating/Cooling history-graphs Humidity, and Heating/Cooling history graphs (72h). Five in-floor thermostats
(72h) scoped to that category's entities. have no Matter humidity entity, so cloud humidity remains required there.
If Matter is re-commissioned and local control is preferred, repoint these back.
</dashboard> </dashboard>