Bouton caché/affiché en fonction d'une info

Salut,

Tu peux ajouter un bloc code dans ton scénario pour rendre la commande action non visible si l’état que tu souhaites contrôler est à 1.

Exemple avec la commande 120 :

cmd::byId(120)->setIsVisible(0)->save();
1 « J'aime »

Sans bloc code, dans un scénario il est possible d’utiliser dans le bloc action « Activer/Désactiver Masquer/Afficher un équipement ».

Et même directement à partir des options d’une commande de type info on peut utiliser dans l’onglet configuration à la partie « Action sur valeur », ajouter une action et et rentrer « equipement ». Pour les commandes de type action, c’est « Action après exécution de la commande » qui peut servir de la même manière.

Bonjour Seb21, pourrais-tu me mettre un exemple de cette solution ?
Merci d’avance

1 « J'aime »

Par exemple faire quelque chose de ce genre sur l’état du module :

A voir après pour le faire ré-apparaître.

La limitation de « Action sur valeur » c’est qu’on ne peut définir qu’une condition. Pour le faire sur plusieurs valeurs, il faut passer par un scénario déclenché par la commande.

1 « J'aime »

Merci pour l’exemple. Je l’ai mis en pratique et j’ai encore des questions par rapport à cela. Si je travaille avec Visible/Masquer, il faut faire un Refresh de l’écran pour que la commande apparaisse/disparaisse.

J’ai ensuite essayé avec Activer/Désactiver et, dans ce cas, la commande reste toujours visible mais j’ai un message système si la commande est inactive.

Je préfèrerais que cela fonction avec le Visible/Masquer mais sans devoir, pour cela, rafraichir mon écran (sauf si c’est en automatique).

Aurais-tu une solution à me proposer ?

Stephan

Je n’utilise pas trop les design, du coup je ne sais pas vraiment. Dans les actions il y a aussi « Aller au design », peut-être que ça peut servir à rafraichir. Tiens regarde là : Refresh d’un design après activation/désactivation d’un équipement

En bloc code, j’ai :

eqLogic::byId(id)->refreshWidget();

Bonjour,

Vous voyez tous trop compliqué je trouve.

Il faut un virtuel avec:

  • une commande info calculant un état de cette fameuse alarme.
  • Une commande action « off » qui a comme valeur la commande état de ce virtuel (classique quoi)
  • Pas de bouton « on » (ou alors on décoche la case « visible » de la commande)

=> le bouton off sera caché si l’état est à 0 et visible si l’état est à 1 (comme pour tout les boutons « switch » sous jeedom) et c’est tout, pas besoin de scénario, de bloc code ou que sais-je :sunglasses:

Et bien sûr en action sur le bouton off (action avant ou après exécution par exemple) on peut déclencher le scénario ou la commande voulu dans le premier post.

Re,

J’ai créé un module virtuel appelé PAC - TEST BTN affiché_caché (je changerai le nom après). Le module qui génère l’alarme s’appelle PAC - Contact erreur et l’action que je dois faire pour effectuer le reset est l’action Chaufferie du module PAC - Alarme

Voici les écrans de ma commande virtuelle:




Quand je vais dans le dashboard, la commande OFF est affichée que je sois en alarme ou pas



C’est identique sur mon design
image
image

Que n’ais-je pas compris (ou mal interprété) dans ta solution ?

Stephan

Ici il faut choisir la commande etat plutot que « aucune » sinon jeedom ne sait pas que la commande doit prendre cette valeur et que donc l’affichage doit dépendre de cette valeur:
image

et pas de rapport avec l’affichage mais j’ai un doute que ceci fonctionne:
image
lorsque vous cliquez sur le bouton, est-ce que cela fait l’action voulue?

J’ai fait la modification mais cela ne change rien à l’affichage, le bouton apparaît toujours quelque soit le statut du contact erreur

Cela fonctionne très bien, l’action est bel et bien lancée.

Hello,
perso j’utilise pas mal de widget qui s’affiche si état ON sur différents design et j’utilise un virtuel qui récupère l’état :


et je lui applique un widget perso dans la conf:

et le widget info juste sur le ON


et voila si je l’applique sur le off pour démo

image

image

Oui, c’est ce que je proposais de faire mais j’ai mal expliqué apparemment :slight_smile:

@Droopy Et est-ce que la commande etat à la bonne valeur?

