Home Assistant: The Self-Hosted Brain Your Smart Home Needs

Home Assistant: The Self-Hosted Brain Your Smart Home Needs

I ditched Google Home and Alexa after realizing they were recording every conversation in my living room. Here's why Home Assistant is the only smart home platform that respects your privacy — and how to run it in Docker.

💡 Disclosure: This article contains affiliate links. If you make a purchase through these links, we may earn a small commission at no extra cost to you. This helps support the site and keeps the content free.

import AffiliateLink from ’../../components/AffiliateLink.astro’;

It started with a Google Home Mini. “Hey Google, turn on the lights.” Magical.

Six months later I found out Google was recording every single conversation in my living room. Every question from my kids. Every dinner discussion I thought was private. Full audio files, stored on their servers, mined for ad targeting.

I unplugged it. Threw it in the drawer. Never again.

But I still wanted the smart home stuff. Voice-controlled lights are genuinely convenient. Programmable heating saves money. Knowing who’s at the door when I’m away? That’s peace of mind.

Home Assistant became my answer. Three years later, I’m controlling 50+ devices without sending a single byte to Google or Amazon. Here’s how it works, how to set it up, and why I think every self-hoster should give it a shot.

What Actually Is Home Assistant?

Home Assistant is an open-source home automation platform. It talks to thousands of devices — lights, thermostats, cameras, locks, sensors — and controls them from a single interface.

The key difference? It runs locally. Your server talks directly to your devices. No cloud required. No third-party accounts. Your data stays where it belongs.

It supports Zigbee, Z-Wave, WiFi, Bluetooth, Thread, Matter. Integrates with Philips Hue, IKEA TRÅDFRI, Shelly, Sonoff, Tuya, Ecobee, Ring, and 1,900+ others.

I’ve got IKEA bulbs, Sonoff plugs, a Tado thermostat, Zigbee door sensors, a Nuki smart lock — everything talks to Home Assistant without ever touching the internet.

Why Not Alexa / Google Home / Siri?

The problem with cloud assistants is the cloud.

Your voice command goes to servers in Silicon Valley. Analyzed by AI. Stored indefinitely. Sold to ad networks. Accessible to contractors. Subject to government warrants.

Even when it “works well,” it’s terrifying when you think about it.

Home Assistant is different:

  • Local-first: Commands stay on your network
  • Offline-capable: Keeps working if the internet goes down
  • Extensible: 3,000+ community integrations
  • Free: No subscriptions, no paid tiers
  • Transparent: Open-source code, you can audit everything

The trade-off? You have to set it up yourself. But honestly, if you’re reading this blog, that’s probably part of the appeal.

Docker Compose Setup

Home Assistant can run on a Raspberry Pi, a NUC, a NAS, or a VPS. I use a dedicated NUC with an i3, but a Pi 4 is more than enough to start.

mkdir -p ~/homeassistant
cd ~/homeassistant

Here’s the docker-compose.yml I use:

version: "3.8"

services:
  homeassistant:
    image: ghcr.io/home-assistant/home-assistant:stable
    container_name: homeassistant
    restart: unless-stopped
    privileged: true
    environment:
      - TZ=Europe/London
    volumes:
      - ./config:/config
      - /etc/localtime:/etc/localtime:ro
      - /run/dbus:/run/dbus:ro
    ports:
      - "8123:8123"
    devices:
      - /dev/ttyUSB0:/dev/ttyUSB0
    networks:
      - hass-network

  mosquitto:
    image: eclipse-mosquitto:latest
    container_name: mosquitto
    restart: unless-stopped
    volumes:
      - ./mosquitto/config:/mosquitto/config
      - ./mosquitto/data:/mosquitto/data
      - ./mosquitto/log:/mosquitto/log
    ports:
      - "1883:1883"
      - "9001:9001"
    networks:
      - hass-network

  zigbee2mqtt:
    image: koenkk/zigbee2mqtt:latest
    container_name: zigbee2mqtt
    restart: unless-stopped
    volumes:
      - ./zigbee2mqtt:/app/data
    ports:
      - "8080:8080"
    environment:
      - TZ=Europe/London
    devices:
      - /dev/ttyUSB0:/dev/ttyUSB0
    networks:
      - hass-network

networks:
  hass-network:
    driver: bridge

Run it:

docker compose up -d

Wait a minute or two, then open http://your-ip:8123.

The first boot starts a setup wizard. Email, password, name of your home. Home Assistant automatically scans your network and discovers devices — Chromecasts, printers, NAS, smart TVs. It’s pretty impressive the first time you see it.

For devices that aren’t auto-discovered, Settings → Devices & Services → Add Integration is where you manually add them.

The Essentials Integrations I Run

Here’s what I’ve got configured on my instance:

Philips Hue: Local bridge, no cloud needed. All 12 of my bulbs are controllable without phoning home.

Zigbee2MQTT: For door sensors, motion detectors, temperature sensors (Xiaomi/Aqara). Cheap, reliable, no cloud. This is the backbone of my automation setup.

Shelly: WiFi plugs and relays that communicate locally. You can even flash them with Tasmota open-source firmware if you want full control.

Tado: Smart thermostat. Still requires Tado’s cloud unfortunately, but the Home Assistant integration is excellent and worth it for the energy savings.

Nuki: Smart lock. Works locally via Bluetooth or their bridge.

