Commandes exécutées plusieurs fois à chaque clic sur la télécommande du dashboard

Bonjour

J’ai créé une télécommande pour ma TV Samsung avec des boutons qui appellent les commandes du plugin TvDomSamsung (SendKey avec KEY_VOLUP, KEY_CHDOWN, etc.).
Dans ce dashboard j’ai 4 équipements Telecommande (telco) : TV, Ampli, etc..

Symptôme

Sur le dashboard, un seul appui sur un bouton exécute la commande plusieurs fois : VOL+ monte le volume de plusieurs crans, PROG+ fait défiler plusieurs chaînes.

Avec l’aide de Claude

Diagnostic

La classe PHP (telco.class.php) n’est pas en cause : telcoCmd::execute() exécute l’action une seule fois. Le problème vient du template du widget core/template/dashboard/custom.html, dont le script se termine par :

$('.telco .cmd').on('click', function() {
    jeedom.cmd.execute({id: $(this).data('cmd_id')});
});

Le sélecteur .telco .cmd est global à la page. Chaque widget telco affiché exécute ce script et attache un gestionnaire de clic à tous les boutons telco de la page, pas seulement aux siens. Avec N widgets, chaque bouton a N gestionnaires, donc N exécutions par clic. Les gestionnaires s’accumulent aussi quand un widget est rafraîchi.

Vérification dans la console du navigateur (F12) sur le dashboard :

$._data($('.telco .cmd')[0], 'events').click.length

Chez moi le résultat était 4 au lieu de 1.

Le template multimedia.html n’est pas concerné, car il cible .button_#id#, propre à chaque équipement.

Solution

Dans plugins/telco/core/template/dashboard/custom.html, remplacer le bloc <script> final par :

<script>
    $(function() {
      var $widget = $('#id_#id#');
      $widget.find('.telco .cmd').off('click.telco').on('click.telco', function() {
          jeedom.cmd.execute({id: $(this).data('cmd_id')});
      });
      $('.telco custom_telco').children('i').addClass('fa-2x')
    });
</script>

Le gestionnaire est limité au widget courant (#id_#id# est remplacé par l’id de l’équipement, comme dans le CSS du même fichier), et le off('click.telco') évite l’empilement lors d’un rafraîchissement.

Ensuite : ouvrir et re-sauvegarder chaque équipement telco, puis Ctrl+F5 sur le dashboard. La commande de la console renvoie alors 1, et un appui = une seule exécution.

Remarques

  • Le fichier core/template/mobile/custom.html contient le même script et doit avoir le même défaut (je ne l’ai pas testé).
  • La modification sera écrasée par une mise à jour du plugin, donc pensez à garder une copie.
  • @ZygOm4t1k : peut-être une correction à intégrer dans le plugin ?

Bonne journée,

Informations Jeedom Atlas

Core : 4.6.1 (master)
OS : Debian GNU/Linux 11 (bullseye) (aarch64)
PHP : 7.4.33

Plugin : Telecommande (telco)
Version 2026-08-03 01:21:12 (stable)

Salut

merci pour le retour.

J’avais fixé sur Telejee mais pas pensé à Télécommandes

Ce sera dispo demain

Super, je regarde demain.
Merci :grin:

Bonsoir
Nouvelle version installée et testée : cela fonctionne = plus de commandes répétées.
Merci

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.