Ir al contenido
  1. Posts/

Home Assistant en Proxmox: cómo lo tengo montado y por qué nunca necesité hardware dedicado

Cuando empecé con el homelab en 2022, ya tenía Proxmox corriendo en casa. Así que cuando llegó el momento de montar Home Assistant, la pregunta nunca fue “¿Raspberry Pi o servidor?”, sino directamente: ¿VM o contenedor Docker?

La respuesta es VM, y te voy a explicar por qué. Pero primero, el contexto: Home Assistant lleva desde el principio corriendo como VM en el cluster Proxmox de casa. Sin tarjetas SD que corromper, sin hardware dedicado que mantener, con snapshots automáticos antes de cada actualización y acceso desde cualquier sitio por Tailscale.

Te cuento cómo está montado y qué aprendí en el proceso.

Por qué Proxmox y no Docker
#

La pregunta habitual cuando alguien quiere mover Home Assistant del hardware dedicado es “¿VM o contenedor Docker?”. Y la respuesta corta es: VM, siempre que puedas.

Home Assistant OS (HAOS) es la opción oficial y la que más funcionalidades tiene. Incluye el supervisor, que gestiona addons, snapshots, actualizaciones y configuración desde la UI. Sin supervisor (que es lo que pasa cuando instalas HA en Docker) pierdes los addons oficiales, las actualizaciones automáticas con un click, y la restauración de backups desde la interfaz.

Los addons son importantes. Yo uso varios que simplemente no existen o son más complicados fuera de HAOS:

  • Mosquitto MQTT broker: para dispositivos IoT que hablan MQTT
  • ESPHome: para flashear y gestionar microcontroladores ESP8266/ESP32
  • File editor: para editar YAML de configuración desde el navegador
  • Zigbee2MQTT: si tienes dispositivos Zigbee
  • Node-RED: para automatizaciones complejas que YAML no cubre bien

Proxmox soporta HAOS de forma nativa: hay un script oficial que crea la VM con la configuración correcta en menos de 5 minutos.

El hardware donde corre
#

Tengo Home Assistant corriendo en el cluster Proxmox de casa, que llamo “Superheroes”. Cuatro nodos Minisforum (MS-A2, MS-01, Elite y MS-S1 Max) en cluster con Ceph para storage distribuido.

La VM de Home Assistant vive en el MS-A2 (Ryzen 9 9955HX, 64GB RAM). No es que necesite esos recursos, es simplemente donde la creé y donde ha estado funcionando sin problemas.

Especificaciones de la VM:

  • CPU: 2 cores (más que suficiente, HA usa poco)
  • RAM: 4GB (en idle usa unos 1.2GB, con integraciones pesadas llega a 2.5GB)
  • Disco: 32GB en Ceph (ventaja de tener storage distribuido: la VM puede migrar entre nodos sin mover datos)
  • Red: virtio, en la misma red que el resto de dispositivos de casa

Instalación en Proxmox con el script oficial
#

El proyecto tteck/Proxmox tiene un script que automatiza la creación de la VM con HAOS. Es el método más limpio.

Desde la shell de Proxmox:

1
bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/vm/haos-vm.sh)"

El script te pregunta si quieres la instalación avanzada (para configurar CPU, RAM y disco) o la básica con valores por defecto. Para un homelab, elige avanzada y ajusta según tu hardware.

Lo que hace el script:

  1. Descarga la imagen de HAOS más reciente
  2. Crea la VM con la configuración correcta (BIOS OVMF/UEFI, virtio para disco y red)
  3. Importa la imagen como disco de la VM
  4. Arranca la VM

En 3-4 minutos tienes una VM corriendo con HAOS. Accedes a http://IP-DE-LA-VM:8123 y el asistente de configuración te espera.

Pasar dispositivos USB a la VM
#

Si tienes un dongle Zigbee, Z-Wave o cualquier coordinador USB, necesitas pasarlo a la VM. Proxmox lo llama “USB passthrough”.

Primero, identifica el dispositivo en el host Proxmox:

1
2
lsusb
# Bus 001 Device 003: ID 10c4:ea60 Silicon Labs CP210x UART Bridge

En la UI de Proxmox, con la VM parada:

  1. Hardware > Add > USB Device
  2. Elige “Use USB Vendor/Device ID”
  3. Introduce el Vendor:Device del dongle

