My Home Assistant Migration 2026

From Hub Chaos to One Clean Architecture — My Home Assistant Migration 2026

Tags: frigate zigbee2mqtt matter influxdb grafana homekit bare-metal haos reolink mosquitto


TL;DR

After 6-7 years of accumulating smart home hubs, I rebuilt everything from scratch on bare metal Home Assistant OS (HAOS 18.0) on a Lenovo M710q mini PC. One guiding rule: everything local, no cloud accounts, one single pipeline to Apple Home for the family. This post covers the full journey — why I did it, the architecture decisions, the real installation challenges, and what's running now.


PHASE 1 — Design & Architecture

How It Started — The Hub Mess

Like most people here, my smart home grew organically over the years. By 2026 here's what I was running:

  • SmartThings hub — original automation backbone
  • Two Philips Hue Bridges — one for indoors, one I added thinking I needed it
  • Lutron Caséta — great switches but another hub
  • Ecobee — thermostat with its own cloud
  • Meross — garage door openers via HomeKit
  • Home Assistant — running as a VM on Dell R720 ESXi, later migrated to Proxmox VM on Lenovo M920q
  • Blue Iris — Windows NVR for Amcrest cameras on a T5500 workstation
  • Multiple cloud apps — Kasa, Amazon plugs, eWeLink outdoor plug

The problem wasn't that any single device didn't work. The problem was that nothing talked to each other cleanly. Hub-to-hub connections, app-to-app automations, cloud dependencies everywhere. If one thing went down, it cascaded. The family had multiple apps — nobody used it properly because it was too complicated.

The breaking point: I realized I had hardware running 24/7 that I didn't need, cloud accounts that could disappear tomorrow taking my automations with them, and a system only I could operate.


The Architecture Decision — Four Rules

Before touching any hardware, I defined the rules:

Rule 1: One Pipeline, No Exceptions

Physical Devices → Home Assistant → HomeKit Bridge → Apple Home

Every single device. No direct hub-to-hub connections. No device that bypasses HA. Apple Home is the family UI — clean, simple, familiar. HA is the brain.

Rule 2: Local Control Only — Zero Mandatory Cloud Accounts

If a device requires a vendor app or cloud login to function — even just for initial setup — it gets rejected. No exceptions. A company going under or changing their API shouldn't render my hardware useless.

Rule 3: Bench Test Before Bulk Buy

Order one, test it thoroughly for a full week, then order more.

Rule 4: Multiple Simple Automations Over Complex Branching Logic

When one automation sequence can't achieve a result cleanly, use two or more separate automations instead of complex conditional branching. Easier to debug, easier to understand.


New Hardware Decisions

Cameras — Reolink RLC-520A over Amcrest

Amcrest cameras removed from Frigate NVR due to persistent RTSP instability. Reolink RLC-520A replaced them — PoE, 5MP, RTSP/ONVIF, no cloud required, Frigate-compatible. One unit bench tested for one week before ordering more.

Zigbee — CC2652P Dongle + Zigbee2MQTT

Instead of another vendor Zigbee hub, a CC2652P USB dongle running Zigbee2MQTT gives full local control, excellent device compatibility, and complete visibility into the Zigbee network. Per-service MQTT credential isolation — separate Mosquitto user per addon.

Smart Plugs — Kasa KP125M via Matter

Amazon plugs required cloud account — returned. Kasa EP40 outdoor plug required TP-Link account — returned. Kasa KP125M is Matter-certified and pairs with zero TP-Link account via Matter QR code directly into HA. 15A, no cloud, fully local.

Energy Monitoring — Refoss EM16P (planned)

Refoss EM16P — 16 branch circuit monitoring, fully local out of box, no firmware flash needed. Web UI + MQTT + Open API. ~$160 CAD at Refoss | Your Privacy, Your Home, Your Rules – Refoss Official Store. Two units planned for 30 breakers.


Devices Decommissioned

  • SmartThings hub — factory reset, for sale
  • Second Philips Hue Bridge — factory reset, for sale with spare bulbs
  • Old HA VM on Proxmox — shut down
  • Amazon smart plugs (7-8 units) — cloud account required, for sale
  • Kasa EP40 outdoor plug — returned, required TP-Link cloud account
  • Costco eWeLink outdoor plug — replacing with Tapo P400M (Matter)
  • Apple TV 4K 1st gen (A1842) + Apple TV 2nd gen (A1378) — no Matter support, for sale

