Home Assistant

Oh how I love you.

Bottom line up front:
Home Assistant automates my home's life in a way I'm comfortable; data on my server, and consolidating all my home access apps to one unified, customizable dashboard.

It has endured several evolutions, but I'd like to share integrations and hardware because I know sometimes there's hesitancy on what works since it's such a self-service technology. Here's what I know works:

Building a Smarter Home

Many services can make a "Smart Home" but if they are all isolated and focused on their own services, sooner or later users have multiple dashboards they have to check, manage, and use just to make the home "smarter." And that, sounds dumb.

The user experience should be less window dressing and now utility. Window dressing is the shopping, or onboarding experience, like seeing an outfit on display in a window. That's not a user experience, the user hasn't experienced it yet. The user experience is defined by how the user, who is actively using, experiences the service or product. If I have to maintain five different apps for my lights, security, voice assistant, irrigation, and whatever else in the home, I'm fractionally using the services and there's entire companies double, triple, quadruple producing something unnecessary the market had already produced.

That investment into parallel services creates healthy competition, but it also silos development and the investment dollars could go into an existing better product.

That existing, better product is home assistant. All in one dashboard, making how users use smart devices, smarter, and building a smarter home.

Overview of Core Configuration

Deployment: Docker on My Home Server Hardware

Docker Compose Configuration

All services run as Docker containers. This provides portability, easy updates, and clean separation of concerns.

version: '3.8'

services:
  homeassistant:
    container_name: homeassistant
    image: ghcr.io/home-assistant/home-assistant:stable
    restart: unless-stopped
    privileged: true
    ports:
      - "8123:8123"
    volumes:
      - ./config:/config
      - ./media:/media
      - /etc/localtime:/etc/localtime:ro
    environment:
      - TZ=America/Chicago
    networks:
      - homeassistant

  zwavejs:
    container_name: zwavejs
    image: zwavejs/zwave-js-ui:latest
    restart: unless-stopped
    tty: true
    stop_signal: SIGINT
    environment:
      - SESSION_SECRET=your-secure-secret-here
      - TZ=America/Chicago
    devices:
      - '/dev/serial/by-id/usb-Zooz_XXXXXXXXXX:/dev/zwave'
    volumes:
      - ./zwavejs:/usr/src/app/store
    ports:
      - '8091:8091'
      - '3005:3000'
    networks:
      - homeassistant

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

  zigbee2mqtt:
    container_name: zigbee2mqtt
    image: koenkk/zigbee2mqtt:latest
    restart: unless-stopped
    tty: true
    stop_signal: SIGINT
    group_add:
      - dialout
    volumes:
      - ./zigbee2mqtt:/app/data
      - /run/udev:/run/udev:ro
    ports:
      - '8099:8080'
    environment:
      - TZ=America/Chicago
    devices:
      - /dev/serial/by-id/usb-ITead_Sonoff_XXXXXXXXXXXXXXXX:/dev/ttyUSB0
    privileged: true
    networks:
      - homeassistant

networks:
  homeassistant:
    name: homeassistant
    external: true

Key Configuration Notes

Network Mode: Bridge with explicit port mappings (alternative: host mode for mDNS device discovery)
Privileged: true (required for USB device access)
Timezone: America/Chicago
Restart Policy: unless-stopped

Data Locations

All configuration and data stored in local directories:

Path Purpose
./config Home Assistant configuration, automations, database
./media Media files
./zwavejs Z-Wave JS data
./zigbee2mqtt Zigbee2MQTT data
./mosquitto MQTT broker data

Common Tasks

Restart Services

docker-compose restart homeassistant
# Or specific service
docker-compose restart zwavejs

Update Services

docker-compose pull
docker-compose up -d

View Logs

docker logs homeassistant
docker logs -f homeassistant  # Follow mode

Check Configuration

docker exec homeassistant python -m homeassistant --script check_config --config /config

Access Shell

docker exec -it homeassistant bash

Pics

Mobile Main Dash

home-assistant-mobile-main-dashboard.jpg

Mobile Light Switches

home-assistant-mobile-lights.png

Mobile Energy Consumption

home-assistant-mobile-energy.png

Mobile TV Universal Remote

home-assistant-tv-remote.png

desktop 1

desktop 2


What I Learned

It's a fairly forgiving system if you stick to the UI, but if you want to play with custom integrations and/or build your own, that's where it's handy to have an AI hand-hold along the way. Also dangerous. Many accidental deletes of some automations or customizations before cronjob backups kicked in.

I learned:

It, unfortunately, creates the compulsive need for me to buy and build more projects around the house so I can collect more and view more in the dashboard.

Current State

AI is pretty hands-off in the development of the service. Instead, I have a cronjob that takes all the entities daily and adds it to my server documentation folder, and that folder is in my agent workspace so the agent always has latest entities for conversations.

The home really is set up more than I had anticipated, and I could leave it as is and be perfectly content. However, my nature prevents that. It will continue being an ongoing project.

What's Next

Voice control needs hardware deployment—the software is ready but need more Atom Echos placed around the house. I want to expand to more motion detection. There's more recent technology with Wi-Fi detecting presence similar to mmWave technology.