Alexa -> Homeassistant -> FireTV stick (basic)
Alexa -> Homeassistant -> FireTV stick (basic)
Hola,
He conseguido integrar el firetv stick basic con homeassistant y a su vez con Alexa, mediante una chapuza, que es usar el fire stick en modo debug y enviarle comandos con adb (Android Debug Bridge). La integración Alexa->homeassistant la he hecho con una skill propia (configuré haaska pero no entiendo cómo debo dar órdenes). Lo que hace mi skill es llamar a un script de homeassistant mediante la API REST. La integración homeassistant->firetv es también con REST a un servicio propio hecho con python, que transforma esa url a un comando adb. De momento sólo activo el firetv (es decir, aunque esté apagado o con el salvapantallas se activa) y abro la aplicación (netflix, movistar, prime video, ....)
Total, que puedo decir cosas como : "Alexa, abre netflix con firetv" o bien "Alexa, pregunta a firetv que abra netflix".
Me enciende la tele, activa el firetv y carga la app.
Creo que es un follón sólo para conseguir esto, pero mira, me empeñé y al final ha funcionado.
Si interesa, cuando tenga tiempo lo escribo todo.
He conseguido integrar el firetv stick basic con homeassistant y a su vez con Alexa, mediante una chapuza, que es usar el fire stick en modo debug y enviarle comandos con adb (Android Debug Bridge). La integración Alexa->homeassistant la he hecho con una skill propia (configuré haaska pero no entiendo cómo debo dar órdenes). Lo que hace mi skill es llamar a un script de homeassistant mediante la API REST. La integración homeassistant->firetv es también con REST a un servicio propio hecho con python, que transforma esa url a un comando adb. De momento sólo activo el firetv (es decir, aunque esté apagado o con el salvapantallas se activa) y abro la aplicación (netflix, movistar, prime video, ....)
Total, que puedo decir cosas como : "Alexa, abre netflix con firetv" o bien "Alexa, pregunta a firetv que abra netflix".
Me enciende la tele, activa el firetv y carga la app.
Creo que es un follón sólo para conseguir esto, pero mira, me empeñé y al final ha funcionado.
Si interesa, cuando tenga tiempo lo escribo todo.
Re: Alexa -> Homeassistant -> FireTV stick (basic)
Si quieres, se puede hacer tutorial y se publica en la web
--
Fundador y miembro activo de la comunidad de domoticaencasa.es !
Fundador y miembro activo de la comunidad de domoticaencasa.es !
Re: Alexa -> Homeassistant -> FireTV stick (basic)
OK! Lo intento
Por favor, si lo encuentras interesante modifícalo como quieras y publícalo sin ningún problema (disculpa también las faltas de ortografía).
Para configurar Alexa+HomeAssistant+Firetvstick (tal y como lo he hecho yo, dividiré la explicación en tres partes).
PARTE I - Configurar FireTV Stick
- Debemos activar el modo debug en el Firetv. Atención, esto permite a cualquier usuario de nuestra red controlar nuestro firetv. No activar si estaís en una red pública (por ejemplo, en un hotel).
Debemos ir a configuración->mi firetv->Opciones de desarrollador->ADB Debugging
- En el ordenador/raspberry/nas donde tenemos el home-assistant, deberemos instalar el puente adb. Esto dependerá de la distribución Linux que estemos usando. En debian seria:
- Ahora, debemos configurar un servidor REST que hará de puente entre home-assistant y el firetv. Para ello podemos utilizar un script en python3 con la librería flask. Os pongo el código. Fijaros que se debe poner la dirección IP correcta de vuestro FireTV (se puede encontrar en el menú de ajustes del firetv). Aquí como ejemplo he dejado la 192.168.1.3 que se debe cambiar por la vuestra.
El fichero lo guardaremos en la raspberry (u otro dispositivo) donde tengamos nuestro homeassistant. Recordad instalar la librería flask. Por ejemplo, en debian seria:
Editamos el fichero:
Y el contenido:
- Para mantener el servidor, podríamos utilizar directamente el servidor de pruebas de flask, pero si queremos darle un toque más profesional, podemos usar gunicorn. Instalamos gunicorn con
Vamos donde hemos guardado el código:
Y ya podemos ejecutar nuestro servidor:
Fijaros que sólo permitimos conexiones en local, esto es, de nuestro home-assistant a si mismo. Lo hacemos por el puerto 4000, pero si lo tenéis ocupado podeís seleccionar otro a vuestro gusto.
TEST PARTE 1:
Para comprobar que hasta ahora funciona todo correctamente:
Debería encender netflix en vuestro televisor (éste debe estar encendido).
Alerta, en la primera prueba el firetv os pedirá una confirmación por la tele de que permitís la conexión desde el ordenador de homeassistant. Confirmad seleccionando también el checkbox para que no os la vuelva a pedir.
P.D. Como se puede ver es un pelín complicado. Y todavía quedan dos partes...
Por favor, si lo encuentras interesante modifícalo como quieras y publícalo sin ningún problema (disculpa también las faltas de ortografía).
Para configurar Alexa+HomeAssistant+Firetvstick (tal y como lo he hecho yo, dividiré la explicación en tres partes).
PARTE I - Configurar FireTV Stick
- Debemos activar el modo debug en el Firetv. Atención, esto permite a cualquier usuario de nuestra red controlar nuestro firetv. No activar si estaís en una red pública (por ejemplo, en un hotel).
Debemos ir a configuración->mi firetv->Opciones de desarrollador->ADB Debugging
- En el ordenador/raspberry/nas donde tenemos el home-assistant, deberemos instalar el puente adb. Esto dependerá de la distribución Linux que estemos usando. En debian seria:
Código: Seleccionar todo
sudo apt-get install adb
El fichero lo guardaremos en la raspberry (u otro dispositivo) donde tengamos nuestro homeassistant. Recordad instalar la librería flask. Por ejemplo, en debian seria:
Código: Seleccionar todo
sudo apt-get install python3-flask
Código: Seleccionar todo
sudo nano /usr/local/bin/firetv-rest-server.py
Código: Seleccionar todo
#!/usr/bin/python
import subprocess
from flask import Flask
app = Flask(__name__)
def connect_firetv(firetv_ip='192.168.1.3'):
""" Connect to firetv in debug mode """
cmd = ['adb', 'connect', firetv_ip]
subprocess.call(cmd)
def awake_firetv():
""" Awake firetv """
cmd = ['adb', 'shell', 'input', 'keyevent']
# KEYCODE_WAKEUP
subprocess.call(cmd + ['224'])
# UNLOCK SCREEN
subprocess.call(cmd + ['82'])
@app.route('/<application>')
def run_app(application):
""" Run app in firetv basic stick using android debugger """
apps = {
'netflix': 'com.netflix.ninja/.MainActivity',
'prime': 'com.amazon.amazonvideo.livingroom.firetv/com.amazon.ignition.FireOsIgnitionActivity',
'kodi': 'org.xbmc.kodi/.Splash',
'movistar': 'com.movistarplus.androidtv/.MainActivity'
}
cmd = ['/usr/bin/adb', 'shell', 'am', 'start', '-n']
myapp = apps.get(application, None)
if myapp:
connect_firetv()
awake_firetv()
cmd = ['/usr/bin/adb', 'shell', 'am', 'start', '-n', myapp]
subprocess.call(cmd)
return "{} opened".format(application)
else:
return "Unknown application"
Código: Seleccionar todo
sudo apt-get install gunicorn3
Código: Seleccionar todo
cd /usr/local/bin
Código: Seleccionar todo
gunicorn -w 4 -b 127.0.0.1:4000 firetv_rest_server:app &
TEST PARTE 1:
Para comprobar que hasta ahora funciona todo correctamente:
Código: Seleccionar todo
curl -X POST -H "Content-Type: application/json" http://127.0.0.1:4000/netflix
Alerta, en la primera prueba el firetv os pedirá una confirmación por la tele de que permitís la conexión desde el ordenador de homeassistant. Confirmad seleccionando también el checkbox para que no os la vuelva a pedir.
P.D. Como se puede ver es un pelín complicado. Y todavía quedan dos partes...
Re: Alexa -> Homeassistant -> FireTV stick (basic)
PARTE 2: COMUNICAR HOME-ASSISTANT CON EL SERVIDOR REST PROPIO
Esta parte se debería optimizar, pero mis conocimientos de home-assistant son muy limitados. Crearemos un script por aplicación (estoy convencido que con templates se debería poder hacer todo en un solo script....).
Como tengo un interruptor en la tv, aprovecho a encender la tv y después enviar la orden de abrir la aplicación a nuestro servicio REST
En scripts.yaml:
Y en configuration.yaml:
TEST PARTE 2:
Reiniciando nuestro home assistant, deberíamos tener disponibles los nuevos scripts que deberían encender la tv (si la tenemos conectada a un enchufe inteligente) y arrancar la aplicación seleccionada.
Esta parte se debería optimizar, pero mis conocimientos de home-assistant son muy limitados. Crearemos un script por aplicación (estoy convencido que con templates se debería poder hacer todo en un solo script....).
Como tengo un interruptor en la tv, aprovecho a encender la tv y después enviar la orden de abrir la aplicación a nuestro servicio REST
En scripts.yaml:
Código: Seleccionar todo
netflix:
sequence:
- service: switch.turn_on
data:
entity_id: switch.tv
- service: rest_command.firetv
data:
application: "netflix"
prime:
sequence:
- service: switch.turn_on
data:
entity_id: switch.tv
- service: rest_command.firetv
data:
application: "prime"
movistar:
sequence:
- service: switch.turn_on
data:
entity_id: switch.tv
- service: rest_command.firetv
data:
application: "movistar"
Código: Seleccionar todo
rest_command:
firetv:
url: "http://127.0.0.1:4000/{{ application }}"
Reiniciando nuestro home assistant, deberíamos tener disponibles los nuevos scripts que deberían encender la tv (si la tenemos conectada a un enchufe inteligente) y arrancar la aplicación seleccionada.
Última edición por karasu el Jue Dic 20, 2018 12:47 pm, editado 1 vez en total.
-
- Mensajes: 6
- Registrado: Mar Dic 18, 2018 11:22 pm
Re: Alexa -> Homeassistant -> FireTV stick (basic)
Me llega mañana el FireTV stick ...ya tengo el fin de semana con que entretenerme...a ver si logro seguir el tutorial
Re: Alexa -> Homeassistant -> FireTV stick (basic)
Saludos,
Por si es de ayuda, he subido los ficheros a github:
https://github.com/karasu/firetv-basic
En cuanto pueda añadiré el tercer paso, de como crear una skill para que Alexa se pueda comunicar con la API REST de homeassistant.
Feliz Navidad!
Por si es de ayuda, he subido los ficheros a github:
https://github.com/karasu/firetv-basic
En cuanto pueda añadiré el tercer paso, de como crear una skill para que Alexa se pueda comunicar con la API REST de homeassistant.
Feliz Navidad!