PHASE 2 — Implementation

The Hardware Migration — Three Generations

Generation 1: Dell R720
Home Assistant started as a VM on a Dell R720 enterprise server running ESXi — pulling ~300W continuously, roughly $35-40 CAD per month just to run a smart home VM.

Generation 2: Proxmox VM on Lenovo M920q
Migrated HA to Proxmox VM on M920q to kill the R720's power bill. Restored from R720 backup. R720 went offline. But the HA problems didn't go away — same instability, same VM overhead, same complexity.

Generation 3: Bare Metal HAOS on Lenovo M710q (This Project)
The right fix wasn't better VM hardware — it was eliminating the VM entirely. Lenovo M710q (i5-6500T, 16GB DDR4) running HAOS 18.0 bare metal at ~25W idle. Greenfield install — no legacy configuration carried forward.

Why bare metal?

  • Direct hardware access for future AI accelerator (Hailo-8L) without PCIe passthrough complexity
  • Simpler — no hypervisor layer to troubleshoot
  • More stable — no VM management overhead
  • Clean slate — no years of accumulated config debt

The Installation — What Actually Happened

Installing HAOS itself was straightforward. What followed was the real education.

Challenge 1: The Frigate Config Path (4 Hours)

Documentation says the config file is at /config/frigate.yml. It's not.

Real path:

/addon_configs/ccab4aaf_frigate-fa/config.yaml

This took approximately four hours of SSH file hunting to discover. Also: !secret syntax does not work in Frigate's addon config — passwords must be hardcoded in that file.

Challenge 2: Mosquitto Broker Crash Loop

Mosquitto MQTT broker kept crash-looping with no obvious error in the addon UI. SSH into the logs revealed:

Error: Unable to open include_dir '/share/mosquitto'
Error found at /etc/mosquitto/mosquitto.conf:48

Fix:

mkdir -p /share/mosquitto

Not documented anywhere obvious. Cost: ~1 hour of log digging.

Challenge 3: Zigbee2MQTT Onboarding Flag

After completing the Zigbee2MQTT onboarding wizard, the UI kept showing the onboarding screen on every restart even though the config had saved correctly. The culprit:

onboarding: true

Fix:

sed -i 's/onboarding: true/onboarding: false/' /config/zigbee2mqtt/configuration.yaml

Challenge 4: HomeKit Bridge Camera Categories

Adding cameras to Apple Home via HomeKit Bridge requires manually enabling the camera category in the bridge configuration — not on by default. Enabling it requires a full re-pair of the bridge. The new QR code appears in HA notifications (not the integration config screen).

Challenge 5: Matter on a Server Without Bluetooth

Kasa KP125M Matter pairing kept failing with "Unable to add accessory." After IPv6 troubleshooting (yes, Matter requires IPv6 on your LAN — enable it in OPNsense Router Advertisements in Unmanaged/SLAAC mode), the real issue appeared in Matter Server logs:

BLE is not enabled on this platform
bluetooth_enabled: false

Fix: Enable the BLE proxy in the Matter Server addon — this allows your iPhone's Bluetooth to proxy the commissioning process. Also set WiFi credentials in Settings → Matter before commissioning.


Architecture — What's Running Now

Component Details
Host Lenovo M710q i5-6500T 16GB — HAOS 18.0 bare metal
IP 192.168.50.176 (permanent reservation)
Remote access Tailscale
Frigate v0.17.1 — real config at /addon_configs/ccab4aaf_frigate-fa/config.yaml
Zigbee CC2652P dongle via Zigbee2MQTT 2.12.1
MQTT Mosquitto — per-service users (frigate, zigbee2mqtt)
Matter Matter Server 9.0.3 — BLE proxy enabled
Network OPNsense + Cisco SG300-28P + C2960CX-8PC-L

Integrations active: Philips Hue, Lutron Caséta, Ecobee, Sonos, Meross garage doors (HomeKit Device), Reolink Doorbell + RLC-520A (Frigate), Kasa KP125M ×4 (Matter), Aqara temp/humidity (Zigbee2MQTT), Google Drive Backup, Tailscale, Environment Canada, Ontario Energy Board, Speedtest, System Monitor, Brother printer, Milton waste collection calendar (Remote Calendar iCal), HACS: Mushroom Cards, Advanced Camera Card, Life360, Frigate card.


Automations Built

All automations live in HA. Hue app automations migrated and deleted from the Hue app. Per the "multiple simple automations" rule — each automation does one thing.

