Aprende a controlar cualquier aplicación Android con HA a través de las notificaciones con comandos y los ‘intents’.
Personalmente lo descubrí mientras me rompía la cabeza desarrollando la Music Free Card, intentando controlar los comandos (play, pause, next, previous…) de las distintas aplicaciones, y creo que las posibilidades son infinitas.
Piensa en lo que podrías conseguir combinando cualquier aplicación que tengas instalada con tus automatizaciones.
¿Cómo es posible controlar aplicaciones con Home Assistant?
Anteriormente hemos hablado sobre la posibilidad de enviar notificaciones con comandos a un dispositivo Android que tenga instalada la aplicación de Home Assistant Companion.
Aunque puede pasar desapercibido entre el listado completo, el comando ‘Broadcast Intent’ permite enviar ‘intents’ a otras aplicaciones del dispositivo. ¿Y qué es un ‘intent’? Un Intent es un objeto de mensajería que puedes usar para solicitar una acción de otro componente de una aplicación. Es decir, una orden que se envía a una aplicación a través de un mensaje.
Hay distintos tipos de ‘intents’ y mucha documentación al respecto, que puedes consultar en la documentación para desarrolladores de Android.
¿Cómo se envía una ‘intent’ desde Home Assistant?
Como te comentaba, vamos a utilizar el comando ‘Broadcast Intent’ del servicio de notificaciones, de la siguiente manera:
service: notify.mobile_app_DISPOSITIVO data: message: "command_broadcast_intent" data: intent_package_name: "package-name" intent_action: "action"
Sobre este código tienes que hacer las siguientes modificaciones:
- Notify.mobile_app_DISPOSITIVO. Aquí tienes que indicar el dispositivo al que quieres enviar la orden. Esta es la parte más fácil, ya que HA te va a indicar los posibles dispositivos que tienes integrados y sólo tienes que seleccionar el que te interese. Recuerda que este comando sólo está disponible para Android.
- Package-name. Este apartado se refiere al código que identifica la aplicación sobre la que quieres actuar, y también es fácil de obtener de muchas formas. Una muy sencilla es buscar la aplicación en la Google Play y fijarte en el texto que figura justo después de ‘https://play.google.com/store/apps/details?id=‘ y antes del ‘&’. Por ejemplo, el id de la aplicación de Home Assistant es io.homeassistant.companion.android.
- Action. Aquí tienes que indicar el código exacto del ‘intent’ u orden que quieres enviar a la aplicación. Esta es la parte más complicada, ya que cada aplicación tiene sus propios códigos y si no los conoces es altamente improbable que los adivines. Pero no te preocupes, sigue leyendo.
¿Cómo identificar los ‘intents’ de una aplicación?
Aunque cada aplicación tiene sus propios ‘intents’ logicamente todos ellos vienen recogidos en el código de la aplicación, ya que estas son sus «instrucciones» para funcionar en el dispositivos. En particular todas ellas vienen detalladas en un fichero que se llama ‘AndroidManifest.xml’. Con ello ya sabes donde tienes que buscar el código que permite enviar la orden que estás buscando.
Para acceder a este fichero utilizo la aplicación Dexplorer, muy sencilla de utilizar. Solo tienes que abrirla y seleccionar la aplicación sobre la que quieres actuar. Verás una interfaz similar a un explorador de archivos, y rapidamente encontrarás el fichero ‘AndroidManifest.xml’ que, por lo que he podido ver, suele estar en la raíz.
Una vez pulses sobre el fichero se abrirá un código que quizás «te suene a chino», aunque es posible que si has llegado hasta aquí ya tengas unos conocimientos mínimos de programación. Sea como sea, no te asustes. Sólo tienes que identificar el ‘intent’ que estás buscando.
Por ejemplo, en mi caso buscaba como ejecutar el comando ‘next’ y ‘previous’ en la aplicación de Youtube Music, ya que los comandos habituales en otras aplicaciones de música no funcionaban. Teniendo claro esto, me puse a ojear el código buscando candidatos y empece a hacer pruebas desde el apartado de Herramientas para desarrolladores > Servicios de Home Assistant en el ordenador.
No tuve éxito hasta que llegué a este apartado, donde claramente se detallan comandos de control multimedia.
Elaboré el siguiente código y crucé los dedos y … bingo! tras mucho investigar di con la forma de controlar la aplicación. Pero lo que es mucho más importante, he aprendido controlar cualquier aplicación Android con HA.
service: notify.mobile_app_ta_1021 data: message: command_broadcast_intent data: intent_package_name: com.google.android.apps.youtube.music intent_action: >- com.google.android.youtube.music.pendingintent.controller_widget_next
¿Dudas?¿necesitas ayuda? entra aquí
Y si te ha gustado, compártelo! 🙂