Install Home Assistant OS on its own dedicated device — a Raspberry Pi 4 you already own or a ~$60 used thin client — not as a Docker container on your main server. Then spend the month in this order: week one, install and let discovery find what you own; week two, a $25 Zigbee dongle and your first three devices; week three, the three automations that actually survive contact with a household; week four, dashboards and off-box backups. Touch YAML for almost none of it. That sequencing is the difference between a smart home and an abandoned hobby project.
Week 0: pick the install method once
| Method | Add-ons | Managed OS updates | Who it's for |
|---|---|---|---|
| Home Assistant OS | Yes | Yes | Almost everyone — take this |
| Container (Docker) | No | Your job | People merging it into an existing stack |
| Core (venv) | No | Entirely your job | Maintenance masochists |
Home Assistant OS gives you the add-on store (Zigbee2MQTT, Mosquitto, file editors as one-click installs), supervised updates, and integrated backups. The container route loses all of that and saves you nothing except a second box — and a smart home is the one service where a reboot of your general-purpose server taking the lights down gets noticed. A Pi 4 with 4GB and an SSD (not an SD card — they die under HA's database writes, usually within a year) or any old thin client runs it at 5–8W. Flash the image per the official install guide, and you're at the onboarding screen in fifteen minutes.
Week 1: discovery, the mobile app, and naming discipline
First boot auto-discovers more than you expect: TVs, speakers, printers, the router, anything Matter or HomeKit-adjacent. Add the integrations it suggests, then install the companion app on every phone in the house — it's the presence sensor for everything later, and per-person presence ("everyone left") is the single most useful trigger in home automation.
Do one unglamorous thing this week: rename entities as you add them. light.living_room_lamp, not light.tuya_ts0505b_3f2a. Fifty devices from now, retrofitting names is an afternoon of tedium; doing it at add-time is free. Skip this and every automation you write later starts with ten minutes of "which light is that."
Week 2: Zigbee changes what the platform is
Wi-Fi smart devices are cloud-tethered, chatty on your network, and vanish when a vendor sunsets a server. Zigbee devices are local, instant, and cheap — but they need a coordinator. A Sonoff ZBDongle-E is about $25; plug it in (on a USB extension cable, away from USB 3.0 ports, which radiate interference squarely across Zigbee's 2.4GHz channels), add the ZHA integration, and pair your first devices. Good first three: a smart plug with power monitoring (~$15), a motion sensor (~$18), a door sensor (~$12).
ZHA versus Zigbee2MQTT is week-ten knowledge, not week-two — ZHA is built in and fine; Z2M supports more exotic devices and migrating later is an evening. Don't let that comparison thread eat your weekend now.
Week 3: the three automations that stick
Novelty automations get disabled within a month. These three survive because they remove real friction:
- Motion light with a darkness condition: hallway light on motion, only when sun is below horizon (or illuminance under ~10 lx), off after 3 minutes of no motion. The "off" half is what separates it from a toy.
- Laundry notification from the power-monitoring plug: washing machine drawing over 10W then under 3W for 3 minutes means done — notify both phones. Highest satisfaction-per-line-of-config in the platform.
- Departure check: when the last person leaves, notify if the front door contact is open or any lights stayed on, with an action button to switch them off.
Build all three in the UI editor. As a taste of what the YAML view of a trigger looks like when you eventually want it:
triggers:
- trigger: numeric_state
entity_id: sensor.washer_power
below: 3
for: "00:03:00"
Week 4: dashboards and the backup that saves you
Make one dashboard per audience: a wall-tablet view with five big buttons beats the default auto-populated everything-grid that greets guests with 200 entities. Then configure automatic backups (Settings → System → Backups) on a schedule, and — the part people skip — send them off the device to a network share or cloud target. A dead SD card with your only backup on it is the classic month-six disaster. Fold the target into the same routine as your other backups.
Avoiding YAML burnout
Home Assistant's reputation for YAML suffering is five years stale — the UI editors cover automations, scripts, scenes, and dashboards fully, and helpers (Settings → Devices → Helpers) replace what used to require template sensors. YAML earns its keep in exactly two places now: Jinja templates for derived values, and bulk find-and-replace when you rename things. Resist the forum posts insisting real users write packages of YAML; they were written when there was no alternative. Also resist buying ten sensor types in week one — a hue of burnout comes from configuring hardware you had no plan for. One room done well, then expand; the home automation category will still be there in month two.
What I'd do
Pi 4 or thin client with an SSD, HAOS, companion app on every phone, names fixed at add-time. ZBDongle-E on an extension cable, three Zigbee devices, ZHA. The motion-light, laundry, and departure automations via the UI. Nightly backups shipped off-box. That's a foundation that runs for years — monthly updates arrive continuously (the 2026.x train), and HAOS applies them with a one-click rollback if anything breaks, which is exactly the amount of excitement a smart home should provide.