Il faut peut-être essayer avec un autre widget type BinaryDefault. Le widget par défaut ne cache rien. Et si ça marche pas, changer le nom off par on pour si c’est pas inversé.

Oui je pense , avec quelque screen ça aide a mieux comprendre :slightly_smiling_face: j’en ai tellement des widgets qui s’affiche que je sais plus ou ils se cache sur les design

Yes, cela fonctionne avec BinaryDefault :slight_smile: :slight_smile: :slight_smile:

image
image

Voilà le résultat avec le widget personnalisé
image
image

Merciiiiiiiiiiiiiiiii

Bonjour Bison,
Merci pour cette commande, qui me resservira sans aucun doute (et que je ne connaissais pas…)
Mais je viens de l’essayer et…
Elle fonctionne effectivement sur le Dashboard, mais pas sur un Design ! (je viens d’essayer sur une commande de type Information que j’aurais aimer cacher dans certain cas)

Je me permet de reprendre la question de base, car elle me parait très intéressante.

  1. Effectivement, il y a une astuce en passant par un Widget (que j’utilise déjas) mais…
  2. Dans l’immense majorité des programmes / sur-couche permettant de programmer facilement des écran (comme ici les Design) ils y a souvent une « case » : « Variable d’affichage », qui permet d’afficher ou non, une ligne, image, information, commande, etc.

Ainsi:
a. Dans une prochaine version de Jeedom : Serait-il facile ou difficile d’ajouter, dans les paramètres d’une action ou d’une information cette fameuse case « Afficher » ?? Qui permet de gérer très facilement un affichage en fonction du résultat d’un test booléen (Info X = 1 / Info X > Y / etc…)
(ici en bref :


)

b. Existe-t-il déja une manière de faire (moins accessible) via un bloc code (dans un scénario), ou… autres chose ?

Salut,

Je tenterai de trouver un moyen pour que ce soit possible sur un design, je ne savais pas que ça n’était pas pris en compte.

Sinon je suis bien d’accord cette gestion dynamique manque et je n’ai pas la réponse à tes questions mais je vais essayer de creuser ce sujet.

Je suis intéressé aussi

bonjour
tu as en php le setisvisible qui marche « scénario code défini plus haut » mais pour le fun une méthode (b) une methode js
avec le plug htmldisplay qui va définir tous les ‹ #id ›
La lampes affiche ou cache le bouton 2 de la Vmc

tu as via dashboard et design bouton présent ou non
Sans-titre5

<span id="pipo">observe lampes</span>
<div id="report#id#">
</div>
<script>
let id_surveil#id# = 76;
let id_hide#id# = 85;  
  
  // la fonction à effectuer
  
 function maFonction#id#(la_valeur)
 {
   
              if (la_valeur == 1 ) {
               $('.cmd[data-cmd_id="'+id_hide#id#+'"]').css("visibility", "hidden");                   
       } else {
               $('.cmd[data-cmd_id="'+id_hide#id#+'"]').css("visibility", "visible");                   

       }   
 }
  
//vérification si l'id surveillance est visible sur l'écran
      if ($("div[data-cmd_id="+id_surveil#id#+"]").length == 1){
// oui donc on surveille son update
var elem#id# = '.cmd[data-cmd_id="'+id_surveil#id#+'"]';
var targetNode#id# = document.querySelector(elem#id#);

// Options de l'observateur (quelles sont les mutations à observer)
var config#id# = { attributes: true, childList: true };

var execute#id# = function() {
jeedom.cmd.execute({ id: id_surveil#id#, success:  function(valeur_courante) {
  $('#report#id#').text(valeur_courante); 

   maFonction#id#(valeur_courante); 

       }
				})
};  
// Créé une instance de l'observateur lié à la fonction de callback
var observer#id# = new MutationObserver(execute#id#);

// Commence à observer le noeud cible pour les mutations précédemment configurées
observer#id#.observe(targetNode#id#, config#id#);
  

    } else { // non donc on utilise l'api
     
  jeedom.cmd.update[id_surveil#id#] = function(_options){
			jeedom.cmd.execute({ id: id_surveil#id#, success:  function(valeur_courante) {
  $('#report#id#').text(valeur_courante); 

   maFonction#id#(valeur_courante);
                   
				}})   
   }; 
      jeedom.cmd.update[id_surveil#id#](); 

      
   }; 

</script>