📓
Bench Notes
Tier 1 · Home Automation Series
Bench Notes · Home Lab Series · Vol. 2

10 Things to Do
First in Home
Assistant

A practitioner's checklist for getting your smart home right from the start: before bad habits become hard-to-fix automations.

Home Assistant OS Automations Backups Integrations Dashboards
Published by Bench Notes · benchnotes.net · © 2025 All rights reserved
🏠 zigbee wifi 💡 🌡️ 🔒 📷 🌡️ BENCH NOTES · VOL. 2
benchnotes.net · Home Lab Series · Volume 2 of 3 © 2025 Bench Notes · Personal use only
📓
Bench Notes
benchnotes.net
© 2025 Bench Notes. All rights reserved.
Home Lab Series · Volume 2 · First Edition
❌ Not Permitted
🚫Sharing, forwarding, or gifting this file to others
🚫Reselling, redistributing, or uploading publicly
🚫Reproducing content for your own products or courses
🚫Using as AI training data in any form
🚫Removing or altering Bench Notes branding
✅ Permitted
Personal use in your own home lab setup
Printing a personal copy for reference
Using included YAML and code samples in your own HA
Referencing this guide when helping others (link, don't share)
Free Updates: Future updates to this volume are free. Check benchnotes.net for the latest version, or email us.
Questions about licensing? Contact us at hello@benchnotes.net
Your order confirmation contains your access details.
Table of Contents
If You Only Follow One Path 8 steps, no decisions, no branching: the direct route
Golden Path
:
How to Install Home Assistant Install methods compared, which one is right for you
Start Here
01
Set Your Location, Timezone & UnitsGet automations to fire at the right time, every time
Config
02
Set Up a Backup Before You Do Anything ElseAutomatic backups to a second location, on Day 1
Critical
System View: How Your HA Fits TogetherThe architecture diagram: understand the system before you build it
Diagram
03
Add Your Integrations SelectivelyThe Day 1 integrations worth adding, and what to skip
Setup
04
Reserve Addresses for the Devices HA Depends OnWhy your automations will break without this
Network
05
Name Your Entities Before You Build AnythingThe naming convention you'll thank yourself for later
Setup
06
Build a Simple Dashboard FirstPrinciples that prevent you rebuilding it in 3 months
Dashboard
07
Write Your First 3 AutomationsThe automations every house should have on Day 1
Automations
08
Set Up Notifications That Actually MatterMobile alerts, ntfy, and the art of not over-notifying
Alerts
09
Secure Remote Access Without Opening PortsCloudflare Tunnel or Nabu Casa: the right choice for you
Security
10
Enable Automatic Updates (Carefully)What to auto-update, what to hold, and how to test safely
Maintenance
📝
Notes From the FieldWhat a power outage taught me about startup automations
Experiential
Start Here

If You Only
Follow One Path

This is the only sequence you have to follow. Everything after it is explanation. The checklists later in the guide are the same path in a different shape, not competing plans.

Don't want to read the whole guide right now? Do these 8 things in order. No decisions. No branching. Just the path that works.

1
Flash HAOS and set BIOS to "Always On" Install section
Use Balena Etcher. Then enter BIOS before you do anything else and set power restore to "Always On." This step saves your first Sunday afternoon.
2
Set location, timezone, and units Thing 01
Settings → System → Home information. Get this right before adding a single device. Wrong timezone means automations that fire at the wrong time, forever.
3
Enable auto-backup to Google Drive Thing 02
Install the Google Drive Backup App. Authenticate. Enable daily schedule. Takes 10 minutes and is the single most important thing you'll do today.
4
Reserve a static IP for your HA server at the router Thing 04
Log into your router → DHCP reservations → add HA's MAC address with a fixed IP. Do this before anything else references HA by address.
5
Install the Companion App and create your rooms Thing 03 + 05
Install on every phone. Then Settings → Areas → create a room for every room in your house before adding any devices. Name convention: room_device_qualifier.
6
Add 3 integrations, no more Thing 03
Weather (Open-Meteo), Companion App (auto-added), and your device protocol (ZHA for Zigbee or your Wi-Fi brand). Stop here for today.
7
Build one dashboard and write your sunset lights automation Thing 06 + 07
Status strip at top, one card per room. Then one automation: sun.sun sunset trigger → turn on porch light. Run it manually to verify it works.
8
Set up remote access and test it off Wi-Fi Thing 09
Nabu Casa if you want zero config. Cloudflare Tunnel if you want free + full control. Turn off phone Wi-Fi. Verify HA loads. You're done.
💡
Everything else in this guide is the "why" behind these 8 steps

Read the full sections when something isn't working, when you're ready to go deeper, or when you hit a decision that isn't obvious. The guide is designed to be a reference: not a linear read.

Prerequisites

What You'll
Need

Get this list sorted before you start. The guide assumes you have a host device, a router you can log into, and a phone. Everything else is optional or addable later.

Hardware

ItemWhat to GetRequired?Skip If...
HA Host DeviceThe machine HA runs on Budget (~$35–60): Raspberry Pi 4 (4GB) or Pi 5: great for most homes
Mid (~$100–200): Intel NUC, Beelink mini PC: more headroom, runs other services too
Repurposed: Any old PC or laptop (x86-64): see Vol. 1 for full setup guide
Required You already have a machine you plan to dedicate to HA
StorageWhere HA lives Pi: High-endurance microSD (32GB min), or better, a USB SSD boot drive
NUC/mini PC: Any SSD already inside the machine is fine. 32GB minimum free.
Required Your host already has adequate storage installed
Zigbee CoordinatorUSB dongle for Zigbee devices Recommended: SONOFF Zigbee 3.0 USB Dongle Plus (~$20) or Electrolama zzh!
Only needed if you're using Zigbee devices. Skip entirely if using Wi-Fi smart devices.
Optional All your smart devices use Wi-Fi or you have no smart devices yet
Ethernet CableWired connection for HA host Any Cat5e or Cat6 cable long enough to reach your router or switch. HA on Wi-Fi works but is less reliable for automations and remote access. Required Your host is physically next to your router already
USB Drive or NASOff-device backup target A USB drive (32GB+) plugged into the HA host works fine. A NAS or second server is ideal. Google Drive via App is the easiest path if you have neither. Optional You'll use the Google Drive Backup App instead

Accounts & Software

Balena EtcherFree

Flash the HAOS image to your drive. balena.io/etcher: Windows, Mac, Linux. Download before you start.

☁️Google AccountFree

For the Google Drive backup integration. Any existing Google account works, though you will set up API credentials during the integration flow.

🌐Domain Name~$10/yr

Needed for Cloudflare Tunnel remote access. Register at Cloudflare Registrar. Optional if using Nabu Casa instead.

💡
First Smart Device Recommendation

If you don't have any smart devices yet: start with one Zigbee smart bulb (IKEA TRÅDFRI or Sengled, ~$10) and a Zigbee contact sensor (~$8). These validate your coordinator, give you something to automate on Day 1, and are cheap enough to replace if something goes wrong during setup.

Prerequisites

Networking
Quick Guide

You don't need to be a network engineer. But you do need your network to be set up correctly before HA will behave reliably. Here's exactly what matters and why.

What HA Needs From Your Network

RequirementWhy It MattersCovered In
Wired connection for HA host HA polls devices constantly. Wi-Fi packet loss causes phantom "unavailable" states and unreliable automations. Run a cable if at all possible. This guide
DHCP reservation for HA server Every integration references HA by IP. If the IP changes, the Companion App, remote access, and tunnel configs all break simultaneously. Thing 04
mDNS / local hostname resolution Allows homeassistant.local to resolve on your network. Enabled by default on most routers. Required for easy initial setup. This guide
No port forwarding needed HA does not require open inbound ports if you use Cloudflare Tunnel or Nabu Casa. Never forward port 8123 to the internet, that's a security risk. Thing 09
VLANs for IoT devices Isolates smart devices from your main network. Not required for basic HA, but recommended as your device count grows. Requires a managed switch. Vol. 1
SSH access to your HA server Needed for advanced config editing, log access, and recovery. Not required to get started, but becomes essential for a serious setup. Vol. 1

Basic Network Topology for HA

🌐 Internet ISP 📡 Router DHCP + DNS 🏠 HA Server wired · fixed IP Smart Devices Zigbee · Wi-Fi · Z-Wave 📱 Phone Companion App ☁️ Tunnel Cloudflare / Nabu 💾 Backups local + remote no open ports
📖
Vol. 1 Goes Deeper

The Bench Notes Home Lab Playbook (Vol. 1) covers SSH setup, VLANs for IoT isolation, AdGuard Home for network-wide DNS filtering, Cloudflare Tunnels in depth, and running a dedicated server alongside HA. If you're planning a full homelab alongside your HA setup, Vol. 1 is the companion guide. Available at benchnotes.net/vol-1.

Visual Reference

Your First HA
Architecture

This is the shape of a well-configured Home Assistant setup. Every component in this guide maps to something in this diagram. Keep this page handy during setup.

🏠 Home Assistant HAOS · wired · fixed IP 📡 Router DHCP · local network wired 🌐 Internet / ISP 💡🌡️🔒 Zigbee Devices lights · sensors · locks USB dongle 📷🔌📺 Wi-Fi Devices cameras · plugs · TVs local ☀️🗺️🔔 Cloud Services weather · maps · optional outbound 📱 Your Phone Companion App · presence local + remote ☁️🔐 Remote Access Cloudflare Tunnel or Nabu Casa no open ports local Local connection Cloud / outbound HA is the hub: everything connects through it
💡
The Shape of a Good Setup

Everything flows through the HA server. Devices connect locally (Zigbee or Wi-Fi). Remote access goes out through Cloudflare, never in through an open port. Backups go both local (NAS) and cloud (Google Drive). Your phone talks to HA both directly on your home network and remotely through the tunnel.

Before You Begin

Quick Start
Queue

The Golden Path again, as a tick-box list for your first hour. If this and the Golden Path ever disagree, the Golden Path wins.

⏱ First 30 Minutes
Flash HAOS to your hardware and boot to the onboarding screen~10m
Set BIOS power restore behavior to "Always On" before walking away~2m
Complete onboarding: create account, set name, location, and timezone~5m
Reserve a static IP for your HA server at the router before anything else moves~5m
Create your first manual backup immediately: Settings → System → Backups~3m
⏱ First 2 Hours
Enable automatic scheduled backups with an off-device target (Google Drive or NAS)~10m
Install the Companion App on every phone in the house~10m
Add weather integration and your home's primary device protocol (Zigbee or Wi-Fi)~15m
Create all your rooms in Settings → Areas before adding any devices~5m
Name and assign every device as you add it: entity ID, friendly name, areaongoing
⏱ First Evening
Build one simple dashboard: status strip + one card per room~30m
Write the sunset lights automation and test it manually~15m
Set up one notification: test it fires and arrives on your phone~10m
Set up remote access (Nabu Casa or Cloudflare Tunnel) and verify it works off Wi-Fi~20m
Take another backup. You now have something worth protecting.~2m
Optional

The Weekend
Schedule

Optional. A way to pace the Golden Path across a weekend with Home Assistant. Follow this sequence and you'll have a stable, backed-up, secure setup by Sunday evening.

☀️ Day 1: Foundation
Flash and boot HAOS
Set BIOS power restore
Static IP for HA server at router
Manual backup + auto backup enabled
Companion App on all phones
Location, timezone, units confirmed
Rooms/Areas created before devices
3 integrations added, no more
🌤 Day 2: Build
Naming convention decided and applied
All current devices named + assigned to areas
Static IPs reserved for all HA-connected devices
First dashboard built (status strip + room cards)
Sunset lights automation live and tested
Away mode automation started
One mobile notification tested end-to-end
🌙 Day 3: Harden & Expand
Remote access set up and tested off Wi-Fi
Notification hierarchy mapped (critical / important / suppress)
Auto-update policy set for Apps
HA Core on manual update (backup first)
Final backup taken and verified
Notes made on what to tackle next week
💡
The Rule That Keeps Weekends Fun

Add one new thing at a time, test it fully, take a backup, then add the next. The people who end up with a broken HA and no idea why are always the ones who added 12 things in 90 minutes on a Saturday afternoon.

Start Here · Before Everything Else

How to Install Home Assistant

There are two supported ways to run Home Assistant. Older guides list four. Ignore them: Home Assistant Core (a Python environment) and Home Assistant Supervised both became unsupported after the 2025.12 release. They still technically run, but they get no support and no issue reports accepted. Do not start a new install on either one.

Method What It Is Apps? Best For Verdict
HAOS
(Home Assistant OS)
Dedicated OS image: runs HA and nothing else on the machine Full Dedicated hardware (Pi, old PC, NUC) ✓ Best
Container
(Docker)
Just the HA core in a Docker container. You run companion services (Mosquitto, Zigbee2MQTT, ESPHome) as their own containers. No managed Apps People already comfortable running a Docker stack ✓ Good, with effort
Supervised
(Core, Python venv)
Both became unsupported after Home Assistant 2025.12 Nobody starting today ✗ Don't
🏠 Use HAOS if:
You have dedicated hardware for HA (most people)
You want Apps (formerly Apps), backups, and updates managed for you
You want automatic OS updates and official backups
You're new to HA: start here, never regret it
🐳 Use Container if:
You already run a Docker stack and are fluent in it
The box has other jobs besides Home Assistant
You accept managing Mosquitto, Zigbee2MQTT, and friends as separate containers
You want one update workflow you control, not Supervisor's
📝
Notes From the Field

Full disclosure: I run Container. Home Assistant sits in Docker on a NUC, with Mosquitto, ESPHome, go2rtc, and AdGuard as their own containers beside it. So when people say Container "can't do Apps," that isn't quite right. Container can't do managed Apps. The software still runs; you just own every piece of it: separate containers, separate configs, separate updates, separate backups.

That tradeoff suits me because I was already running a Docker host and I want one update workflow I control. It will not suit most people reading a guide called 10 Things to Do First. If you want Home Assistant to behave like an appliance, where Apps install with a click and backups and updates are handled for you, install HAOS and never think about this again. Choose Container only if managing the whole stack sounds like a feature rather than a chore.

Recommended: Flash HAOS to a Dedicated Machine

For most people: especially if you have a spare Raspberry Pi, Intel NUC, or old mini PC: HAOS is the correct choice. It gives you full App support, automatic OS updates, and the official snapshot backup system.

⚠️
Critical: BIOS Power Setting

Before you walk away: go into your machine's BIOS and set Power Restore Behavior to "Always On" (sometimes called "Restore AC Power Loss"). Without this, a single power blip takes your entire smart home offline and keeps it there until you physically press the power button.

Thing 01

Set Your Location,
Timezone & Units

This sounds trivial. It isn't. Half of all "my automation fires at the wrong time" complaints trace back to this step being skipped or set incorrectly during onboarding.

Home Assistant uses your location for two things that power a massive chunk of useful automations: sun position (sunrise/sunset triggers) and time zone (time-based conditions). If either is wrong, your "turn on the porch light at sunset" automation fires in a different time zone, or at the wrong time because HA is using UTC internally.

Where to Set It

Settings → System → General → Home location. You'll see a map. Drop the pin to your actual address: not a city center. HA uses this pin to calculate precise local sunrise/sunset times.

🌍 Location Required

Set to your actual home address. HA uses this for sun calculations, weather integrations, and zone automations like "when I get home."

🕐 Time Zone Critical

Set this even if HA seems to detect it. Confirm it matches your local time. All automation triggers, logs, and history are stamped with this zone.

📏 Unit System Personal

US Customary vs Metric. Set it early so the interface and new entities read the way you expect. Home Assistant converts many compatible units automatically, so changing it later is not the catastrophe it is sometimes made out to be, but individual integrations and per-entity overrides can still report their own units.

💱 Currency Optional

Used by the Energy dashboard if you track electricity costs. Set it now so the energy panel shows correct cost-per-kWh math from the start.

💡
Pro Tip: Use sun.sun Triggers

Once your location is set correctly, sun.sun becomes one of your most reliable automation triggers. "Turn on outdoor lights 30 minutes before sunset" will work perfectly and automatically adjusts every day of the year without any maintenance.

✦ Section Validation
✅ Success Looks Like

The HA overview shows your local time correctly. Sunrise/sunset times in Settings → Developer Tools → States for sun.sun match your actual local times.

⚠ Failure Signs

Automations trigger at the wrong time. Sun-based triggers are off by hours. HA logs show UTC times while your clock shows something different.

🔍 2-Min Validation

Settings → Developer Tools → States → search sun.sun. Check next_rising and next_setting: they should match today's actual sunrise/sunset for your city.

Thing 02

Set Up Backups
Before You Do Anything Else

Seriously: this is Thing 02 because it should happen before you add a single integration. HA's built-in backup system is excellent, but it only helps if you set it up before you need it.

Home Assistant OS has a first-party backup system that creates complete snapshots of your entire installation: config files, integrations, automations, Apps, dashboards, everything. The default configuration stores backups locally on the HA machine. That's a single point of failure. You need at least one copy elsewhere.

The Two-Step Backup Setup

💾Google Drive Backup AppEasiest

Now an official integration, not the old third-party App: Settings → Devices & services → Add integration → Google Drive. Setup asks for Google API credentials, so it takes a few more minutes than the old App did. Backups are stored encrypted. Capacity is whatever is left in that Google account, which is usually plenty for years of HA backups.

🗂️NAS / Network ShareBest for Homelab

If you already have a NAS or another server on your network, add it as an SMB network location. Backups write there directly without cloud dependency.

📝
Notes From the Field

I learned this the hard way. I had weeks of integration config, Zigbee device pairings, and dashboard layouts in HA when my SD card on a Pi died. No backup. I had to re-pair every single Zigbee device from scratch, that alone took a full Saturday. Backups with Google Drive took 10 minutes to set up. That SD card failure would have been a non-event if I'd done this on Day 1.

How to Restore From a Backup

Settings → System → Backups → pick your snapshot → Restore. For disaster recovery on fresh hardware, do not click through onboarding first. Install Home Assistant and stop at the welcome screen: it offers Upload backup right there. Choose your backup file and supply the encryption key from your backup emergency kit when prompted. Home Assistant restores users, configuration, Apps, and integrations before onboarding continues.

✦ Section Validation
✅ Success Looks Like

At least one backup exists in Settings → Backups. A second copy lives somewhere other than the HA machine itself. Auto-backup schedule is active.

⚠ Failure Signs

Only local backups exist. Google Drive integration added but not authenticated. No backup schedule set: only a manual snapshot.

🔍 2-Min Validation

Settings → System → Backups → confirm at least 1 backup exists. If using Google Drive App, open it → check the last sync timestamp is recent. Confirm the backup has a recent timestamp, a nonzero size, and at least one off-device location. Test an actual restore only on spare hardware or a throwaway VM, never on your live system.

↩ Rollback If a backup fails or is corrupt: Settings → Backups → select a different snapshot → Restore. For a full disaster recovery on fresh hardware: complete onboarding, then immediately restore your most recent snapshot before touching any settings.
System View

How Your HA System
Fits Together

Before building anything, understand the shape of your system. This is what you're creating, and why each step in this guide matters.

Home Assistant Architecture: Simplified
CLOUD Internet / Remote Access NETWORK Router · DHCP · Fixed IPs 🏠 Home Assistant the hub: everything connects through here 💡 🌡️ 🔒 📷 Local Devices Zigbee · Z-Wave · Wi-Fi 📱 Your Phone Companion App · local + remote remote
Key idea: Home Assistant sits in the middle. Devices talk to it locally over your home network: nothing needs to go out to the internet to control a light. Your phone connects directly when you're home, and through a secure tunnel (Cloudflare or Nabu Casa) when you're away. No open ports. No cloud dependency for local control.
Thing 03

Add Your Integrations
Selectively

HA supports 3,000+ integrations. The instinct is to add everything you own immediately. Resist it. Add these on Day 1, then slow down and be deliberate about everything else.

Zigbee vs. Wi-Fi: Pick One Protocol First

⚡ Use Zigbee if:
You want local control with no cloud dependency
You're buying new devices (better long-term investment)
You have 5+ devices to add
You want the lowest latency automations
📶 Use Wi-Fi if:
You already own Wi-Fi smart devices
You want plug-and-play without a USB dongle
You have a smaller number of devices (<10)
Your router handles IoT devices reliably

Day 1 Integrations: Add These First

📱
Home Assistant Companion App Day 1
Install on every phone in the house. Enables presence detection, location zones, and mobile push notifications. Also your remote control when away from home.
☀️
Weather Integration
Open-Meteo (free, no API key) gives you current conditions plus hourly and daily forecasts: enough for the weather card and forecast-driven automations ("close the blinds if tomorrow is over 90"). It does not issue official severe-weather warnings, so do not build a tornado or flood alert on it. For safety-critical alerts add a dedicated source (MeteoAlarm in Europe, an NWS-based alert integration in the US).
🔗
Zigbee (ZHA or Z2M)
If you have any Zigbee devices, pick one protocol and commit. ZHA is built in and simpler. Zigbee2MQTT gives more device support. Don't run both.
📡
MQTT Broker (Mosquitto)
Install the Mosquitto broker only if something you run actually speaks MQTT, such as Zigbee2MQTT. Then add the MQTT integration. Note that ESPHome does not need it: ESPHome talks to Home Assistant over its own native API, and installing a broker "for the ESP devices" is a step you can skip.
🌐
Local Network Devices
HA auto-discovers routers, NAS devices, smart TVs on your network. Accept what's useful, dismiss what isn't. Disable cloud polling integrations when a local option exists.
Energy Dashboard
If you have smart plugs or a whole-home energy monitor, connect it immediately. Historical data starts accumulating from the moment you enable it: you can't backfill.
⚠️
What to Avoid Early On

Don't add cloud-dependent integrations (SmartThings, Google Home, Alexa) until you understand your local setup. They add polling overhead, can cause HA to slow down if their cloud APIs are flaky, and often duplicate entities you already have from local integrations. Add them later, intentionally.

✦ Section Validation
✅ Success Looks Like

Companion App shows phone as a device in Settings → Devices. Weather entity is populated with current conditions. No integrations showing yellow warning badges.

⚠ Failure Signs

Companion App device_tracker shows "unavailable." More than 5 integrations added on Day 1. Any integration showing a persistent auth or connection error.

🔍 2-Min Validation

Settings → Devices & Services: count your integrations. If more than 5, stop and evaluate. Settings → Developer Tools → States → search your phone name: confirm device_tracker shows "home."

Thing 04

Reserve Addresses for the
Every Device You Care About

This is infrastructure work, not HA work, but it's the most common reason automations mysteriously break weeks after you build them.

Home Assistant references devices by IP address in many integrations. When your router's DHCP lease expires and reassigns addresses, the device at 192.168.1.42 is suddenly at 192.168.1.87, and HA loses it silently. No error. Automation just stops working.

Do This at the Router Level, Not the Device

Every router has a DHCP reservation feature: it permanently assigns a specific IP to a specific device's MAC address. This is better than setting a static IP on the device itself because the router's DHCP server still manages the address, and it works even if you reflash or reinstall the device.

📌What Gets a Reserved IP

Reserve: the Home Assistant host · network-connected (Ethernet/Wi-Fi) Zigbee or Z-Wave coordinators · IP cameras · smart TVs and media players · your NAS or server · anything an integration asks you to enter an IP for.

Do not bother: USB coordinators (they plug into the HA box and have no IP of their own) · Zigbee and Z-Wave end devices (they speak to the coordinator, not your network) · Bluetooth devices · phones tracked by the Companion App · cloud-only integrations. Devices found by mDNS discovery often survive an address change anyway, though a stable address still makes troubleshooting easier.

🔄What Doesn't Need One

Phones and laptops (HA uses the Companion App, not IP) · Guest devices · Devices with no HA integration · Battery-powered sensors on Zigbee/Z-Wave (no IP at all)

Building a Device Registry

Once you're assigning IPs, make a simple reference list. A text file, a spreadsheet, a note: anything. Recording the device name, MAC address, assigned IP, and what it does takes 2 minutes per device and saves hours of debugging later.

device_registry.txt # Home Lab Device Registry 192.168.1.100 server # Primary home-lab server 192.168.1.101 ha-host # Home Assistant server 192.168.1.102 printer # Network printer 192.168.1.103 nas # Network-attached storage 192.168.1.104 media-lr # Living-room media streamer
📝
Notes From the Field

Pick a naming convention for your 192.168.1.x range and stick with it. Assign blocks by device type: cameras in one range, servers in another, IoT devices in a third. When you look at a log entry or a ping, you'll know immediately what category of device it is. Takes 20 minutes to plan upfront and saves a lot of "wait which device is that?" moments later.

✦ Section Validation
✅ Success Looks Like

HA server has the same IP after a reboot. Your router's DHCP reservation list includes at least HA + any devices with integrations. You have a reference list of reserved IPs.

⚠ Failure Signs

HA server IP changed after a router restart. Devices show "unavailable" in HA after a network event. You're not sure what IP your HA server is on right now.

🔍 2-Min Validation

Log into your router's DHCP reservation page and confirm HA's MAC address is listed with a fixed IP. Ping that IP from another device. Reboot HA and verify it comes back on the same address.

Thing 05

Name Your Entities
Before You Build Anything

Entity names are the bones of your HA setup. Renaming them after you've built automations and dashboards is tedious: HA doesn't cascade-rename entity IDs. Do this once, do it right.

When HA creates an entity, it generates an entity ID from the name. light.living_room_lamp_3 happens automatically if you don't intervene. If you rename the entity later, the entity ID stays the same, and now you have a lamp called "Living Room Lamp" with ID light.living_room_lamp_3 forever.

A Convention That Works

[room] _ [device_type] _ [qualifier] light.living_room_lamp_east
Naming Cheat Card: Good vs. Bad
✅ GOOD ❌ AVOID light.living_room_overhead light.0x00158d001a23f4b switch.kitchen_coffee_maker switch.smartplug_1_2 sensor.bedroom_temperature sensor.temperature_1 binary_sensor.front_door_contact binary_sensor.aqara_d1 media_player.living_room_tv media_player.samsung_tv_2 ✓ room first · device type · qualifier if needed · lowercase · underscores ✗ MAC addresses · brand names · auto-numbers · abbreviations

Where to Rename Entities

Settings → Devices & Services → Entities. Search for any entity, click the gear icon, and set both the Display Name and the Entity ID. Do this before you reference the entity anywhere.

💡
Use Areas from Day 1

Settings → Areas, Zones, & Labels. Create a room for every room in your house before adding devices. When you add a device, assign it to an area immediately. This enables area-based voice commands ("turn off the bedroom"), and keeps your dashboard organized as your device count grows.

✦ Section Validation
✅ Success Looks Like

Every entity ID follows your chosen pattern. No entities named with MAC addresses, auto-incremented numbers, or default integration names. All devices assigned to an area.

⚠ Failure Signs

Entity IDs like light.0x00158d001 or switch.smartplug_1_2. Multiple devices assigned to "No area." Friendly name and entity ID don't match your convention.

🔍 2-Min Validation

Settings → Devices & Services → Entities. Sort by entity ID. Scan for anything that doesn't match your naming pattern: fix it now before it gets referenced anywhere.

Thing 06

Build a Simple Dashboard
First

The default "Overview" dashboard HA auto-generates is fine for testing. Build your own before you get attached to it, using principles that won't make you rebuild it in three months.

The One Rule That Saves You Later

Avoid one long flat list of individual entities on your main dashboard. Group by room, then put rooms on the dashboard, and use individual tiles inside a room section when a device deserves direct control. When you add a 20th light to a room, you update one card. Not twenty.

Recommended First Dashboard Layout
🏠 📊 ⚙️ 🔔 Main Upstairs Outside ✏ Edit STATUS ☀ 68°F Clear 👤 2 home 🔒 Locked ⚡ 1.2 kW Living Room 💡 📺 🌡️ 3 lights · 1 TV · temp ● 2 lights on Kitchen 💡 🚿 2 lights · coffee · leak ● all off Office 💡 🖥️ 👤 2 lights · PC · presence ● occupied Entry 🔒 💡 📷 lock · porch · camera ● locked · secure Energy Today 4.2 kWh ↓ 12% vs yesterday History graph card Presence ● Alex: Home ● Jamie: Home ○ Sam: Away Automations ✓ Sunset lights: 18:42 ✓ Morning: 07:00 ○ Away mode: idle Logbook card
🏠One View Per Floor

Main, Upstairs, Basement. Each view is a tab. Start here before getting more granular.

🃏Cards by Room

One "Room Card" (entities card) per room per view. Lights, switches, sensors all in one card per room.

📊Status Bar at Top

A glanceable strip: outside temp, alarm status, presence (who's home), and one important sensor.

Useful Cards to Know About

📝
Notes From the Field

My first dashboard had 47 individual entity cards. It took 30 seconds to scroll through. I rebuilt it with 8 room cards and a 4-entity status strip at the top, and that's been stable for over a year with no major changes despite adding dozens of new devices. Simple structure scales. Complex structure explodes.

✦ Section Validation
✅ Success Looks Like

Your custom dashboard is the default view. It loads in under 2 seconds. You can control any light or switch without scrolling more than one screen. It looks usable on mobile.

⚠ Failure Signs

Still using the auto-generated "Overview" dashboard. More than 12 cards on a single view. Dashboard broken after adding a new device because cards reference individual entities.

🔍 2-Min Validation

Open your dashboard on a phone screen (or shrink your browser window). Can you see and use everything without scrolling excessively? If not, consolidate into room cards first.

Thing 07

Write Your
First 3 Automations

Every house benefits from these three automations on Day 1. They're simple, reliable, and demonstrate every major automation concept you'll build on later.

Automation Anatomy

Every automation has the same three-part structure. Understanding this shape makes every automation easy to read and write.

WHEN trigger sun.sun → sunset time → 07:00 device_tracker → home Required IF condition (optional) time: weekdays only state: light is off person: is home Optional: skip if none THEN action light.turn_on notify.mobile_app scene.turn_on Required Example: WHEN sun sets IF (no condition needed) THEN turn on porch lights
📝
Where these go, and where they do NOT go

Paste each of these into Settings → Automations & scenes → Create automation → Create new automation, then the three-dot menu → Edit in YAML. Save, and Home Assistant assigns the internal ID that traces depend on.

Do not paste these straight into the automations.yaml file. That file is managed by the UI editor, and hand-editing it is how you end up with automations that exist but cannot be traced or edited.

Automation 1: Porch Lights On at Sunset

What it does: turns the porch light on 15 minutes before sunset.
Replace: light.porch with your own entity ID.

Automation 1 · paste in the YAML editor alias: Porch Lights at Sunset description: Turns on the porch light 15 minutes before sunset. triggers: - trigger: sun event: sunset offset: "-00:15:00" conditions: [] actions: - action: light.turn_on target: entity_id: light.porch mode: single

Automation 1B: Porch Lights Off

The one above only turns the light on. Without this companion, your porch light burns until you notice. Two small automations are easier to test and fix than one clever one.

Automation 1B · paste in the YAML editor alias: Porch Lights Off at 11 PM description: Turns off the porch light every night at 11 PM. triggers: - trigger: time at: "23:00:00" conditions: [] actions: - action: light.turn_off target: entity_id: light.porch mode: single

Automation 2: Away Mode

What it does: turns off selected lights five minutes after the last person leaves.
Needs: at least one person entity with a working tracker.
Replace: the area IDs.

Automation 2 · paste in the YAML editor alias: Away Mode description: Turns off selected lights after everyone has been away 5 minutes. triggers: - trigger: numeric_state entity_id: zone.home below: 1 for: "00:05:00" conditions: [] actions: - action: light.turn_off target: area_id: - living_room - kitchen mode: single
💡
Do the away half first. Coming home is harder.

Leaving is simple: nobody is home, turn things off. Returning is where people get clever and get burned, because "restore what was on before" means remembering brightness, color temperature, and which of six lights were on. Do not try to reconstruct an arbitrary past. Apply a known scene instead.

Use a person entity, never a raw device_tracker. A person entity combines phone GPS, router presence, and BLE into one reliable answer. Settings → People → edit each person → add tracking sources.

Automation 3: Weekday Kitchen Light

What it does: turns the kitchen light on at 7:00 AM on weekdays only.
Replace: light.kitchen and the time.

Automation 3 · paste in the YAML editor alias: Weekday Kitchen Light description: Turns on the kitchen light at 7 AM on weekdays. triggers: - trigger: time at: "07:00:00" conditions: - condition: time weekday: - mon - tue - wed - thu - fri actions: - action: light.turn_on target: entity_id: light.kitchen data: brightness_pct: 40 mode: single
📝
How to actually test one

Run actions proves your actions work. It does not prove the trigger fires, and that is the failure people misdiagnose for hours. To test the trigger: temporarily set it a few minutes ahead, save, wait for it to fire for real, then open Traces and read what happened at each step. Traces tell you whether the trigger fired, whether each condition passed, and exactly where an action failed.

✦ Section Validation
✅ Success Looks Like

At least one automation has run successfully and is visible in the Logbook. You can see the last triggered timestamp in Settings → Automations for each one you've built.

⚠ Failure Signs

Automation was created but never triggered. "Last triggered" column shows never. Automation is enabled but the entity it controls shows "unavailable."

🔍 2-Min Validation

Settings → Automations → find your sunset automation → press the ▶ Run button manually. Verify the light turns on. Check Logbook: you should see the triggered entry with a timestamp.

Thing 08

Set Up Notifications
That Actually Matter

HA can notify you about almost anything. The skill is restraint. A smart home that cries wolf every 10 minutes is worse than no notifications at all.

Send One Test Notification First

Before designing a hierarchy, prove a notification can reach your phone at all. Install the Companion App and open it once so it registers. Then go to Settings → Developer Tools → Actions, switch to YAML mode, and run this:

Settings → Developer Tools → Actions action: notify.mobile_app_your_phone data: title: "Home Assistant test" message: "Notifications are working."

Replace notify.mobile_app_your_phone with the action created for your phone. If it does not appear in the list: open the Companion App and confirm it is connected to this server, check notification permission in the phone's OS settings, then restart Home Assistant so the action is registered.

Your Day 1 Notification Channel

📱Companion App PushPrimary

Works out of the box once the app is installed. Sends to specific people's phones. Best for presence-aware alerts: "the garage door has been open for 30 minutes while you're away."

🔔ntfyLater, not Day 1

Self-hosted push notification server. Works on any device without a phone app requirement. Good for server health alerts, automation summaries, and non-time-critical status updates.

Your First Real Alert: Leak Detected

A leak sensor is the best first alert in the house: it is unambiguous, it is rare, and it is expensive to miss. This is what a Critical notification actually looks like.

Needs: a leak sensor and the notify action for your phone.
Replace: the sensor entity and notify.mobile_app_your_phone.

Leak alert · paste in the YAML editor alias: Leak Detected description: Alerts the phone the moment the leak sensor goes wet. triggers: - trigger: state entity_id: binary_sensor.laundry_leak to: "on" conditions: [] actions: - action: notify.mobile_app_your_phone data: title: "Leak detected" message: "The laundry leak sensor is wet. Go look now." mode: single

Test it the only way that counts: wet the sensor per its manufacturer's test procedure and confirm the alert lands on your phone. An untested alert is a promise you have not kept.

The Notification Hierarchy: Build This

⚠️
The Notification Trap

New HA installs almost always over-notify. It feels useful: until your phone buzzes 15 times in an hour and you start ignoring everything. Build the habit of categorizing each notification before writing it. If it's not something you'd actually act on at 2am, suppress it or roll it into a daily digest.

✦ Section Validation
✅ Success Looks Like

You can send a test notification from Settings → Developer Tools → Actions → notify.mobile_app_yourphone and it arrives within 30 seconds. Every planned alert is categorized in your hierarchy.

⚠ Failure Signs

Test notification never arrives. Companion App shows notification permissions as blocked. You're already getting more than 5 notifications per day from HA after day one.

🔍 2-Min Validation

Settings → Developer Tools → Actions → search notify → select your phone → send "HA test notification" as message → confirm it arrives. If not, check phone notification permissions for the Companion App.

Thing 09 · Decision Aid

Remote Access
Chooser

Before reading Section 09, answer these questions in order. Most people land on one clear answer within 60 seconds.

Decision Tree: Pick Your Remote Access Method
Need remote access to HA? yes Do you already run a homelab or own a domain? no yes Do you want to expose other services too (not just HA)? yes no → Nabu Casa $6.50/mo · 2-min setup supports HA dev team → Cloudflare Tunnel Free · ~30 min setup expose any service · full control → Tailscale (also consider) Free · WireGuard VPN · access full home network either works · choose based on preference ⚠ Never forward port 8123 on your router: regardless of which method you choose
☁️ Nabu Casa
Setup takes under 5 minutes
No domain, no config files, no CLI
Directly funds Home Assistant development
Includes Alexa and Google Home integration
⚠️$6.50/month ongoing cost
⚠️Only exposes HA, not other services
🔐 Cloudflare Tunnel
Free: no monthly cost
Expose any service (Vaultwarden, Immich, etc.)
Cloudflare WAF in front of everything
Custom domain (e.g. ha.yourdomain.net)
⚠️Requires a domain (~$10/year) and 30 min setup
⚠️Slightly more to maintain if Cloudflare changes
Thing 09

Secure Remote Access
Without Opening Ports

You need access to HA when you're away from home. The wrong way is opening port 8123 on your router. Pick one of the two right ways below: then follow the steps.

☁️ Use Nabu Casa if:
You want zero config: done in under 5 minutes
You don't want to manage DNS, domains, or certificates
You want to support the HA development team ($6.50/mo)
You only need to expose HA, not other services
🔐 Use Cloudflare Tunnel if:
You want full control at no monthly cost (free)
You already manage a domain or run a homelab
You want to expose other services too (Vaultwarden, etc.)
You're comfortable with a 30-minute one-time setup
⚠️
Never do this

Do not forward port 8123 on your router. Your HA is then directly reachable from the open internet with nothing in front of it. Both Nabu Casa and Cloudflare Tunnel avoid this entirely, that's the point.

Cloudflare Tunnel, Done Properly

A tunnel needs two addresses, and confusing them is the single most common reason this does not work: a public hostname (ha.yourdomain.net) and a private service URL that the cloudflared process can actually reach.

configuration.yaml http: use_x_forwarded_for: true trusted_proxies: - 127.0.0.1 # cloudflared on the same host - 172.16.0.0/12 # or the Docker bridge, if containerized ip_ban_enabled: true

Restart Home Assistant, then test from a phone with Wi-Fi off. If it loads on Wi-Fi but not on cellular, you tested your LAN, not your tunnel.

📝
Notes From the Field

My own tunnel config has both patterns in it, which is the clearest way to see the rule. Home Assistant runs in Docker with network_mode: host on the same NUC as cloudflared, so its service URL is http://localhost:8123 and that genuinely works. But the services on a different box in the same config point at http://192.168.68.60:2283 and similar. Same tunnel, same file, different addresses, because localhost is only ever true relative to the process saying it.

And I do have use_x_forwarded_for with trusted_proxies set. Not because I planned ahead: because I hit the wall first, got a login page that refused every correct password, and went looking.

The Third Option: Tailscale

The chooser above offers Tailscale, so here is what it actually is. Cloudflare Tunnel publishes Home Assistant to the public internet behind Cloudflare's edge, and anyone with the URL reaches the login page. Tailscale does the opposite: it builds a private network between your own devices. There is no public hostname and nothing to find by scanning. Home Assistant is simply reachable from devices you have enrolled, as if you were at home.

🔒Choose Tailscale if

Only you and your household need access, everyone will install a client on their phone, and you would rather nothing be publicly reachable at all. It is the safer default for a system that controls your locks and cameras.

🌐Choose Cloudflare Tunnel if

You need a normal public URL: sharing with someone who will not install anything, webhooks from an outside service, or a dashboard on a device you cannot enroll. Pair it with an Access policy so the world cannot reach the login page.

⚠️
One thing to understand before you turn on subnet routing

Tailscale can advertise your whole home subnet, so an enrolled phone reaches every device on your LAN, not just Home Assistant. That is genuinely useful and it is a much larger grant of access than "let me check my thermostat." If you only need Home Assistant, do not advertise routes. If you do enable it, understand that you have effectively given that phone a seat on your home network.

📖
Vol. 5 Goes Deeper

Network Security & Zero Trust at Home covers Tailscale subnet routers, ACLs, exit nodes, and how to replace an exposed port with a private path safely.

📖
Vol. 1 Goes Deeper: Cloudflare Tunnels

The Bench Notes Home Lab Playbook covers Cloudflare Tunnel setup end-to-end, including running multiple services (not just HA) behind a single tunnel, Cloudflare Access for authentication, and DNS configuration. If you're also running a homelab server, Vol. 1 covers this as part of your full remote access architecture.

No browser certificate warnings. The Companion App connects remotely without being on your home network.

⚠ Failure Signs

HA only loads on home Wi-Fi. Cloudflare tunnel shows as "inactive" in Zero Trust dashboard. Certificate error or HTTP (not HTTPS) in browser when accessing remotely.

🔍 2-Min Validation

Turn off Wi-Fi on your phone. Open your HA URL in mobile browser. It should load with HTTPS and no warnings. Then open the Companion App: it should connect and show your dashboard.

↩ Rollback If Cloudflare Tunnel breaks remote access: you can still reach HA on your home network at its local IP. Go to Cloudflare Zero Trust → delete the broken tunnel → recreate it from scratch (takes 10 minutes). Your HA config is not affected: the tunnel is external infrastructure only.
Thing 10

Enable Automatic Updates
Carefully

HA releases updates every month. Apps release even more frequently. Not everything should auto-update, but some things absolutely should.

Auto-Update These

Low-risk Apps (Samba, File Editor, and similar) where a bad update is easy to undo. That is the whole list. Note what is not here: Home Assistant OS and Apps are managed by Supervisor, and Watchtower does not update them (it swaps Docker container images, which is a different thing entirely). HACS integrations sit outside Core's compatibility guarantees, so review them by hand. Keep databases, radio stacks, and tunnels on manual review: those are the ones that take the house down.

⏸️Update Manually: With a Backup First

Home Assistant Core: take a snapshot, read the release notes, then update. Minor versions (2025.x.y → 2025.x.z) are usually safe. Major version jumps occasionally have breaking changes. Zigbee2MQTT: read the changelog first.

The Safe Update Ritual

📝
Notes From the Field

HA 2024.x had a breaking change in how entity categories work that silently broke three of my automations: they still ran, but the wrong entities were targeted. Reading the release notes took 5 minutes. Finding the bug took 2 hours. I now skim the breaking changes every update before applying. Also: do not update the night before a vacation.

✦ Section Validation
✅ Success Looks Like

You have a clear policy: which Apps auto-update, which require manual review. A backup exists that was taken within the last 24 hours. You know where the release notes live.

⚠ Failure Signs

Everything set to auto-update including HA Core. No backup taken before the last update. You've applied an update and something broke but you can't roll back.

🔍 2-Min Validation

Settings → Apps → confirm auto-update is only enabled on safe ones. Settings → System → Backups: confirm a recent backup exists. Bookmark home-assistant.io/blog for release notes.

↩ Rollback If a HA Core update breaks something: Settings → Backups → restore the snapshot you took immediately before the update. This reverts HA Core, your config, and all Apps to the pre-update state. This is not instant: a large system can take around 45 minutes while Core and every App are reinstalled. Plan for it. This is the single most important reason to take a manual backup before every Core update.
📝 Experiential

Notes From
the Field

What a power outage, three hardware failures, and two years of automation debugging taught me about setting up Home Assistant right the first time.

The Power Outage That Changed How I Set Up Every Server

My first Intel NUC was running HA perfectly for weeks. Then a brief power blip: probably 3 seconds: took the whole setup down. Not because anything broke. Because the BIOS "Power Restore" setting was on "Last State," which meant a machine that was on when power was cut would stay off when it came back. I came home to a dark house and zero automations running. The fix took 2 minutes in BIOS. The lesson cost me an afternoon.

🔄
Automations That "Restore" State Are Tricky

I built a weather alert automation that flashed lights red, then "restored the previous state" when the alert ended. What actually happened: if HA restarted during the alert, it lost the "previous state" context entirely and left every light stuck in whatever state it was in at restart. I stopped trying to reconstruct an arbitrary previous state. An input_boolean remembers yes or no. It cannot remember brightness, color temperature, or which four of your six lights were on, so it was never going to solve this. Now I store the durable house mode I actually care about, and when the alert clears I apply a known scene. Less magical, entirely predictable across a restart.

📱
Presence Detection Is Harder Than It Looks

Phone GPS alone is unreliable. My "everyone is home" trigger would sometimes not fire for 10 minutes after arriving because iOS aggressively batches location updates. I ended up with a three-source presence detection setup: phone GPS (primary), router-based detection (faster, local), and BLE beacon (instant, passive). Combining all three into a single person entity through HA made arrival detection noticeably faster in my house, and it keeps working when one source goes quiet. Actual timing depends on the phone OS, tracker update intervals, BLE coverage, and how big your Home zone is, so treat any specific number you read (including mine) with suspicion.

🏷️
Entity Naming Regret Is Real

I have an entity still called light.0x00158d0001a23f from a Zigbee bulb I added in year one. That's its MAC address, which HA used as the default name because I didn't intervene. It's referenced in 4 automations. Renaming the entity doesn't change the ID, and changing the ID means updating every automation by hand. It's not catastrophic, but every time I look at that automation YAML I regret the 10 seconds I didn't spend naming it properly. Ten seconds. That's what it costs to do it right.

You're Set Up. What's Next?
Bench Notes · Home Lab Series · Vol. 2
10 Things to Do First
in Home Assistant
Setup queues · validation blocks · visual diagrams · real-world field notes. The guide that replaces two hours of forum-searching.
Free guide
📬
Not ready for the paid guides yet?
I send new guides and practical references when they are ready. No daily sequence and no recycled tips.
Send me new guides →
Available Now
Automation Pack
Vol. 3 · $14.99
38 deployable YAML automation blocks from a real setup. Each with an anatomy diagram, failure modes, and field notes on why it's built the way it is. See the Automation Pack →
🟡 Presence-aware lighting
🟡 Power outage recovery
🟡 Night mode · away mode
🟡 Alert filtering · energy tracking
Available Now
📓
Home Lab Playbook
Vol. 1 · $21.99 at benchnotes.net
Ready to build a full homelab alongside HA? Docker, SSH, Cloudflare Tunnels, Vaultwarden, AdGuard, Immich: from a real two-server setup.
🟣 70+ pages · real configs
🟣 SSH, tunnels, containers
🟣 Self-hosted services A–Z
🟣 Built from a real setup, not a demo
📓
Bench Notes
Built from a real setup, not a demo.
benchnotes.net
Appendix A

Debug
Queue

The most common HA problems, each with a specific diagnostic path. When something stops working, start here before asking in forums.

🔴 Automation didn't fire Most Common
1Settings → Automations → confirm the automation is enabled (toggle is on) 2Check "Last triggered": if it shows a time, it ran. Check what it did in Logbook. 3Use Run actions to confirm the actions work. This does NOT test the trigger, which is the mistake that costs people an evening. To test the trigger, open Traces after a real run: it shows whether the trigger fired, which conditions passed, and where an action failed 4Check trigger entity state in Settings → Developer Tools → States. Is it in the state the trigger expects? 5Check conditions: a condition blocking the action is the #1 silent failure mode
🟡 Entity shows "unavailable" Common
1Check if the physical device is powered on and connected to your network 2For IP-based devices: ping the device's IP from another machine. If no response, the IP may have changed 3For Zigbee: check ZHA or Z2M: is the device listed as reachable? Try pressing the device's button to wake it 4Settings → Devices & Services → find the integration → check for error badges or "Failed" status 5Restart the integration (not all of HA): three-dot menu → Reload
📡 Device changed IP: integration broke
1Go to your router and find the device's current IP in the DHCP lease table 2Add a DHCP reservation for that MAC address so it doesn't change again 3Settings → Devices & Services → find the integration → Configure → update the IP address 4If the integration doesn't allow reconfiguration, delete it and re-add with the new/fixed IP
Appendix A (continued)

Debug Queue
continued

📱 Mobile notification didn't arrive
1Settings → Developer Tools → Actions → notify.mobile_app_yourphone → send a manual test notification first 2If manual test fails: open Companion App on phone → check Settings → Notifications → confirm enabled 3Check phone OS settings: iOS and Android both have per-app notification permissions that override HA 4If manual works but automation doesn't: add a Logbook card to your debug dashboard and check if the automation ran at all 5Check the notify service name exactly: entity names are case-sensitive and device name changes break the service name
🖥️ Dashboard card not updating
1Hard refresh the browser (Ctrl+Shift+R / Cmd+Shift+R): cached JS is the most common cause 2Check the entity in Settings → Developer Tools → States. Is the state actually changing there? If not, it's a device/integration issue, not a dashboard issue 3If state is updating in Dev Tools but not the card, the card configuration may reference the wrong entity ID 4For custom HACS cards: check the card's GitHub repo for known issues with the current HA version
🔑 Remote access stopped working
1For Cloudflare Tunnel: log into Cloudflare Zero Trust → Networks → Tunnels → confirm tunnel shows as "Healthy" 2Check the connector where it actually runs. HAOS App: Settings → Apps → the tunnel App → Logs. Linux service: systemctl status cloudflared. Docker: docker logs cloudflared. There is no systemd on HAOS, so the systemctl command will simply not exist there 3For Nabu Casa: Settings → Home Assistant Cloud → check subscription status and connection indicator 4Try accessing from a browser (not the app) first: this isolates whether it's a Companion App config issue 5Check configuration.yaml: the homeassistant.external_url must match your tunnel's public hostname exactly
💥 HA won't start after an update Critical
1Check the HA release notes for breaking changes: search for your integration names and configuration keywords 2Restart into Safe Mode: Settings → System → Restart Home Assistant → Restart in safe mode, or from the HAOS CLI run ha core restart --safe-mode. There is no Shift-key trick. Safe mode loads HA with custom integrations, cards, and themes disabled 3If Safe Mode loads: a custom integration is the culprit. Disable HACS integrations one at a time to identify it 4Check home-assistant.log (only exists if you enabled duplicate-file logging; otherwise use ha core logs: the first ERROR line is almost always the root cause 5If all else fails: restore your pre-update backup from Settings → Backups. This is why you take a backup before every Core update.
Free guide
Home Assistant is running. What now?

This guide gets the foundation right. The rest of the Bench Notes Home Lab Series goes deeper on the parts that bite people later: the server underneath it, backups that actually restore, and remote access that does not open a hole in your network.

01The Home Lab Playbook
05Network Security & Zero Trust
03The Automation Pack
09Backup & Migration Blueprint
Browse the series
Get the references and help pick what comes next
Drop your email for the print-ready homelab references and a heads-up when new ones ship. Want a say in what gets built next? Pick how you want to be involved. No spam, one-click unsubscribe.

v1.2.0 · Last updated July 2026