# Automation Trigger Status
5a/5b/5c Office desk lamp Sunset on / Midnight off / 2AM safety off :white_check_mark: Active
6a/6b/6c Stair hallway Sunset 100% / Midnight 50% / Sunrise off :white_check_mark: Active
7a Garage fan on Garage door opens + temp ≥ 26°C :white_check_mark: Active
7b Garage fan off Both garage doors closed :white_check_mark: Active
7c Garage fan on (temp rising) Temp rises above 26°C while door already open :white_check_mark: Active
#1 Doorbell motion → outside lights Doorbell motion (dusk-30min) :black_square_button: Pending
#2 Family arrives → outside lights iPhone presence + dusk :black_square_button: Pending
#3a/#3b Garage/laundry lights Meross door / motion sensor :black_square_button: Pending Lutron

Automations 7a/7b/7c were tested on a 35°C day — real world validated.


Utility Monitoring — InfluxDB + Grafana

InfluxDB 1.x and Grafana running as Home Assistant addons on the same M710q (CPU usage: 16%, Memory: 19% — minimal impact).

Imported 22 months of Enbridge gas data (Green Button XML) and 913 days of Milton Hydro hourly electricity data (21,889 hourly records) into InfluxDB. Applied actual TOU rates per hour for cost calculations.

Grafana Utilities dashboard shows:

  • Daily hydro consumption (hourly granularity)
  • Monthly gas consumption (m³)
  • Monthly gas bill with component breakdown
  • Federal Carbon Tax elimination in April 2025 — visible in the data
  • R720 shutdown impact — visible as consumption drop in June 2024
  • TOU cost estimates: today's hydro cost + this month's hydro cost

Note: See my companion post on parsing Green Button data for a full guide on importing Enbridge and Milton Hydro data into InfluxDB.


Camera Deployment Plan

Location Camera Status
Front door Reolink Doorbell PoE :white_check_mark: Active
Driveway Reolink RLC-820A After bench test
Garage interior Reolink RLC-820A After bench test
Basement Reolink RLC-820A After bench test
Under deck Reolink RLC-820A New cable run
Stair alley Reolink RLC-820A New cable run
Gravel alley Reolink RLC-820A New cable run

All cameras on Cisco SG300-28P PoE switch (180W budget, currently using 32W).


Coming Next

  • Doorbell motion → outside/foyer lights automation
  • Family arrival → outside lights (Life360 presence)
  • Lutron switch install → garage/laundry motion automations
  • Reolink RLC-820A ×6 bulk order (after bench test passes)
  • ESPHome + HC-SR04 water softener salt level monitor
  • ESP32-CAM + AI on the Edge for water meter digit reading
  • Emporia Vue 3 / Refoss EM16P panel-level energy monitoring
  • Hailo-8L M.2 AI accelerator for Frigate
  • InfluxDB + Grafana long-term logging stack (already running)
  • HomePod mini for proper Matter/Thread hub

Key Lessons

  1. Define your architecture before buying anything. Hub sprawl happens one device at a time.
  2. Local control is a philosophy, not a feature. "Works with Alexa" means cloud. Matter with BLE proxy means local. Read the fine print.
  3. MQTT is worth the complexity. Rock solid once running. Use per-service credential isolation — one Mosquitto user per addon.
  4. Bench test everything. One Reolink RLC-520A for one week before ordering six more.
  5. The Frigate config path will waste your time. It's /addon_configs/ccab4aaf_frigate-fa/config.yaml. Bookmark it.
  6. mkdir -p /share/mosquitto — do this before starting Mosquitto. Not documented. Saves an hour.
  7. Matter needs IPv6 on LAN + BLE proxy if your server has no Bluetooth. Both required, both underdocumented.
  8. Multiple simple automations beat complex branching logic. Three garage fan automations that each do one thing are infinitely easier to debug than one with nested conditions.
  9. Your family will use Apple Home. Build for that. HA dashboard is for you. Apple Home is for everyone else.
  10. Sell your old gear before buying new gear. Amazon plugs, old hubs, old Apple TVs fund the upgrade.

HAOS 18.0 | Frigate v0.17.1 | Zigbee2MQTT 2.12.1 | Matter Server 9.0.3 | Lenovo M710q i5-6500T 16GB | InfluxDB 1.x | Grafana

Questions welcome — happy to share config files for any of the above.

1 Like