Problème Widget V4 sur action ON et action OFF

bonjour, rencontre un problème pour la mise en place d’un widget V4 de type « action » → « default »
inspiré de : cmd.action.other.Multi-action-Defaut que l’on trouve partout dans les pages de cette rubrique.

<div style="min-width:90px;min-height:62px;" class="cmd tooltips cmd-widget cursor #history#" data-type="action" data-subtype="other" data-cmd_id="#id#" data-cmd_uid="#uid#" data-version="#version#" data-eqLogic_id="#eqLogic_id#">
    <!-- Info Widget
		Basé sur les widget de 	: 
		Mise à jour 			: JAG 20191125 : Ajout Temps depuis dernière action
	-->
    <center>
        <div class="title #hide_name#">
            <div class="cmdName">#valueName#</div>
        </div>
        <div class="content-sm ">
            <span class="imgCmd imgCmd#id#"></span>
        </div>
        <div class="value">
            <span class="timeCmd label label-default timeCmd#id#" data-type="info" data-cmd_id="#value_id#"></span>
        </div>
    </center>
    <script>
        jeedom.cmd.update['#id#'] = function(_options) {
            // Paramètrage du logo
            // Valeur du logo
            var srcImglogo = ('#logo#' != '#' + 'logo#') ? "#logo#" : "";
            var srcImglogo_T = ('#logo_type#' != '#' + 'logo_type#') ? "#logo_type#" : "png";
            // Paramétrage des images
            if (srcImglogo == "") {
                // Variable Image pour Valeur : ON ou 1
                var srcImglogoON = ('#logoON#' != '#' + 'logoON#') ? "#logoON#" : "di_day"; // nom image à changer
                var srcImglogoON_T = ('#logoON_type#' != '#' + 'logoON_type#') ? "#logoON_type#" : "png";
                // Variable Image pour Valeur : OFF ou 0
                var srcImglogoOFF = ('#logoOFF#' != '#' + 'logoOFF#') ? "#logoOFF#" : "di_night"; // nom image à changer
                var srcImglogoOFF_T = ('#logoOFF_type#' != '#' + 'logoOFF_type#') ? "#logoOFF_type#" : "png";
            } else {
                // Variable Image pour Valeur : ON ou 1
                var srcImglogoON = srcImglogo + '_on';
                var srcImglogoON_T = srcImglogo_T;
                // Variable Image pour Valeur : OFF ou 0
                var srcImglogoOFF = srcImglogo + '_off';
                var srcImglogoOFF_T = srcImglogo_T;
            };

            // Paramètre "sizeh" & "sizew"
            var srcImgHeight = is_numeric('#sizeh#') ? parseFloat('#sizeh#') : 80;
            var srcImgWidth = is_numeric('#sizew#') ? parseFloat('#sizew#') : 80;
            // Type de taille
            var srcImgpourcent = ('#Pourcentage#' != '#' + 'Pourcentage#') ? "#Pourcentage#" : "NO";
            if (srcImgpourcent == "NO") {
                var srcImgSize = 'height=' + srcImgHeight + 'px width=' + srcImgWidth + 'px';
            } else if (srcImgpourcent == "YES") {
                var srcImgSize = 'height=' + srcImgHeight + '% width=' + srcImgWidth + '%';
            }
            // Paramétrage des images
            var srcFolder = ('#dossier#' != '#' + 'dossier#') ? "#dossier#" : "divers"; // nom dossier image à changer
            if (srcFolder == 'NULL') {
                var srcImgURL = "data/customTemplates/dashboard/cmd.action.other.Multi-action-Defaut/";
            } else {
                var srcImgURL = "data/customTemplates/dashboard/cmd.action.other.Multi-action-Defaut/" + srcFolder + '/';
            };

            // Affichage durée changement dernier etat  !!! il faut ajouter une commande après le widget => logoTime => duree pour avoir Time widget
            var srcImglogoTime = '#logoTime#';
            //Update
            if (_options.display_value == '1' || _options.display_value == 1 || _options.display_value == '99' || _options.display_value == 99 || _options.display_value == 'on') {
                if (jeedom.cmd.normalizeName('#name#') == 'on') {
                    $('.cmd[data-cmd_id=#id#]').hide();
                } else {
                    $('.cmd[data-cmd_id=#id#]').show();
                    $('.cmd[data-cmd_id=#id#] .imgCmd#id#').empty().append('<img src="' + srcImgURL + srcImglogoON + '.' + srcImglogoON_T + '" ' + srcImgSize + '>');
                }
            } else {
                if (jeedom.cmd.normalizeName('#name#') == 'off') {
                    $('.cmd[data-cmd_id=#id#]').hide();
                } else {
                    $('.cmd[data-cmd_id=#id#]').show();
                    $('.cmd[data-cmd_id=#id#] .imgCmd#id#').empty().append('<img src="' + srcImgURL + srcImglogoOFF + '.' + srcImglogoOFF_T + '" ' + srcImgSize + '>');
                }
            }

            // Affichage durée changement dernier etat
            // Derniere durée changement dernier etat
            //Merci @Salvialf pour le code
            if (srcImglogoTime == "duree") {
                $('.cmd[data-cmd_id=#id#] .timeCmd#id#').show();
                jeedom.cmd.displayDuration(_options.valueDate, $('.cmd[data-cmd_id=#id#] .timeCmd#id#'));
            } else if (srcImglogoTime == "date") {
                $('.cmd[data-cmd_id=#id#] .timeCmd#id#').show();
                var srcdate = new Date(_options.valueDate);
                var srcformat = $.datepicker.formatDate('D dd/mm', srcdate);
                var srctime = "à " + srcdate.getHours() + ":" + (srcdate.getMinutes() < 10 ? '0' : '') + srcdate.getMinutes();
                $('.cmd[data-cmd_id=#id#] .timeCmd#id#').empty().html(srcformat + ' ' + srctime);
            } else if (srcImglogoTime == "heure") {
                $('.cmd[data-cmd_id=#id#] .timeCmd#id#').show();
                var srcdate = new Date(_options.valueDate);
                var srctime = "à " + srcdate.getHours() + ":" + (srcdate.getMinutes() < 10 ? '0' : '') + srcdate.getMinutes() + ":" + (srcdate.getSeconds() < 10 ? '0' : '') + srcdate.getSeconds() + "";
                $('.cmd[data-cmd_id=#id#] .timeCmd#id#').empty().html(srctime);
            };
        }
        jeedom.cmd.update['#id#']({
            display_value: '#state#',
            valueDate: '#valueDate#',
            collectDate: '#collectDate#',
            alertLevel: '#alertLevel#'
        });
        $('.cmd[data-cmd_uid=#uid#] .imgCmd#id#').off().on('click', function() {
            jeedom.cmd.execute({
                id: '#id#'
            });
        });
    </script>
