Ce Forum passera en lecture seule en janvier 2020
Image
Merci de vous rendre sur https://community.jeedom.com maintenant pour vos prochains postes ;)

Conflit entre plusieurs widgets identiques sur un même virtuel

Réservé à l'utilisation et la création de widgets dans JEEDOM
Avatar de l’utilisateur
gdelaune
Timide
Messages : 28
Inscription : 03 janv. 2019, 09:10

Conflit entre plusieurs widgets identiques sur un même virtuel

Message par gdelaune » 05 sept. 2019, 21:10

Bonjour à tous,

Je suis en train de m'arracher les cheveux sur un sujet qui a l'air simple. J'ai créé un widget qui contient deux boutons (pour activer un espeasy) et du texte:
Capture1.JPG
Capture1.JPG (46.01 Kio) Consulté 194 fois

Code : Tout sélectionner

<div class="cmd cmd-widget reportModeHidden" data-type="action" data-subtype="message" data-cmd_id="#id#" data-cmd_uid="#uid#" data-version="#version#" data-eqLogic_id="#eqLogic_id#" style="width: 130px;">
  <div style="font-family: Arial;font-size: 12px">#tache_esp#</div>
  <div>
    <span class='btn btn-success btn-xs' id="b_off#uid#">OFF</span>
    <span class='btn btn-success btn-xs' id="b_auto#uid#">AUTO</span>
  </div>
  <script>
    function configure_esp (etat) {
      var xmlHttp = new XMLHttpRequest();
      xmlHttp.onreadystatechange = function() { 
        if (xmlHttp.readyState == 4 && xmlHttp.status == 200) alert("transmission OK");
      }
      xmlHttp.open("GET", "http://#ip_esp#/control?cmd=config,task,#tache_esp#,setstatus,"+etat, true); // true for asynchronous 
      xmlHttp.send(null);
      alert("Configuration envoyée à #ip_esp# tâche #tache_esp#: "+etat);
    }
    document.getElementById("b_off#id#").onclick = function () { configure_esp(0); };
    document.getElementById("b_auto#id#").onclick = function () { configure_esp(1); };
  </script>
</div>

Je crée ensuite un virtuel utilisant deux fois ce widget (une fois pour le thermostat, et une autre pour l'hygrostat):
Capture1.JPG
Capture1.JPG (46.01 Kio) Consulté 194 fois
Avec les configurations d'affichage suivantes pour chaque widget:
Capture1.JPG
Capture1.JPG (46.01 Kio) Consulté 194 fois
Idem pour l'hygromètre, adresse Ip idendique et le tache_esp vaut "Hygrostat".

Le visuel est correct (je le posterai dans un prochain message car je suis coincé au niveau des images jointes).

Que j'appuie sur les commandes du thermostat ou de l'hygrostat, les commandes sont envoyées systématiquement vers l'hygrostat, et ce malgré le #uid# mis dans l'id de chaque bouton pour rendre le nom unique.

Qu'est-ce que j'ai raté, sachant que je n'ai volontairement pas inclu le code permettant le rafraichissement du widget (depuis la V3) car je n'en ai pas besoin. Je pense que le problème vient de mon widget, et non du virtuel.
Merci d'avance!
Pièces jointes
Capture3.JPG
Capture3.JPG (90.59 Kio) Consulté 194 fois
Capture2.JPG
Capture2.JPG (61.44 Kio) Consulté 194 fois

Avatar de l’utilisateur
gdelaune
Timide
Messages : 28
Inscription : 03 janv. 2019, 09:10

Re: Conflit entre plusieurs widgets identiques sur un même virtuel

Message par gdelaune » 05 sept. 2019, 21:14

Voici le visuel du virtuel :
Capture5.JPG
Capture5.JPG (7.25 Kio) Consulté 182 fois

Avatar de l’utilisateur
cadavor
Actif
Messages : 1284
Inscription : 21 juin 2015, 22:00
Localisation : 34

Re: Conflit entre plusieurs widgets identiques sur un même virtuel

Message par cadavor » 06 sept. 2019, 13:22

Pour moi ta fonction configure_esp est écrasée par le deuxieme widget qui contient donc l'ip et la tache du second.
Il vaudrait mieux passer ces informations en paramètre également ou alors un peu mieux déclarer une fonction nommée avec l'id du widget
configure_esp#id# pour être sur de ne pas être écrasé par les widgets suivants.

Dans les faits, il serait, à mon humble avis, judicieux de ne pas mettre d'action dans un widget (d'autant plus vu l'évolution de cette partie dans la V4 de Jeedom avec la disparition en partie des widgets custom)
Le mieux serait de créer un script (plugin du même nom) qui s'occupe d'effectuer l'envoi de la requête et de lier le bouton à l'exécution de cette commande de script.
Jeedom Stable 3.3
NUC Z83 + Aeotec Z-Stick Gen5
Z-Wave FGR + FGMS + FGDS + FGFS + FGK + FGWPE + ZW062 + ZW080
GH Mini + Orvibo AllOne + Playbulb + Miband2

Avatar de l’utilisateur
gdelaune
Timide
Messages : 28
Inscription : 03 janv. 2019, 09:10

Re: Conflit entre plusieurs widgets identiques sur un même virtuel

Message par gdelaune » 06 sept. 2019, 14:07

Ah, ok je vois ce que tu veux dire: j'obtiens au final deux fonctions configure_esp dans la même "page".

Je vais faire ça en deux temps, tout d'abord ta première méthode avec le #id# intégré au nom de la fonction, puis par script comme tu l'as dit avec le plugin script.
Sachant que je suis plus doué pour le python ou le shell que pour le HTML, javascript ou PHP ça devrait bien m'arranger en plus.
Merci pour tes conseils, je te tiens au courant.

Avatar de l’utilisateur
gdelaune
Timide
Messages : 28
Inscription : 03 janv. 2019, 09:10

Re: Conflit entre plusieurs widgets identiques sur un même virtuel

Message par gdelaune » 06 sept. 2019, 14:54

Bingo, c'est bien la fonction dupliquée qui pose problème.

Du coup j'ai plus de temps maintenant pour me pencher sur le plugin script.
Merci!

Répondre

Revenir vers « [Plugin officiel] Widgets »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité