[Plugin Tiers][Sujet Principal] HEOS (Marantz/Denon)

Bonjour,

A la recherche d’un plugin pour contrôler mon ampli Marantz MCR-612 utilisant le protocol HEOS et ne trouvant pas mon bonheur dans ce qui existe déjà, j’ai décidé de me mettre à l’ouvrage et de le développer moi-même.

Le protocol HEOS est documenté par DENON (documentation disponible ici) et exploite le telnet avec un port dédié.

Une documentation pour le plugin est disponible : Documentation du plugin Heos.

Je réouvre ce sujet principal suite à la migration du forum (ok je suis un peu à la bourre).

Enjoy !

Bonjour @Sh0n et merci pour ton travail.

J’ai installé ton plugin la semaine dernière, sur mon Jeedom sur RPi3. Pour le faire fonctionner, j’ai du faire la modif objet → jeeObject (pour buster ?). Puis il y a deux jours, il y a eu une mise à jour. J’ai eu l’erreur suivante :

[MySQL] Error code : 23000 (1062). Duplicate entry '11-Mute' for key 'unique' : INSERT INTO `cmd` SET `id` = :id, `logicalId` = :logicalId, `generic_type` = :generic_type, `eqType` = :eqType, `name` = :name, `order` = :order, `type` = :type, `subType` = :subType, `eqLogic_id` = :eqLogic_id, `isHistorized` = :isHistorized, `unite` = :unite, `configuration` = :configuration, `template` = :template, `display` = :display, `value` = :value, `isVisible` = :isVisible, `alert` = :alert

Ça fonctionne tout de même comme avant, je n’ai pas d’erreur dans les logs, mais est-ce grave docteur ? :slight_smile:

De plus, j’ai 4 appareils Heos. 2 sont très bien reconnus et pour les 2 autres, il n’arrive pas récupérer le PID. Comment peut-on le récupérer autrement ?

Et pour les favoris, il ne me les affichent pas entièrement. Il n’y en a que 6 et on voit le haut d’une septième ligne. Ça ne scrolle pas pour descendre plus bas.

Ça en fait des questions et problèmes :smiley: .

Merci !

Hello @yostral,

Si tu as du faire la modif, je suppose que tu es en Jeedom V4 ? (ce qui doit expliquer également tes problèmes d’affichage d’ailleurs).

Je vais me remonter un Jeedom V4 pour préparer le passage (je suis toujours en V3 chez moi pour l’instant).

Oui je suis en v4, installation fraîche et récente :slight_smile: .

Merci beaucoup !

Ok parfait, je suis en train de refaire une installation également.
Peux-tu activer le mode début pour les logs du plugin puis retester une récupération de PID.

Tu devrais voir dans les logs des lignes de ce type :

[2020-05-11 20:34:25][DEBUG] : START TRYING TO GET PID : XXX.XXX.XXX.XXX
[2020-05-11 20:34:25][DEBUG] : CONNECTED TO XXX.XXX.XXX.XXX:1255, SEND GET PLAYER COMMAND
[2020-05-11 20:34:25][DEBUG] : GET PLAYER RETURN : {"heos": {"command": "player/get_players", "result": "success", "message": ""}, "payload": [{"name": "Salle", "pid": -XXXXXXXXXX, "model": "Marantz M-CR612", "version": "1.544.240", "ip": "XXX.XXX.XXX.XXX", "network": "wifi", "lineout": 1, "serial": "XXXXXXX"}]}
[2020-05-11 20:34:25][DEBUG] : GET PID RESULT : -XXXXXXX |Marantz M-CR612|Salle

EDIT : j’ai fais une MAJ du plugin pour la V4 afin de corriger le problème de scroll et un icône qui ne s’afficher plus (la petite ampoule pour éteindre l’afficheur). Tu me diras si c’est ok pour ces deux éléments :wink:

Alors, merci pour ta mise à jour, effectivement, on peut scroller dans les favoris et on voit l’ampoule :slight_smile: .

Voici les logs en debug :

