Problème avec 1er template et jeedom.cmd.update

Je continue la mise en place de mon plugin et je rencontre une difficulté pour concernant la mise à jour d’un de mes boutons.

Il s’agit du bouton pour muter le son. Mon souhait est de changer l’apparence du bouton en fonction de l’état de la commande mute (on ou off).

Mon bouton ressemble à ça :

<a class="mute cmd noRefresh" data-cmd_id="#mute_id#" onclick="jeedom.cmd.execute({id: #mute_id#});"><i class="fa fa-volume-off"></i></a>

Ensuite, dans le js, j’ai le code suivant :

jeedom.cmd.update['#mute_state_id#']=function(_options){
    if(_options.display_value == "on") {
      $("a[data-cmd_id='#mute_id#']").empty().append('<i class="fa fa-volume-up fa-2">');
      $("a[data-cmd_id='#mute_id#']").css('background-color', "rgba(255,255,255,0.5)");
    } else {           
      $("a[data-cmd_id='#mute_id#']").empty().append('<i class="fa fa-volume-off fa-2">');
      $("a[data-cmd_id='#mute_id#']").css("background-color", "transparent");
    }
  };

C’est la que mon problème se présente car le js ne semble pas pris en compte.
Je vois pourtant bien passer la mise à jour de la commande via la console dev du navigateur (358 étant l’ID correspondant à #mute_state_id#) :

 "state": "ok",
    "result": {
        "datetime": 1559742440.9022,
        "result": [
            {
                "datetime": 1559742440.8861,
                "name": "cmd::update",
                "option": {
                    "cmd_id": "358",
                    "value": "off",
                    "display_value": "off",
                    "valueDate": "2019-06-05 15:47:20",
                    "collectDate": "2019-06-05 15:47:20",
                    "alertLevel": "none"
                }
            }

Après plusieurs essais je ne vois pas ce qui cloche. Une idée ?:thinking:

dans ton execute tu fais un $eqLogic->refreshWidget(); ?

Oui, j’ai bien le refreshWidget(). Le raffraichissement des infos du widget fonctionne bien. Par exemple si j’insère un simple #mute_state# dans mon html et que j’agit sur le bouton, le statut change bien dynamiquement. Par contre le bouton lui ne change jamais d’apparence.

dans le cmd.update si tu fais un console.log(_options) ?

et pourquoi pas jeedom.cmd.update[’#id#’] d’ailleurs ?

1 « J'aime »

J’ai aussi pensé au console.log mais il ne donne rien, à croire que la fonction n’est jamais appelée.

Ma commande étant mute_state, c’est pout ça que mon update est jeedom.cmd.update[’#mute_state_id#’].

Lorsque je regarde la page générée par jeedom, j’ai bien jeedom.cmd.update[‹ 358 ›] avec 358 qui correspond à la bonne commande.

Essaye quand meme ?

jeedom.cmd.update['#mute_id#']=function(_options){

Même constat :expressionless:

Tu as une class noRefresh sur ta commande, je pense ca aide pas

Je me suis fait la reflexion quand j’ai posté mon code, mais l’enlever n’a rien changé.
Je tourne en rond ^^

Met de la log dan la fonction pour voir si ça passe bien dans la fonction

Justement, c’est ce que je disais à kiboost, le fonction n’a pas l’air d’être appelée.
J’ai utilisé le classique console.log la la fonction js et je n’est rien dans la console.

Et si tu liste toute les fonctions jeedom.cmd.update tu la voix ?

Qu’entends-tu par « lister » les fonctions ?

Dans F12 console tu tape jeedom.cmd.update

En effet, la commande a l’air d’être présente (358 étant bien le mute_state_id).
Le résultat de la commande est le suivant :

(359) [empty × 358, ƒ]
358: ƒ (_options)
length: 359
__proto__: Array(0)

Ok j’ai compris tu as mis dans l’id HTML un id différents du code js. Jeedom arrive ne trouve pas de commande cmd HTML et pour éviter de trop charger le navigateur il ne lance pas la maj car pour lui pas de commande

Ok je comprend mieux, merci pour ton éclairage.
Mon problème est le data-cmd_id="#mute_id#" de mon bouton qui devrait plutôt être data-cmd_id="#mute_state_id#".

Je viens de faire le test, il y a en effet du mieux, mais il doit encore me manquer un truc.

Désormais, lorsque je clique sur mon bouton, je passe bien dans la fonction (le console.log s’exécute bien) et l’espace de quelques instants mon nouveau style s’applique bien puis se réinitialise.

EDIT : Je viens de trouver, si je comprend bien (il serait temps ^^), si dans mon JS j’utilise jeedom.cmd.update pour mettre à jour une donnée, pas la peine de mettre dans ma classe php $eqLogic->refreshWidget().

Je viens de le retirer de mon bout de code qui gère la MAJ de ma commande avec un checkAndUpdateCmd et tout à l’air de bien fonctionner désormais.
J’ai bon cette fois ? :slight_smile:

Oui c’est bien ça ya pas besoin de refraichir tous le widget vu que la commande se met a jour automatiquement

Parfait :+1:

J’y vois plus clair, merci pour ton aide !

Une nouvelle question sur cette mise à jour de donnée depuis le widget.

Est-ce qu’un checkAndUpdateCmd utilisé dans la fonction execute de la classe cmd devrait pouvoir mettre à jour les données sur le widget en étant récupéré via jeedom.cmd.update ?

Ou la fonction checkAndUpdateCmd n’a d’effet que lorsqu’elle est utilisée dans la classe eqLogic ?

Merci d’avance pour vos lumières ! :wink: