Intégration externe - Denon / Marantz AVR

Nouvelle version de l’intégration Denon / Marantz : 1.2.4, publiée (elle arrive au store au prochain passage de l’indexeur). Elle demande Gladys 5.3.0 ou plus récent ; sur un Gladys plus ancien, la 1.2.3 reste installée.

L’ampli devient un lecteur de musique Gladys

Dans la boîte Musique du tableau de bord, et dans l’action de scène « Jouer de la musique » de Gladys :

  • parcourir les services de musique connectés à l’ampli dans l’app HEOS, comme dans l’app : vos favoris HEOS, vos playlists HEOS, et chaque service ;
  • chercher un artiste, un album, une playlist ou un titre ;
  • lancer en remplaçant la file, en jouant ensuite, ou en ajoutant à la fin ;
  • voir la file d’attente et sauter à un morceau ;
  • voir le titre, l’artiste, l’album et la pochette en cours.

Pour un ampli déjà ajouté : Découverte, puis « Mettre à jour » sur l’ampli, pour obtenir les nouvelles fonctionnalités.

Qobuz

Depuis 2025, Qobuz est intégré à HEOS : il suffit de lier son compte dans l’app HEOS. L’intégration ne parle qu’à l’ampli, jamais à Qobuz directement.

  • L’action de scène « Ampli : jouer depuis Qobuz » joue une de vos playlists, un album, le dernier album d’un artiste, un artiste ou un titre. Les scènes déjà créées marchent sans rien changer.
  • Correctif : HEOS marque les playlists Qobuz comme « non jouables ». Elles étaient donc ignorées ; elles sont maintenant trouvées et jouées.

Les autres services de l’app HEOS

Nouvelle action de scène « Ampli : jouer depuis un service HEOS », avec le service au choix :

  • TIDAL, Deezer, SoundCloud, Napster : parcourir, chercher, jouer une playlist, un album, le dernier album d’un artiste, un artiste ou un titre ;
  • TuneIn, iHeartRadio : une radio par son nom, par exemple FIP ;
  • Amazon Music : se parcourt, mais HEOS ne permet pas d’y chercher ;
  • Serveurs de musique du réseau (DLNA), clé USB, entrées AUX : se parcourent et se jouent ;
  • Spotify : dans HEOS, Spotify passe uniquement par Spotify Connect, depuis l’app Spotify. Il n’a pas de catalogue que l’ampli puisse parcourir : l’intégration ne peut donc pas le lancer.

Un réglage « Service de musique préféré pour la recherche » choisit où chercher : Qobuz s’il est connecté, sinon tous les services.

Limites à connaître

  • HEOS ne donne pas la date des albums : le « dernier album » est déduit de la page de l’artiste. L’action dit comment elle l’a trouvé.
  • Gladys attend une commande musique 10 s. Si un service répond lentement, l’intégration s’arrête avant et le dit, sans rien lancer. Seule exception : si l’ampli tarde à confirmer la toute dernière étape, la musique peut démarrer quand même après le message.
  • Qobuz n’est pas dans la documentation officielle de HEOS. Je n’ai pas pu tout essayer sur un ampli : vos retours sont précieux.

Si vous avez un moment

  1. Configuration → « Services HEOS et Qobuz : vérifier » (avec un artiste si vous voulez) : la liste de vos services s’affiche, et les lignes « Qobuz check » des logs montrent ce que l’ampli répond. Postez-les ici, sans votre nom de compte.
  2. La boîte Musique : parcourir et chercher dans vos services.
  3. Une scène avec une playlist, un album, et le dernier album d’un artiste que vous connaissez bien : est-ce le bon ?

Un souci ? Dites-le ici ou dans une issue du dépôt.

Salut @lmilcent !

D’abord merci pour l’intégration, je m’en sers maintenant pour la voix de mon alarme : des scènes Gladys qui font parler l’ampli du salon quand une porte s’ouvre la nuit ou quand l’alarme est armée. Et c’est justement là que je suis tombé sur deux soucis, quand l’ampli part de la veille. Rien de grave en journée, mais pour une alarme c’est gênant ^^

Ma chaîne : Nvidia Shield → Denon AVR-S650H → TV LG, avec HDMI-CEC activé partout (c’est ce qui allume la télé quand on réveille la Shield). Version 1.2.4, announcement_volume à 50, announcement_restore activé.

1. Depuis la veille, le volume est ignoré et le début de la phrase est perdu

Dans les logs, l’intégration envoie PWON, puis le volume et le play_stream environ 1,5 s après (le settle(timing.zoneSwitchDelayMs) de ensureZoneOn). Mon ampli met plutôt 4 à 5 s à se réveiller vraiment :

  • la commande de volume arrive trop tôt, il l’ignore : l’annonce sort au volume d’avant la veille (chez moi 20, donc à peine audible) ;
  • les une à deux premières secondes du son passent à la trappe : une annonce courte comme « Surveillance de nuit activée » disparaît entièrement.

Quand l’ampli est déjà allumé, tout marche parfaitement.

2. Le retour à l’état d’avant réveille la Shield, qui rallume tout

Dans restore(), l’entrée d’origine (chez moi l’entrée HDMI de la Shield) est remise avant le retour en veille. Sauf que choisir une entrée HDMI fait envoyer par l’ampli un message CEC <Routing Change> vers l’appareil branché dessus. Dans le 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 réveille, fait un « One Touch Play », et rallume l’ampli et la télé juste après le PWSTANDBY. Résultat : à chaque annonce, la nuit, la télé du salon s’allume sur l’accueil de la Shield :sweat_smile:

Ce que je proposerais

