# ZBT-2 OTBR Migration Checklist

**Date:** 2026-08-25
**Goal:** Replace Google TV Streamer as Thread Border Router with Home Assistant Connect ZBT-2 running OpenThread Border Router add-on.

## Why

Google TV Streamer silently re-forms the Thread mesh with fresh credentials after any disruption, stranding nodes. Google never exports the dataset, so there's no way to join its network. HA must host its own Thread network instead.

## Before you start

- [ ] Backup already taken (`2db4735e` — "Before ZBT-2 OTBR Migration")
- [ ] Locate Matter pairing labels on all 7 devices (flashlight — IKEA labels are tiny)

## Devices to migrate (all Thread-over-Matter)

| # | Device | Manufacturer | Model | Network | Notes |
|---|--------|-------------|-------|---------|-------|
| 1 | Bedroom Switch | IKEA | BILRESA scroll wheel | Google-75B7 | Bottom/back label |
| 2 | Bedroom Lamp | IKEA | KAJPLATS E12 WS | Google-75B7 | Bottom of lamp base |
| 3 | Office Button | IKEA | BILRESA dual button | Google-75B7 | Back/bottom |
| 4 | Office Scroll Wheel | IKEA | BILRESA scroll wheel | Google-75B7 | Assigned to Office area |
| 5 | Office Lamp | IKEA | KAJPLATS E12 CWS | Google-75B7 | Bottom of lamp base |
| 6 | Basement Switch | IKEA | BILRESA dual button | Google-75B7 | Back/bottom |
| 7 | Night Light | ThirdReality | Smart Night Light-W | **"st"** (separate) | Different network — good test case first |

## Step 1 — Hardware setup

1. [ ] Plug ZBT-2 into physical host machine
2. [ ] USB passthrough to HAOS VM in hypervisor (Proxmox/etc)
3. [ ] Confirm it appears: Settings -> System -> Hardware -> USB
4. [ ] Install OpenThread Border Router add-on (Settings -> Add-ons -> Add-on Store -> "OpenThread Border Router")
5. [ ] Configure device path: use `/dev/serial/by-id/...` (not `/dev/ttyUSB0`)
6. [ ] Start the add-on. Wait for logs to show `otbr-agent` running

## Step 2 — Verify new Thread network

7. [ ] Settings -> Devices & Services -> Thread — confirm border router is listed
8. [ ] Confirm a new network exists (name will be auto-generated, NOT "Google-75B7")
9. [ ] Verify enp1s0 IPv6 is still set to **Auto** (never static-no-gateway)

## Step 3 — Set preferred network

10. [ ] Thread integration -> configure -> set HA's new network as preferred

## Step 4 — Migration (one device at a time)

**CRITICAL: Keep Google TV Streamer powered on throughout migration.**

Recommended order: Night Light first (different network, good test), then IKEA devices.

For each device:
11. [ ] Settings -> Devices & Services -> Matter -> **Add Device**
12. [ ] Scan the device's QR / pairing label
13. [ ] HA detects it's already on the fabric -> choose **Move to HA's Thread Network**
14. [ ] Wait for device to come back `available`
15. [ ] Verify: `sensor.xxx_thread_network_name` = HA's new network (not "Google-75B7")
16. [ ] Move to next device

Repeat for all 7 devices.

## Step 5 — Disable Google TV Streamer

17. [ ] All 7 devices showing HA's network name
18. [ ] Google Home app -> Settings -> Google TV Streamer -> disable Thread/Hub radio
19. [ ] Cold-boot the TV Streamer (unplug -> replug) — stops it advertising as border router

## Step 6 — Verify

20. [ ] Thread integration shows ZBT-2 as border router with 7 nodes
21. [ ] All 7 devices available and responsive
22. [ ] Restart Home Assistant — devices should stay available (the whole point)
23. [ ] Check entity IDs unchanged: `light.bedroom_lamp`, `light.office_lamp`, `sensor.bedroom_switch_battery`, etc.

## Fallback (if a device refuses the move)

- Factory reset the specific device (consult manual — usually hold button 10+ seconds)
- Re-commission from scratch via Add Device + scan label
- Entity IDs don't change, so automations/scripts/scenes still work