</div>

j’essaye de l’appliquer à un module sonoff mini installé via le plugin « ewejee »
pour mes test j’utilise soit directement le module sonoff mini qui est nommé sur la photo ci-dessous en « Lumière » en « 1 »
soit un virtuel qui est nommé « Lumière Salon » en « 2 » sur la photo

le widget « cmd.action.other.Multi-action-Defaut.html » est bien installé dans le bon répertoire, accompagné de son répertoire comprenant toutes les icônes
je précise que j’utilise ce widget sur d’autre actions et il fonctionne très bien…

le problème que je n’arrive pas à expliquer ni à contourner est le suivant
sur le module la commande « on » envoi un ordre « on » et pareil pour le « off », jusque là tout est logique
voir photo des commandes ci-dessous

dès que j’applique le widget : « cmd.action.other.Multi-action-Defaut.html » sur le paramètre de commande du « ON » id234
tout se passe bien j’ai bien l’icône du « ON » qui se transforme en image demandée par le widget !

là ou tout se gâte c’est quand j’applique ce même widget « cmd.action.other.Multi-action-Defaut.html » sur le paramètre de la commande « OFF » id235
la commande « OFF » disparaît et il ne reste que la commande « ON » avec l’icône du widget bien présente et qui du coup ne permet que de faire un « ON »… et plus de « OFF »

ma question est… quel est le problème ?, j’utilise le bon widget ???