Deux petites modifications, que je n’ai pas pu essayer en vrai puisque le conteneur de l’intégration est en lecture seule (elles passent juste node --check) :

  1. Dans ensureZoneOn (control.js), attendre plus longtemps quand l’ampli sortait de la veille :
const wakingUp = state.power !== 1;
// ...
if (switched) {
  await settle(wakingUp ? Math.max(timing.zoneSwitchDelayMs, 5000) : timing.zoneSwitchDelayMs);
}

(Encore mieux, attendre que l’ampli confirme PWON puis un petit délai, mais je ne sais pas ce que ça donne sur d’autres modèles.)

  1. Dans restore() (announcements.js), ne pas remettre l’entrée si on retourne en veille :
if (
  snapshot.power !== 0 &&
  snapshot.source &&
  snapshot.source !== HEOS_SOURCE_CODE &&
  state.source === HEOS_SOURCE_CODE
) {
  setSource(externalId, snapshot.source, zone);
}

L’ampli repart alors en veille sur l’entrée réseau. Au prochain allumage par la Shield, le CEC le remet de toute façon sur la bonne entrée.

Petite chose en passant : comme tu l’as noté dans le code, le volume demandé dans l’action de scène est perdu par le cœur. Du coup on ne peut pas avoir une annonce discrète la nuit et une alerte forte avec le même ampli. Si un jour le cœur transmet les options, ce serait top ^^

En attendant, j’ai coupé les voix de mon alarme. Je peux tester une version corrigée dès que tu veux. Dis-moi si j’ai mal lu ton code !

Merci @guim31 pour ce diagnostic aux petits oignons, logcat de la Shield compris : tu avais bien lu le code, les deux causes étaient exactement celles-là. C’est dans la v1.2.5 : Release v1.2.5 · LM1LC3N7/gladys-denon-avr · GitHub (elle arrive dans le store au prochain passage de l’indexeur).

1. Annonce depuis la veille : on attend l’ampli
J’ai pris ta version « encore mieux » : depuis la veille, l’annonce attend que l’ampli confirme PWON (5 s au plus, puis elle continue quand même), laisse 2 s de plus, change l’entrée, puis attend que l’ampli renvoie le volume demandé (4 s au plus, la commande de volume est renvoyée chaque seconde) avant de lancer le son. Toutes les attentes sont bornées, environ 12,5 s au pire. L’action de scène répond tout de suite à Gladys et la suite continue en arrière-plan.
Autres cas couverts au passage :

  • deux annonces rapprochées partagent le même réveil, et la seconde attend aussi son volume ;
  • si tu éteins l’ampli pendant le réveil (scène, widget ou télécommande), l’annonce s’arrête net et rien n’est envoyé après ;
  • un ampli réveillé par l’intégration repart toujours en veille ensuite, même s’il n’a jamais confirmé son allumage.
    Quand l’ampli est déjà allumé, rien ne change.

2. Plus d’entrée HDMI remise avant la veille
Comme tu le proposais : quand l’ampli retourne en veille, l’entrée d’origine n’est plus remise, donc plus de <Routing Change> vers la Shield. L’ampli se rendort sur l’entrée réseau, et le CEC le remet sur la bonne entrée quand la Shield le rallume. Si l’ampli était allumé avant l’annonce, l’entrée est toujours remise comme avant.

Le volume de l’action de scène
Toujours perdu par le cœur en 5.3.2 : la scène passe bien { volume }, mais le proxy des intégrations externes ne transmet que la valeur. Rien à faire côté intégration pour l’instant ; c’est suivi côté SDK.

Je n’ai pas de S650H : tout a été testé sur un faux ampli. Quand tu remets les voix de ton alarme, dis-moi si, depuis la veille, le volume est le bon, si le début de la phrase s’entend et si la télé reste éteinte. Si ton ampli met plus de 5 s à confirmer PWON, les logs en DEBUG me le diront.

Merci @lmilcent pour la 1.2.5, super réactif ! :folded_hands:

Premier essai depuis la veille : la Shield reste bien endormie après l’annonce, c’est réglé :+1:

Pour le début de phrase, c’est beaucoup mieux mais il manque encore environ 2 s chez moi. Dans les logs, le stream part 4,9 s après le PWON :

13:33:07.224 power on (before an announcement) -> sent PWON
13:33:10.225 the receiver is still waking up, the announcement goes on
13:33:12.080 HEOS accepted the "Speak on a speaker" stream

Sur « Alarme en cours d’activation. Vous avez une minute pour quitter la maison. », je n’entends que « Vous avez une minute… ». J’ai l’impression que mon AVR-S650H répond « allumé » bien avant que la sortie audio soit prête.

Est-ce que tu pourrais rendre le wakeSettleMs réglable dans la config (ou le monter à 4-5 s) ? En attendant, je fais commencer mes messages par « Attention, attention. », comme ça c’est ça qui passe à la trappe ^^

Merci @guim31 pour le test et les horodatages, c’est très clair. C’est dans la v1.2.6 : Release v1.2.6 · LM1LC3N7/gladys-denon-avr · GitHub (elle arrive dans le store au prochain passage de l’indexeur).

  • Nouveau réglage : « Délai après l’allumage avant une annonce (secondes) », de 0 à 15 s, dans la configuration de l’intégration.
  • Nouveau défaut : 4 s au lieu de 2. Avec tes mesures, ça devrait suffire pour le début de la phrase ; s’il manque encore un mot, monte à 5 ou 6.
  • Éteindre l’ampli pendant cette attente annule l’annonce aussitôt.
  • Pire cas depuis la veille : environ 25 s avec le maximum de 15 s (le détail est dans la doc). Les scènes ont toujours leur réponse en 3 s.

Tes retours avec le S650H sont les bienvenus, surtout pour savoir quelle valeur te convient.