[2020-05-12 02:23:47][DEBUG] : START TRYING TO GET PID : 192.168.1.33
[2020-05-12 02:23:47][DEBUG] : CONNECTED TO 192.168.1.33:1255, SEND GET PLAYER COMMAND
[2020-05-12 02:23:47][DEBUG] : GET PLAYER RETURN : {"heos": {"command": "player/get_players", "result": "success", "message": ""}, "payload": [{"name": "Maman", "pid": -16157161, "model": "HEOS 1"}, {"name": "Cuisine", "pid": -2055348700, "model": "HEOS 1", "version": "1.544.240", "ip": "192.168.1.17", "network": "wifi", "lineout": 0}, {"name": "Salon", "pid": 109422636, "model": "Denon AVR-X2400H", "version": "1.544.240", "ip": "192.168.1.11", "network": "wired", "lineout": 0, "serial": "ALV36170606861"}]}
[2020-05-12 02:23:47][DEBUG] : GET PID RESULT :
[2020-05-12 02:23:47][DEBUG] : STOP TRYING TO GET PID

Il repère bien salon et cuisine, mais pour maman, pas grand chose. Il semble voir le PID mais ne le retourne pas.

Je viens de remarquer que quand je clique pour voir/créer un groupe d’enceintes, le « maman » ( et les autres non associés avec Jeedom) apparaît dans la liste ! Il vient d’où ?

De plus, quand je vais modifier « cuisine » par exemple, et que j’enregistre, à chaque fois il me met une bannière rouge en haut avec écrit :

Une commande portant ce nom (Mute) existe déjà pour cet équipement

Une idée ?

EDIT :
Après d’autres essais ce matin, voici ce que j’ai remarqué :

Depuis la mise à jour, plus aucune info n’apparaît dans le wigdet, pas de jaquette, pas de durée, pas de modification de l’affichage lors de modification du volume, rien. Et c’est toujours écrit « stop » en haut, comme s’il n’avait pas de retour d’infos sur la lecture. Comme indiqué au-dessus, quand je veux créer des groupes, il m’indique tous mes appareils, même ceux que le plugin n’arrive pas à repérer. Et le groupe se fait bien…

… selon le type d’appareil :slight_smile: . Quand je groupe les simples enceintes, Heos 1, pas de soucis. Mais quand je mets dans le groupe l’ampli AVR-X2400H, il ne se passe rien chez lui. Il ne semble pas pouvoir être mis en route comme ça. De plus j’ai en permanence (toutes les secondes…) dans les logs debug des retours le concernant :

[2020-05-12 13:59:21][DEBUG] : power_state  : 1
[2020-05-12 13:59:21][DEBUG] : RECEIPT :
[2020-05-12 13:59:21][DEBUG] : power_state  : -4
[2020-05-12 13:59:21][DEBUG] : RECEIPT :
[2020-05-12 13:59:22][DEBUG] : power_state  : -4
[2020-05-12 13:59:22][DEBUG] : RECEIPT :
[2020-05-12 13:59:22][DEBUG] : CONNECTED (IP : 192.168.1.11, PORT : 23)
[2020-05-12 13:59:22][DEBUG] : EXEC COMMAND / $exec = PW?
[2020-05-12 13:59:22][DEBUG] : EXECUTE TELNET RESULT : PWSTANDBY
[2020-05-12 13:59:22][DEBUG] : CLOSING CONNECTION
[2020-05-12 13:59:22][DEBUG] : CLOSED

Voilà pour le moment :slight_smile: .

Bizarre ce comportement :thinking:

Pourrais-tu tester en supprimant et recréant ton équipement ? (si ce n’est pas trop galère pour toi).

Concernant les logs en mode DEBUG, bizarre que l’API ne te retourne pas les mêmes infos pour tous tes players. Pour le coup c’est les infos côté HEOS en brut. J’utilise ensuite l’IP renseignée pour l’équipement en question pour récupérer le bon PID, sauf que là, l’API ne renvoie pas l’IP pour ton enceinte « Maman ». Je vais ajouter la possibilité de rechercher par le nom peut-être, cela réglerait ton problème.