merci pour vote aide
bon confinement

Salut,

J’ai pas tout lu mais pour les équipements issus du plugin ewejee il faut passer par un virtuel dans cette idée:

@Salvialf
merci je teste dans la foulée et je te dis.

Salut,

Merci pour ta réponse, qui m’interpelle du coup :grin:

Tu peux me dire pourquoi ça ne fonctionne pas ? Car le statut n’est pas binaire ?

Ça m’embête d’obliger les utilisateurs a faire des virtuels pour faire un widget …

Je précise que les widget et moi ça fait deux…

Salut,

J’ai jamais trop eu l’occasion de creuser la question c’est juste à force d’avoir les remontées j’ai fait le rapprochement.

En fait pour que le toggle d’icone se fasse, il faut que les noms des commandes action soient normalisés (OK) et que les 2 commandes action soient liées à une commande info/binaire qui se charge de conserver le dernier état.

Exactement de cette manière (enfin pas tout à fait car c’est une info/binaire (0 ou 1) pas autre):
https://jeedom.github.io/plugin-virtual/fr_FR/#tocAnchor-1-4-1

@Salvialf
le résultat est le même un seul bouton dans le virtuel

Heu ça part contre c’est normal c’est même le but du widget. Si la lumière est éteinte il ne sert à rien d’afficher le bouton Off. Par contre si tu allumes la lumière la commande ON doit être remplacée par OFF non ?

justement non l’icone ne change pas, que je re-clique dessus, ou que je fasse un « off », l’icone reste sur « on », seul le statut change… je ne peux donc qu’allumer la lampe

Ok…

Tu peux partager une copie d’écran de la liste des commandes du virtuel stp?

comme ça ? :

Merci d’avoir répondu, je vais voir pour faire un changement sur les commandes alors.

Je vois ça ce soir après le boulot, je te tiens au courant @darkmoon

Info binaire pas autre et dans les menus déroulants sous le nom des commandes action il faut sélectionner la commande info

oui mais dans ce cas là je ne récupère que le « statut »… ça j’y arrive sans virtuel

Pas compris… Bref moi je te donnes la solution tu en fais ce que tu veux ou pas…

ben j’ai compris que tu me demande de créer une info virtuelle à la place d’une action virtuelle… c’est bien ça ?

Rien dit de tel…

Dans ton virtuel la commande info est en sous-type « autre ». Il faut la passer en binaire.

A gauche sous le nom de chacune des 2 commandes action il y a un menu déroulant actuellement sur « Aucune ». Il faut sélectionner « Statut » qui correspond au nom de la commande info.

Conformément à la doc du plugin virtuel mentionnée plus haut:
https://jeedom.github.io/plugin-virtual/fr_FR/#tocAnchor-1-4-1

oui comme ça l’icône change bien d’état… excuse moi, j’avais mal interprété…
donc mon problème est « à moitié » résolu… car au final le but recherché est d’avoir 2 boutons

1 « On » avec une icône et 1 « Off » avec une autre icône
mais avec une image.png, pas les icônes de jeedom, d’où ma recherche d’un widget
merci encore pour ton aide.

ps: c’est juste pour éviter de passer par un virtuel

Bah c’est le but du widget que tu avais sélectionné.

Aucun besoin de virtuel ou de widget perso pour ce que tu veux.
Pour afficher 2 icônes il ne faut pas que les commandes soient nommées on & off il suffit donc de les renommer et d’appliquer un widget créé via le menu outils/widgets de la v4 en choisissant la même icône pour on/off (donc un widget pour la commande on et 1 pour la commande off)

ha ben pour le coup, je pouvez chercher, comme tu viens de dire il faut renommer la commande « on » en « on1 » (par exemple), pareil pour le « off » et ça marche :+1:

sans passer par un virtuel … !

Merci @Salvialf et @Foulek57 pour votre patience.
bon confinement et longue vie au forum !

edit: petite précision sur le fait de changer le nom des commandes « on » et « off » en « on1 » et « off1 »
si on les manipules via un bloc code PHP la commande devient :

"#[Salon][Lumiere][off1]#" ou "#[Salon][Lumiere][on1]#"

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