Integración externa - Denon / Marantz AVR

Nueva versión de la integración Denon / Marantz: 1.2.4, publicada (llega a la tienda en el próximo paso del indexador). Requiere Gladys 5.3.0 o más reciente; en un Gladys más antiguo, se mantiene instalada la 1.2.3.

El amplificador se convierte en un reproductor de música de Gladys

En la caja de Música del tablero de control, y en la acción de escena « Reproducir música » de Gladys:

  • navegar por los servicios de música conectados al amplificador en la aplicación HEOS, como en la aplicación: sus favoritos HEOS, sus listas de reproducción HEOS, y cada servicio;
  • buscar un artista, un álbum, una lista de reproducción o una canción;
  • reproducir reemplazando la cola, reproduciendo después, o añadiendo al final;
  • ver la cola y saltar a una canción;
  • ver el título, el artista, el álbum y la portada actual.

Para un amplificador ya añadido: Descubrimiento, luego « Actualizar » en el amplificador, para obtener las nuevas funcionalidades.

Qobuz

Desde 2025, Qobuz está integrado en HEOS: basta con vincular su cuenta en la aplicación HEOS. La integración solo habla con el amplificador, nunca directamente con Qobuz.

  • La acción de escena « Amplificador: reproducir desde Qobuz » reproduce una de sus listas de reproducción, un álbum, el último álbum de un artista, un artista o una canción. Las escenas ya creadas funcionan sin cambiar nada.
  • Corrección: HEOS marca las listas de reproducción de Qobuz como « no reproducibles ». Por lo tanto, eran ignoradas; ahora se encuentran y se reproducen.

Los otros servicios de la aplicación HEOS

Nueva acción de escena « Amplificador: reproducir desde un servicio HEOS », con el servicio a elección:

  • TIDAL, Deezer, SoundCloud, Napster: navegar, buscar, reproducir una lista de reproducción, un álbum, el último álbum de un artista, un artista o una canción;
  • TuneIn, iHeartRadio: una radio por su nombre, por ejemplo FIP;
  • Amazon Music: se puede navegar, pero HEOS no permite buscar en ella;
  • Servidores de música de la red (DLNA), clave USB, entradas AUX: se pueden navegar y reproducir;
  • Spotify: en HEOS, Spotify solo funciona a través de Spotify Connect, desde la aplicación Spotify. No tiene un catálogo que el amplificador pueda navegar: la integración no puede lanzarlo.

Un ajuste « Servicio de música preferido para la búsqueda » elige dónde buscar: Qobuz si está conectado, de lo contrario, todos los servicios.

Límites a conocer

  • HEOS no da la fecha de los álbumes: el « último álbum » se deduce de la página del artista. La acción indica cómo lo encontró.
  • Gladys espera un comando de música 10 s. Si un servicio responde lentamente, la integración se detiene antes y lo indica, sin lanzar nada. Única excepción: si el amplificador tarda en confirmar el último paso, la música puede comenzar de todos modos después del mensaje.
  • Qobuz no está en la documentación oficial de HEOS. No he podido probarlo todo en un amplificador: sus comentarios son valiosos.

Si tiene un momento

  1. Configuración → « Servicios HEOS y Qobuz: verificar » (con un artista si lo desea): se muestra la lista de sus servicios, y las líneas « Qobuz check » de los registros muestran lo que responde el amplificador. Publíquelos aquí, sin su nombre de cuenta.
  2. La caja de Música: navegar y buscar en sus servicios.
  3. Una escena con una lista de reproducción, un álbum, y el último álbum de un artista que conoce bien: ¿es el correcto?

¿Algún problema? Dígalo aquí o en un issue del repositorio.

¡Hola @lmilcent!

Primero, gracias por la integración, ahora la uso para la voz de mi alarma: escenas de Gladys que hacen que el amplificador del salón hable cuando se abre una puerta por la noche o cuando la alarma está armada. Y es justo ahí donde me he encontrado con dos problemas, cuando el amplificador sale del modo de espera. No es grave durante el día, pero para una alarma es molesto ^^