EDIT : une nouvelle version avec le possibilité de chercher avec le nom est dispo (attention à la casse) :wink:

Alors merci, en ajoutant le nom en plus, il me retourne bien le PID et c’est intégré.

Je ferai plus de tests demain si j’ai le temps.

Encore merci ! :slight_smile:

Alors, je viens de mettre à jour ton plugin, et comme l’autre fois, il me met une erreur :

[MySQL] Error code : 23000 (1062). Duplicate entry '11-Mute' for key 'unique' : INSERT INTO `cmd` SET `id` = :id, `logicalId` = :logicalId, `generic_type` = :generic_type, `eqType` = :eqType, `name` = :name, `order` = :order, `type` = :type, `subType` = :subType, `eqLogic_id` = :eqLogic_id, `isHistorized` = :isHistorized, `unite` = :unite, `configuration` = :configuration, `template` = :template, `display` = :display, `value` = :value, `isVisible` = :isVisible, `alert` = :alert

L’enceinte « Maman », qui n’était pas reconnue sans le nom et qui l’a été ensuite en le rajoutant, ne fonctionne pas en fait. La liste des favoris ne s’affiche pas et rien ne se joue. Dans les logs il y a :

[2020-05-14 18:39:53][DEBUG] : BEGIN executeCommand / $cmd = get_favoris
[2020-05-14 18:39:53][DEBUG] : CONNECTED (IP : 192.168.1.33, PORT : 1255)
[2020-05-14 18:39:53][DEBUG] : EXEC COMMAND / $exec = heos://browse/browse?sid=1028
[2020-05-14 18:39:53][DEBUG] : RESULT : {"heos": {"command": "browse/browse", "result": "fail", "message": "eid=8&text=User not logged in&sid=1028"}}
[2020-05-14 18:39:53][DEBUG] : CLOSING CONNECTION
[2020-05-14 18:39:53][DEBUG] : CLOSED
[2020-05-14 18:39:53][DEBUG] : END executeCommand

Et oui, j’ai bien rentré mes identifiants, plusieurs fois, les même qu’avec les autre enceintes.

EDIT :
Bon, je viens de tout supprimer, désactiver et désinstaller le plugin, puis le réinstaller… et là, c’est le drame. Il ne me trouve plus rien du tout ! Et les logs ne sont pas bavards :

[2020-05-14 18:54:24][DEBUG] : START TRYING TO GET PID : 192.168.1.17
[2020-05-14 18:54:24][DEBUG] : STOP TRYING TO GET PID

Et ce, que je mettre le nom ou pas, ça ne change rien :frowning: .

Mince alors c’est vraiment bizarre ce comportement chez toi. J’ai testé la même manip (suppression, désinstallation, réinstallation) et je récupère bien mon player.

Tu es sur quelle version de Jeedom ?
V3 ou V4 ?

Tous tes players sont à jour et fonctionnent correctement avec l’application Heos ?

Je suis sur la v4 et oui tous les appareils sont bien à jour et fonctionnent bien avec Heos. Ils fonctionnent aussi avec tout ce qui gère le dlna. Il fonctionnement également avec Home Assistant.

Un conflit avec un autre plugin ? J’y ai pensé. Mais je n’ai presque rien : Heos, Camera, CloudCync Pro, Mail et Nut-free. Je ne les ai pas encore désactivé pour tester.

EDIT :
Alors, j’ai tout désactivé et laissé uniquement Heos, idem. J’ai redémarré le demon et depuis j’ai ça qui tourne en boucle dans les logs :

[2020-05-15 12:03:50][DEBUG] : power_state  : -4
[2020-05-15 12:03:50][DEBUG] : RECEIPT :

Et toujours le même résultat quand je veux rentrer un appareil.

Puis j’ai désinstallé et réinstallé Heos. Toujours pareil. Rien.

