Files
EZ-Homelab/wiki/service-docs/home-assistant.md
kelinfoxy ef55974b50 Wiki major update
updated with recent documentation
2026-01-21 19:18:39 -05:00

616 lines
15 KiB
Markdown

# Home Assistant - Home Automation Platform
## Table of Contents
- [Overview](#overview)
- [What is Home Assistant?](#what-is-home-assistant)
- [Why Use Home Assistant?](#why-use-home-assistant)
- [Key Concepts](#key-concepts)
- [Configuration in AI-Homelab](#configuration-in-ai-homelab)
- [Official Resources](#official-resources)
- [Educational Resources](#educational-resources)
- [Docker Configuration](#docker-configuration)
- [Initial Setup](#initial-setup)
- [Integrations](#integrations)
- [Automations](#automations)
- [Add-ons vs Docker](#add-ons-vs-docker)
- [Troubleshooting](#troubleshooting)
- [Advanced Topics](#advanced-topics)
## Overview
**Category:** Home Automation
**Docker Image:** [homeassistant/home-assistant](https://hub.docker.com/r/homeassistant/home-assistant)
**Default Stack:** `homeassistant.yml`
**Web UI:** `https://homeassistant.${DOMAIN}` or `http://SERVER_IP:8123`
**Ports:** 8123
**Network Mode:** host (for device discovery)
## What is Home Assistant?
Home Assistant is a free, open-source home automation platform that focuses on local control and privacy. It integrates thousands of different devices and services, allowing you to automate and control your entire smart home from a single interface. Unlike cloud-based solutions, Home Assistant runs entirely locally on your network.
### Key Features
- **2000+ Integrations:** Supports virtually every smart device
- **Local Control:** Works without internet
- **Privacy Focused:** Your data stays home
- **Powerful Automations:** Visual and YAML-based
- **Voice Control:** Alexa, Google, Siri compatibility
- **Energy Monitoring:** Track usage and solar
- **Mobile Apps:** iOS and Android
- **Dashboards:** Customizable UI
- **Community:** Huge active community
- **Free & Open Source:** No subscriptions
## Why Use Home Assistant?
1. **Universal Integration:** Control everything from one place
2. **Local Control:** Works without internet
3. **Privacy:** Data never leaves your network
4. **No Cloud Required:** Unlike SmartThings, Alexa routines
5. **Powerful Automations:** Complex logic possible
6. **Active Development:** Updates every 3 weeks
7. **Community:** Massive community support
8. **Cost:** Free forever, no subscriptions
9. **Customizable:** Unlimited flexibility
10. **Future-Proof:** Open-source ensures longevity
## Key Concepts
### Entities
The basic building blocks of Home Assistant:
- **Sensors:** Temperature, humidity, power usage
- **Switches:** On/off devices
- **Lights:** Brightness, color control
- **Binary Sensors:** Motion, door/window sensors
- **Climate:** Thermostats
- **Cameras:** Video feeds
- **Media Players:** Speakers, TVs
### Integrations
Connections to devices and services:
- **Zigbee2MQTT:** Zigbee devices
- **ESPHome:** Custom ESP devices
- **MQTT:** Message broker protocol
- **HACS:** Community store
- **Tasmota:** Flashed smart plugs
- **UniFi:** Network devices
- **Plex/Jellyfin:** Media servers
### Automations
Triggered actions:
- **Trigger:** What starts the automation
- **Condition:** Requirements to continue
- **Action:** What happens
Example: Motion detected → If after sunset → Turn on lights
### Scripts
Reusable action sequences:
- Manual execution
- Called from automations
- Parameterized
### Scenes
Saved states of devices:
- "Movie Time" → Dims lights, closes blinds
- "Good Night" → Turns off everything
- One-click activation
## Configuration in AI-Homelab
### Directory Structure
```
/opt/stacks/homeassistant/home-assistant/config/
configuration.yaml # Main config
automations.yaml # Automations
scripts.yaml # Scripts
secrets.yaml # Sensitive data
custom_components/ # HACS and custom integrations
www/ # Custom resources
blueprints/ # Automation blueprints
```
### Environment Variables
```bash
TZ=America/New_York
```
### Network Mode: host
Home Assistant uses `network_mode: host` instead of bridge networking. This is required for:
- **Device Discovery:** mDNS, UPnP, SSDP
- **Casting:** Chromecast, Google Home
- **HomeKit:** Apple HomeKit bridge
- **DLNA:** Media device discovery
**Trade-off:** Can't use Traefik routing easily. Typically accessed via IP:8123 or DNS record pointing to server IP.
## Official Resources
- **Website:** https://www.home-assistant.io
- **Documentation:** https://www.home-assistant.io/docs
- **Community:** https://community.home-assistant.io
- **GitHub:** https://github.com/home-assistant/core
- **YouTube:** https://www.youtube.com/@homeassistant
## Educational Resources
### YouTube Channels
1. **Everything Smart Home** - https://www.youtube.com/@EverythingSmartHome
- Best Home Assistant tutorials
- Device reviews and integrations
- Automation ideas
2. **Smart Home Junkie** - https://www.youtube.com/@SmartHomeJunkie
- In-depth Home Assistant guides
- Zigbee, Z-Wave, ESPHome
- Advanced automations
3. **Intermit.Tech** - https://www.youtube.com/@intermittechnology
- Technical deep dives
- Docker Home Assistant setup
- Integration tutorials
4. **BeardedTinker** - https://www.youtube.com/@BeardedTinker
- German/English tutorials
- Creative automation ideas
- Device comparisons
### Articles & Guides
1. **Official Getting Started:** https://www.home-assistant.io/getting-started
2. **Home Assistant Course:** https://www.home-assistant.io/course
3. **Community Guides:** https://community.home-assistant.io/c/guides/37
### Books
1. **"Home Assistant Cookbook"** by Marco Bruni
2. **"Practical Home Assistant"** by Alan Tse
## Docker Configuration
```yaml
home-assistant:
image: homeassistant/home-assistant:latest
container_name: home-assistant
restart: unless-stopped
network_mode: host
privileged: true # For USB devices (Zigbee/Z-Wave sticks)
environment:
- TZ=America/New_York
volumes:
- /opt/stacks/homeassistant/home-assistant/config:/config
- /etc/localtime:/etc/localtime:ro
- /run/dbus:/run/dbus:ro # For Bluetooth
devices:
- /dev/ttyUSB0:/dev/ttyUSB0 # Zigbee coordinator (if present)
labels:
- "com.centurylinklabs.watchtower.enable=false" # Manual updates recommended
```
**Note:** `network_mode: host` means no Traefik routing. Access via server IP.
## Initial Setup
1. **Start Container:**
```bash
docker compose up -d home-assistant
```
2. **Access UI:** `http://SERVER_IP:8123`
3. **Create Account:**
- Name, username, password
- This is your admin account
- Secure password required
4. **Set Location:**
- Used for weather, sun position
- Important for automations
5. **Scan for Devices:**
- Home Assistant auto-discovers many devices
- Check discovered integrations
6. **Install HACS (Highly Recommended):**
HACS provides thousands of community integrations and themes.
```bash
# Access container
docker exec -it home-assistant bash
# Download HACS
wget -O - https://get.hacs.xyz | bash -
# Restart Home Assistant
exit
docker restart home-assistant
```
Then in UI:
- Settings → Devices & Services → Add Integration
- Search "HACS"
- Authorize with GitHub account
- HACS now available in sidebar
## Integrations
### Essential Integrations
**Zigbee2MQTT:**
- Connect Zigbee devices
- Requires Zigbee coordinator USB stick
- See zigbee2mqtt.md documentation
**ESPHome:**
- Custom ESP8266/ESP32 devices
- Flashed smart plugs, sensors
- See esphome.md documentation
**MQTT:**
- Message broker for IoT devices
- Connects Zigbee2MQTT, Tasmota
- See mosquitto.md documentation
**Mobile App:**
- iOS/Android apps
- Location tracking
- Notifications
- Remote access
**Media Integrations:**
- Plex/Jellyfin: Media controls
- Spotify: Music control
- Sonos: Speaker control
**Network Integrations:**
- UniFi: Device tracking
- Pi-hole: Stats and control
- Wake on LAN: Turn on computers
### Adding Integrations
**UI Method:**
1. Settings → Devices & Services
2. "+ Add Integration"
3. Search for integration
4. Follow setup wizard
**YAML Method (configuration.yaml):**
```yaml
# Example: MQTT
mqtt:
broker: mosquitto
port: 1883
username: !secret mqtt_user
password: !secret mqtt_pass
```
## Automations
### Visual Editor
1. **Settings → Automations & Scenes → Create Automation**
2. **Choose Trigger:**
- Time
- Device state change
- Numeric state (temperature > 75°F)
- Event
- Webhook
3. **Add Conditions (Optional):**
- Time of day
- Day of week
- Device states
- Numeric comparisons
4. **Choose Actions:**
- Turn on/off devices
- Send notifications
- Call services
- Delays
- Repeat actions
### YAML Automations
**Example: Motion-Activated Lights**
```yaml
automation:
- alias: "Hallway Motion Lights"
description: "Turn on hallway lights when motion detected after sunset"
trigger:
- platform: state
entity_id: binary_sensor.hallway_motion
to: "on"
condition:
- condition: sun
after: sunset
action:
- service: light.turn_on
target:
entity_id: light.hallway
data:
brightness_pct: 75
- delay:
minutes: 5
- service: light.turn_off
target:
entity_id: light.hallway
```
### Automation Ideas
**Security:**
- Notify if door opens when away
- Flash lights if motion detected at night
- Send camera snapshot on doorbell press
**Comfort:**
- Adjust thermostat based on presence
- Close blinds when sunny
- Turn on fan if temperature > X
**Energy:**
- Turn off devices at bedtime
- Disable charging when battery full
- Monitor and alert high usage
**Media:**
- Dim lights when movie starts
- Pause media on doorbell
- Resume after phone call
## Add-ons vs Docker
**Home Assistant OS** (not used in AI-Homelab) includes an "Add-ons" system. Since AI-Homelab uses Docker directly, we deploy services as separate containers instead:
| Add-on | AI-Homelab Docker Service |
|--------|---------------------------|
| Mosquitto Broker | mosquitto container |
| Zigbee2MQTT | zigbee2mqtt container |
| ESPHome | esphome container |
| Node-RED | node-red container |
| File Editor | code-server container |
**Advantages of Docker Approach:**
- More control
- Easier backups
- Standard Docker tools
- Better resource management
**Disadvantage:**
- Manual integration setup (vs automatic with add-ons)
## Troubleshooting
### Container Won't Start
```bash
# Check logs
docker logs home-assistant
# Common issue: Port 8123 in use
sudo netstat -tulpn | grep 8123
# Check config syntax
docker exec home-assistant python -m homeassistant --script check_config
```
### Configuration Errors
```bash
# Validate configuration
# Settings → System → Check Configuration
# Or via command line:
docker exec home-assistant python -m homeassistant --script check_config
# View specific file
docker exec home-assistant cat /config/configuration.yaml
```
### Integration Not Working
```bash
# Check logs for integration
# Settings → System → Logs
# Filter by integration name
# Reload integration
# Settings → Devices & Services → Integration → Reload
# Remove and re-add if persistent
# Settings → Devices & Services → Integration → Delete
# Then add again
```
### USB Device Not Found
```bash
# List USB devices
ls -la /dev/ttyUSB*
ls -la /dev/ttyACM*
# Check device is passed to container
docker exec home-assistant ls -la /dev/
# Verify permissions
ls -la /dev/ttyUSB0
# Add user to dialout group (host)
sudo usermod -aG dialout kelin
# Restart
# Or set permissions in docker-compose
devices:
- /dev/ttyUSB0:/dev/ttyUSB0
```
### Slow Performance
```bash
# Check recorder size
docker exec -it home-assistant bash
ls -lh /config/home-assistant_v2.db
# If large (>1GB), purge old data
# In UI: Settings → System → Repair → Database
# Or configure in configuration.yaml:
recorder:
purge_keep_days: 7
commit_interval: 5
```
## Advanced Topics
### Backup Strategy
**Manual Backup:**
```bash
# Stop container
docker stop home-assistant
# Backup config directory
tar -czf ha-backup-$(date +%Y%m%d).tar.gz \
/opt/stacks/homeassistant/home-assistant/config/
# Start container
docker start home-assistant
```
**Automated Backup:**
Use Home Assistant's built-in backup (Settings → System → Backups), or setup scheduled backups with the Backrest service in utilities stack.
### Secrets Management
Keep passwords out of configuration:
**secrets.yaml:**
```yaml
mqtt_user: homeassistant
mqtt_pass: your_secure_password
api_key: abc123xyz789
```
**configuration.yaml:**
```yaml
mqtt:
username: !secret mqtt_user
password: !secret mqtt_pass
weather:
- platform: openweathermap
api_key: !secret api_key
```
### Custom Components (HACS)
Thousands of community integrations:
**Popular HACS Integrations:**
- **Browser Mod:** Control browser tabs
- **Frigate:** NVR integration
- **Adaptive Lighting:** Circadian-based lighting
- **Alexa Media Player:** Advanced Alexa control
- **Waste Collection Schedule:** Trash reminders
- **Grocy:** Grocery management
**Install from HACS:**
1. HACS → Integrations
2. Search for integration
3. Download
4. Restart Home Assistant
5. Add integration via UI
### Templating
Jinja2 templates for dynamic values:
```yaml
# Get temperature difference
{{ states('sensor.outside_temp') | float - states('sensor.inside_temp') | float }}
# Conditional message
{% if is_state('person.john', 'home') %}
John is home
{% else %}
John is away
{% endif %}
# Count open windows
{{ states.binary_sensor | selectattr('entity_id', 'search', 'window')
| selectattr('state', 'eq', 'on') | list | count }}
```
### Voice Control
**Alexa:**
- Settings → Integrations → Alexa
- Expose entities to Alexa
- "Alexa, turn on living room lights"
**Google Assistant:**
- Requires Home Assistant Cloud ($6.50/month) or manual setup
- Or use Nabu Casa Cloud for easy setup
**Local Voice:**
- New feature (2023+)
- Wake word detection
- Runs fully local
- Requires USB microphone
### Node-RED Integration
Visual automation builder:
- More flexible than HA automations
- Drag-and-drop flow-based
- See node-red.md documentation
**Connect to HA:**
- Install node-red-contrib-home-assistant-websocket
- Configure Home Assistant server
- Long-lived access token
## Summary
Home Assistant is the ultimate home automation platform offering:
- 2000+ device integrations
- Local control and privacy
- Powerful automations
- Voice control
- Energy monitoring
- Mobile apps
- Active community
- Free and open-source
**Perfect for:**
- Smart home enthusiasts
- Privacy-conscious users
- DIY home automation
- Multi-brand device integration
- Complex automation needs
- Energy monitoring
**Key Points:**
- Runs entirely locally
- Works without internet
- Massive device support
- 3-week release cycle
- HACS for community add-ons
- Mobile apps available
- No subscriptions required
**Remember:**
- Install HACS for extra integrations
- Use secrets.yaml for passwords
- Regular backups important
- Community forum is helpful
- Updates every 3 weeks
- Read changelogs before updating
Home Assistant gives you complete control of your smart home!