Mi cadena: Nvidia Shield → Denon AVR-S650H → TV LG, con HDMI-CEC activado en todas partes (es lo que enciende la televisión cuando se despierta la Shield). Versión 1.2.4, announcement_volume a 50, announcement_restore activado.

1. Desde el modo de espera, el volumen se ignora y el comienzo de la frase se pierde

En los registros, la integración envía PWON, luego el volumen y el play_stream aproximadamente 1,5 segundos después (el settle(timing.zoneSwitchDelayMs) de ensureZoneOn). Mi amplificador tarda más bien 4 o 5 segundos en despertarse de verdad:

  • el comando de volumen llega demasiado pronto, lo ignora: el anuncio sale al volumen anterior al modo de espera (en mi caso 20, por lo que apenas es audible);
  • las una o dos primeras segundos del sonido se pierden: un anuncio corto como « Activación de vigilancia nocturna » desaparece por completo.

Cuando el amplificador ya está encendido, todo funciona perfectamente.

2. El retorno al estado anterior despierta la Shield, que enciende todo

En restore(), la entrada original (en mi caso la entrada HDMI de la Shield) se restablece antes del retorno al modo de espera. Excepto que elegir una entrada HDMI hace que el amplificador envíe un mensaje CEC <Routing Change> al dispositivo conectado a ella. En el logcat de la Shield:

HDMI-CEC: onReceiveCommand: <Routing Change> 5F:80:40:00:45:00
HDMI-CEC: go wakeup and send active source
PowerManagerService: Waking up from Asleep (reason=WAKE_REASON_HDMI)
OneTouchPlayAction: HDMI-CEC: start OneTouchPlay action

La Shield se despierta, hace un « One Touch Play », y enciende el amplificador y la televisión justo después del PWSTANDBY. Resultado: cada anuncio, por la noche, la televisión del salón se enciende en la pantalla de inicio de la Shield :sweat_smile:

Lo que propondría

Dos pequeñas modificaciones, que no he podido probar en la práctica ya que el contenedor de la integración es de solo lectura (solo pasan node --check):

  1. En ensureZoneOn (control.js), esperar más tiempo cuando el amplificador salía del modo de espera:
const wakingUp = state.power !== 1;
// ...
if (switched) {
  await settle(wakingUp ? Math.max(timing.zoneSwitchDelayMs, 5000) : timing.zoneSwitchDelayMs);
}

(Lo mejor sería esperar a que el amplificador confirme PWON y luego un pequeño retraso, pero no sé cómo funciona en otros modelos.)

  1. En restore() (announcements.js), no restablecer la entrada si se vuelve al modo de espera:
if (
  snapshot.power !== 0 &&
  snapshot.source &&
  snapshot.source !== HEOS_SOURCE_CODE &&
  state.source === HEOS_SOURCE_CODE
) {
  setSource(externalId, snapshot.source, zone);
}

El amplificador vuelve entonces al modo de espera en la entrada de red. En el siguiente encendido por la Shield, el CEC lo pone de todos modos en la entrada correcta.

Pequeña cosa de paso: como has notado en el código, el volumen solicitado en la acción de la escena se pierde por el corazón. Por lo tanto, no se puede tener un anuncio discreto por la noche y una alerta fuerte con el mismo amplificador. Si un día el corazón transmite las opciones, sería genial ^^

Mientras tanto, he cortado las voces de mi alarma. Puedo probar una versión corregida cuando quieras. ¡Dime si he leído mal tu código!

Gracias @guim31 por este diagnóstico tan detallado, incluyendo el logcat de la Shield: habías leído bien el código, las dos causas eran exactamente esas. Está en la v1.2.5: Release v1.2.5 · LM1LC3N7/gladys-denon-avr · GitHub (llegará a la tienda en el próximo paso del indexador).

