Now Playing automático de Navidrome en Mastodon usando ListenBrainz y Home Assistant.


Cuando monté Navidrome en mi servidor, una de las cosas que más echaba de menos era poder compartir de forma automática qué estaba escuchando. Algo parecido a lo que hace algunas plataformas privativas, pero sin depender de servicios privativos y usando únicamente software libre.

Así que mientras estaba probando muchas cosas pensé que sería genial poder compartir esa información, a través de varios dispositivos. Por ejemplo mi Awtrix o que en Home Assistant apareciera lo que se escuchaba en ese momento.

Después de probar múltiples integraciones, APIs y métodos, la solución más elegante y estable ha sido integrar ListenBrainz con Navidrome, y usar Home Assistant para centralizar la automatización.

En este artículo te explico cómo lo monté, qué ventajas tiene y cómo puedes reproducirlo tú mismo.

¿Por qué ListenBrainz?

ListenBrainz es un servicio libre y abierto mantenido por MetaBrainz, la misma organización detrás de MusicBrainz. Este servicio permite lo que en inglés se conoce como scrobbling. Gracias a esta función, Navidrome puede enviar tu historial de reproducción a estos servicios de terceros para llevar un seguimiento detallado de tu actividad musical. De esta forma, los alimentamos y podemos obtener estadísticas musicales.

ListenBrainz una cosa interesante que tiene es que se pueden hacer consultas de tus datos a través de la API pública, por lo que existe una integración para Home Assistant que permite saber que se está escuchando en un momento dado.

Instalar integración con ListenBrainz

Para instalar esta integración, deberemos hacerlo a través de HACS. Una vez dentro del panel de HACS, accedemos al apartado Integraciones y utilizamos el buscador para localizar el nombre exacto del paquete. Cuando lo encontremos, simplemente hacemos clic en Instalar para que HACS descargue y añada automáticamente todos los archivos necesarios a nuestro Home Assistant.

Después, iremos a Configuración - Dispositivos y servicios y añadiremos una nueva integración. En el buscador introduciremos ListenBrainz y, una vez aparezca, la seleccionaremos para iniciar el asistente.

Solo tendremos que seguir los pasos que nos vaya indicando el instalador para completar la configuración.

El nombre de usuario debe coincidir con el que utilizas para acceder a tu cuenta de ListenBrainz. Para obtener el API Token, entra en https://listenbrainz.org/settings y, en ese apartado, encontrarás tu User Token, que podrás copiar directamente.

Una vez introducidos ambos datos en el asistente de Home Assistant, solo tendrás que hacer clic en Enviar para completar la configuración.

Configura el dispositivo asignándole un nombre y, si lo deseas, un área dentro de Home Assistant. Con eso es suficiente: la integración quedará correctamente instalada y lista para usar.

Si vamos al apartado de Herramienntas para desarrolladores, y buscamos la entidad del control, veremos que tenemos mucha información interesante

Cómo usar la integración de ListenBrainz

Para poder utilizar esta integración en nuestras automatizaciones, necesitaremos crear plantillas que nos permitan acceder a sus atributos.

Para que resulte más sencillo entender cómo funcionan, a continuación dejamos algunos ejemplos prácticos de cómo consultar estos datos.

Para el artista:

{{ state_attr('media_player.listenbrainz_currently_playing', 'media_artist') }}

Para el título:

{{ state_attr('media_player.listenbrainz_currently_playing', 'media_title') }}

Para el álbum:

{{ state_attr('media_player.listenbrainz_currently_playing', 'media_album_name') }}

Publica el "Now Playing" donde quieras

A partir de este punto, Home Assistant puede distribuir lo que estás escuchando donde más te interese. En este tutorial veremos cómo hacerlo mediante Awtrix, publicando un post en Mastodon, mostrándolo en un dashboard de Lovelace o actualizando tu perfil de Mastodon como metadato.

Las posibilidades son enormes, así que si se te ocurre alguna otra forma de aprovechar esta integración, ¡déjala en los comentarios del post!

Publicando en Awtrix

Si aún no sabes qué es Awtrix, te dejo este artículo del blog donde explicamos todo lo necesario:

Integrar AWTRIX 3 en Home Assistant (utilizando Zigbee2MQTT)
El Ulanzi TC001 es un reloj LED RGB personalizable, ideal para domótica, mostrando hora, clima, notificaciones y más.

Si ya sabes lo que es, quizá te interese este otro artículo donde explicamos cómo publicar información desde Navidrome hacia Awtrix:

Muestra la canción actual de Navidrome en AWTRIX con Home Assistant
Muestra en tiempo real la canción que estás escuchando en Navidrome directamente en tu pantalla AWTRIX gracias a Home Assistant y MQTT.

Pero he de reconocer que la forma más precisa y eficiente de publicar algo en Awtrix es utilizando la integración de ListenBrainz, ya que la actualización es prácticamente instantánea y la diferencia se nota muchísimo.

La acción que deberemos de usar es la siguiente usando la plantilla que hemos mencionado anteriormente:

action: mqtt.publish
data:
  topic: awtrix/notify
  payload: |-
    {
      "icon": 32256,
      "repeat": 2,
      "duration": 8,
      "text": "{{ state_attr('media_player.listenbrainz_currently_playing', 'media_artist') }} - {{ state_attr('media_player.listenbrainz_currently_playing', 'media_title') }}"
    }

Y listo, ya podemos utilizarlo dentro de cualquier automatización o integración.

Publicando en Dashboard Lovelace

