Valeur d'une autre commande que celle en cours en JS dans un Widget (Action par rapport à multi états)

Bonjour,

Je galère depuis plusieurs heures / jours sur mon problème, peut être que vous aurez une idée éclairée!

-Objectif: Changer le visuel d’un bouton en fonction de la l’état d’une autre commande (lorsqu’il serait équivalent à l’état de la commande de référence)

-Solution envisagée: passer a chaque commande susceptible de changer d’apparence, la #commande_status# de référence à vérifier, puis dans le code spécifique du widget, j’affecte une nouvelle classe CSS

-Problème: Je n’arrive pas à récupérer la valeur de la commande de référence dans mon JS, tout en « restant? » dans le code du widget du bouton en cours. (j’ai mis dans mon code les valeurs de débug pour mieux comprendre)

Code du widget :
Ce que je souhaite: Si la valeur de la commande #commande_status# = au #display_name#, alors j’affecte a mon bouton la classe « bouton_selection »

Remarque: je passe par l’ID de la commande car c’est la seule syntax que j’ai trouvé sur le forum, pour utiliser le [objet][equipement][commande] j’aitrouvé la syntax que en PHP, or dans les widgets de ce que j’ai compris, c’est JS, pas de PHP possible.

<div class="cmd cmd-widget reportModeHidden" data-type="action" data-subtype="other" data-template="default" data-cmd_id="#id#" data-cmd_uid="#uid#" data-version="#version#" data-eqLogic_id="#eqLogic_id#">
  <div class="content-xs" id="my_id#uid#">
    <a class="btn btn-sm btn-default action tooltips">#name_display#</a>
  </div>
  <script>

    var commande_status = "#commande_status#";
    var my_name = '#name_display#';
    my_name.replace("/", "");
    my_name.replace(" ", "");
    console.log("Bouton en cours:"+ my_name + "| Cmd de référence: " + commande_status + "|");
    //==> Boutons Ok, Cmd Ok
    
    //Récupération de la valeur de la commande de référence
    jeedom.cmd.update[commande_status] = function(_options){
		jeedom.cmd.execute({ // Récupération de la valeur  
			id: commande_status,
			success:  function(resultat) {
              console.log("Resultat :"+ resultat + "| my_name:" + my_name +"|");
              //==> Résultat est ok 
              //==> my_name est KO, valeur identique tous boutons
              check_value(resultat);
    		}
		})   
	};
    
    jeedom.cmd.update[commande_status]();
    
    //Comparaison de la commande de référence avec le bouton en cours
    function check_value(my_value) { 
      var my_status = my_value.replace(" ", "");
      my_status = my_status.replace("/", "");

      console.log("Status de référence:"+ my_status + "| Bouton:" + my_name + "|");
      // ==> Référence Ok
      // ==> Bouton Ko, valeur identique tous boutons
       if (my_status == my_name) {
           set_selected();
       }
    }
        
    //Affectation d'une nouvelle classe
    function set_selected() {
      var my_div = document.getElementById("my_id#uid#");
      my_div.classList.add("bouton_selection"); 
    }      
    
      
    $('.cmd[data-cmd_uid=#uid#]:last .action').off('click').on('click', function () {
      jeedom.cmd.execute({id: '#id#'});
    });
    
    if ($('.cmd[data-cmd_uid=#uid#]').last().prev().data('subtype') != undefined && $('.cmd[data-cmd_id=#id#]').last().prev().data('subtype') != 'other'
    && $('.cmd[data-cmd_uid=#uid#]').last().prev().css('display') != 'block') {
      $('.cmd[data-cmd_uid=#uid#]').last().prepend('<br/>');
    }
    
    if("#name#" != '#name_display#'){
      $('.cmd[data-cmd_uid=#uid#]:last .action').attr('title',"#name#")
    }
       
  </script>
</div>

Remarque: Le Widget de Salvialf 3State bien que super, ne convient pas à mon besoin qui est plus « basique » et sans animations graphiques (juste des boutons, et des images), et qui ne se base pas sur des sliders. Au passage, merci Salvialf pour tous tes Widget que j’utilise bcp!

Bonne journée,
Dapolux

bonjour

c’est JS, pas de PHP possible.

tu peux faire du php aussi
exemple sommaire
retrouvé grâce au coeur donné

Bonjour et Merci pour ton retour,

Je viens de faire le test (du coup j’ai utilisé directement le php de l’api jeedom), et malheureusement ça ne marche pas mieux, la valeur du bouton « my_name » est toujours la même, peu importe le bouton dans lequel le code est sensé l’exécuter.

Au passage, je suppose qu’il n’y a pas de tag pour l’ip, et pour la clef API, soit je la met en dure, soit je la passe en paramètre.

<div class="cmd cmd-widget reportModeHidden" data-type="action" data-subtype="other" data-template="default" data-cmd_id="#id#" data-cmd_uid="#uid#" data-version="#version#" data-eqLogic_id="#eqLogic_id#">
  <div class="content-xs" id="my_id#uid#">
    <a class="btn btn-sm btn-default action tooltips">#name_display#</a>
  </div>
  <script>

    var commande_status = "#commande_status#";
    var my_name = '#name_display#';
    my_name.replace("/", "");
    my_name.replace(" ", "");
    console.log("Bouton en cours:"+ my_name + "| Cmd de référence: " + commande_status + "|");
    //==> Boutons Ok, Cmd Ok
    
    /*
    //Récupération de la valeur de la commande de référence
    jeedom.cmd.update[commande_status] = function(_options){
		jeedom.cmd.execute({ // Récupération de la valeur  
			id: commande_status,
			success:  function(resultat) {
              console.log("Resultat :"+ resultat + "| my_name:" + my_name +"|");
              //==> Résultat est ok 
              //==> my_name est KO, valeur identique tous boutons         
              check_value(resultat);
    		}
		})   
	};
    
    jeedom.cmd.update[commande_status]();
    */
    
    //Test code php
    var debut_url = "monip.../core/api/jeeApi.php?apikey=maclef...&id=" 
    var url_php = debut_url + commande_status  
    
    $(document).ready(function(){
            $.ajax({
                type: 'POST',
                url: url_php,
                success: function(data) {
            		check_value(data);
                }
            });
	});   
    
    //Comparaison de la commande de référence avec le bouton en cours
    function check_value(my_value) { 
      var my_status = my_value.replace(" ", "");
      my_status = my_status.replace("/", "");

      console.log("Status de référence:"+ my_status + "| Bouton:" + my_name + "|");
      // ==> Référence Ok
      // ==> Bouton Ko, valeur identique tous boutons
       if (my_status == my_name) {
           set_selected();
       }
    }
        
    //Affectation d'une nouvelle classe
    function set_selected() {
      var my_div = document.getElementById("my_id#uid#");
      my_div.classList.add("bouton_selection"); 
    }      
    
      
    $('.cmd[data-cmd_uid=#uid#]:last .action').off('click').on('click', function () {
      jeedom.cmd.execute({id: '#id#'});
    });
    
    if ($('.cmd[data-cmd_uid=#uid#]').last().prev().data('subtype') != undefined && $('.cmd[data-cmd_id=#id#]').last().prev().data('subtype') != 'other'
    && $('.cmd[data-cmd_uid=#uid#]').last().prev().css('display') != 'block') {
      $('.cmd[data-cmd_uid=#uid#]').last().prepend('<br/>');
    }
    
    if("#name#" != '#name_display#'){
      $('.cmd[data-cmd_uid=#uid#]:last .action').attr('title',"#name#")
    }
       
  </script>
</div>

il y a tous un tas de chose que je ne sais pas faire

j’essaierai de regarder se soir