1. Anuncio desde la víspera: se espera al amplificador
He tomado tu versión «aún mejor»: desde la víspera, el anuncio espera a que el amplificador confirme PWON (máximo 5 s, luego continúa de todos modos), deja 2 s más, cambia la entrada, luego espera a que el amplificador devuelva el volumen solicitado (máximo 4 s, el comando de volumen se envía cada segundo) antes de lanzar el sonido. Todas las esperas están limitadas, aproximadamente 12,5 s en el peor de los casos. La acción de la escena responde de inmediato a Gladys y la secuencia continúa en segundo plano.
Otros casos cubiertos de paso:

  • dos anuncios cercanos comparten la misma activación, y el segundo también espera su volumen;
  • si apagas el amplificador durante la activación (escena, widget o mando a distancia), el anuncio se detiene de inmediato y nada se envía después;
  • un amplificador activado por la integración siempre vuelve a la espera después, incluso si nunca ha confirmado su encendido.
    Cuando el amplificador ya está encendido, no hay cambios.

2. No se restaura la entrada HDMI antes de la activación
Como proponías: cuando el amplificador vuelve a la espera, la entrada original ya no se restaura, por lo que no hay <Cambio de Ruta> hacia la Shield. El amplificador se duerme en la entrada de red, y el CEC lo vuelve a poner en la entrada correcta cuando la Shield lo enciende. Si el amplificador estaba encendido antes del anuncio, la entrada se restaura como antes.

El volumen de la acción de la escena
Sigue perdido por el corazón en 5.3.2: la escena pasa bien { volumen }, pero el proxy de las integraciones externas solo transmite el valor. No hay nada que hacer por parte de la integración por el momento; se está siguiendo por parte del SDK.

No tengo un S650H: todo se ha probado en un amplificador falso. Cuando restablezcas las voces de tu alarma, dime si, desde la víspera, el volumen es el correcto, si se oye el principio de la frase y si la televisión se queda apagada. Si tu amplificador tarda más de 5 s en confirmar PWON, los registros en DEBUG me lo dirán.

¡Gracias @lmilcent por la 1.2.5, muy rápido! :folded_hands:

Primera prueba desde ayer: la Shield sigue bien dormida después del anuncio, está solucionado :+1:

Para el inicio de la frase, es mucho mejor, pero aún faltan unos 2 segundos en mi caso. En los registros, el stream comienza 4,9 segundos después del PWON:

13:33:07.224 encendido (antes de un anuncio) -> enviado PWON
13:33:10.225 el receptor aún se está despertando, el anuncio continúa
13:33:12.080 HEOS aceptó el stream "Hablar en un altavoz"

En « Alarma en proceso de activación. Tiene un minuto para salir de la casa. », solo escucho « Tiene un minuto… ». Me parece que mi AVR-S650H responde « encendido » mucho antes de que la salida de audio esté lista.

¿Podrías hacer que el wakeSettleMs sea ajustable en la configuración (o subirlo a 4-5 segundos)? Mientras tanto, hago que mis mensajes comiencen con « Atención, atención. », así es lo que se pierde ^^

Gracias @guim31 por las pruebas y los timestamps, es muy claro. Está en la v1.2.6: Release v1.2.6 · LM1LC3N7/gladys-denon-avr · GitHub (llegará a la tienda en el próximo paso del indexador).

  • Nuevo ajuste: « Retraso después del encendido antes de un anuncio (segundos) », de 0 a 15 s, en la configuración de la integración.
  • Nuevo defecto: 4 s en lugar de 2. Con tus mediciones, debería ser suficiente para el inicio de la frase; si falta una palabra, sube a 5 o 6.
  • Apagar el amplificador durante esta espera cancela el anuncio de inmediato.
  • Peor caso desde ayer: aproximadamente 25 s con el máximo de 15 s (el detalle está en la documentación). Las escenas siempre tienen su respuesta en 3 s.

Tus comentarios con el S650H son bienvenidos, especialmente para saber qué valor te conviene.