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.htmlcontient 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)