Ton log semble en effet indiquer qu’il ne reçoit strictement rien.
Tu as toujours le port 23 et 1255 de configurer dans la configuration du plugin ?

Le démon est OK ?

le power_state -4 nous indique que la commande PW? en telnet (port 23) ne renvoie rien (normalement elle renvoie l’état soit PWON ou PWSTANDBY).

C’est comme si ton player n’était plus joignable !!

Tu es certain de l’IP utilisée ?
Peux-tu débrancher électriquement ton player puis retester de zéro ?

Mea culpa. En effet, après avoir désactivé puis désinstallé/réinstallé le plugin, j’avais complètement zappé de remettre les valeurs 1255 et 23 dans la configuration. (D’ailleurs, pourquoi ne pas les mettre par défaut ?)

Donc là, ça refonctionne comma avant.

Après pas mal de tests ce matin, voici mes retours :

  • L’enceinte « Maman » en wifi a toujours besoin que je rentre le nom pour avoir le PID.

  • Une fois branchée par câble, ça fonctionne sans le nom.

  • Si je mets le nom avant la recherche du PID, il me met qu’il ne trouve rien. Donc pour que ce soit plus clair, il faudrait que tu fasses comprendre que le remplissage du nom ne doit se faire uniquement si la recherche du PID par l’IP ne fonctionne pas.

  • J’ai une troisième enceinte du même type, qui elle aussi nécessite l’ajout du nom (en wifi, pas essayé par câble)

  • Avec la « Maman », impossible d’accéder aux favoris (oui les identifiants et mdp sont bons, je les ai rentrés plusieurs fois et même copié/collé des autres). Dans les logs :

[2020-05-16 11:08:33][DEBUG] : BEGIN executeCommand / $cmd = get_favoris
[2020-05-16 11:08:33][DEBUG] : CONNECTED (IP : 192.168.1.33, PORT : 1255)
[2020-05-16 11:08:33][DEBUG] : EXEC COMMAND / $exec = heos://browse/browse?sid=1028
[2020-05-16 11:08:33][DEBUG] : RESULT : {"heos": {"command": "browse/browse", "result": "fail", "message": "eid=8&text=User not logged in&sid=1028"}}
[2020-05-16 11:08:33][DEBUG] : CLOSING CONNECTION
[2020-05-16 11:08:33][DEBUG] : CLOSED
[2020-05-16 11:08:33][DEBUG] : END executeCommand

Ensuite sur les widgets.

  • Quand je lance la lecture sur une enceinte, les 4 widgets indiquent « Lecture en cours ». Mais le son ne sort que par l’enceinte demandée.
  • Les infos (jaquette, nom, etc) ne s’affichent qu’une fois sur… beaucoup !
  • Quand le lance une lecture sur une autre enceinte, ça fonctionne. Mais comme il est écrit sur chaque widget « Lecture en cours », on ne peut pas savoir quel appareil est réellement en lecture ou pas.
  • Quand je stoppe la lecture sur une des enceintes, c’est un autre widget (pas toujours le même…) qui affiche « stop ».
  • Quand l’AVR est associé à un groupe, il ne démarre pas.
  • Parfois, quand je veux créer un groupe à partir de l’AVR, il me m’affiche que lui-même, aucune autre enceinte. (Je n’ai pas réussi à déterminer le schéma pour reproduire cette réaction). Et il ne démarre pas non plus. Je dois appuyer sur l’icône « On/Off » pour le mettre en route.
  • Quand, dans un groupe, je mets en pause une enceinte non leader, ça stoppe toutes les enceintes.
  • Quand une enceinte est dans un groupe, non leader, on peut toujours créer un groupe où est elle leader. Ne devrait-on pas avoir des infos disant qu’elle fait déjà parti d’un groupe, voire pouvoir ajouter d’autres enceintes à ce groupe ?

Voilà pour le moment. Merci pour ton travail :slight_smile: .

Pour la recherche du PID, la règle est la suivante :

  • L’adresse IP est obligatoire
  • Le nom est facultatif