Añadirla a un dashboard es muy sencillo. Como la integración crea una entidad de tipo media_player, Home Assistant reconoce automáticamente todos sus atributos.

Gracias a esto, podemos utilizar directamente una tarjeta de tipo Media Player para mostrarla y configurarla en nuestro panel.

Así es como se vería la tarjeta en nuestro dashboard. A continuación tienes la configuración utilizada para esta card:

Publicando en un post de Mastodon

Para continuar con este apartado, es necesario tener Mastodon configurado previamente en Home Assistant para poder enviar publicaciones.

Si aún no lo has hecho, te recomiendo seguir este otro tutorial donde explicamos paso a paso cómo configurarlo:

Configurar notificaciones de Home Assistant a Mastodon
Dentro de todas las posibilidades de enviar notificaciones de cosas que suceden en Home Assistant, una muy interesante es poder enviar avisos directamente a tu cuenta de Mastodon. Actualmente Home Assistant tiene soporte para Mastodon y podemos configurar una cuenta que será utilizada para notificar todo lo que queramos con

Para utilizarlo en una automatización, simplemente selecciona la acción Mastodon: Post y rellena los campos que te solicite el asistente.

Dentro del campo status, podemos utilizar los sensores que hemos mencionado anteriormente:

🎶 {{
state_attr('media_player.listenbrainz_t3rr0rz0n3_currently_playing', 'media_artist') }} -{{state_attr('media_player.listenbrainz_t3rr0rz0n3_currently_playing', 'media_title') }}

#NowPlaying #HeavyMetal #Navidrome

Y así se vería en Mastodon:

💡
Ten en cuenta que publicar posts en Mastodon con el Now Playing puede molar, pero también puede generar mucho ruido a la gente que te sigue. Así que marca la opción "Unlisted" para que no se liste.

Publicando en los metadatos de Mastodon

Una forma mucho más elegante de publicarlo en Mastodon, sin generar tanto ruido en tu timeline, es utilizar los metadatos del perfil para mostrar el Now Playing.

Así es como lo tengo configurado en mi cuenta:

Ese metadato se irá actualizando automáticamente conforme lo haga el sensor de ListenBrainz. De esta forma, cualquier persona que visite tu perfil podrá ver en tiempo real qué estás escuchando.

Para hacerlo, primero debemos modificar el archivo configuration.yml de nuestro Home Assistant para añadir una petición a la API de Mastodon que actualice los metadatos de nuestro perfil.

Si necesitas un editor para trabajar cómodamente con los archivos de configuración de Home Assistant, aquí te dejo un artículo donde hablamos de varias opciones recomendadas:

Instala un editor de texto para modificar la configuración de tu Home Assistant
Home Assistant es una de las plataformas más populares para gestionar dispositivos inteligentes, y conocer los diferentes editores de texto disponibles para modificar configuraciones y scripts es fundamental para personalizar y optimizar la experiencia.

En el fichero de configuración añadiremos lo siguiente:

rest_command:
  mastodon_now_playing:
    url: "https://TU_INSTANCIA/api/v1/accounts/update_credentials"
    method: patch
    headers:
      Authorization: "Bearer TU_TOKEN"
      Content-Type: "application/json"
    payload: >
      {
        "fields_attributes": {
          "0": {
            "name": "Atributo 1",
            "value": "Valor atributo 1"
          },
          "1": {
            "name": "Atributo 2",
            "value": "Valor atributo 2"
          },
          "2": {
            "name": "Atributo 3",
            "value": "Valor atributo 3"
          },
          "3": {
            "name": "Now Playing",
            "value": "🎧 {{ state_attr('media_player.listenbrainz_currently_playing', 'media_artist') }} - {{ state_attr('media_player.listenbrainz_currently_playing', 'media_title') }}"
          }
        }
      }
💡
Recuerda que en este código debes sustituir TU_INSTANCIA por el dominio de tu instancia de Mastodon. También tendrás que generar un Token de acceso desde la configuración de tu cuenta y colocarlo donde indica TU_TOKEN.

En cuanto a los atributos, puedes personalizarlos como prefieras, pero asegúrate de mantener el último tal y como está, utilizando correctamente el nombre de tu entidad.
💡
Tienes que poner los 4 valores, si solo pones uno, no funcionará.

Después, en tu automatización, deberás utilizar la acción personalizada que añadimos previamente en la configuración de Home Assistant.

Usar en automatización

Integrarlo en una automatización de Home Assistant es muy sencillo: el disparador será simplemente el cambio en el título de la entidad proporcionada por ListenBrainz.

trigger: state
entity_id:
  - media_player.listenbrainz_currently_playing
attribute: media_title

También podéis añadir una condición adicional, por ejemplo, que el estado de la entidad sea playing.

condition: template
value_template: "{{ trigger.to_state.state == 'playing' }}"
enabled: true

Y en las acciones solo tendrás que añadir lo que hemos visto anteriormente, de modo que puedas enviarlo a tantos destinos como quieras.

Conclusión

Después de muchos intentos, APIs, integraciones y pruebas, puedo decir que:

  • ListenBrainz es la mejor forma de obtener un Now Playing libre y fiable.
  • Home Assistant actúa como un hub perfecto para enviar la información donde quieras.
  • Mastodon requiere mandar todos los metadatos, pero funciona.
  • Awtrix da un toque visual espectacular en casa.

Todo esto funciona con software libre, sin depender de servicios privativos, sin scripts raros y sin exponer APIs inseguras.


Más sobre ./voidNull

Haz que cada palabra cuente: tu donación nos inspira a seguir creando contenido. Accede al apartado de Donación para hacer tu aportación