# Home Assistant + Alexa: Guía completa de configuración ## Resumen Home Assistant instalado en el VPS Contabo para controlar luces de Alexa ("barras" y "cuartillo") de forma gratuita e ilimitada, reemplazando VoiceMonkey. ## Estado de la migración (03-oct-2026) — COMPLETADA **Validado** (con efecto real): anuncio por voz (`notify.alexa_media_echo_dot_de_nahid`) y comando a Alexa ("apaga/enciende barras" vía `media_player.play_media` custom). **Helper común:** `biblioteca_negocio_prolongo/scripts/ha_alexa.py` - `announce(mensaje)` — anuncio TTS a un Echo. - `command(texto)` — envía un comando de voz a Alexa (dispara rutinas/dispositivos). **Sustituido VoiceMonkey por HA en:** - `scripts/netatmo_tool.py::notificar_alexa` - `scripts/telegram_read_tracker.py::notificar_alexa` - `scripts/protocolo_apagado.py::apagar_luces_alexa` (y `protocolo_apagado_test.py`) **Credenciales:** `HOMEASSISTANT_URL` + `HOMEASSISTANT_TOKEN` en `.env` (token de larga duración). Se han eliminado `VOICEMONKEY_TOKEN`/`VOICEMONKEY_DEVICE` del `.env`. Ficheros VoiceMonkey ahora obsoletos: `scripts/alexa_notify.js`, `scripts/configurar_voicemonkey.py`. Nota: Alexa Media Player pide re-login en Amazon cada ~2 semanas. --- ## 1. Instalación (YA HECHA) Home Assistant corre en el VPS en modo `network_mode: host`: ```yaml # /opt/homeassistant/docker-compose.yml services: homeassistant: container_name: homeassistant image: homeassistant/home-assistant:2025.1 restart: unless-stopped network_mode: host environment: - TZ=Europe/Madrid volumes: - ./config:/config ``` **URL de acceso:** http://185.187.169.109:8123 --- ## 2. Configuración inicial (WIZARD) Al acceder por primera vez a http://185.187.169.109:8123: 1. **Crear cuenta admin:** - Nombre: `admin` (o el que quieras) - Usuario: `admin` - Contraseña: (guardarla en Engram) 2. **Configuración básica:** - Nombre de la casa: `Casa Juanjo` (o el que quieras) - Ubicación: Madrid, España - Zona horaria: Europe/Madrid (ya configurada) - Unidades: Métricas 3. **Saltar la detección automática de dispositivos** (lo haremos manualmente) --- ## 3. Instalar HACS (Home Assistant Community Store) HACS es necesario para instalar Alexa Media Player. ### Método 1: Script automático (RECOMENDADO) ```bash # Desde el VPS docker exec -it homeassistant bash wget -O - https://get.hacs.xyz | bash - exit docker restart homeassistant ``` ### Método 2: Manual 1. Acceder a http://185.187.169.109:8123 2. Settings → Devices & Services → Add Integration 3. Buscar "HACS" 4. Seguir el wizard (pide vincular con GitHub) **Reiniciar Home Assistant después de instalar HACS.** --- ## 4. Instalar Alexa Media Player 1. **Abrir HACS:** - Settings → Devices & Services → HACS 2. **Buscar "Alexa Media Player":** - HACS → Integrations → Explore & Download Repositories - Buscar: `Alexa Media Player` - Download 3. **Reiniciar Home Assistant:** - Settings → System → Restart 4. **Añadir la integración:** - Settings → Devices & Services → Add Integration - Buscar: `Alexa Media Player` - Introducir credenciales de Amazon (usuario/contraseña) - **Si pide 2FA:** introducir el código que llegue al móvil/email 5. **Verificar dispositivos detectados:** - Settings → Devices & Services → Alexa Media Player - Debería aparecer el Echo Dot y las luces "barras" y "cuartillo" --- ## 5. Generar API Token (Long-Lived Access Token) 1. **Ir al perfil de usuario:** - Click en tu nombre (esquina inferior izquierda) - Scroll hasta "Long-Lived Access Tokens" 2. **Crear token:** - Click en "Create Token" - Nombre: `Protocolo Apagado PC` - Copiar el token (aparece una sola vez) 3. **Guardar el token en .env:** ``` HOMEASSISTANT_URL=http://185.187.169.109:8123 HOMEASSISTANT_TOKEN= ``` --- ## 6. Probar el control de luces (desde el PC) ### Script de prueba Python: ```python import requests import os from dotenv import load_dotenv load_dotenv() url = os.getenv("HOMEASSISTANT_URL") token = os.getenv("HOMEASSISTANT_TOKEN") headers = { "Authorization": f"Bearer {token}", "Content-Type": "application/json" } # Apagar "barras" response = requests.post( f"{url}/api/services/light/turn_off", headers=headers, json={"entity_id": "light.barras"} ) print(f"Barras: {response.status_code}") # Apagar "cuartillo" response = requests.post( f"{url}/api/services/light/turn_off", headers=headers, json={"entity_id": "light.cuartillo"} ) print(f"Cuartillo: {response.status_code}") ``` **Ejecutar:** ```powershell python C:\Users\juanm\Documents\Github\INFRAESTRUCTURA\scripts\test_homeassistant.py ``` **Resultado esperado:** ``` Barras: 200 Cuartillo: 200 ``` --- ## 7. Actualizar el protocolo de apagado Una vez verificado que funciona, actualizar `protocolo_apagado.py` y `protocolo_apagado_test.py` para usar Home Assistant en lugar de VoiceMonkey. El script final está en `INFRAESTRUCTURA/scripts/protocolo_apagado_homeassistant.py`. --- ## 8. Troubleshooting ### Problema: Alexa Media Player no detecta las luces **Solución:** 1. Verificar que las luces estén configuradas en la app Alexa 2. Ir a Settings → Devices & Services → Alexa Media Player → Options 3. Marcar "Include devices" (por defecto solo incluye Echos) 4. Reload integration ### Problema: Entity IDs incorrectos Las luces pueden tener IDs diferentes. Para verificar: ```python import requests url = "http://185.187.169.109:8123/api/states" headers = {"Authorization": "Bearer "} response = requests.get(url, headers=headers) lights = [e for e in response.json() if e["entity_id"].startswith("light.")] for light in lights: print(light["entity_id"], light["attributes"].get("friendly_name")) ``` ### Problema: 401 Unauthorized - Token incorrecto o expirado - Regenerar el token en Home Assistant ### Problema: Alexa pide re-autenticación - Login caducado (cada ~2 semanas) - Re-login en Settings → Devices & Services → Alexa Media Player → Configure --- ## Referencias - Home Assistant: https://www.home-assistant.io/ - Alexa Media Player: https://github.com/custom-components/alexa_media_player - HACS: https://hacs.xyz/ - API REST: https://developers.home-assistant.io/docs/api/rest/