Liste dans object MQTT pour commande - comment récupérer la valeur de l'option

Bonjour à Tous,
Je découvre MQTT, mosquitto (version 1.5.7) installé le RPI a coté de jeedom (v 4.0.61), j’utilise le plugin jmqtt (v 3.3.19).

J’ai un esp qui tourne avec Wled, paramétré avec le broker que jeedom utilise.
=> Tout est ok et remonte bien, je suis capable de commander l’esp avec l’API mqtt implémenté ds wled.

je voudrais avoir une liste déroulante pour sélectionner un preset sur l’esp.

Avec la création d’une commande type slider, pas de pb :


le log me retourne bien :

[INFO] : ← wled|wled/fe1634/api PL=12

Mais quand je veux mettre en place une liste déroulante :


plusieurs problèmes :

1/ en mettant dans les options :

pas moyen d’avoir le widget par défaut qui créé les options de la balise select.
J’ai contourné avec un widget code détourner de celui du core

Code widget
<div class="cmd cmd-widget reportModeHidden" data-type="action" data-subtype="select" data-template="default" data-cmd_id="#id#" data-cmd_uid="#uid#" data-version="#version#" data-eqLogic_id="#eqLogic_id#">
  <div class="title #hide_name#">
    <div class="cmdName">#name_display#</div>
  </div>
  <div class="content-xs">
    <select class="selectCmd">#listValue#</select>
  </div>
  <script>
    $(".cmd[data-cmd_uid=#uid#] .selectCmd").on('change', function () {
      jeedom.cmd.execute({id: '#id#', value: {select: $(this).value()}});      
    });
    
   $( document ).ready(function() {
     var str = "#listValue#";
     var elts = str.split(";");
     var sel = $(".cmd[data-cmd_uid=#uid#] .selectCmd");
     sel.empty();     
     elts.forEach(function(element){
       var el = element.split("|");
       sel.append('<option value="'+el[0]+'">'+el[1]+'</option>');
     }); 
	});
  </script>
</div>

2/ Comment récupérer la valeur sélectionnée?? quel tag faut il mettre dans la « Valeur »??
Pour un curseur => #slider#, pour une couleur => #color#, mais pour une liste??
J’ai tenté #value#, #select#, #selected#, #list#, #option#, …

la commande est lancée par :
jeedom.cmd.execute({id: '#id#', value: {select: $(this).value()}});
un log dans la console me retourne bien la bonne valeur de l’option,
mais la commande dans les log me retourne :

[INFO] : ← wled|wled/fe1634/api PL=#option#

ou tout autre tag essayé.

Je n’ai pas réussi à trouver dans la doc le bon tag, les sujets pointent généralement vers l’utilisation de liste dans les virtuels.

Merci
BB

C’est #select# le bon tag.

Merci Seb,

Mais ça a fait parti des test, et avec

j’obtiens : >

[2020-10-08 14:17:19][INFO] : ← wled|wled/fe1634/api PL=#select#

Doit y avoir un truc louche avec l’implementation du type select dans un objet jMQTT

Ok, alors je me suis permis d’aller voir le code,
dans /plugins/jMQTT/core/class/jMQTTCmd.class.php

j’ai rajouté deux lignes (à la 186ième ) dans la fonction execute dans le switch qui vérifie les sous types :

 public function execute($_options = null) {

      [....] 
        switch ($this->getSubType()) {
            case 'slider':
                $request = str_replace('#slider#', $_options['slider'], $request);
                break;
           	case 'select':                                                          // ICI
                $request = str_replace('#select#', $_options['select'], $request);  // et ICI
                break;
            case 'color':
                $request = str_replace('#color#', $_options['color'], $request);
                break;
            case 'message':
                if ($_options != null)  {
                    $replace = array('#title#', '#message#');
                    $replaceBy = array($_options['title'], $_options['message']);
                    if ( $_options['title'] == '') {
                        throw new Exception(__('Le sujet du message ne peut pas être vide', __FILE__));
                    }
                    $request = str_replace($replace, $replaceBy, $request);
                }
                break;
        }
[...] le reste

et la le #select# est bien reporté.
Bon ça ne résout pas le pb de l’affichage du widget par défaut du select.

@domotruc, je me permets de te tagger, y’a une raison pour ne pas avoir implémenté le select directement et déléguer à un virtuel ?

ah m***e, la situation n’a pas l’air d’avoir évoluée, pas plus de connexion.

J’espère que c’est un manque de temps pris par autre chose…

1 « J'aime »

Bonjour @Bben j’ai deux questions :

  • Comment a tu configurer jmqtt avec wled? C’est la première fois je j’utilise ce plugin et wled, j’aimerai faire l’integration avec jeedom :slight_smile:
  • Est ce que tu as réussi à récupérer la liste des effets ?

Merci

Salut scutum2

Tu peux utiliser le plugin MQTT de lunarok, qui doit être maintenu.

J’avais installé le broker mosquitto en amont, mais je ne sais plus comment, je me demande même si ce n’est pas dans les dépendances d’un autre plugin assez usuel.
Ca s’installe assez facilement (par exemple)

Pour wled, tu as dans la conf « utiliser MQTT », il ne te reste plus qu’à paramétrer les infos de connexion au broker.

Wled n’envoi que peu d’info par le broker, et n’en réceptionne que peux également. la liste des effets n’en font pas partie. donc tu ne remontra pas celle-ci par ce moyen.

J’ai un PR/fork avec la remontée des clicks du bouton sur mqtt pour l’intégrer mieux à la domotique, mais faut compiler.

super, merci pour les infos :slight_smile:

je viens de voir qu’il ya moyen de récupérer la liste des effets en appelant l api json JSON API · Aircoookie/WLED Wiki · GitHub par contre je n ai pas encore vu comment savoir quel effet a été sélectionné…