Frigate: NVR for cameras with local AI object detection. If you’re using cameras, this is a must-have — it detects people, cars, packages entirely on-device.

HACS: Home Assistant Community Store. Gives you access to hundreds of unofficial integrations. I’d call it essential.

Automations: Where the Magic Happens

Here are a few automations I run. These are what make the house feel actually “smart” rather than just “voice-controlled.”

Lights at sunset:

alias: "Evening lights"
trigger:
  - platform: sun
    event: sunset
    offset: "-00:30:00"
action:
  - service: light.turn_on
    target:
      entity_id:
        - light.living_room
        - light.kitchen
    data:
      brightness: 180
      color_temp: 350

Garage door alert:

alias: "Garage door open"
trigger:
  - platform: state
    entity_id: binary_sensor.garage_door
    to: "on"
    for:
      minutes: 10
action:
  - service: notify.mobile_app_my_phone
    data:
      message: "The garage door has been open for 10 minutes!"

Eco heating when nobody’s home:

alias: "Eco heating"
trigger:
  - platform: state
    entity_id: group.family
    to: "not_home"
    for:
      minutes: 30
action:
  - service: climate.set_temperature
    target:
      entity_id: climate.living_room
    data:
      temperature: 16

The automation editor in the UI is actually good now. I use it for 90% of my rules and only drop to YAML for complex ones.

Dashboards for Everyone

Home Assistant lets you build custom dashboards. I’ve got three:

  • Wall tablet: Simple view with lights, temperature, weather. For the family.
  • Admin: Full view with every sensor, logs, low-battery warnings. For me.
  • Mobile: Optimized for the iPhone app.

I also run Node-RED for complex visual automations. It’s optional but powerful if you’re doing multi-step flows.

Voice Control Without Selling Your Soul

You can still have voice control without Google or Amazon listening in.

Options:

  1. Assist: Home Assistant’s built-in voice assistant. Works locally with a USB mic.

  2. Rhasspy: More advanced open-source voice assistant. Deep Home Assistant integration.

  3. Whisper + Piper: Local speech-to-text and text-to-speech models. Runs fine on a Pi 4.

I use an old Android phone with the Companion Home Assistant app in “Assist” mode. It’s not as smooth as Alexa, but it’s 100% offline and nobody’s recording my conversations.

Backups Are Not Optional

Losing all your integrations and automations is a nightmare I’ve lived through once.

Here’s my backup script:

#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/backups/homeassistant"
tar -czf "$BACKUP_DIR/hass_$DATE.tar.gz" -C ~/homeassistant/config .
# Keep last 14 days
find "$BACKUP_DIR" -name "hass_*.tar.gz" -mtime +14 -delete

Test your backups. I had a SQLite DB corruption once — the restore took 10 minutes because I’d actually tested it. Don’t skip this.

Security: Accessing Home Assistant Remotely

This is where things get practical. You’ll want to access your dashboards from your phone when you’re out, but exposing smart home controls to the internet is inherently risky.

Option 1: VPN (recommended) WireGuard via a VPN provider or self-hosted. Connect to your network, then access Home Assistant. No ports exposed, no attack surface. This is what I do.

Option 2: Nabu Casa (cloud) Official service at $7.50/month. Easy, but requires their cloud. Good as a backup option for non-technical family members.

Option 3: Reverse proxy + 2FA Nginx Proxy Manager with authentication. Enable 2FA in Home Assistant. Doable, but more surface area than a VPN.

I use a mix: VPN for myself, temporary Nabu Casa access for my wife when she’s struggling with the VPN client. It’s not perfect, but it works for us.

What I Wish I’d Known Starting Out

A few things I learned the hard way:

Buy a dedicated Zigbee dongle. The ConBee II or Sonoff Zigbee 3.0 USB dongle are both affordable and reliable. Don’t try to use WiFi-only devices — Zigbee is more stable and uses less power.

Updates come weekly. Home Assistant releases every Friday. docker compose pull && docker compose up -d is part of my Saturday morning routine now. I’ve had maybe one breaking update in three years.

Start small. Don’t try to automate your entire house in one weekend. Start with one light and one sensor. Build from there. My first automation was just “turn on the desk lamp at sunset.” It took me two hours to figure out. Now I can build complex flows in minutes.

Your spouse will hate it at first. Home Assistant has a reputation for being “the thing that broke the lights again.” Keep it stable. Don’t tinker during family movie night. I learned this one the hard way.

Should You Switch?

If you’ve got even a handful of IoT devices and care about privacy, Home Assistant should be your next weekend project.

The setup time is real — expect a weekend to get the basics working and a month of tweaking before it feels “done.” But once it’s running? Zero cloud dependency. Full local control. No one listening to your conversations.

I recovered total control of my home environment. Lights, heating, security — everything responds to my rules, my schedules, my automation logic. And the best part? When the internet goes down, everything still works.

If you’re already self-hosting other services, this is a natural next step. Your privacy will thank you.


Written on 2026-05-18, from a living room where Google isn’t listening anymore. 50+ devices, zero mandatory cloud.

This article contains affiliate links. If you purchase through them, I may earn a commission at no extra cost to you.

Stay in the loop 📬

Get self-hosting tutorials, tool reviews, and infrastructure tips delivered to your inbox. No spam, unsubscribe anytime.

Join 0 self-hosters. Free forever.