Yo tengo un coordinador Zigbee (CC2652P) que aparece como /dev/ttyUSB0 dentro de la VM. Desde ahí, Zigbee2MQTT lo gestiona sin problemas.

Un detalle importante: si el USB cambia de puerto físico en el host, la VM puede perder el dispositivo. Para evitarlo, usa la opción “Use USB Port” con el puerto físico fijo, o mejor aún, crea una regla udev en el host para que el dispositivo siempre tenga el mismo nombre:

1
2
# /etc/udev/rules.d/99-zigbee.rules
SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", SYMLINK+="zigbee-coordinator"

Snapshots: la razón principal para estar en Proxmox
#

Antes de cada actualización de Home Assistant, hago un snapshot de la VM. Si algo se rompe con la nueva versión, vuelvo al snapshot anterior en 30 segundos.

Esto suena obvio pero cambia completamente la forma de actualizar. Antes, con HA en una Pi, actualizar era una decisión: “¿tengo tiempo ahora para arreglar si algo se rompe?”. Ahora actualizo sin pensarlo dos veces.

Para automatizar los snapshots antes de actualizaciones, uso el addon Home Assistant Backup con backups automáticos a Backblaze B2 (el backup de backups), pero el snapshot de Proxmox es el que más vale porque te devuelve el estado exacto de la VM, no solo la configuración de HA.

El script que tengo en Proxmox para snapshot automático diario:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#!/bin/bash
# snapshot-ha.sh - corre via cron en el nodo Proxmox
VMID=100  # ID de la VM de Home Assistant
DATE=$(date +%Y%m%d-%H%M)

# Crear snapshot con descripción
pvesh create /nodes/proxmox-ms-a2/qemu/$VMID/snapshot \
  --snapname "auto-$DATE" \
  --description "Snapshot automático $DATE"

# Borrar snapshots con más de 7 días
for snap in $(pvesh get /nodes/proxmox-ms-a2/qemu/$VMID/snapshot --output-format json | \
  python3 -c "import sys,json; [print(s['name']) for s in json.load(sys.stdin) if s['name'].startswith('auto-')]"); do
  snap_date=$(echo $snap | sed 's/auto-//' | cut -d'-' -f1)
  if [ $(( ($(date +%s) - $(date -d "$snap_date" +%s 2>/dev/null || echo 0)) / 86400 )) -gt 7 ]; then
    pvesh delete /nodes/proxmox-ms-a2/qemu/$VMID/snapshot/$snap
  fi
done

Acceso remoto con Tailscale
#

Home Assistant tiene integración nativa con Tailscale. Desde los addons de HAOS:

  1. Settings > Add-ons > Add-on Store
  2. Busca “Tailscale”
  3. Instala y configura con tu cuenta

Una vez instalado, HA aparece como un dispositivo más en tu red Tailscale con su IP 100.x.x.x. Puedes acceder desde cualquier sitio sin abrir puertos ni configurar nada más.

La URL que uso habitualmente: http://homeassistant:8123 (Tailscale MagicDNS resuelve el hostname automáticamente).

Para la app móvil de Home Assistant, configuras la URL externa como la IP Tailscale y la interna como la IP local. La app cambia automáticamente según estés en casa o fuera.

Las integraciones que uso
#

Llevo desde 2022 con Home Assistant y he ido añadiendo integraciones a medida que necesitaba cosas. Las que más uso:

Dispositivos de casa:

  • Philips Hue: luces. La integración nativa es perfecta, reconoce grupos, escenas y puede controlar sin pasar por el cloud de Philips.
  • Sonos: altavoces. Control de reproducción, TTS (texto a voz para notificaciones audibles), grupos.
  • Xiaomi Mi: sensores de temperatura/humedad baratos que funcionan muy bien con la integración local.

Integraciones con el homelab:

  • Grafana: puedo embeber paneles de Grafana en el dashboard de HA. Ver métricas del servidor mientras gestiono la domótica.
  • HACS (Home Assistant Community Store): para integraciones no oficiales. Lo instalo siempre.
  • Glances: métricas del sistema del servidor donde corre HA (CPU, RAM, disco de la VM).
  • Uptime Kuma: Uptime Kuma tiene integración con HA para mostrar el estado de servicios en el dashboard.