La recherche s’effectue d’abord avec IP. Si elle ne donne pas de résultat, on cherche à nouveau avec le nom cette fois.

Si un nom est saisi mais que la recherche par IP remonte une info, le nom ne sert donc à rien et sera dans tous les cas mis à jour grâce aux infos récupérée.

Quant à savoir pourquoi certaines de tes enceintes nécessitent le nom, impossible de savoir, seul la marque pourrait le dire.

Malheureusement, pour les associations avec plusieurs enceintes je n’ai jamais pu tester car je n’ai qu’un ampli chez moi. Je ne sais pas trop comment réagit l’API du coup.
J’avais fait ces ajouts à l’époque à l’aveugle pour un membre du forum.

Si tu es en mesure de faire quelques commandes Telnet, ça pourrait m’aider à y voir plus clair en mode multiroom. Tu saurais faire ça ?

EDIT : j’ai fait une petite MAJ du plugin en ajoutant un contrôle du PID avant de mettre à jour les infos en me disant que peut-être les infos sont envoyées à tous les players en même temps…à voir si ça change quelque chose chez toi…

Ok, merci.

Depuis ta dernière mise à jour, je ne sais pas si c’est lié, mais ça marche uniquement avec l’IP, pour toutes les enceintes… Tant mieux :slight_smile: .

Si je peux te donner un coup de main, c’est volontiers ! N’hésite pas à demander pour des tests en multiroom. Avec telnet, je pense que j’arriverai à me débrouiller :slight_smile: .

Alors c’est beaucoup mieux ! Les widgets liés aux enceintes inactives ne changent plus d’état et restent bien à « stop ».
En revanche, une fois la lecture démarrée, le bon widget affiche bien « Lecture en cours », mais aucune info n’est affichée : pas de jaquette, de titre ni quoi que ce soit. Et quand on stoppe la lecture, ça continue d’afficher « Lecture en cours », bien que ça stoppe la lecture. En fait, c’est comme si une fois la lecture débutée il n’y avait plus aucune remontée d’info.

Bon il y a du mieux c’est en bonne voie !

J’ai fait une nouvelle MAJ qui modifie un peu la manière de récupérer les favoris (une sombre histoire de SID que je pensais fixe). Il faut par contre refaire un petit « Récupérer le PID » sur chaque équipement.

Peux-tu tester et me dire si désormais les favoris sont accessibles sur tous tes players ?

J’ai fait la mise à jour, j’ai refait « Récupérer le PID » sur chaque équipement, mais ça ne change rien. Celui qui n’arrivait pas à accéder aux favoris ne le peut toujours pas.

Pour le player sur lequel ça ne fonctionne pas, peux-tu refaire « Récupérer le PID » avec les logs en niveau Debug et m’envoyer ce qui génère STP

Voici les logs quand je récupère le PID :

[2020-05-17 09:42:53][DEBUG] : START TRYING TO GET PID : 192.168.1.33
[2020-05-17 09:42:53][DEBUG] : CONNECTED TO 192.168.1.33:1255, SENDING GET PLAYER COMMAND
[2020-05-17 09:42:53][DEBUG] : GET PLAYER RETURN : {"heos": {"command": "player/get_players", "result": "success", "message": ""}, "payload": [{"name": "Cuisine", "pid": -2055348700, "model": "HEOS 1", "version": "1.544.240", "ip": "192.168.1.17", "network": "wifi", "lineout": 0}, {"name": "Maman", "pid": -16157161, "model": "HEOS 1", "version": "1.544.240", "ip": "192.168.1.33", "network": "wifi", "lineout": 0}, {"name": "Salon", "pid": 109422636, "model": "Denon AVR-X2400H", "version": "1.544.240", "ip": "192.168.1.11", "network": "wired", "lineout": 0, "serial": "ALV36170606861"}]}
[2020-05-17 09:42:53][DEBUG] : PID FOUND WITH IP METHOD : -16157161
[2020-05-17 09:42:53][DEBUG] : TRYING TO GET SID FOR FAVORITES
[2020-05-17 09:42:53][DEBUG] : SID FOR FAVORITES FOUND : 1028
[2020-05-17 09:42:53][DEBUG] : STOP TRYING TO GET PID

