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.