Automatizaciones que tengo activas:

  • Cuando el NAS Synology lleva más de 10 minutos sin actividad por la noche, apaga las luces del rack.
  • Alerta en el móvil si la temperatura del rack sube de 35°C (sensor Xiaomi).
  • Modo “fuera de casa” cuando todos los móviles de casa salen de la red local.
  • TTS en los Sonos cuando termina el ciclo de la lavadora (integración con el enchufe inteligente que mide consumo).

El dashboard
#

El dashboard de Home Assistant es completamente personalizable. Uso Lovelace con tarjetas custom instaladas vía HACS.

Las tarjetas que más uso:

  • mini-graph-card: gráficas compactas de sensores. La tengo para temperatura del rack, consumo eléctrico y métricas de la red.
  • mushroom: tarjetas más modernas y bonitas que las por defecto.
  • apexcharts-card: para gráficas más avanzadas cuando necesito más control.
  • auto-entities: genera tarjetas automáticamente basándose en filtros. Útil cuando tienes muchos dispositivos del mismo tipo.

El layout lo tengo dividido en pestañas: “Casa” para luces y climatización, “Homelab” para métricas de servidores, “Energía” para consumo y “Seguridad” para alertas.

Integración con Grafana y Prometheus
#

Si ya tienes Grafana y Prometheus en el homelab, puedes hacer dos cosas:

Exportar métricas de HA a Prometheus:

1
2
3
4
5
6
7
8
9
# configuration.yaml
prometheus:
  namespace: home_assistant
  filter:
    include_entity_globs:
      - sensor.temperature_*
      - sensor.humidity_*
      - sensor.power_*
      - binary_sensor.*

Con esto, Prometheus scrapea métricas de HA y las puedes visualizar en Grafana junto con el resto de métricas del homelab. Temperatura de cada habitación en el mismo dashboard que la temperatura de los servidores.

Embeber Grafana en HA:

1
2
3
4
5
6
# configuration.yaml
panel_iframe:
  grafana:
    title: "Grafana"
    url: "http://phatt:3000/d/homelab-overview"
    icon: mdi:chart-line

Esto añade Grafana como una pestaña en el sidebar de HA. Accedes a tus dashboards sin salir de la interfaz de Home Assistant.

Cuánto consume en Proxmox
#

La VM de Home Assistant no es exigente:

  • CPU: 1-3% en idle, picos de 8-10% durante automatizaciones complejas
  • RAM: 1.2GB en idle, 2.4GB con todas las integraciones cargadas
  • Disco: crece lentamente. Llevo meses y ocupa 8GB del disco de 32GB

Es literalmente irrelevante para el cluster Proxmox. Podría correr en el nodo más pequeño sin problema.

Lo que cambió con la migración
#

La diferencia más importante frente a hardware dedicado no es técnica, es operativa. Con HA en una Pi o un mini PC aparte, cualquier problema de hardware es un problema de HA: pierdes automatizaciones, historial y configuración. Con HA en Proxmox:

  • Actualizaciones sin miedo: snapshot antes, actualizo, si algo falla reverto.
  • Backups automáticos: Proxmox Backup Server hace backup de la VM junto al resto de VMs.
  • Alta disponibilidad: si el nodo donde vive la VM falla, Proxmox puede migrarla a otro nodo.
  • Recursos garantizados: no compite con otras cosas en una Pi con 4GB de RAM.

El único inconveniente real: si el cluster Proxmox se cae, HA se cae con él. Con una Pi dedicada, HA puede seguir funcionando aunque todo lo demás falle. Para mí, el tradeoff vale la pena, pero si la domótica de tu casa es crítica (calefacción, sistema de alarma), un hardware dedicado tiene sentido como backup.

Conclusión
#

Montar Home Assistant en Proxmox es una de esas decisiones que tarda diez minutos en implementarse y da tranquilidad durante meses. El script de tteck lo deja funcionando antes de que termines el café.

Si estás empezando con domótica y ya tienes Proxmox, no compres hardware dedicado. Crea una VM y listo. Y si tienes HA en una Pi o un mini PC aparte, la migración es tan sencilla como exportar el backup desde HA, crear la VM en Proxmox con el script, y restaurarlo.

La integración con el resto del homelab es natural: Tailscale para acceso remoto, Grafana para métricas, Cloudflare Tunnels si necesitas exposición pública. Todo en la misma infraestructura, todo conectado.