Instalación de Home Assistant en un Servidor Linux
Home Assistant es la plataforma de automatización del hogar de código abierto más completa, que permite centralizar y automatizar dispositivos inteligentes de más de 3.000 integraciones distintas sin depender de la nube. Instalado en un servidor Linux propio, Home Assistant ofrece control total sobre los datos del hogar, menor latencia que las soluciones cloud y la capacidad de funcionar completamente offline con acceso remoto seguro mediante Nabu Casa o VPN.
Requisitos Previos
- Ubuntu 20.04/22.04 o Debian 11+
- Al menos 2 GB de RAM (4 GB recomendado)
- Al menos 32 GB de almacenamiento (preferentemente SSD)
- Docker Engine 20.10+ y Docker Compose
- Python 3.10+ (para instalación sin Docker)
- Red local con acceso a los dispositivos inteligentes
Instalación con Docker
Docker es el método más sencillo para instalar Home Assistant Core:
# Crear directorio de configuración persistente
mkdir -p /opt/homeassistant/config
# Crear docker-compose.yml para Home Assistant
cat > /opt/homeassistant/docker-compose.yml << 'EOF'
version: '3.8'
services:
homeassistant:
container_name: homeassistant
image: ghcr.io/home-assistant/home-assistant:stable
restart: unless-stopped
network_mode: host
# network_mode: host es IMPORTANTE para la detección automática de dispositivos
volumes:
- ./config:/config
- /etc/localtime:/etc/localtime:ro
environment:
TZ: Europe/Madrid
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8123"]
interval: 30s
timeout: 10s
retries: 3
EOF
cd /opt/homeassistant
# Iniciar Home Assistant
docker-compose up -d
# Ver los logs de inicio (puede tardar 2-3 minutos la primera vez)
docker-compose logs -f homeassistant
Acceder a la interfaz web:
# Home Assistant estará disponible en:
# http://IP_DEL_SERVIDOR:8123
# Seguir el asistente de configuración inicial:
# 1. Crear cuenta de administrador
# 2. Seleccionar ubicación geográfica
# 3. Revisar las integraciones detectadas automáticamente
# 4. Finalizar la configuración inicial
Instalación con Supervised
Home Assistant Supervised permite usar add-ons y el supervisor:
# NOTA: Solo soportado oficialmente en Debian 12
# En otros sistemas se considera "no compatible" pero funciona
# Instalar dependencias
sudo apt-get update
sudo apt-get install -y \
apparmor \
cifs-utils \
curl \
dbus \
jq \
libglib2.0-bin \
lsb-release \
network-manager \
nfs-common \
systemd-journal-remote \
systemd-resolved \
udisks2 \
wget
# Instalar Docker
curl -fsSL https://get.docker.com | sudo sh
sudo systemctl enable docker
# Descargar el instalador de HA Supervised
curl -Lo ha-supervised-installer.sh \
https://github.com/home-assistant/supervised-installer/releases/latest/download/homeassistant-supervised.sh
# Instalar HA Supervised
sudo bash ha-supervised-installer.sh --machine generic-x86-64
# Esperar a que se complete la instalación (puede tardar 10-15 minutos)
# Monitorizar el progreso
sudo journalctl -fu hassio-supervisor
Configuración de Integraciones
Añadir dispositivos e integraciones:
# La mayoría de integraciones se configuran desde la interfaz web:
# Configuración > Dispositivos y Servicios > Añadir integración
# Editar la configuración YAML para integraciones avanzadas
nano /opt/homeassistant/config/configuration.yaml
Ejemplo de configuración de integraciones en configuration.yaml:
# configuration.yaml de Home Assistant
homeassistant:
name: Mi Hogar
latitude: 40.4168
longitude: -3.7038
elevation: 667
unit_system: metric
currency: EUR
country: ES
language: es
time_zone: Europe/Madrid
# Configurar notificaciones por correo
notify:
- platform: smtp
name: correo_notificaciones
server: smtp.gmail.com
port: 587
starttls: true
sender: [email protected]
recipient: [email protected]
username: [email protected]
password: mi_app_password
# Sensor de temperatura con MQTT
mqtt:
sensor:
- name: "Temperatura Salón"
state_topic: "casa/salon/temperatura"
unit_of_measurement: "°C"
device_class: temperature
value_template: "{{ value_json.temperatura }}"
- name: "Humedad Salón"
state_topic: "casa/salon/humedad"
unit_of_measurement: "%"
device_class: humidity
value_template: "{{ value_json.humedad }}"
# Grupos de dispositivos
group:
luces_salon:
name: "Luces del Salón"
entities:
- light.lampara_principal
- light.lampara_esquina
sensores_exterior:
name: "Sensores Exteriores"
entities:
- sensor.temperatura_exterior
- sensor.lluvia
Reglas de Automatización
Crear automatizaciones desde YAML o la interfaz visual:
# Crear archivo de automatizaciones
nano /opt/homeassistant/config/automations.yaml
# automations.yaml - Reglas de automatización del hogar
# Automatización 1: Encender luces al atardecer
- id: encender_luces_atardecer
alias: "Encender luces al atardecer"
description: "Enciende las luces del salón cuando el sol se pone"
trigger:
- platform: sun
event: sunset
offset: "-00:30:00" # 30 minutos antes del atardecer
condition:
- condition: state
entity_id: person.familia
state: home # Solo si hay alguien en casa
action:
- service: light.turn_on
target:
entity_id: group.luces_salon
data:
brightness: 180
color_temp: 3000 # Luz cálida en Kelvin
# Automatización 2: Alerta de temperatura alta
- id: alerta_temperatura_alta
alias: "Alerta temperatura servidor"
trigger:
- platform: numeric_state
entity_id: sensor.temperatura_servidor
above: 75 # Grados Celsius
action:
- service: notify.correo_notificaciones
data:
title: "⚠️ Temperatura Alta"
message: >
La temperatura del servidor ha superado los 75°C.
Temperatura actual: {{ states('sensor.temperatura_servidor') }}°C
# Automatización 3: Modo ausente
- id: modo_ausente
alias: "Activar modo ausente"
trigger:
- platform: state
entity_id: group.all_persons
to: not_home
for:
minutes: 5
action:
- service: light.turn_off
target:
entity_id: all
- service: climate.set_hvac_mode
target:
entity_id: climate.termostato
data:
hvac_mode: "off"
- service: alarm_control_panel.arm_away
target:
entity_id: alarm_control_panel.casa
# Automatización 4: Reiniciar servidor si no responde
- id: reiniciar_servidor_sin_respuesta
alias: "Reiniciar servidor si no responde al ping"
trigger:
- platform: state
entity_id: binary_sensor.ping_servidor_web
to: "off"
for:
minutes: 3
action:
- service: switch.turn_off
target:
entity_id: switch.enchufe_smart_servidor
- delay: "00:00:10"
- service: switch.turn_on
target:
entity_id: switch.enchufe_smart_servidor
Personalización del Dashboard
Configurar la interfaz de Lovelace:
# ui-lovelace.yaml o via el editor visual de la interfaz web
# Vista principal del dashboard
views:
- title: "Inicio"
icon: mdi:home
cards:
# Tarjeta de resumen del estado de la casa
- type: glance
title: "Estado del Hogar"
entities:
- entity: person.familia
name: "Familia"
- entity: binary_sensor.puerta_entrada
name: "Puerta"
- entity: climate.termostato
name: "Temperatura"
- entity: sensor.consumo_electrico
name: "Consumo"
# Cámara de seguridad
- type: picture-entity
entity: camera.entrada
show_state: false
# Panel de luces
- type: light
entity: light.lampara_salon
name: "Salón"
# Gráfica de temperatura
- type: history-graph
title: "Temperatura últimas 24h"
entities:
- entity: sensor.temperatura_salon
- entity: sensor.temperatura_dormitorio
hours_to_show: 24
Integración MQTT
Conectar sensores y dispositivos IoT via MQTT:
# Instalar el broker Mosquitto como add-on de HA (en Supervised)
# O instalarlo en el sistema y configurar Home Assistant
# Instalar Mosquitto
sudo apt-get install -y mosquitto mosquitto-clients
# Configurar Mosquitto con autenticación
sudo mosquitto_passwd -c /etc/mosquitto/passwd ha_user
# Introducir contraseña cuando se pide
cat > /etc/mosquitto/conf.d/default.conf << 'EOF'
# Configuración del broker MQTT para Home Assistant
listener 1883 localhost
listener 8883
allow_anonymous false
password_file /etc/mosquitto/passwd
# TLS opcional
# certfile /etc/mosquitto/certs/server.crt
# keyfile /etc/mosquitto/certs/server.key
EOF
sudo systemctl restart mosquitto
# Configurar MQTT en Home Assistant (configuration.yaml)
# mqtt:
# broker: localhost
# port: 1883
# username: ha_user
# password: contraseña_mqtt
# Probar el envío de datos via MQTT
# Simular un sensor de temperatura
mosquitto_pub -h localhost -u ha_user -P contraseña \
-t "casa/salon/temperatura" \
-m '{"temperatura": 22.5, "humedad": 60}'
# Suscribirse a todos los topics de la casa para diagnóstico
mosquitto_sub -h localhost -u ha_user -P contraseña \
-t "casa/#" -v
Acceso Remoto Seguro
Opciones para acceder desde fuera del hogar:
# OPCIÓN 1: Nabu Casa (servicio oficial de pago, muy fácil)
# Desde la interfaz de HA: Configuración > Home Assistant Cloud
# OPCIÓN 2: Tunnel seguro con Cloudflare (gratis)
# Instalar cloudflared
curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 \
-o /usr/local/bin/cloudflared
chmod +x /usr/local/bin/cloudflared
# Autenticar con Cloudflare
cloudflared tunnel login
# Crear tunnel
cloudflared tunnel create mi-homeassistant
# Configurar el tunnel
mkdir -p ~/.cloudflared
cat > ~/.cloudflared/config.yml << 'EOF'
tunnel: ID_DEL_TUNNEL
credentials-file: /root/.cloudflared/ID_DEL_TUNNEL.json
ingress:
- hostname: ha.mi-dominio.com
service: http://localhost:8123
- service: http_status:404
EOF
# Añadir registro DNS
cloudflared tunnel route dns mi-homeassistant ha.mi-dominio.com
# Crear servicio systemd para el tunnel
cloudflared service install
sudo systemctl start cloudflared
# OPCIÓN 3: VPN con WireGuard (para usuarios avanzados)
# Configurar WireGuard en el servidor y conectar desde el móvil
Configurar seguridad adicional en Home Assistant:
# configuration.yaml: configuración de seguridad HTTP
http:
# Si está detrás de Nginx o Cloudflare, añadir las IPs de confianza
trusted_proxies:
- 127.0.0.1
- ::1
- 172.16.0.0/12 # Red de Docker
use_x_forwarded_for: true
# O configurar SSL directamente
# ssl_certificate: /ssl/fullchain.pem
# ssl_key: /ssl/privkey.pem
Solución de Problemas
Home Assistant no arranca (error en configuration.yaml):
# Verificar la sintaxis del archivo de configuración
docker exec homeassistant python3 -c "
import yaml
with open('/config/configuration.yaml') as f:
yaml.safe_load(f)
print('YAML válido')
"
# Ver logs de error
docker logs homeassistant --tail=50 | grep -E "ERROR|WARNING"
# Reiniciar con configuración de respaldo
cp /opt/homeassistant/config/configuration.yaml /tmp/config-backup.yaml
Las integraciones no detectan dispositivos:
# Verificar que Home Assistant usa network_mode: host
docker inspect homeassistant | grep NetworkMode
# Verificar que los dispositivos están en la misma red
# Desde el contenedor:
docker exec homeassistant ping 192.168.1.100
Alto uso de CPU o memoria:
# Ver uso de recursos del contenedor
docker stats homeassistant --no-stream
# Verificar los componentes que más consumen
# Desde HA: Configuración > Sistema > Reparaciones > Rendimiento
# Aumentar los recursos del contenedor si es necesario
# En docker-compose.yml añadir:
# deploy:
# resources:
# limits:
# memory: 2G
Conclusión
Home Assistant instalado en un servidor Linux propio ofrece la plataforma de automatización del hogar más completa y respetuosa con la privacidad disponible, con miles de integraciones y una comunidad activa que garantiza soporte continuo. La instalación con Docker simplifica el mantenimiento y las actualizaciones, mientras que la combinación con Mosquitto MQTT y automatizaciones YAML permite construir un sistema de domótica completamente personalizado. El acceso remoto seguro mediante Cloudflare Tunnels o WireGuard garantiza disponibilidad desde cualquier lugar sin exponer el servidor directamente a internet.