Et les logs quand je veux récupérer les favoris :

[2020-05-17 09:46:36][DEBUG] : BEGIN executeCommand / $cmd = get_favoris
[2020-05-17 09:46:36][DEBUG] : CONNECTED (IP : 192.168.1.33, PORT : 1255)
[2020-05-17 09:46:36][DEBUG] : EXEC COMMAND / $exec = heos://browse/browse?sid=1028
[2020-05-17 09:46:36][DEBUG] : RESULT : {"heos": {"command": "browse/browse", "result": "fail", "message": "eid=8&text=User not logged in&sid=1028"}}
[2020-05-17 09:46:36][DEBUG] : CLOSING CONNECTION
[2020-05-17 09:46:36][DEBUG] : CLOSED
[2020-05-17 09:46:36][DEBUG] : END executeCommand

Au cas où, voici les log spour un lecteur avec lequel j’accède aux favoris :

[2020-05-17 09:49:36][DEBUG] : BEGIN executeCommand / $cmd = get_favoris
[2020-05-17 09:49:36][DEBUG] : CONNECTED (IP : 192.168.1.17, PORT : 1255)
[2020-05-17 09:49:36][DEBUG] : EXEC COMMAND / $exec = heos://browse/browse?sid=1028
[2020-05-17 09:49:36][DEBUG] : RESULT : {"heos": {"command": "browse/browse", "result": "success", "message": "sid=1028&returned=7&count=7"}, "payload": [{"container": "no", "mid": "s24875", "type": "station", "playable": "yes", "name": "France Inter", "image_url": "http://cdn-profiles.tunein.com/s24875/images/logoq.png?t=636443"}, {"container": "no", "mid": "s186332", "type": "station", "playable": "yes", "name": "RADIO CLASSIQUE BERGEM", "image_url": "http://cdn-radiotime-logos.tunein.com/s186332q.png"}, {"container": "no", "mid": "s116266", "type": "station", "playable": "yes", "name": "Irish Pub Radio (Ireland)", "image_url": "http://cdn-profiles.tunein.com/s116266/images/logoq.jpg?t=152525"}, {"container": "no", "mid": "s234601", "type": "station", "playable": "yes", "name": "Party und Apresski Radio", "image_url": "http://cdn-radiotime-logos.tunein.com/s234601q.png"}, {"container": "no", "mid": "s250282", "type": "station", "playable": "yes", "name": "Klassik Radio Piano (Germany)", "image_url": "http://cdn-radiotime-logos.tunein.com/s25028q.png"}, {"container": "no", "mid": "s132811", "type": "station", "playable": "yes", "name": "Calm Radio - Solo Piano %26 Guitar (Canada)", "image_url": "http://cdn-profiles.tunein.com/s132811/images/logoq.jpg"}, {"container": "no", "mid": "s51195", "type": "station", "playable": "yes", "name": "Whisperings: Solo Piano Radio (US)", "image_url": "http://cdn-radiotime-logos.tunein.com/s51195q.png"}], "options": [{"browse": [{"id": 20, "name": "Remove from HEOS Favorites"}]}]}
[2020-05-17 09:49:36][DEBUG] : CLOSING CONNECTION
[2020-05-17 09:49:36][DEBUG] : CLOSED
[2020-05-17 09:49:36][DEBUG] : END executeCommand

Ok, merci. Donc je pense vraiment que ça vient de ton player car tout est ok côté plugin (je voulais vérifier le SID).

Es-tu bien logué sur cette enceinte ?
Pas via le plugin, mais directement sur l’enceinte elle même ?

Je ne vois que ça qui pourrait bloqué, et il n’y a que comme ça que j’arrive à reproduire le problème sur mon ampli. je me déconnecte depuis l’ampli puis je relance l’affichage des favoris depuis le plugin.